]> Git Repo - qemu.git/blob - hw/sd/sd.c
qed: Implement .bdrv_drain
[qemu.git] / hw / sd / sd.c
1 /*
2  * SD Memory Card emulation as defined in the "SD Memory Card Physical
3  * layer specification, Version 1.10."
4  *
5  * Copyright (c) 2006 Andrzej Zaborowski  <[email protected]>
6  * Copyright (c) 2007 CodeSourcery
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in
16  *    the documentation and/or other materials provided with the
17  *    distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
27  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #include "hw/hw.h"
33 #include "sysemu/block-backend.h"
34 #include "hw/sd/sd.h"
35 #include "qemu/bitmap.h"
36
37 //#define DEBUG_SD 1
38
39 #ifdef DEBUG_SD
40 #define DPRINTF(fmt, ...) \
41 do { fprintf(stderr, "SD: " fmt , ## __VA_ARGS__); } while (0)
42 #else
43 #define DPRINTF(fmt, ...) do {} while(0)
44 #endif
45
46 #define ACMD41_ENQUIRY_MASK 0x00ffffff
47
48 typedef enum {
49     sd_r0 = 0,    /* no response */
50     sd_r1,        /* normal response command */
51     sd_r2_i,      /* CID register */
52     sd_r2_s,      /* CSD register */
53     sd_r3,        /* OCR register */
54     sd_r6 = 6,    /* Published RCA response */
55     sd_r7,        /* Operating voltage */
56     sd_r1b = -1,
57     sd_illegal = -2,
58 } sd_rsp_type_t;
59
60 enum SDCardModes {
61     sd_inactive,
62     sd_card_identification_mode,
63     sd_data_transfer_mode,
64 };
65
66 enum SDCardStates {
67     sd_inactive_state = -1,
68     sd_idle_state = 0,
69     sd_ready_state,
70     sd_identification_state,
71     sd_standby_state,
72     sd_transfer_state,
73     sd_sendingdata_state,
74     sd_receivingdata_state,
75     sd_programming_state,
76     sd_disconnect_state,
77 };
78
79 struct SDState {
80     uint32_t mode;    /* current card mode, one of SDCardModes */
81     int32_t state;    /* current card state, one of SDCardStates */
82     uint32_t ocr;
83     uint8_t scr[8];
84     uint8_t cid[16];
85     uint8_t csd[16];
86     uint16_t rca;
87     uint32_t card_status;
88     uint8_t sd_status[64];
89     uint32_t vhs;
90     bool wp_switch;
91     unsigned long *wp_groups;
92     int32_t wpgrps_size;
93     uint64_t size;
94     uint32_t blk_len;
95     uint32_t erase_start;
96     uint32_t erase_end;
97     uint8_t pwd[16];
98     uint32_t pwd_len;
99     uint8_t function_group[6];
100
101     bool spi;
102     uint8_t current_cmd;
103     /* True if we will handle the next command as an ACMD. Note that this does
104      * *not* track the APP_CMD status bit!
105      */
106     bool expecting_acmd;
107     uint32_t blk_written;
108     uint64_t data_start;
109     uint32_t data_offset;
110     uint8_t data[512];
111     qemu_irq readonly_cb;
112     qemu_irq inserted_cb;
113     BlockBackend *blk;
114     uint8_t *buf;
115
116     bool enable;
117 };
118
119 static void sd_set_mode(SDState *sd)
120 {
121     switch (sd->state) {
122     case sd_inactive_state:
123         sd->mode = sd_inactive;
124         break;
125
126     case sd_idle_state:
127     case sd_ready_state:
128     case sd_identification_state:
129         sd->mode = sd_card_identification_mode;
130         break;
131
132     case sd_standby_state:
133     case sd_transfer_state:
134     case sd_sendingdata_state:
135     case sd_receivingdata_state:
136     case sd_programming_state:
137     case sd_disconnect_state:
138         sd->mode = sd_data_transfer_mode;
139         break;
140     }
141 }
142
143 static const sd_cmd_type_t sd_cmd_type[64] = {
144     sd_bc,   sd_none, sd_bcr,  sd_bcr,  sd_none, sd_none, sd_none, sd_ac,
145     sd_bcr,  sd_ac,   sd_ac,   sd_adtc, sd_ac,   sd_ac,   sd_none, sd_ac,
146     sd_ac,   sd_adtc, sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none,
147     sd_adtc, sd_adtc, sd_adtc, sd_adtc, sd_ac,   sd_ac,   sd_adtc, sd_none,
148     sd_ac,   sd_ac,   sd_none, sd_none, sd_none, sd_none, sd_ac,   sd_none,
149     sd_none, sd_none, sd_bc,   sd_none, sd_none, sd_none, sd_none, sd_none,
150     sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_ac,
151     sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none,
152 };
153
154 static const int sd_cmd_class[64] = {
155     0,  0,  0,  0,  0,  9, 10,  0,  0,  0,  0,  1,  0,  0,  0,  0,
156     2,  2,  2,  2,  3,  3,  3,  3,  4,  4,  4,  4,  6,  6,  6,  6,
157     5,  5, 10, 10, 10, 10,  5,  9,  9,  9,  7,  7,  7,  7,  7,  7,
158     7,  7, 10,  7,  9,  9,  9,  8,  8, 10,  8,  8,  8,  8,  8,  8,
159 };
160
161 static uint8_t sd_crc7(void *message, size_t width)
162 {
163     int i, bit;
164     uint8_t shift_reg = 0x00;
165     uint8_t *msg = (uint8_t *) message;
166
167     for (i = 0; i < width; i ++, msg ++)
168         for (bit = 7; bit >= 0; bit --) {
169             shift_reg <<= 1;
170             if ((shift_reg >> 7) ^ ((*msg >> bit) & 1))
171                 shift_reg ^= 0x89;
172         }
173
174     return shift_reg;
175 }
176
177 static uint16_t sd_crc16(void *message, size_t width)
178 {
179     int i, bit;
180     uint16_t shift_reg = 0x0000;
181     uint16_t *msg = (uint16_t *) message;
182     width <<= 1;
183
184     for (i = 0; i < width; i ++, msg ++)
185         for (bit = 15; bit >= 0; bit --) {
186             shift_reg <<= 1;
187             if ((shift_reg >> 15) ^ ((*msg >> bit) & 1))
188                 shift_reg ^= 0x1011;
189         }
190
191     return shift_reg;
192 }
193
194 static void sd_set_ocr(SDState *sd)
195 {
196     /* All voltages OK, card power-up OK, Standard Capacity SD Memory Card */
197     sd->ocr = 0x80ffff00;
198 }
199
200 static void sd_set_scr(SDState *sd)
201 {
202     sd->scr[0] = 0x00;          /* SCR Structure */
203     sd->scr[1] = 0x2f;          /* SD Security Support */
204     sd->scr[2] = 0x00;
205     sd->scr[3] = 0x00;
206     sd->scr[4] = 0x00;
207     sd->scr[5] = 0x00;
208     sd->scr[6] = 0x00;
209     sd->scr[7] = 0x00;
210 }
211
212 #define MID     0xaa
213 #define OID     "XY"
214 #define PNM     "QEMU!"
215 #define PRV     0x01
216 #define MDT_YR  2006
217 #define MDT_MON 2
218
219 static void sd_set_cid(SDState *sd)
220 {
221     sd->cid[0] = MID;           /* Fake card manufacturer ID (MID) */
222     sd->cid[1] = OID[0];        /* OEM/Application ID (OID) */
223     sd->cid[2] = OID[1];
224     sd->cid[3] = PNM[0];        /* Fake product name (PNM) */
225     sd->cid[4] = PNM[1];
226     sd->cid[5] = PNM[2];
227     sd->cid[6] = PNM[3];
228     sd->cid[7] = PNM[4];
229     sd->cid[8] = PRV;           /* Fake product revision (PRV) */
230     sd->cid[9] = 0xde;          /* Fake serial number (PSN) */
231     sd->cid[10] = 0xad;
232     sd->cid[11] = 0xbe;
233     sd->cid[12] = 0xef;
234     sd->cid[13] = 0x00 |        /* Manufacture date (MDT) */
235         ((MDT_YR - 2000) / 10);
236     sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON;
237     sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1;
238 }
239
240 #define HWBLOCK_SHIFT   9                       /* 512 bytes */
241 #define SECTOR_SHIFT    5                       /* 16 kilobytes */
242 #define WPGROUP_SHIFT   7                       /* 2 megs */
243 #define CMULT_SHIFT     9                       /* 512 times HWBLOCK_SIZE */
244 #define WPGROUP_SIZE    (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
245
246 static const uint8_t sd_csd_rw_mask[16] = {
247     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
248     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
249 };
250
251 static void sd_set_csd(SDState *sd, uint64_t size)
252 {
253     uint32_t csize = (size >> (CMULT_SHIFT + HWBLOCK_SHIFT)) - 1;
254     uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
255     uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
256
257     if (size <= 0x40000000) {   /* Standard Capacity SD */
258         sd->csd[0] = 0x00;      /* CSD structure */
259         sd->csd[1] = 0x26;      /* Data read access-time-1 */
260         sd->csd[2] = 0x00;      /* Data read access-time-2 */
261         sd->csd[3] = 0x5a;      /* Max. data transfer rate */
262         sd->csd[4] = 0x5f;      /* Card Command Classes */
263         sd->csd[5] = 0x50 |     /* Max. read data block length */
264             HWBLOCK_SHIFT;
265         sd->csd[6] = 0xe0 |     /* Partial block for read allowed */
266             ((csize >> 10) & 0x03);
267         sd->csd[7] = 0x00 |     /* Device size */
268             ((csize >> 2) & 0xff);
269         sd->csd[8] = 0x3f |     /* Max. read current */
270             ((csize << 6) & 0xc0);
271         sd->csd[9] = 0xfc |     /* Max. write current */
272             ((CMULT_SHIFT - 2) >> 1);
273         sd->csd[10] = 0x40 |    /* Erase sector size */
274             (((CMULT_SHIFT - 2) << 7) & 0x80) | (sectsize >> 1);
275         sd->csd[11] = 0x00 |    /* Write protect group size */
276             ((sectsize << 7) & 0x80) | wpsize;
277         sd->csd[12] = 0x90 |    /* Write speed factor */
278             (HWBLOCK_SHIFT >> 2);
279         sd->csd[13] = 0x20 |    /* Max. write data block length */
280             ((HWBLOCK_SHIFT << 6) & 0xc0);
281         sd->csd[14] = 0x00;     /* File format group */
282         sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1;
283     } else {                    /* SDHC */
284         size /= 512 * 1024;
285         size -= 1;
286         sd->csd[0] = 0x40;
287         sd->csd[1] = 0x0e;
288         sd->csd[2] = 0x00;
289         sd->csd[3] = 0x32;
290         sd->csd[4] = 0x5b;
291         sd->csd[5] = 0x59;
292         sd->csd[6] = 0x00;
293         sd->csd[7] = (size >> 16) & 0xff;
294         sd->csd[8] = (size >> 8) & 0xff;
295         sd->csd[9] = (size & 0xff);
296         sd->csd[10] = 0x7f;
297         sd->csd[11] = 0x80;
298         sd->csd[12] = 0x0a;
299         sd->csd[13] = 0x40;
300         sd->csd[14] = 0x00;
301         sd->csd[15] = 0x00;
302         sd->ocr |= 1 << 30;     /* High Capacity SD Memory Card */
303     }
304 }
305
306 static void sd_set_rca(SDState *sd)
307 {
308     sd->rca += 0x4567;
309 }
310
311 /* Card status bits, split by clear condition:
312  * A : According to the card current state
313  * B : Always related to the previous command
314  * C : Cleared by read
315  */
316 #define CARD_STATUS_A   0x02004100
317 #define CARD_STATUS_B   0x00c01e00
318 #define CARD_STATUS_C   0xfd39a028
319
320 static void sd_set_cardstatus(SDState *sd)
321 {
322     sd->card_status = 0x00000100;
323 }
324
325 static void sd_set_sdstatus(SDState *sd)
326 {
327     memset(sd->sd_status, 0, 64);
328 }
329
330 static int sd_req_crc_validate(SDRequest *req)
331 {
332     uint8_t buffer[5];
333     buffer[0] = 0x40 | req->cmd;
334     buffer[1] = (req->arg >> 24) & 0xff;
335     buffer[2] = (req->arg >> 16) & 0xff;
336     buffer[3] = (req->arg >> 8) & 0xff;
337     buffer[4] = (req->arg >> 0) & 0xff;
338     return 0;
339     return sd_crc7(buffer, 5) != req->crc;      /* TODO */
340 }
341
342 static void sd_response_r1_make(SDState *sd, uint8_t *response)
343 {
344     uint32_t status = sd->card_status;
345     /* Clear the "clear on read" status bits */
346     sd->card_status &= ~CARD_STATUS_C;
347
348     response[0] = (status >> 24) & 0xff;
349     response[1] = (status >> 16) & 0xff;
350     response[2] = (status >> 8) & 0xff;
351     response[3] = (status >> 0) & 0xff;
352 }
353
354 static void sd_response_r3_make(SDState *sd, uint8_t *response)
355 {
356     response[0] = (sd->ocr >> 24) & 0xff;
357     response[1] = (sd->ocr >> 16) & 0xff;
358     response[2] = (sd->ocr >> 8) & 0xff;
359     response[3] = (sd->ocr >> 0) & 0xff;
360 }
361
362 static void sd_response_r6_make(SDState *sd, uint8_t *response)
363 {
364     uint16_t arg;
365     uint16_t status;
366
367     arg = sd->rca;
368     status = ((sd->card_status >> 8) & 0xc000) |
369              ((sd->card_status >> 6) & 0x2000) |
370               (sd->card_status & 0x1fff);
371     sd->card_status &= ~(CARD_STATUS_C & 0xc81fff);
372
373     response[0] = (arg >> 8) & 0xff;
374     response[1] = arg & 0xff;
375     response[2] = (status >> 8) & 0xff;
376     response[3] = status & 0xff;
377 }
378
379 static void sd_response_r7_make(SDState *sd, uint8_t *response)
380 {
381     response[0] = (sd->vhs >> 24) & 0xff;
382     response[1] = (sd->vhs >> 16) & 0xff;
383     response[2] = (sd->vhs >>  8) & 0xff;
384     response[3] = (sd->vhs >>  0) & 0xff;
385 }
386
387 static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
388 {
389     return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
390 }
391
392 static void sd_reset(SDState *sd)
393 {
394     uint64_t size;
395     uint64_t sect;
396
397     if (sd->blk) {
398         blk_get_geometry(sd->blk, &sect);
399     } else {
400         sect = 0;
401     }
402     size = sect << 9;
403
404     sect = sd_addr_to_wpnum(size) + 1;
405
406     sd->state = sd_idle_state;
407     sd->rca = 0x0000;
408     sd_set_ocr(sd);
409     sd_set_scr(sd);
410     sd_set_cid(sd);
411     sd_set_csd(sd, size);
412     sd_set_cardstatus(sd);
413     sd_set_sdstatus(sd);
414
415     g_free(sd->wp_groups);
416     sd->wp_switch = sd->blk ? blk_is_read_only(sd->blk) : false;
417     sd->wpgrps_size = sect;
418     sd->wp_groups = bitmap_new(sd->wpgrps_size);
419     memset(sd->function_group, 0, sizeof(sd->function_group));
420     sd->erase_start = 0;
421     sd->erase_end = 0;
422     sd->size = size;
423     sd->blk_len = 0x200;
424     sd->pwd_len = 0;
425     sd->expecting_acmd = false;
426 }
427
428 static void sd_cardchange(void *opaque, bool load)
429 {
430     SDState *sd = opaque;
431
432     qemu_set_irq(sd->inserted_cb, blk_is_inserted(sd->blk));
433     if (blk_is_inserted(sd->blk)) {
434         sd_reset(sd);
435         qemu_set_irq(sd->readonly_cb, sd->wp_switch);
436     }
437 }
438
439 static const BlockDevOps sd_block_ops = {
440     .change_media_cb = sd_cardchange,
441 };
442
443 static const VMStateDescription sd_vmstate = {
444     .name = "sd-card",
445     .version_id = 1,
446     .minimum_version_id = 1,
447     .fields = (VMStateField[]) {
448         VMSTATE_UINT32(mode, SDState),
449         VMSTATE_INT32(state, SDState),
450         VMSTATE_UINT8_ARRAY(cid, SDState, 16),
451         VMSTATE_UINT8_ARRAY(csd, SDState, 16),
452         VMSTATE_UINT16(rca, SDState),
453         VMSTATE_UINT32(card_status, SDState),
454         VMSTATE_PARTIAL_BUFFER(sd_status, SDState, 1),
455         VMSTATE_UINT32(vhs, SDState),
456         VMSTATE_BITMAP(wp_groups, SDState, 0, wpgrps_size),
457         VMSTATE_UINT32(blk_len, SDState),
458         VMSTATE_UINT32(erase_start, SDState),
459         VMSTATE_UINT32(erase_end, SDState),
460         VMSTATE_UINT8_ARRAY(pwd, SDState, 16),
461         VMSTATE_UINT32(pwd_len, SDState),
462         VMSTATE_UINT8_ARRAY(function_group, SDState, 6),
463         VMSTATE_UINT8(current_cmd, SDState),
464         VMSTATE_BOOL(expecting_acmd, SDState),
465         VMSTATE_UINT32(blk_written, SDState),
466         VMSTATE_UINT64(data_start, SDState),
467         VMSTATE_UINT32(data_offset, SDState),
468         VMSTATE_UINT8_ARRAY(data, SDState, 512),
469         VMSTATE_BUFFER_POINTER_UNSAFE(buf, SDState, 1, 512),
470         VMSTATE_BOOL(enable, SDState),
471         VMSTATE_END_OF_LIST()
472     }
473 };
474
475 /* We do not model the chip select pin, so allow the board to select
476    whether card should be in SSI or MMC/SD mode.  It is also up to the
477    board to ensure that ssi transfers only occur when the chip select
478    is asserted.  */
479 SDState *sd_init(BlockBackend *blk, bool is_spi)
480 {
481     SDState *sd;
482
483     if (blk && blk_is_read_only(blk)) {
484         fprintf(stderr, "sd_init: Cannot use read-only drive\n");
485         return NULL;
486     }
487
488     sd = (SDState *) g_malloc0(sizeof(SDState));
489     sd->buf = blk_blockalign(blk, 512);
490     sd->spi = is_spi;
491     sd->enable = true;
492     sd->blk = blk;
493     sd_reset(sd);
494     if (sd->blk) {
495         /* Attach dev if not already attached.  (This call ignores an
496          * error return code if sd->blk is already attached.) */
497         blk_attach_dev(sd->blk, sd);
498         blk_set_dev_ops(sd->blk, &sd_block_ops, sd);
499     }
500     vmstate_register(NULL, -1, &sd_vmstate, sd);
501     return sd;
502 }
503
504 void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
505 {
506     sd->readonly_cb = readonly;
507     sd->inserted_cb = insert;
508     qemu_set_irq(readonly, sd->blk ? blk_is_read_only(sd->blk) : 0);
509     qemu_set_irq(insert, sd->blk ? blk_is_inserted(sd->blk) : 0);
510 }
511
512 static void sd_erase(SDState *sd)
513 {
514     int i;
515     uint64_t erase_start = sd->erase_start;
516     uint64_t erase_end = sd->erase_end;
517
518     if (!sd->erase_start || !sd->erase_end) {
519         sd->card_status |= ERASE_SEQ_ERROR;
520         return;
521     }
522
523     if (extract32(sd->ocr, OCR_CCS_BITN, 1)) {
524         /* High capacity memory card: erase units are 512 byte blocks */
525         erase_start *= 512;
526         erase_end *= 512;
527     }
528
529     erase_start = sd_addr_to_wpnum(erase_start);
530     erase_end = sd_addr_to_wpnum(erase_end);
531     sd->erase_start = 0;
532     sd->erase_end = 0;
533     sd->csd[14] |= 0x40;
534
535     for (i = erase_start; i <= erase_end; i++) {
536         if (test_bit(i, sd->wp_groups)) {
537             sd->card_status |= WP_ERASE_SKIP;
538         }
539     }
540 }
541
542 static uint32_t sd_wpbits(SDState *sd, uint64_t addr)
543 {
544     uint32_t i, wpnum;
545     uint32_t ret = 0;
546
547     wpnum = sd_addr_to_wpnum(addr);
548
549     for (i = 0; i < 32; i++, wpnum++, addr += WPGROUP_SIZE) {
550         if (addr < sd->size && test_bit(wpnum, sd->wp_groups)) {
551             ret |= (1 << i);
552         }
553     }
554
555     return ret;
556 }
557
558 static void sd_function_switch(SDState *sd, uint32_t arg)
559 {
560     int i, mode, new_func, crc;
561     mode = !!(arg & 0x80000000);
562
563     sd->data[0] = 0x00;         /* Maximum current consumption */
564     sd->data[1] = 0x01;
565     sd->data[2] = 0x80;         /* Supported group 6 functions */
566     sd->data[3] = 0x01;
567     sd->data[4] = 0x80;         /* Supported group 5 functions */
568     sd->data[5] = 0x01;
569     sd->data[6] = 0x80;         /* Supported group 4 functions */
570     sd->data[7] = 0x01;
571     sd->data[8] = 0x80;         /* Supported group 3 functions */
572     sd->data[9] = 0x01;
573     sd->data[10] = 0x80;        /* Supported group 2 functions */
574     sd->data[11] = 0x43;
575     sd->data[12] = 0x80;        /* Supported group 1 functions */
576     sd->data[13] = 0x03;
577     for (i = 0; i < 6; i ++) {
578         new_func = (arg >> (i * 4)) & 0x0f;
579         if (mode && new_func != 0x0f)
580             sd->function_group[i] = new_func;
581         sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4);
582     }
583     memset(&sd->data[17], 0, 47);
584     crc = sd_crc16(sd->data, 64);
585     sd->data[65] = crc >> 8;
586     sd->data[66] = crc & 0xff;
587 }
588
589 static inline bool sd_wp_addr(SDState *sd, uint64_t addr)
590 {
591     return test_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
592 }
593
594 static void sd_lock_command(SDState *sd)
595 {
596     int erase, lock, clr_pwd, set_pwd, pwd_len;
597     erase = !!(sd->data[0] & 0x08);
598     lock = sd->data[0] & 0x04;
599     clr_pwd = sd->data[0] & 0x02;
600     set_pwd = sd->data[0] & 0x01;
601
602     if (sd->blk_len > 1)
603         pwd_len = sd->data[1];
604     else
605         pwd_len = 0;
606
607     if (erase) {
608         if (!(sd->card_status & CARD_IS_LOCKED) || sd->blk_len > 1 ||
609                         set_pwd || clr_pwd || lock || sd->wp_switch ||
610                         (sd->csd[14] & 0x20)) {
611             sd->card_status |= LOCK_UNLOCK_FAILED;
612             return;
613         }
614         bitmap_zero(sd->wp_groups, sd->wpgrps_size);
615         sd->csd[14] &= ~0x10;
616         sd->card_status &= ~CARD_IS_LOCKED;
617         sd->pwd_len = 0;
618         /* Erasing the entire card here! */
619         fprintf(stderr, "SD: Card force-erased by CMD42\n");
620         return;
621     }
622
623     if (sd->blk_len < 2 + pwd_len ||
624                     pwd_len <= sd->pwd_len ||
625                     pwd_len > sd->pwd_len + 16) {
626         sd->card_status |= LOCK_UNLOCK_FAILED;
627         return;
628     }
629
630     if (sd->pwd_len && memcmp(sd->pwd, sd->data + 2, sd->pwd_len)) {
631         sd->card_status |= LOCK_UNLOCK_FAILED;
632         return;
633     }
634
635     pwd_len -= sd->pwd_len;
636     if ((pwd_len && !set_pwd) ||
637                     (clr_pwd && (set_pwd || lock)) ||
638                     (lock && !sd->pwd_len && !set_pwd) ||
639                     (!set_pwd && !clr_pwd &&
640                      (((sd->card_status & CARD_IS_LOCKED) && lock) ||
641                       (!(sd->card_status & CARD_IS_LOCKED) && !lock)))) {
642         sd->card_status |= LOCK_UNLOCK_FAILED;
643         return;
644     }
645
646     if (set_pwd) {
647         memcpy(sd->pwd, sd->data + 2 + sd->pwd_len, pwd_len);
648         sd->pwd_len = pwd_len;
649     }
650
651     if (clr_pwd) {
652         sd->pwd_len = 0;
653     }
654
655     if (lock)
656         sd->card_status |= CARD_IS_LOCKED;
657     else
658         sd->card_status &= ~CARD_IS_LOCKED;
659 }
660
661 static sd_rsp_type_t sd_normal_command(SDState *sd,
662                                        SDRequest req)
663 {
664     uint32_t rca = 0x0000;
665     uint64_t addr = (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : req.arg;
666
667     /* Not interpreting this as an app command */
668     sd->card_status &= ~APP_CMD;
669
670     if (sd_cmd_type[req.cmd] == sd_ac || sd_cmd_type[req.cmd] == sd_adtc)
671         rca = req.arg >> 16;
672
673     DPRINTF("CMD%d 0x%08x state %d\n", req.cmd, req.arg, sd->state);
674     switch (req.cmd) {
675     /* Basic commands (Class 0 and Class 1) */
676     case 0:     /* CMD0:   GO_IDLE_STATE */
677         switch (sd->state) {
678         case sd_inactive_state:
679             return sd->spi ? sd_r1 : sd_r0;
680
681         default:
682             sd->state = sd_idle_state;
683             sd_reset(sd);
684             return sd->spi ? sd_r1 : sd_r0;
685         }
686         break;
687
688     case 1:     /* CMD1:   SEND_OP_CMD */
689         if (!sd->spi)
690             goto bad_cmd;
691
692         sd->state = sd_transfer_state;
693         return sd_r1;
694
695     case 2:     /* CMD2:   ALL_SEND_CID */
696         if (sd->spi)
697             goto bad_cmd;
698         switch (sd->state) {
699         case sd_ready_state:
700             sd->state = sd_identification_state;
701             return sd_r2_i;
702
703         default:
704             break;
705         }
706         break;
707
708     case 3:     /* CMD3:   SEND_RELATIVE_ADDR */
709         if (sd->spi)
710             goto bad_cmd;
711         switch (sd->state) {
712         case sd_identification_state:
713         case sd_standby_state:
714             sd->state = sd_standby_state;
715             sd_set_rca(sd);
716             return sd_r6;
717
718         default:
719             break;
720         }
721         break;
722
723     case 4:     /* CMD4:   SEND_DSR */
724         if (sd->spi)
725             goto bad_cmd;
726         switch (sd->state) {
727         case sd_standby_state:
728             break;
729
730         default:
731             break;
732         }
733         break;
734
735     case 5: /* CMD5: reserved for SDIO cards */
736         return sd_illegal;
737
738     case 6:     /* CMD6:   SWITCH_FUNCTION */
739         if (sd->spi)
740             goto bad_cmd;
741         switch (sd->mode) {
742         case sd_data_transfer_mode:
743             sd_function_switch(sd, req.arg);
744             sd->state = sd_sendingdata_state;
745             sd->data_start = 0;
746             sd->data_offset = 0;
747             return sd_r1;
748
749         default:
750             break;
751         }
752         break;
753
754     case 7:     /* CMD7:   SELECT/DESELECT_CARD */
755         if (sd->spi)
756             goto bad_cmd;
757         switch (sd->state) {
758         case sd_standby_state:
759             if (sd->rca != rca)
760                 return sd_r0;
761
762             sd->state = sd_transfer_state;
763             return sd_r1b;
764
765         case sd_transfer_state:
766         case sd_sendingdata_state:
767             if (sd->rca == rca)
768                 break;
769
770             sd->state = sd_standby_state;
771             return sd_r1b;
772
773         case sd_disconnect_state:
774             if (sd->rca != rca)
775                 return sd_r0;
776
777             sd->state = sd_programming_state;
778             return sd_r1b;
779
780         case sd_programming_state:
781             if (sd->rca == rca)
782                 break;
783
784             sd->state = sd_disconnect_state;
785             return sd_r1b;
786
787         default:
788             break;
789         }
790         break;
791
792     case 8:     /* CMD8:   SEND_IF_COND */
793         /* Physical Layer Specification Version 2.00 command */
794         switch (sd->state) {
795         case sd_idle_state:
796             sd->vhs = 0;
797
798             /* No response if not exactly one VHS bit is set.  */
799             if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) {
800                 return sd->spi ? sd_r7 : sd_r0;
801             }
802
803             /* Accept.  */
804             sd->vhs = req.arg;
805             return sd_r7;
806
807         default:
808             break;
809         }
810         break;
811
812     case 9:     /* CMD9:   SEND_CSD */
813         switch (sd->state) {
814         case sd_standby_state:
815             if (sd->rca != rca)
816                 return sd_r0;
817
818             return sd_r2_s;
819
820         case sd_transfer_state:
821             if (!sd->spi)
822                 break;
823             sd->state = sd_sendingdata_state;
824             memcpy(sd->data, sd->csd, 16);
825             sd->data_start = addr;
826             sd->data_offset = 0;
827             return sd_r1;
828
829         default:
830             break;
831         }
832         break;
833
834     case 10:    /* CMD10:  SEND_CID */
835         switch (sd->state) {
836         case sd_standby_state:
837             if (sd->rca != rca)
838                 return sd_r0;
839
840             return sd_r2_i;
841
842         case sd_transfer_state:
843             if (!sd->spi)
844                 break;
845             sd->state = sd_sendingdata_state;
846             memcpy(sd->data, sd->cid, 16);
847             sd->data_start = addr;
848             sd->data_offset = 0;
849             return sd_r1;
850
851         default:
852             break;
853         }
854         break;
855
856     case 11:    /* CMD11:  READ_DAT_UNTIL_STOP */
857         if (sd->spi)
858             goto bad_cmd;
859         switch (sd->state) {
860         case sd_transfer_state:
861             sd->state = sd_sendingdata_state;
862             sd->data_start = req.arg;
863             sd->data_offset = 0;
864
865             if (sd->data_start + sd->blk_len > sd->size)
866                 sd->card_status |= ADDRESS_ERROR;
867             return sd_r0;
868
869         default:
870             break;
871         }
872         break;
873
874     case 12:    /* CMD12:  STOP_TRANSMISSION */
875         switch (sd->state) {
876         case sd_sendingdata_state:
877             sd->state = sd_transfer_state;
878             return sd_r1b;
879
880         case sd_receivingdata_state:
881             sd->state = sd_programming_state;
882             /* Bzzzzzzztt .... Operation complete.  */
883             sd->state = sd_transfer_state;
884             return sd_r1b;
885
886         default:
887             break;
888         }
889         break;
890
891     case 13:    /* CMD13:  SEND_STATUS */
892         switch (sd->mode) {
893         case sd_data_transfer_mode:
894             if (sd->rca != rca)
895                 return sd_r0;
896
897             return sd_r1;
898
899         default:
900             break;
901         }
902         break;
903
904     case 15:    /* CMD15:  GO_INACTIVE_STATE */
905         if (sd->spi)
906             goto bad_cmd;
907         switch (sd->mode) {
908         case sd_data_transfer_mode:
909             if (sd->rca != rca)
910                 return sd_r0;
911
912             sd->state = sd_inactive_state;
913             return sd_r0;
914
915         default:
916             break;
917         }
918         break;
919
920     /* Block read commands (Classs 2) */
921     case 16:    /* CMD16:  SET_BLOCKLEN */
922         switch (sd->state) {
923         case sd_transfer_state:
924             if (req.arg > (1 << HWBLOCK_SHIFT))
925                 sd->card_status |= BLOCK_LEN_ERROR;
926             else
927                 sd->blk_len = req.arg;
928
929             return sd_r1;
930
931         default:
932             break;
933         }
934         break;
935
936     case 17:    /* CMD17:  READ_SINGLE_BLOCK */
937         switch (sd->state) {
938         case sd_transfer_state:
939             sd->state = sd_sendingdata_state;
940             sd->data_start = addr;
941             sd->data_offset = 0;
942
943             if (sd->data_start + sd->blk_len > sd->size)
944                 sd->card_status |= ADDRESS_ERROR;
945             return sd_r1;
946
947         default:
948             break;
949         }
950         break;
951
952     case 18:    /* CMD18:  READ_MULTIPLE_BLOCK */
953         switch (sd->state) {
954         case sd_transfer_state:
955             sd->state = sd_sendingdata_state;
956             sd->data_start = addr;
957             sd->data_offset = 0;
958
959             if (sd->data_start + sd->blk_len > sd->size)
960                 sd->card_status |= ADDRESS_ERROR;
961             return sd_r1;
962
963         default:
964             break;
965         }
966         break;
967
968     /* Block write commands (Class 4) */
969     case 24:    /* CMD24:  WRITE_SINGLE_BLOCK */
970         if (sd->spi)
971             goto unimplemented_cmd;
972         switch (sd->state) {
973         case sd_transfer_state:
974             /* Writing in SPI mode not implemented.  */
975             if (sd->spi)
976                 break;
977             sd->state = sd_receivingdata_state;
978             sd->data_start = addr;
979             sd->data_offset = 0;
980             sd->blk_written = 0;
981
982             if (sd->data_start + sd->blk_len > sd->size)
983                 sd->card_status |= ADDRESS_ERROR;
984             if (sd_wp_addr(sd, sd->data_start))
985                 sd->card_status |= WP_VIOLATION;
986             if (sd->csd[14] & 0x30)
987                 sd->card_status |= WP_VIOLATION;
988             return sd_r1;
989
990         default:
991             break;
992         }
993         break;
994
995     case 25:    /* CMD25:  WRITE_MULTIPLE_BLOCK */
996         if (sd->spi)
997             goto unimplemented_cmd;
998         switch (sd->state) {
999         case sd_transfer_state:
1000             /* Writing in SPI mode not implemented.  */
1001             if (sd->spi)
1002                 break;
1003             sd->state = sd_receivingdata_state;
1004             sd->data_start = addr;
1005             sd->data_offset = 0;
1006             sd->blk_written = 0;
1007
1008             if (sd->data_start + sd->blk_len > sd->size)
1009                 sd->card_status |= ADDRESS_ERROR;
1010             if (sd_wp_addr(sd, sd->data_start))
1011                 sd->card_status |= WP_VIOLATION;
1012             if (sd->csd[14] & 0x30)
1013                 sd->card_status |= WP_VIOLATION;
1014             return sd_r1;
1015
1016         default:
1017             break;
1018         }
1019         break;
1020
1021     case 26:    /* CMD26:  PROGRAM_CID */
1022         if (sd->spi)
1023             goto bad_cmd;
1024         switch (sd->state) {
1025         case sd_transfer_state:
1026             sd->state = sd_receivingdata_state;
1027             sd->data_start = 0;
1028             sd->data_offset = 0;
1029             return sd_r1;
1030
1031         default:
1032             break;
1033         }
1034         break;
1035
1036     case 27:    /* CMD27:  PROGRAM_CSD */
1037         if (sd->spi)
1038             goto unimplemented_cmd;
1039         switch (sd->state) {
1040         case sd_transfer_state:
1041             sd->state = sd_receivingdata_state;
1042             sd->data_start = 0;
1043             sd->data_offset = 0;
1044             return sd_r1;
1045
1046         default:
1047             break;
1048         }
1049         break;
1050
1051     /* Write protection (Class 6) */
1052     case 28:    /* CMD28:  SET_WRITE_PROT */
1053         switch (sd->state) {
1054         case sd_transfer_state:
1055             if (addr >= sd->size) {
1056                 sd->card_status |= ADDRESS_ERROR;
1057                 return sd_r1b;
1058             }
1059
1060             sd->state = sd_programming_state;
1061             set_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1062             /* Bzzzzzzztt .... Operation complete.  */
1063             sd->state = sd_transfer_state;
1064             return sd_r1b;
1065
1066         default:
1067             break;
1068         }
1069         break;
1070
1071     case 29:    /* CMD29:  CLR_WRITE_PROT */
1072         switch (sd->state) {
1073         case sd_transfer_state:
1074             if (addr >= sd->size) {
1075                 sd->card_status |= ADDRESS_ERROR;
1076                 return sd_r1b;
1077             }
1078
1079             sd->state = sd_programming_state;
1080             clear_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1081             /* Bzzzzzzztt .... Operation complete.  */
1082             sd->state = sd_transfer_state;
1083             return sd_r1b;
1084
1085         default:
1086             break;
1087         }
1088         break;
1089
1090     case 30:    /* CMD30:  SEND_WRITE_PROT */
1091         switch (sd->state) {
1092         case sd_transfer_state:
1093             sd->state = sd_sendingdata_state;
1094             *(uint32_t *) sd->data = sd_wpbits(sd, req.arg);
1095             sd->data_start = addr;
1096             sd->data_offset = 0;
1097             return sd_r1b;
1098
1099         default:
1100             break;
1101         }
1102         break;
1103
1104     /* Erase commands (Class 5) */
1105     case 32:    /* CMD32:  ERASE_WR_BLK_START */
1106         switch (sd->state) {
1107         case sd_transfer_state:
1108             sd->erase_start = req.arg;
1109             return sd_r1;
1110
1111         default:
1112             break;
1113         }
1114         break;
1115
1116     case 33:    /* CMD33:  ERASE_WR_BLK_END */
1117         switch (sd->state) {
1118         case sd_transfer_state:
1119             sd->erase_end = req.arg;
1120             return sd_r1;
1121
1122         default:
1123             break;
1124         }
1125         break;
1126
1127     case 38:    /* CMD38:  ERASE */
1128         switch (sd->state) {
1129         case sd_transfer_state:
1130             if (sd->csd[14] & 0x30) {
1131                 sd->card_status |= WP_VIOLATION;
1132                 return sd_r1b;
1133             }
1134
1135             sd->state = sd_programming_state;
1136             sd_erase(sd);
1137             /* Bzzzzzzztt .... Operation complete.  */
1138             sd->state = sd_transfer_state;
1139             return sd_r1b;
1140
1141         default:
1142             break;
1143         }
1144         break;
1145
1146     /* Lock card commands (Class 7) */
1147     case 42:    /* CMD42:  LOCK_UNLOCK */
1148         if (sd->spi)
1149             goto unimplemented_cmd;
1150         switch (sd->state) {
1151         case sd_transfer_state:
1152             sd->state = sd_receivingdata_state;
1153             sd->data_start = 0;
1154             sd->data_offset = 0;
1155             return sd_r1;
1156
1157         default:
1158             break;
1159         }
1160         break;
1161
1162     case 52:
1163     case 53:
1164         /* CMD52, CMD53: reserved for SDIO cards
1165          * (see the SDIO Simplified Specification V2.0)
1166          * Handle as illegal command but do not complain
1167          * on stderr, as some OSes may use these in their
1168          * probing for presence of an SDIO card.
1169          */
1170         return sd_illegal;
1171
1172     /* Application specific commands (Class 8) */
1173     case 55:    /* CMD55:  APP_CMD */
1174         if (sd->rca != rca)
1175             return sd_r0;
1176
1177         sd->expecting_acmd = true;
1178         sd->card_status |= APP_CMD;
1179         return sd_r1;
1180
1181     case 56:    /* CMD56:  GEN_CMD */
1182         fprintf(stderr, "SD: GEN_CMD 0x%08x\n", req.arg);
1183
1184         switch (sd->state) {
1185         case sd_transfer_state:
1186             sd->data_offset = 0;
1187             if (req.arg & 1)
1188                 sd->state = sd_sendingdata_state;
1189             else
1190                 sd->state = sd_receivingdata_state;
1191             return sd_r1;
1192
1193         default:
1194             break;
1195         }
1196         break;
1197
1198     default:
1199     bad_cmd:
1200         fprintf(stderr, "SD: Unknown CMD%i\n", req.cmd);
1201         return sd_illegal;
1202
1203     unimplemented_cmd:
1204         /* Commands that are recognised but not yet implemented in SPI mode.  */
1205         fprintf(stderr, "SD: CMD%i not implemented in SPI mode\n", req.cmd);
1206         return sd_illegal;
1207     }
1208
1209     fprintf(stderr, "SD: CMD%i in a wrong state\n", req.cmd);
1210     return sd_illegal;
1211 }
1212
1213 static sd_rsp_type_t sd_app_command(SDState *sd,
1214                                     SDRequest req)
1215 {
1216     DPRINTF("ACMD%d 0x%08x\n", req.cmd, req.arg);
1217     sd->card_status |= APP_CMD;
1218     switch (req.cmd) {
1219     case 6:     /* ACMD6:  SET_BUS_WIDTH */
1220         switch (sd->state) {
1221         case sd_transfer_state:
1222             sd->sd_status[0] &= 0x3f;
1223             sd->sd_status[0] |= (req.arg & 0x03) << 6;
1224             return sd_r1;
1225
1226         default:
1227             break;
1228         }
1229         break;
1230
1231     case 13:    /* ACMD13: SD_STATUS */
1232         switch (sd->state) {
1233         case sd_transfer_state:
1234             sd->state = sd_sendingdata_state;
1235             sd->data_start = 0;
1236             sd->data_offset = 0;
1237             return sd_r1;
1238
1239         default:
1240             break;
1241         }
1242         break;
1243
1244     case 22:    /* ACMD22: SEND_NUM_WR_BLOCKS */
1245         switch (sd->state) {
1246         case sd_transfer_state:
1247             *(uint32_t *) sd->data = sd->blk_written;
1248
1249             sd->state = sd_sendingdata_state;
1250             sd->data_start = 0;
1251             sd->data_offset = 0;
1252             return sd_r1;
1253
1254         default:
1255             break;
1256         }
1257         break;
1258
1259     case 23:    /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1260         switch (sd->state) {
1261         case sd_transfer_state:
1262             return sd_r1;
1263
1264         default:
1265             break;
1266         }
1267         break;
1268
1269     case 41:    /* ACMD41: SD_APP_OP_COND */
1270         if (sd->spi) {
1271             /* SEND_OP_CMD */
1272             sd->state = sd_transfer_state;
1273             return sd_r1;
1274         }
1275         switch (sd->state) {
1276         case sd_idle_state:
1277             /* We accept any voltage.  10000 V is nothing.
1278              *
1279              * We don't model init delay so just advance straight to ready state
1280              * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1281              */
1282             if (req.arg & ACMD41_ENQUIRY_MASK) {
1283                 sd->state = sd_ready_state;
1284             }
1285
1286             return sd_r3;
1287
1288         default:
1289             break;
1290         }
1291         break;
1292
1293     case 42:    /* ACMD42: SET_CLR_CARD_DETECT */
1294         switch (sd->state) {
1295         case sd_transfer_state:
1296             /* Bringing in the 50KOhm pull-up resistor... Done.  */
1297             return sd_r1;
1298
1299         default:
1300             break;
1301         }
1302         break;
1303
1304     case 51:    /* ACMD51: SEND_SCR */
1305         switch (sd->state) {
1306         case sd_transfer_state:
1307             sd->state = sd_sendingdata_state;
1308             sd->data_start = 0;
1309             sd->data_offset = 0;
1310             return sd_r1;
1311
1312         default:
1313             break;
1314         }
1315         break;
1316
1317     default:
1318         /* Fall back to standard commands.  */
1319         return sd_normal_command(sd, req);
1320     }
1321
1322     fprintf(stderr, "SD: ACMD%i in a wrong state\n", req.cmd);
1323     return sd_illegal;
1324 }
1325
1326 static int cmd_valid_while_locked(SDState *sd, SDRequest *req)
1327 {
1328     /* Valid commands in locked state:
1329      * basic class (0)
1330      * lock card class (7)
1331      * CMD16
1332      * implicitly, the ACMD prefix CMD55
1333      * ACMD41 and ACMD42
1334      * Anything else provokes an "illegal command" response.
1335      */
1336     if (sd->expecting_acmd) {
1337         return req->cmd == 41 || req->cmd == 42;
1338     }
1339     if (req->cmd == 16 || req->cmd == 55) {
1340         return 1;
1341     }
1342     return sd_cmd_class[req->cmd] == 0 || sd_cmd_class[req->cmd] == 7;
1343 }
1344
1345 int sd_do_command(SDState *sd, SDRequest *req,
1346                   uint8_t *response) {
1347     int last_state;
1348     sd_rsp_type_t rtype;
1349     int rsplen;
1350
1351     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) {
1352         return 0;
1353     }
1354
1355     if (sd_req_crc_validate(req)) {
1356         sd->card_status |= COM_CRC_ERROR;
1357         rtype = sd_illegal;
1358         goto send_response;
1359     }
1360
1361     if (sd->card_status & CARD_IS_LOCKED) {
1362         if (!cmd_valid_while_locked(sd, req)) {
1363             sd->card_status |= ILLEGAL_COMMAND;
1364             sd->expecting_acmd = false;
1365             fprintf(stderr, "SD: Card is locked\n");
1366             rtype = sd_illegal;
1367             goto send_response;
1368         }
1369     }
1370
1371     last_state = sd->state;
1372     sd_set_mode(sd);
1373
1374     if (sd->expecting_acmd) {
1375         sd->expecting_acmd = false;
1376         rtype = sd_app_command(sd, *req);
1377     } else {
1378         rtype = sd_normal_command(sd, *req);
1379     }
1380
1381     if (rtype == sd_illegal) {
1382         sd->card_status |= ILLEGAL_COMMAND;
1383     } else {
1384         /* Valid command, we can update the 'state before command' bits.
1385          * (Do this now so they appear in r1 responses.)
1386          */
1387         sd->current_cmd = req->cmd;
1388         sd->card_status &= ~CURRENT_STATE;
1389         sd->card_status |= (last_state << 9);
1390     }
1391
1392 send_response:
1393     switch (rtype) {
1394     case sd_r1:
1395     case sd_r1b:
1396         sd_response_r1_make(sd, response);
1397         rsplen = 4;
1398         break;
1399
1400     case sd_r2_i:
1401         memcpy(response, sd->cid, sizeof(sd->cid));
1402         rsplen = 16;
1403         break;
1404
1405     case sd_r2_s:
1406         memcpy(response, sd->csd, sizeof(sd->csd));
1407         rsplen = 16;
1408         break;
1409
1410     case sd_r3:
1411         sd_response_r3_make(sd, response);
1412         rsplen = 4;
1413         break;
1414
1415     case sd_r6:
1416         sd_response_r6_make(sd, response);
1417         rsplen = 4;
1418         break;
1419
1420     case sd_r7:
1421         sd_response_r7_make(sd, response);
1422         rsplen = 4;
1423         break;
1424
1425     case sd_r0:
1426     case sd_illegal:
1427     default:
1428         rsplen = 0;
1429         break;
1430     }
1431
1432     if (rtype != sd_illegal) {
1433         /* Clear the "clear on valid command" status bits now we've
1434          * sent any response
1435          */
1436         sd->card_status &= ~CARD_STATUS_B;
1437     }
1438
1439 #ifdef DEBUG_SD
1440     if (rsplen) {
1441         int i;
1442         DPRINTF("Response:");
1443         for (i = 0; i < rsplen; i++)
1444             fprintf(stderr, " %02x", response[i]);
1445         fprintf(stderr, " state %d\n", sd->state);
1446     } else {
1447         DPRINTF("No response %d\n", sd->state);
1448     }
1449 #endif
1450
1451     return rsplen;
1452 }
1453
1454 static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
1455 {
1456     uint64_t end = addr + len;
1457
1458     DPRINTF("sd_blk_read: addr = 0x%08llx, len = %d\n",
1459             (unsigned long long) addr, len);
1460     if (!sd->blk || blk_read(sd->blk, addr >> 9, sd->buf, 1) < 0) {
1461         fprintf(stderr, "sd_blk_read: read error on host side\n");
1462         return;
1463     }
1464
1465     if (end > (addr & ~511) + 512) {
1466         memcpy(sd->data, sd->buf + (addr & 511), 512 - (addr & 511));
1467
1468         if (blk_read(sd->blk, end >> 9, sd->buf, 1) < 0) {
1469             fprintf(stderr, "sd_blk_read: read error on host side\n");
1470             return;
1471         }
1472         memcpy(sd->data + 512 - (addr & 511), sd->buf, end & 511);
1473     } else
1474         memcpy(sd->data, sd->buf + (addr & 511), len);
1475 }
1476
1477 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len)
1478 {
1479     uint64_t end = addr + len;
1480
1481     if ((addr & 511) || len < 512)
1482         if (!sd->blk || blk_read(sd->blk, addr >> 9, sd->buf, 1) < 0) {
1483             fprintf(stderr, "sd_blk_write: read error on host side\n");
1484             return;
1485         }
1486
1487     if (end > (addr & ~511) + 512) {
1488         memcpy(sd->buf + (addr & 511), sd->data, 512 - (addr & 511));
1489         if (blk_write(sd->blk, addr >> 9, sd->buf, 1) < 0) {
1490             fprintf(stderr, "sd_blk_write: write error on host side\n");
1491             return;
1492         }
1493
1494         if (blk_read(sd->blk, end >> 9, sd->buf, 1) < 0) {
1495             fprintf(stderr, "sd_blk_write: read error on host side\n");
1496             return;
1497         }
1498         memcpy(sd->buf, sd->data + 512 - (addr & 511), end & 511);
1499         if (blk_write(sd->blk, end >> 9, sd->buf, 1) < 0) {
1500             fprintf(stderr, "sd_blk_write: write error on host side\n");
1501         }
1502     } else {
1503         memcpy(sd->buf + (addr & 511), sd->data, len);
1504         if (!sd->blk || blk_write(sd->blk, addr >> 9, sd->buf, 1) < 0) {
1505             fprintf(stderr, "sd_blk_write: write error on host side\n");
1506         }
1507     }
1508 }
1509
1510 #define BLK_READ_BLOCK(a, len)  sd_blk_read(sd, a, len)
1511 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
1512 #define APP_READ_BLOCK(a, len)  memset(sd->data, 0xec, len)
1513 #define APP_WRITE_BLOCK(a, len)
1514
1515 void sd_write_data(SDState *sd, uint8_t value)
1516 {
1517     int i;
1518
1519     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1520         return;
1521
1522     if (sd->state != sd_receivingdata_state) {
1523         fprintf(stderr, "sd_write_data: not in Receiving-Data state\n");
1524         return;
1525     }
1526
1527     if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1528         return;
1529
1530     switch (sd->current_cmd) {
1531     case 24:    /* CMD24:  WRITE_SINGLE_BLOCK */
1532         sd->data[sd->data_offset ++] = value;
1533         if (sd->data_offset >= sd->blk_len) {
1534             /* TODO: Check CRC before committing */
1535             sd->state = sd_programming_state;
1536             BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1537             sd->blk_written ++;
1538             sd->csd[14] |= 0x40;
1539             /* Bzzzzzzztt .... Operation complete.  */
1540             sd->state = sd_transfer_state;
1541         }
1542         break;
1543
1544     case 25:    /* CMD25:  WRITE_MULTIPLE_BLOCK */
1545         if (sd->data_offset == 0) {
1546             /* Start of the block - let's check the address is valid */
1547             if (sd->data_start + sd->blk_len > sd->size) {
1548                 sd->card_status |= ADDRESS_ERROR;
1549                 break;
1550             }
1551             if (sd_wp_addr(sd, sd->data_start)) {
1552                 sd->card_status |= WP_VIOLATION;
1553                 break;
1554             }
1555         }
1556         sd->data[sd->data_offset++] = value;
1557         if (sd->data_offset >= sd->blk_len) {
1558             /* TODO: Check CRC before committing */
1559             sd->state = sd_programming_state;
1560             BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1561             sd->blk_written++;
1562             sd->data_start += sd->blk_len;
1563             sd->data_offset = 0;
1564             sd->csd[14] |= 0x40;
1565
1566             /* Bzzzzzzztt .... Operation complete.  */
1567             sd->state = sd_receivingdata_state;
1568         }
1569         break;
1570
1571     case 26:    /* CMD26:  PROGRAM_CID */
1572         sd->data[sd->data_offset ++] = value;
1573         if (sd->data_offset >= sizeof(sd->cid)) {
1574             /* TODO: Check CRC before committing */
1575             sd->state = sd_programming_state;
1576             for (i = 0; i < sizeof(sd->cid); i ++)
1577                 if ((sd->cid[i] | 0x00) != sd->data[i])
1578                     sd->card_status |= CID_CSD_OVERWRITE;
1579
1580             if (!(sd->card_status & CID_CSD_OVERWRITE))
1581                 for (i = 0; i < sizeof(sd->cid); i ++) {
1582                     sd->cid[i] |= 0x00;
1583                     sd->cid[i] &= sd->data[i];
1584                 }
1585             /* Bzzzzzzztt .... Operation complete.  */
1586             sd->state = sd_transfer_state;
1587         }
1588         break;
1589
1590     case 27:    /* CMD27:  PROGRAM_CSD */
1591         sd->data[sd->data_offset ++] = value;
1592         if (sd->data_offset >= sizeof(sd->csd)) {
1593             /* TODO: Check CRC before committing */
1594             sd->state = sd_programming_state;
1595             for (i = 0; i < sizeof(sd->csd); i ++)
1596                 if ((sd->csd[i] | sd_csd_rw_mask[i]) !=
1597                     (sd->data[i] | sd_csd_rw_mask[i]))
1598                     sd->card_status |= CID_CSD_OVERWRITE;
1599
1600             /* Copy flag (OTP) & Permanent write protect */
1601             if (sd->csd[14] & ~sd->data[14] & 0x60)
1602                 sd->card_status |= CID_CSD_OVERWRITE;
1603
1604             if (!(sd->card_status & CID_CSD_OVERWRITE))
1605                 for (i = 0; i < sizeof(sd->csd); i ++) {
1606                     sd->csd[i] |= sd_csd_rw_mask[i];
1607                     sd->csd[i] &= sd->data[i];
1608                 }
1609             /* Bzzzzzzztt .... Operation complete.  */
1610             sd->state = sd_transfer_state;
1611         }
1612         break;
1613
1614     case 42:    /* CMD42:  LOCK_UNLOCK */
1615         sd->data[sd->data_offset ++] = value;
1616         if (sd->data_offset >= sd->blk_len) {
1617             /* TODO: Check CRC before committing */
1618             sd->state = sd_programming_state;
1619             sd_lock_command(sd);
1620             /* Bzzzzzzztt .... Operation complete.  */
1621             sd->state = sd_transfer_state;
1622         }
1623         break;
1624
1625     case 56:    /* CMD56:  GEN_CMD */
1626         sd->data[sd->data_offset ++] = value;
1627         if (sd->data_offset >= sd->blk_len) {
1628             APP_WRITE_BLOCK(sd->data_start, sd->data_offset);
1629             sd->state = sd_transfer_state;
1630         }
1631         break;
1632
1633     default:
1634         fprintf(stderr, "sd_write_data: unknown command\n");
1635         break;
1636     }
1637 }
1638
1639 uint8_t sd_read_data(SDState *sd)
1640 {
1641     /* TODO: Append CRCs */
1642     uint8_t ret;
1643     int io_len;
1644
1645     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1646         return 0x00;
1647
1648     if (sd->state != sd_sendingdata_state) {
1649         fprintf(stderr, "sd_read_data: not in Sending-Data state\n");
1650         return 0x00;
1651     }
1652
1653     if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1654         return 0x00;
1655
1656     io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len;
1657
1658     switch (sd->current_cmd) {
1659     case 6:     /* CMD6:   SWITCH_FUNCTION */
1660         ret = sd->data[sd->data_offset ++];
1661
1662         if (sd->data_offset >= 64)
1663             sd->state = sd_transfer_state;
1664         break;
1665
1666     case 9:     /* CMD9:   SEND_CSD */
1667     case 10:    /* CMD10:  SEND_CID */
1668         ret = sd->data[sd->data_offset ++];
1669
1670         if (sd->data_offset >= 16)
1671             sd->state = sd_transfer_state;
1672         break;
1673
1674     case 11:    /* CMD11:  READ_DAT_UNTIL_STOP */
1675         if (sd->data_offset == 0)
1676             BLK_READ_BLOCK(sd->data_start, io_len);
1677         ret = sd->data[sd->data_offset ++];
1678
1679         if (sd->data_offset >= io_len) {
1680             sd->data_start += io_len;
1681             sd->data_offset = 0;
1682             if (sd->data_start + io_len > sd->size) {
1683                 sd->card_status |= ADDRESS_ERROR;
1684                 break;
1685             }
1686         }
1687         break;
1688
1689     case 13:    /* ACMD13: SD_STATUS */
1690         ret = sd->sd_status[sd->data_offset ++];
1691
1692         if (sd->data_offset >= sizeof(sd->sd_status))
1693             sd->state = sd_transfer_state;
1694         break;
1695
1696     case 17:    /* CMD17:  READ_SINGLE_BLOCK */
1697         if (sd->data_offset == 0)
1698             BLK_READ_BLOCK(sd->data_start, io_len);
1699         ret = sd->data[sd->data_offset ++];
1700
1701         if (sd->data_offset >= io_len)
1702             sd->state = sd_transfer_state;
1703         break;
1704
1705     case 18:    /* CMD18:  READ_MULTIPLE_BLOCK */
1706         if (sd->data_offset == 0)
1707             BLK_READ_BLOCK(sd->data_start, io_len);
1708         ret = sd->data[sd->data_offset ++];
1709
1710         if (sd->data_offset >= io_len) {
1711             sd->data_start += io_len;
1712             sd->data_offset = 0;
1713             if (sd->data_start + io_len > sd->size) {
1714                 sd->card_status |= ADDRESS_ERROR;
1715                 break;
1716             }
1717         }
1718         break;
1719
1720     case 22:    /* ACMD22: SEND_NUM_WR_BLOCKS */
1721         ret = sd->data[sd->data_offset ++];
1722
1723         if (sd->data_offset >= 4)
1724             sd->state = sd_transfer_state;
1725         break;
1726
1727     case 30:    /* CMD30:  SEND_WRITE_PROT */
1728         ret = sd->data[sd->data_offset ++];
1729
1730         if (sd->data_offset >= 4)
1731             sd->state = sd_transfer_state;
1732         break;
1733
1734     case 51:    /* ACMD51: SEND_SCR */
1735         ret = sd->scr[sd->data_offset ++];
1736
1737         if (sd->data_offset >= sizeof(sd->scr))
1738             sd->state = sd_transfer_state;
1739         break;
1740
1741     case 56:    /* CMD56:  GEN_CMD */
1742         if (sd->data_offset == 0)
1743             APP_READ_BLOCK(sd->data_start, sd->blk_len);
1744         ret = sd->data[sd->data_offset ++];
1745
1746         if (sd->data_offset >= sd->blk_len)
1747             sd->state = sd_transfer_state;
1748         break;
1749
1750     default:
1751         fprintf(stderr, "sd_read_data: unknown command\n");
1752         return 0x00;
1753     }
1754
1755     return ret;
1756 }
1757
1758 bool sd_data_ready(SDState *sd)
1759 {
1760     return sd->state == sd_sendingdata_state;
1761 }
1762
1763 void sd_enable(SDState *sd, bool enable)
1764 {
1765     sd->enable = enable;
1766 }
This page took 0.140859 seconds and 4 git commands to generate.