xref: /qemu/hw/sd/sd.c (revision a81df1b6)
1 /*
2  * SD Memory Card emulation as defined in the "SD Memory Card Physical
3  * layer specification, Version 2.00."
4  *
5  * Copyright (c) 2006 Andrzej Zaborowski  <balrog@zabor.org>
6  * Copyright (c) 2007 CodeSourcery
7  * Copyright (c) 2018 Philippe Mathieu-Daudé <f4bug@amsat.org>
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in
17  *    the documentation and/or other materials provided with the
18  *    distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
28  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #include "qemu/osdep.h"
34 #include "qemu/units.h"
35 #include "qemu/cutils.h"
36 #include "hw/irq.h"
37 #include "hw/registerfields.h"
38 #include "sysemu/block-backend.h"
39 #include "hw/sd/sd.h"
40 #include "migration/vmstate.h"
41 #include "qapi/error.h"
42 #include "qemu/bitmap.h"
43 #include "hw/qdev-properties.h"
44 #include "qemu/error-report.h"
45 #include "qemu/timer.h"
46 #include "qemu/log.h"
47 #include "qemu/module.h"
48 #include "sdmmc-internal.h"
49 #include "trace.h"
50 
51 //#define DEBUG_SD 1
52 
53 typedef enum {
54     sd_r0 = 0,    /* no response */
55     sd_r1,        /* normal response command */
56     sd_r2_i,      /* CID register */
57     sd_r2_s,      /* CSD register */
58     sd_r3,        /* OCR register */
59     sd_r6 = 6,    /* Published RCA response */
60     sd_r7,        /* Operating voltage */
61     sd_r1b = -1,
62     sd_illegal = -2,
63 } sd_rsp_type_t;
64 
65 enum SDCardModes {
66     sd_inactive,
67     sd_card_identification_mode,
68     sd_data_transfer_mode,
69 };
70 
71 enum SDCardStates {
72     sd_inactive_state = -1,
73     sd_idle_state = 0,
74     sd_ready_state,
75     sd_identification_state,
76     sd_standby_state,
77     sd_transfer_state,
78     sd_sendingdata_state,
79     sd_receivingdata_state,
80     sd_programming_state,
81     sd_disconnect_state,
82 };
83 
84 struct SDState {
85     DeviceState parent_obj;
86 
87     /* If true, created by sd_init() for a non-qdevified caller */
88     /* TODO purge them with fire */
89     bool me_no_qdev_me_kill_mammoth_with_rocks;
90 
91     /* SD Memory Card Registers */
92     uint32_t ocr;
93     uint8_t scr[8];
94     uint8_t cid[16];
95     uint8_t csd[16];
96     uint16_t rca;
97     uint32_t card_status;
98     uint8_t sd_status[64];
99 
100     /* Configurable properties */
101     uint8_t spec_version;
102     BlockBackend *blk;
103     bool spi;
104 
105     uint32_t mode;    /* current card mode, one of SDCardModes */
106     int32_t state;    /* current card state, one of SDCardStates */
107     uint32_t vhs;
108     bool wp_switch;
109     unsigned long *wp_groups;
110     int32_t wpgrps_size;
111     uint64_t size;
112     uint32_t blk_len;
113     uint32_t multi_blk_cnt;
114     uint32_t erase_start;
115     uint32_t erase_end;
116     uint8_t pwd[16];
117     uint32_t pwd_len;
118     uint8_t function_group[6];
119     uint8_t current_cmd;
120     /* True if we will handle the next command as an ACMD. Note that this does
121      * *not* track the APP_CMD status bit!
122      */
123     bool expecting_acmd;
124     uint32_t blk_written;
125     uint64_t data_start;
126     uint32_t data_offset;
127     uint8_t data[512];
128     qemu_irq readonly_cb;
129     qemu_irq inserted_cb;
130     QEMUTimer *ocr_power_timer;
131     const char *proto_name;
132     bool enable;
133     uint8_t dat_lines;
134     bool cmd_line;
135 };
136 
137 static void sd_realize(DeviceState *dev, Error **errp);
138 
139 static const char *sd_state_name(enum SDCardStates state)
140 {
141     static const char *state_name[] = {
142         [sd_idle_state]             = "idle",
143         [sd_ready_state]            = "ready",
144         [sd_identification_state]   = "identification",
145         [sd_standby_state]          = "standby",
146         [sd_transfer_state]         = "transfer",
147         [sd_sendingdata_state]      = "sendingdata",
148         [sd_receivingdata_state]    = "receivingdata",
149         [sd_programming_state]      = "programming",
150         [sd_disconnect_state]       = "disconnect",
151     };
152     if (state == sd_inactive_state) {
153         return "inactive";
154     }
155     assert(state < ARRAY_SIZE(state_name));
156     return state_name[state];
157 }
158 
159 static const char *sd_response_name(sd_rsp_type_t rsp)
160 {
161     static const char *response_name[] = {
162         [sd_r0]     = "RESP#0 (no response)",
163         [sd_r1]     = "RESP#1 (normal cmd)",
164         [sd_r2_i]   = "RESP#2 (CID reg)",
165         [sd_r2_s]   = "RESP#2 (CSD reg)",
166         [sd_r3]     = "RESP#3 (OCR reg)",
167         [sd_r6]     = "RESP#6 (RCA)",
168         [sd_r7]     = "RESP#7 (operating voltage)",
169     };
170     if (rsp == sd_illegal) {
171         return "ILLEGAL RESP";
172     }
173     if (rsp == sd_r1b) {
174         rsp = sd_r1;
175     }
176     assert(rsp < ARRAY_SIZE(response_name));
177     return response_name[rsp];
178 }
179 
180 static uint8_t sd_get_dat_lines(SDState *sd)
181 {
182     return sd->enable ? sd->dat_lines : 0;
183 }
184 
185 static bool sd_get_cmd_line(SDState *sd)
186 {
187     return sd->enable ? sd->cmd_line : false;
188 }
189 
190 static void sd_set_voltage(SDState *sd, uint16_t millivolts)
191 {
192     trace_sdcard_set_voltage(millivolts);
193 
194     switch (millivolts) {
195     case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
196     case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
197         break;
198     default:
199         qemu_log_mask(LOG_GUEST_ERROR, "SD card voltage not supported: %.3fV",
200                       millivolts / 1000.f);
201     }
202 }
203 
204 static void sd_set_mode(SDState *sd)
205 {
206     switch (sd->state) {
207     case sd_inactive_state:
208         sd->mode = sd_inactive;
209         break;
210 
211     case sd_idle_state:
212     case sd_ready_state:
213     case sd_identification_state:
214         sd->mode = sd_card_identification_mode;
215         break;
216 
217     case sd_standby_state:
218     case sd_transfer_state:
219     case sd_sendingdata_state:
220     case sd_receivingdata_state:
221     case sd_programming_state:
222     case sd_disconnect_state:
223         sd->mode = sd_data_transfer_mode;
224         break;
225     }
226 }
227 
228 static const sd_cmd_type_t sd_cmd_type[SDMMC_CMD_MAX] = {
229     sd_bc,   sd_none, sd_bcr,  sd_bcr,  sd_none, sd_none, sd_none, sd_ac,
230     sd_bcr,  sd_ac,   sd_ac,   sd_adtc, sd_ac,   sd_ac,   sd_none, sd_ac,
231     /* 16 */
232     sd_ac,   sd_adtc, sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none,
233     sd_adtc, sd_adtc, sd_adtc, sd_adtc, sd_ac,   sd_ac,   sd_adtc, sd_none,
234     /* 32 */
235     sd_ac,   sd_ac,   sd_none, sd_none, sd_none, sd_none, sd_ac,   sd_none,
236     sd_none, sd_none, sd_bc,   sd_none, sd_none, sd_none, sd_none, sd_none,
237     /* 48 */
238     sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_ac,
239     sd_adtc, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none, sd_none,
240 };
241 
242 static const int sd_cmd_class[SDMMC_CMD_MAX] = {
243     0,  0,  0,  0,  0,  9, 10,  0,  0,  0,  0,  1,  0,  0,  0,  0,
244     2,  2,  2,  2,  3,  3,  3,  3,  4,  4,  4,  4,  6,  6,  6,  6,
245     5,  5, 10, 10, 10, 10,  5,  9,  9,  9,  7,  7,  7,  7,  7,  7,
246     7,  7, 10,  7,  9,  9,  9,  8,  8, 10,  8,  8,  8,  8,  8,  8,
247 };
248 
249 static uint8_t sd_crc7(void *message, size_t width)
250 {
251     int i, bit;
252     uint8_t shift_reg = 0x00;
253     uint8_t *msg = (uint8_t *) message;
254 
255     for (i = 0; i < width; i ++, msg ++)
256         for (bit = 7; bit >= 0; bit --) {
257             shift_reg <<= 1;
258             if ((shift_reg >> 7) ^ ((*msg >> bit) & 1))
259                 shift_reg ^= 0x89;
260         }
261 
262     return shift_reg;
263 }
264 
265 static uint16_t sd_crc16(void *message, size_t width)
266 {
267     int i, bit;
268     uint16_t shift_reg = 0x0000;
269     uint16_t *msg = (uint16_t *) message;
270     width <<= 1;
271 
272     for (i = 0; i < width; i ++, msg ++)
273         for (bit = 15; bit >= 0; bit --) {
274             shift_reg <<= 1;
275             if ((shift_reg >> 15) ^ ((*msg >> bit) & 1))
276                 shift_reg ^= 0x1011;
277         }
278 
279     return shift_reg;
280 }
281 
282 #define OCR_POWER_DELAY_NS      500000 /* 0.5ms */
283 
284 FIELD(OCR, VDD_VOLTAGE_WINDOW,          0, 24)
285 FIELD(OCR, VDD_VOLTAGE_WIN_LO,          0,  8)
286 FIELD(OCR, DUAL_VOLTAGE_CARD,           7,  1)
287 FIELD(OCR, VDD_VOLTAGE_WIN_HI,          8, 16)
288 FIELD(OCR, ACCEPT_SWITCH_1V8,          24,  1) /* Only UHS-I */
289 FIELD(OCR, UHS_II_CARD,                29,  1) /* Only UHS-II */
290 FIELD(OCR, CARD_CAPACITY,              30,  1) /* 0:SDSC, 1:SDHC/SDXC */
291 FIELD(OCR, CARD_POWER_UP,              31,  1)
292 
293 #define ACMD41_ENQUIRY_MASK     0x00ffffff
294 #define ACMD41_R3_MASK          (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
295                                | R_OCR_ACCEPT_SWITCH_1V8_MASK \
296                                | R_OCR_UHS_II_CARD_MASK \
297                                | R_OCR_CARD_CAPACITY_MASK \
298                                | R_OCR_CARD_POWER_UP_MASK)
299 
300 static void sd_set_ocr(SDState *sd)
301 {
302     /* All voltages OK */
303     sd->ocr = R_OCR_VDD_VOLTAGE_WIN_HI_MASK;
304 }
305 
306 static void sd_ocr_powerup(void *opaque)
307 {
308     SDState *sd = opaque;
309 
310     trace_sdcard_powerup();
311     assert(!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP));
312 
313     /* card power-up OK */
314     sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_POWER_UP, 1);
315 
316     if (sd->size > 1 * GiB) {
317         sd->ocr = FIELD_DP32(sd->ocr, OCR, CARD_CAPACITY, 1);
318     }
319 }
320 
321 static void sd_set_scr(SDState *sd)
322 {
323     sd->scr[0] = 0 << 4;        /* SCR structure version 1.0 */
324     if (sd->spec_version == SD_PHY_SPECv1_10_VERS) {
325         sd->scr[0] |= 1;        /* Spec Version 1.10 */
326     } else {
327         sd->scr[0] |= 2;        /* Spec Version 2.00 or Version 3.0X */
328     }
329     sd->scr[1] = (2 << 4)       /* SDSC Card (Security Version 1.01) */
330                  | 0b0101;      /* 1-bit or 4-bit width bus modes */
331     sd->scr[2] = 0x00;          /* Extended Security is not supported. */
332     if (sd->spec_version >= SD_PHY_SPECv3_01_VERS) {
333         sd->scr[2] |= 1 << 7;   /* Spec Version 3.0X */
334     }
335     sd->scr[3] = 0x00;
336     /* reserved for manufacturer usage */
337     sd->scr[4] = 0x00;
338     sd->scr[5] = 0x00;
339     sd->scr[6] = 0x00;
340     sd->scr[7] = 0x00;
341 }
342 
343 #define MID	0xaa
344 #define OID	"XY"
345 #define PNM	"QEMU!"
346 #define PRV	0x01
347 #define MDT_YR	2006
348 #define MDT_MON	2
349 
350 static void sd_set_cid(SDState *sd)
351 {
352     sd->cid[0] = MID;		/* Fake card manufacturer ID (MID) */
353     sd->cid[1] = OID[0];	/* OEM/Application ID (OID) */
354     sd->cid[2] = OID[1];
355     sd->cid[3] = PNM[0];	/* Fake product name (PNM) */
356     sd->cid[4] = PNM[1];
357     sd->cid[5] = PNM[2];
358     sd->cid[6] = PNM[3];
359     sd->cid[7] = PNM[4];
360     sd->cid[8] = PRV;		/* Fake product revision (PRV) */
361     sd->cid[9] = 0xde;		/* Fake serial number (PSN) */
362     sd->cid[10] = 0xad;
363     sd->cid[11] = 0xbe;
364     sd->cid[12] = 0xef;
365     sd->cid[13] = 0x00 |	/* Manufacture date (MDT) */
366         ((MDT_YR - 2000) / 10);
367     sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON;
368     sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1;
369 }
370 
371 #define HWBLOCK_SHIFT	9			/* 512 bytes */
372 #define SECTOR_SHIFT	5			/* 16 kilobytes */
373 #define WPGROUP_SHIFT	7			/* 2 megs */
374 #define CMULT_SHIFT	9			/* 512 times HWBLOCK_SIZE */
375 #define WPGROUP_SIZE	(1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
376 
377 static const uint8_t sd_csd_rw_mask[16] = {
378     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
379     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
380 };
381 
382 static void sd_set_csd(SDState *sd, uint64_t size)
383 {
384     uint32_t csize = (size >> (CMULT_SHIFT + HWBLOCK_SHIFT)) - 1;
385     uint32_t sectsize = (1 << (SECTOR_SHIFT + 1)) - 1;
386     uint32_t wpsize = (1 << (WPGROUP_SHIFT + 1)) - 1;
387 
388     if (size <= 1 * GiB) { /* Standard Capacity SD */
389         sd->csd[0] = 0x00;	/* CSD structure */
390         sd->csd[1] = 0x26;	/* Data read access-time-1 */
391         sd->csd[2] = 0x00;	/* Data read access-time-2 */
392         sd->csd[3] = 0x32;      /* Max. data transfer rate: 25 MHz */
393         sd->csd[4] = 0x5f;	/* Card Command Classes */
394         sd->csd[5] = 0x50 |	/* Max. read data block length */
395             HWBLOCK_SHIFT;
396         sd->csd[6] = 0xe0 |	/* Partial block for read allowed */
397             ((csize >> 10) & 0x03);
398         sd->csd[7] = 0x00 |	/* Device size */
399             ((csize >> 2) & 0xff);
400         sd->csd[8] = 0x3f |	/* Max. read current */
401             ((csize << 6) & 0xc0);
402         sd->csd[9] = 0xfc |	/* Max. write current */
403             ((CMULT_SHIFT - 2) >> 1);
404         sd->csd[10] = 0x40 |	/* Erase sector size */
405             (((CMULT_SHIFT - 2) << 7) & 0x80) | (sectsize >> 1);
406         sd->csd[11] = 0x00 |	/* Write protect group size */
407             ((sectsize << 7) & 0x80) | wpsize;
408         sd->csd[12] = 0x90 |	/* Write speed factor */
409             (HWBLOCK_SHIFT >> 2);
410         sd->csd[13] = 0x20 |	/* Max. write data block length */
411             ((HWBLOCK_SHIFT << 6) & 0xc0);
412         sd->csd[14] = 0x00;	/* File format group */
413     } else {			/* SDHC */
414         size /= 512 * KiB;
415         size -= 1;
416         sd->csd[0] = 0x40;
417         sd->csd[1] = 0x0e;
418         sd->csd[2] = 0x00;
419         sd->csd[3] = 0x32;
420         sd->csd[4] = 0x5b;
421         sd->csd[5] = 0x59;
422         sd->csd[6] = 0x00;
423         sd->csd[7] = (size >> 16) & 0xff;
424         sd->csd[8] = (size >> 8) & 0xff;
425         sd->csd[9] = (size & 0xff);
426         sd->csd[10] = 0x7f;
427         sd->csd[11] = 0x80;
428         sd->csd[12] = 0x0a;
429         sd->csd[13] = 0x40;
430         sd->csd[14] = 0x00;
431     }
432     sd->csd[15] = (sd_crc7(sd->csd, 15) << 1) | 1;
433 }
434 
435 static void sd_set_rca(SDState *sd)
436 {
437     sd->rca += 0x4567;
438 }
439 
440 FIELD(CSR, AKE_SEQ_ERROR,               3,  1)
441 FIELD(CSR, APP_CMD,                     5,  1)
442 FIELD(CSR, FX_EVENT,                    6,  1)
443 FIELD(CSR, READY_FOR_DATA,              8,  1)
444 FIELD(CSR, CURRENT_STATE,               9,  4)
445 FIELD(CSR, ERASE_RESET,                13,  1)
446 FIELD(CSR, CARD_ECC_DISABLED,          14,  1)
447 FIELD(CSR, WP_ERASE_SKIP,              15,  1)
448 FIELD(CSR, CSD_OVERWRITE,              16,  1)
449 FIELD(CSR, DEFERRED_RESPONSE,          17,  1)
450 FIELD(CSR, ERROR,                      19,  1)
451 FIELD(CSR, CC_ERROR,                   20,  1)
452 FIELD(CSR, CARD_ECC_FAILED,            21,  1)
453 FIELD(CSR, ILLEGAL_COMMAND,            22,  1)
454 FIELD(CSR, COM_CRC_ERROR,              23,  1)
455 FIELD(CSR, LOCK_UNLOCK_FAILED,         24,  1)
456 FIELD(CSR, CARD_IS_LOCKED,             25,  1)
457 FIELD(CSR, WP_VIOLATION,               26,  1)
458 FIELD(CSR, ERASE_PARAM,                27,  1)
459 FIELD(CSR, ERASE_SEQ_ERROR,            28,  1)
460 FIELD(CSR, BLOCK_LEN_ERROR,            29,  1)
461 FIELD(CSR, ADDRESS_ERROR,              30,  1)
462 FIELD(CSR, OUT_OF_RANGE,               31,  1)
463 
464 /* Card status bits, split by clear condition:
465  * A : According to the card current state
466  * B : Always related to the previous command
467  * C : Cleared by read
468  */
469 #define CARD_STATUS_A           (R_CSR_READY_FOR_DATA_MASK \
470                                | R_CSR_CARD_ECC_DISABLED_MASK \
471                                | R_CSR_CARD_IS_LOCKED_MASK)
472 #define CARD_STATUS_B           (R_CSR_CURRENT_STATE_MASK \
473                                | R_CSR_ILLEGAL_COMMAND_MASK \
474                                | R_CSR_COM_CRC_ERROR_MASK)
475 #define CARD_STATUS_C           (R_CSR_AKE_SEQ_ERROR_MASK \
476                                | R_CSR_APP_CMD_MASK \
477                                | R_CSR_ERASE_RESET_MASK \
478                                | R_CSR_WP_ERASE_SKIP_MASK \
479                                | R_CSR_CSD_OVERWRITE_MASK \
480                                | R_CSR_ERROR_MASK \
481                                | R_CSR_CC_ERROR_MASK \
482                                | R_CSR_CARD_ECC_FAILED_MASK \
483                                | R_CSR_LOCK_UNLOCK_FAILED_MASK \
484                                | R_CSR_WP_VIOLATION_MASK \
485                                | R_CSR_ERASE_PARAM_MASK \
486                                | R_CSR_ERASE_SEQ_ERROR_MASK \
487                                | R_CSR_BLOCK_LEN_ERROR_MASK \
488                                | R_CSR_ADDRESS_ERROR_MASK \
489                                | R_CSR_OUT_OF_RANGE_MASK)
490 
491 static void sd_set_cardstatus(SDState *sd)
492 {
493     sd->card_status = 0x00000100;
494 }
495 
496 static void sd_set_sdstatus(SDState *sd)
497 {
498     memset(sd->sd_status, 0, 64);
499 }
500 
501 static int sd_req_crc_validate(SDRequest *req)
502 {
503     uint8_t buffer[5];
504     buffer[0] = 0x40 | req->cmd;
505     stl_be_p(&buffer[1], req->arg);
506     return 0;
507     return sd_crc7(buffer, 5) != req->crc;	/* TODO */
508 }
509 
510 static void sd_response_r1_make(SDState *sd, uint8_t *response)
511 {
512     stl_be_p(response, sd->card_status);
513 
514     /* Clear the "clear on read" status bits */
515     sd->card_status &= ~CARD_STATUS_C;
516 }
517 
518 static void sd_response_r3_make(SDState *sd, uint8_t *response)
519 {
520     stl_be_p(response, sd->ocr & ACMD41_R3_MASK);
521 }
522 
523 static void sd_response_r6_make(SDState *sd, uint8_t *response)
524 {
525     uint16_t status;
526 
527     status = ((sd->card_status >> 8) & 0xc000) |
528              ((sd->card_status >> 6) & 0x2000) |
529               (sd->card_status & 0x1fff);
530     sd->card_status &= ~(CARD_STATUS_C & 0xc81fff);
531     stw_be_p(response + 0, sd->rca);
532     stw_be_p(response + 2, status);
533 }
534 
535 static void sd_response_r7_make(SDState *sd, uint8_t *response)
536 {
537     stl_be_p(response, sd->vhs);
538 }
539 
540 static inline uint64_t sd_addr_to_wpnum(uint64_t addr)
541 {
542     return addr >> (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT);
543 }
544 
545 static void sd_reset(DeviceState *dev)
546 {
547     SDState *sd = SD_CARD(dev);
548     uint64_t size;
549     uint64_t sect;
550 
551     trace_sdcard_reset();
552     if (sd->blk) {
553         blk_get_geometry(sd->blk, &sect);
554     } else {
555         sect = 0;
556     }
557     size = sect << 9;
558 
559     sect = sd_addr_to_wpnum(size) + 1;
560 
561     sd->state = sd_idle_state;
562     sd->rca = 0x0000;
563     sd_set_ocr(sd);
564     sd_set_scr(sd);
565     sd_set_cid(sd);
566     sd_set_csd(sd, size);
567     sd_set_cardstatus(sd);
568     sd_set_sdstatus(sd);
569 
570     g_free(sd->wp_groups);
571     sd->wp_switch = sd->blk ? blk_is_read_only(sd->blk) : false;
572     sd->wpgrps_size = sect;
573     sd->wp_groups = bitmap_new(sd->wpgrps_size);
574     memset(sd->function_group, 0, sizeof(sd->function_group));
575     sd->erase_start = 0;
576     sd->erase_end = 0;
577     sd->size = size;
578     sd->blk_len = 0x200;
579     sd->pwd_len = 0;
580     sd->expecting_acmd = false;
581     sd->dat_lines = 0xf;
582     sd->cmd_line = true;
583     sd->multi_blk_cnt = 0;
584 }
585 
586 static bool sd_get_inserted(SDState *sd)
587 {
588     return sd->blk && blk_is_inserted(sd->blk);
589 }
590 
591 static bool sd_get_readonly(SDState *sd)
592 {
593     return sd->wp_switch;
594 }
595 
596 static void sd_cardchange(void *opaque, bool load, Error **errp)
597 {
598     SDState *sd = opaque;
599     DeviceState *dev = DEVICE(sd);
600     SDBus *sdbus;
601     bool inserted = sd_get_inserted(sd);
602     bool readonly = sd_get_readonly(sd);
603 
604     if (inserted) {
605         trace_sdcard_inserted(readonly);
606         sd_reset(dev);
607     } else {
608         trace_sdcard_ejected();
609     }
610 
611     if (sd->me_no_qdev_me_kill_mammoth_with_rocks) {
612         qemu_set_irq(sd->inserted_cb, inserted);
613         if (inserted) {
614             qemu_set_irq(sd->readonly_cb, readonly);
615         }
616     } else {
617         sdbus = SD_BUS(qdev_get_parent_bus(dev));
618         sdbus_set_inserted(sdbus, inserted);
619         if (inserted) {
620             sdbus_set_readonly(sdbus, readonly);
621         }
622     }
623 }
624 
625 static const BlockDevOps sd_block_ops = {
626     .change_media_cb = sd_cardchange,
627 };
628 
629 static bool sd_ocr_vmstate_needed(void *opaque)
630 {
631     SDState *sd = opaque;
632 
633     /* Include the OCR state (and timer) if it is not yet powered up */
634     return !FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP);
635 }
636 
637 static const VMStateDescription sd_ocr_vmstate = {
638     .name = "sd-card/ocr-state",
639     .version_id = 1,
640     .minimum_version_id = 1,
641     .needed = sd_ocr_vmstate_needed,
642     .fields = (VMStateField[]) {
643         VMSTATE_UINT32(ocr, SDState),
644         VMSTATE_TIMER_PTR(ocr_power_timer, SDState),
645         VMSTATE_END_OF_LIST()
646     },
647 };
648 
649 static int sd_vmstate_pre_load(void *opaque)
650 {
651     SDState *sd = opaque;
652 
653     /* If the OCR state is not included (prior versions, or not
654      * needed), then the OCR must be set as powered up. If the OCR state
655      * is included, this will be replaced by the state restore.
656      */
657     sd_ocr_powerup(sd);
658 
659     return 0;
660 }
661 
662 static const VMStateDescription sd_vmstate = {
663     .name = "sd-card",
664     .version_id = 1,
665     .minimum_version_id = 1,
666     .pre_load = sd_vmstate_pre_load,
667     .fields = (VMStateField[]) {
668         VMSTATE_UINT32(mode, SDState),
669         VMSTATE_INT32(state, SDState),
670         VMSTATE_UINT8_ARRAY(cid, SDState, 16),
671         VMSTATE_UINT8_ARRAY(csd, SDState, 16),
672         VMSTATE_UINT16(rca, SDState),
673         VMSTATE_UINT32(card_status, SDState),
674         VMSTATE_PARTIAL_BUFFER(sd_status, SDState, 1),
675         VMSTATE_UINT32(vhs, SDState),
676         VMSTATE_BITMAP(wp_groups, SDState, 0, wpgrps_size),
677         VMSTATE_UINT32(blk_len, SDState),
678         VMSTATE_UINT32(multi_blk_cnt, SDState),
679         VMSTATE_UINT32(erase_start, SDState),
680         VMSTATE_UINT32(erase_end, SDState),
681         VMSTATE_UINT8_ARRAY(pwd, SDState, 16),
682         VMSTATE_UINT32(pwd_len, SDState),
683         VMSTATE_UINT8_ARRAY(function_group, SDState, 6),
684         VMSTATE_UINT8(current_cmd, SDState),
685         VMSTATE_BOOL(expecting_acmd, SDState),
686         VMSTATE_UINT32(blk_written, SDState),
687         VMSTATE_UINT64(data_start, SDState),
688         VMSTATE_UINT32(data_offset, SDState),
689         VMSTATE_UINT8_ARRAY(data, SDState, 512),
690         VMSTATE_UNUSED_V(1, 512),
691         VMSTATE_BOOL(enable, SDState),
692         VMSTATE_END_OF_LIST()
693     },
694     .subsections = (const VMStateDescription*[]) {
695         &sd_ocr_vmstate,
696         NULL
697     },
698 };
699 
700 /* Legacy initialization function for use by non-qdevified callers */
701 SDState *sd_init(BlockBackend *blk, bool is_spi)
702 {
703     Object *obj;
704     DeviceState *dev;
705     SDState *sd;
706     Error *err = NULL;
707 
708     obj = object_new(TYPE_SD_CARD);
709     dev = DEVICE(obj);
710     if (!qdev_prop_set_drive_err(dev, "drive", blk, &err)) {
711         error_reportf_err(err, "sd_init failed: ");
712         return NULL;
713     }
714     qdev_prop_set_bit(dev, "spi", is_spi);
715 
716     /*
717      * Realizing the device properly would put it into the QOM
718      * composition tree even though it is not plugged into an
719      * appropriate bus.  That's a no-no.  Hide the device from
720      * QOM/qdev, and call its qdev realize callback directly.
721      */
722     object_ref(obj);
723     object_unparent(obj);
724     sd_realize(dev, &err);
725     if (err) {
726         error_reportf_err(err, "sd_init failed: ");
727         return NULL;
728     }
729 
730     sd = SD_CARD(dev);
731     sd->me_no_qdev_me_kill_mammoth_with_rocks = true;
732     return sd;
733 }
734 
735 void sd_set_cb(SDState *sd, qemu_irq readonly, qemu_irq insert)
736 {
737     sd->readonly_cb = readonly;
738     sd->inserted_cb = insert;
739     qemu_set_irq(readonly, sd->blk ? blk_is_read_only(sd->blk) : 0);
740     qemu_set_irq(insert, sd->blk ? blk_is_inserted(sd->blk) : 0);
741 }
742 
743 static void sd_erase(SDState *sd)
744 {
745     int i;
746     uint64_t erase_start = sd->erase_start;
747     uint64_t erase_end = sd->erase_end;
748 
749     trace_sdcard_erase();
750     if (!sd->erase_start || !sd->erase_end) {
751         sd->card_status |= ERASE_SEQ_ERROR;
752         return;
753     }
754 
755     if (FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
756         /* High capacity memory card: erase units are 512 byte blocks */
757         erase_start *= 512;
758         erase_end *= 512;
759     }
760 
761     erase_start = sd_addr_to_wpnum(erase_start);
762     erase_end = sd_addr_to_wpnum(erase_end);
763     sd->erase_start = 0;
764     sd->erase_end = 0;
765     sd->csd[14] |= 0x40;
766 
767     for (i = erase_start; i <= erase_end; i++) {
768         if (test_bit(i, sd->wp_groups)) {
769             sd->card_status |= WP_ERASE_SKIP;
770         }
771     }
772 }
773 
774 static uint32_t sd_wpbits(SDState *sd, uint64_t addr)
775 {
776     uint32_t i, wpnum;
777     uint32_t ret = 0;
778 
779     wpnum = sd_addr_to_wpnum(addr);
780 
781     for (i = 0; i < 32; i++, wpnum++, addr += WPGROUP_SIZE) {
782         if (addr < sd->size && test_bit(wpnum, sd->wp_groups)) {
783             ret |= (1 << i);
784         }
785     }
786 
787     return ret;
788 }
789 
790 static void sd_function_switch(SDState *sd, uint32_t arg)
791 {
792     int i, mode, new_func;
793     mode = !!(arg & 0x80000000);
794 
795     sd->data[0] = 0x00;		/* Maximum current consumption */
796     sd->data[1] = 0x01;
797     sd->data[2] = 0x80;		/* Supported group 6 functions */
798     sd->data[3] = 0x01;
799     sd->data[4] = 0x80;		/* Supported group 5 functions */
800     sd->data[5] = 0x01;
801     sd->data[6] = 0x80;		/* Supported group 4 functions */
802     sd->data[7] = 0x01;
803     sd->data[8] = 0x80;		/* Supported group 3 functions */
804     sd->data[9] = 0x01;
805     sd->data[10] = 0x80;	/* Supported group 2 functions */
806     sd->data[11] = 0x43;
807     sd->data[12] = 0x80;	/* Supported group 1 functions */
808     sd->data[13] = 0x03;
809     for (i = 0; i < 6; i ++) {
810         new_func = (arg >> (i * 4)) & 0x0f;
811         if (mode && new_func != 0x0f)
812             sd->function_group[i] = new_func;
813         sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4);
814     }
815     memset(&sd->data[17], 0, 47);
816     stw_be_p(sd->data + 64, sd_crc16(sd->data, 64));
817 }
818 
819 static inline bool sd_wp_addr(SDState *sd, uint64_t addr)
820 {
821     return test_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
822 }
823 
824 static void sd_lock_command(SDState *sd)
825 {
826     int erase, lock, clr_pwd, set_pwd, pwd_len;
827     erase = !!(sd->data[0] & 0x08);
828     lock = sd->data[0] & 0x04;
829     clr_pwd = sd->data[0] & 0x02;
830     set_pwd = sd->data[0] & 0x01;
831 
832     if (sd->blk_len > 1)
833         pwd_len = sd->data[1];
834     else
835         pwd_len = 0;
836 
837     if (lock) {
838         trace_sdcard_lock();
839     } else {
840         trace_sdcard_unlock();
841     }
842     if (erase) {
843         if (!(sd->card_status & CARD_IS_LOCKED) || sd->blk_len > 1 ||
844                         set_pwd || clr_pwd || lock || sd->wp_switch ||
845                         (sd->csd[14] & 0x20)) {
846             sd->card_status |= LOCK_UNLOCK_FAILED;
847             return;
848         }
849         bitmap_zero(sd->wp_groups, sd->wpgrps_size);
850         sd->csd[14] &= ~0x10;
851         sd->card_status &= ~CARD_IS_LOCKED;
852         sd->pwd_len = 0;
853         /* Erasing the entire card here! */
854         fprintf(stderr, "SD: Card force-erased by CMD42\n");
855         return;
856     }
857 
858     if (sd->blk_len < 2 + pwd_len ||
859                     pwd_len <= sd->pwd_len ||
860                     pwd_len > sd->pwd_len + 16) {
861         sd->card_status |= LOCK_UNLOCK_FAILED;
862         return;
863     }
864 
865     if (sd->pwd_len && memcmp(sd->pwd, sd->data + 2, sd->pwd_len)) {
866         sd->card_status |= LOCK_UNLOCK_FAILED;
867         return;
868     }
869 
870     pwd_len -= sd->pwd_len;
871     if ((pwd_len && !set_pwd) ||
872                     (clr_pwd && (set_pwd || lock)) ||
873                     (lock && !sd->pwd_len && !set_pwd) ||
874                     (!set_pwd && !clr_pwd &&
875                      (((sd->card_status & CARD_IS_LOCKED) && lock) ||
876                       (!(sd->card_status & CARD_IS_LOCKED) && !lock)))) {
877         sd->card_status |= LOCK_UNLOCK_FAILED;
878         return;
879     }
880 
881     if (set_pwd) {
882         memcpy(sd->pwd, sd->data + 2 + sd->pwd_len, pwd_len);
883         sd->pwd_len = pwd_len;
884     }
885 
886     if (clr_pwd) {
887         sd->pwd_len = 0;
888     }
889 
890     if (lock)
891         sd->card_status |= CARD_IS_LOCKED;
892     else
893         sd->card_status &= ~CARD_IS_LOCKED;
894 }
895 
896 static sd_rsp_type_t sd_normal_command(SDState *sd, SDRequest req)
897 {
898     uint32_t rca = 0x0000;
899     uint64_t addr = (sd->ocr & (1 << 30)) ? (uint64_t) req.arg << 9 : req.arg;
900 
901     /* CMD55 precedes an ACMD, so we are not interested in tracing it.
902      * However there is no ACMD55, so we want to trace this particular case.
903      */
904     if (req.cmd != 55 || sd->expecting_acmd) {
905         trace_sdcard_normal_command(sd->proto_name,
906                                     sd_cmd_name(req.cmd), req.cmd,
907                                     req.arg, sd_state_name(sd->state));
908     }
909 
910     /* Not interpreting this as an app command */
911     sd->card_status &= ~APP_CMD;
912 
913     if (sd_cmd_type[req.cmd] == sd_ac
914         || sd_cmd_type[req.cmd] == sd_adtc) {
915         rca = req.arg >> 16;
916     }
917 
918     /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
919      * if not, its effects are cancelled */
920     if (sd->multi_blk_cnt != 0 && !(req.cmd == 18 || req.cmd == 25)) {
921         sd->multi_blk_cnt = 0;
922     }
923 
924     if (sd_cmd_class[req.cmd] == 6 && FIELD_EX32(sd->ocr, OCR, CARD_CAPACITY)) {
925         /* Only Standard Capacity cards support class 6 commands */
926         return sd_illegal;
927     }
928 
929     switch (req.cmd) {
930     /* Basic commands (Class 0 and Class 1) */
931     case 0:	/* CMD0:   GO_IDLE_STATE */
932         switch (sd->state) {
933         case sd_inactive_state:
934             return sd->spi ? sd_r1 : sd_r0;
935 
936         default:
937             sd->state = sd_idle_state;
938             sd_reset(DEVICE(sd));
939             return sd->spi ? sd_r1 : sd_r0;
940         }
941         break;
942 
943     case 1:	/* CMD1:   SEND_OP_CMD */
944         if (!sd->spi)
945             goto bad_cmd;
946 
947         sd->state = sd_transfer_state;
948         return sd_r1;
949 
950     case 2:	/* CMD2:   ALL_SEND_CID */
951         if (sd->spi)
952             goto bad_cmd;
953         switch (sd->state) {
954         case sd_ready_state:
955             sd->state = sd_identification_state;
956             return sd_r2_i;
957 
958         default:
959             break;
960         }
961         break;
962 
963     case 3:	/* CMD3:   SEND_RELATIVE_ADDR */
964         if (sd->spi)
965             goto bad_cmd;
966         switch (sd->state) {
967         case sd_identification_state:
968         case sd_standby_state:
969             sd->state = sd_standby_state;
970             sd_set_rca(sd);
971             return sd_r6;
972 
973         default:
974             break;
975         }
976         break;
977 
978     case 4:	/* CMD4:   SEND_DSR */
979         if (sd->spi)
980             goto bad_cmd;
981         switch (sd->state) {
982         case sd_standby_state:
983             break;
984 
985         default:
986             break;
987         }
988         break;
989 
990     case 5: /* CMD5: reserved for SDIO cards */
991         return sd_illegal;
992 
993     case 6:	/* CMD6:   SWITCH_FUNCTION */
994         switch (sd->mode) {
995         case sd_data_transfer_mode:
996             sd_function_switch(sd, req.arg);
997             sd->state = sd_sendingdata_state;
998             sd->data_start = 0;
999             sd->data_offset = 0;
1000             return sd_r1;
1001 
1002         default:
1003             break;
1004         }
1005         break;
1006 
1007     case 7:	/* CMD7:   SELECT/DESELECT_CARD */
1008         if (sd->spi)
1009             goto bad_cmd;
1010         switch (sd->state) {
1011         case sd_standby_state:
1012             if (sd->rca != rca)
1013                 return sd_r0;
1014 
1015             sd->state = sd_transfer_state;
1016             return sd_r1b;
1017 
1018         case sd_transfer_state:
1019         case sd_sendingdata_state:
1020             if (sd->rca == rca)
1021                 break;
1022 
1023             sd->state = sd_standby_state;
1024             return sd_r1b;
1025 
1026         case sd_disconnect_state:
1027             if (sd->rca != rca)
1028                 return sd_r0;
1029 
1030             sd->state = sd_programming_state;
1031             return sd_r1b;
1032 
1033         case sd_programming_state:
1034             if (sd->rca == rca)
1035                 break;
1036 
1037             sd->state = sd_disconnect_state;
1038             return sd_r1b;
1039 
1040         default:
1041             break;
1042         }
1043         break;
1044 
1045     case 8:	/* CMD8:   SEND_IF_COND */
1046         if (sd->spec_version < SD_PHY_SPECv2_00_VERS) {
1047             break;
1048         }
1049         if (sd->state != sd_idle_state) {
1050             break;
1051         }
1052         sd->vhs = 0;
1053 
1054         /* No response if not exactly one VHS bit is set.  */
1055         if (!(req.arg >> 8) || (req.arg >> (ctz32(req.arg & ~0xff) + 1))) {
1056             return sd->spi ? sd_r7 : sd_r0;
1057         }
1058 
1059         /* Accept.  */
1060         sd->vhs = req.arg;
1061         return sd_r7;
1062 
1063     case 9:	/* CMD9:   SEND_CSD */
1064         switch (sd->state) {
1065         case sd_standby_state:
1066             if (sd->rca != rca)
1067                 return sd_r0;
1068 
1069             return sd_r2_s;
1070 
1071         case sd_transfer_state:
1072             if (!sd->spi)
1073                 break;
1074             sd->state = sd_sendingdata_state;
1075             memcpy(sd->data, sd->csd, 16);
1076             sd->data_start = addr;
1077             sd->data_offset = 0;
1078             return sd_r1;
1079 
1080         default:
1081             break;
1082         }
1083         break;
1084 
1085     case 10:	/* CMD10:  SEND_CID */
1086         switch (sd->state) {
1087         case sd_standby_state:
1088             if (sd->rca != rca)
1089                 return sd_r0;
1090 
1091             return sd_r2_i;
1092 
1093         case sd_transfer_state:
1094             if (!sd->spi)
1095                 break;
1096             sd->state = sd_sendingdata_state;
1097             memcpy(sd->data, sd->cid, 16);
1098             sd->data_start = addr;
1099             sd->data_offset = 0;
1100             return sd_r1;
1101 
1102         default:
1103             break;
1104         }
1105         break;
1106 
1107     case 12:	/* CMD12:  STOP_TRANSMISSION */
1108         switch (sd->state) {
1109         case sd_sendingdata_state:
1110             sd->state = sd_transfer_state;
1111             return sd_r1b;
1112 
1113         case sd_receivingdata_state:
1114             sd->state = sd_programming_state;
1115             /* Bzzzzzzztt .... Operation complete.  */
1116             sd->state = sd_transfer_state;
1117             return sd_r1b;
1118 
1119         default:
1120             break;
1121         }
1122         break;
1123 
1124     case 13:	/* CMD13:  SEND_STATUS */
1125         switch (sd->mode) {
1126         case sd_data_transfer_mode:
1127             if (sd->rca != rca)
1128                 return sd_r0;
1129 
1130             return sd_r1;
1131 
1132         default:
1133             break;
1134         }
1135         break;
1136 
1137     case 15:	/* CMD15:  GO_INACTIVE_STATE */
1138         if (sd->spi)
1139             goto bad_cmd;
1140         switch (sd->mode) {
1141         case sd_data_transfer_mode:
1142             if (sd->rca != rca)
1143                 return sd_r0;
1144 
1145             sd->state = sd_inactive_state;
1146             return sd_r0;
1147 
1148         default:
1149             break;
1150         }
1151         break;
1152 
1153     /* Block read commands (Classs 2) */
1154     case 16:	/* CMD16:  SET_BLOCKLEN */
1155         switch (sd->state) {
1156         case sd_transfer_state:
1157             if (req.arg > (1 << HWBLOCK_SHIFT)) {
1158                 sd->card_status |= BLOCK_LEN_ERROR;
1159             } else {
1160                 trace_sdcard_set_blocklen(req.arg);
1161                 sd->blk_len = req.arg;
1162             }
1163 
1164             return sd_r1;
1165 
1166         default:
1167             break;
1168         }
1169         break;
1170 
1171     case 17:	/* CMD17:  READ_SINGLE_BLOCK */
1172         switch (sd->state) {
1173         case sd_transfer_state:
1174 
1175             if (addr + sd->blk_len > sd->size) {
1176                 sd->card_status |= ADDRESS_ERROR;
1177                 return sd_r1;
1178             }
1179 
1180             sd->state = sd_sendingdata_state;
1181             sd->data_start = addr;
1182             sd->data_offset = 0;
1183             return sd_r1;
1184 
1185         default:
1186             break;
1187         }
1188         break;
1189 
1190     case 18:	/* CMD18:  READ_MULTIPLE_BLOCK */
1191         switch (sd->state) {
1192         case sd_transfer_state:
1193 
1194             if (addr + sd->blk_len > sd->size) {
1195                 sd->card_status |= ADDRESS_ERROR;
1196                 return sd_r1;
1197             }
1198 
1199             sd->state = sd_sendingdata_state;
1200             sd->data_start = addr;
1201             sd->data_offset = 0;
1202             return sd_r1;
1203 
1204         default:
1205             break;
1206         }
1207         break;
1208 
1209     case 19:    /* CMD19: SEND_TUNING_BLOCK (SD) */
1210         if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1211             break;
1212         }
1213         if (sd->state == sd_transfer_state) {
1214             sd->state = sd_sendingdata_state;
1215             sd->data_offset = 0;
1216             return sd_r1;
1217         }
1218         break;
1219 
1220     case 23:    /* CMD23: SET_BLOCK_COUNT */
1221         if (sd->spec_version < SD_PHY_SPECv3_01_VERS) {
1222             break;
1223         }
1224         switch (sd->state) {
1225         case sd_transfer_state:
1226             sd->multi_blk_cnt = req.arg;
1227             return sd_r1;
1228 
1229         default:
1230             break;
1231         }
1232         break;
1233 
1234     /* Block write commands (Class 4) */
1235     case 24:	/* CMD24:  WRITE_SINGLE_BLOCK */
1236         switch (sd->state) {
1237         case sd_transfer_state:
1238             /* Writing in SPI mode not implemented.  */
1239             if (sd->spi)
1240                 break;
1241 
1242             if (addr + sd->blk_len > sd->size) {
1243                 sd->card_status |= ADDRESS_ERROR;
1244                 return sd_r1;
1245             }
1246 
1247             sd->state = sd_receivingdata_state;
1248             sd->data_start = addr;
1249             sd->data_offset = 0;
1250             sd->blk_written = 0;
1251 
1252             if (sd_wp_addr(sd, sd->data_start)) {
1253                 sd->card_status |= WP_VIOLATION;
1254             }
1255             if (sd->csd[14] & 0x30) {
1256                 sd->card_status |= WP_VIOLATION;
1257             }
1258             return sd_r1;
1259 
1260         default:
1261             break;
1262         }
1263         break;
1264 
1265     case 25:	/* CMD25:  WRITE_MULTIPLE_BLOCK */
1266         switch (sd->state) {
1267         case sd_transfer_state:
1268             /* Writing in SPI mode not implemented.  */
1269             if (sd->spi)
1270                 break;
1271 
1272             if (addr + sd->blk_len > sd->size) {
1273                 sd->card_status |= ADDRESS_ERROR;
1274                 return sd_r1;
1275             }
1276 
1277             sd->state = sd_receivingdata_state;
1278             sd->data_start = addr;
1279             sd->data_offset = 0;
1280             sd->blk_written = 0;
1281 
1282             if (sd_wp_addr(sd, sd->data_start)) {
1283                 sd->card_status |= WP_VIOLATION;
1284             }
1285             if (sd->csd[14] & 0x30) {
1286                 sd->card_status |= WP_VIOLATION;
1287             }
1288             return sd_r1;
1289 
1290         default:
1291             break;
1292         }
1293         break;
1294 
1295     case 26:	/* CMD26:  PROGRAM_CID */
1296         if (sd->spi)
1297             goto bad_cmd;
1298         switch (sd->state) {
1299         case sd_transfer_state:
1300             sd->state = sd_receivingdata_state;
1301             sd->data_start = 0;
1302             sd->data_offset = 0;
1303             return sd_r1;
1304 
1305         default:
1306             break;
1307         }
1308         break;
1309 
1310     case 27:	/* CMD27:  PROGRAM_CSD */
1311         switch (sd->state) {
1312         case sd_transfer_state:
1313             sd->state = sd_receivingdata_state;
1314             sd->data_start = 0;
1315             sd->data_offset = 0;
1316             return sd_r1;
1317 
1318         default:
1319             break;
1320         }
1321         break;
1322 
1323     /* Write protection (Class 6) */
1324     case 28:	/* CMD28:  SET_WRITE_PROT */
1325         switch (sd->state) {
1326         case sd_transfer_state:
1327             if (addr >= sd->size) {
1328                 sd->card_status |= ADDRESS_ERROR;
1329                 return sd_r1b;
1330             }
1331 
1332             sd->state = sd_programming_state;
1333             set_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1334             /* Bzzzzzzztt .... Operation complete.  */
1335             sd->state = sd_transfer_state;
1336             return sd_r1b;
1337 
1338         default:
1339             break;
1340         }
1341         break;
1342 
1343     case 29:	/* CMD29:  CLR_WRITE_PROT */
1344         switch (sd->state) {
1345         case sd_transfer_state:
1346             if (addr >= sd->size) {
1347                 sd->card_status |= ADDRESS_ERROR;
1348                 return sd_r1b;
1349             }
1350 
1351             sd->state = sd_programming_state;
1352             clear_bit(sd_addr_to_wpnum(addr), sd->wp_groups);
1353             /* Bzzzzzzztt .... Operation complete.  */
1354             sd->state = sd_transfer_state;
1355             return sd_r1b;
1356 
1357         default:
1358             break;
1359         }
1360         break;
1361 
1362     case 30:	/* CMD30:  SEND_WRITE_PROT */
1363         switch (sd->state) {
1364         case sd_transfer_state:
1365             sd->state = sd_sendingdata_state;
1366             *(uint32_t *) sd->data = sd_wpbits(sd, req.arg);
1367             sd->data_start = addr;
1368             sd->data_offset = 0;
1369             return sd_r1b;
1370 
1371         default:
1372             break;
1373         }
1374         break;
1375 
1376     /* Erase commands (Class 5) */
1377     case 32:	/* CMD32:  ERASE_WR_BLK_START */
1378         switch (sd->state) {
1379         case sd_transfer_state:
1380             sd->erase_start = req.arg;
1381             return sd_r1;
1382 
1383         default:
1384             break;
1385         }
1386         break;
1387 
1388     case 33:	/* CMD33:  ERASE_WR_BLK_END */
1389         switch (sd->state) {
1390         case sd_transfer_state:
1391             sd->erase_end = req.arg;
1392             return sd_r1;
1393 
1394         default:
1395             break;
1396         }
1397         break;
1398 
1399     case 38:	/* CMD38:  ERASE */
1400         switch (sd->state) {
1401         case sd_transfer_state:
1402             if (sd->csd[14] & 0x30) {
1403                 sd->card_status |= WP_VIOLATION;
1404                 return sd_r1b;
1405             }
1406 
1407             sd->state = sd_programming_state;
1408             sd_erase(sd);
1409             /* Bzzzzzzztt .... Operation complete.  */
1410             sd->state = sd_transfer_state;
1411             return sd_r1b;
1412 
1413         default:
1414             break;
1415         }
1416         break;
1417 
1418     /* Lock card commands (Class 7) */
1419     case 42:	/* CMD42:  LOCK_UNLOCK */
1420         switch (sd->state) {
1421         case sd_transfer_state:
1422             sd->state = sd_receivingdata_state;
1423             sd->data_start = 0;
1424             sd->data_offset = 0;
1425             return sd_r1;
1426 
1427         default:
1428             break;
1429         }
1430         break;
1431 
1432     case 52 ... 54:
1433         /* CMD52, CMD53, CMD54: reserved for SDIO cards
1434          * (see the SDIO Simplified Specification V2.0)
1435          * Handle as illegal command but do not complain
1436          * on stderr, as some OSes may use these in their
1437          * probing for presence of an SDIO card.
1438          */
1439         return sd_illegal;
1440 
1441     /* Application specific commands (Class 8) */
1442     case 55:	/* CMD55:  APP_CMD */
1443         switch (sd->state) {
1444         case sd_ready_state:
1445         case sd_identification_state:
1446         case sd_inactive_state:
1447             return sd_illegal;
1448         case sd_idle_state:
1449             if (rca) {
1450                 qemu_log_mask(LOG_GUEST_ERROR,
1451                               "SD: illegal RCA 0x%04x for APP_CMD\n", req.cmd);
1452             }
1453         default:
1454             break;
1455         }
1456         if (!sd->spi) {
1457             if (sd->rca != rca) {
1458                 return sd_r0;
1459             }
1460         }
1461         sd->expecting_acmd = true;
1462         sd->card_status |= APP_CMD;
1463         return sd_r1;
1464 
1465     case 56:	/* CMD56:  GEN_CMD */
1466         switch (sd->state) {
1467         case sd_transfer_state:
1468             sd->data_offset = 0;
1469             if (req.arg & 1)
1470                 sd->state = sd_sendingdata_state;
1471             else
1472                 sd->state = sd_receivingdata_state;
1473             return sd_r1;
1474 
1475         default:
1476             break;
1477         }
1478         break;
1479 
1480     case 58:    /* CMD58:   READ_OCR (SPI) */
1481         if (!sd->spi) {
1482             goto bad_cmd;
1483         }
1484         return sd_r3;
1485 
1486     case 59:    /* CMD59:   CRC_ON_OFF (SPI) */
1487         if (!sd->spi) {
1488             goto bad_cmd;
1489         }
1490         goto unimplemented_spi_cmd;
1491 
1492     default:
1493     bad_cmd:
1494         qemu_log_mask(LOG_GUEST_ERROR, "SD: Unknown CMD%i\n", req.cmd);
1495         return sd_illegal;
1496 
1497     unimplemented_spi_cmd:
1498         /* Commands that are recognised but not yet implemented in SPI mode.  */
1499         qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n",
1500                       req.cmd);
1501         return sd_illegal;
1502     }
1503 
1504     qemu_log_mask(LOG_GUEST_ERROR, "SD: CMD%i in a wrong state\n", req.cmd);
1505     return sd_illegal;
1506 }
1507 
1508 static sd_rsp_type_t sd_app_command(SDState *sd,
1509                                     SDRequest req)
1510 {
1511     trace_sdcard_app_command(sd->proto_name, sd_acmd_name(req.cmd),
1512                              req.cmd, req.arg, sd_state_name(sd->state));
1513     sd->card_status |= APP_CMD;
1514     switch (req.cmd) {
1515     case 6:	/* ACMD6:  SET_BUS_WIDTH */
1516         if (sd->spi) {
1517             goto unimplemented_spi_cmd;
1518         }
1519         switch (sd->state) {
1520         case sd_transfer_state:
1521             sd->sd_status[0] &= 0x3f;
1522             sd->sd_status[0] |= (req.arg & 0x03) << 6;
1523             return sd_r1;
1524 
1525         default:
1526             break;
1527         }
1528         break;
1529 
1530     case 13:	/* ACMD13: SD_STATUS */
1531         switch (sd->state) {
1532         case sd_transfer_state:
1533             sd->state = sd_sendingdata_state;
1534             sd->data_start = 0;
1535             sd->data_offset = 0;
1536             return sd_r1;
1537 
1538         default:
1539             break;
1540         }
1541         break;
1542 
1543     case 22:	/* ACMD22: SEND_NUM_WR_BLOCKS */
1544         switch (sd->state) {
1545         case sd_transfer_state:
1546             *(uint32_t *) sd->data = sd->blk_written;
1547 
1548             sd->state = sd_sendingdata_state;
1549             sd->data_start = 0;
1550             sd->data_offset = 0;
1551             return sd_r1;
1552 
1553         default:
1554             break;
1555         }
1556         break;
1557 
1558     case 23:	/* ACMD23: SET_WR_BLK_ERASE_COUNT */
1559         switch (sd->state) {
1560         case sd_transfer_state:
1561             return sd_r1;
1562 
1563         default:
1564             break;
1565         }
1566         break;
1567 
1568     case 41:	/* ACMD41: SD_APP_OP_COND */
1569         if (sd->spi) {
1570             /* SEND_OP_CMD */
1571             sd->state = sd_transfer_state;
1572             return sd_r1;
1573         }
1574         if (sd->state != sd_idle_state) {
1575             break;
1576         }
1577         /* If it's the first ACMD41 since reset, we need to decide
1578          * whether to power up. If this is not an enquiry ACMD41,
1579          * we immediately report power on and proceed below to the
1580          * ready state, but if it is, we set a timer to model a
1581          * delay for power up. This works around a bug in EDK2
1582          * UEFI, which sends an initial enquiry ACMD41, but
1583          * assumes that the card is in ready state as soon as it
1584          * sees the power up bit set. */
1585         if (!FIELD_EX32(sd->ocr, OCR, CARD_POWER_UP)) {
1586             if ((req.arg & ACMD41_ENQUIRY_MASK) != 0) {
1587                 timer_del(sd->ocr_power_timer);
1588                 sd_ocr_powerup(sd);
1589             } else {
1590                 trace_sdcard_inquiry_cmd41();
1591                 if (!timer_pending(sd->ocr_power_timer)) {
1592                     timer_mod_ns(sd->ocr_power_timer,
1593                                  (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
1594                                   + OCR_POWER_DELAY_NS));
1595                 }
1596             }
1597         }
1598 
1599         if (FIELD_EX32(sd->ocr & req.arg, OCR, VDD_VOLTAGE_WINDOW)) {
1600             /* We accept any voltage.  10000 V is nothing.
1601              *
1602              * Once we're powered up, we advance straight to ready state
1603              * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1604              */
1605             sd->state = sd_ready_state;
1606         }
1607 
1608         return sd_r3;
1609 
1610     case 42:	/* ACMD42: SET_CLR_CARD_DETECT */
1611         switch (sd->state) {
1612         case sd_transfer_state:
1613             /* Bringing in the 50KOhm pull-up resistor... Done.  */
1614             return sd_r1;
1615 
1616         default:
1617             break;
1618         }
1619         break;
1620 
1621     case 51:	/* ACMD51: SEND_SCR */
1622         switch (sd->state) {
1623         case sd_transfer_state:
1624             sd->state = sd_sendingdata_state;
1625             sd->data_start = 0;
1626             sd->data_offset = 0;
1627             return sd_r1;
1628 
1629         default:
1630             break;
1631         }
1632         break;
1633 
1634     case 18:    /* Reserved for SD security applications */
1635     case 25:
1636     case 26:
1637     case 38:
1638     case 43 ... 49:
1639         /* Refer to the "SD Specifications Part3 Security Specification" for
1640          * information about the SD Security Features.
1641          */
1642         qemu_log_mask(LOG_UNIMP, "SD: CMD%i Security not implemented\n",
1643                       req.cmd);
1644         return sd_illegal;
1645 
1646     default:
1647         /* Fall back to standard commands.  */
1648         return sd_normal_command(sd, req);
1649 
1650     unimplemented_spi_cmd:
1651         /* Commands that are recognised but not yet implemented in SPI mode.  */
1652         qemu_log_mask(LOG_UNIMP, "SD: CMD%i not implemented in SPI mode\n",
1653                       req.cmd);
1654         return sd_illegal;
1655     }
1656 
1657     qemu_log_mask(LOG_GUEST_ERROR, "SD: ACMD%i in a wrong state\n", req.cmd);
1658     return sd_illegal;
1659 }
1660 
1661 static int cmd_valid_while_locked(SDState *sd, SDRequest *req)
1662 {
1663     /* Valid commands in locked state:
1664      * basic class (0)
1665      * lock card class (7)
1666      * CMD16
1667      * implicitly, the ACMD prefix CMD55
1668      * ACMD41 and ACMD42
1669      * Anything else provokes an "illegal command" response.
1670      */
1671     if (sd->expecting_acmd) {
1672         return req->cmd == 41 || req->cmd == 42;
1673     }
1674     if (req->cmd == 16 || req->cmd == 55) {
1675         return 1;
1676     }
1677     return sd_cmd_class[req->cmd] == 0
1678             || sd_cmd_class[req->cmd] == 7;
1679 }
1680 
1681 int sd_do_command(SDState *sd, SDRequest *req,
1682                   uint8_t *response) {
1683     int last_state;
1684     sd_rsp_type_t rtype;
1685     int rsplen;
1686 
1687     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable) {
1688         return 0;
1689     }
1690 
1691     if (sd_req_crc_validate(req)) {
1692         sd->card_status |= COM_CRC_ERROR;
1693         rtype = sd_illegal;
1694         goto send_response;
1695     }
1696 
1697     if (req->cmd >= SDMMC_CMD_MAX) {
1698         qemu_log_mask(LOG_GUEST_ERROR, "SD: incorrect command 0x%02x\n",
1699                       req->cmd);
1700         req->cmd &= 0x3f;
1701     }
1702 
1703     if (sd->card_status & CARD_IS_LOCKED) {
1704         if (!cmd_valid_while_locked(sd, req)) {
1705             sd->card_status |= ILLEGAL_COMMAND;
1706             sd->expecting_acmd = false;
1707             qemu_log_mask(LOG_GUEST_ERROR, "SD: Card is locked\n");
1708             rtype = sd_illegal;
1709             goto send_response;
1710         }
1711     }
1712 
1713     last_state = sd->state;
1714     sd_set_mode(sd);
1715 
1716     if (sd->expecting_acmd) {
1717         sd->expecting_acmd = false;
1718         rtype = sd_app_command(sd, *req);
1719     } else {
1720         rtype = sd_normal_command(sd, *req);
1721     }
1722 
1723     if (rtype == sd_illegal) {
1724         sd->card_status |= ILLEGAL_COMMAND;
1725     } else {
1726         /* Valid command, we can update the 'state before command' bits.
1727          * (Do this now so they appear in r1 responses.)
1728          */
1729         sd->current_cmd = req->cmd;
1730         sd->card_status &= ~CURRENT_STATE;
1731         sd->card_status |= (last_state << 9);
1732     }
1733 
1734 send_response:
1735     switch (rtype) {
1736     case sd_r1:
1737     case sd_r1b:
1738         sd_response_r1_make(sd, response);
1739         rsplen = 4;
1740         break;
1741 
1742     case sd_r2_i:
1743         memcpy(response, sd->cid, sizeof(sd->cid));
1744         rsplen = 16;
1745         break;
1746 
1747     case sd_r2_s:
1748         memcpy(response, sd->csd, sizeof(sd->csd));
1749         rsplen = 16;
1750         break;
1751 
1752     case sd_r3:
1753         sd_response_r3_make(sd, response);
1754         rsplen = 4;
1755         break;
1756 
1757     case sd_r6:
1758         sd_response_r6_make(sd, response);
1759         rsplen = 4;
1760         break;
1761 
1762     case sd_r7:
1763         sd_response_r7_make(sd, response);
1764         rsplen = 4;
1765         break;
1766 
1767     case sd_r0:
1768     case sd_illegal:
1769         rsplen = 0;
1770         break;
1771     default:
1772         g_assert_not_reached();
1773     }
1774     trace_sdcard_response(sd_response_name(rtype), rsplen);
1775 
1776     if (rtype != sd_illegal) {
1777         /* Clear the "clear on valid command" status bits now we've
1778          * sent any response
1779          */
1780         sd->card_status &= ~CARD_STATUS_B;
1781     }
1782 
1783 #ifdef DEBUG_SD
1784     qemu_hexdump((const char *)response, stderr, "Response", rsplen);
1785 #endif
1786 
1787     return rsplen;
1788 }
1789 
1790 static void sd_blk_read(SDState *sd, uint64_t addr, uint32_t len)
1791 {
1792     trace_sdcard_read_block(addr, len);
1793     if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len) < 0) {
1794         fprintf(stderr, "sd_blk_read: read error on host side\n");
1795     }
1796 }
1797 
1798 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len)
1799 {
1800     trace_sdcard_write_block(addr, len);
1801     if (!sd->blk || blk_pwrite(sd->blk, addr, sd->data, len, 0) < 0) {
1802         fprintf(stderr, "sd_blk_write: write error on host side\n");
1803     }
1804 }
1805 
1806 #define BLK_READ_BLOCK(a, len)	sd_blk_read(sd, a, len)
1807 #define BLK_WRITE_BLOCK(a, len)	sd_blk_write(sd, a, len)
1808 #define APP_READ_BLOCK(a, len)	memset(sd->data, 0xec, len)
1809 #define APP_WRITE_BLOCK(a, len)
1810 
1811 void sd_write_data(SDState *sd, uint8_t value)
1812 {
1813     int i;
1814 
1815     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1816         return;
1817 
1818     if (sd->state != sd_receivingdata_state) {
1819         qemu_log_mask(LOG_GUEST_ERROR,
1820                       "sd_write_data: not in Receiving-Data state\n");
1821         return;
1822     }
1823 
1824     if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1825         return;
1826 
1827     trace_sdcard_write_data(sd->proto_name,
1828                             sd_acmd_name(sd->current_cmd),
1829                             sd->current_cmd, value);
1830     switch (sd->current_cmd) {
1831     case 24:	/* CMD24:  WRITE_SINGLE_BLOCK */
1832         sd->data[sd->data_offset ++] = value;
1833         if (sd->data_offset >= sd->blk_len) {
1834             /* TODO: Check CRC before committing */
1835             sd->state = sd_programming_state;
1836             BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1837             sd->blk_written ++;
1838             sd->csd[14] |= 0x40;
1839             /* Bzzzzzzztt .... Operation complete.  */
1840             sd->state = sd_transfer_state;
1841         }
1842         break;
1843 
1844     case 25:	/* CMD25:  WRITE_MULTIPLE_BLOCK */
1845         if (sd->data_offset == 0) {
1846             /* Start of the block - let's check the address is valid */
1847             if (sd->data_start + sd->blk_len > sd->size) {
1848                 sd->card_status |= ADDRESS_ERROR;
1849                 break;
1850             }
1851             if (sd_wp_addr(sd, sd->data_start)) {
1852                 sd->card_status |= WP_VIOLATION;
1853                 break;
1854             }
1855         }
1856         sd->data[sd->data_offset++] = value;
1857         if (sd->data_offset >= sd->blk_len) {
1858             /* TODO: Check CRC before committing */
1859             sd->state = sd_programming_state;
1860             BLK_WRITE_BLOCK(sd->data_start, sd->data_offset);
1861             sd->blk_written++;
1862             sd->data_start += sd->blk_len;
1863             sd->data_offset = 0;
1864             sd->csd[14] |= 0x40;
1865 
1866             /* Bzzzzzzztt .... Operation complete.  */
1867             if (sd->multi_blk_cnt != 0) {
1868                 if (--sd->multi_blk_cnt == 0) {
1869                     /* Stop! */
1870                     sd->state = sd_transfer_state;
1871                     break;
1872                 }
1873             }
1874 
1875             sd->state = sd_receivingdata_state;
1876         }
1877         break;
1878 
1879     case 26:	/* CMD26:  PROGRAM_CID */
1880         sd->data[sd->data_offset ++] = value;
1881         if (sd->data_offset >= sizeof(sd->cid)) {
1882             /* TODO: Check CRC before committing */
1883             sd->state = sd_programming_state;
1884             for (i = 0; i < sizeof(sd->cid); i ++)
1885                 if ((sd->cid[i] | 0x00) != sd->data[i])
1886                     sd->card_status |= CID_CSD_OVERWRITE;
1887 
1888             if (!(sd->card_status & CID_CSD_OVERWRITE))
1889                 for (i = 0; i < sizeof(sd->cid); i ++) {
1890                     sd->cid[i] |= 0x00;
1891                     sd->cid[i] &= sd->data[i];
1892                 }
1893             /* Bzzzzzzztt .... Operation complete.  */
1894             sd->state = sd_transfer_state;
1895         }
1896         break;
1897 
1898     case 27:	/* CMD27:  PROGRAM_CSD */
1899         sd->data[sd->data_offset ++] = value;
1900         if (sd->data_offset >= sizeof(sd->csd)) {
1901             /* TODO: Check CRC before committing */
1902             sd->state = sd_programming_state;
1903             for (i = 0; i < sizeof(sd->csd); i ++)
1904                 if ((sd->csd[i] | sd_csd_rw_mask[i]) !=
1905                     (sd->data[i] | sd_csd_rw_mask[i]))
1906                     sd->card_status |= CID_CSD_OVERWRITE;
1907 
1908             /* Copy flag (OTP) & Permanent write protect */
1909             if (sd->csd[14] & ~sd->data[14] & 0x60)
1910                 sd->card_status |= CID_CSD_OVERWRITE;
1911 
1912             if (!(sd->card_status & CID_CSD_OVERWRITE))
1913                 for (i = 0; i < sizeof(sd->csd); i ++) {
1914                     sd->csd[i] |= sd_csd_rw_mask[i];
1915                     sd->csd[i] &= sd->data[i];
1916                 }
1917             /* Bzzzzzzztt .... Operation complete.  */
1918             sd->state = sd_transfer_state;
1919         }
1920         break;
1921 
1922     case 42:	/* CMD42:  LOCK_UNLOCK */
1923         sd->data[sd->data_offset ++] = value;
1924         if (sd->data_offset >= sd->blk_len) {
1925             /* TODO: Check CRC before committing */
1926             sd->state = sd_programming_state;
1927             sd_lock_command(sd);
1928             /* Bzzzzzzztt .... Operation complete.  */
1929             sd->state = sd_transfer_state;
1930         }
1931         break;
1932 
1933     case 56:	/* CMD56:  GEN_CMD */
1934         sd->data[sd->data_offset ++] = value;
1935         if (sd->data_offset >= sd->blk_len) {
1936             APP_WRITE_BLOCK(sd->data_start, sd->data_offset);
1937             sd->state = sd_transfer_state;
1938         }
1939         break;
1940 
1941     default:
1942         qemu_log_mask(LOG_GUEST_ERROR, "sd_write_data: unknown command\n");
1943         break;
1944     }
1945 }
1946 
1947 #define SD_TUNING_BLOCK_SIZE    64
1948 
1949 static const uint8_t sd_tuning_block_pattern[SD_TUNING_BLOCK_SIZE] = {
1950     /* See: Physical Layer Simplified Specification Version 3.01, Table 4-2 */
1951     0xff, 0x0f, 0xff, 0x00,         0x0f, 0xfc, 0xc3, 0xcc,
1952     0xc3, 0x3c, 0xcc, 0xff,         0xfe, 0xff, 0xfe, 0xef,
1953     0xff, 0xdf, 0xff, 0xdd,         0xff, 0xfb, 0xff, 0xfb,
1954     0xbf, 0xff, 0x7f, 0xff,         0x77, 0xf7, 0xbd, 0xef,
1955     0xff, 0xf0, 0xff, 0xf0,         0x0f, 0xfc, 0xcc, 0x3c,
1956     0xcc, 0x33, 0xcc, 0xcf,         0xff, 0xef, 0xff, 0xee,
1957     0xff, 0xfd, 0xff, 0xfd,         0xdf, 0xff, 0xbf, 0xff,
1958     0xbb, 0xff, 0xf7, 0xff,         0xf7, 0x7f, 0x7b, 0xde,
1959 };
1960 
1961 uint8_t sd_read_data(SDState *sd)
1962 {
1963     /* TODO: Append CRCs */
1964     uint8_t ret;
1965     int io_len;
1966 
1967     if (!sd->blk || !blk_is_inserted(sd->blk) || !sd->enable)
1968         return 0x00;
1969 
1970     if (sd->state != sd_sendingdata_state) {
1971         qemu_log_mask(LOG_GUEST_ERROR,
1972                       "sd_read_data: not in Sending-Data state\n");
1973         return 0x00;
1974     }
1975 
1976     if (sd->card_status & (ADDRESS_ERROR | WP_VIOLATION))
1977         return 0x00;
1978 
1979     io_len = (sd->ocr & (1 << 30)) ? 512 : sd->blk_len;
1980 
1981     trace_sdcard_read_data(sd->proto_name,
1982                            sd_acmd_name(sd->current_cmd),
1983                            sd->current_cmd, io_len);
1984     switch (sd->current_cmd) {
1985     case 6:	/* CMD6:   SWITCH_FUNCTION */
1986         ret = sd->data[sd->data_offset ++];
1987 
1988         if (sd->data_offset >= 64)
1989             sd->state = sd_transfer_state;
1990         break;
1991 
1992     case 9:	/* CMD9:   SEND_CSD */
1993     case 10:	/* CMD10:  SEND_CID */
1994         ret = sd->data[sd->data_offset ++];
1995 
1996         if (sd->data_offset >= 16)
1997             sd->state = sd_transfer_state;
1998         break;
1999 
2000     case 13:	/* ACMD13: SD_STATUS */
2001         ret = sd->sd_status[sd->data_offset ++];
2002 
2003         if (sd->data_offset >= sizeof(sd->sd_status))
2004             sd->state = sd_transfer_state;
2005         break;
2006 
2007     case 17:	/* CMD17:  READ_SINGLE_BLOCK */
2008         if (sd->data_offset == 0)
2009             BLK_READ_BLOCK(sd->data_start, io_len);
2010         ret = sd->data[sd->data_offset ++];
2011 
2012         if (sd->data_offset >= io_len)
2013             sd->state = sd_transfer_state;
2014         break;
2015 
2016     case 18:	/* CMD18:  READ_MULTIPLE_BLOCK */
2017         if (sd->data_offset == 0) {
2018             if (sd->data_start + io_len > sd->size) {
2019                 sd->card_status |= ADDRESS_ERROR;
2020                 return 0x00;
2021             }
2022             BLK_READ_BLOCK(sd->data_start, io_len);
2023         }
2024         ret = sd->data[sd->data_offset ++];
2025 
2026         if (sd->data_offset >= io_len) {
2027             sd->data_start += io_len;
2028             sd->data_offset = 0;
2029 
2030             if (sd->multi_blk_cnt != 0) {
2031                 if (--sd->multi_blk_cnt == 0) {
2032                     /* Stop! */
2033                     sd->state = sd_transfer_state;
2034                     break;
2035                 }
2036             }
2037         }
2038         break;
2039 
2040     case 19:    /* CMD19:  SEND_TUNING_BLOCK (SD) */
2041         if (sd->data_offset >= SD_TUNING_BLOCK_SIZE - 1) {
2042             sd->state = sd_transfer_state;
2043         }
2044         ret = sd_tuning_block_pattern[sd->data_offset++];
2045         break;
2046 
2047     case 22:	/* ACMD22: SEND_NUM_WR_BLOCKS */
2048         ret = sd->data[sd->data_offset ++];
2049 
2050         if (sd->data_offset >= 4)
2051             sd->state = sd_transfer_state;
2052         break;
2053 
2054     case 30:	/* CMD30:  SEND_WRITE_PROT */
2055         ret = sd->data[sd->data_offset ++];
2056 
2057         if (sd->data_offset >= 4)
2058             sd->state = sd_transfer_state;
2059         break;
2060 
2061     case 51:	/* ACMD51: SEND_SCR */
2062         ret = sd->scr[sd->data_offset ++];
2063 
2064         if (sd->data_offset >= sizeof(sd->scr))
2065             sd->state = sd_transfer_state;
2066         break;
2067 
2068     case 56:	/* CMD56:  GEN_CMD */
2069         if (sd->data_offset == 0)
2070             APP_READ_BLOCK(sd->data_start, sd->blk_len);
2071         ret = sd->data[sd->data_offset ++];
2072 
2073         if (sd->data_offset >= sd->blk_len)
2074             sd->state = sd_transfer_state;
2075         break;
2076 
2077     default:
2078         qemu_log_mask(LOG_GUEST_ERROR, "sd_read_data: unknown command\n");
2079         return 0x00;
2080     }
2081 
2082     return ret;
2083 }
2084 
2085 bool sd_data_ready(SDState *sd)
2086 {
2087     return sd->state == sd_sendingdata_state;
2088 }
2089 
2090 void sd_enable(SDState *sd, bool enable)
2091 {
2092     sd->enable = enable;
2093 }
2094 
2095 static void sd_instance_init(Object *obj)
2096 {
2097     SDState *sd = SD_CARD(obj);
2098 
2099     sd->enable = true;
2100     sd->ocr_power_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, sd_ocr_powerup, sd);
2101 }
2102 
2103 static void sd_instance_finalize(Object *obj)
2104 {
2105     SDState *sd = SD_CARD(obj);
2106 
2107     timer_del(sd->ocr_power_timer);
2108     timer_free(sd->ocr_power_timer);
2109 }
2110 
2111 static void sd_realize(DeviceState *dev, Error **errp)
2112 {
2113     SDState *sd = SD_CARD(dev);
2114     int ret;
2115 
2116     sd->proto_name = sd->spi ? "SPI" : "SD";
2117 
2118     switch (sd->spec_version) {
2119     case SD_PHY_SPECv1_10_VERS
2120      ... SD_PHY_SPECv3_01_VERS:
2121         break;
2122     default:
2123         error_setg(errp, "Invalid SD card Spec version: %u", sd->spec_version);
2124         return;
2125     }
2126 
2127     if (sd->blk) {
2128         int64_t blk_size;
2129 
2130         if (blk_is_read_only(sd->blk)) {
2131             error_setg(errp, "Cannot use read-only drive as SD card");
2132             return;
2133         }
2134 
2135         blk_size = blk_getlength(sd->blk);
2136         if (blk_size > 0 && !is_power_of_2(blk_size)) {
2137             int64_t blk_size_aligned = pow2ceil(blk_size);
2138             char *blk_size_str;
2139 
2140             blk_size_str = size_to_str(blk_size);
2141             error_setg(errp, "Invalid SD card size: %s", blk_size_str);
2142             g_free(blk_size_str);
2143 
2144             blk_size_str = size_to_str(blk_size_aligned);
2145             error_append_hint(errp,
2146                               "SD card size has to be a power of 2, e.g. %s.\n"
2147                               "You can resize disk images with"
2148                               " 'qemu-img resize <imagefile> <new-size>'\n"
2149                               "(note that this will lose data if you make the"
2150                               " image smaller than it currently is).\n",
2151                               blk_size_str);
2152             g_free(blk_size_str);
2153 
2154             return;
2155         }
2156 
2157         ret = blk_set_perm(sd->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
2158                            BLK_PERM_ALL, errp);
2159         if (ret < 0) {
2160             return;
2161         }
2162         blk_set_dev_ops(sd->blk, &sd_block_ops, sd);
2163     }
2164 }
2165 
2166 static Property sd_properties[] = {
2167     DEFINE_PROP_UINT8("spec_version", SDState,
2168                       spec_version, SD_PHY_SPECv2_00_VERS),
2169     DEFINE_PROP_DRIVE("drive", SDState, blk),
2170     /* We do not model the chip select pin, so allow the board to select
2171      * whether card should be in SSI or MMC/SD mode.  It is also up to the
2172      * board to ensure that ssi transfers only occur when the chip select
2173      * is asserted.  */
2174     DEFINE_PROP_BOOL("spi", SDState, spi, false),
2175     DEFINE_PROP_END_OF_LIST()
2176 };
2177 
2178 static void sd_class_init(ObjectClass *klass, void *data)
2179 {
2180     DeviceClass *dc = DEVICE_CLASS(klass);
2181     SDCardClass *sc = SD_CARD_CLASS(klass);
2182 
2183     dc->realize = sd_realize;
2184     device_class_set_props(dc, sd_properties);
2185     dc->vmsd = &sd_vmstate;
2186     dc->reset = sd_reset;
2187     dc->bus_type = TYPE_SD_BUS;
2188     set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
2189 
2190     sc->set_voltage = sd_set_voltage;
2191     sc->get_dat_lines = sd_get_dat_lines;
2192     sc->get_cmd_line = sd_get_cmd_line;
2193     sc->do_command = sd_do_command;
2194     sc->write_data = sd_write_data;
2195     sc->read_data = sd_read_data;
2196     sc->data_ready = sd_data_ready;
2197     sc->enable = sd_enable;
2198     sc->get_inserted = sd_get_inserted;
2199     sc->get_readonly = sd_get_readonly;
2200 }
2201 
2202 static const TypeInfo sd_info = {
2203     .name = TYPE_SD_CARD,
2204     .parent = TYPE_DEVICE,
2205     .instance_size = sizeof(SDState),
2206     .class_size = sizeof(SDCardClass),
2207     .class_init = sd_class_init,
2208     .instance_init = sd_instance_init,
2209     .instance_finalize = sd_instance_finalize,
2210 };
2211 
2212 static void sd_register_types(void)
2213 {
2214     type_register_static(&sd_info);
2215 }
2216 
2217 type_init(sd_register_types)
2218