ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

pcidef.h
Go to the documentation of this file.
00001 /*
00002  *  $Id: pcidef.h 45685 2010-02-26 11:43:19Z gedmurphy $
00003  *
00004  *  PCI defines and function prototypes
00005  *  Copyright 1994, Drew Eckhardt
00006  *  Copyright 1997--1999 Martin Mares <mj@suse.cz>
00007  *
00008  *  For more information, please consult the following manuals (look at
00009  *  http://www.pcisig.com/ for how to get them):
00010  *
00011  *  PCI BIOS Specification
00012  *  PCI Local Bus Specification
00013  *  PCI to PCI Bridge Specification
00014  *  PCI System Design Guide
00015  *
00016  *  Ported from linux pci.h to ReactOS by:
00017  *    Casper S. Hornstrup (chorns@users.sourceforge.net)
00018  */
00019 
00020 #pragma once
00021 
00022 /*
00023  * Under PCI, each device has 256 bytes of configuration address space,
00024  * of which the first 64 bytes are standardized as follows:
00025  */
00026 #define PCI_VENDOR_ID       0x00    /* 16 bits */
00027 #define PCI_DEVICE_ID       0x02    /* 16 bits */
00028 #define PCI_COMMAND     0x04    /* 16 bits */
00029 #define  PCI_COMMAND_IO     0x1 /* Enable response in I/O space */
00030 #define  PCI_COMMAND_MEMORY 0x2 /* Enable response in Memory space */
00031 #define  PCI_COMMAND_MASTER 0x4 /* Enable bus mastering */
00032 #define  PCI_COMMAND_SPECIAL    0x8 /* Enable response to special cycles */
00033 #define  PCI_COMMAND_INVALIDATE 0x10    /* Use memory write and invalidate */
00034 #define  PCI_COMMAND_VGA_PALETTE 0x20   /* Enable palette snooping */
00035 #define  PCI_COMMAND_PARITY 0x40    /* Enable parity checking */
00036 #define  PCI_COMMAND_WAIT   0x80    /* Enable address/data stepping */
00037 #define  PCI_COMMAND_SERR   0x100   /* Enable SERR */
00038 #define  PCI_COMMAND_FAST_BACK  0x200   /* Enable back-to-back writes */
00039 
00040 #define PCI_STATUS      0x06    /* 16 bits */
00041 #define  PCI_STATUS_CAP_LIST    0x10    /* Support Capability List */
00042 #define  PCI_STATUS_66MHZ   0x20    /* Support 66 Mhz PCI 2.1 bus */
00043 #define  PCI_STATUS_UDF     0x40    /* Support User Definable Features [obsolete] */
00044 #define  PCI_STATUS_FAST_BACK   0x80    /* Accept fast-back to back */
00045 #define  PCI_STATUS_PARITY  0x100   /* Detected parity error */
00046 #define  PCI_STATUS_DEVSEL_MASK 0x600   /* DEVSEL timing */
00047 #define  PCI_STATUS_DEVSEL_FAST 0x000
00048 #define  PCI_STATUS_DEVSEL_MEDIUM 0x200
00049 #define  PCI_STATUS_DEVSEL_SLOW 0x400
00050 #define  PCI_STATUS_SIG_TARGET_ABORT 0x800 /* Set on target abort */
00051 #define  PCI_STATUS_REC_TARGET_ABORT 0x1000 /* Master ack of " */
00052 #define  PCI_STATUS_REC_MASTER_ABORT 0x2000 /* Set on master abort */
00053 #define  PCI_STATUS_SIG_SYSTEM_ERROR 0x4000 /* Set when we drive SERR */
00054 #define  PCI_STATUS_DETECTED_PARITY 0x8000 /* Set on parity error */
00055 
00056 #define PCI_CLASS_REVISION  0x08    /* High 24 bits are class, low 8
00057                        revision */
00058 #define PCI_REVISION_ID         0x08    /* Revision ID */
00059 #define PCI_CLASS_PROG          0x09    /* Reg. Level Programming Interface */
00060 #define PCI_CLASS_DEVICE        0x0a    /* Device class */
00061 
00062 #define PCI_CACHE_LINE_SIZE 0x0c    /* 8 bits */
00063 #define PCI_LATENCY_TIMER   0x0d    /* 8 bits */
00064 #define PCI_HEADER_TYPE     0x0e    /* 8 bits */
00065 #define  PCI_HEADER_TYPE_NORMAL 0
00066 #define  PCI_HEADER_TYPE_BRIDGE 1
00067 #define  PCI_HEADER_TYPE_CARDBUS 2
00068 
00069 #define PCI_BIST        0x0f    /* 8 bits */
00070 #define PCI_BIST_CODE_MASK  0x0f    /* Return result */
00071 #define PCI_BIST_START      0x40    /* 1 to start BIST, 2 secs or less */
00072 #define PCI_BIST_CAPABLE    0x80    /* 1 if BIST capable */
00073 
00074 /*
00075  * Base addresses specify locations in memory or I/O space.
00076  * Decoded size can be determined by writing a value of
00077  * 0xffffffff to the register, and reading it back.  Only
00078  * 1 bits are decoded.
00079  */
00080 #define PCI_BASE_ADDRESS_0  0x10    /* 32 bits */
00081 #define PCI_BASE_ADDRESS_1  0x14    /* 32 bits [htype 0,1 only] */
00082 #define PCI_BASE_ADDRESS_2  0x18    /* 32 bits [htype 0 only] */
00083 #define PCI_BASE_ADDRESS_3  0x1c    /* 32 bits */
00084 #define PCI_BASE_ADDRESS_4  0x20    /* 32 bits */
00085 #define PCI_BASE_ADDRESS_5  0x24    /* 32 bits */
00086 #define  PCI_BASE_ADDRESS_SPACE 0x01    /* 0 = memory, 1 = I/O */
00087 #define  PCI_BASE_ADDRESS_SPACE_IO 0x01
00088 #define  PCI_BASE_ADDRESS_SPACE_MEMORY 0x00
00089 #define  PCI_BASE_ADDRESS_MEM_TYPE_MASK 0x06
00090 #define  PCI_BASE_ADDRESS_MEM_TYPE_32   0x00    /* 32 bit address */
00091 #define  PCI_BASE_ADDRESS_MEM_TYPE_1M   0x02    /* Below 1M [obsolete] */
00092 #define  PCI_BASE_ADDRESS_MEM_TYPE_64   0x04    /* 64 bit address */
00093 #define  PCI_BASE_ADDRESS_MEM_PREFETCH  0x08    /* prefetchable? */
00094 #define  PCI_BASE_ADDRESS_MEM_MASK  (~0x0fUL)
00095 #define  PCI_BASE_ADDRESS_IO_MASK   (~0x03UL)
00096 /* bit 1 is reserved if address_space = 1 */
00097 
00098 /* Header type 0 (normal devices) */
00099 #define PCI_CARDBUS_CIS     0x28
00100 #define PCI_SUBSYSTEM_VENDOR_ID 0x2c
00101 #define PCI_SUBSYSTEM_ID    0x2e
00102 #define PCI_ROM_ADDRESS     0x30    /* Bits 31..11 are address, 10..1 reserved */
00103 #define  PCI_ROM_ADDRESS_ENABLE 0x01
00104 #define PCI_ROM_ADDRESS_MASK    (~0x7ffUL)
00105 
00106 #define PCI_CAPABILITY_LIST 0x34    /* Offset of first capability list entry */
00107 
00108 /* 0x35-0x3b are reserved */
00109 #define PCI_INTERRUPT_LINE  0x3c    /* 8 bits */
00110 #define PCI_INTERRUPT_PIN   0x3d    /* 8 bits */
00111 #define PCI_MIN_GNT     0x3e    /* 8 bits */
00112 #define PCI_MAX_LAT     0x3f    /* 8 bits */
00113 
00114 /* Header type 1 (PCI-to-PCI bridges) */
00115 #define PCI_PRIMARY_BUS     0x18    /* Primary bus number */
00116 #define PCI_SECONDARY_BUS   0x19    /* Secondary bus number */
00117 #define PCI_SUBORDINATE_BUS 0x1a    /* Highest bus number behind the bridge */
00118 #define PCI_SEC_LATENCY_TIMER   0x1b    /* Latency timer for secondary interface */
00119 #define PCI_IO_BASE     0x1c    /* I/O range behind the bridge */
00120 #define PCI_IO_LIMIT        0x1d
00121 #define  PCI_IO_RANGE_TYPE_MASK 0x0f    /* I/O bridging type */
00122 #define  PCI_IO_RANGE_TYPE_16   0x00
00123 #define  PCI_IO_RANGE_TYPE_32   0x01
00124 #define  PCI_IO_RANGE_MASK  ~0x0f
00125 #define PCI_SEC_STATUS      0x1e    /* Secondary status register, only bit 14 used */
00126 #define PCI_MEMORY_BASE     0x20    /* Memory range behind */
00127 #define PCI_MEMORY_LIMIT    0x22
00128 #define  PCI_MEMORY_RANGE_TYPE_MASK 0x0f
00129 #define  PCI_MEMORY_RANGE_MASK  ~0x0f
00130 #define PCI_PREF_MEMORY_BASE    0x24    /* Prefetchable memory range behind */
00131 #define PCI_PREF_MEMORY_LIMIT   0x26
00132 #define  PCI_PREF_RANGE_TYPE_MASK 0x0f
00133 #define  PCI_PREF_RANGE_TYPE_32 0x00
00134 #define  PCI_PREF_RANGE_TYPE_64 0x01
00135 #define  PCI_PREF_RANGE_MASK    ~0x0f
00136 #define PCI_PREF_BASE_UPPER32   0x28    /* Upper half of prefetchable memory range */
00137 #define PCI_PREF_LIMIT_UPPER32  0x2c
00138 #define PCI_IO_BASE_UPPER16 0x30    /* Upper half of I/O addresses */
00139 #define PCI_IO_LIMIT_UPPER16    0x32
00140 /* 0x34 same as for htype 0 */
00141 /* 0x35-0x3b is reserved */
00142 #define PCI_ROM_ADDRESS1    0x38    /* Same as PCI_ROM_ADDRESS, but for htype 1 */
00143 /* 0x3c-0x3d are same as for htype 0 */
00144 #define PCI_BRIDGE_CONTROL  0x3e
00145 #define  PCI_BRIDGE_CTL_PARITY  0x01    /* Enable parity detection on secondary interface */
00146 #define  PCI_BRIDGE_CTL_SERR    0x02    /* The same for SERR forwarding */
00147 #define  PCI_BRIDGE_CTL_NO_ISA  0x04    /* Disable bridging of ISA ports */
00148 #define  PCI_BRIDGE_CTL_VGA 0x08    /* Forward VGA addresses */
00149 #define  PCI_BRIDGE_CTL_MASTER_ABORT 0x20  /* Report master aborts */
00150 #define  PCI_BRIDGE_CTL_BUS_RESET 0x40  /* Secondary bus reset */
00151 #define  PCI_BRIDGE_CTL_FAST_BACK 0x80  /* Fast Back2Back enabled on secondary interface */
00152 
00153 /* Header type 2 (CardBus bridges) */
00154 #define PCI_CB_CAPABILITY_LIST  0x14
00155 /* 0x15 reserved */
00156 #define PCI_CB_SEC_STATUS   0x16    /* Secondary status */
00157 #define PCI_CB_PRIMARY_BUS  0x18    /* PCI bus number */
00158 #define PCI_CB_CARD_BUS     0x19    /* CardBus bus number */
00159 #define PCI_CB_SUBORDINATE_BUS  0x1a    /* Subordinate bus number */
00160 #define PCI_CB_LATENCY_TIMER    0x1b    /* CardBus latency timer */
00161 #define PCI_CB_MEMORY_BASE_0    0x1c
00162 #define PCI_CB_MEMORY_LIMIT_0   0x20
00163 #define PCI_CB_MEMORY_BASE_1    0x24
00164 #define PCI_CB_MEMORY_LIMIT_1   0x28
00165 #define PCI_CB_IO_BASE_0    0x2c
00166 #define PCI_CB_IO_BASE_0_HI 0x2e
00167 #define PCI_CB_IO_LIMIT_0   0x30
00168 #define PCI_CB_IO_LIMIT_0_HI    0x32
00169 #define PCI_CB_IO_BASE_1    0x34
00170 #define PCI_CB_IO_BASE_1_HI 0x36
00171 #define PCI_CB_IO_LIMIT_1   0x38
00172 #define PCI_CB_IO_LIMIT_1_HI    0x3a
00173 #define  PCI_CB_IO_RANGE_MASK   ~0x03
00174 /* 0x3c-0x3d are same as for htype 0 */
00175 #define PCI_CB_BRIDGE_CONTROL   0x3e
00176 #define  PCI_CB_BRIDGE_CTL_PARITY   0x01    /* Similar to standard bridge control register */
00177 #define  PCI_CB_BRIDGE_CTL_SERR     0x02
00178 #define  PCI_CB_BRIDGE_CTL_ISA      0x04
00179 #define  PCI_CB_BRIDGE_CTL_VGA      0x08
00180 #define  PCI_CB_BRIDGE_CTL_MASTER_ABORT 0x20
00181 #define  PCI_CB_BRIDGE_CTL_CB_RESET 0x40    /* CardBus reset */
00182 #define  PCI_CB_BRIDGE_CTL_16BIT_INT    0x80    /* Enable interrupt for 16-bit cards */
00183 #define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100  /* Prefetch enable for both memory regions */
00184 #define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
00185 #define  PCI_CB_BRIDGE_CTL_POST_WRITES  0x400
00186 #define PCI_CB_SUBSYSTEM_VENDOR_ID 0x40
00187 #define PCI_CB_SUBSYSTEM_ID 0x42
00188 #define PCI_CB_LEGACY_MODE_BASE 0x44    /* 16-bit PC Card legacy mode base address (ExCa) */
00189 /* 0x48-0x7f reserved */
00190 
00191 /* Capability lists */
00192 
00193 #define PCI_CAP_LIST_ID     0   /* Capability ID */
00194 #define  PCI_CAP_ID_PM      0x01    /* Power Management */
00195 #define  PCI_CAP_ID_AGP     0x02    /* Accelerated Graphics Port */
00196 #define  PCI_CAP_ID_VPD     0x03    /* Vital Product Data */
00197 #define  PCI_CAP_ID_SLOTID  0x04    /* Slot Identification */
00198 #define  PCI_CAP_ID_MSI     0x05    /* Message Signalled Interrupts */
00199 #define  PCI_CAP_ID_CHSWP   0x06    /* CompactPCI HotSwap */
00200 #define PCI_CAP_LIST_NEXT   1   /* Next capability in the list */
00201 #define PCI_CAP_FLAGS       2   /* Capability defined flags (16 bits) */
00202 #define PCI_CAP_SIZEOF      4
00203 
00204 /* Power Management Registers */
00205 
00206 #define PCI_PM_PMC              2       /* PM Capabilities Register */
00207 #define  PCI_PM_CAP_VER_MASK    0x0007  /* Version */
00208 #define  PCI_PM_CAP_PME_CLOCK   0x0008  /* PME clock required */
00209 #define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */
00210 #define  PCI_PM_CAP_DSI     0x0020  /* Device specific initialization */
00211 #define  PCI_PM_CAP_AUX_POWER   0x01C0  /* Auxilliary power support mask */
00212 #define  PCI_PM_CAP_D1      0x0200  /* D1 power state support */
00213 #define  PCI_PM_CAP_D2      0x0400  /* D2 power state support */
00214 #define  PCI_PM_CAP_PME     0x0800  /* PME pin supported */
00215 #define  PCI_PM_CAP_PME_MASK    0xF800  /* PME Mask of all supported states */
00216 #define  PCI_PM_CAP_PME_D0      0x0800  /* PME# from D0 */
00217 #define  PCI_PM_CAP_PME_D1      0x1000  /* PME# from D1 */
00218 #define  PCI_PM_CAP_PME_D2      0x2000  /* PME# from D2 */
00219 #define  PCI_PM_CAP_PME_D3      0x4000  /* PME# from D3 (hot) */
00220 #define  PCI_PM_CAP_PME_D3cold  0x8000  /* PME# from D3 (cold) */
00221 #define PCI_PM_CTRL     4   /* PM control and status register */
00222 #define  PCI_PM_CTRL_STATE_MASK 0x0003  /* Current power state (D0 to D3) */
00223 #define  PCI_PM_CTRL_PME_ENABLE 0x0100  /* PME pin enable */
00224 #define  PCI_PM_CTRL_DATA_SEL_MASK  0x1e00  /* Data select (??) */
00225 #define  PCI_PM_CTRL_DATA_SCALE_MASK    0x6000  /* Data scale (??) */
00226 #define  PCI_PM_CTRL_PME_STATUS 0x8000  /* PME pin status */
00227 #define PCI_PM_PPB_EXTENSIONS   6   /* PPB support extensions (??) */
00228 #define  PCI_PM_PPB_B2_B3   0x40    /* Stop clock when in D3hot (??) */
00229 #define  PCI_PM_BPCC_ENABLE 0x80    /* Bus power/clock control enable (??) */
00230 #define PCI_PM_DATA_REGISTER    7   /* (??) */
00231 #define PCI_PM_SIZEOF       8
00232 
00233 /* AGP registers */
00234 
00235 #define PCI_AGP_VERSION     2   /* BCD version number */
00236 #define PCI_AGP_RFU     3   /* Rest of capability flags */
00237 #define PCI_AGP_STATUS      4   /* Status register */
00238 #define  PCI_AGP_STATUS_RQ_MASK 0xff000000  /* Maximum number of requests - 1 */
00239 #define  PCI_AGP_STATUS_SBA 0x0200  /* Sideband addressing supported */
00240 #define  PCI_AGP_STATUS_64BIT   0x0020  /* 64-bit addressing supported */
00241 #define  PCI_AGP_STATUS_FW  0x0010  /* FW transfers supported */
00242 #define  PCI_AGP_STATUS_RATE4   0x0004  /* 4x transfer rate supported */
00243 #define  PCI_AGP_STATUS_RATE2   0x0002  /* 2x transfer rate supported */
00244 #define  PCI_AGP_STATUS_RATE1   0x0001  /* 1x transfer rate supported */
00245 #define PCI_AGP_COMMAND     8   /* Control register */
00246 #define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */
00247 #define  PCI_AGP_COMMAND_SBA    0x0200  /* Sideband addressing enabled */
00248 #define  PCI_AGP_COMMAND_AGP    0x0100  /* Allow processing of AGP transactions */
00249 #define  PCI_AGP_COMMAND_64BIT  0x0020  /* Allow processing of 64-bit addresses */
00250 #define  PCI_AGP_COMMAND_FW 0x0010  /* Force FW transfers */
00251 #define  PCI_AGP_COMMAND_RATE4  0x0004  /* Use 4x rate */
00252 #define  PCI_AGP_COMMAND_RATE2  0x0002  /* Use 4x rate */
00253 #define  PCI_AGP_COMMAND_RATE1  0x0001  /* Use 4x rate */
00254 #define PCI_AGP_SIZEOF      12
00255 
00256 /* Slot Identification */
00257 
00258 #define PCI_SID_ESR     2   /* Expansion Slot Register */
00259 #define  PCI_SID_ESR_NSLOTS 0x1f    /* Number of expansion slots available */
00260 #define  PCI_SID_ESR_FIC    0x20    /* First In Chassis Flag */
00261 #define PCI_SID_CHASSIS_NR  3   /* Chassis Number */
00262 
00263 /* Message Signalled Interrupts registers */
00264 
00265 #define PCI_MSI_FLAGS       2   /* Various flags */
00266 #define  PCI_MSI_FLAGS_64BIT    0x80    /* 64-bit addresses allowed */
00267 #define  PCI_MSI_FLAGS_QSIZE    0x70    /* Message queue size configured */
00268 #define  PCI_MSI_FLAGS_QMASK    0x0e    /* Maximum queue size available */
00269 #define  PCI_MSI_FLAGS_ENABLE   0x01    /* MSI feature enabled */
00270 #define PCI_MSI_RFU     3   /* Rest of capability flags */
00271 #define PCI_MSI_ADDRESS_LO  4   /* Lower 32 bits */
00272 #define PCI_MSI_ADDRESS_HI  8   /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
00273 #define PCI_MSI_DATA_32     8   /* 16 bits of data for 32-bit devices */
00274 #define PCI_MSI_DATA_64     12  /* 16 bits of data for 64-bit devices */
00275 
00276 /*
00277  * The PCI interface treats multi-function devices as independent
00278  * devices.  The slot/function address of each device is encoded
00279  * in a single byte as follows:
00280  *
00281  *  7:3 = slot
00282  *  2:0 = function
00283  */
00284 #define PCI_DEVFN(slot,func)    ((((slot) & 0x1f) << 3) | ((func) & 0x07))
00285 #define PCI_SLOT(devfn)     (((devfn) >> 3) & 0x1f)
00286 #define PCI_FUNC(devfn)     ((devfn) & 0x07)
00287 
00288 
00289 /*
00290  *  For PCI devices, the region numbers are assigned this way:
00291  *
00292  *  0-5 standard PCI regions
00293  *  6   expansion ROM
00294  *  7-10    bridges: address space assigned to buses behind the bridge
00295  */
00296 
00297 #define PCI_ROM_RESOURCE 6
00298 #define PCI_BRIDGE_RESOURCES 7
00299 #define PCI_NUM_RESOURCES 11
00300 
00301 #define PCI_REGION_FLAG_MASK 0x0f   /* These bits of resource flags tell us the PCI region flags */

Generated on Fri May 25 2012 04:25:47 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.