PCI.H
上传用户:zhuqijet
上传日期:2007-01-04
资源大小:138k
文件大小:4k
源码类别:

驱动编程

开发平台:

Visual C++

  1. typedef struct _PCI_SLOT_NUMBER {
  2.     union {
  3.         struct {
  4.             ULONG   DeviceNumber:5;
  5.             ULONG   FunctionNumber:3;
  6.             ULONG   Reserved:24;
  7.         } bits;
  8.         ULONG   AsULONG;
  9.     } u;
  10. } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
  11. #define PCI_TYPE0_ADDRESSES             6
  12. #define PCI_TYPE1_ADDRESSES             2
  13. typedef struct _PCI_COMMON_CONFIG {
  14.     USHORT  VendorID;                   // (ro)
  15.     USHORT  DeviceID;                   // (ro)
  16.     USHORT  Command;                    // Device control
  17.     USHORT  Status;
  18.     UCHAR   RevisionID;                 // (ro)
  19.     UCHAR   ProgIf;                     // (ro)
  20.     UCHAR   SubClass;                   // (ro)
  21.     UCHAR   BaseClass;                  // (ro)
  22.     UCHAR   CacheLineSize;              // (ro+)
  23.     UCHAR   LatencyTimer;               // (ro+)
  24.     UCHAR   HeaderType;                 // (ro)
  25.     UCHAR   BIST;                       // Built in self test
  26.     union {
  27.         struct _PCI_HEADER_TYPE_0 {
  28.             ULONG   BaseAddresses[PCI_TYPE0_ADDRESSES];
  29.             ULONG   CIS;
  30.             USHORT  SubVendorID;
  31.             USHORT  SubSystemID;
  32.             ULONG   ROMBaseAddress;
  33.             ULONG   Reserved2[2];
  34.             UCHAR   InterruptLine;      //
  35.             UCHAR   InterruptPin;       // (ro)
  36.             UCHAR   MinimumGrant;       // (ro)
  37.             UCHAR   MaximumLatency;     // (ro)
  38.         } type0;
  39.     } u;
  40.     UCHAR   DeviceSpecific[192];
  41. } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
  42. #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
  43. #define PCI_MAX_DEVICES                     32
  44. #define PCI_MAX_FUNCTION                    8
  45. #define PCI_INVALID_VENDORID                0xFFFF
  46. //
  47. // Bit encodings for  PCI_COMMON_CONFIG.HeaderType
  48. //
  49. #define PCI_MULTIFUNCTION                   0x80
  50. #define PCI_DEVICE_TYPE                     0x00
  51. #define PCI_BRIDGE_TYPE                     0x01
  52. //
  53. // Bit encodings for PCI_COMMON_CONFIG.Command
  54. //
  55. #define PCI_ENABLE_IO_SPACE                 0x0001
  56. #define PCI_ENABLE_MEMORY_SPACE             0x0002
  57. #define PCI_ENABLE_BUS_MASTER               0x0004
  58. #define PCI_ENABLE_SPECIAL_CYCLES           0x0008
  59. #define PCI_ENABLE_WRITE_AND_INVALIDATE     0x0010
  60. #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE   0x0020
  61. #define PCI_ENABLE_PARITY                   0x0040  // (ro+)
  62. #define PCI_ENABLE_WAIT_CYCLE               0x0080  // (ro+)
  63. #define PCI_ENABLE_SERR                     0x0100  // (ro+)
  64. #define PCI_ENABLE_FAST_BACK_TO_BACK        0x0200  // (ro)
  65. //
  66. // Bit encodings for PCI_COMMON_CONFIG.Status
  67. //
  68. #define PCI_STATUS_FAST_BACK_TO_BACK        0x0080  // (ro)
  69. #define PCI_STATUS_DATA_PARITY_DETECTED     0x0100
  70. #define PCI_STATUS_DEVSEL                   0x0600  // 2 bits wide
  71. #define PCI_STATUS_SIGNALED_TARGET_ABORT    0x0800
  72. #define PCI_STATUS_RECEIVED_TARGET_ABORT    0x1000
  73. #define PCI_STATUS_RECEIVED_MASTER_ABORT    0x2000
  74. #define PCI_STATUS_SIGNALED_SYSTEM_ERROR    0x4000
  75. #define PCI_STATUS_DETECTED_PARITY_ERROR    0x8000
  76. //
  77. // Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses
  78. //
  79. #define PCI_ADDRESS_IO_SPACE                0x00000001  // (ro)
  80. #define PCI_ADDRESS_MEMORY_TYPE_MASK        0x00000006  // (ro)
  81. #define PCI_ADDRESS_MEMORY_PREFETCHABLE     0x00000008  // (ro)
  82. #define PCI_TYPE_32BIT      0
  83. #define PCI_TYPE_20BIT      2
  84. #define PCI_TYPE_64BIT      4
  85. //
  86. // Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses
  87. //
  88. #define PCI_ROMADDRESS_ENABLED              0x00000001
  89. //
  90. // Reference notes for PCI configuration fields:
  91. //
  92. // ro   these field are read only.  changes to these fields are ignored
  93. //
  94. // ro+  these field are intended to be read only and should be initialized
  95. //      by the system to their proper values.  However, driver may change
  96. //      these settings.
  97. //
  98. // ---
  99. //
  100. //      All resources comsumed by a PCI device start as unitialized
  101. //      under NT.  An uninitialized memory or I/O base address can be
  102. //      determined by checking it's corrisponding enabled bit in the
  103. //      PCI_COMMON_CONFIG.Command value.  An InterruptLine is unitialized
  104. //      if it contains the value of -1.
  105. //