Subversion Repositories HelenOS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2726 vana 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