qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

sd.c (65320B)


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