]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.h
clean up the un-suitable ';' location when declaring the functions.
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / PciBusDxe / PciResourceSupport.h
CommitLineData
3db51098 1/**@file\r
ead42efc 2\r
3Copyright (c) 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
3db51098 12**/\r
ead42efc 13\r
14#ifndef _EFI_PCI_RESOURCE_SUPPORT_H\r
15#define _EFI_PCI_RESOURCE_SUPPORT_H\r
16\r
17#define RESERVED_RESOURCE_SIGNATURE EFI_SIGNATURE_32 ('r', 's', 'v', 'd')\r
18\r
19typedef struct {\r
20 UINT64 Base;\r
21 UINT64 Length;\r
22 PCI_BAR_TYPE ResType;\r
23} PCI_RESERVED_RESOURCE_NODE;\r
24\r
25typedef struct {\r
26 UINT32 Signature;\r
27 LIST_ENTRY Link;\r
28 PCI_RESERVED_RESOURCE_NODE Node;\r
29} PCI_RESERVED_RESOURCE_LIST;\r
30\r
31#define RESOURCED_LIST_FROM_NODE(a) \\r
32 CR (a, PCI_RESERVED_RESOURCE_LIST, Node, RESERVED_RESOURCE_SIGNATURE)\r
33\r
34#define RESOURCED_LIST_FROM_LINK(a) \\r
35 CR (a, PCI_RESERVED_RESOURCE_LIST, Link, RESERVED_RESOURCE_SIGNATURE)\r
36\r
37typedef enum {\r
38 PciResUsageTypical = 0,\r
39 PciResUsagePadding,\r
40 PciResUsageOptionRomProcessing\r
41} PCI_RESOURCE_USAGE;\r
42\r
43#define PCI_RESOURCE_SIGNATURE EFI_SIGNATURE_32 ('p', 'c', 'r', 'c')\r
44\r
45typedef struct {\r
46 UINT32 Signature;\r
47 LIST_ENTRY Link;\r
48 LIST_ENTRY ChildList;\r
49 PCI_IO_DEVICE *PciDev;\r
50 UINT64 Alignment;\r
51 UINT64 Offset;\r
52 UINT8 Bar;\r
53 PCI_BAR_TYPE ResType;\r
54 UINT64 Length;\r
55 BOOLEAN Reserved;\r
56 PCI_RESOURCE_USAGE ResourceUsage;\r
57} PCI_RESOURCE_NODE;\r
58\r
59#define RESOURCE_NODE_FROM_LINK(a) \\r
60 CR (a, PCI_RESOURCE_NODE, Link, PCI_RESOURCE_SIGNATURE)\r
61\r
57076f45 62/**\r
63 The function is used to skip VGA range\r
64 \r
65 @param Start address including VGA range\r
66 @param Length length of VGA range.\r
67 \r
68 @retval EFI_SUCCESS success\r
69**/\r
ead42efc 70EFI_STATUS\r
71SkipVGAAperture (\r
72 OUT UINT64 *Start,\r
73 IN UINT64 Length\r
ed66e1bc 74 );\r
ead42efc 75\r
57076f45 76/**\r
77 This function is used to skip ISA aliasing aperture\r
78 \r
79 @param Start address including ISA aliasing aperture\r
80 @param Length length of ISA aliasing aperture\r
81 \r
82 @retval EFI_SUCCESS success\r
83**/\r
ead42efc 84EFI_STATUS\r
85SkipIsaAliasAperture (\r
86 OUT UINT64 *Start,\r
87 IN UINT64 Length\r
ed66e1bc 88 );\r
ead42efc 89\r
57076f45 90/**\r
91 This function inserts a resource node into the resource list.\r
92 The resource list is sorted in descend order.\r
ead42efc 93\r
57076f45 94 @param Bridge PCI resource node for bridge\r
95 @param ResNode Resource node want to be inserted\r
96 \r
97 @retval EFI_SUCCESS Success\r
bcd70414 98**/\r
ead42efc 99EFI_STATUS\r
100InsertResourceNode (\r
101 PCI_RESOURCE_NODE *Bridge,\r
102 PCI_RESOURCE_NODE *ResNode\r
ed66e1bc 103 );\r
57076f45 104\r
bcd70414 105/**\r
ead42efc 106\r
107Routine Description:\r
108\r
57076f45 109 This routine is used to merge two different resource tree in need of\r
110 resoure degradation. For example, if a upstream PPB doesn't support,\r
111 prefetchable memory decoding, the PCI bus driver will choose to call this function\r
112 to merge prefectchable memory resource list into normal memory list.\r
113\r
114 If the TypeMerge is TRUE, Res resource type is changed to the type of destination resource\r
115 type.\r
116\r
117 @param Dst Point to destination resource tree\r
118 @param Res Point to source resource tree\r
119 @param TypeMerge If the TypeMerge is TRUE, Res resource type is changed to the type of \r
120 destination resource type.\r
121 \r
122 \r
123 @retval EFI_SUCCESS Success\r
bcd70414 124**/\r
ead42efc 125EFI_STATUS\r
126MergeResourceTree (\r
127 PCI_RESOURCE_NODE *Dst,\r
128 PCI_RESOURCE_NODE *Res,\r
129 BOOLEAN TypeMerge\r
ed66e1bc 130 );\r
ead42efc 131\r
57076f45 132/**\r
133 This function is used to calculate the IO16 aperture\r
134 for a bridge.\r
ead42efc 135\r
57076f45 136 @param Bridge PCI resource node for bridge.\r
137 \r
138 @retval EFI_SUCCESS Success\r
bcd70414 139**/\r
ead42efc 140EFI_STATUS\r
141CalculateApertureIo16 (\r
142 IN PCI_RESOURCE_NODE *Bridge\r
ed66e1bc 143 );\r
ead42efc 144\r
57076f45 145/**\r
146 This function is used to calculate the resource aperture\r
147 for a given bridge device\r
ead42efc 148\r
57076f45 149 @param Bridge Give bridge device\r
150 \r
151 @retval EFI_SUCCESS Success\r
bcd70414 152**/\r
ead42efc 153EFI_STATUS\r
154CalculateResourceAperture (\r
155 IN PCI_RESOURCE_NODE *Bridge\r
ed66e1bc 156 );\r
ead42efc 157\r
57076f45 158/**\r
159 Get IO/Memory resource infor for given PCI device\r
160 \r
161 @param PciDev Pci device instance\r
162 @param IoNode Resource info node for IO \r
163 @param Mem32Node Resource info node for 32-bit memory\r
164 @param PMem32Node Resource info node for 32-bit PMemory\r
165 @param Mem64Node Resource info node for 64-bit memory\r
166 @param PMem64Node Resource info node for 64-bit PMemory\r
167 \r
168 @retval EFI_SUCCESS Success\r
169**/\r
ead42efc 170EFI_STATUS\r
171GetResourceFromDevice (\r
172 PCI_IO_DEVICE *PciDev,\r
173 PCI_RESOURCE_NODE *IoNode,\r
174 PCI_RESOURCE_NODE *Mem32Node,\r
175 PCI_RESOURCE_NODE *PMem32Node,\r
176 PCI_RESOURCE_NODE *Mem64Node,\r
177 PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 178 );\r
ead42efc 179\r
57076f45 180/**\r
181 This function is used to create a resource node\r
182\r
183 @param PciDev Pci device instance\r
184 @param Length Length of Io/Memory resource\r
185 @param Alignment Alignment of resource\r
186 @param Bar Bar index \r
187 @param ResType Type of resource: IO/Memory\r
188 @param ResUage Resource usage\r
189**/\r
ead42efc 190PCI_RESOURCE_NODE *\r
191CreateResourceNode (\r
192 IN PCI_IO_DEVICE *PciDev,\r
193 IN UINT64 Length,\r
194 IN UINT64 Alignment,\r
195 IN UINT8 Bar,\r
196 IN PCI_BAR_TYPE ResType,\r
197 IN PCI_RESOURCE_USAGE ResUsage\r
ed66e1bc 198 );\r
ead42efc 199\r
57076f45 200/**\r
201 This routine is used to extract resource request from\r
202 device node list.\r
ead42efc 203\r
57076f45 204 @param Bridge Pci device instance\r
205 @param IoNode Resource info node for IO \r
206 @param Mem32Node Resource info node for 32-bit memory\r
207 @param PMem32Node Resource info node for 32-bit PMemory\r
208 @param Mem64Node Resource info node for 64-bit memory\r
209 @param PMem64Node Resource info node for 64-bit PMemory\r
ead42efc 210\r
57076f45 211 @retval EFI_SUCCESS Success\r
bcd70414 212**/\r
ead42efc 213EFI_STATUS\r
214CreateResourceMap (\r
215 IN PCI_IO_DEVICE *Bridge,\r
216 IN PCI_RESOURCE_NODE *IoNode,\r
217 IN PCI_RESOURCE_NODE *Mem32Node,\r
218 IN PCI_RESOURCE_NODE *PMem32Node,\r
219 IN PCI_RESOURCE_NODE *Mem64Node,\r
220 IN PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 221 );\r
ead42efc 222\r
57076f45 223/**\r
224 This function is used to do the resource padding for a specific platform\r
ead42efc 225\r
57076f45 226 @param Bridge Pci device instance\r
227 @param IoNode Resource info node for IO \r
228 @param Mem32Node Resource info node for 32-bit memory\r
229 @param PMem32Node Resource info node for 32-bit PMemory\r
230 @param Mem64Node Resource info node for 64-bit memory\r
231 @param PMem64Node Resource info node for 64-bit PMemory\r
ead42efc 232\r
57076f45 233 @retval EFI_SUCCESS Success\r
bcd70414 234**/\r
ead42efc 235EFI_STATUS\r
236ResourcePaddingPolicy (\r
237 PCI_IO_DEVICE *PciDev,\r
238 PCI_RESOURCE_NODE *IoNode,\r
239 PCI_RESOURCE_NODE *Mem32Node,\r
240 PCI_RESOURCE_NODE *PMem32Node,\r
241 PCI_RESOURCE_NODE *Mem64Node,\r
242 PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 243 );\r
ead42efc 244\r
57076f45 245/**\r
246 This function is used to degrade resource if the upstream bridge \r
247 doesn't support certain resource. Degradation path is \r
248 PMEM64 -> MEM64 -> MEM32\r
249 PMEM64 -> PMEM32 -> MEM32\r
250 IO32 -> IO16\r
251\r
252 @param Bridge Pci device instance\r
253 @param IoNode Resource info node for IO \r
254 @param Mem32Node Resource info node for 32-bit memory\r
255 @param PMem32Node Resource info node for 32-bit PMemory\r
256 @param Mem64Node Resource info node for 64-bit memory\r
257 @param PMem64Node Resource info node for 64-bit PMemory\r
258\r
259 @retval EFI_SUCCESS Success\r
260**/\r
ead42efc 261EFI_STATUS\r
262DegradeResource (\r
263 IN PCI_IO_DEVICE *Bridge,\r
264 IN PCI_RESOURCE_NODE *Mem32Node,\r
265 IN PCI_RESOURCE_NODE *PMem32Node,\r
266 IN PCI_RESOURCE_NODE *Mem64Node,\r
267 IN PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 268 );\r
ead42efc 269\r
57076f45 270/**\r
271 Test whether bridge device support decode resource\r
272 \r
273 @param Bridge Bridge device instance\r
274 @param Decode Decode type according to resource type\r
275 \r
276 @return whether bridge device support decode resource\r
277 \r
278**/\r
ead42efc 279BOOLEAN\r
280BridgeSupportResourceDecode (\r
281 IN PCI_IO_DEVICE *Bridge,\r
282 IN UINT32 Decode\r
ed66e1bc 283 );\r
ead42efc 284\r
57076f45 285/**\r
286 This function is used to program the resource allocated \r
287 for each resource node\r
288\r
289 \r
290 @param Base Base address of resource\r
291 @param Bridge Bridge device instance\r
292 \r
293 @retval EFI_SUCCESS Success\r
294**/\r
ead42efc 295EFI_STATUS\r
296ProgramResource (\r
297 IN UINT64 Base,\r
298 IN PCI_RESOURCE_NODE *Bridge\r
ed66e1bc 299 );\r
ead42efc 300\r
57076f45 301/**\r
302 Program Bar register.\r
303 \r
304 @param Base Base address for resource\r
305 @param Node Point to resoure node structure\r
306 \r
307 @retval EFI_SUCCESS Success\r
308**/\r
ead42efc 309EFI_STATUS\r
310ProgramBar (\r
311 IN UINT64 Base,\r
312 IN PCI_RESOURCE_NODE *Node\r
ed66e1bc 313 );\r
ead42efc 314\r
57076f45 315/**\r
316 Program PPB apperture\r
317 \r
318 @param Base Base address for resource\r
319 @param Node Point to resoure node structure\r
320 \r
321 @retval EFI_SUCCESS Success\r
322**/\r
ead42efc 323EFI_STATUS\r
324ProgramPpbApperture (\r
325 IN UINT64 Base,\r
326 IN PCI_RESOURCE_NODE *Node\r
ed66e1bc 327 );\r
ead42efc 328\r
57076f45 329/**\r
330 Program parent bridge for oprom\r
331 \r
332 @param PciDevice Pci deivce instance\r
333 @param OptionRomBase Base address for oprom\r
334 @param Enable Enable/Disable\r
335 \r
336 @retval EFI_SUCCESS Success\r
337**/\r
ead42efc 338EFI_STATUS\r
339ProgrameUpstreamBridgeForRom (\r
340 IN PCI_IO_DEVICE *PciDevice,\r
341 IN UINT32 OptionRomBase,\r
342 IN BOOLEAN Enable\r
ed66e1bc 343 );\r
ead42efc 344\r
57076f45 345/**\r
346 Test whether resource exists for a bridge\r
347 \r
348 @param Bridge Point to resource node for a bridge \r
349 \r
350 @return whether resource exists\r
351**/\r
ead42efc 352BOOLEAN\r
353ResourceRequestExisted (\r
354 IN PCI_RESOURCE_NODE *Bridge\r
ed66e1bc 355 );\r
ead42efc 356\r
57076f45 357/**\r
358 Initialize resource pool structure.\r
359 \r
360 @param ResourcePool Point to resource pool structure\r
361 @param ResourceType Type of resource\r
362**/\r
ead42efc 363EFI_STATUS\r
364InitializeResourcePool (\r
365 PCI_RESOURCE_NODE *ResourcePool,\r
366 PCI_BAR_TYPE ResourceType\r
ed66e1bc 367 );\r
ead42efc 368\r
57076f45 369/**\r
370 Get all resource information for given Pci device\r
371 \r
372 @param PciDev Pci device instance\r
373 @param IoBridge Io resource node\r
374 @param Mem32Bridge 32-bit memory node\r
375 @param PMem32Bridge 32-bit Pmemory node\r
376 @param Mem64Bridge 64-bit memory node\r
377 @param PMem64Bridge 64-bit PMemory node\r
378 @param IoPool Link list header for Io resource\r
379 @param Mem32Pool Link list header for 32-bit memory\r
380 @param PMem32Pool Link list header for 32-bit Pmemory\r
381 @param Mem64Pool Link list header for 64-bit memory\r
382 @param PMem64Pool Link list header for 64-bit Pmemory\r
383 \r
384 @retval EFI_SUCCESS Success\r
385**/\r
ead42efc 386EFI_STATUS\r
387GetResourceMap (\r
388 PCI_IO_DEVICE *PciDev,\r
389 PCI_RESOURCE_NODE **IoBridge,\r
390 PCI_RESOURCE_NODE **Mem32Bridge,\r
391 PCI_RESOURCE_NODE **PMem32Bridge,\r
392 PCI_RESOURCE_NODE **Mem64Bridge,\r
393 PCI_RESOURCE_NODE **PMem64Bridge,\r
394 PCI_RESOURCE_NODE *IoPool,\r
395 PCI_RESOURCE_NODE *Mem32Pool,\r
396 PCI_RESOURCE_NODE *PMem32Pool,\r
397 PCI_RESOURCE_NODE *Mem64Pool,\r
398 PCI_RESOURCE_NODE *PMem64Pool\r
ed66e1bc 399 );\r
ead42efc 400\r
57076f45 401/**\r
402 Destory given resource tree\r
403 \r
404 @param Bridge root node of resource tree\r
405 \r
406 @retval EFI_SUCCESS Success\r
407**/\r
ead42efc 408EFI_STATUS\r
409DestroyResourceTree (\r
410 IN PCI_RESOURCE_NODE *Bridge\r
ed66e1bc 411 );\r
ead42efc 412\r
57076f45 413/**\r
414 Record the reserved resource and insert to reserved list.\r
415 \r
416 @param Base Base address of reserved resourse\r
417 @param Length Length of reserved resource \r
418 @param ResType Resource type\r
419 @param Bridge Pci device instance\r
420**/\r
ead42efc 421EFI_STATUS\r
422RecordReservedResource (\r
423 IN UINT64 Base,\r
424 IN UINT64 Length,\r
425 IN PCI_BAR_TYPE ResType,\r
426 IN PCI_IO_DEVICE *Bridge\r
ed66e1bc 427 );\r
ead42efc 428\r
57076f45 429/**\r
430 Insert resource padding for P2C\r
431 \r
432 @param PciDev Pci device instance\r
433 @param IoNode Resource info node for IO \r
434 @param Mem32Node Resource info node for 32-bit memory\r
435 @param PMem32Node Resource info node for 32-bit PMemory\r
436 @param Mem64Node Resource info node for 64-bit memory\r
437 @param PMem64Node Resource info node for 64-bit PMemory\r
438 \r
439 @retval EFI_SUCCESS Success\r
440**/\r
ead42efc 441EFI_STATUS\r
442ResourcePaddingForCardBusBridge (\r
443 PCI_IO_DEVICE *PciDev,\r
444 PCI_RESOURCE_NODE *IoNode,\r
445 PCI_RESOURCE_NODE *Mem32Node,\r
446 PCI_RESOURCE_NODE *PMem32Node,\r
447 PCI_RESOURCE_NODE *Mem64Node,\r
448 PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 449 );\r
ead42efc 450\r
57076f45 451/**\r
452 Program P2C register for given resource node\r
453 \r
454 @param Base Base address of P2C device\r
455 @param Node Given resource node.\r
456 \r
457 @retval EFI_SUCCESS Success\r
458**/\r
ead42efc 459EFI_STATUS\r
460ProgramP2C (\r
461 IN UINT64 Base,\r
462 IN PCI_RESOURCE_NODE *Node\r
ed66e1bc 463 );\r
ead42efc 464\r
57076f45 465/**\r
466 Create padding resource node.\r
467 \r
468 @param PciDev Pci device instance\r
469 @param IoNode Resource info node for IO \r
470 @param Mem32Node Resource info node for 32-bit memory\r
471 @param PMem32Node Resource info node for 32-bit PMemory\r
472 @param Mem64Node Resource info node for 64-bit memory\r
473 @param PMem64Node Resource info node for 64-bit PMemory\r
474 \r
475 @retval EFI_SUCCESS Success\r
ead42efc 476\r
bcd70414 477**/\r
ead42efc 478EFI_STATUS\r
479ApplyResourcePadding (\r
480 PCI_IO_DEVICE *PciDev,\r
481 PCI_RESOURCE_NODE *IoNode,\r
482 PCI_RESOURCE_NODE *Mem32Node,\r
483 PCI_RESOURCE_NODE *PMem32Node,\r
484 PCI_RESOURCE_NODE *Mem64Node,\r
485 PCI_RESOURCE_NODE *PMem64Node\r
ed66e1bc 486 );\r
ead42efc 487\r
57076f45 488/**\r
489 Get padding resource for PPB\r
490 Light PCI bus driver woundn't support hotplug root device\r
491 So no need to pad resource for them\r
ead42efc 492\r
57076f45 493 @param PciIoDevice Pci device instance\r
bcd70414 494**/\r
ead42efc 495VOID\r
496GetResourcePaddingPpb (\r
497 IN PCI_IO_DEVICE *PciIoDevice\r
ed66e1bc 498 );\r
ead42efc 499\r
57076f45 500/**\r
501 Reset and all bus number from specific bridge.\r
502 \r
503 @param Bridge Parent specific bridge\r
504 @param StartBusNumber start bus number\r
505**/\r
ead42efc 506EFI_STATUS\r
ff62de37 507ResetAllPpbBusNumber (\r
ead42efc 508 IN PCI_IO_DEVICE *Bridge,\r
509 IN UINT8 StartBusNumber\r
ed66e1bc 510 );\r
ead42efc 511\r
512#endif\r