]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.h
MdeModulePkg/SdMmcPciHcDxe: Do not map memory for non DMA transfer
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / PciBusDxe / PciCommand.h
CommitLineData
9060e3ec 1/** @file\r
2 PCI command register operations supporting functions declaration for PCI Bus module.\r
3\r
fcdfcdbf 4Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
9d510e61 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
9060e3ec 6\r
7**/\r
8\r
9\r
10#ifndef _EFI_PCI_COMMAND_H_\r
11#define _EFI_PCI_COMMAND_H_\r
12\r
13//\r
14// The PCI Command register bits owned by PCI Bus driver.\r
15//\r
16// They should be cleared at the beginning. The other registers\r
17// are owned by chipset, we should not touch them.\r
18//\r
19#define EFI_PCI_COMMAND_BITS_OWNED ( \\r
20 EFI_PCI_COMMAND_IO_SPACE | \\r
21 EFI_PCI_COMMAND_MEMORY_SPACE | \\r
22 EFI_PCI_COMMAND_BUS_MASTER | \\r
23 EFI_PCI_COMMAND_MEMORY_WRITE_AND_INVALIDATE | \\r
24 EFI_PCI_COMMAND_VGA_PALETTE_SNOOP | \\r
25 EFI_PCI_COMMAND_FAST_BACK_TO_BACK \\r
26 )\r
27\r
28//\r
29// The PCI Bridge Control register bits owned by PCI Bus driver.\r
30//\r
31// They should be cleared at the beginning. The other registers\r
32// are owned by chipset, we should not touch them.\r
33//\r
34#define EFI_PCI_BRIDGE_CONTROL_BITS_OWNED ( \\r
35 EFI_PCI_BRIDGE_CONTROL_ISA | \\r
36 EFI_PCI_BRIDGE_CONTROL_VGA | \\r
37 EFI_PCI_BRIDGE_CONTROL_VGA_16 | \\r
38 EFI_PCI_BRIDGE_CONTROL_FAST_BACK_TO_BACK \\r
39 )\r
40\r
41//\r
42// The PCCard Bridge Control register bits owned by PCI Bus driver.\r
43//\r
44// They should be cleared at the beginning. The other registers\r
45// are owned by chipset, we should not touch them.\r
46//\r
47#define EFI_PCCARD_BRIDGE_CONTROL_BITS_OWNED ( \\r
48 EFI_PCI_BRIDGE_CONTROL_ISA | \\r
49 EFI_PCI_BRIDGE_CONTROL_VGA | \\r
50 EFI_PCI_BRIDGE_CONTROL_FAST_BACK_TO_BACK \\r
51 )\r
52\r
53\r
54#define EFI_GET_REGISTER 1\r
55#define EFI_SET_REGISTER 2\r
56#define EFI_ENABLE_REGISTER 3\r
57#define EFI_DISABLE_REGISTER 4\r
58\r
59/**\r
60 Operate the PCI register via PciIo function interface.\r
61\r
62 @param PciIoDevice Pointer to instance of PCI_IO_DEVICE.\r
63 @param Command Operator command.\r
64 @param Offset The address within the PCI configuration space for the PCI controller.\r
65 @param Operation Type of Operation.\r
66 @param PtrCommand Return buffer holding old PCI command, if operation is not EFI_SET_REGISTER.\r
67\r
68 @return Status of PciIo operation.\r
69\r
70**/\r
71EFI_STATUS\r
72PciOperateRegister (\r
73 IN PCI_IO_DEVICE *PciIoDevice,\r
74 IN UINT16 Command,\r
75 IN UINT8 Offset,\r
76 IN UINT8 Operation,\r
77 OUT UINT16 *PtrCommand\r
78 );\r
79\r
80/**\r
fcdfcdbf 81 Check the capability supporting by given device.\r
9060e3ec 82\r
83 @param PciIoDevice Pointer to instance of PCI_IO_DEVICE.\r
84\r
fcdfcdbf
RN
85 @retval TRUE Capability supported.\r
86 @retval FALSE Capability not supported.\r
9060e3ec 87\r
88**/\r
89BOOLEAN\r
90PciCapabilitySupport (\r
91 IN PCI_IO_DEVICE *PciIoDevice\r
92 );\r
93\r
94/**\r
95 Locate capability register block per capability ID.\r
96\r
97 @param PciIoDevice A pointer to the PCI_IO_DEVICE.\r
98 @param CapId The capability ID.\r
99 @param Offset A pointer to the offset returned.\r
100 @param NextRegBlock A pointer to the next block returned.\r
101\r
fcdfcdbf 102 @retval EFI_SUCCESS Successfully located capability register block.\r
9060e3ec 103 @retval EFI_UNSUPPORTED Pci device does not support capability.\r
104 @retval EFI_NOT_FOUND Pci device support but can not find register block.\r
105\r
106**/\r
107EFI_STATUS\r
108LocateCapabilityRegBlock (\r
109 IN PCI_IO_DEVICE *PciIoDevice,\r
110 IN UINT8 CapId,\r
111 IN OUT UINT8 *Offset,\r
112 OUT UINT8 *NextRegBlock OPTIONAL\r
113 );\r
114\r
115/**\r
116 Locate PciExpress capability register block per capability ID.\r
117\r
118 @param PciIoDevice A pointer to the PCI_IO_DEVICE.\r
119 @param CapId The capability ID.\r
120 @param Offset A pointer to the offset returned.\r
121 @param NextRegBlock A pointer to the next block returned.\r
122\r
fcdfcdbf 123 @retval EFI_SUCCESS Successfully located capability register block.\r
9060e3ec 124 @retval EFI_UNSUPPORTED Pci device does not support capability.\r
125 @retval EFI_NOT_FOUND Pci device support but can not find register block.\r
126\r
127**/\r
128EFI_STATUS\r
129LocatePciExpressCapabilityRegBlock (\r
130 IN PCI_IO_DEVICE *PciIoDevice,\r
131 IN UINT16 CapId,\r
132 IN OUT UINT32 *Offset,\r
133 OUT UINT32 *NextRegBlock OPTIONAL\r
134 );\r
135\r
136/**\r
137 Macro that reads command register.\r
138\r
139 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
140 @param b[out] Pointer to the 16-bit value read from command register.\r
141\r
142 @return status of PciIo operation\r
143\r
144**/\r
145#define PCI_READ_COMMAND_REGISTER(a,b) \\r
146 PciOperateRegister (a, 0, PCI_COMMAND_OFFSET, EFI_GET_REGISTER, b)\r
147\r
148/**\r
149 Macro that writes command register.\r
150\r
151 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
152 @param b[in] The 16-bit value written into command register.\r
153\r
154 @return status of PciIo operation\r
155\r
156**/\r
157#define PCI_SET_COMMAND_REGISTER(a,b) \\r
158 PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_SET_REGISTER, NULL)\r
159\r
160/**\r
161 Macro that enables command register.\r
162\r
163 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
164 @param b[in] The enabled value written into command register.\r
165\r
166 @return status of PciIo operation\r
167\r
168**/\r
169#define PCI_ENABLE_COMMAND_REGISTER(a,b) \\r
170 PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_ENABLE_REGISTER, NULL)\r
171\r
172/**\r
fcdfcdbf 173 Macro that disables command register.\r
9060e3ec 174\r
175 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
176 @param b[in] The disabled value written into command register.\r
177\r
178 @return status of PciIo operation\r
179\r
180**/\r
181#define PCI_DISABLE_COMMAND_REGISTER(a,b) \\r
182 PciOperateRegister (a, b, PCI_COMMAND_OFFSET, EFI_DISABLE_REGISTER, NULL)\r
183\r
184/**\r
185 Macro that reads PCI bridge control register.\r
186\r
187 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
188 @param b[out] The 16-bit value read from control register.\r
189\r
190 @return status of PciIo operation\r
191\r
192**/\r
193#define PCI_READ_BRIDGE_CONTROL_REGISTER(a,b) \\r
194 PciOperateRegister (a, 0, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_GET_REGISTER, b)\r
195\r
196/**\r
197 Macro that writes PCI bridge control register.\r
198\r
199 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
200 @param b[in] The 16-bit value written into control register.\r
201\r
202 @return status of PciIo operation\r
203\r
204**/\r
205#define PCI_SET_BRIDGE_CONTROL_REGISTER(a,b) \\r
206 PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_SET_REGISTER, NULL)\r
207\r
208/**\r
209 Macro that enables PCI bridge control register.\r
210\r
211 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
212 @param b[in] The enabled value written into command register.\r
213\r
214 @return status of PciIo operation\r
215\r
216**/\r
217#define PCI_ENABLE_BRIDGE_CONTROL_REGISTER(a,b) \\r
218 PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_ENABLE_REGISTER, NULL)\r
219\r
220/**\r
fcdfcdbf 221 Macro that disables PCI bridge control register.\r
9060e3ec 222\r
223 @param a[in] Pointer to instance of PCI_IO_DEVICE.\r
224 @param b[in] The disabled value written into command register.\r
225\r
226 @return status of PciIo operation\r
227\r
228**/\r
229#define PCI_DISABLE_BRIDGE_CONTROL_REGISTER(a,b) \\r
230 PciOperateRegister (a, b, PCI_BRIDGE_CONTROL_REGISTER_OFFSET, EFI_DISABLE_REGISTER, NULL)\r
231\r
232#endif\r