+++ /dev/null
-/** @file\r
-\r
-The definition for SD media device driver model and blkio protocol routines.\r
-\r
-Copyright (c) 2013-2016 Intel Corporation.\r
-\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#ifndef _SD_MEDIA_DEVICE_H_\r
-#define _SD_MEDIA_DEVICE_H_\r
-\r
-\r
-#include <Uefi.h>\r
-\r
-#include <Protocol/PciIo.h>\r
-#include <Protocol/BlockIo.h>\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/UefiDriverEntryPoint.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PcdLib.h>\r
-#include <IndustryStandard/Pci22.h>\r
-\r
-#include "ComponentName.h"\r
-#include "SDHostIo.h"\r
-\r
-\r
-extern EFI_DRIVER_BINDING_PROTOCOL gSDMediaDeviceDriverBinding;\r
-extern EFI_COMPONENT_NAME_PROTOCOL gSDMediaDeviceName;\r
-extern EFI_COMPONENT_NAME2_PROTOCOL gSDMediaDeviceName2;\r
-\r
-//\r
-// Define the region of memory used for DMA memory\r
-//\r
-#define DMA_MEMORY_TOP 0x0000000001FFFFFFULL\r
-\r
-#define CARD_DATA_SIGNATURE SIGNATURE_32 ('c', 'a', 'r', 'd')\r
-\r
-//\r
-// Command timeout will be max 100 ms\r
-//\r
-#define TIMEOUT_COMMAND 100\r
-#define TIMEOUT_DATA 5000\r
-\r
-typedef enum{\r
- UnknownCard = 0,\r
- MMCCard, // MMC card\r
- MMCCardHighCap, // MMC Card High Capacity\r
- CEATACard, // CE-ATA device\r
- SDMemoryCard, // SD 1.1 card\r
- SDMemoryCard2, // SD 2.0 or above standard card\r
- SDMemoryCard2High // SD 2.0 or above high capacity card\r
-}CARD_TYPE;\r
-\r
-\r
-typedef struct {\r
- //\r
- //BlockIO\r
- //\r
- UINTN Signature;\r
- EFI_BLOCK_IO_PROTOCOL BlockIo;\r
-\r
- EFI_BLOCK_IO_MEDIA BlockIoMedia;\r
-\r
- EFI_SD_HOST_IO_PROTOCOL *SDHostIo;\r
- EFI_UNICODE_STRING_TABLE *ControllerNameTable;\r
- CARD_TYPE CardType;\r
-\r
- UINT8 CurrentBusWidth;\r
- BOOLEAN DualVoltage;\r
- BOOLEAN NeedFlush;\r
- UINT8 Reserved[3];\r
-\r
- UINT16 Address;\r
- UINT32 BlockLen;\r
- UINT32 MaxFrequency;\r
- UINT64 BlockNumber;\r
- //\r
- //Common used\r
- //\r
- CARD_STATUS CardStatus;\r
- OCR OCRRegister;\r
- CID CIDRegister;\r
- CSD CSDRegister;\r
- EXT_CSD ExtCSDRegister;\r
- UINT8 *RawBufferPointer;\r
- UINT8 *AlignedBuffer;\r
- //\r
- //CE-ATA specific\r
- //\r
- TASK_FILE TaskFile;\r
- IDENTIFY_DEVICE_DATA IndentifyDeviceData;\r
- //\r
- //SD specific\r
- //\r
- SCR SCRRegister;\r
- SD_STATUS_REG SDSattus;\r
- SWITCH_STATUS SwitchStatus;\r
-}CARD_DATA;\r
-\r
-#define CARD_DATA_FROM_THIS(a) \\r
- CR(a, CARD_DATA, BlockIo, CARD_DATA_SIGNATURE)\r
-\r
-/**\r
- Test to see if this driver supports ControllerHandle. Any\r
- ControllerHandle that has BlockIoProtocol installed will be supported.\r
-\r
- @param This Protocol instance pointer.\r
- @param Controller Handle of device to test.\r
- @param RemainingDevicePath Not used.\r
-\r
- @return EFI_SUCCESS This driver supports this device.\r
- @return EFI_UNSUPPORTED This driver does not support this device.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-SDMediaDeviceSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-/**\r
- Starting the SD Media Device Driver.\r
-\r
- @param This Protocol instance pointer.\r
- @param Controller Handle of device to test.\r
- @param RemainingDevicePath Not used.\r
-\r
- @retval EFI_SUCCESS This driver supports this device.\r
- @retval EFI_UNSUPPORTED This driver does not support this device.\r
- @retval EFI_DEVICE_ERROR This driver cannot be started due to device Error.\r
- EFI_OUT_OF_RESOURCES- Failed due to resource shortage.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-SDMediaDeviceStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-/**\r
- Stop this driver on ControllerHandle. Support stopping any child handles\r
- created by this driver.\r
-\r
- @param This Protocol instance pointer.\r
- @param Controller Handle of device to stop driver on.\r
- @param NumberOfChildren Number of Children in the ChildHandleBuffer.\r
- @param ChildHandleBuffer List of handles for the children we need to stop.\r
-\r
- @return EFI_SUCCESS\r
- @return others\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-SDMediaDeviceStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
- );\r
-\r
-/**\r
- MMC/SD card init function\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @return EFI_SUCCESS\r
- @return others\r
-\r
-**/\r
-EFI_STATUS\r
-MMCSDCardInit (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- Send command by using Host IO protocol\r
-\r
- @param This A pointer to the EFI_SD_HOST_IO_PROTOCOL instance.\r
- @param CommandIndex The command index to set the command index field of command register.\r
- @param Argument Command argument to set the argument field of command register.\r
- @param DataType TRANSFER_TYPE, indicates no data, data in or data out.\r
- @param Buffer Contains the data read from / write to the device.\r
- @param BufferSize The size of the buffer.\r
- @param ResponseType RESPONSE_TYPE.\r
- @param TimeOut Time out value in 1 ms unit.\r
- @param ResponseData Depending on the ResponseType, such as CSD or card status.\r
-\r
- @retval EFI_SUCCESS\r
- @retval EFI_INVALID_PARAMETER\r
- @retval EFI_UNSUPPORTED\r
- @retval EFI_DEVICE_ERROR\r
-\r
-**/\r
-EFI_STATUS\r
-SendCommand (\r
- IN CARD_DATA *CardData,\r
- IN UINT16 CommandIndex,\r
- IN UINT32 Argument,\r
- IN TRANSFER_TYPE DataType,\r
- IN UINT8 *Buffer, OPTIONAL\r
- IN UINT32 BufferSize,\r
- IN RESPONSE_TYPE ResponseType,\r
- IN UINT32 TimeOut,\r
- OUT UINT32 *ResponseData\r
- );\r
-\r
-/**\r
- Send the card APP_CMD command with the following command indicated by CommandIndex\r
-\r
- @param CardData Pointer to CARD_DATA.\r
- @param CommandIndex The command index to set the command index field of command register.\r
- @param Argument Command argument to set the argument field of command register.\r
- @param DataType TRANSFER_TYPE, indicates no data, data in or data out.\r
- @param Buffer Contains the data read from / write to the device.\r
- @param BufferSize The size of the buffer.\r
- @param ResponseType RESPONSE_TYPE.\r
- @param TimeOut Time out value in 1 ms unit.\r
- @param ResponseData Depending on the ResponseType, such as CSD or card status.\r
-\r
- @retval EFI_SUCCESS\r
- @retval EFI_INVALID_PARAMETER\r
- @retval EFI_UNSUPPORTED\r
- @retval EFI_DEVICE_ERROR\r
-\r
-**/\r
-EFI_STATUS\r
-SendAppCommand (\r
- IN CARD_DATA *CardData,\r
- IN UINT16 CommandIndex,\r
- IN UINT32 Argument,\r
- IN TRANSFER_TYPE DataType,\r
- IN UINT8 *Buffer, OPTIONAL\r
- IN UINT32 BufferSize,\r
- IN RESPONSE_TYPE ResponseType,\r
- IN UINT32 TimeOut,\r
- OUT UINT32 *ResponseData\r
- );\r
-\r
-/**\r
- Send the card FAST_IO command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
- @param RegisterAddress Register Address.\r
- @param RegisterData Pointer to register Data.\r
- @param Write TRUE for write, FALSE for read.\r
-\r
- @retval EFI_SUCCESS\r
- @retval EFI_UNSUPPORTED\r
- @retval EFI_INVALID_PARAMETER\r
- @retval EFI_DEVICE_ERROR\r
-\r
-**/\r
-EFI_STATUS\r
-FastIO (\r
- IN CARD_DATA *CardData,\r
- IN UINT8 RegisterAddress,\r
- IN OUT UINT8 *RegisterData,\r
- IN BOOLEAN Write\r
- );\r
-\r
-/**\r
- Judge whether it is CE-ATA device or not.\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval TRUE\r
- @retval FALSE\r
-\r
-**/\r
-BOOLEAN\r
-IsCEATADevice (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- Send software reset\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-SoftwareReset (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- SendATACommand specificed in Taskfile\r
-\r
- @param CardData Pointer to CARD_DATA.\r
- @param TaskFile Pointer to TASK_FILE.\r
- @param Write TRUE means write, FALSE means read.\r
- @param Buffer If NULL, means no data transfer, neither read nor write.\r
- @param SectorCount Buffer size in 512 bytes unit.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-SendATACommand (\r
- IN CARD_DATA *CardData,\r
- IN TASK_FILE *TaskFile,\r
- IN BOOLEAN Write,\r
- IN UINT8 *Buffer,\r
- IN UINT16 SectorCount\r
- );\r
-\r
-/**\r
- IDENTIFY_DEVICE command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-IndentifyDevice (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- FLUSH_CACHE_EXT command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-FlushCache (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- STANDBY_IMMEDIATE command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-StandByImmediate (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- READ_DMA_EXT command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
- @param LBA The starting logical block address to read from on the device.\r
- @param Buffer A pointer to the destination buffer for the data. The caller\r
- is responsible for either having implicit or explicit ownership\r
- of the buffer.\r
- @param SectorCount Size in 512 bytes unit.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-ReadDMAExt (\r
- IN CARD_DATA *CardData,\r
- IN EFI_LBA LBA,\r
- IN UINT8 *Buffer,\r
- IN UINT16 SectorCount\r
- );\r
-\r
-/**\r
- WRITE_DMA_EXT command\r
-\r
- @param CardData Pointer to CARD_DATA.\r
- @param LBA The starting logical block address to read from on the device.\r
- @param Buffer A pointer to the destination buffer for the data. The caller\r
- is responsible for either having implicit or explicit ownership\r
- of the buffer.\r
- @param SectorCount Size in 512 bytes unit.\r
-\r
- @retval EFI_SUCCESS Success\r
- @retval EFI_DEVICE_ERROR Hardware Error\r
- @retval EFI_INVALID_PARAMETER Parameter is error\r
- @retval EFI_NO_MEDIA No media\r
- @retval EFI_MEDIA_CHANGED Media Change\r
- @retval EFI_BAD_BUFFER_SIZE Buffer size is bad\r
-\r
-**/\r
-EFI_STATUS\r
-WriteDMAExt (\r
- IN CARD_DATA *CardData,\r
- IN EFI_LBA LBA,\r
- IN UINT8 *Buffer,\r
- IN UINT16 SectorCount\r
- );\r
-\r
-/**\r
- CEATA card BlockIo init function.\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS\r
- @retval Others\r
-**/\r
-EFI_STATUS\r
-CEATABlockIoInit (\r
- IN CARD_DATA *CardData\r
- );\r
-\r
-/**\r
- MMC/SD card BlockIo init function.\r
-\r
- @param CardData Pointer to CARD_DATA.\r
-\r
- @retval EFI_SUCCESS\r
- @retval Others\r
-**/\r
-EFI_STATUS\r
-MMCSDBlockIoInit (\r
- IN CARD_DATA *CardData\r
- );\r
-#endif\r