mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 03:57:26 +00:00 
			
		
		
		
	https://svn.code.sf.net/p/edk2/code/trunk/edk2/, which are for MinnowBoard MAX open source project. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Wei <david.wei@intel.com> Reviewed-by: Mike Wu <mike.wu@intel.com> Reviewed-by: Hot Tian <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			416 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			416 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c)  1999  - 2014, Intel Corporation. All rights reserved
 | 
						|
 | 
						|
  This program and the accompanying materials are licensed and made available under
 | 
						|
  the terms and conditions of the BSD License that 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.
 | 
						|
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
 | 
						|
/*++
 | 
						|
Module Name:
 | 
						|
 | 
						|
  SdHostIo.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
  Interface definition for EFI_SD_HOST_IO_PROTOCOL
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#ifndef _SD_HOST_IO_H
 | 
						|
#define _SD_HOST_IO_H
 | 
						|
 | 
						|
 | 
						|
// Global ID for the EFI_SD_HOST_IO_PROTOCOL
 | 
						|
// {B63F8EC7-A9C9-4472-A4C0-4D8BF365CC51}
 | 
						|
//
 | 
						|
#define EFI_SD_HOST_IO_PROTOCOL_GUID \
 | 
						|
  { 0xb63f8ec7, 0xa9c9, 0x4472, { 0xa4, 0xc0, 0x4d, 0x8b, 0xf3, 0x65, 0xcc, 0x51 } }
 | 
						|
 | 
						|
typedef struct _EFI_SD_HOST_IO_PROTOCOL EFI_SD_HOST_IO_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
// TODO: Move to Pci22.h
 | 
						|
//
 | 
						|
#define PCI_SUBCLASS_SD_HOST_CONTROLLER   0x05
 | 
						|
#define PCI_IF_STANDARD_HOST_NO_DMA       0x00
 | 
						|
#define PCI_IF_STANDARD_HOST_SUPPORT_DMA  0x01
 | 
						|
 | 
						|
//
 | 
						|
// TODO: Retire
 | 
						|
//
 | 
						|
#define EFI_SD_HOST_IO_PROTOCOL_REVISION_01          0x01
 | 
						|
 | 
						|
//
 | 
						|
// TODO: Do these belong in an Industry Standard include file?
 | 
						|
//
 | 
						|
// MMIO Registers definition for MMC/SDIO controller
 | 
						|
//
 | 
						|
#define  MMIO_DMAADR                     0x00
 | 
						|
#define  MMIO_BLKSZ                      0x04
 | 
						|
#define  MMIO_BLKCNT                     0x06
 | 
						|
#define  MMIO_CMDARG                     0x08
 | 
						|
#define  MMIO_XFRMODE                    0x0C
 | 
						|
#define  MMIO_SDCMD                      0x0E
 | 
						|
#define  MMIO_RESP                       0x10
 | 
						|
#define  MMIO_BUFDATA                    0x20
 | 
						|
#define  MMIO_PSTATE                     0x24
 | 
						|
#define  MMIO_HOSTCTL                    0x28
 | 
						|
#define  MMIO_PWRCTL                     0x29
 | 
						|
#define  MMIO_BLKGAPCTL                  0x2A
 | 
						|
#define  MMIO_WAKECTL                    0x2B
 | 
						|
#define  MMIO_CLKCTL                     0x2C
 | 
						|
#define  MMIO_TOCTL                      0x2E
 | 
						|
#define  MMIO_SWRST                      0x2F
 | 
						|
#define  MMIO_NINTSTS                    0x30
 | 
						|
#define  MMIO_ERINTSTS                   0x32
 | 
						|
#define  MMIO_NINTEN                     0x34
 | 
						|
#define  MMIO_ERINTEN                    0x36
 | 
						|
#define  MMIO_NINTSIGEN                  0x38
 | 
						|
#define  MMIO_ERINTSIGEN                 0x3A
 | 
						|
#define  MMIO_AC12ERRSTS                 0x3C
 | 
						|
#define  MMIO_HOST_CTL2                  0x3E //hphang <- New in VLV2
 | 
						|
#define  MMIO_CAP                        0x40
 | 
						|
#define  MMIO_CAP2                       0x44 //hphang <- New in VLV2
 | 
						|
#define  MMIO_MCCAP                      0x48
 | 
						|
#define  MMIO_FORCEEVENTCMD12ERRSTAT     0x50 //hphang <- New in VLV2
 | 
						|
#define  MMIO_FORCEEVENTERRINTSTAT       0x52 //hphang <- New in VLV2
 | 
						|
#define  MMIO_ADMAERRSTAT                0x54 //hphang <- New in VLV2
 | 
						|
#define  MMIO_ADMASYSADDR                0x58 //hphang <- New in VLV2
 | 
						|
#define  MMIO_PRESETVALUE0               0x60 //hphang <- New in VLV2
 | 
						|
#define  MMIO_PRESETVALUE1               0x64 //hphang <- New in VLV2
 | 
						|
#define  MMIO_PRESETVALUE2               0x68 //hphang <- New in VLV2
 | 
						|
#define  MMIO_PRESETVALUE3               0x6C //hphang <- New in VLV2
 | 
						|
#define  MMIO_BOOTTIMEOUTCTRL            0x70 //hphang <- New in VLV2
 | 
						|
#define  MMIO_DEBUGSEL                   0x74 //hphang <- New in VLV2
 | 
						|
#define  MMIO_SHAREDBUS                  0xE0 //hphang <- New in VLV2
 | 
						|
#define  MMIO_SPIINTSUP                  0xF0 //hphang <- New in VLV2
 | 
						|
#define  MMIO_SLTINTSTS                  0xFC
 | 
						|
#define  MMIO_CTRLRVER                   0xFE
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  ResponseNo = 0,
 | 
						|
  ResponseR1,
 | 
						|
  ResponseR1b,
 | 
						|
  ResponseR2,
 | 
						|
  ResponseR3,
 | 
						|
  ResponseR4,
 | 
						|
  ResponseR5,
 | 
						|
  ResponseR5b,
 | 
						|
  ResponseR6,
 | 
						|
  ResponseR7
 | 
						|
} RESPONSE_TYPE;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  NoData = 0,
 | 
						|
  InData,
 | 
						|
  OutData
 | 
						|
} TRANSFER_TYPE;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  Reset_Auto = 0,
 | 
						|
  Reset_DAT,
 | 
						|
  Reset_CMD,
 | 
						|
  Reset_DAT_CMD,
 | 
						|
  Reset_All,
 | 
						|
  Reset_HW
 | 
						|
} RESET_TYPE;
 | 
						|
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  SDMA = 0,
 | 
						|
  ADMA2,
 | 
						|
  PIO
 | 
						|
} DMA_MOD;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32  HighSpeedSupport:    1;  //High speed supported
 | 
						|
  UINT32  V18Support:          1;  //1.8V supported
 | 
						|
  UINT32  V30Support:          1;  //3.0V supported
 | 
						|
  UINT32  V33Support:          1;  //3.3V supported
 | 
						|
  UINT32  SDR50Support:        1;
 | 
						|
  UINT32  SDR104Support:       1;
 | 
						|
  UINT32  DDR50Support:        1;
 | 
						|
  UINT32  Reserved0:           1;
 | 
						|
  UINT32  BusWidth4:           1;  // 4 bit width
 | 
						|
  UINT32  BusWidth8:           1;  // 8 bit width
 | 
						|
  UINT32  Reserved1:           6;
 | 
						|
  UINT32  SDMASupport:         1;
 | 
						|
  UINT32  ADMA2Support:        1;
 | 
						|
  UINT32  DmaMode:             2;
 | 
						|
  UINT32  ReTuneTimer:         4;
 | 
						|
  UINT32  ReTuneMode:          2;
 | 
						|
  UINT32  Reserved2:           6;
 | 
						|
  UINT32  BoundarySize;
 | 
						|
} HOST_CAPABILITY;
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    The main function used to send the command to the card inserted into the SD host
 | 
						|
    slot.
 | 
						|
    It will assemble the arguments to set the command register and wait for the command
 | 
						|
    and transfer completed until timeout. Then it will read the response register to fill
 | 
						|
    the ResponseData
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This           - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    CommandIndex   - The command index to set the command index field of command register
 | 
						|
    Argument       - Command argument to set the argument field of command register
 | 
						|
    DataType       - TRANSFER_TYPE, indicates no data, data in or data out
 | 
						|
    Buffer         - Contains the data read from / write to the device
 | 
						|
    BufferSize     - The size of the buffer
 | 
						|
    ResponseType   - RESPONSE_TYPE
 | 
						|
    TimeOut        - Time out value in 1 ms unit
 | 
						|
    ResponseData   - Depending on the ResponseType, such as CSD or card status
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_INVALID_PARAMETER
 | 
						|
    EFI_OUT_OF_RESOURCES
 | 
						|
    EFI_TIMEOUT
 | 
						|
    EFI_DEVICE_ERROR
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SEND_COMMAND) (
 | 
						|
  IN   EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN   UINT16                     CommandIndex,
 | 
						|
  IN   UINT32                     Argument,
 | 
						|
  IN   TRANSFER_TYPE              DataType,
 | 
						|
  IN   UINT8                      *Buffer, OPTIONAL
 | 
						|
  IN   UINT32                     BufferSize,
 | 
						|
  IN   RESPONSE_TYPE              ResponseType,
 | 
						|
  IN   UINT32                     TimeOut,
 | 
						|
  OUT  UINT32                     *ResponseData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Set max clock frequency of the host, the actual frequency
 | 
						|
    may not be the same as MaxFrequency. It depends on
 | 
						|
    the max frequency the host can support, divider, and host
 | 
						|
    speed mode.
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This           - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    MaxFrequency   - Max frequency in HZ
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_TIMEOUT
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_CLOCK_FREQUENCY) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     MaxFrequency
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Set bus width of the host
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This       - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    BusWidth   - Bus width in 1, 4, 8 bits
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_INVALID_PARAMETER
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_BUS_WIDTH) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     BusWidth
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Set voltage which could supported by the host.
 | 
						|
    Support 0(Power off the host), 1.8V, 3.0V, 3.3V
 | 
						|
  Arguments:
 | 
						|
    This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    Voltage   - Units in 0.1 V
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_INVALID_PARAMETER
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_VOLTAGE) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     Voltage
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Set Host High Speed
 | 
						|
  Arguments:
 | 
						|
    This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    HighSpeed   - True for High Speed Mode set, false for normal mode
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_INVALID_PARAMETER
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_SPEED_MODE) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     HighSpeed
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Set High Speed Mode
 | 
						|
  Arguments:
 | 
						|
    This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    SetHostDdrMode   - True for DDR Mode set, false for normal mode
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_INVALID_PARAMETER
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     DdrMode
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
   Reset the host
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    ResetAll  - TRUE to reset all
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_TIMEOUT
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_RESET_SD_HOST) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  RESET_TYPE                 ResetType
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
   Reset the host
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This    - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    Enable  - TRUE to enable, FALSE to disable
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_TIMEOUT
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_ENABLE_AUTO_STOP_CMD) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  BOOLEAN                    Enable
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
    Find whether these is a card inserted into the slot. If so
 | 
						|
    init the host. If not, return EFI_NOT_FOUND.
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_NOT_FOUND
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_DETECT_CARD_AND_INIT_HOST) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This
 | 
						|
  );
 | 
						|
 | 
						|
/*++
 | 
						|
 | 
						|
  Routine Description:
 | 
						|
   Set the Block length
 | 
						|
 | 
						|
  Arguments:
 | 
						|
    This        - Pointer to EFI_SD_HOST_IO_PROTOCOL
 | 
						|
    BlockLength - card supportes block length
 | 
						|
 | 
						|
  Returns:
 | 
						|
    EFI_SUCCESS
 | 
						|
    EFI_TIMEOUT
 | 
						|
 | 
						|
--*/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_BLOCK_LENGTH) (
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This,
 | 
						|
  IN  UINT32                     BlockLength
 | 
						|
  );
 | 
						|
 | 
						|
