]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Omap35xxPkg/MMCHSDxe/MMCHS.h
Moving OMAP 3530 code out of BeagleBoard package into its own package
[mirror_edk2.git] / Omap35xxPkg / MMCHSDxe / MMCHS.h
diff --git a/Omap35xxPkg/MMCHSDxe/MMCHS.h b/Omap35xxPkg/MMCHSDxe/MMCHS.h
new file mode 100755 (executable)
index 0000000..9baac74
--- /dev/null
@@ -0,0 +1,158 @@
+/** @file\r
+\r
+  Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>\r
+\r
+  All rights reserved. This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef _MMCHS_H_\r
+#define _MMCHS_H_\r
+\r
+#include <Library/BaseLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/PcdLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include <Protocol/EmbeddedExternalDevice.h>\r
+#include <Protocol/BlockIo.h>
+#include <Protocol/Cpu.h>
+#include <Protocol/DevicePath.h>
+
+#include <Omap3530/Omap3530.h>\r
+#include <TPS65950.h>\r
+\r
+#define MAX_RETRY_COUNT  100
+
+#define HCS               (0x1UL << 30) //Host capacity support/1 = Supporting high capacity\r
+#define CCS               (0x1UL << 30) //Card capacity status/1 = High capacity card\r
+typedef struct {\r
+  UINT32  Reserved0:   7; // 0 \r
+  UINT32  V170_V195:   1; // 1.70V - 1.95V\r
+  UINT32  V200_V260:   7; // 2.00V - 2.60V\r
+  UINT32  V270_V360:   9; // 2.70V - 3.60V\r
+  UINT32  RESERVED_1:  5; // Reserved\r
+  UINT32  AccessMode:  2; // 00b (byte mode), 10b (sector mode) \r
+  UINT32  Busy:        1; // This bit is set to LOW if the card has not finished the power up routine\r
+}OCR;\r
+\r
+typedef struct {\r
+  UINT32  NOT_USED;   // 1 [0:0]\r
+  UINT32  CRC;        // CRC7 checksum [7:1]\r
+  UINT32  MDT;        // Manufacturing date [19:8]\r
+  UINT32  RESERVED_1; // Reserved [23:20]\r
+  UINT32  PSN;        // Product serial number [55:24]\r
+  UINT8   PRV;        // Product revision [63:56]\r
+  UINT8   PNM[5];     // Product name [64:103]\r
+  UINT16  OID;        // OEM/Application ID [119:104]\r
+  UINT8   MID;        // Manufacturer ID [127:120]\r
+}CID;\r
+\r
+typedef struct {\r
+  UINT8   NOT_USED:           1; // Not used, always 1 [0:0]\r
+  UINT8   CRC:                7; // CRC [7:1]\r
+  UINT8   RESERVED_1:         2; // Reserved [9:8]\r
+  UINT8   FILE_FORMAT:        2; // File format [11:10]\r
+  UINT8   TMP_WRITE_PROTECT:  1; // Temporary write protection [12:12]\r
+  UINT8   PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]\r
+  UINT8   COPY:               1; // Copy flag (OTP) [14:14]\r
+  UINT8   FILE_FORMAT_GRP:    1; // File format group [15:15]\r
+  UINT16  RESERVED_2:         5; // Reserved [20:16]\r
+  UINT16  WRITE_BL_PARTIAL:   1; // Partial blocks for write allowed [21:21]\r
+  UINT16  WRITE_BL_LEN:       4; // Max. write data block length [25:22]\r
+  UINT16  R2W_FACTOR:         3; // Write speed factor [28:26]\r
+  UINT16  RESERVED_3:         2; // Reserved [30:29]\r
+  UINT16  WP_GRP_ENABLE:      1; // Write protect group enable [31:31]\r
+  UINT32  WP_GRP_SIZE:        7; // Write protect group size [38:32]\r
+  UINT32  SECTOR_SIZE:        7; // Erase sector size [45:39]\r
+  UINT32  ERASE_BLK_EN:       1; // Erase single block enable [46:46]\r
+  UINT32  C_SIZE_MULT:        3; // Device size multiplier [49:47]\r
+  UINT32  VDD_W_CURR_MAX:     3; // Max. write current @ VDD max [52:50]\r
+  UINT32  VDD_W_CURR_MIN:     3; // Max. write current @ VDD min [55:53]\r
+  UINT32  VDD_R_CURR_MAX:     3; // Max. read current @ VDD max [58:56]\r
+  UINT32  VDD_R_CURR_MIN:     3; // Max. read current @ VDD min [61:59]\r
+  UINT32  C_SIZELow2:         2; // Device size [73:62]\r
+  UINT32  C_SIZEHigh10:       10;// Device size [73:62]\r
+  UINT32  RESERVED_4:         2; // Reserved [75:74]\r
+  UINT32  DSR_IMP:            1; // DSR implemented [76:76]\r
+  UINT32  READ_BLK_MISALIGN:  1; // Read block misalignment [77:77]\r
+  UINT32  WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]\r
+  UINT32  READ_BL_PARTIAL:    1; // Partial blocks for read allowed [79:79]\r
+  UINT32  READ_BL_LEN:        4; // Max. read data block length [83:80]\r
+  UINT32  CCC:                12;// Card command classes [95:84]\r
+  UINT8   TRAN_SPEED          ;  // Max. bus clock frequency [103:96]\r
+  UINT8   NSAC                ;  // Data read access-time 2 in CLK cycles (NSAC*100) [111:104]\r
+  UINT8   TAAC                ;  // Data read access-time 1 [119:112]\r
+  UINT8   RESERVED_5:         6; // Reserved [125:120]\r
+  UINT8   CSD_STRUCTURE:      2; // CSD structure [127:126]\r
+}CSD;\r
+\r
+typedef struct {\r
+  UINT8   NOT_USED:           1; // Not used, always 1 [0:0]\r
+  UINT8   CRC:                7; // CRC [7:1]\r
+  UINT8   RESERVED_1:         2; // Reserved [9:8]\r
+  UINT8   FILE_FORMAT:        2; // File format [11:10]\r
+  UINT8   TMP_WRITE_PROTECT:  1; // Temporary write protection [12:12]\r
+  UINT8   PERM_WRITE_PROTECT: 1; // Permanent write protection [13:13]\r
+  UINT8   COPY:               1; // Copy flag (OTP) [14:14]\r
+  UINT8   FILE_FORMAT_GRP:    1; // File format group [15:15]\r
+  UINT16  RESERVED_2:         5; // Reserved [20:16]\r
+  UINT16  WRITE_BL_PARTIAL:   1; // Partial blocks for write allowed [21:21]\r
+  UINT16  WRITE_BL_LEN:       4; // Max. write data block length [25:22]\r
+  UINT16  R2W_FACTOR:         3; // Write speed factor [28:26]\r
+  UINT16  RESERVED_3:         2; // Reserved [30:29]\r
+  UINT16  WP_GRP_ENABLE:      1; // Write protect group enable [31:31]\r
+  UINT16  WP_GRP_SIZE:        7; // Write protect group size [38:32]\r
+  UINT16  SECTOR_SIZE:        7; // Erase sector size [45:39]\r
+  UINT16  ERASE_BLK_EN:       1; // Erase single block enable [46:46]\r
+  UINT16  RESERVED_4:         1; // Reserved [47:47]\r
+  UINT32  C_SIZELow16:        16;// Device size [69:48]\r
+  UINT32  C_SIZEHigh6:        6; // Device size [69:48]\r
+  UINT32  RESERVED_5:         6; // Reserved [75:70]\r
+  UINT32  DSR_IMP:            1; // DSR implemented [76:76]\r
+  UINT32  READ_BLK_MISALIGN:  1; // Read block misalignment [77:77]\r
+  UINT32  WRITE_BLK_MISALIGN: 1; // Write block misalignment [78:78]\r
+  UINT32  READ_BL_PARTIAL:    1; // Partial blocks for read allowed [79:79]\r
+  UINT16  READ_BL_LEN:        4; // Max. read data block length [83:80]\r
+  UINT16  CCC:                12;// Card command classes [95:84]\r
+  UINT8   TRAN_SPEED          ;  // Max. bus clock frequency [103:96]\r
+  UINT8   NSAC                ;  // Data read access-time 2 in CLK cycles (NSAC*100) [111:104]\r
+  UINT8   TAAC                ;  // Data read access-time 1 [119:112]\r
+  UINT8   RESERVED_6:         6; // 0 [125:120]\r
+  UINT8   CSD_STRUCTURE:      2; // CSD structure [127:126]\r
+}CSD_SDV2;\r
+\r
+typedef enum {
+  UNKNOWN_CARD,
+  MMC_CARD,              //MMC card
+  SD_CARD,               //SD 1.1 card
+  SD_CARD_2,             //SD 2.0 or above standard card
+  SD_CARD_2_HIGH         //SD 2.0 or above high capacity card
+} CARD_TYPE;\r
+\r
+typedef enum {\r
+  READ,\r
+  WRITE\r
+} OPERATION_TYPE;\r
+\r
+typedef struct \r
+{\r
+  UINT16    RCA;\r
+  UINTN     BlockSize;\r
+  UINTN     NumBlocks;\r
+  UINTN     ClockFrequencySelect;\r
+  CARD_TYPE CardType;\r
+  OCR       OCRData;\r
+  CID       CIDData;\r
+  CSD       CSDData;\r
+} CARD_INFO;\r
+\r
+#endif\r