2 The Header file of the Pci Host Bridge Driver
4 Copyright (c) 2008 - 2009, Intel Corporation<BR> All rights
5 reserved. This program and the accompanying materials are
6 licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #ifndef _PCI_HOST_BRIDGE_H_
16 #define _PCI_HOST_BRIDGE_H_
20 #include <IndustryStandard/Pci.h>
21 #include <IndustryStandard/Acpi.h>
23 #include <Protocol/PciHostBridgeResourceAllocation.h>
24 #include <Protocol/PciRootBridgeIo.h>
25 #include <Protocol/CpuIo2.h>
26 #include <Protocol/Metronome.h>
27 #include <Protocol/DevicePath.h>
30 #include <Library/BaseLib.h>
31 #include <Library/DebugLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/MemoryAllocationLib.h>
34 #include <Library/UefiLib.h>
35 #include <Library/UefiBootServicesTableLib.h>
36 #include <Library/DxeServicesTableLib.h>
37 #include <Library/DevicePathLib.h>
40 // Hard code the host bridge number in the platform.
41 // In this chipset, there is only one host bridge.
43 #define HOST_BRIDGE_NUMBER 1
45 #define PCI_HOST_BRIDGE_SIGNATURE SIGNATURE_32('e', 'h', 's', 't')
48 EFI_HANDLE HostBridgeHandle
;
49 UINTN RootBridgeNumber
;
51 BOOLEAN ResourceSubmited
;
53 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL ResAlloc
;
54 } PCI_HOST_BRIDGE_INSTANCE
;
56 #define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a) \
57 CR(a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)
65 IN EFI_HANDLE ImageHandle
,
66 IN EFI_SYSTEM_TABLE
*SystemTable
70 // HostBridge Resource Allocation interface
75 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
76 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
82 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
83 IN OUT EFI_HANDLE
*RootBridgeHandle
89 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
90 IN EFI_HANDLE RootBridgeHandle
,
91 OUT UINT64
*Attributes
97 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
98 IN EFI_HANDLE RootBridgeHandle
,
99 OUT VOID
**Configuration
105 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
106 IN EFI_HANDLE RootBridgeHandle
,
107 IN VOID
*Configuration
113 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
114 IN EFI_HANDLE RootBridgeHandle
,
115 IN VOID
*Configuration
120 GetProposedResources(
121 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
122 IN EFI_HANDLE RootBridgeHandle
,
123 OUT VOID
**Configuration
128 PreprocessController (
129 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
130 IN EFI_HANDLE RootBridgeHandle
,
131 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress
,
132 IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
137 // Define resource status constant
139 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
140 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
144 // Driver Instance Data Prototypes
148 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
;
151 EFI_PHYSICAL_ADDRESS HostAddress
;
152 EFI_PHYSICAL_ADDRESS MappedHostAddress
;
156 ACPI_HID_DEVICE_PATH AcpiDevicePath
;
157 EFI_DEVICE_PATH_PROTOCOL EndDevicePath
;
158 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH
;
169 } PCI_ROOT_BRIDGE_RESOURCE_APPETURE
;
190 PCI_RESOURCE_TYPE Type
;
197 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32('e', '2', 'p', 'b')
203 UINT64 RootBridgeAttrib
;
208 // Specific for this memory controller: Bus, I/O, Mem
210 PCI_RES_NODE ResAllocNode
[6];
213 // Addressing for Memory and I/O and Bus arrange
226 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
227 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io
;
229 } PCI_ROOT_BRIDGE_INSTANCE
;
233 // Driver Instance Data Macros
235 #define DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) \
236 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
239 #define DRIVER_INSTANCE_FROM_LIST_ENTRY(a) \
240 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE)
244 RootBridgeConstructor (
245 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*Protocol
,
246 IN EFI_HANDLE HostBridgeHandle
,
248 IN PCI_ROOT_BRIDGE_RESOURCE_APPETURE
*ResAppeture