2 The Header file of the Pci Host Bridge Driver
4 Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>
5 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/Metronome.h>
26 #include <Protocol/DevicePath.h>
29 #include <Library/BaseLib.h>
30 #include <Library/DebugLib.h>
31 #include <Library/BaseMemoryLib.h>
32 #include <Library/MemoryAllocationLib.h>
33 #include <Library/UefiLib.h>
34 #include <Library/UefiBootServicesTableLib.h>
35 #include <Library/DxeServicesTableLib.h>
36 #include <Library/DevicePathLib.h>
37 #include <Library/IoLib.h>
38 #include <Library/PciLib.h>
41 // Hard code the host bridge number in the platform.
42 // In this chipset, there is only one host bridge.
44 #define HOST_BRIDGE_NUMBER 1
46 #define MAX_PCI_DEVICE_NUMBER 31
47 #define MAX_PCI_FUNCTION_NUMBER 7
48 #define MAX_PCI_REG_ADDRESS 0xFF
56 #define PCI_HOST_BRIDGE_SIGNATURE SIGNATURE_32('e', 'h', 's', 't')
59 EFI_HANDLE HostBridgeHandle
;
60 UINTN RootBridgeNumber
;
62 BOOLEAN ResourceSubmited
;
64 EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL ResAlloc
;
65 } PCI_HOST_BRIDGE_INSTANCE
;
67 #define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a) \
68 CR(a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)
76 IN EFI_HANDLE ImageHandle
,
77 IN EFI_SYSTEM_TABLE
*SystemTable
81 // HostBridge Resource Allocation interface
86 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
87 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase
93 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
94 IN OUT EFI_HANDLE
*RootBridgeHandle
100 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
101 IN EFI_HANDLE RootBridgeHandle
,
102 OUT UINT64
*Attributes
108 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
109 IN EFI_HANDLE RootBridgeHandle
,
110 OUT VOID
**Configuration
116 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
117 IN EFI_HANDLE RootBridgeHandle
,
118 IN VOID
*Configuration
124 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
125 IN EFI_HANDLE RootBridgeHandle
,
126 IN VOID
*Configuration
131 GetProposedResources(
132 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
133 IN EFI_HANDLE RootBridgeHandle
,
134 OUT VOID
**Configuration
139 PreprocessController (
140 IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
*This
,
141 IN EFI_HANDLE RootBridgeHandle
,
142 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS PciAddress
,
143 IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase
148 // Define resource status constant
150 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
151 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
155 // Driver Instance Data Prototypes
159 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
;
162 EFI_PHYSICAL_ADDRESS HostAddress
;
163 EFI_PHYSICAL_ADDRESS MappedHostAddress
;
167 ACPI_HID_DEVICE_PATH AcpiDevicePath
;
168 EFI_DEVICE_PATH_PROTOCOL EndDevicePath
;
169 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH
;
180 } PCI_ROOT_BRIDGE_RESOURCE_APPETURE
;
201 PCI_RESOURCE_TYPE Type
;
208 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32('e', '2', 'p', 'b')
214 UINT64 RootBridgeAttrib
;
219 // Specific for this memory controller: Bus, I/O, Mem
221 PCI_RES_NODE ResAllocNode
[6];
224 // Addressing for Memory and I/O and Bus arrange
236 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
237 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io
;
239 } PCI_ROOT_BRIDGE_INSTANCE
;
243 // Driver Instance Data Macros
245 #define DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) \
246 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
249 #define DRIVER_INSTANCE_FROM_LIST_ENTRY(a) \
250 CR(a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE)
254 RootBridgeConstructor (
255 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*Protocol
,
256 IN EFI_HANDLE HostBridgeHandle
,
258 IN PCI_ROOT_BRIDGE_RESOURCE_APPETURE
*ResAppeture