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