TianoCore EDK2 master
Loading...
Searching...
No Matches
UsbHcMem.h
Go to the documentation of this file.
1
10#ifndef _EFI_PEI_XHCI_MEM_H_
11#define _EFI_PEI_XHCI_MEM_H_
12
13#include <Uefi.h>
14
15#define USBHC_MEM_DEFAULT_PAGES 16
16
18
19struct _USBHC_MEM_BLOCK {
20 UINT8 *Bits; // Bit array to record which unit is allocated
21 UINTN BitsLen;
22 UINT8 *Buf;
23 UINT8 *BufHost;
24 UINTN BufLen; // Memory size in bytes
25 VOID *Mapping;
26 USBHC_MEM_BLOCK *Next;
27};
28
29//
30// Memory allocation unit, must be 2^n, n>4
31//
32#define USBHC_MEM_UNIT 64
33
34#define USBHC_MEM_UNIT_MASK (USBHC_MEM_UNIT - 1)
35#define USBHC_MEM_ROUND(Len) (((Len) + USBHC_MEM_UNIT_MASK) & (~USBHC_MEM_UNIT_MASK))
36
37#define USB_HC_BIT(a) ((UINTN)(1 << (a)))
38
39#define USB_HC_BIT_IS_SET(Data, Bit) \
40 ((BOOLEAN)(((Data) & USB_HC_BIT(Bit)) == USB_HC_BIT(Bit)))
41
42//
43// Advance the byte and bit to the next bit, adjust byte accordingly.
44//
45#define NEXT_BIT(Byte, Bit) \
46 do { \
47 (Bit)++; \
48 if ((Bit) > 7) { \
49 (Byte)++; \
50 (Bit) = 0; \
51 } \
52 } while (0)
53
54//
55// USBHC_MEM_POOL is used to manage the memory used by USB
56// host controller. XHCI requires the control memory and transfer
57// data to be on the same 4G memory.
58//
59typedef struct _USBHC_MEM_POOL {
60 BOOLEAN Check4G;
61 UINT32 Which4G;
62 USBHC_MEM_BLOCK *Head;
64
78 IN USBHC_MEM_POOL *Pool,
79 IN VOID *Mem,
80 IN UINTN Size,
81 IN BOOLEAN Alignment
82 );
83
97 IN USBHC_MEM_POOL *Pool,
98 IN VOID *Mem,
99 IN UINTN Size,
100 IN BOOLEAN Alignment
101 );
102
122 IN UINTN Pages,
123 IN UINTN Alignment,
124 OUT VOID **HostAddress,
125 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
126 OUT VOID **Mapping
127 );
128
137VOID
139 IN VOID *HostAddress,
140 IN UINTN Pages,
141 IN VOID *Mapping
142 );
143
144#endif
UINT64 UINTN
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
UINT64 EFI_PHYSICAL_ADDRESS
Definition: UefiBaseType.h:50
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
EFI_PHYSICAL_ADDRESS UsbHcGetPciAddrForHostAddr(IN USBHC_MEM_POOL *Pool, IN VOID *Mem, IN UINTN Size, IN BOOLEAN Alignment)
Definition: UsbHcMem.c:235
EFI_STATUS UsbHcAllocateAlignedPages(IN EFI_PCI_IO_PROTOCOL *PciIo, IN UINTN Pages, IN UINTN Alignment, OUT VOID **HostAddress, OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping)
Definition: UsbHcMem.c:637
EFI_PHYSICAL_ADDRESS UsbHcGetHostAddrForPciAddr(IN USBHC_MEM_POOL *Pool, IN VOID *Mem, IN UINTN Size, IN BOOLEAN Alignment)
Definition: UsbHcMem.c:290
VOID UsbHcFreeAlignedPages(IN EFI_PCI_IO_PROTOCOL *PciIo, IN VOID *HostAddress, IN UINTN Pages, VOID *Mapping)
Definition: UsbHcMem.c:758