3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 #ifndef _EFI_PCI_RESOURCE_SUPPORT_H
15 #define _EFI_PCI_RESOURCE_SUPPORT_H
17 #define RESERVED_RESOURCE_SIGNATURE EFI_SIGNATURE_32 ('r', 's', 'v', 'd')
23 } PCI_RESERVED_RESOURCE_NODE
;
28 PCI_RESERVED_RESOURCE_NODE Node
;
29 } PCI_RESERVED_RESOURCE_LIST
;
31 #define RESOURCED_LIST_FROM_NODE(a) \
32 CR (a, PCI_RESERVED_RESOURCE_LIST, Node, RESERVED_RESOURCE_SIGNATURE)
34 #define RESOURCED_LIST_FROM_LINK(a) \
35 CR (a, PCI_RESERVED_RESOURCE_LIST, Link, RESERVED_RESOURCE_SIGNATURE)
38 PciResUsageTypical
= 0,
40 PciResUsageOptionRomProcessing
43 #define PCI_RESOURCE_SIGNATURE EFI_SIGNATURE_32 ('p', 'c', 'r', 'c')
49 PCI_IO_DEVICE
*PciDev
;
56 PCI_RESOURCE_USAGE ResourceUsage
;
59 #define RESOURCE_NODE_FROM_LINK(a) \
60 CR (a, PCI_RESOURCE_NODE, Link, PCI_RESOURCE_SIGNATURE)
63 The function is used to skip VGA range
65 @param Start address including VGA range
66 @param Length length of VGA range.
68 @retval EFI_SUCCESS success
78 This function is used to skip ISA aliasing aperture
80 @param Start address including ISA aliasing aperture
81 @param Length length of ISA aliasing aperture
83 @retval EFI_SUCCESS success
86 SkipIsaAliasAperture (
93 This function inserts a resource node into the resource list.
94 The resource list is sorted in descend order.
96 @param Bridge PCI resource node for bridge
97 @param ResNode Resource node want to be inserted
99 @retval EFI_SUCCESS Success
103 PCI_RESOURCE_NODE
*Bridge
,
104 PCI_RESOURCE_NODE
*ResNode
112 This routine is used to merge two different resource tree in need of
113 resoure degradation. For example, if a upstream PPB doesn't support,
114 prefetchable memory decoding, the PCI bus driver will choose to call this function
115 to merge prefectchable memory resource list into normal memory list.
117 If the TypeMerge is TRUE, Res resource type is changed to the type of destination resource
120 @param Dst Point to destination resource tree
121 @param Res Point to source resource tree
122 @param TypeMerge If the TypeMerge is TRUE, Res resource type is changed to the type of
123 destination resource type.
126 @retval EFI_SUCCESS Success
130 PCI_RESOURCE_NODE
*Dst
,
131 PCI_RESOURCE_NODE
*Res
,
137 This function is used to calculate the IO16 aperture
140 @param Bridge PCI resource node for bridge.
142 @retval EFI_SUCCESS Success
145 CalculateApertureIo16 (
146 IN PCI_RESOURCE_NODE
*Bridge
151 This function is used to calculate the resource aperture
152 for a given bridge device
154 @param Bridge Give bridge device
156 @retval EFI_SUCCESS Success
159 CalculateResourceAperture (
160 IN PCI_RESOURCE_NODE
*Bridge
165 Get IO/Memory resource infor for given PCI device
167 @param PciDev Pci device instance
168 @param IoNode Resource info node for IO
169 @param Mem32Node Resource info node for 32-bit memory
170 @param PMem32Node Resource info node for 32-bit PMemory
171 @param Mem64Node Resource info node for 64-bit memory
172 @param PMem64Node Resource info node for 64-bit PMemory
174 @retval EFI_SUCCESS Success
177 GetResourceFromDevice (
178 PCI_IO_DEVICE
*PciDev
,
179 PCI_RESOURCE_NODE
*IoNode
,
180 PCI_RESOURCE_NODE
*Mem32Node
,
181 PCI_RESOURCE_NODE
*PMem32Node
,
182 PCI_RESOURCE_NODE
*Mem64Node
,
183 PCI_RESOURCE_NODE
*PMem64Node
188 This function is used to create a resource node
190 @param PciDev Pci device instance
191 @param Length Length of Io/Memory resource
192 @param Alignment Alignment of resource
194 @param ResType Type of resource: IO/Memory
195 @param ResUage Resource usage
199 IN PCI_IO_DEVICE
*PciDev
,
203 IN PCI_BAR_TYPE ResType
,
204 IN PCI_RESOURCE_USAGE ResUsage
209 This routine is used to extract resource request from
212 @param Bridge Pci device instance
213 @param IoNode Resource info node for IO
214 @param Mem32Node Resource info node for 32-bit memory
215 @param PMem32Node Resource info node for 32-bit PMemory
216 @param Mem64Node Resource info node for 64-bit memory
217 @param PMem64Node Resource info node for 64-bit PMemory
219 @retval EFI_SUCCESS Success
223 IN PCI_IO_DEVICE
*Bridge
,
224 IN PCI_RESOURCE_NODE
*IoNode
,
225 IN PCI_RESOURCE_NODE
*Mem32Node
,
226 IN PCI_RESOURCE_NODE
*PMem32Node
,
227 IN PCI_RESOURCE_NODE
*Mem64Node
,
228 IN PCI_RESOURCE_NODE
*PMem64Node
233 This function is used to do the resource padding for a specific platform
235 @param Bridge Pci device instance
236 @param IoNode Resource info node for IO
237 @param Mem32Node Resource info node for 32-bit memory
238 @param PMem32Node Resource info node for 32-bit PMemory
239 @param Mem64Node Resource info node for 64-bit memory
240 @param PMem64Node Resource info node for 64-bit PMemory
242 @retval EFI_SUCCESS Success
245 ResourcePaddingPolicy (
246 PCI_IO_DEVICE
*PciDev
,
247 PCI_RESOURCE_NODE
*IoNode
,
248 PCI_RESOURCE_NODE
*Mem32Node
,
249 PCI_RESOURCE_NODE
*PMem32Node
,
250 PCI_RESOURCE_NODE
*Mem64Node
,
251 PCI_RESOURCE_NODE
*PMem64Node
256 This function is used to degrade resource if the upstream bridge
257 doesn't support certain resource. Degradation path is
258 PMEM64 -> MEM64 -> MEM32
259 PMEM64 -> PMEM32 -> MEM32
262 @param Bridge Pci device instance
263 @param IoNode Resource info node for IO
264 @param Mem32Node Resource info node for 32-bit memory
265 @param PMem32Node Resource info node for 32-bit PMemory
266 @param Mem64Node Resource info node for 64-bit memory
267 @param PMem64Node Resource info node for 64-bit PMemory
269 @retval EFI_SUCCESS Success
273 IN PCI_IO_DEVICE
*Bridge
,
274 IN PCI_RESOURCE_NODE
*Mem32Node
,
275 IN PCI_RESOURCE_NODE
*PMem32Node
,
276 IN PCI_RESOURCE_NODE
*Mem64Node
,
277 IN PCI_RESOURCE_NODE
*PMem64Node
282 Test whether bridge device support decode resource
284 @param Bridge Bridge device instance
285 @param Decode Decode type according to resource type
287 @return whether bridge device support decode resource
291 BridgeSupportResourceDecode (
292 IN PCI_IO_DEVICE
*Bridge
,
298 This function is used to program the resource allocated
299 for each resource node
302 @param Base Base address of resource
303 @param Bridge Bridge device instance
305 @retval EFI_SUCCESS Success
310 IN PCI_RESOURCE_NODE
*Bridge
315 Program Bar register.
317 @param Base Base address for resource
318 @param Node Point to resoure node structure
320 @retval EFI_SUCCESS Success
325 IN PCI_RESOURCE_NODE
*Node
330 Program PPB apperture
332 @param Base Base address for resource
333 @param Node Point to resoure node structure
335 @retval EFI_SUCCESS Success
338 ProgramPpbApperture (
340 IN PCI_RESOURCE_NODE
*Node
345 Program parent bridge for oprom
347 @param PciDevice Pci deivce instance
348 @param OptionRomBase Base address for oprom
349 @param Enable Enable/Disable
351 @retval EFI_SUCCESS Success
354 ProgrameUpstreamBridgeForRom (
355 IN PCI_IO_DEVICE
*PciDevice
,
356 IN UINT32 OptionRomBase
,
362 Test whether resource exists for a bridge
364 @param Bridge Point to resource node for a bridge
366 @return whether resource exists
369 ResourceRequestExisted (
370 IN PCI_RESOURCE_NODE
*Bridge
375 Initialize resource pool structure.
377 @param ResourcePool Point to resource pool structure
378 @param ResourceType Type of resource
381 InitializeResourcePool (
382 PCI_RESOURCE_NODE
*ResourcePool
,
383 PCI_BAR_TYPE ResourceType
388 Get all resource information for given Pci device
390 @param PciDev Pci device instance
391 @param IoBridge Io resource node
392 @param Mem32Bridge 32-bit memory node
393 @param PMem32Bridge 32-bit Pmemory node
394 @param Mem64Bridge 64-bit memory node
395 @param PMem64Bridge 64-bit PMemory node
396 @param IoPool Link list header for Io resource
397 @param Mem32Pool Link list header for 32-bit memory
398 @param PMem32Pool Link list header for 32-bit Pmemory
399 @param Mem64Pool Link list header for 64-bit memory
400 @param PMem64Pool Link list header for 64-bit Pmemory
402 @retval EFI_SUCCESS Success
406 PCI_IO_DEVICE
*PciDev
,
407 PCI_RESOURCE_NODE
**IoBridge
,
408 PCI_RESOURCE_NODE
**Mem32Bridge
,
409 PCI_RESOURCE_NODE
**PMem32Bridge
,
410 PCI_RESOURCE_NODE
**Mem64Bridge
,
411 PCI_RESOURCE_NODE
**PMem64Bridge
,
412 PCI_RESOURCE_NODE
*IoPool
,
413 PCI_RESOURCE_NODE
*Mem32Pool
,
414 PCI_RESOURCE_NODE
*PMem32Pool
,
415 PCI_RESOURCE_NODE
*Mem64Pool
,
416 PCI_RESOURCE_NODE
*PMem64Pool
421 Destory given resource tree
423 @param Bridge root node of resource tree
425 @retval EFI_SUCCESS Success
428 DestroyResourceTree (
429 IN PCI_RESOURCE_NODE
*Bridge
434 Record the reserved resource and insert to reserved list.
436 @param Base Base address of reserved resourse
437 @param Length Length of reserved resource
438 @param ResType Resource type
439 @param Bridge Pci device instance
442 RecordReservedResource (
445 IN PCI_BAR_TYPE ResType
,
446 IN PCI_IO_DEVICE
*Bridge
451 Insert resource padding for P2C
453 @param PciDev Pci device instance
454 @param IoNode Resource info node for IO
455 @param Mem32Node Resource info node for 32-bit memory
456 @param PMem32Node Resource info node for 32-bit PMemory
457 @param Mem64Node Resource info node for 64-bit memory
458 @param PMem64Node Resource info node for 64-bit PMemory
460 @retval EFI_SUCCESS Success
463 ResourcePaddingForCardBusBridge (
464 PCI_IO_DEVICE
*PciDev
,
465 PCI_RESOURCE_NODE
*IoNode
,
466 PCI_RESOURCE_NODE
*Mem32Node
,
467 PCI_RESOURCE_NODE
*PMem32Node
,
468 PCI_RESOURCE_NODE
*Mem64Node
,
469 PCI_RESOURCE_NODE
*PMem64Node
474 Program P2C register for given resource node
476 @param Base Base address of P2C device
477 @param Node Given resource node.
479 @retval EFI_SUCCESS Success
484 IN PCI_RESOURCE_NODE
*Node
489 Create padding resource node.
491 @param PciDev Pci device instance
492 @param IoNode Resource info node for IO
493 @param Mem32Node Resource info node for 32-bit memory
494 @param PMem32Node Resource info node for 32-bit PMemory
495 @param Mem64Node Resource info node for 64-bit memory
496 @param PMem64Node Resource info node for 64-bit PMemory
498 @retval EFI_SUCCESS Success
502 ApplyResourcePadding (
503 PCI_IO_DEVICE
*PciDev
,
504 PCI_RESOURCE_NODE
*IoNode
,
505 PCI_RESOURCE_NODE
*Mem32Node
,
506 PCI_RESOURCE_NODE
*PMem32Node
,
507 PCI_RESOURCE_NODE
*Mem64Node
,
508 PCI_RESOURCE_NODE
*PMem64Node
513 Get padding resource for PPB
514 Light PCI bus driver woundn't support hotplug root device
515 So no need to pad resource for them
517 @param PciIoDevice Pci device instance
520 GetResourcePaddingPpb (
521 IN PCI_IO_DEVICE
*PciIoDevice
526 Reset and all bus number from specific bridge.
528 @param Bridge Parent specific bridge
529 @param StartBusNumber start bus number
532 ResetAllPpbBusNumber (
533 IN PCI_IO_DEVICE
*Bridge
,
534 IN UINT8 StartBusNumber