]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.h
1. Remove “Force clear PK” feature in AuthVarialbe driver.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / XhciDxe / XhciReg.h
1 /** @file
2
3 This file contains the register definition of XHCI host controller.
4
5 Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef _EFI_XHCI_REG_H_
17 #define _EFI_XHCI_REG_H_
18
19 #define PCI_IF_XHCI 0x30
20
21 //
22 // PCI Configuration Registers
23 //
24 #define XHC_BAR_INDEX 0x00
25
26 #define XHC_PCI_BAR_OFFSET 0x10 // Memory Bar Register Offset
27 #define XHC_PCI_BAR_MASK 0xFFFF // Memory Base Address Mask
28
29 #define USB_HUB_CLASS_CODE 0x09
30 #define USB_HUB_SUBCLASS_CODE 0x00
31
32 //============================================//
33 // XHCI register offset //
34 //============================================//
35
36 //
37 // Capability registers offset
38 //
39 #define XHC_CAPLENGTH_OFFSET 0x00 // Capability register length offset
40 #define XHC_HCIVERSION_OFFSET 0x02 // Interface Version Number 02-03h
41 #define XHC_HCSPARAMS1_OFFSET 0x04 // Structural Parameters 1
42 #define XHC_HCSPARAMS2_OFFSET 0x08 // Structural Parameters 2
43 #define XHC_HCSPARAMS3_OFFSET 0x0c // Structural Parameters 3
44 #define XHC_HCCPARAMS_OFFSET 0x10 // Capability Parameters
45 #define XHC_DBOFF_OFFSET 0x14 // Doorbell Offset
46 #define XHC_RTSOFF_OFFSET 0x18 // Runtime Register Space Offset
47
48 //
49 // Operational registers offset
50 //
51 #define XHC_USBCMD_OFFSET 0x0000 // USB Command Register Offset
52 #define XHC_USBSTS_OFFSET 0x0004 // USB Status Register Offset
53 #define XHC_PAGESIZE_OFFSET 0x0008 // USB Page Size Register Offset
54 #define XHC_DNCTRL_OFFSET 0x0014 // Device Notification Control Register Offset
55 #define XHC_CRCR_OFFSET 0x0018 // Command Ring Control Register Offset
56 #define XHC_DCBAAP_OFFSET 0x0030 // Device Context Base Address Array Pointer Register Offset
57 #define XHC_CONFIG_OFFSET 0x0038 // Configure Register Offset
58 #define XHC_PORTSC_OFFSET 0x0400 // Port Status and Control Register Offset
59
60 //
61 // Runtime registers offset
62 //
63 #define XHC_MFINDEX_OFFSET 0x00 // Microframe Index Register Offset
64 #define XHC_IMAN_OFFSET 0x20 // Interrupter X Management Register Offset
65 #define XHC_IMOD_OFFSET 0x24 // Interrupter X Moderation Register Offset
66 #define XHC_ERSTSZ_OFFSET 0x28 // Event Ring Segment Table Size Register Offset
67 #define XHC_ERSTBA_OFFSET 0x30 // Event Ring Segment Table Base Address Register Offset
68 #define XHC_ERDP_OFFSET 0x38 // Event Ring Dequeue Pointer Register Offset
69
70 #define USBLEGSP_BIOS_SEMAPHORE BIT16 // HC BIOS Owned Semaphore
71 #define USBLEGSP_OS_SEMAPHORE BIT24 // HC OS Owned Semaphore
72
73 #pragma pack (1)
74 typedef struct {
75 UINT8 MaxSlots; // Number of Device Slots
76 UINT16 MaxIntrs:11; // Number of Interrupters
77 UINT16 Rsvd:5;
78 UINT8 MaxPorts; // Number of Ports
79 } HCSPARAMS1;
80
81 //
82 // Structural Parameters 1 Register Bitmap Definition
83 //
84 typedef union {
85 UINT32 Dword;
86 HCSPARAMS1 Data;
87 } XHC_HCSPARAMS1;
88
89 typedef struct {
90 UINT32 Ist:4; // Isochronous Scheduling Threshold
91 UINT32 Erst:4; // Event Ring Segment Table Max
92 UINT32 Rsvd:13;
93 UINT32 ScratchBufHi:5; // Max Scratchpad Buffers Hi
94 UINT32 Spr:1; // Scratchpad Restore
95 UINT32 ScratchBufLo:5; // Max Scratchpad Buffers Lo
96 } HCSPARAMS2;
97
98 //
99 // Structural Parameters 2 Register Bitmap Definition
100 //
101 typedef union {
102 UINT32 Dword;
103 HCSPARAMS2 Data;
104 } XHC_HCSPARAMS2;
105
106 typedef struct {
107 UINT16 Ac64:1; // 64-bit Addressing Capability
108 UINT16 Bnc:1; // BW Negotiation Capability
109 UINT16 Csz:1; // Context Size
110 UINT16 Ppc:1; // Port Power Control
111 UINT16 Pind:1; // Port Indicators
112 UINT16 Lhrc:1; // Light HC Reset Capability
113 UINT16 Ltc:1; // Latency Tolerance Messaging Capability
114 UINT16 Nss:1; // No Secondary SID Support
115 UINT16 Pae:1; // Parse All Event Data
116 UINT16 Rsvd:3;
117 UINT16 MaxPsaSize:4; // Maximum Primary Stream Array Size
118 UINT16 ExtCapReg; // xHCI Extended Capabilities Pointer
119 } HCCPARAMS;
120
121 //
122 // Capability Parameters Register Bitmap Definition
123 //
124 typedef union {
125 UINT32 Dword;
126 HCCPARAMS Data;
127 } XHC_HCCPARAMS;
128
129 #pragma pack ()
130
131 //
132 // Register Bit Definition
133 //
134 #define XHC_USBCMD_RUN BIT0 // Run/Stop
135 #define XHC_USBCMD_RESET BIT1 // Host Controller Reset
136 #define XHC_USBCMD_INTE BIT2 // Interrupter Enable
137 #define XHC_USBCMD_HSEE BIT3 // Host System Error Enable
138
139 #define XHC_USBSTS_HALT BIT0 // Host Controller Halted
140 #define XHC_USBSTS_HSE BIT2 // Host System Error
141 #define XHC_USBSTS_EINT BIT3 // Event Interrupt
142 #define XHC_USBSTS_PCD BIT4 // Port Change Detect
143 #define XHC_USBSTS_SSS BIT8 // Save State Status
144 #define XHC_USBSTS_RSS BIT9 // Restore State Status
145 #define XHC_USBSTS_SRE BIT10 // Save/Restore Error
146 #define XHC_USBSTS_CNR BIT11 // Host Controller Not Ready
147 #define XHC_USBSTS_HCE BIT12 // Host Controller Error
148
149 #define XHC_PAGESIZE_MASK 0xFFFF // Page Size
150
151 #define XHC_CRCR_RCS BIT0 // Ring Cycle State
152 #define XHC_CRCR_CS BIT1 // Command Stop
153 #define XHC_CRCR_CA BIT2 // Command Abort
154 #define XHC_CRCR_CRR BIT3 // Command Ring Running
155
156 #define XHC_CONFIG_MASK 0xFF // Command Ring Running
157
158 #define XHC_PORTSC_CCS BIT0 // Current Connect Status
159 #define XHC_PORTSC_PED BIT1 // Port Enabled/Disabled
160 #define XHC_PORTSC_OCA BIT3 // Over-current Active
161 #define XHC_PORTSC_RESET BIT4 // Port Reset
162 #define XHC_PORTSC_PLS (BIT5|BIT6|BIT7|BIT8) // Port Link State
163 #define XHC_PORTSC_PP BIT9 // Port Power
164 #define XHC_PORTSC_PS (BIT10|BIT11|BIT12|BIT13) // Port Speed
165 #define XHC_PORTSC_LWS BIT16 // Port Link State Write Strobe
166 #define XHC_PORTSC_CSC BIT17 // Connect Status Change
167 #define XHC_PORTSC_PEC BIT18 // Port Enabled/Disabled Change
168 #define XHC_PORTSC_WRC BIT19 // Warm Port Reset Change
169 #define XHC_PORTSC_OCC BIT20 // Over-Current Change
170 #define XHC_PORTSC_PRC BIT21 // Port Reset Change
171 #define XHC_PORTSC_PLC BIT22 // Port Link State Change
172 #define XHC_PORTSC_CEC BIT23 // Port Config Error Change
173 #define XHC_PORTSC_CAS BIT24 // Cold Attach Status
174
175 #define XHC_IMAN_IP BIT0 // Interrupt Pending
176 #define XHC_IMAN_IE BIT1 // Interrupt Enable
177
178 #define XHC_IMODI_MASK 0x0000FFFF // Interrupt Moderation Interval
179 #define XHC_IMODC_MASK 0xFFFF0000 // Interrupt Moderation Counter
180
181 //
182 // Structure to map the hardware port states to the
183 // UEFI's port states.
184 //
185 typedef struct {
186 UINT32 HwState;
187 UINT16 UefiState;
188 } USB_PORT_STATE_MAP;
189
190 /**
191 Read 1-byte width XHCI capability register.
192
193 @param Xhc The XHCI Instance.
194 @param Offset The offset of the 1-byte width capability register.
195
196 @return The register content read.
197 @retval If err, return 0xFFFF.
198
199 **/
200 UINT8
201 XhcReadCapReg8 (
202 IN USB_XHCI_INSTANCE *Xhc,
203 IN UINT32 Offset
204 );
205
206 /**
207 Read 4-bytes width XHCI capability register.
208
209 @param Xhc The XHCI Instance.
210 @param Offset The offset of the 4-bytes width capability register.
211
212 @return The register content read.
213 @retval If err, return 0xFFFFFFFF.
214
215 **/
216 UINT32
217 XhcReadCapReg (
218 IN USB_XHCI_INSTANCE *Xhc,
219 IN UINT32 Offset
220 );
221
222 /**
223 Read 4-bytes width XHCI Operational register.
224
225 @param Xhc The XHCI Instance.
226 @param Offset The offset of the 4-bytes width operational register.
227
228 @return The register content read.
229 @retval If err, return 0xFFFFFFFF.
230
231 **/
232 UINT32
233 XhcReadOpReg (
234 IN USB_XHCI_INSTANCE *Xhc,
235 IN UINT32 Offset
236 );
237
238 /**
239 Write the data to the 4-bytes width XHCI operational register.
240
241 @param Xhc The XHCI Instance.
242 @param Offset The offset of the 4-bytes width operational register.
243 @param Data The data to write.
244
245 **/
246 VOID
247 XhcWriteOpReg (
248 IN USB_XHCI_INSTANCE *Xhc,
249 IN UINT32 Offset,
250 IN UINT32 Data
251 );
252
253 /**
254 Write the data to the 2-bytes width XHCI operational register.
255
256 @param Xhc The XHCI Instance.
257 @param Offset The offset of the 2-bytes width operational register.
258 @param Data The data to write.
259
260 **/
261 VOID
262 XhcWriteOpReg16 (
263 IN USB_XHCI_INSTANCE *Xhc,
264 IN UINT32 Offset,
265 IN UINT16 Data
266 );
267
268 /**
269 Read XHCI runtime register.
270
271 @param Xhc The XHCI Instance.
272 @param Offset The offset of the runtime register.
273
274 @return The register content read
275
276 **/
277 UINT32
278 XhcReadRuntimeReg (
279 IN USB_XHCI_INSTANCE *Xhc,
280 IN UINT32 Offset
281 );
282
283 /**
284 Write the data to the XHCI runtime register.
285
286 @param Xhc The XHCI Instance.
287 @param Offset The offset of the runtime register.
288 @param Data The data to write.
289
290 **/
291 VOID
292 XhcWriteRuntimeReg (
293 IN USB_XHCI_INSTANCE *Xhc,
294 IN UINT32 Offset,
295 IN UINT32 Data
296 );
297
298 /**
299 Read XHCI door bell register.
300
301 @param Xhc The XHCI Instance.
302 @param Offset The offset of the door bell register.
303
304 @return The register content read
305
306 **/
307 UINT32
308 XhcReadDoorBellReg (
309 IN USB_XHCI_INSTANCE *Xhc,
310 IN UINT32 Offset
311 );
312
313 /**
314 Write the data to the XHCI door bell register.
315
316 @param Xhc The XHCI Instance.
317 @param Offset The offset of the door bell register.
318 @param Data The data to write.
319
320 **/
321 VOID
322 XhcWriteDoorBellReg (
323 IN USB_XHCI_INSTANCE *Xhc,
324 IN UINT32 Offset,
325 IN UINT32 Data
326 );
327
328 /**
329 Set one bit of the operational register while keeping other bits.
330
331 @param Xhc The XHCI Instance.
332 @param Offset The offset of the operational register.
333 @param Bit The bit mask of the register to set.
334
335 **/
336 VOID
337 XhcSetOpRegBit (
338 IN USB_XHCI_INSTANCE *Xhc,
339 IN UINT32 Offset,
340 IN UINT32 Bit
341 );
342
343 /**
344 Clear one bit of the operational register while keeping other bits.
345
346 @param Xhc The XHCI Instance.
347 @param Offset The offset of the operational register.
348 @param Bit The bit mask of the register to clear.
349
350 **/
351 VOID
352 XhcClearOpRegBit (
353 IN USB_XHCI_INSTANCE *Xhc,
354 IN UINT32 Offset,
355 IN UINT32 Bit
356 );
357
358 /**
359 Wait the operation register's bit as specified by Bit
360 to be set (or clear).
361
362 @param Xhc The XHCI Instance.
363 @param Offset The offset of the operational register.
364 @param Bit The bit of the register to wait for.
365 @param WaitToSet Wait the bit to set or clear.
366 @param Timeout The time to wait before abort (in millisecond, ms).
367
368 @retval EFI_SUCCESS The bit successfully changed by host controller.
369 @retval EFI_TIMEOUT The time out occurred.
370
371 **/
372 EFI_STATUS
373 XhcWaitOpRegBit (
374 IN USB_XHCI_INSTANCE *Xhc,
375 IN UINT32 Offset,
376 IN UINT32 Bit,
377 IN BOOLEAN WaitToSet,
378 IN UINT32 Timeout
379 );
380
381 /**
382 Read XHCI runtime register.
383
384 @param Xhc The XHCI Instance.
385 @param Offset The offset of the runtime register.
386
387 @return The register content read
388
389 **/
390 UINT32
391 XhcReadRuntimeReg (
392 IN USB_XHCI_INSTANCE *Xhc,
393 IN UINT32 Offset
394 );
395
396 /**
397 Write the data to the XHCI runtime register.
398
399 @param Xhc The XHCI Instance.
400 @param Offset The offset of the runtime register.
401 @param Data The data to write.
402
403 **/
404 VOID
405 XhcWriteRuntimeReg (
406 IN USB_XHCI_INSTANCE *Xhc,
407 IN UINT32 Offset,
408 IN UINT32 Data
409 );
410
411 /**
412 Set one bit of the runtime register while keeping other bits.
413
414 @param Xhc The XHCI Instance.
415 @param Offset The offset of the runtime register.
416 @param Bit The bit mask of the register to set.
417
418 **/
419 VOID
420 XhcSetRuntimeRegBit (
421 IN USB_XHCI_INSTANCE *Xhc,
422 IN UINT32 Offset,
423 IN UINT32 Bit
424 );
425
426 /**
427 Clear one bit of the runtime register while keeping other bits.
428
429 @param Xhc The XHCI Instance.
430 @param Offset The offset of the runtime register.
431 @param Bit The bit mask of the register to set.
432
433 **/
434 VOID
435 XhcClearRuntimeRegBit (
436 IN USB_XHCI_INSTANCE *Xhc,
437 IN UINT32 Offset,
438 IN UINT32 Bit
439 );
440
441 /**
442 Whether the XHCI host controller is halted.
443
444 @param Xhc The XHCI Instance.
445
446 @retval TRUE The controller is halted.
447 @retval FALSE It isn't halted.
448
449 **/
450 BOOLEAN
451 XhcIsHalt (
452 IN USB_XHCI_INSTANCE *Xhc
453 );
454
455 /**
456 Whether system error occurred.
457
458 @param Xhc The XHCI Instance.
459
460 @retval TRUE System error happened.
461 @retval FALSE No system error.
462
463 **/
464 BOOLEAN
465 XhcIsSysError (
466 IN USB_XHCI_INSTANCE *Xhc
467 );
468
469 /**
470 Reset the XHCI host controller.
471
472 @param Xhc The XHCI Instance.
473 @param Timeout Time to wait before abort (in millisecond, ms).
474
475 @retval EFI_SUCCESS The XHCI host controller is reset.
476 @return Others Failed to reset the XHCI before Timeout.
477
478 **/
479 EFI_STATUS
480 XhcResetHC (
481 IN USB_XHCI_INSTANCE *Xhc,
482 IN UINT32 Timeout
483 );
484
485 /**
486 Halt the XHCI host controller.
487
488 @param Xhc The XHCI Instance.
489 @param Timeout Time to wait before abort (in millisecond, ms).
490
491 @return EFI_SUCCESS The XHCI host controller is halt.
492 @return EFI_TIMEOUT Failed to halt the XHCI before Timeout.
493
494 **/
495 EFI_STATUS
496 XhcHaltHC (
497 IN USB_XHCI_INSTANCE *Xhc,
498 IN UINT32 Timeout
499 );
500
501 /**
502 Set the XHCI host controller to run.
503
504 @param Xhc The XHCI Instance.
505 @param Timeout Time to wait before abort (in millisecond, ms).
506
507 @return EFI_SUCCESS The XHCI host controller is running.
508 @return EFI_TIMEOUT Failed to set the XHCI to run before Timeout.
509
510 **/
511 EFI_STATUS
512 XhcRunHC (
513 IN USB_XHCI_INSTANCE *Xhc,
514 IN UINT32 Timeout
515 );
516
517 /**
518 Calculate the XHCI legacy support capability register offset.
519
520 @param Xhc The XHCI Instance.
521
522 @return The offset of XHCI legacy support capability register.
523
524 **/
525 UINT32
526 XhcGetLegSupCapAddr (
527 IN USB_XHCI_INSTANCE *Xhc
528 );
529
530 #endif