194 lines
4.5 KiB
C
194 lines
4.5 KiB
C
|
#ifndef _PCI22_H
|
||
|
#define _PCI22_H
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 Intel Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
pci22.h
|
||
|
|
||
|
Abstract:
|
||
|
Support for PCI 2.2 standard.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
Revision History
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifdef SOFT_SDV
|
||
|
#define PCI_MAX_BUS 1
|
||
|
#else
|
||
|
#define PCI_MAX_BUS 255
|
||
|
#endif
|
||
|
|
||
|
#define PCI_MAX_DEVICE 31
|
||
|
#define PCI_MAX_FUNC 7
|
||
|
|
||
|
/*
|
||
|
* Command
|
||
|
*/
|
||
|
#define PCI_VGA_PALETTE_SNOOP_DISABLED 0x20
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct {
|
||
|
UINT16 VendorId;
|
||
|
UINT16 DeviceId;
|
||
|
UINT16 Command;
|
||
|
UINT16 Status;
|
||
|
UINT8 RevisionID;
|
||
|
UINT8 ClassCode[3];
|
||
|
UINT8 CacheLineSize;
|
||
|
UINT8 LaytencyTimer;
|
||
|
UINT8 HeaderType;
|
||
|
UINT8 BIST;
|
||
|
} PCI_DEVICE_INDEPENDENT_REGION;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT32 Bar[6];
|
||
|
UINT32 CISPtr;
|
||
|
UINT16 SubsystemVendorID;
|
||
|
UINT16 SubsystemID;
|
||
|
UINT32 ExpansionRomBar;
|
||
|
UINT32 Reserved[2];
|
||
|
UINT8 InterruptLine;
|
||
|
UINT8 InterruptPin;
|
||
|
UINT8 MinGnt;
|
||
|
UINT8 MaxLat;
|
||
|
} PCI_DEVICE_HEADER_TYPE_REGION;
|
||
|
|
||
|
typedef struct {
|
||
|
PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
||
|
PCI_DEVICE_HEADER_TYPE_REGION Device;
|
||
|
} PCI_TYPE00;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT32 Bar[2];
|
||
|
UINT8 PrimaryBus;
|
||
|
UINT8 SecondaryBus;
|
||
|
UINT8 SubordinateBus;
|
||
|
UINT8 SecondaryLatencyTimer;
|
||
|
UINT8 IoBase;
|
||
|
UINT8 IoLimit;
|
||
|
UINT16 SecondaryStatus;
|
||
|
UINT16 MemoryBase;
|
||
|
UINT16 MemoryLimit;
|
||
|
UINT16 PrefetchableMemoryBase;
|
||
|
UINT16 PrefetchableMemoryLimit;
|
||
|
UINT32 PrefetchableBaseUpper32;
|
||
|
UINT32 PrefetchableLimitUpper32;
|
||
|
UINT16 IoBaseUpper16;
|
||
|
UINT16 IoLimitUpper16;
|
||
|
UINT32 Reserved;
|
||
|
UINT32 ExpansionRomBAR;
|
||
|
UINT8 InterruptLine;
|
||
|
UINT8 InterruptPin;
|
||
|
UINT16 BridgeControl;
|
||
|
} PCI_BRIDGE_CONTROL_REGISTER;
|
||
|
|
||
|
#define PCI_CLASS_DISPLAY_CTRL 0x03
|
||
|
#define PCI_CLASS_VGA 0x00
|
||
|
|
||
|
#define PCI_CLASS_BRIDGE 0x06
|
||
|
#define PCI_CLASS_ISA 0x01
|
||
|
#define PCI_CLASS_ISA_POSITIVE_DECODE 0x80
|
||
|
|
||
|
#define PCI_CLASS_NETWORK 0x02
|
||
|
#define PCI_CLASS_ETHERNET 0x00
|
||
|
|
||
|
#define HEADER_TYPE_DEVICE 0x00
|
||
|
#define HEADER_TYPE_PCI_TO_PCI_BRIDGE 0x01
|
||
|
#define HEADER_TYPE_MULTI_FUNCTION 0x80
|
||
|
#define HEADER_LAYOUT_CODE 0x7f
|
||
|
|
||
|
#define IS_PCI_BRIDGE(_p) ((((_p)->Hdr.HeaderType) & HEADER_LAYOUT_CODE) == HEADER_TYPE_PCI_TO_PCI_BRIDGE)
|
||
|
#define IS_PCI_MULTI_FUNC(_p) (((_p)->Hdr.HeaderType) & HEADER_TYPE_MULTI_FUNCTION)
|
||
|
|
||
|
typedef struct {
|
||
|
PCI_DEVICE_INDEPENDENT_REGION Hdr;
|
||
|
PCI_BRIDGE_CONTROL_REGISTER Bridge;
|
||
|
} PCI_TYPE01;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT8 Register;
|
||
|
UINT8 Function;
|
||
|
UINT8 Device;
|
||
|
UINT8 Bus;
|
||
|
UINT8 Reserved[4];
|
||
|
} DEFIO_PCI_ADDR;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT32 Reg : 8;
|
||
|
UINT32 Func : 3;
|
||
|
UINT32 Dev : 5;
|
||
|
UINT32 Bus : 8;
|
||
|
UINT32 Reserved: 7;
|
||
|
UINT32 Enable : 1;
|
||
|
} PCI_CONFIG_ACCESS_CF8;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
#define EFI_ROOT_BRIDGE_LIST 'eprb'
|
||
|
typedef struct {
|
||
|
UINTN Signature;
|
||
|
|
||
|
UINT16 BridgeNumber;
|
||
|
UINT16 PrimaryBus;
|
||
|
UINT16 SubordinateBus;
|
||
|
|
||
|
EFI_DEVICE_PATH *DevicePath;
|
||
|
|
||
|
LIST_ENTRY Link;
|
||
|
} PCI_ROOT_BRIDGE_ENTRY;
|
||
|
|
||
|
|
||
|
#define PCI_EXPANSION_ROM_HEADER_SIGNATURE 0xaa55
|
||
|
#define EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE 0x0EF1
|
||
|
#define PCI_DATA_STRUCTURE_SIGNATURE EFI_SIGNATURE_32('P','C','I','R')
|
||
|
|
||
|
#pragma pack(1)
|
||
|
typedef struct {
|
||
|
UINT16 Signature; /* 0xaa55 */
|
||
|
UINT8 Reserved[0x16];
|
||
|
UINT16 PcirOffset;
|
||
|
} PCI_EXPANSION_ROM_HEADER;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
UINT16 Signature; /* 0xaa55 */
|
||
|
UINT16 InitializationSize;
|
||
|
UINT16 EfiSignature; /* 0x0EF1 */
|
||
|
UINT16 EfiSubsystem;
|
||
|
UINT16 EfiMachineType;
|
||
|
UINT8 Reserved[0x0A];
|
||
|
UINT16 EfiImageHeaderOffset;
|
||
|
UINT16 PcirOffset;
|
||
|
} EFI_PCI_EXPANSION_ROM_HEADER;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT32 Signature; /* "PCIR" */
|
||
|
UINT16 VendorId;
|
||
|
UINT16 DeviceId;
|
||
|
UINT16 Reserved0;
|
||
|
UINT16 Length;
|
||
|
UINT8 Revision;
|
||
|
UINT8 ClassCode[3];
|
||
|
UINT16 ImageLength;
|
||
|
UINT16 CodeRevision;
|
||
|
UINT8 CodeType;
|
||
|
UINT8 Indicator;
|
||
|
UINT16 Reserved1;
|
||
|
} PCI_DATA_STRUCTURE;
|
||
|
#pragma pack()
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|