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
77 This function is used to skip ISA aliasing aperture
79 @param Start address including ISA aliasing aperture
80 @param Length length of ISA aliasing aperture
82 @retval EFI_SUCCESS success
85 SkipIsaAliasAperture (
91 This function inserts a resource node into the resource list.
92 The resource list is sorted in descend order.
94 @param Bridge PCI resource node for bridge
95 @param ResNode Resource node want to be inserted
97 @retval EFI_SUCCESS Success
101 PCI_RESOURCE_NODE
*Bridge
,
102 PCI_RESOURCE_NODE
*ResNode
109 This routine is used to merge two different resource tree in need of
110 resoure degradation. For example, if a upstream PPB doesn't support,
111 prefetchable memory decoding, the PCI bus driver will choose to call this function
112 to merge prefectchable memory resource list into normal memory list.
114 If the TypeMerge is TRUE, Res resource type is changed to the type of destination resource
117 @param Dst Point to destination resource tree
118 @param Res Point to source resource tree
119 @param TypeMerge If the TypeMerge is TRUE, Res resource type is changed to the type of
120 destination resource type.
123 @retval EFI_SUCCESS Success
127 PCI_RESOURCE_NODE
*Dst
,
128 PCI_RESOURCE_NODE
*Res
,
133 This function is used to calculate the IO16 aperture
136 @param Bridge PCI resource node for bridge.
138 @retval EFI_SUCCESS Success
141 CalculateApertureIo16 (
142 IN PCI_RESOURCE_NODE
*Bridge
146 This function is used to calculate the resource aperture
147 for a given bridge device
149 @param Bridge Give bridge device
151 @retval EFI_SUCCESS Success
154 CalculateResourceAperture (
155 IN PCI_RESOURCE_NODE
*Bridge
159 Get IO/Memory resource infor for given PCI device
161 @param PciDev Pci device instance
162 @param IoNode Resource info node for IO
163 @param Mem32Node Resource info node for 32-bit memory
164 @param PMem32Node Resource info node for 32-bit PMemory
165 @param Mem64Node Resource info node for 64-bit memory
166 @param PMem64Node Resource info node for 64-bit PMemory
168 @retval EFI_SUCCESS Success
171 GetResourceFromDevice (
172 PCI_IO_DEVICE
*PciDev
,
173 PCI_RESOURCE_NODE
*IoNode
,
174 PCI_RESOURCE_NODE
*Mem32Node
,
175 PCI_RESOURCE_NODE
*PMem32Node
,
176 PCI_RESOURCE_NODE
*Mem64Node
,
177 PCI_RESOURCE_NODE
*PMem64Node
181 This function is used to create a resource node
183 @param PciDev Pci device instance
184 @param Length Length of Io/Memory resource
185 @param Alignment Alignment of resource
187 @param ResType Type of resource: IO/Memory
188 @param ResUage Resource usage
192 IN PCI_IO_DEVICE
*PciDev
,
196 IN PCI_BAR_TYPE ResType
,
197 IN PCI_RESOURCE_USAGE ResUsage
201 This routine is used to extract resource request from
204 @param Bridge Pci device instance
205 @param IoNode Resource info node for IO
206 @param Mem32Node Resource info node for 32-bit memory
207 @param PMem32Node Resource info node for 32-bit PMemory
208 @param Mem64Node Resource info node for 64-bit memory
209 @param PMem64Node Resource info node for 64-bit PMemory
211 @retval EFI_SUCCESS Success
215 IN PCI_IO_DEVICE
*Bridge
,
216 IN PCI_RESOURCE_NODE
*IoNode
,
217 IN PCI_RESOURCE_NODE
*Mem32Node
,
218 IN PCI_RESOURCE_NODE
*PMem32Node
,
219 IN PCI_RESOURCE_NODE
*Mem64Node
,
220 IN PCI_RESOURCE_NODE
*PMem64Node
224 This function is used to do the resource padding for a specific platform
226 @param Bridge Pci device instance
227 @param IoNode Resource info node for IO
228 @param Mem32Node Resource info node for 32-bit memory
229 @param PMem32Node Resource info node for 32-bit PMemory
230 @param Mem64Node Resource info node for 64-bit memory
231 @param PMem64Node Resource info node for 64-bit PMemory
233 @retval EFI_SUCCESS Success
236 ResourcePaddingPolicy (
237 PCI_IO_DEVICE
*PciDev
,
238 PCI_RESOURCE_NODE
*IoNode
,
239 PCI_RESOURCE_NODE
*Mem32Node
,
240 PCI_RESOURCE_NODE
*PMem32Node
,
241 PCI_RESOURCE_NODE
*Mem64Node
,
242 PCI_RESOURCE_NODE
*PMem64Node
246 This function is used to degrade resource if the upstream bridge
247 doesn't support certain resource. Degradation path is
248 PMEM64 -> MEM64 -> MEM32
249 PMEM64 -> PMEM32 -> MEM32
252 @param Bridge Pci device instance
253 @param IoNode Resource info node for IO
254 @param Mem32Node Resource info node for 32-bit memory
255 @param PMem32Node Resource info node for 32-bit PMemory
256 @param Mem64Node Resource info node for 64-bit memory
257 @param PMem64Node Resource info node for 64-bit PMemory
259 @retval EFI_SUCCESS Success
263 IN PCI_IO_DEVICE
*Bridge
,
264 IN PCI_RESOURCE_NODE
*Mem32Node
,
265 IN PCI_RESOURCE_NODE
*PMem32Node
,
266 IN PCI_RESOURCE_NODE
*Mem64Node
,
267 IN PCI_RESOURCE_NODE
*PMem64Node
271 Test whether bridge device support decode resource
273 @param Bridge Bridge device instance
274 @param Decode Decode type according to resource type
276 @return whether bridge device support decode resource
280 BridgeSupportResourceDecode (
281 IN PCI_IO_DEVICE
*Bridge
,
286 This function is used to program the resource allocated
287 for each resource node
290 @param Base Base address of resource
291 @param Bridge Bridge device instance
293 @retval EFI_SUCCESS Success
298 IN PCI_RESOURCE_NODE
*Bridge
302 Program Bar register.
304 @param Base Base address for resource
305 @param Node Point to resoure node structure
307 @retval EFI_SUCCESS Success
312 IN PCI_RESOURCE_NODE
*Node
316 Program PPB apperture
318 @param Base Base address for resource
319 @param Node Point to resoure node structure
321 @retval EFI_SUCCESS Success
324 ProgramPpbApperture (
326 IN PCI_RESOURCE_NODE
*Node
330 Program parent bridge for oprom
332 @param PciDevice Pci deivce instance
333 @param OptionRomBase Base address for oprom
334 @param Enable Enable/Disable
336 @retval EFI_SUCCESS Success
339 ProgrameUpstreamBridgeForRom (
340 IN PCI_IO_DEVICE
*PciDevice
,
341 IN UINT32 OptionRomBase
,
346 Test whether resource exists for a bridge
348 @param Bridge Point to resource node for a bridge
350 @return whether resource exists
353 ResourceRequestExisted (
354 IN PCI_RESOURCE_NODE
*Bridge
358 Initialize resource pool structure.
360 @param ResourcePool Point to resource pool structure
361 @param ResourceType Type of resource
364 InitializeResourcePool (
365 PCI_RESOURCE_NODE
*ResourcePool
,
366 PCI_BAR_TYPE ResourceType
370 Get all resource information for given Pci device
372 @param PciDev Pci device instance
373 @param IoBridge Io resource node
374 @param Mem32Bridge 32-bit memory node
375 @param PMem32Bridge 32-bit Pmemory node
376 @param Mem64Bridge 64-bit memory node
377 @param PMem64Bridge 64-bit PMemory node
378 @param IoPool Link list header for Io resource
379 @param Mem32Pool Link list header for 32-bit memory
380 @param PMem32Pool Link list header for 32-bit Pmemory
381 @param Mem64Pool Link list header for 64-bit memory
382 @param PMem64Pool Link list header for 64-bit Pmemory
384 @retval EFI_SUCCESS Success
388 PCI_IO_DEVICE
*PciDev
,
389 PCI_RESOURCE_NODE
**IoBridge
,
390 PCI_RESOURCE_NODE
**Mem32Bridge
,
391 PCI_RESOURCE_NODE
**PMem32Bridge
,
392 PCI_RESOURCE_NODE
**Mem64Bridge
,
393 PCI_RESOURCE_NODE
**PMem64Bridge
,
394 PCI_RESOURCE_NODE
*IoPool
,
395 PCI_RESOURCE_NODE
*Mem32Pool
,
396 PCI_RESOURCE_NODE
*PMem32Pool
,
397 PCI_RESOURCE_NODE
*Mem64Pool
,
398 PCI_RESOURCE_NODE
*PMem64Pool
402 Destory given resource tree
404 @param Bridge root node of resource tree
406 @retval EFI_SUCCESS Success
409 DestroyResourceTree (
410 IN PCI_RESOURCE_NODE
*Bridge
414 Record the reserved resource and insert to reserved list.
416 @param Base Base address of reserved resourse
417 @param Length Length of reserved resource
418 @param ResType Resource type
419 @param Bridge Pci device instance
422 RecordReservedResource (
425 IN PCI_BAR_TYPE ResType
,
426 IN PCI_IO_DEVICE
*Bridge
430 Insert resource padding for P2C
432 @param PciDev Pci device instance
433 @param IoNode Resource info node for IO
434 @param Mem32Node Resource info node for 32-bit memory
435 @param PMem32Node Resource info node for 32-bit PMemory
436 @param Mem64Node Resource info node for 64-bit memory
437 @param PMem64Node Resource info node for 64-bit PMemory
439 @retval EFI_SUCCESS Success
442 ResourcePaddingForCardBusBridge (
443 PCI_IO_DEVICE
*PciDev
,
444 PCI_RESOURCE_NODE
*IoNode
,
445 PCI_RESOURCE_NODE
*Mem32Node
,
446 PCI_RESOURCE_NODE
*PMem32Node
,
447 PCI_RESOURCE_NODE
*Mem64Node
,
448 PCI_RESOURCE_NODE
*PMem64Node
452 Program P2C register for given resource node
454 @param Base Base address of P2C device
455 @param Node Given resource node.
457 @retval EFI_SUCCESS Success
462 IN PCI_RESOURCE_NODE
*Node
466 Create padding resource node.
468 @param PciDev Pci device instance
469 @param IoNode Resource info node for IO
470 @param Mem32Node Resource info node for 32-bit memory
471 @param PMem32Node Resource info node for 32-bit PMemory
472 @param Mem64Node Resource info node for 64-bit memory
473 @param PMem64Node Resource info node for 64-bit PMemory
475 @retval EFI_SUCCESS Success
479 ApplyResourcePadding (
480 PCI_IO_DEVICE
*PciDev
,
481 PCI_RESOURCE_NODE
*IoNode
,
482 PCI_RESOURCE_NODE
*Mem32Node
,
483 PCI_RESOURCE_NODE
*PMem32Node
,
484 PCI_RESOURCE_NODE
*Mem64Node
,
485 PCI_RESOURCE_NODE
*PMem64Node
489 Get padding resource for PPB
490 Light PCI bus driver woundn't support hotplug root device
491 So no need to pad resource for them
493 @param PciIoDevice Pci device instance
496 GetResourcePaddingPpb (
497 IN PCI_IO_DEVICE
*PciIoDevice
501 Reset and all bus number from specific bridge.
503 @param Bridge Parent specific bridge
504 @param StartBusNumber start bus number
507 ResetAllPpbBusNumber (
508 IN PCI_IO_DEVICE
*Bridge
,
509 IN UINT8 StartBusNumber