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