TianoCore EDK2 master
Loading...
Searching...
No Matches
SdMmcPciHci.h
Go to the documentation of this file.
1
14#ifndef _SD_MMC_PCI_HCI_H_
15#define _SD_MMC_PCI_HCI_H_
16
17//
18// SD Host Controller SlotInfo Register Offset
19//
20#define SD_MMC_HC_SLOT_OFFSET 0x40
21
22#define SD_MMC_HC_MAX_SLOT 6
23
24//
25// SD Host Controller MMIO Register Offset
26//
27#define SD_MMC_HC_SDMA_ADDR 0x00
28#define SD_MMC_HC_ARG2 0x00
29#define SD_MMC_HC_BLK_SIZE 0x04
30#define SD_MMC_HC_BLK_COUNT 0x06
31#define SD_MMC_HC_ARG1 0x08
32#define SD_MMC_HC_TRANS_MOD 0x0C
33#define SD_MMC_HC_COMMAND 0x0E
34#define SD_MMC_HC_RESPONSE 0x10
35#define SD_MMC_HC_BUF_DAT_PORT 0x20
36#define SD_MMC_HC_PRESENT_STATE 0x24
37#define SD_MMC_HC_HOST_CTRL1 0x28
38#define SD_MMC_HC_POWER_CTRL 0x29
39#define SD_MMC_HC_BLK_GAP_CTRL 0x2A
40#define SD_MMC_HC_WAKEUP_CTRL 0x2B
41#define SD_MMC_HC_CLOCK_CTRL 0x2C
42#define SD_MMC_HC_TIMEOUT_CTRL 0x2E
43#define SD_MMC_HC_SW_RST 0x2F
44#define SD_MMC_HC_NOR_INT_STS 0x30
45#define SD_MMC_HC_ERR_INT_STS 0x32
46#define SD_MMC_HC_NOR_INT_STS_EN 0x34
47#define SD_MMC_HC_ERR_INT_STS_EN 0x36
48#define SD_MMC_HC_NOR_INT_SIG_EN 0x38
49#define SD_MMC_HC_ERR_INT_SIG_EN 0x3A
50#define SD_MMC_HC_AUTO_CMD_ERR_STS 0x3C
51#define SD_MMC_HC_HOST_CTRL2 0x3E
52#define SD_MMC_HC_CAP 0x40
53#define SD_MMC_HC_MAX_CURRENT_CAP 0x48
54#define SD_MMC_HC_FORCE_EVT_AUTO_CMD 0x50
55#define SD_MMC_HC_FORCE_EVT_ERR_INT 0x52
56#define SD_MMC_HC_ADMA_ERR_STS 0x54
57#define SD_MMC_HC_ADMA_SYS_ADDR 0x58
58#define SD_MMC_HC_PRESET_VAL 0x60
59#define SD_MMC_HC_SHARED_BUS_CTRL 0xE0
60#define SD_MMC_HC_SLOT_INT_STS 0xFC
61#define SD_MMC_HC_CTRL_VER 0xFE
62
63//
64// SD Host Controller bits to HOST_CTRL2 register
65//
66#define SD_MMC_HC_CTRL_UHS_MASK 0x0007
67#define SD_MMC_HC_CTRL_UHS_SDR12 0x0000
68#define SD_MMC_HC_CTRL_UHS_SDR25 0x0001
69#define SD_MMC_HC_CTRL_UHS_SDR50 0x0002
70#define SD_MMC_HC_CTRL_UHS_SDR104 0x0003
71#define SD_MMC_HC_CTRL_UHS_DDR50 0x0004
72#define SD_MMC_HC_CTRL_MMC_LEGACY 0x0000
73#define SD_MMC_HC_CTRL_MMC_HS_SDR 0x0001
74#define SD_MMC_HC_CTRL_MMC_HS_DDR 0x0004
75#define SD_MMC_HC_CTRL_MMC_HS200 0x0003
76#define SD_MMC_HC_CTRL_MMC_HS400 0x0005
77
78#define SD_MMC_HC_CTRL_DRIVER_STRENGTH_MASK 0x0030
79
80//
81// The transfer modes supported by SD Host Controller
82//
83typedef enum {
84 SdMmcNoData,
85 SdMmcPioMode,
86 SdMmcSdmaMode,
87 SdMmcAdma32bMode,
88 SdMmcAdma64bV3Mode,
89 SdMmcAdma64bV4Mode
90} SD_MMC_HC_TRANSFER_MODE;
91
92//
93// The ADMA transfer lengths supported by SD Host Controller
94//
95typedef enum {
96 SdMmcAdmaLen16b,
97 SdMmcAdmaLen26b
98} SD_MMC_HC_ADMA_LENGTH_MODE;
99
100//
101// The maximum data length of each descriptor line
102//
103#define ADMA_MAX_DATA_PER_LINE_16B SIZE_64KB
104#define ADMA_MAX_DATA_PER_LINE_26B SIZE_64MB
105
106//
107// ADMA descriptor for 32b addressing.
108//
109typedef struct {
110 UINT32 Valid : 1;
111 UINT32 End : 1;
112 UINT32 Int : 1;
113 UINT32 Reserved : 1;
114 UINT32 Act : 2;
115 UINT32 UpperLength : 10;
116 UINT32 LowerLength : 16;
117 UINT32 Address;
119
120//
121// ADMA descriptor for 64b addressing.
122//
123typedef struct {
124 UINT32 Valid : 1;
125 UINT32 End : 1;
126 UINT32 Int : 1;
127 UINT32 Reserved : 1;
128 UINT32 Act : 2;
129 UINT32 UpperLength : 10;
130 UINT32 LowerLength : 16;
131 UINT32 LowerAddress;
132 UINT32 UpperAddress;
134
135typedef struct {
136 UINT32 Valid : 1;
137 UINT32 End : 1;
138 UINT32 Int : 1;
139 UINT32 Reserved : 1;
140 UINT32 Act : 2;
141 UINT32 UpperLength : 10;
142 UINT32 LowerLength : 16;
143 UINT32 LowerAddress;
144 UINT32 UpperAddress;
145 UINT32 Reserved1;
147
148#define SD_MMC_SDMA_BOUNDARY 512 * 1024
149#define SD_MMC_SDMA_ROUND_UP(x, n) (((x) + n) & ~(n - 1))
150
151typedef struct {
152 UINT8 FirstBar : 3; // bit 0:2
153 UINT8 Reserved : 1; // bit 3
154 UINT8 SlotNum : 3; // bit 4:6
155 UINT8 Reserved1 : 1; // bit 7
157
158typedef struct {
159 UINT32 TimeoutFreq : 6; // bit 0:5
160 UINT32 Reserved : 1; // bit 6
161 UINT32 TimeoutUnit : 1; // bit 7
162 UINT32 BaseClkFreq : 8; // bit 8:15
163 UINT32 MaxBlkLen : 2; // bit 16:17
164 UINT32 BusWidth8 : 1; // bit 18
165 UINT32 Adma2 : 1; // bit 19
166 UINT32 Reserved2 : 1; // bit 20
167 UINT32 HighSpeed : 1; // bit 21
168 UINT32 Sdma : 1; // bit 22
169 UINT32 SuspRes : 1; // bit 23
170 UINT32 Voltage33 : 1; // bit 24
171 UINT32 Voltage30 : 1; // bit 25
172 UINT32 Voltage18 : 1; // bit 26
173 UINT32 SysBus64V4 : 1; // bit 27
174 UINT32 SysBus64V3 : 1; // bit 28
175 UINT32 AsyncInt : 1; // bit 29
176 UINT32 SlotType : 2; // bit 30:31
177 UINT32 Sdr50 : 1; // bit 32
178 UINT32 Sdr104 : 1; // bit 33
179 UINT32 Ddr50 : 1; // bit 34
180 UINT32 UhsII : 1; // bit 35
181 UINT32 DriverTypeA : 1; // bit 36
182 UINT32 DriverTypeC : 1; // bit 37
183 UINT32 DriverTypeD : 1; // bit 38
184 UINT32 DriverType4 : 1; // bit 39
185 UINT32 TimerCount : 4; // bit 40:43
186 UINT32 Reserved4 : 1; // bit 44
187 UINT32 TuningSDR50 : 1; // bit 45
188 UINT32 RetuningMod : 2; // bit 46:47
189 UINT32 ClkMultiplier : 8; // bit 48:55
190 UINT32 Reserved5 : 3; // bit 56:58
191 UINT32 Adma3 : 1; // bit 59
192 UINT32 Vdd2Voltage18 : 1; // bit 60
193 UINT32 Reserved6 : 2; // bit 61:62
194 UINT32 Hs400 : 1; // bit 63
196
197//
198// SD Host controller version
199//
200#define SD_MMC_HC_CTRL_VER_100 0x00
201#define SD_MMC_HC_CTRL_VER_200 0x01
202#define SD_MMC_HC_CTRL_VER_300 0x02
203#define SD_MMC_HC_CTRL_VER_400 0x03
204#define SD_MMC_HC_CTRL_VER_410 0x04
205#define SD_MMC_HC_CTRL_VER_420 0x05
206
207//
208// SD Host controller V4 enhancements
209//
210#define SD_MMC_HC_V4_EN BIT12
211#define SD_MMC_HC_64_ADDR_EN BIT13
212#define SD_MMC_HC_26_DATA_LEN_ADMA_EN BIT10
213
221VOID
223 IN UINT8 Slot,
224 IN SD_MMC_HC_SLOT_CAP *Capability
225 );
226
239EFIAPI
241 IN EFI_PCI_IO_PROTOCOL *PciIo,
242 OUT UINT8 *FirstBar,
243 OUT UINT8 *SlotNum
244 );
245
270EFIAPI
272 IN EFI_PCI_IO_PROTOCOL *PciIo,
273 IN UINT8 BarIndex,
274 IN UINT32 Offset,
275 IN BOOLEAN Read,
276 IN UINT8 Count,
277 IN OUT VOID *Data
278 );
279
302EFIAPI
304 IN EFI_PCI_IO_PROTOCOL *PciIo,
305 IN UINT8 BarIndex,
306 IN UINT32 Offset,
307 IN UINT8 Count,
308 IN VOID *OrData
309 );
310
333EFIAPI
335 IN EFI_PCI_IO_PROTOCOL *PciIo,
336 IN UINT8 BarIndex,
337 IN UINT32 Offset,
338 IN UINT8 Count,
339 IN VOID *AndData
340 );
341
365EFIAPI
367 IN EFI_PCI_IO_PROTOCOL *PciIo,
368 IN UINT8 BarIndex,
369 IN UINT32 Offset,
370 IN UINT8 Count,
371 IN UINT64 MaskValue,
372 IN UINT64 TestValue,
373 IN UINT64 Timeout
374 );
375
389 IN EFI_PCI_IO_PROTOCOL *PciIo,
390 IN UINT8 Slot,
391 OUT UINT16 *Version
392 );
393
407 IN EFI_PCI_IO_PROTOCOL *PciIo,
408 IN UINT8 Slot
409 );
410
424 IN EFI_PCI_IO_PROTOCOL *PciIo,
425 IN UINT8 Slot,
426 OUT SD_MMC_HC_SLOT_CAP *Capability
427 );
428
442 IN EFI_PCI_IO_PROTOCOL *PciIo,
443 IN UINT8 Slot,
444 OUT UINT64 *MaxCurrent
445 );
446
464 IN EFI_PCI_IO_PROTOCOL *PciIo,
465 IN UINT8 Slot,
466 OUT BOOLEAN *MediaPresent
467 );
468
483 IN EFI_PCI_IO_PROTOCOL *PciIo,
484 IN UINT8 Slot
485 );
486
498 IN EFI_PCI_IO_PROTOCOL *PciIo,
499 IN UINT8 Slot
500 );
501
517 IN EFI_PCI_IO_PROTOCOL *PciIo,
518 IN UINT8 Slot,
519 IN UINT8 PowerCtrl
520 );
521
537 IN EFI_PCI_IO_PROTOCOL *PciIo,
538 IN UINT8 Slot,
539 IN UINT16 BusWidth
540 );
541
557 IN EFI_PCI_IO_PROTOCOL *PciIo,
558 IN UINT8 Slot,
559 IN SD_MMC_HC_SLOT_CAP Capability
560 );
561
576 IN EFI_PCI_IO_PROTOCOL *PciIo,
577 IN UINT8 Slot
578 );
579
593 IN EFI_HANDLE ControllerHandle,
594 IN EFI_PCI_IO_PROTOCOL *PciIo,
595 IN UINT8 Slot,
596 IN SD_MMC_BUS_MODE Timing
597 );
598
611 IN EFI_PCI_IO_PROTOCOL *PciIo,
612 IN UINT8 SlotIndex,
613 IN SD_DRIVER_STRENGTH_TYPE DriverStrength
614 );
615
616#endif
#define VOID
Definition: Base.h:269
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
EFI_STATUS SdMmcHcInitPowerVoltage(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, IN SD_MMC_HC_SLOT_CAP Capability)
Definition: SdMmcPciHci.c:1131
EFI_STATUS SdMmcHcCardDetect(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, OUT BOOLEAN *MediaPresent)
Definition: SdMmcPciHci.c:682
EFI_STATUS EFIAPI SdMmcHcRwMmio(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 BarIndex, IN UINT32 Offset, IN BOOLEAN Read, IN UINT8 Count, IN OUT VOID *Data)
Definition: SdMmcPciHci.c:147
EFI_STATUS SdMmcHcStartSdClock(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot)
Definition: SdMmcPciHci.c:789
EFI_STATUS SdMmcHcGetMaxCurrent(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, OUT UINT64 *MaxCurrent)
Definition: SdMmcPciHci.c:653
EFI_STATUS SdMmcSetDriverStrength(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 SlotIndex, IN SD_DRIVER_STRENGTH_TYPE DriverStrength)
Definition: SdMmcPciHci.c:1403
EFI_STATUS SdMmcHcUhsSignaling(IN EFI_HANDLE ControllerHandle, IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, IN SD_MMC_BUS_MODE Timing)
Definition: SdMmcPciHci.c:1314
EFI_STATUS EFIAPI SdMmcHcGetSlotInfo(IN EFI_PCI_IO_PROTOCOL *PciIo, OUT UINT8 *FirstBar, OUT UINT8 *SlotNum)
Definition: SdMmcPciHci.c:96
EFI_STATUS EFIAPI SdMmcHcAndMmio(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 BarIndex, IN UINT32 Offset, IN UINT8 Count, IN VOID *AndData)
Definition: SdMmcPciHci.c:287
EFI_STATUS SdMmcHcGetCapability(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, OUT SD_MMC_HC_SLOT_CAP *Capability)
Definition: SdMmcPciHci.c:622
EFI_STATUS SdMmcHcInitTimeoutCtrl(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot)
Definition: SdMmcPciHci.c:1191
EFI_STATUS SdMmcHcStopClock(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot)
Definition: SdMmcPciHci.c:743
EFI_STATUS SdMmcHcPowerControl(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, IN UINT8 PowerCtrl)
Definition: SdMmcPciHci.c:975
EFI_STATUS SdMmcHcGetControllerVersion(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, OUT UINT16 *Version)
Definition: SdMmcPciHci.c:452
EFI_STATUS EFIAPI SdMmcHcWaitMmioSet(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 BarIndex, IN UINT32 Offset, IN UINT8 Count, IN UINT64 MaskValue, IN UINT64 TestValue, IN UINT64 Timeout)
Definition: SdMmcPciHci.c:397
VOID DumpCapabilityReg(IN UINT8 Slot, IN SD_MMC_HC_SLOT_CAP *Capability)
Definition: SdMmcPciHci.c:26
EFI_STATUS SdMmcHcSetBusWidth(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot, IN UINT16 BusWidth)
Definition: SdMmcPciHci.c:1015
EFI_STATUS SdMmcHcEnableInterrupt(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 Slot)
Definition: SdMmcPciHci.c:584
EFI_STATUS EFIAPI SdMmcHcOrMmio(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINT8 BarIndex, IN UINT32 Offset, IN UINT8 Count, IN VOID *OrData)
Definition: SdMmcPciHci.c:229
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
VOID * EFI_HANDLE
Definition: UefiBaseType.h:33