PCI.H
资源名称:pciexp.zip [点击查看]
上传用户:zhuqijet
上传日期:2007-01-04
资源大小:138k
文件大小:4k
源码类别:
驱动编程
开发平台:
Visual C++
- typedef struct _PCI_SLOT_NUMBER {
- union {
- struct {
- ULONG DeviceNumber:5;
- ULONG FunctionNumber:3;
- ULONG Reserved:24;
- } bits;
- ULONG AsULONG;
- } u;
- } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
- #define PCI_TYPE0_ADDRESSES 6
- #define PCI_TYPE1_ADDRESSES 2
- typedef struct _PCI_COMMON_CONFIG {
- USHORT VendorID; // (ro)
- USHORT DeviceID; // (ro)
- USHORT Command; // Device control
- USHORT Status;
- UCHAR RevisionID; // (ro)
- UCHAR ProgIf; // (ro)
- UCHAR SubClass; // (ro)
- UCHAR BaseClass; // (ro)
- UCHAR CacheLineSize; // (ro+)
- UCHAR LatencyTimer; // (ro+)
- UCHAR HeaderType; // (ro)
- UCHAR BIST; // Built in self test
- union {
- struct _PCI_HEADER_TYPE_0 {
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
- ULONG CIS;
- USHORT SubVendorID;
- USHORT SubSystemID;
- ULONG ROMBaseAddress;
- ULONG Reserved2[2];
- UCHAR InterruptLine; //
- UCHAR InterruptPin; // (ro)
- UCHAR MinimumGrant; // (ro)
- UCHAR MaximumLatency; // (ro)
- } type0;
- } u;
- UCHAR DeviceSpecific[192];
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
- #define PCI_MAX_DEVICES 32
- #define PCI_MAX_FUNCTION 8
- #define PCI_INVALID_VENDORID 0xFFFF
- //
- // Bit encodings for PCI_COMMON_CONFIG.HeaderType
- //
- #define PCI_MULTIFUNCTION 0x80
- #define PCI_DEVICE_TYPE 0x00
- #define PCI_BRIDGE_TYPE 0x01
- //
- // Bit encodings for PCI_COMMON_CONFIG.Command
- //
- #define PCI_ENABLE_IO_SPACE 0x0001
- #define PCI_ENABLE_MEMORY_SPACE 0x0002
- #define PCI_ENABLE_BUS_MASTER 0x0004
- #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
- #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
- #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
- #define PCI_ENABLE_PARITY 0x0040 // (ro+)
- #define PCI_ENABLE_WAIT_CYCLE 0x0080 // (ro+)
- #define PCI_ENABLE_SERR 0x0100 // (ro+)
- #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 // (ro)
- //
- // Bit encodings for PCI_COMMON_CONFIG.Status
- //
- #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 // (ro)
- #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
- #define PCI_STATUS_DEVSEL 0x0600 // 2 bits wide
- #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
- #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
- #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
- #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
- #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
- //
- // Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses
- //
- #define PCI_ADDRESS_IO_SPACE 0x00000001 // (ro)
- #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006 // (ro)
- #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008 // (ro)
- #define PCI_TYPE_32BIT 0
- #define PCI_TYPE_20BIT 2
- #define PCI_TYPE_64BIT 4
- //
- // Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses
- //
- #define PCI_ROMADDRESS_ENABLED 0x00000001
- //
- // Reference notes for PCI configuration fields:
- //
- // ro these field are read only. changes to these fields are ignored
- //
- // ro+ these field are intended to be read only and should be initialized
- // by the system to their proper values. However, driver may change
- // these settings.
- //
- // ---
- //
- // All resources comsumed by a PCI device start as unitialized
- // under NT. An uninitialized memory or I/O base address can be
- // determined by checking it's corrisponding enabled bit in the
- // PCI_COMMON_CONFIG.Command value. An InterruptLine is unitialized
- // if it contains the value of -1.
- //