Home | History | Annotate | Download | only in Ppi
      1 /**
      2 **/
      3 /**
      4 
      5 Copyright (c) 2012  - 2014, Intel Corporation. All rights reserved
      6 
      7   This program and the accompanying materials are licensed and made available under
      8   the terms and conditions of the BSD License that accompanies this distribution.
      9   The full text of the license may be found at
     10   http://opensource.org/licenses/bsd-license.php.
     11 
     12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 
     16 
     17   @file
     18   Spi.h
     19 
     20   @brief
     21   This file defines the EFI SPI PPI which implements the
     22   Intel(R) PCH SPI Host Controller Compatibility Interface.
     23 
     24 **/
     25 #ifndef _PEI_SDHC_H_
     26 #define _PEI_SDHC_H_
     27 
     28 
     29 
     30 //
     31 #define PEI_SDHC_PPI_GUID \
     32   {  \
     33     0xf4ef9d7a, 0x98c5, 0x4c1a, 0xb4, 0xd9, 0xd8, 0xd8, 0x72, 0x65, 0xbe, 0xc \
     34   }
     35 typedef struct _PEI_SD_CONTROLLER_PPI PEI_SD_CONTROLLER_PPI;
     36 
     37 #define EFI_SD_HOST_IO_PROTOCOL_REVISION_01          0x01
     38 
     39 typedef enum {
     40   ResponseNo = 0,
     41   ResponseR1,
     42   ResponseR1b,
     43   ResponseR2,
     44   ResponseR3,
     45   ResponseR4,
     46   ResponseR5,
     47   ResponseR5b,
     48   ResponseR6,
     49   ResponseR7
     50 } RESPONSE_TYPE;
     51 
     52 typedef enum {
     53   NoData = 0,
     54   InData,
     55   OutData
     56 } TRANSFER_TYPE;
     57 
     58 typedef enum {
     59   Reset_Auto = 0,
     60   Reset_DAT,
     61   Reset_CMD,
     62   Reset_DAT_CMD,
     63   Reset_All
     64 } RESET_TYPE;
     65 
     66 
     67 
     68 typedef enum {
     69   SDMA = 0,
     70   ADMA2,
     71   PIO
     72 } DMA_MOD;
     73 
     74 typedef struct {
     75   UINT32  HighSpeedSupport:    1;  //High speed supported
     76   UINT32  V18Support:          1;  //1.8V supported
     77   UINT32  V30Support:          1;  //3.0V supported
     78   UINT32  V33Support:          1;  //3.3V supported
     79   UINT32  Reserved0:           4;
     80   UINT32  BusWidth4:           1;  // 4 bit width
     81   UINT32  BusWidth8:           1;  // 8 bit width
     82   UINT32  Reserved1:           6;
     83   UINT32  SDMASupport:         1;
     84   UINT32  ADMA2Support:        1;
     85   UINT32  DmaMode:             2;
     86   UINT32  Reserved2:           12;
     87   UINT32  BoundarySize;
     88 }HOST_CAPABILITY;
     89 
     90 
     91 #define PCI_SUBCLASS_SD_HOST_CONTROLLER   0x05
     92 #define PCI_IF_STANDARD_HOST_NO_DMA       0x00
     93 #define PCI_IF_STANDARD_HOST_SUPPORT_DMA  0x01
     94 
     95 //
     96 //MMIO Registers definition for MMC/SDIO controller
     97 //
     98 #define  MMIO_DMAADR                     0x00
     99 #define  MMIO_BLKSZ                      0x04
    100 #define  MMIO_BLKCNT                     0x06
    101 #define  MMIO_CMDARG                     0x08
    102 #define  MMIO_XFRMODE                    0x0C
    103 #define  MMIO_SDCMD                      0x0E
    104 #define  MMIO_RESP                       0x10
    105 #define  MMIO_BUFDATA                    0x20
    106 #define  MMIO_PSTATE                     0x24
    107 #define  MMIO_HOSTCTL                    0x28
    108 #define  MMIO_PWRCTL                     0x29
    109 #define  MMIO_BLKGAPCTL                  0x2A
    110 #define  MMIO_WAKECTL                    0x2B
    111 #define  MMIO_CLKCTL                     0x2C
    112 #define  MMIO_TOCTL                      0x2E
    113 #define  MMIO_SWRST                      0x2F
    114 #define  MMIO_NINTSTS                    0x30
    115 #define  MMIO_ERINTSTS                   0x32
    116 #define  MMIO_NINTEN                     0x34
    117 #define  MMIO_ERINTEN                    0x36
    118 #define  MMIO_NINTSIGEN                  0x38
    119 #define  MMIO_ERINTSIGEN                 0x3A
    120 #define  MMIO_AC12ERRSTS                 0x3C
    121 #define  MMIO_HOST_CTL2                  0x3E //hphang <- New in VLV2
    122 #define  MMIO_CAP                        0x40
    123 #define  MMIO_CAP2                       0x44 //hphang <- New in VLV2
    124 #define  MMIO_MCCAP                      0x48
    125 #define  MMIO_FORCEEVENTCMD12ERRSTAT     0x50 //hphang <- New in VLV2
    126 #define  MMIO_FORCEEVENTERRINTSTAT       0x52 //hphang <- New in VLV2
    127 #define  MMIO_ADMAERRSTAT                0x54 //hphang <- New in VLV2
    128 #define  MMIO_ADMASYSADDR                0x58 //hphang <- New in VLV2
    129 #define  MMIO_PRESETVALUE0               0x60 //hphang <- New in VLV2
    130 #define  MMIO_PRESETVALUE1               0x64 //hphang <- New in VLV2
    131 #define  MMIO_PRESETVALUE2               0x68 //hphang <- New in VLV2
    132 #define  MMIO_PRESETVALUE3               0x6C //hphang <- New in VLV2
    133 #define  MMIO_BOOTTIMEOUTCTRL            0x70 //hphang <- New in VLV2
    134 #define  MMIO_DEBUGSEL                   0x74 //hphang <- New in VLV2
    135 #define  MMIO_SHAREDBUS                  0xE0 //hphang <- New in VLV2
    136 #define  MMIO_SPIINTSUP                  0xF0 //hphang <- New in VLV2
    137 #define  MMIO_SLTINTSTS                  0xFC
    138 #define  MMIO_CTRLRVER                   0xFE
    139 #define  MMIO_SRST                       0x1FC
    140 
    141 typedef
    142 EFI_STATUS
    143 (EFIAPI *EFI_SD_CONTROLLER_PPI_SEND_COMMAND) (
    144   IN  PEI_SD_CONTROLLER_PPI       *This,
    145   IN   UINT16                     CommandIndex,
    146   IN   UINT32                     Argument,
    147   IN   TRANSFER_TYPE              DataType,
    148   IN   UINT8                      *Buffer, OPTIONAL
    149   IN   UINT32                     BufferSize,
    150   IN   RESPONSE_TYPE              ResponseType,
    151   IN   UINT32                     TimeOut,
    152   OUT  UINT32                     *ResponseData OPTIONAL
    153   );
    154 
    155 /*++
    156 
    157   Routine Description:
    158     Set max clock frequency of the host, the actual frequency
    159     may not be the same as MaxFrequency. It depends on
    160     the max frequency the host can support, divider, and host
    161     speed mode.
    162 
    163   Arguments:
    164     This           - Pointer to EFI_SD_HOST_IO_PROTOCOL
    165     MaxFrequency   - Max frequency in HZ
    166 
    167   Returns:
    168     EFI_SUCCESS
    169     EFI_TIMEOUT
    170 --*/
    171 typedef
    172 EFI_STATUS
    173 (EFIAPI *EFI_SD_CONTROLLER_PPI_SET_CLOCK_FREQUENCY) (
    174   IN  PEI_SD_CONTROLLER_PPI      *This,
    175   IN  UINT32                     MaxFrequency
    176   );
    177 
    178 /*++
    179 
    180   Routine Description:
    181     Set bus width of the host
    182 
    183   Arguments:
    184     This       - Pointer to EFI_SD_HOST_IO_PROTOCOL
    185     BusWidth   - Bus width in 1, 4, 8 bits
    186 
    187   Returns:
    188     EFI_SUCCESS
    189     EFI_INVALID_PARAMETER
    190 
    191 --*/
    192 typedef
    193 EFI_STATUS
    194 (EFIAPI *EFI_SD_CONTROLLER_PPI_SET_BUS_WIDTH) (
    195   IN  PEI_SD_CONTROLLER_PPI      *This,
    196   IN  UINT32                     BusWidth
    197   );
    198 
    199 /*++
    200 
    201   Routine Description:
    202     Set Host mode in DDR
    203   Arguments:
    204     This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
    205     SetHostDdrMode   - True for DDR Mode set, false for normal mode
    206 
    207   Returns:
    208     EFI_SUCCESS
    209     EFI_INVALID_PARAMETER
    210 
    211 --*/
    212 typedef
    213 EFI_STATUS
    214 (EFIAPI *EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE) (
    215   IN  PEI_SD_CONTROLLER_PPI    *This,
    216   IN  UINT32                     DdrMode
    217   );
    218 
    219 /*++
    220 
    221   Routine Description:
    222     Set voltage which could supported by the host.
    223     Support 0(Power off the host), 1.8V, 3.0V, 3.3V
    224   Arguments:
    225     This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
    226     Voltage   - Units in 0.1 V
    227 
    228   Returns:
    229     EFI_SUCCESS
    230     EFI_INVALID_PARAMETER
    231 
    232 --*/
    233 typedef
    234 EFI_STATUS
    235 (EFIAPI *EFI_SD_CONTROLLER_PPI_SET_HOST_VOLTAGE) (
    236   IN  PEI_SD_CONTROLLER_PPI      *This,
    237   IN  UINT32                     Voltage
    238   );
    239 
    240 /*++
    241 
    242   Routine Description:
    243    Reset the host
    244 
    245   Arguments:
    246     This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
    247     ResetAll  - TRUE to reset all
    248 
    249   Returns:
    250     EFI_SUCCESS
    251     EFI_TIMEOUT
    252 
    253 --*/
    254 typedef
    255 EFI_STATUS
    256 (EFIAPI *EFI_SD_CONTROLLER_PPI_RESET_SD_HOST) (
    257   IN  PEI_SD_CONTROLLER_PPI      *This,
    258   IN  RESET_TYPE                 ResetType
    259   );
    260 
    261 /*++
    262 
    263   Routine Description:
    264    Reset the host
    265 
    266   Arguments:
    267     This    - Pointer to EFI_SD_HOST_IO_PROTOCOL
    268     Enable  - TRUE to enable, FALSE to disable
    269 
    270   Returns:
    271     EFI_SUCCESS
    272     EFI_TIMEOUT
    273 
    274 --*/
    275 typedef
    276 EFI_STATUS
    277 (EFIAPI *EFI_SD_CONTROLLER_PPI_ENABLE_AUTO_STOP_CMD) (
    278   IN  PEI_SD_CONTROLLER_PPI      *This,
    279   IN  BOOLEAN                    Enable
    280   );
    281 
    282 /*++
    283 
    284   Routine Description:
    285     Find whether these is a card inserted into the slot. If so
    286     init the host. If not, return EFI_NOT_FOUND.
    287 
    288   Arguments:
    289     This      - Pointer to EFI_SD_HOST_IO_PROTOCOL
    290 
    291   Returns:
    292     EFI_SUCCESS
    293     EFI_NOT_FOUND
    294 
    295 --*/
    296 typedef
    297 EFI_STATUS
    298 (EFIAPI *EFI_SD_CONTROLLER_PPI_DETECT_CARD_AND_INIT_HOST) (
    299   IN  PEI_SD_CONTROLLER_PPI      *This
    300   );
    301 
    302 /*++
    303 
    304   Routine Description:
    305    Set the Block length
    306 
    307   Arguments:
    308     This        - Pointer to EFI_SD_HOST_IO_PROTOCOL
    309     BlockLength - card supportes block length
    310 
    311   Returns:
    312     EFI_SUCCESS
    313     EFI_TIMEOUT
    314 
    315 --*/
    316 typedef
    317 EFI_STATUS
    318 (EFIAPI *EFI_SD_CONTROLLER_PPI_SET_BLOCK_LENGTH) (
    319   IN  PEI_SD_CONTROLLER_PPI      *This,
    320   IN  UINT32                     BlockLength
    321   );
    322 
    323 /*++
    324 
    325   Routine Description:
    326    Set the Block length
    327 
    328   Arguments:
    329     This        - Pointer to EFI_SD_HOST_IO_PROTOCOL
    330     BlockLength - card supportes block length
    331 
    332   Returns:
    333     EFI_SUCCESS
    334     EFI_TIMEOUT
    335 
    336 --*/
    337 
    338 typedef EFI_STATUS
    339 (EFIAPI *EFI_SD_CONTROLLER_PPI_SETUP_DEVICE)(
    340   IN  PEI_SD_CONTROLLER_PPI    *This
    341   );
    342 
    343 //
    344 // Interface structure for the EFI SD Host I/O Protocol
    345 //
    346 struct _PEI_SD_CONTROLLER_PPI {
    347   UINT32                                           Revision;
    348   HOST_CAPABILITY                                  HostCapability;
    349   EFI_SD_CONTROLLER_PPI_SEND_COMMAND               SendCommand;
    350   EFI_SD_CONTROLLER_PPI_SET_CLOCK_FREQUENCY        SetClockFrequency;
    351   EFI_SD_CONTROLLER_PPI_SET_BUS_WIDTH              SetBusWidth;
    352   EFI_SD_CONTROLLER_PPI_SET_HOST_VOLTAGE           SetHostVoltage;
    353   EFI_SD_HOST_IO_PROTOCOL_SET_HOST_DDR_MODE        SetHostDdrMode;
    354   EFI_SD_CONTROLLER_PPI_RESET_SD_HOST              ResetSdHost;
    355   EFI_SD_CONTROLLER_PPI_ENABLE_AUTO_STOP_CMD       EnableAutoStopCmd;
    356   EFI_SD_CONTROLLER_PPI_DETECT_CARD_AND_INIT_HOST  DetectCardAndInitHost;
    357   EFI_SD_CONTROLLER_PPI_SET_BLOCK_LENGTH           SetBlockLength;
    358   EFI_SD_CONTROLLER_PPI_SETUP_DEVICE               SetupDevice;
    359 };
    360 // Extern the GUID for PPI users.
    361 //
    362 extern EFI_GUID           gPeiSdhcPpiGuid;
    363 
    364 
    365 #endif
    366