1 | #ifndef _PCI22_H
|
---|
2 | #define _PCI22_H
|
---|
3 |
|
---|
4 | /*++
|
---|
5 |
|
---|
6 | Copyright (c) 1999 Intel Corporation
|
---|
7 |
|
---|
8 | Module Name:
|
---|
9 |
|
---|
10 | pci22.h
|
---|
11 |
|
---|
12 | Abstract:
|
---|
13 | Support for PCI 2.2 standard.
|
---|
14 |
|
---|
15 |
|
---|
16 |
|
---|
17 |
|
---|
18 | Revision History
|
---|
19 |
|
---|
20 | --*/
|
---|
21 |
|
---|
22 | #ifdef SOFT_SDV
|
---|
23 | #define PCI_MAX_BUS 1
|
---|
24 | #else
|
---|
25 | #define PCI_MAX_BUS 255
|
---|
26 | #endif
|
---|
27 |
|
---|
28 | #define PCI_MAX_DEVICE 31
|
---|
29 | #define PCI_MAX_FUNC 7
|
---|
30 |
|
---|
31 | //
|
---|
32 | // Command
|
---|
33 | //
|
---|
34 | #define PCI_VGA_PALETTE_SNOOP_DISABLED 0x20
|
---|
35 |
|
---|
36 | #pragma pack(1)
|
---|
37 | typedef struct {
|
---|
38 | UINT16 VendorId;
|
---|
39 | UINT16 DeviceId;
|
---|
40 | UINT16 Command;
|
---|
41 | UINT16 Status;
|
---|
42 | UINT8 RevisionID;
|
---|
43 | UINT8 ClassCode[3];
|
---|
44 | UINT8 CacheLineSize;
|
---|
45 | UINT8 LaytencyTimer;
|
---|
46 | UINT8 HeaderType;
|
---|
47 | UINT8 BIST;
|
---|
48 | } PCI_DEVICE_INDEPENDENT_REGION;
|
---|
49 |
|
---|
50 | typedef struct {
|
---|
51 | UINT32 Bar[6];
|
---|
52 | UINT32 CISPtr;
|
---|
53 | UINT16 SubsystemVendorID;
|
---|
54 | UINT16 SubsystemID;
|
---|
55 | UINT32 ExpansionRomBar;
|
---|
56 | UINT32 Reserved[2];
|
---|
57 | UINT8 InterruptLine;
|
---|
58 | UINT8 InterruptPin;
|
---|
59 | UINT8 MinGnt;
|
---|
60 | UINT8 MaxLat;
|
---|
61 | } PCI_DEVICE_HEADER_TYPE_REGION;
|
---|
62 |
|
---|
63 | typedef struct {
|
---|
64 | PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
---|
65 | PCI_DEVICE_HEADER_TYPE_REGION Device;
|
---|
66 | } PCI_TYPE00;
|
---|
67 |
|
---|
68 | typedef struct {
|
---|
69 | UINT32 Bar[2];
|
---|
70 | UINT8 PrimaryBus;
|
---|
71 | UINT8 SecondaryBus;
|
---|
72 | UINT8 SubordinateBus;
|
---|
73 | UINT8 SecondaryLatencyTimer;
|
---|
74 | UINT8 IoBase;
|
---|
75 | UINT8 IoLimit;
|
---|
76 | UINT16 SecondaryStatus;
|
---|
77 | UINT16 MemoryBase;
|
---|
78 | UINT16 MemoryLimit;
|
---|
79 | UINT16 PrefetchableMemoryBase;
|
---|
80 | UINT16 PrefetchableMemoryLimit;
|
---|
81 | UINT32 PrefetchableBaseUpper32;
|
---|
82 | UINT32 PrefetchableLimitUpper32;
|
---|
83 | UINT16 IoBaseUpper16;
|
---|
84 | UINT16 IoLimitUpper16;
|
---|
85 | UINT32 Reserved;
|
---|
86 | UINT32 ExpansionRomBAR;
|
---|
87 | UINT8 InterruptLine;
|
---|
88 | UINT8 InterruptPin;
|
---|
89 | UINT16 BridgeControl;
|
---|
90 | } PCI_BRIDGE_CONTROL_REGISTER;
|
---|
91 |
|
---|
92 | #define PCI_CLASS_DISPLAY_CTRL 0x03
|
---|
93 | #define PCI_CLASS_VGA 0x00
|
---|
94 |
|
---|
95 | #define PCI_CLASS_BRIDGE 0x06
|
---|
96 | #define PCI_CLASS_ISA 0x01
|
---|
97 | #define PCI_CLASS_ISA_POSITIVE_DECODE 0x80
|
---|
98 |
|
---|
99 | #define PCI_CLASS_NETWORK 0x02
|
---|
100 | #define PCI_CLASS_ETHERNET 0x00
|
---|
101 |
|
---|
102 | #define HEADER_TYPE_DEVICE 0x00
|
---|
103 | #define HEADER_TYPE_PCI_TO_PCI_BRIDGE 0x01
|
---|
104 | #define HEADER_TYPE_MULTI_FUNCTION 0x80
|
---|
105 | #define HEADER_LAYOUT_CODE 0x7f
|
---|
106 |
|
---|
107 | #define IS_PCI_BRIDGE(_p) ((((_p)->Hdr.HeaderType) & HEADER_LAYOUT_CODE) == HEADER_TYPE_PCI_TO_PCI_BRIDGE)
|
---|
108 | #define IS_PCI_MULTI_FUNC(_p) (((_p)->Hdr.HeaderType) & HEADER_TYPE_MULTI_FUNCTION)
|
---|
109 |
|
---|
110 | typedef struct {
|
---|
111 | PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
---|
112 | PCI_BRIDGE_CONTROL_REGISTER Bridge;
|
---|
113 | } PCI_TYPE01;
|
---|
114 |
|
---|
115 | typedef struct {
|
---|
116 | UINT8 Register;
|
---|
117 | UINT8 Function;
|
---|
118 | UINT8 Device;
|
---|
119 | UINT8 Bus;
|
---|
120 | UINT8 Reserved[4];
|
---|
121 | } DEFIO_PCI_ADDR;
|
---|
122 |
|
---|
123 | typedef struct {
|
---|
124 | UINT32 Reg : 8;
|
---|
125 | UINT32 Func : 3;
|
---|
126 | UINT32 Dev : 5;
|
---|
127 | UINT32 Bus : 8;
|
---|
128 | UINT32 Reserved: 7;
|
---|
129 | UINT32 Enable : 1;
|
---|
130 | } PCI_CONFIG_ACCESS_CF8;
|
---|
131 |
|
---|
132 | #pragma pack()
|
---|
133 |
|
---|
134 | #define EFI_ROOT_BRIDGE_LIST 'eprb'
|
---|
135 | typedef struct {
|
---|
136 | UINTN Signature;
|
---|
137 |
|
---|
138 | UINT16 BridgeNumber;
|
---|
139 | UINT16 PrimaryBus;
|
---|
140 | UINT16 SubordinateBus;
|
---|
141 |
|
---|
142 | EFI_DEVICE_PATH *DevicePath;
|
---|
143 |
|
---|
144 | LIST_ENTRY Link;
|
---|
145 | } PCI_ROOT_BRIDGE_ENTRY;
|
---|
146 |
|
---|
147 |
|
---|
148 | #define PCI_EXPANSION_ROM_HEADER_SIGNATURE 0xaa55
|
---|
149 | #define EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE 0x0EF1
|
---|
150 | #define PCI_DATA_STRUCTURE_SIGNATURE EFI_SIGNATURE_32('P','C','I','R')
|
---|
151 |
|
---|
152 | #pragma pack(1)
|
---|
153 | typedef struct {
|
---|
154 | UINT16 Signature; // 0xaa55
|
---|
155 | UINT8 Reserved[0x16];
|
---|
156 | UINT16 PcirOffset;
|
---|
157 | } PCI_EXPANSION_ROM_HEADER;
|
---|
158 |
|
---|
159 |
|
---|
160 | typedef struct {
|
---|
161 | UINT16 Signature; // 0xaa55
|
---|
162 | UINT16 InitializationSize;
|
---|
163 | UINT16 EfiSignature; // 0x0EF1
|
---|
164 | UINT16 EfiSubsystem;
|
---|
165 | UINT16 EfiMachineType;
|
---|
166 | UINT8 Reserved[0x0A];
|
---|
167 | UINT16 EfiImageHeaderOffset;
|
---|
168 | UINT16 PcirOffset;
|
---|
169 | } EFI_PCI_EXPANSION_ROM_HEADER;
|
---|
170 |
|
---|
171 | typedef struct {
|
---|
172 | UINT32 Signature; // "PCIR"
|
---|
173 | UINT16 VendorId;
|
---|
174 | UINT16 DeviceId;
|
---|
175 | UINT16 Reserved0;
|
---|
176 | UINT16 Length;
|
---|
177 | UINT8 Revision;
|
---|
178 | UINT8 ClassCode[3];
|
---|
179 | UINT16 ImageLength;
|
---|
180 | UINT16 CodeRevision;
|
---|
181 | UINT8 CodeType;
|
---|
182 | UINT8 Indicator;
|
---|
183 | UINT16 Reserved1;
|
---|
184 | } PCI_DATA_STRUCTURE;
|
---|
185 | #pragma pack()
|
---|
186 |
|
---|
187 | #endif
|
---|
188 |
|
---|
189 |
|
---|
190 |
|
---|
191 |
|
---|
192 |
|
---|
193 |
|
---|