]> git.proxmox.com Git - mirror_edk2.git/blobdiff - QuarkSocPkg/QuarkSouthCluster/Sdio/Dxe/SDMediaDeviceDxe/SDMediaDevice.h
QuarkSocPkg: Add new package for Quark SoC X1000
[mirror_edk2.git] / QuarkSocPkg / QuarkSouthCluster / Sdio / Dxe / SDMediaDeviceDxe / SDMediaDevice.h
diff --git a/QuarkSocPkg/QuarkSouthCluster/Sdio/Dxe/SDMediaDeviceDxe/SDMediaDevice.h b/QuarkSocPkg/QuarkSouthCluster/Sdio/Dxe/SDMediaDeviceDxe/SDMediaDevice.h
new file mode 100644 (file)
index 0000000..1550429
--- /dev/null
@@ -0,0 +1,468 @@
+/** @file\r
+\r
+The definition for SD media device driver model and blkio protocol routines.\r
+\r
+Copyright (c) 2013-2015 Intel Corporation.\r
+\r
+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 _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 stoping 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