/** @file
  Header file for SD memory card support.

  This header file contains some definitions defined in SD Physical Layer Simplified
  Specification Version 4.10 spec.

  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
  This program and the accompanying materials
  are licensed and made available under the terms and conditions of the BSD License
  which accompanies this distribution.  The full text of the license may be found at
  http://opensource.org/licenses/bsd-license.php

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef __SD_H__
#define __SD_H__

//
// SD command index
//
#define  SD_GO_IDLE_STATE           0
#define  SD_ALL_SEND_CID            2
#define  SD_SET_RELATIVE_ADDR       3
#define  SD_SET_DSR                 4
#define  SDIO_SEND_OP_COND          5
#define  SD_SWITCH_FUNC             6
#define  SD_SELECT_DESELECT_CARD    7
#define  SD_SEND_IF_COND            8
#define  SD_SEND_CSD                9
#define  SD_SEND_CID                10
#define  SD_VOLTAGE_SWITCH          11
#define  SD_STOP_TRANSMISSION       12
#define  SD_SEND_STATUS             13
#define  SD_GO_INACTIVE_STATE       15
#define  SD_SET_BLOCKLEN            16
#define  SD_READ_SINGLE_BLOCK       17
#define  SD_READ_MULTIPLE_BLOCK     18
#define  SD_SEND_TUNING_BLOCK       19
#define  SD_SPEED_CLASS_CONTROL     20
#define  SD_SET_BLOCK_COUNT         23
#define  SD_WRITE_SINGLE_BLOCK      24
#define  SD_WRITE_MULTIPLE_BLOCK    25
#define  SD_PROGRAM_CSD             27
#define  SD_SET_WRITE_PROT          28
#define  SD_CLR_WRITE_PROT          29
#define  SD_SEND_WRITE_PROT         30
#define  SD_ERASE_WR_BLK_START      32
#define  SD_ERASE_WR_BLK_END        33
#define  SD_ERASE                   38
#define  SD_LOCK_UNLOCK             42
#define  SD_READ_EXTR_SINGLE        48
#define  SD_WRITE_EXTR_SINGLE       49
#define  SDIO_RW_DIRECT             52
#define  SDIO_RW_EXTENDED           53
#define  SD_APP_CMD                 55
#define  SD_GEN_CMD                 56
#define  SD_READ_EXTR_MULTI         58
#define  SD_WRITE_EXTR_MULTI        59

#define  SD_SET_BUS_WIDTH           6           // ACMD6
#define  SD_STATUS                  13          // ACMD13
#define  SD_SEND_NUM_WR_BLOCKS      22          // ACMD22
#define  SD_SET_WR_BLK_ERASE_COUNT  23          // ACMD23
#define  SD_SEND_OP_COND            41          // ACMD41
#define  SD_SET_CLR_CARD_DETECT     42          // ACMD42
#define  SD_SEND_SCR                51          // ACMD51

#pragma pack(1)
typedef struct {
  UINT8   NotUsed:1;                            // Not used [0:0]
  UINT8   Crc:7;                                // CRC [7:1]
  UINT16  ManufacturingDate:12;                 // Manufacturing date [19:8]
  UINT16  Reserved:4;                           // Reserved [23:20]
  UINT8   ProductSerialNumber[4];               // Product serial number [55:24]
  UINT8   ProductRevision;                      // Product revision [63:56]
  UINT8   ProductName[5];                       // Product name [103:64]
  UINT8   OemId[2];                             // OEM/Application ID [119:104]
  UINT8   ManufacturerId;                       // Manufacturer ID [127:120]
} SD_CID;

typedef struct {
  UINT32  NotUsed:1;                            // Not used [0:0]
  UINT32  Crc:7;                                // CRC [7:1]
  UINT32  Reserved:2;                           // Reserved [9:8]
  UINT32  FileFormat:2;                         // File format [11:10]
  UINT32  TmpWriteProtect:1;                    // Temporary write protection [12:12]
  UINT32  PermWriteProtect:1;                   // Permanent write protection [13:13]
  UINT32  Copy:1;                               // Copy flag (OTP) [14:14]
  UINT32  FileFormatGrp:1;                      // File format group [15:15]
  UINT32  Reserved1:5;                          // Reserved [20:16]
  UINT32  WriteBlPartial:1;                     // Partial blocks for write allowed [21:21]
  UINT32  WriteBlLen:4;                         // Max. write data block length [25:22]
  UINT32  R2WFactor:3;                          // Write speed factor [28:26]
  UINT32  Reserved2:2;                          // Manufacturer default ECC [30:29]
  UINT32  WpGrpEnable:1;                        // Write protect group enable [31:31]

  UINT32  WpGrpSize:7;                          // Write protect group size [38:32]
  UINT32  SectorSize:7;                         // Erase sector size [45:39]
  UINT32  EraseBlkEn:1;                         // Erase single block enable [46:46]
  UINT32  CSizeMul:3;                           // device size multiplier [49:47]
  UINT32  VddWCurrMax:3;                        // max. write current @VDD max [52:50]
  UINT32  VddWCurrMin:3;                        // max. write current @VDD min [55:53]
  UINT32  VddRCurrMax:3;                        // max. read current @VDD max [58:56]
  UINT32  VddRCurrMin:3;                        // max. read current @VDD min [61:59]
  UINT32  CSizeLow:2;                           // Device size low 2 bits [63:62]

  UINT32  CSizeHigh:10;                         // Device size high 10 bits [73:64]
  UINT32  Reserved4:2;                          // Reserved [75:74]
  UINT32  DsrImp:1;                             // DSR implemented [76:76]
  UINT32  ReadBlkMisalign:1;                    // Read block misalignment [77:77]
  UINT32  WriteBlkMisalign:1;                   // Write block misalignment [78:78]
  UINT32  ReadBlPartial:1;                      // Partial blocks for read allowed [79:79]
  UINT32  ReadBlLen:4;                          // Max. read data block length [83:80]
  UINT32  Ccc:12;                               // Card command classes [95:84]

  UINT32  TranSpeed:8;                          // Max. data transfer rate [103:96]
  UINT32  Nsac:8;                               // Data read access-time in CLK cycles (NSAC*100) [111:104]
  UINT32  Taac:8;                               // Data read access-time [119:112]
  UINT32  Reserved5:6;                          // Reserved [125:120]
  UINT32  CsdStructure:2;                       // CSD structure [127:126]
} SD_CSD;

typedef struct {
  UINT32  NotUsed:1;                            // Not used [0:0]
  UINT32  Crc:7;                                // CRC [7:1]
  UINT32  Reserved:2;                           // Reserved [9:8]
  UINT32  FileFormat:2;                         // File format [11:10]
  UINT32  TmpWriteProtect:1;                    // Temporary write protection [12:12]
  UINT32  PermWriteProtect:1;                   // Permanent write protection [13:13]
  UINT32  Copy:1;                               // Copy flag (OTP) [14:14]
  UINT32  FileFormatGrp:1;                      // File format group [15:15]
  UINT32  Reserved1:5;                          // Reserved [20:16]
  UINT32  WriteBlPartial:1;                     // Partial blocks for write allowed [21:21]
  UINT32  WriteBlLen:4;                         // Max. write data block length [25:22]
  UINT32  R2WFactor:3;                          // Write speed factor [28:26]
  UINT32  Reserved2:2;                          // Manufacturer default ECC [30:29]
  UINT32  WpGrpEnable:1;                        // Write protect group enable [31:31]

  UINT32  WpGrpSize:7;                          // Write protect group size [38:32]
  UINT32  SectorSize:7;                         // Erase sector size [45:39]
  UINT32  EraseBlkEn:1;                         // Erase single block enable [46:46]
  UINT32  Reserved3:1;                          // Reserved [47:47]
  UINT32  CSizeLow:16;                          // Device size low 16 bits [63:48]

  UINT32  CSizeHigh:6;                          // Device size high 6 bits [69:64]
  UINT32  Reserved4:6;                          // Reserved [75:70]
  UINT32  DsrImp:1;                             // DSR implemented [76:76]
  UINT32  ReadBlkMisalign:1;                    // Read block misalignment [77:77]
  UINT32  WriteBlkMisalign:1;                   // Write block misalignment [78:78]
  UINT32  ReadBlPartial:1;                      // Partial blocks for read allowed [79:79]
  UINT32  ReadBlLen:4;                          // Max. read data block length [83:80]
  UINT32  Ccc:12;                               // Card command classes [95:84]

  UINT32  TranSpeed:8;                          // Max. data transfer rate [103:96]
  UINT32  Nsac:8;                               // Data read access-time in CLK cycles (NSAC*100) [111:104]
  UINT32  Taac:8;                               // Data read access-time [119:112]
  UINT32  Reserved5:6;                          // Reserved [125:120]
  UINT32  CsdStructure:2;                       // CSD structure [127:126]
} SD_CSD2;

typedef struct {
  UINT32  Reserved;                             // Reserved [31:0]

  UINT32  CmdSupport:4;                         // Command Support bits [35:32]
  UINT32  Reserved1:6;                          // Reserved [41:36]
  UINT32  SdSpec4:1;                            // Spec. Version 4.00 or higher [42:42]
  UINT32  ExSecurity:4;                         // Extended Security Support [46:43]
  UINT32  SdSpec3:1;                            // Spec. Version 3.00 or higher [47:47]
  UINT32  SdBusWidths:4;                        // DAT Bus widths supported [51:48]
  UINT32  SdSecurity:3;                         // CPRM security support [54:52]
  UINT32  DataStatAfterErase:1;                 // Data status after erases [55]
  UINT32  SdSpec:4;                             // SD Memory Card Spec. Version [59:56]
  UINT32  ScrStructure:4;                       // SCR Structure [63:60]
} SD_SCR;

#pragma pack()

#endif
