/** @file\r
Main Header file for the MMC DXE driver\r
\r
- Copyright (c) 2011, ARM Limited. All rights reserved.\r
+ Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
\r
This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
#include <Protocol/MmcHost.h>\r
\r
#include <Library/UefiLib.h>\r
+#include <Library/DebugLib.h>\r
\r
#define MMC_TRACE(txt) DEBUG((EFI_D_BLKIO, "MMC: " txt "\n"))\r
\r
\r
#define MMC_OCR_POWERUP 0x80000000\r
\r
-#define MMC_CSD_GET_CCC(Response) (Response[1] >> 20)\r
-#define MMC_CSD_GET_TRANSPEED(Response) (Response[0] & 0xFF)\r
-#define MMC_CSD_GET_READBLLEN(Response) ((Response[1] >> 16) & 0xF)\r
-#define MMC_CSD_GET_WRITEBLLEN(Response) ((Response[3] >> 22) & 0xF)\r
-#define MMC_CSD_GET_FILEFORMAT(Response) ((Response[3] >> 10) & 0x3)\r
-#define MMC_CSD_GET_FILEFORMATGRP(Response) ((Response[3] >> 15) & 0x1)\r
-#define MMC_CSD_GET_DEVICESIZE(csd) (((Response[2] >> 30) & 0x3) | ((Response[1] & 0x3FF) << 2))\r
-#define MMC_CSD_GET_DEVICESIZEMULT(csd) ((Response[2] >> 15) & 0x7)\r
+#define MMC_CSD_GET_CCC(Response) (Response[2] >> 20)\r
+#define MMC_CSD_GET_TRANSPEED(Response) (Response[3] & 0xFF)\r
+#define MMC_CSD_GET_READBLLEN(Response) ((Response[2] >> 16) & 0xF)\r
+#define MMC_CSD_GET_WRITEBLLEN(Response) ((Response[0] >> 22) & 0xF)\r
+#define MMC_CSD_GET_FILEFORMAT(Response) ((Response[0] >> 10) & 0x3)\r
+#define MMC_CSD_GET_FILEFORMATGRP(Response) ((Response[0] >> 15) & 0x1)\r
+#define MMC_CSD_GET_DEVICESIZE(csd) (((Response[1] >> 30) & 0x3) | ((Response[2] & 0x3FF) << 2))\r
+#define HC_MMC_CSD_GET_DEVICESIZE(Response) ((Response[1] >> 16) | ((Response[2] & 0x40) << 16));\r
+#define MMC_CSD_GET_DEVICESIZEMULT(csd) ((Response[1] >> 15) & 0x7)\r
\r
#define MMC_R0_READY_FOR_DATA (1 << 8)\r
\r
UNKNOWN_CARD,\r
MMC_CARD, //MMC card\r
MMC_CARD_HIGH, //MMC Card with High capacity\r
+ EMMC_CARD, //eMMC 4.41 card\r
SD_CARD, //SD 1.1 card\r
SD_CARD_2, //SD 2.0 or above standard card\r
SD_CARD_2_HIGH //SD 2.0 or above high capacity card\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
+ UINT32 PowerUp: 1; // This bit is set to LOW if the card has not finished the power up routine\r
} OCR;\r
\r
typedef struct {\r
EFI_BLOCK_IO_PROTOCOL BlockIo;\r
CARD_INFO CardInfo;\r
EFI_MMC_HOST_PROTOCOL *MmcHost;\r
+ \r
+ BOOLEAN Initialized;\r
} MMC_HOST_INSTANCE;\r
\r
#define MMC_HOST_INSTANCE_SIGNATURE SIGNATURE_32('m', 'm', 'c', 'h')\r
IN EFI_BLOCK_IO_PROTOCOL *This\r
);\r
\r
+EFI_STATUS\r
+MmcNotifyState (\r
+ IN MMC_HOST_INSTANCE *MmcHostInstance,\r
+ IN MMC_STATE State\r
+ );\r
+\r
+EFI_STATUS\r
+InitializeMmcDevice (\r
+ IN MMC_HOST_INSTANCE *MmcHost\r
+ );\r
+\r
+VOID\r
+EFIAPI\r
+CheckCardsCallback (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ );\r
+\r
+VOID\r
+PrintCSD (\r
+ IN UINT32* Csd\r
+ );\r
+\r
+VOID\r
+PrintRCA (\r
+ IN UINT32 Rca\r
+ );\r
+\r
+VOID\r
+PrintOCR (\r
+ IN UINT32 Ocr\r
+ );\r
+\r
+VOID\r
+PrintResponseR1 (\r
+ IN UINT32 Response\r
+ );\r
+\r
+VOID\r
+PrintCID (\r
+ IN UINT32* Cid\r
+ );\r
+\r
#endif\r