typedef EFI_STATUS
 | 
						|
(EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SETUP_DEVICE)(
 | 
						|
  IN  EFI_SD_HOST_IO_PROTOCOL    *This
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Interface structure for the EFI SD Host I/O Protocol
 | 
						|
//
 | 
						|
struct _EFI_SD_HOST_IO_PROTOCOL {
 | 
						|
  UINT32                                             Revision;
 | 
						|
  HOST_CAPABILITY                                    HostCapability;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SEND_COMMAND               SendCommand;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_CLOCK_FREQUENCY        SetClockFrequency;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_BUS_WIDTH              SetBusWidth;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_HOST_VOLTAGE           SetHostVoltage;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE          SetHostDdrMode;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_RESET_SD_HOST              ResetSdHost;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_ENABLE_AUTO_STOP_CMD       EnableAutoStopCmd;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_DETECT_CARD_AND_INIT_HOST  DetectCardAndInitHost;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_BLOCK_LENGTH           SetBlockLength;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SETUP_DEVICE               SetupDevice;
 | 
						|
  EFI_SD_HOST_IO_PROTOCOL_SET_HOST_SPEED_MODE        SetHostSpeedMode;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiSdHostIoProtocolGuid;
 | 
						|
 | 
						|
#endif
 | 
						|
 |