2 * SD Memory Card emulation as defined in the "SD Memory Card Physical
3 * layer specification, Version 2.00."
5 * Copyright (c) 2006 Andrzej Zaborowski <balrog@zabor.org>
6 * Copyright (c) 2007 CodeSourcery
7 * Copyright (c) 2018 Philippe Mathieu-Daudé <f4bug@amsat.org>
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
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
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.
33 #include "qemu/osdep.h"
34 #include "qemu/units.h"
35 #include "qemu/cutils.h"
37 #include "hw/registerfields.h"
38 #include "sysemu/block-backend.h"
40 #include "hw/sd/sdcard_legacy.h"
41 #include "migration/vmstate.h"
42 #include "qapi/error.h"
43 #include "qemu/bitmap.h"
44 #include "hw/qdev-properties.h"
45 #include "hw/qdev-properties-system.h"
46 #include "qemu/error-report.h"
47 #include "qemu/timer.h"
49 #include "qemu/module.h"
50 #include "sdmmc-internal.h"
55 #define SDSC_MAX_CAPACITY (2 * GiB)
57 #define INVALID_ADDRESS UINT32_MAX
60 sd_r0
= 0, /* no response */
61 sd_r1
, /* normal response command */
62 sd_r2_i
, /* CID register */
63 sd_r2_s
, /* CSD register */
64 sd_r3
, /* OCR register */
65 sd_r6
= 6, /* Published RCA response */
66 sd_r7
, /* Operating voltage */
73 sd_card_identification_mode
,
74 sd_data_transfer_mode
,
78 sd_inactive_state
= -1,
81 sd_identification_state
,
85 sd_receivingdata_state
,
90 typedef sd_rsp_type_t (*sd_cmd_handler
)(SDState
*sd
, SDRequest req
);
92 typedef struct SDProto
{
94 sd_cmd_handler cmd
[SDMMC_CMD_MAX
];
95 sd_cmd_handler acmd
[SDMMC_CMD_MAX
];
99 DeviceState parent_obj
;
101 /* If true, created by sd_init() for a non-qdevified caller */
102 /* TODO purge them with fire */
103 bool me_no_qdev_me_kill_mammoth_with_rocks
;
105 /* SD Memory Card Registers */
111 uint32_t card_status
;
112 uint8_t sd_status
[64];
114 /* Static properties */
116 uint8_t spec_version
;
119 /* Runtime changeables */
121 uint32_t mode
; /* current card mode, one of SDCardModes */
122 int32_t state
; /* current card state, one of SDCardStates */
125 unsigned long *wp_group_bmap
;
126 int32_t wp_group_bits
;
129 uint32_t multi_blk_cnt
;
130 uint32_t erase_start
;
134 uint8_t function_group
[6];
136 /* True if we will handle the next command as an ACMD. Note that this does
137 * *not* track the APP_CMD status bit!
140 uint32_t blk_written
;
142 uint32_t data_offset
;
144 qemu_irq readonly_cb
;
145 qemu_irq inserted_cb
;
146 QEMUTimer
*ocr_power_timer
;
152 static void sd_realize(DeviceState
*dev
, Error
**errp
);
154 static const struct SDProto
*sd_proto(SDState
*sd
)
156 SDCardClass
*sc
= SD_CARD_GET_CLASS(sd
);
161 static const SDProto sd_proto_spi
;
163 static bool sd_is_spi(SDState
*sd
)
165 return sd_proto(sd
) == &sd_proto_spi
;
168 static const char *sd_version_str(enum SDPhySpecificationVersion version
)
170 static const char *sdphy_version
[] = {
171 [SD_PHY_SPECv1_10_VERS
] = "v1.10",
172 [SD_PHY_SPECv2_00_VERS
] = "v2.00",
173 [SD_PHY_SPECv3_01_VERS
] = "v3.01",
175 if (version
>= ARRAY_SIZE(sdphy_version
)) {
176 return "unsupported version";
178 return sdphy_version
[version
];
181 static const char *sd_state_name(enum SDCardStates state
)
183 static const char *state_name
[] = {
184 [sd_idle_state
] = "idle",
185 [sd_ready_state
] = "ready",
186 [sd_identification_state
] = "identification",
187 [sd_standby_state
] = "standby",
188 [sd_transfer_state
] = "transfer",
189 [sd_sendingdata_state
] = "sendingdata",
190 [sd_receivingdata_state
] = "receivingdata",
191 [sd_programming_state
] = "programming",
192 [sd_disconnect_state
] = "disconnect",
194 if (state
== sd_inactive_state
) {
197 assert(state
< ARRAY_SIZE(state_name
));
198 return state_name
[state
];
201 static const char *sd_response_name(sd_rsp_type_t rsp
)
203 static const char *response_name
[] = {
204 [sd_r0
] = "RESP#0 (no response)",
205 [sd_r1
] = "RESP#1 (normal cmd)",
206 [sd_r2_i
] = "RESP#2 (CID reg)",
207 [sd_r2_s
] = "RESP#2 (CSD reg)",
208 [sd_r3
] = "RESP#3 (OCR reg)",
209 [sd_r6
] = "RESP#6 (RCA)",
210 [sd_r7
] = "RESP#7 (operating voltage)",
212 if (rsp
== sd_illegal
) {
213 return "ILLEGAL RESP";
218 assert(rsp
< ARRAY_SIZE(response_name
));
219 return response_name
[rsp
];
222 static uint8_t sd_get_dat_lines(SDState
*sd
)
224 return sd
->enable
? sd
->dat_lines
: 0;
227 static bool sd_get_cmd_line(SDState
*sd
)
229 return sd
->enable
? sd
->cmd_line
: false;
232 static void sd_set_voltage(SDState
*sd
, uint16_t millivolts
)
234 trace_sdcard_set_voltage(millivolts
);
236 switch (millivolts
) {
237 case 3001 ... 3600: /* SD_VOLTAGE_3_3V */
238 case 2001 ... 3000: /* SD_VOLTAGE_3_0V */
241 qemu_log_mask(LOG_GUEST_ERROR
, "SD card voltage not supported: %.3fV",
242 millivolts
/ 1000.f
);
246 static void sd_set_mode(SDState
*sd
)
249 case sd_inactive_state
:
250 sd
->mode
= sd_inactive
;
255 case sd_identification_state
:
256 sd
->mode
= sd_card_identification_mode
;
259 case sd_standby_state
:
260 case sd_transfer_state
:
261 case sd_sendingdata_state
:
262 case sd_receivingdata_state
:
263 case sd_programming_state
:
264 case sd_disconnect_state
:
265 sd
->mode
= sd_data_transfer_mode
;
270 static const sd_cmd_type_t sd_cmd_type
[SDMMC_CMD_MAX
] = {
271 sd_bc
, sd_none
, sd_bcr
, sd_bcr
, sd_none
, sd_none
, sd_none
, sd_ac
,
272 sd_bcr
, sd_ac
, sd_ac
, sd_adtc
, sd_ac
, sd_ac
, sd_none
, sd_ac
,
274 sd_ac
, sd_adtc
, sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
275 sd_adtc
, sd_adtc
, sd_adtc
, sd_adtc
, sd_ac
, sd_ac
, sd_adtc
, sd_none
,
277 sd_ac
, sd_ac
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
, sd_none
,
278 sd_none
, sd_none
, sd_bc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
280 sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_ac
,
281 sd_adtc
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
, sd_none
,
284 static const int sd_cmd_class
[SDMMC_CMD_MAX
] = {
285 0, 0, 0, 0, 0, 9, 10, 0, 0, 0, 0, 1, 0, 0, 0, 0,
286 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 6, 6, 6, 6,
287 5, 5, 10, 10, 10, 10, 5, 9, 9, 9, 7, 7, 7, 7, 7, 7,
288 7, 7, 10, 7, 9, 9, 9, 8, 8, 10, 8, 8, 8, 8, 8, 8,
291 static uint8_t sd_crc7(const void *message
, size_t width
)
294 uint8_t shift_reg
= 0x00;
295 const uint8_t *msg
= (const uint8_t *)message
;
297 for (i
= 0; i
< width
; i
++, msg
++)
298 for (bit
= 7; bit
>= 0; bit
--) {
300 if ((shift_reg
>> 7) ^ ((*msg
>> bit
) & 1))
307 #define OCR_POWER_DELAY_NS 500000 /* 0.5ms */
309 FIELD(OCR
, VDD_VOLTAGE_WINDOW
, 0, 24)
310 FIELD(OCR
, VDD_VOLTAGE_WIN_LO
, 0, 8)
311 FIELD(OCR
, DUAL_VOLTAGE_CARD
, 7, 1)
312 FIELD(OCR
, VDD_VOLTAGE_WIN_HI
, 8, 16)
313 FIELD(OCR
, ACCEPT_SWITCH_1V8
, 24, 1) /* Only UHS-I */
314 FIELD(OCR
, UHS_II_CARD
, 29, 1) /* Only UHS-II */
315 FIELD(OCR
, CARD_CAPACITY
, 30, 1) /* 0:SDSC, 1:SDHC/SDXC */
316 FIELD(OCR
, CARD_POWER_UP
, 31, 1)
318 #define ACMD41_ENQUIRY_MASK 0x00ffffff
319 #define ACMD41_R3_MASK (R_OCR_VDD_VOLTAGE_WIN_HI_MASK \
320 | R_OCR_ACCEPT_SWITCH_1V8_MASK \
321 | R_OCR_UHS_II_CARD_MASK \
322 | R_OCR_CARD_CAPACITY_MASK \
323 | R_OCR_CARD_POWER_UP_MASK)
325 static void sd_ocr_powerup(void *opaque
)
327 SDState
*sd
= opaque
;
329 trace_sdcard_powerup();
330 assert(!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
));
332 /* card power-up OK */
333 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_POWER_UP
, 1);
335 if (sd
->size
> SDSC_MAX_CAPACITY
) {
336 sd
->ocr
= FIELD_DP32(sd
->ocr
, OCR
, CARD_CAPACITY
, 1);
340 static void sd_set_ocr(SDState
*sd
)
342 /* All voltages OK */
343 sd
->ocr
= R_OCR_VDD_VOLTAGE_WIN_HI_MASK
;
347 * We don't need to emulate power up sequence in SPI-mode.
348 * Thus, the card's power up status bit should be set to 1 when reset.
349 * The card's capacity status bit should also be set if SD card size
350 * is larger than 2GB for SDHC support.
356 static void sd_set_scr(SDState
*sd
)
358 sd
->scr
[0] = 0 << 4; /* SCR structure version 1.0 */
359 if (sd
->spec_version
== SD_PHY_SPECv1_10_VERS
) {
360 sd
->scr
[0] |= 1; /* Spec Version 1.10 */
362 sd
->scr
[0] |= 2; /* Spec Version 2.00 or Version 3.0X */
364 sd
->scr
[1] = (2 << 4) /* SDSC Card (Security Version 1.01) */
365 | 0b0101; /* 1-bit or 4-bit width bus modes */
366 sd
->scr
[2] = 0x00; /* Extended Security is not supported. */
367 if (sd
->spec_version
>= SD_PHY_SPECv3_01_VERS
) {
368 sd
->scr
[2] |= 1 << 7; /* Spec Version 3.0X */
371 /* reserved for manufacturer usage */
385 static void sd_set_cid(SDState
*sd
)
387 sd
->cid
[0] = MID
; /* Fake card manufacturer ID (MID) */
388 sd
->cid
[1] = OID
[0]; /* OEM/Application ID (OID) */
390 sd
->cid
[3] = PNM
[0]; /* Fake product name (PNM) */
395 sd
->cid
[8] = PRV
; /* Fake product revision (PRV) */
396 sd
->cid
[9] = 0xde; /* Fake serial number (PSN) */
400 sd
->cid
[13] = 0x00 | /* Manufacture date (MDT) */
401 ((MDT_YR
- 2000) / 10);
402 sd
->cid
[14] = ((MDT_YR
% 10) << 4) | MDT_MON
;
403 sd
->cid
[15] = (sd_crc7(sd
->cid
, 15) << 1) | 1;
406 #define HWBLOCK_SHIFT 9 /* 512 bytes */
407 #define SECTOR_SHIFT 5 /* 16 kilobytes */
408 #define WPGROUP_SHIFT 7 /* 2 megs */
409 #define CMULT_SHIFT 9 /* 512 times HWBLOCK_SIZE */
410 #define WPGROUP_SIZE (1 << (HWBLOCK_SHIFT + SECTOR_SHIFT + WPGROUP_SHIFT))
412 static const uint8_t sd_csd_rw_mask
[16] = {
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfe,
417 static void sd_set_csd(SDState
*sd
, uint64_t size
)
419 int hwblock_shift
= HWBLOCK_SHIFT
;
421 uint32_t sectsize
= (1 << (SECTOR_SHIFT
+ 1)) - 1;
422 uint32_t wpsize
= (1 << (WPGROUP_SHIFT
+ 1)) - 1;
424 /* To indicate 2 GiB card, BLOCK_LEN shall be 1024 bytes */
425 if (size
== SDSC_MAX_CAPACITY
) {
428 csize
= (size
>> (CMULT_SHIFT
+ hwblock_shift
)) - 1;
430 if (size
<= SDSC_MAX_CAPACITY
) { /* Standard Capacity SD */
431 sd
->csd
[0] = 0x00; /* CSD structure */
432 sd
->csd
[1] = 0x26; /* Data read access-time-1 */
433 sd
->csd
[2] = 0x00; /* Data read access-time-2 */
434 sd
->csd
[3] = 0x32; /* Max. data transfer rate: 25 MHz */
435 sd
->csd
[4] = 0x5f; /* Card Command Classes */
436 sd
->csd
[5] = 0x50 | /* Max. read data block length */
438 sd
->csd
[6] = 0xe0 | /* Partial block for read allowed */
439 ((csize
>> 10) & 0x03);
440 sd
->csd
[7] = 0x00 | /* Device size */
441 ((csize
>> 2) & 0xff);
442 sd
->csd
[8] = 0x3f | /* Max. read current */
443 ((csize
<< 6) & 0xc0);
444 sd
->csd
[9] = 0xfc | /* Max. write current */
445 ((CMULT_SHIFT
- 2) >> 1);
446 sd
->csd
[10] = 0x40 | /* Erase sector size */
447 (((CMULT_SHIFT
- 2) << 7) & 0x80) | (sectsize
>> 1);
448 sd
->csd
[11] = 0x00 | /* Write protect group size */
449 ((sectsize
<< 7) & 0x80) | wpsize
;
450 sd
->csd
[12] = 0x90 | /* Write speed factor */
451 (hwblock_shift
>> 2);
452 sd
->csd
[13] = 0x20 | /* Max. write data block length */
453 ((hwblock_shift
<< 6) & 0xc0);
454 sd
->csd
[14] = 0x00; /* File format group */
465 sd
->csd
[7] = (size
>> 16) & 0xff;
466 sd
->csd
[8] = (size
>> 8) & 0xff;
467 sd
->csd
[9] = (size
& 0xff);
474 sd
->csd
[15] = (sd_crc7(sd
->csd
, 15) << 1) | 1;
477 static void sd_set_rca(SDState
*sd
)
482 FIELD(CSR
, AKE_SEQ_ERROR
, 3, 1)
483 FIELD(CSR
, APP_CMD
, 5, 1)
484 FIELD(CSR
, FX_EVENT
, 6, 1)
485 FIELD(CSR
, READY_FOR_DATA
, 8, 1)
486 FIELD(CSR
, CURRENT_STATE
, 9, 4)
487 FIELD(CSR
, ERASE_RESET
, 13, 1)
488 FIELD(CSR
, CARD_ECC_DISABLED
, 14, 1)
489 FIELD(CSR
, WP_ERASE_SKIP
, 15, 1)
490 FIELD(CSR
, CSD_OVERWRITE
, 16, 1)
491 FIELD(CSR
, DEFERRED_RESPONSE
, 17, 1)
492 FIELD(CSR
, ERROR
, 19, 1)
493 FIELD(CSR
, CC_ERROR
, 20, 1)
494 FIELD(CSR
, CARD_ECC_FAILED
, 21, 1)
495 FIELD(CSR
, ILLEGAL_COMMAND
, 22, 1)
496 FIELD(CSR
, COM_CRC_ERROR
, 23, 1)
497 FIELD(CSR
, LOCK_UNLOCK_FAILED
, 24, 1)
498 FIELD(CSR
, CARD_IS_LOCKED
, 25, 1)
499 FIELD(CSR
, WP_VIOLATION
, 26, 1)
500 FIELD(CSR
, ERASE_PARAM
, 27, 1)
501 FIELD(CSR
, ERASE_SEQ_ERROR
, 28, 1)
502 FIELD(CSR
, BLOCK_LEN_ERROR
, 29, 1)
503 FIELD(CSR
, ADDRESS_ERROR
, 30, 1)
504 FIELD(CSR
, OUT_OF_RANGE
, 31, 1)
506 /* Card status bits, split by clear condition:
507 * A : According to the card current state
508 * B : Always related to the previous command
509 * C : Cleared by read
511 #define CARD_STATUS_A (R_CSR_READY_FOR_DATA_MASK \
512 | R_CSR_CARD_ECC_DISABLED_MASK \
513 | R_CSR_CARD_IS_LOCKED_MASK)
514 #define CARD_STATUS_B (R_CSR_CURRENT_STATE_MASK \
515 | R_CSR_ILLEGAL_COMMAND_MASK \
516 | R_CSR_COM_CRC_ERROR_MASK)
517 #define CARD_STATUS_C (R_CSR_AKE_SEQ_ERROR_MASK \
518 | R_CSR_APP_CMD_MASK \
519 | R_CSR_ERASE_RESET_MASK \
520 | R_CSR_WP_ERASE_SKIP_MASK \
521 | R_CSR_CSD_OVERWRITE_MASK \
523 | R_CSR_CC_ERROR_MASK \
524 | R_CSR_CARD_ECC_FAILED_MASK \
525 | R_CSR_LOCK_UNLOCK_FAILED_MASK \
526 | R_CSR_WP_VIOLATION_MASK \
527 | R_CSR_ERASE_PARAM_MASK \
528 | R_CSR_ERASE_SEQ_ERROR_MASK \
529 | R_CSR_BLOCK_LEN_ERROR_MASK \
530 | R_CSR_ADDRESS_ERROR_MASK \
531 | R_CSR_OUT_OF_RANGE_MASK)
533 static void sd_set_cardstatus(SDState
*sd
)
535 sd
->card_status
= 0x00000100;
538 static void sd_set_sdstatus(SDState
*sd
)
540 memset(sd
->sd_status
, 0, 64);
543 static int sd_req_crc_validate(SDRequest
*req
)
546 buffer
[0] = 0x40 | req
->cmd
;
547 stl_be_p(&buffer
[1], req
->arg
);
549 return sd_crc7(buffer
, 5) != req
->crc
; /* TODO */
552 static void sd_response_r1_make(SDState
*sd
, uint8_t *response
)
554 stl_be_p(response
, sd
->card_status
);
556 /* Clear the "clear on read" status bits */
557 sd
->card_status
&= ~CARD_STATUS_C
;
560 static void sd_response_r3_make(SDState
*sd
, uint8_t *response
)
562 stl_be_p(response
, sd
->ocr
& ACMD41_R3_MASK
);
565 static void sd_response_r6_make(SDState
*sd
, uint8_t *response
)
569 status
= ((sd
->card_status
>> 8) & 0xc000) |
570 ((sd
->card_status
>> 6) & 0x2000) |
571 (sd
->card_status
& 0x1fff);
572 sd
->card_status
&= ~(CARD_STATUS_C
& 0xc81fff);
573 stw_be_p(response
+ 0, sd
->rca
);
574 stw_be_p(response
+ 2, status
);
577 static void sd_response_r7_make(SDState
*sd
, uint8_t *response
)
579 stl_be_p(response
, sd
->vhs
);
582 static inline uint64_t sd_addr_to_wpnum(uint64_t addr
)
584 return addr
>> (HWBLOCK_SHIFT
+ SECTOR_SHIFT
+ WPGROUP_SHIFT
);
587 static void sd_reset(DeviceState
*dev
)
589 SDState
*sd
= SD_CARD(dev
);
593 trace_sdcard_reset();
595 blk_get_geometry(sd
->blk
, §
);
601 sect
= sd_addr_to_wpnum(size
) + 1;
603 sd
->state
= sd_idle_state
;
609 sd_set_csd(sd
, size
);
610 sd_set_cardstatus(sd
);
613 g_free(sd
->wp_group_bmap
);
614 sd
->wp_switch
= sd
->blk
? !blk_is_writable(sd
->blk
) : false;
615 sd
->wp_group_bits
= sect
;
616 sd
->wp_group_bmap
= bitmap_new(sd
->wp_group_bits
);
617 memset(sd
->function_group
, 0, sizeof(sd
->function_group
));
618 sd
->erase_start
= INVALID_ADDRESS
;
619 sd
->erase_end
= INVALID_ADDRESS
;
622 sd
->expecting_acmd
= false;
625 sd
->multi_blk_cnt
= 0;
628 static bool sd_get_inserted(SDState
*sd
)
630 return sd
->blk
&& blk_is_inserted(sd
->blk
);
633 static bool sd_get_readonly(SDState
*sd
)
635 return sd
->wp_switch
;
638 static void sd_cardchange(void *opaque
, bool load
, Error
**errp
)
640 SDState
*sd
= opaque
;
641 DeviceState
*dev
= DEVICE(sd
);
643 bool inserted
= sd_get_inserted(sd
);
644 bool readonly
= sd_get_readonly(sd
);
647 trace_sdcard_inserted(readonly
);
650 trace_sdcard_ejected();
653 if (sd
->me_no_qdev_me_kill_mammoth_with_rocks
) {
654 qemu_set_irq(sd
->inserted_cb
, inserted
);
656 qemu_set_irq(sd
->readonly_cb
, readonly
);
659 sdbus
= SD_BUS(qdev_get_parent_bus(dev
));
660 sdbus_set_inserted(sdbus
, inserted
);
662 sdbus_set_readonly(sdbus
, readonly
);
667 static const BlockDevOps sd_block_ops
= {
668 .change_media_cb
= sd_cardchange
,
671 static bool sd_ocr_vmstate_needed(void *opaque
)
673 SDState
*sd
= opaque
;
675 /* Include the OCR state (and timer) if it is not yet powered up */
676 return !FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
);
679 static const VMStateDescription sd_ocr_vmstate
= {
680 .name
= "sd-card/ocr-state",
682 .minimum_version_id
= 1,
683 .needed
= sd_ocr_vmstate_needed
,
684 .fields
= (const VMStateField
[]) {
685 VMSTATE_UINT32(ocr
, SDState
),
686 VMSTATE_TIMER_PTR(ocr_power_timer
, SDState
),
687 VMSTATE_END_OF_LIST()
691 static int sd_vmstate_pre_load(void *opaque
)
693 SDState
*sd
= opaque
;
695 /* If the OCR state is not included (prior versions, or not
696 * needed), then the OCR must be set as powered up. If the OCR state
697 * is included, this will be replaced by the state restore.
704 static const VMStateDescription sd_vmstate
= {
707 .minimum_version_id
= 2,
708 .pre_load
= sd_vmstate_pre_load
,
709 .fields
= (const VMStateField
[]) {
710 VMSTATE_UINT32(mode
, SDState
),
711 VMSTATE_INT32(state
, SDState
),
712 VMSTATE_UINT8_ARRAY(cid
, SDState
, 16),
713 VMSTATE_UINT8_ARRAY(csd
, SDState
, 16),
714 VMSTATE_UINT16(rca
, SDState
),
715 VMSTATE_UINT32(card_status
, SDState
),
716 VMSTATE_PARTIAL_BUFFER(sd_status
, SDState
, 1),
717 VMSTATE_UINT32(vhs
, SDState
),
718 VMSTATE_BITMAP(wp_group_bmap
, SDState
, 0, wp_group_bits
),
719 VMSTATE_UINT32(blk_len
, SDState
),
720 VMSTATE_UINT32(multi_blk_cnt
, SDState
),
721 VMSTATE_UINT32(erase_start
, SDState
),
722 VMSTATE_UINT32(erase_end
, SDState
),
723 VMSTATE_UINT8_ARRAY(pwd
, SDState
, 16),
724 VMSTATE_UINT32(pwd_len
, SDState
),
725 VMSTATE_UINT8_ARRAY(function_group
, SDState
, 6),
726 VMSTATE_UINT8(current_cmd
, SDState
),
727 VMSTATE_BOOL(expecting_acmd
, SDState
),
728 VMSTATE_UINT32(blk_written
, SDState
),
729 VMSTATE_UINT64(data_start
, SDState
),
730 VMSTATE_UINT32(data_offset
, SDState
),
731 VMSTATE_UINT8_ARRAY(data
, SDState
, 512),
732 VMSTATE_UNUSED_V(1, 512),
733 VMSTATE_BOOL(enable
, SDState
),
734 VMSTATE_END_OF_LIST()
736 .subsections
= (const VMStateDescription
* const []) {
742 /* Legacy initialization function for use by non-qdevified callers */
743 SDState
*sd_init(BlockBackend
*blk
, bool is_spi
)
750 obj
= object_new(is_spi
? TYPE_SD_CARD_SPI
: TYPE_SD_CARD
);
752 if (!qdev_prop_set_drive_err(dev
, "drive", blk
, &err
)) {
753 error_reportf_err(err
, "sd_init failed: ");
758 * Realizing the device properly would put it into the QOM
759 * composition tree even though it is not plugged into an
760 * appropriate bus. That's a no-no. Hide the device from
761 * QOM/qdev, and call its qdev realize callback directly.
764 object_unparent(obj
);
765 sd_realize(dev
, &err
);
767 error_reportf_err(err
, "sd_init failed: ");
772 sd
->me_no_qdev_me_kill_mammoth_with_rocks
= true;
776 void sd_set_cb(SDState
*sd
, qemu_irq readonly
, qemu_irq insert
)
778 sd
->readonly_cb
= readonly
;
779 sd
->inserted_cb
= insert
;
780 qemu_set_irq(readonly
, sd
->blk
? !blk_is_writable(sd
->blk
) : 0);
781 qemu_set_irq(insert
, sd
->blk
? blk_is_inserted(sd
->blk
) : 0);
784 static void sd_blk_read(SDState
*sd
, uint64_t addr
, uint32_t len
)
786 trace_sdcard_read_block(addr
, len
);
787 if (!sd
->blk
|| blk_pread(sd
->blk
, addr
, len
, sd
->data
, 0) < 0) {
788 fprintf(stderr
, "sd_blk_read: read error on host side\n");
792 static void sd_blk_write(SDState
*sd
, uint64_t addr
, uint32_t len
)
794 trace_sdcard_write_block(addr
, len
);
795 if (!sd
->blk
|| blk_pwrite(sd
->blk
, addr
, len
, sd
->data
, 0) < 0) {
796 fprintf(stderr
, "sd_blk_write: write error on host side\n");
800 #define BLK_READ_BLOCK(a, len) sd_blk_read(sd, a, len)
801 #define BLK_WRITE_BLOCK(a, len) sd_blk_write(sd, a, len)
802 #define APP_READ_BLOCK(a, len) memset(sd->data, 0xec, len)
803 #define APP_WRITE_BLOCK(a, len)
805 static void sd_erase(SDState
*sd
)
807 uint64_t erase_start
= sd
->erase_start
;
808 uint64_t erase_end
= sd
->erase_end
;
812 int erase_len
= 1 << HWBLOCK_SHIFT
;
814 trace_sdcard_erase(sd
->erase_start
, sd
->erase_end
);
815 if (sd
->erase_start
== INVALID_ADDRESS
816 || sd
->erase_end
== INVALID_ADDRESS
) {
817 sd
->card_status
|= ERASE_SEQ_ERROR
;
818 sd
->erase_start
= INVALID_ADDRESS
;
819 sd
->erase_end
= INVALID_ADDRESS
;
823 if (FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
824 /* High capacity memory card: erase units are 512 byte blocks */
830 if (erase_start
> sd
->size
|| erase_end
> sd
->size
) {
831 sd
->card_status
|= OUT_OF_RANGE
;
832 sd
->erase_start
= INVALID_ADDRESS
;
833 sd
->erase_end
= INVALID_ADDRESS
;
837 sd
->erase_start
= INVALID_ADDRESS
;
838 sd
->erase_end
= INVALID_ADDRESS
;
841 memset(sd
->data
, 0xff, erase_len
);
842 for (erase_addr
= erase_start
; erase_addr
<= erase_end
;
843 erase_addr
+= erase_len
) {
845 /* Only SDSC cards support write protect groups */
846 wpnum
= sd_addr_to_wpnum(erase_addr
);
847 assert(wpnum
< sd
->wp_group_bits
);
848 if (test_bit(wpnum
, sd
->wp_group_bmap
)) {
849 sd
->card_status
|= WP_ERASE_SKIP
;
853 BLK_WRITE_BLOCK(erase_addr
, erase_len
);
857 static uint32_t sd_wpbits(SDState
*sd
, uint64_t addr
)
862 wpnum
= sd_addr_to_wpnum(addr
);
864 for (i
= 0; i
< 32; i
++, wpnum
++, addr
+= WPGROUP_SIZE
) {
865 if (addr
>= sd
->size
) {
867 * If the addresses of the last groups are outside the valid range,
868 * then the corresponding write protection bits shall be set to 0.
872 assert(wpnum
< sd
->wp_group_bits
);
873 if (test_bit(wpnum
, sd
->wp_group_bmap
)) {
881 static void sd_function_switch(SDState
*sd
, uint32_t arg
)
883 int i
, mode
, new_func
;
884 mode
= !!(arg
& 0x80000000);
886 sd
->data
[0] = 0x00; /* Maximum current consumption */
888 sd
->data
[2] = 0x80; /* Supported group 6 functions */
890 sd
->data
[4] = 0x80; /* Supported group 5 functions */
892 sd
->data
[6] = 0x80; /* Supported group 4 functions */
894 sd
->data
[8] = 0x80; /* Supported group 3 functions */
896 sd
->data
[10] = 0x80; /* Supported group 2 functions */
898 sd
->data
[12] = 0x80; /* Supported group 1 functions */
901 memset(&sd
->data
[14], 0, 3);
902 for (i
= 0; i
< 6; i
++) {
903 new_func
= (arg
>> (i
* 4)) & 0x0f;
904 if (mode
&& new_func
!= 0x0f)
905 sd
->function_group
[i
] = new_func
;
906 sd
->data
[16 - (i
>> 1)] |= new_func
<< ((i
% 2) * 4);
908 memset(&sd
->data
[17], 0, 47);
911 static inline bool sd_wp_addr(SDState
*sd
, uint64_t addr
)
913 return test_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
916 static void sd_lock_command(SDState
*sd
)
918 int erase
, lock
, clr_pwd
, set_pwd
, pwd_len
;
919 erase
= !!(sd
->data
[0] & 0x08);
920 lock
= sd
->data
[0] & 0x04;
921 clr_pwd
= sd
->data
[0] & 0x02;
922 set_pwd
= sd
->data
[0] & 0x01;
925 pwd_len
= sd
->data
[1];
932 trace_sdcard_unlock();
935 if (!(sd
->card_status
& CARD_IS_LOCKED
) || sd
->blk_len
> 1 ||
936 set_pwd
|| clr_pwd
|| lock
|| sd
->wp_switch
||
937 (sd
->csd
[14] & 0x20)) {
938 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
941 bitmap_zero(sd
->wp_group_bmap
, sd
->wp_group_bits
);
942 sd
->csd
[14] &= ~0x10;
943 sd
->card_status
&= ~CARD_IS_LOCKED
;
945 /* Erasing the entire card here! */
946 fprintf(stderr
, "SD: Card force-erased by CMD42\n");
950 if (sd
->blk_len
< 2 + pwd_len
||
951 pwd_len
<= sd
->pwd_len
||
952 pwd_len
> sd
->pwd_len
+ 16) {
953 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
957 if (sd
->pwd_len
&& memcmp(sd
->pwd
, sd
->data
+ 2, sd
->pwd_len
)) {
958 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
962 pwd_len
-= sd
->pwd_len
;
963 if ((pwd_len
&& !set_pwd
) ||
964 (clr_pwd
&& (set_pwd
|| lock
)) ||
965 (lock
&& !sd
->pwd_len
&& !set_pwd
) ||
966 (!set_pwd
&& !clr_pwd
&&
967 (((sd
->card_status
& CARD_IS_LOCKED
) && lock
) ||
968 (!(sd
->card_status
& CARD_IS_LOCKED
) && !lock
)))) {
969 sd
->card_status
|= LOCK_UNLOCK_FAILED
;
974 memcpy(sd
->pwd
, sd
->data
+ 2 + sd
->pwd_len
, pwd_len
);
975 sd
->pwd_len
= pwd_len
;
983 sd
->card_status
|= CARD_IS_LOCKED
;
985 sd
->card_status
&= ~CARD_IS_LOCKED
;
988 static bool address_in_range(SDState
*sd
, const char *desc
,
989 uint64_t addr
, uint32_t length
)
991 if (addr
+ length
> sd
->size
) {
992 qemu_log_mask(LOG_GUEST_ERROR
,
993 "%s offset %"PRIu64
" > card %"PRIu64
" [%%%u]\n",
994 desc
, addr
, sd
->size
, length
);
995 sd
->card_status
|= ADDRESS_ERROR
;
1001 static sd_rsp_type_t
sd_invalid_state_for_cmd(SDState
*sd
, SDRequest req
)
1003 qemu_log_mask(LOG_GUEST_ERROR
, "%s: CMD%i in a wrong state: %s (spec %s)\n",
1004 sd_proto(sd
)->name
, req
.cmd
, sd_state_name(sd
->state
),
1005 sd_version_str(sd
->spec_version
));
1010 static sd_rsp_type_t
sd_cmd_illegal(SDState
*sd
, SDRequest req
)
1012 qemu_log_mask(LOG_GUEST_ERROR
, "%s: Unknown CMD%i for spec %s\n",
1013 sd_proto(sd
)->name
, req
.cmd
,
1014 sd_version_str(sd
->spec_version
));
1019 /* Commands that are recognised but not yet implemented. */
1020 static sd_rsp_type_t
sd_cmd_unimplemented(SDState
*sd
, SDRequest req
)
1022 qemu_log_mask(LOG_UNIMP
, "%s: CMD%i not implemented\n",
1023 sd_proto(sd
)->name
, req
.cmd
);
1028 static sd_rsp_type_t
sd_cmd_GO_IDLE_STATE(SDState
*sd
, SDRequest req
)
1030 if (sd
->state
!= sd_inactive_state
) {
1031 sd
->state
= sd_idle_state
;
1032 sd_reset(DEVICE(sd
));
1035 return sd_is_spi(sd
) ? sd_r1
: sd_r0
;
1038 static sd_rsp_type_t
sd_cmd_SEND_OP_CMD(SDState
*sd
, SDRequest req
)
1040 sd
->state
= sd_transfer_state
;
1045 static sd_rsp_type_t
sd_cmd_ALL_SEND_CID(SDState
*sd
, SDRequest req
)
1047 if (sd
->state
!= sd_ready_state
) {
1048 return sd_invalid_state_for_cmd(sd
, req
);
1051 sd
->state
= sd_identification_state
;
1056 static sd_rsp_type_t
sd_cmd_SEND_RELATIVE_ADDR(SDState
*sd
, SDRequest req
)
1058 switch (sd
->state
) {
1059 case sd_identification_state
:
1060 case sd_standby_state
:
1061 sd
->state
= sd_standby_state
;
1066 return sd_invalid_state_for_cmd(sd
, req
);
1070 static sd_rsp_type_t
sd_cmd_SEND_TUNING_BLOCK(SDState
*sd
, SDRequest req
)
1072 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1073 return sd_cmd_illegal(sd
, req
);
1076 if (sd
->state
!= sd_transfer_state
) {
1077 return sd_invalid_state_for_cmd(sd
, req
);
1080 sd
->state
= sd_sendingdata_state
;
1081 sd
->data_offset
= 0;
1086 static sd_rsp_type_t
sd_cmd_SET_BLOCK_COUNT(SDState
*sd
, SDRequest req
)
1088 if (sd
->spec_version
< SD_PHY_SPECv3_01_VERS
) {
1089 return sd_cmd_illegal(sd
, req
);
1092 if (sd
->state
!= sd_transfer_state
) {
1093 return sd_invalid_state_for_cmd(sd
, req
);
1096 sd
->multi_blk_cnt
= req
.arg
;
1101 static sd_rsp_type_t
sd_normal_command(SDState
*sd
, SDRequest req
)
1103 uint32_t rca
= 0x0000;
1104 uint64_t addr
= (sd
->ocr
& (1 << 30)) ? (uint64_t) req
.arg
<< 9 : req
.arg
;
1106 /* CMD55 precedes an ACMD, so we are not interested in tracing it.
1107 * However there is no ACMD55, so we want to trace this particular case.
1109 if (req
.cmd
!= 55 || sd
->expecting_acmd
) {
1110 trace_sdcard_normal_command(sd_proto(sd
)->name
,
1111 sd_cmd_name(req
.cmd
), req
.cmd
,
1112 req
.arg
, sd_state_name(sd
->state
));
1115 /* Not interpreting this as an app command */
1116 sd
->card_status
&= ~APP_CMD
;
1118 if (sd_cmd_type
[req
.cmd
] == sd_ac
1119 || sd_cmd_type
[req
.cmd
] == sd_adtc
) {
1120 rca
= req
.arg
>> 16;
1123 /* CMD23 (set block count) must be immediately followed by CMD18 or CMD25
1124 * if not, its effects are cancelled */
1125 if (sd
->multi_blk_cnt
!= 0 && !(req
.cmd
== 18 || req
.cmd
== 25)) {
1126 sd
->multi_blk_cnt
= 0;
1129 if (sd_cmd_class
[req
.cmd
] == 6 && FIELD_EX32(sd
->ocr
, OCR
, CARD_CAPACITY
)) {
1130 /* Only Standard Capacity cards support class 6 commands */
1134 if (sd_proto(sd
)->cmd
[req
.cmd
]) {
1135 return sd_proto(sd
)->cmd
[req
.cmd
](sd
, req
);
1139 /* Basic commands (Class 0 and Class 1) */
1140 case 4: /* CMD4: SEND_DSR */
1141 switch (sd
->state
) {
1142 case sd_standby_state
:
1150 case 6: /* CMD6: SWITCH_FUNCTION */
1152 case sd_data_transfer_mode
:
1153 sd_function_switch(sd
, req
.arg
);
1154 sd
->state
= sd_sendingdata_state
;
1156 sd
->data_offset
= 0;
1164 case 7: /* CMD7: SELECT/DESELECT_CARD */
1165 switch (sd
->state
) {
1166 case sd_standby_state
:
1170 sd
->state
= sd_transfer_state
;
1173 case sd_transfer_state
:
1174 case sd_sendingdata_state
:
1178 sd
->state
= sd_standby_state
;
1181 case sd_disconnect_state
:
1185 sd
->state
= sd_programming_state
;
1188 case sd_programming_state
:
1192 sd
->state
= sd_disconnect_state
;
1200 case 8: /* CMD8: SEND_IF_COND */
1201 if (sd
->spec_version
< SD_PHY_SPECv2_00_VERS
) {
1204 if (sd
->state
!= sd_idle_state
) {
1209 /* No response if not exactly one VHS bit is set. */
1210 if (!(req
.arg
>> 8) || (req
.arg
>> (ctz32(req
.arg
& ~0xff) + 1))) {
1211 return sd_is_spi(sd
) ? sd_r7
: sd_r0
;
1218 case 9: /* CMD9: SEND_CSD */
1219 switch (sd
->state
) {
1220 case sd_standby_state
:
1226 case sd_transfer_state
:
1227 if (!sd_is_spi(sd
)) {
1230 sd
->state
= sd_sendingdata_state
;
1231 memcpy(sd
->data
, sd
->csd
, 16);
1232 sd
->data_start
= addr
;
1233 sd
->data_offset
= 0;
1241 case 10: /* CMD10: SEND_CID */
1242 switch (sd
->state
) {
1243 case sd_standby_state
:
1249 case sd_transfer_state
:
1250 if (!sd_is_spi(sd
)) {
1253 sd
->state
= sd_sendingdata_state
;
1254 memcpy(sd
->data
, sd
->cid
, 16);
1255 sd
->data_start
= addr
;
1256 sd
->data_offset
= 0;
1264 case 12: /* CMD12: STOP_TRANSMISSION */
1265 switch (sd
->state
) {
1266 case sd_sendingdata_state
:
1267 sd
->state
= sd_transfer_state
;
1270 case sd_receivingdata_state
:
1271 sd
->state
= sd_programming_state
;
1272 /* Bzzzzzzztt .... Operation complete. */
1273 sd
->state
= sd_transfer_state
;
1281 case 13: /* CMD13: SEND_STATUS */
1283 case sd_data_transfer_mode
:
1284 if (!sd_is_spi(sd
) && sd
->rca
!= rca
) {
1295 case 15: /* CMD15: GO_INACTIVE_STATE */
1297 case sd_data_transfer_mode
:
1301 sd
->state
= sd_inactive_state
;
1309 /* Block read commands (Class 2) */
1310 case 16: /* CMD16: SET_BLOCKLEN */
1311 switch (sd
->state
) {
1312 case sd_transfer_state
:
1313 if (req
.arg
> (1 << HWBLOCK_SHIFT
)) {
1314 sd
->card_status
|= BLOCK_LEN_ERROR
;
1316 trace_sdcard_set_blocklen(req
.arg
);
1317 sd
->blk_len
= req
.arg
;
1327 case 17: /* CMD17: READ_SINGLE_BLOCK */
1328 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
1329 switch (sd
->state
) {
1330 case sd_transfer_state
:
1332 if (!address_in_range(sd
, "READ_BLOCK", addr
, sd
->blk_len
)) {
1336 sd
->state
= sd_sendingdata_state
;
1337 sd
->data_start
= addr
;
1338 sd
->data_offset
= 0;
1346 /* Block write commands (Class 4) */
1347 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1348 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1349 switch (sd
->state
) {
1350 case sd_transfer_state
:
1352 if (!address_in_range(sd
, "WRITE_BLOCK", addr
, sd
->blk_len
)) {
1356 sd
->state
= sd_receivingdata_state
;
1357 sd
->data_start
= addr
;
1358 sd
->data_offset
= 0;
1359 sd
->blk_written
= 0;
1361 if (sd
->size
<= SDSC_MAX_CAPACITY
) {
1362 if (sd_wp_addr(sd
, sd
->data_start
)) {
1363 sd
->card_status
|= WP_VIOLATION
;
1366 if (sd
->csd
[14] & 0x30) {
1367 sd
->card_status
|= WP_VIOLATION
;
1376 case 26: /* CMD26: PROGRAM_CID */
1377 switch (sd
->state
) {
1378 case sd_transfer_state
:
1379 sd
->state
= sd_receivingdata_state
;
1381 sd
->data_offset
= 0;
1389 case 27: /* CMD27: PROGRAM_CSD */
1390 switch (sd
->state
) {
1391 case sd_transfer_state
:
1392 sd
->state
= sd_receivingdata_state
;
1394 sd
->data_offset
= 0;
1402 /* Write protection (Class 6) */
1403 case 28: /* CMD28: SET_WRITE_PROT */
1404 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1408 switch (sd
->state
) {
1409 case sd_transfer_state
:
1410 if (!address_in_range(sd
, "SET_WRITE_PROT", addr
, 1)) {
1414 sd
->state
= sd_programming_state
;
1415 set_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
1416 /* Bzzzzzzztt .... Operation complete. */
1417 sd
->state
= sd_transfer_state
;
1425 case 29: /* CMD29: CLR_WRITE_PROT */
1426 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1430 switch (sd
->state
) {
1431 case sd_transfer_state
:
1432 if (!address_in_range(sd
, "CLR_WRITE_PROT", addr
, 1)) {
1436 sd
->state
= sd_programming_state
;
1437 clear_bit(sd_addr_to_wpnum(addr
), sd
->wp_group_bmap
);
1438 /* Bzzzzzzztt .... Operation complete. */
1439 sd
->state
= sd_transfer_state
;
1447 case 30: /* CMD30: SEND_WRITE_PROT */
1448 if (sd
->size
> SDSC_MAX_CAPACITY
) {
1452 switch (sd
->state
) {
1453 case sd_transfer_state
:
1454 if (!address_in_range(sd
, "SEND_WRITE_PROT",
1455 req
.arg
, sd
->blk_len
)) {
1459 sd
->state
= sd_sendingdata_state
;
1460 *(uint32_t *) sd
->data
= sd_wpbits(sd
, req
.arg
);
1461 sd
->data_start
= addr
;
1462 sd
->data_offset
= 0;
1470 /* Erase commands (Class 5) */
1471 case 32: /* CMD32: ERASE_WR_BLK_START */
1472 switch (sd
->state
) {
1473 case sd_transfer_state
:
1474 sd
->erase_start
= req
.arg
;
1482 case 33: /* CMD33: ERASE_WR_BLK_END */
1483 switch (sd
->state
) {
1484 case sd_transfer_state
:
1485 sd
->erase_end
= req
.arg
;
1493 case 38: /* CMD38: ERASE */
1494 switch (sd
->state
) {
1495 case sd_transfer_state
:
1496 if (sd
->csd
[14] & 0x30) {
1497 sd
->card_status
|= WP_VIOLATION
;
1501 sd
->state
= sd_programming_state
;
1503 /* Bzzzzzzztt .... Operation complete. */
1504 sd
->state
= sd_transfer_state
;
1512 /* Lock card commands (Class 7) */
1513 case 42: /* CMD42: LOCK_UNLOCK */
1514 switch (sd
->state
) {
1515 case sd_transfer_state
:
1516 sd
->state
= sd_receivingdata_state
;
1518 sd
->data_offset
= 0;
1526 /* Application specific commands (Class 8) */
1527 case 55: /* CMD55: APP_CMD */
1528 switch (sd
->state
) {
1529 case sd_ready_state
:
1530 case sd_identification_state
:
1531 case sd_inactive_state
:
1535 qemu_log_mask(LOG_GUEST_ERROR
,
1536 "SD: illegal RCA 0x%04x for APP_CMD\n", req
.cmd
);
1541 if (!sd_is_spi(sd
)) {
1542 if (sd
->rca
!= rca
) {
1546 sd
->expecting_acmd
= true;
1547 sd
->card_status
|= APP_CMD
;
1550 case 56: /* CMD56: GEN_CMD */
1551 switch (sd
->state
) {
1552 case sd_transfer_state
:
1553 sd
->data_offset
= 0;
1555 sd
->state
= sd_sendingdata_state
;
1557 sd
->state
= sd_receivingdata_state
;
1565 case 58: /* CMD58: READ_OCR (SPI) */
1568 case 59: /* CMD59: CRC_ON_OFF (SPI) */
1572 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Unknown CMD%i\n", req
.cmd
);
1576 return sd_invalid_state_for_cmd(sd
, req
);
1579 static sd_rsp_type_t
sd_app_command(SDState
*sd
,
1582 trace_sdcard_app_command(sd_proto(sd
)->name
, sd_acmd_name(req
.cmd
),
1583 req
.cmd
, req
.arg
, sd_state_name(sd
->state
));
1584 sd
->card_status
|= APP_CMD
;
1586 if (sd_proto(sd
)->acmd
[req
.cmd
]) {
1587 return sd_proto(sd
)->acmd
[req
.cmd
](sd
, req
);
1591 case 6: /* ACMD6: SET_BUS_WIDTH */
1592 switch (sd
->state
) {
1593 case sd_transfer_state
:
1594 sd
->sd_status
[0] &= 0x3f;
1595 sd
->sd_status
[0] |= (req
.arg
& 0x03) << 6;
1603 case 13: /* ACMD13: SD_STATUS */
1604 switch (sd
->state
) {
1605 case sd_transfer_state
:
1606 sd
->state
= sd_sendingdata_state
;
1608 sd
->data_offset
= 0;
1616 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
1617 switch (sd
->state
) {
1618 case sd_transfer_state
:
1619 *(uint32_t *) sd
->data
= sd
->blk_written
;
1621 sd
->state
= sd_sendingdata_state
;
1623 sd
->data_offset
= 0;
1631 case 23: /* ACMD23: SET_WR_BLK_ERASE_COUNT */
1632 switch (sd
->state
) {
1633 case sd_transfer_state
:
1641 case 41: /* ACMD41: SD_APP_OP_COND */
1642 if (sd
->state
!= sd_idle_state
) {
1645 /* If it's the first ACMD41 since reset, we need to decide
1646 * whether to power up. If this is not an enquiry ACMD41,
1647 * we immediately report power on and proceed below to the
1648 * ready state, but if it is, we set a timer to model a
1649 * delay for power up. This works around a bug in EDK2
1650 * UEFI, which sends an initial enquiry ACMD41, but
1651 * assumes that the card is in ready state as soon as it
1652 * sees the power up bit set. */
1653 if (!FIELD_EX32(sd
->ocr
, OCR
, CARD_POWER_UP
)) {
1654 if ((req
.arg
& ACMD41_ENQUIRY_MASK
) != 0) {
1655 timer_del(sd
->ocr_power_timer
);
1658 trace_sdcard_inquiry_cmd41();
1659 if (!timer_pending(sd
->ocr_power_timer
)) {
1660 timer_mod_ns(sd
->ocr_power_timer
,
1661 (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL
)
1662 + OCR_POWER_DELAY_NS
));
1667 if (FIELD_EX32(sd
->ocr
& req
.arg
, OCR
, VDD_VOLTAGE_WINDOW
)) {
1668 /* We accept any voltage. 10000 V is nothing.
1670 * Once we're powered up, we advance straight to ready state
1671 * unless it's an enquiry ACMD41 (bits 23:0 == 0).
1673 sd
->state
= sd_ready_state
;
1678 case 42: /* ACMD42: SET_CLR_CARD_DETECT */
1679 switch (sd
->state
) {
1680 case sd_transfer_state
:
1681 /* Bringing in the 50KOhm pull-up resistor... Done. */
1689 case 51: /* ACMD51: SEND_SCR */
1690 switch (sd
->state
) {
1691 case sd_transfer_state
:
1692 sd
->state
= sd_sendingdata_state
;
1694 sd
->data_offset
= 0;
1702 case 18: /* Reserved for SD security applications */
1707 /* Refer to the "SD Specifications Part3 Security Specification" for
1708 * information about the SD Security Features.
1710 qemu_log_mask(LOG_UNIMP
, "SD: CMD%i Security not implemented\n",
1715 /* Fall back to standard commands. */
1716 return sd_normal_command(sd
, req
);
1719 qemu_log_mask(LOG_GUEST_ERROR
, "SD: ACMD%i in a wrong state\n", req
.cmd
);
1723 static int cmd_valid_while_locked(SDState
*sd
, const uint8_t cmd
)
1725 /* Valid commands in locked state:
1727 * lock card class (7)
1729 * implicitly, the ACMD prefix CMD55
1731 * Anything else provokes an "illegal command" response.
1733 if (sd
->expecting_acmd
) {
1734 return cmd
== 41 || cmd
== 42;
1736 if (cmd
== 16 || cmd
== 55) {
1739 return sd_cmd_class
[cmd
] == 0 || sd_cmd_class
[cmd
] == 7;
1742 int sd_do_command(SDState
*sd
, SDRequest
*req
,
1743 uint8_t *response
) {
1745 sd_rsp_type_t rtype
;
1748 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
) {
1752 if (sd_req_crc_validate(req
)) {
1753 sd
->card_status
|= COM_CRC_ERROR
;
1758 if (req
->cmd
>= SDMMC_CMD_MAX
) {
1759 qemu_log_mask(LOG_GUEST_ERROR
, "SD: incorrect command 0x%02x\n",
1764 if (sd
->card_status
& CARD_IS_LOCKED
) {
1765 if (!cmd_valid_while_locked(sd
, req
->cmd
)) {
1766 sd
->card_status
|= ILLEGAL_COMMAND
;
1767 sd
->expecting_acmd
= false;
1768 qemu_log_mask(LOG_GUEST_ERROR
, "SD: Card is locked\n");
1774 last_state
= sd
->state
;
1777 if (sd
->expecting_acmd
) {
1778 sd
->expecting_acmd
= false;
1779 rtype
= sd_app_command(sd
, *req
);
1781 rtype
= sd_normal_command(sd
, *req
);
1784 if (rtype
== sd_illegal
) {
1785 sd
->card_status
|= ILLEGAL_COMMAND
;
1787 /* Valid command, we can update the 'state before command' bits.
1788 * (Do this now so they appear in r1 responses.)
1790 sd
->current_cmd
= req
->cmd
;
1791 sd
->card_status
&= ~CURRENT_STATE
;
1792 sd
->card_status
|= (last_state
<< 9);
1799 sd_response_r1_make(sd
, response
);
1804 memcpy(response
, sd
->cid
, sizeof(sd
->cid
));
1809 memcpy(response
, sd
->csd
, sizeof(sd
->csd
));
1814 sd_response_r3_make(sd
, response
);
1819 sd_response_r6_make(sd
, response
);
1824 sd_response_r7_make(sd
, response
);
1833 g_assert_not_reached();
1835 trace_sdcard_response(sd_response_name(rtype
), rsplen
);
1837 if (rtype
!= sd_illegal
) {
1838 /* Clear the "clear on valid command" status bits now we've
1841 sd
->card_status
&= ~CARD_STATUS_B
;
1845 qemu_hexdump(stderr
, "Response", response
, rsplen
);
1851 void sd_write_byte(SDState
*sd
, uint8_t value
)
1855 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
1858 if (sd
->state
!= sd_receivingdata_state
) {
1859 qemu_log_mask(LOG_GUEST_ERROR
,
1860 "%s: not in Receiving-Data state\n", __func__
);
1864 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
1867 trace_sdcard_write_data(sd_proto(sd
)->name
,
1868 sd_acmd_name(sd
->current_cmd
),
1869 sd
->current_cmd
, value
);
1870 switch (sd
->current_cmd
) {
1871 case 24: /* CMD24: WRITE_SINGLE_BLOCK */
1872 sd
->data
[sd
->data_offset
++] = value
;
1873 if (sd
->data_offset
>= sd
->blk_len
) {
1874 /* TODO: Check CRC before committing */
1875 sd
->state
= sd_programming_state
;
1876 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1878 sd
->csd
[14] |= 0x40;
1879 /* Bzzzzzzztt .... Operation complete. */
1880 sd
->state
= sd_transfer_state
;
1884 case 25: /* CMD25: WRITE_MULTIPLE_BLOCK */
1885 if (sd
->data_offset
== 0) {
1886 /* Start of the block - let's check the address is valid */
1887 if (!address_in_range(sd
, "WRITE_MULTIPLE_BLOCK",
1888 sd
->data_start
, sd
->blk_len
)) {
1891 if (sd
->size
<= SDSC_MAX_CAPACITY
) {
1892 if (sd_wp_addr(sd
, sd
->data_start
)) {
1893 sd
->card_status
|= WP_VIOLATION
;
1898 sd
->data
[sd
->data_offset
++] = value
;
1899 if (sd
->data_offset
>= sd
->blk_len
) {
1900 /* TODO: Check CRC before committing */
1901 sd
->state
= sd_programming_state
;
1902 BLK_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1904 sd
->data_start
+= sd
->blk_len
;
1905 sd
->data_offset
= 0;
1906 sd
->csd
[14] |= 0x40;
1908 /* Bzzzzzzztt .... Operation complete. */
1909 if (sd
->multi_blk_cnt
!= 0) {
1910 if (--sd
->multi_blk_cnt
== 0) {
1912 sd
->state
= sd_transfer_state
;
1917 sd
->state
= sd_receivingdata_state
;
1921 case 26: /* CMD26: PROGRAM_CID */
1922 sd
->data
[sd
->data_offset
++] = value
;
1923 if (sd
->data_offset
>= sizeof(sd
->cid
)) {
1924 /* TODO: Check CRC before committing */
1925 sd
->state
= sd_programming_state
;
1926 for (i
= 0; i
< sizeof(sd
->cid
); i
++)
1927 if ((sd
->cid
[i
] | 0x00) != sd
->data
[i
])
1928 sd
->card_status
|= CID_CSD_OVERWRITE
;
1930 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1931 for (i
= 0; i
< sizeof(sd
->cid
); i
++) {
1933 sd
->cid
[i
] &= sd
->data
[i
];
1935 /* Bzzzzzzztt .... Operation complete. */
1936 sd
->state
= sd_transfer_state
;
1940 case 27: /* CMD27: PROGRAM_CSD */
1941 sd
->data
[sd
->data_offset
++] = value
;
1942 if (sd
->data_offset
>= sizeof(sd
->csd
)) {
1943 /* TODO: Check CRC before committing */
1944 sd
->state
= sd_programming_state
;
1945 for (i
= 0; i
< sizeof(sd
->csd
); i
++)
1946 if ((sd
->csd
[i
] | sd_csd_rw_mask
[i
]) !=
1947 (sd
->data
[i
] | sd_csd_rw_mask
[i
]))
1948 sd
->card_status
|= CID_CSD_OVERWRITE
;
1950 /* Copy flag (OTP) & Permanent write protect */
1951 if (sd
->csd
[14] & ~sd
->data
[14] & 0x60)
1952 sd
->card_status
|= CID_CSD_OVERWRITE
;
1954 if (!(sd
->card_status
& CID_CSD_OVERWRITE
))
1955 for (i
= 0; i
< sizeof(sd
->csd
); i
++) {
1956 sd
->csd
[i
] |= sd_csd_rw_mask
[i
];
1957 sd
->csd
[i
] &= sd
->data
[i
];
1959 /* Bzzzzzzztt .... Operation complete. */
1960 sd
->state
= sd_transfer_state
;
1964 case 42: /* CMD42: LOCK_UNLOCK */
1965 sd
->data
[sd
->data_offset
++] = value
;
1966 if (sd
->data_offset
>= sd
->blk_len
) {
1967 /* TODO: Check CRC before committing */
1968 sd
->state
= sd_programming_state
;
1969 sd_lock_command(sd
);
1970 /* Bzzzzzzztt .... Operation complete. */
1971 sd
->state
= sd_transfer_state
;
1975 case 56: /* CMD56: GEN_CMD */
1976 sd
->data
[sd
->data_offset
++] = value
;
1977 if (sd
->data_offset
>= sd
->blk_len
) {
1978 APP_WRITE_BLOCK(sd
->data_start
, sd
->data_offset
);
1979 sd
->state
= sd_transfer_state
;
1984 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
1989 #define SD_TUNING_BLOCK_SIZE 64
1991 static const uint8_t sd_tuning_block_pattern
[SD_TUNING_BLOCK_SIZE
] = {
1992 /* See: Physical Layer Simplified Specification Version 3.01, Table 4-2 */
1993 0xff, 0x0f, 0xff, 0x00, 0x0f, 0xfc, 0xc3, 0xcc,
1994 0xc3, 0x3c, 0xcc, 0xff, 0xfe, 0xff, 0xfe, 0xef,
1995 0xff, 0xdf, 0xff, 0xdd, 0xff, 0xfb, 0xff, 0xfb,
1996 0xbf, 0xff, 0x7f, 0xff, 0x77, 0xf7, 0xbd, 0xef,
1997 0xff, 0xf0, 0xff, 0xf0, 0x0f, 0xfc, 0xcc, 0x3c,
1998 0xcc, 0x33, 0xcc, 0xcf, 0xff, 0xef, 0xff, 0xee,
1999 0xff, 0xfd, 0xff, 0xfd, 0xdf, 0xff, 0xbf, 0xff,
2000 0xbb, 0xff, 0xf7, 0xff, 0xf7, 0x7f, 0x7b, 0xde,
2003 uint8_t sd_read_byte(SDState
*sd
)
2005 /* TODO: Append CRCs */
2009 if (!sd
->blk
|| !blk_is_inserted(sd
->blk
) || !sd
->enable
)
2012 if (sd
->state
!= sd_sendingdata_state
) {
2013 qemu_log_mask(LOG_GUEST_ERROR
,
2014 "%s: not in Sending-Data state\n", __func__
);
2018 if (sd
->card_status
& (ADDRESS_ERROR
| WP_VIOLATION
))
2021 io_len
= (sd
->ocr
& (1 << 30)) ? 512 : sd
->blk_len
;
2023 trace_sdcard_read_data(sd_proto(sd
)->name
,
2024 sd_acmd_name(sd
->current_cmd
),
2025 sd
->current_cmd
, io_len
);
2026 switch (sd
->current_cmd
) {
2027 case 6: /* CMD6: SWITCH_FUNCTION */
2028 ret
= sd
->data
[sd
->data_offset
++];
2030 if (sd
->data_offset
>= 64)
2031 sd
->state
= sd_transfer_state
;
2034 case 9: /* CMD9: SEND_CSD */
2035 case 10: /* CMD10: SEND_CID */
2036 ret
= sd
->data
[sd
->data_offset
++];
2038 if (sd
->data_offset
>= 16)
2039 sd
->state
= sd_transfer_state
;
2042 case 13: /* ACMD13: SD_STATUS */
2043 ret
= sd
->sd_status
[sd
->data_offset
++];
2045 if (sd
->data_offset
>= sizeof(sd
->sd_status
))
2046 sd
->state
= sd_transfer_state
;
2049 case 17: /* CMD17: READ_SINGLE_BLOCK */
2050 if (sd
->data_offset
== 0)
2051 BLK_READ_BLOCK(sd
->data_start
, io_len
);
2052 ret
= sd
->data
[sd
->data_offset
++];
2054 if (sd
->data_offset
>= io_len
)
2055 sd
->state
= sd_transfer_state
;
2058 case 18: /* CMD18: READ_MULTIPLE_BLOCK */
2059 if (sd
->data_offset
== 0) {
2060 if (!address_in_range(sd
, "READ_MULTIPLE_BLOCK",
2061 sd
->data_start
, io_len
)) {
2064 BLK_READ_BLOCK(sd
->data_start
, io_len
);
2066 ret
= sd
->data
[sd
->data_offset
++];
2068 if (sd
->data_offset
>= io_len
) {
2069 sd
->data_start
+= io_len
;
2070 sd
->data_offset
= 0;
2072 if (sd
->multi_blk_cnt
!= 0) {
2073 if (--sd
->multi_blk_cnt
== 0) {
2075 sd
->state
= sd_transfer_state
;
2082 case 19: /* CMD19: SEND_TUNING_BLOCK (SD) */
2083 if (sd
->data_offset
>= SD_TUNING_BLOCK_SIZE
- 1) {
2084 sd
->state
= sd_transfer_state
;
2086 ret
= sd_tuning_block_pattern
[sd
->data_offset
++];
2089 case 22: /* ACMD22: SEND_NUM_WR_BLOCKS */
2090 ret
= sd
->data
[sd
->data_offset
++];
2092 if (sd
->data_offset
>= 4)
2093 sd
->state
= sd_transfer_state
;
2096 case 30: /* CMD30: SEND_WRITE_PROT */
2097 ret
= sd
->data
[sd
->data_offset
++];
2099 if (sd
->data_offset
>= 4)
2100 sd
->state
= sd_transfer_state
;
2103 case 51: /* ACMD51: SEND_SCR */
2104 ret
= sd
->scr
[sd
->data_offset
++];
2106 if (sd
->data_offset
>= sizeof(sd
->scr
))
2107 sd
->state
= sd_transfer_state
;
2110 case 56: /* CMD56: GEN_CMD */
2111 if (sd
->data_offset
== 0)
2112 APP_READ_BLOCK(sd
->data_start
, sd
->blk_len
);
2113 ret
= sd
->data
[sd
->data_offset
++];
2115 if (sd
->data_offset
>= sd
->blk_len
)
2116 sd
->state
= sd_transfer_state
;
2120 qemu_log_mask(LOG_GUEST_ERROR
, "%s: unknown command\n", __func__
);
2127 static bool sd_receive_ready(SDState
*sd
)
2129 return sd
->state
== sd_receivingdata_state
;
2132 static bool sd_data_ready(SDState
*sd
)
2134 return sd
->state
== sd_sendingdata_state
;
2137 void sd_enable(SDState
*sd
, bool enable
)
2139 sd
->enable
= enable
;
2142 static const SDProto sd_proto_spi
= {
2145 [0] = sd_cmd_GO_IDLE_STATE
,
2146 [1] = sd_cmd_SEND_OP_CMD
,
2147 [2 ... 4] = sd_cmd_illegal
,
2148 [5] = sd_cmd_illegal
,
2149 [7] = sd_cmd_illegal
,
2150 [15] = sd_cmd_illegal
,
2151 [26] = sd_cmd_illegal
,
2152 [52 ... 54] = sd_cmd_illegal
,
2155 [6] = sd_cmd_unimplemented
,
2156 [41] = sd_cmd_SEND_OP_CMD
,
2160 static const SDProto sd_proto_sd
= {
2163 [0] = sd_cmd_GO_IDLE_STATE
,
2164 [1] = sd_cmd_illegal
,
2165 [2] = sd_cmd_ALL_SEND_CID
,
2166 [3] = sd_cmd_SEND_RELATIVE_ADDR
,
2167 [5] = sd_cmd_illegal
,
2168 [19] = sd_cmd_SEND_TUNING_BLOCK
,
2169 [23] = sd_cmd_SET_BLOCK_COUNT
,
2170 [52 ... 54] = sd_cmd_illegal
,
2171 [58] = sd_cmd_illegal
,
2172 [59] = sd_cmd_illegal
,
2176 static void sd_instance_init(Object
*obj
)
2178 SDState
*sd
= SD_CARD(obj
);
2181 sd
->ocr_power_timer
= timer_new_ns(QEMU_CLOCK_VIRTUAL
, sd_ocr_powerup
, sd
);
2184 static void sd_instance_finalize(Object
*obj
)
2186 SDState
*sd
= SD_CARD(obj
);
2188 timer_free(sd
->ocr_power_timer
);
2191 static void sd_realize(DeviceState
*dev
, Error
**errp
)
2193 SDState
*sd
= SD_CARD(dev
);
2196 switch (sd
->spec_version
) {
2197 case SD_PHY_SPECv1_10_VERS
2198 ... SD_PHY_SPECv3_01_VERS
:
2201 error_setg(errp
, "Invalid SD card Spec version: %u", sd
->spec_version
);
2208 if (!blk_supports_write_perm(sd
->blk
)) {
2209 error_setg(errp
, "Cannot use read-only drive as SD card");
2213 blk_size
= blk_getlength(sd
->blk
);
2214 if (blk_size
> 0 && !is_power_of_2(blk_size
)) {
2215 int64_t blk_size_aligned
= pow2ceil(blk_size
);
2218 blk_size_str
= size_to_str(blk_size
);
2219 error_setg(errp
, "Invalid SD card size: %s", blk_size_str
);
2220 g_free(blk_size_str
);
2222 blk_size_str
= size_to_str(blk_size_aligned
);
2223 error_append_hint(errp
,
2224 "SD card size has to be a power of 2, e.g. %s.\n"
2225 "You can resize disk images with"
2226 " 'qemu-img resize <imagefile> <new-size>'\n"
2227 "(note that this will lose data if you make the"
2228 " image smaller than it currently is).\n",
2230 g_free(blk_size_str
);
2235 ret
= blk_set_perm(sd
->blk
, BLK_PERM_CONSISTENT_READ
| BLK_PERM_WRITE
,
2236 BLK_PERM_ALL
, errp
);
2240 blk_set_dev_ops(sd
->blk
, &sd_block_ops
, sd
);
2244 static Property sd_properties
[] = {
2245 DEFINE_PROP_UINT8("spec_version", SDState
,
2246 spec_version
, SD_PHY_SPECv2_00_VERS
),
2247 DEFINE_PROP_DRIVE("drive", SDState
, blk
),
2248 /* We do not model the chip select pin, so allow the board to select
2249 * whether card should be in SSI or MMC/SD mode. It is also up to the
2250 * board to ensure that ssi transfers only occur when the chip select
2252 DEFINE_PROP_END_OF_LIST()
2255 static void sd_class_init(ObjectClass
*klass
, void *data
)
2257 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2258 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2260 dc
->realize
= sd_realize
;
2261 device_class_set_props(dc
, sd_properties
);
2262 dc
->vmsd
= &sd_vmstate
;
2263 dc
->reset
= sd_reset
;
2264 dc
->bus_type
= TYPE_SD_BUS
;
2265 set_bit(DEVICE_CATEGORY_STORAGE
, dc
->categories
);
2267 sc
->set_voltage
= sd_set_voltage
;
2268 sc
->get_dat_lines
= sd_get_dat_lines
;
2269 sc
->get_cmd_line
= sd_get_cmd_line
;
2270 sc
->do_command
= sd_do_command
;
2271 sc
->write_byte
= sd_write_byte
;
2272 sc
->read_byte
= sd_read_byte
;
2273 sc
->receive_ready
= sd_receive_ready
;
2274 sc
->data_ready
= sd_data_ready
;
2275 sc
->enable
= sd_enable
;
2276 sc
->get_inserted
= sd_get_inserted
;
2277 sc
->get_readonly
= sd_get_readonly
;
2278 sc
->proto
= &sd_proto_sd
;
2282 * We do not model the chip select pin, so allow the board to select
2283 * whether card should be in SSI or MMC/SD mode. It is also up to the
2284 * board to ensure that ssi transfers only occur when the chip select
2287 static void sd_spi_class_init(ObjectClass
*klass
, void *data
)
2289 DeviceClass
*dc
= DEVICE_CLASS(klass
);
2290 SDCardClass
*sc
= SD_CARD_CLASS(klass
);
2292 dc
->desc
= "SD SPI";
2293 sc
->proto
= &sd_proto_spi
;
2296 static const TypeInfo sd_types
[] = {
2298 .name
= TYPE_SD_CARD
,
2299 .parent
= TYPE_DEVICE
,
2300 .instance_size
= sizeof(SDState
),
2301 .class_size
= sizeof(SDCardClass
),
2302 .class_init
= sd_class_init
,
2303 .instance_init
= sd_instance_init
,
2304 .instance_finalize
= sd_instance_finalize
,
2307 .name
= TYPE_SD_CARD_SPI
,
2308 .parent
= TYPE_SD_CARD
,
2309 .class_init
= sd_spi_class_init
,
2313 DEFINE_TYPES(sd_types
)