Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:12

0001 /*-
0002  * Copyright (c) 1997, Stefan Esser <se@freebsd.org>
0003  * All rights reserved.
0004  *
0005  * New PCI library written from scratch. Defines in this file was taken from
0006  * FreeBSD commit f1d6f4778d2044502209708bc167c05f9aa48615.
0007  * auto-generated pci_ids.h also reused from RTEMS.
0008  * Copyright 2009, Cobham Gaisler AB
0009  *
0010  * Redistribution and use in source and binary forms, with or without
0011  * modification, are permitted provided that the following conditions
0012  * are met:
0013  * 1. Redistributions of source code must retain the above copyright
0014  *    notice unmodified, this list of conditions, and the following
0015  *    disclaimer.
0016  * 2. Redistributions in binary form must reproduce the above copyright
0017  *    notice, this list of conditions and the following disclaimer in the
0018  *    documentation and/or other materials provided with the distribution.
0019  *
0020  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0021  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0022  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0023  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0024  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0025  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0026  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0027  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0028  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0029  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0030  *
0031  * $FreeBSD$
0032  *
0033  */
0034 
0035 #ifndef __PCI_REG_H__
0036 #define __PCI_REG_H__
0037 
0038 /*
0039  * PCIM_xxx: mask to locate subfield in register
0040  * PCIR_xxx: config register offset
0041  * PCIC_xxx: device class
0042  * PCIS_xxx: device subclass
0043  * PCIP_xxx: device programming interface
0044  * PCIV_xxx: PCI vendor ID (only required to fixup ancient devices)
0045  * PCID_xxx: device ID
0046  * PCIY_xxx: capability identification number
0047  * PCIZ_xxx: extended capability identification number
0048  */
0049 
0050 /* some PCI bus constants */
0051 #define PCI_DOMAINMAX   65535   /* highest supported domain number */
0052 #define PCI_BUSMAX  255 /* highest supported bus number */
0053 #define PCI_SLOTMAX 31  /* highest supported slot number */
0054 #define PCI_FUNCMAX 7   /* highest supported function number */
0055 #define PCI_REGMAX  255 /* highest supported config register addr. */
0056 #define PCIE_REGMAX 4095    /* highest supported config register addr. */
0057 #define PCI_MAXHDRTYPE  2
0058 
0059 #define PCIE_ARI_SLOTMAX 0
0060 #define PCIE_ARI_FUNCMAX 255
0061 
0062 #define PCI_RID_BUS_SHIFT   8
0063 #define PCI_RID_SLOT_SHIFT  3
0064 #define PCI_RID_FUNC_SHIFT  0
0065 
0066 #define PCI_RID(bus, slot, func) \
0067     ((((bus) & PCI_BUSMAX) << PCI_RID_BUS_SHIFT) | \
0068     (((slot) & PCI_SLOTMAX) << PCI_RID_SLOT_SHIFT) | \
0069     (((func) & PCI_FUNCMAX) << PCI_RID_FUNC_SHIFT))
0070 
0071 #define PCI_ARI_RID(bus, func) \
0072     ((((bus) & PCI_BUSMAX) << PCI_RID_BUS_SHIFT) | \
0073     (((func) & PCIE_ARI_FUNCMAX) << PCI_RID_FUNC_SHIFT))
0074 
0075 #define PCI_RID2BUS(rid) (((rid) >> PCI_RID_BUS_SHIFT) & PCI_BUSMAX)
0076 #define PCI_RID2SLOT(rid) (((rid) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX)
0077 #define PCI_RID2FUNC(rid) (((rid) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX)
0078 
0079 #define PCIE_ARI_SLOT(func) (((func) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX)
0080 #define PCIE_ARI_FUNC(func) (((func) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX)
0081 
0082 /* PCI config header registers for all devices */
0083 
0084 #define PCIR_DEVVENDOR  0x00
0085 #define PCIR_VENDOR 0x00
0086 #define PCIR_DEVICE 0x02
0087 #define PCIR_COMMAND    0x04
0088 #define PCIM_CMD_PORTEN     0x0001
0089 #define PCIM_CMD_MEMEN      0x0002
0090 #define PCIM_CMD_BUSMASTEREN    0x0004
0091 #define PCIM_CMD_SPECIALEN  0x0008
0092 #define PCIM_CMD_MWRICEN    0x0010
0093 #define PCIM_CMD_PERRESPEN  0x0040
0094 #define PCIM_CMD_SERRESPEN  0x0100
0095 #define PCIM_CMD_BACKTOBACK 0x0200
0096 #define PCIM_CMD_INTxDIS    0x0400
0097 #define PCIR_STATUS 0x06
0098 #define PCIM_STATUS_INTxSTATE   0x0008
0099 #define PCIM_STATUS_CAPPRESENT  0x0010
0100 #define PCIM_STATUS_66CAPABLE   0x0020
0101 #define PCIM_STATUS_BACKTOBACK  0x0080
0102 #define PCIM_STATUS_MDPERR  0x0100
0103 #define PCIM_STATUS_SEL_FAST    0x0000
0104 #define PCIM_STATUS_SEL_MEDIMUM 0x0200
0105 #define PCIM_STATUS_SEL_SLOW    0x0400
0106 #define PCIM_STATUS_SEL_MASK    0x0600
0107 #define PCIM_STATUS_STABORT 0x0800
0108 #define PCIM_STATUS_RTABORT 0x1000
0109 #define PCIM_STATUS_RMABORT 0x2000
0110 #define PCIM_STATUS_SERR    0x4000
0111 #define PCIM_STATUS_PERR    0x8000
0112 #define PCIR_REVID  0x08
0113 #define PCIR_PROGIF 0x09
0114 #define PCIR_SUBCLASS   0x0a
0115 #define PCIR_CLASS  0x0b
0116 #define PCIR_CACHELNSZ  0x0c
0117 #define PCIR_LATTIMER   0x0d
0118 #define PCIR_HDRTYPE    0x0e
0119 #define PCIM_HDRTYPE        0x7f
0120 #define PCIM_HDRTYPE_NORMAL 0x00
0121 #define PCIM_HDRTYPE_BRIDGE 0x01
0122 #define PCIM_HDRTYPE_CARDBUS    0x02
0123 #define PCIM_MFDEV      0x80
0124 #define PCIR_BIST   0x0f
0125 
0126 /* Capability Register Offsets */
0127 
0128 #define PCICAP_ID   0x0
0129 #define PCICAP_NEXTPTR  0x1
0130 
0131 /* Capability Identification Numbers */
0132 
0133 #define PCIY_PMG    0x01    /* PCI Power Management */
0134 #define PCIY_AGP    0x02    /* AGP */
0135 #define PCIY_VPD    0x03    /* Vital Product Data */
0136 #define PCIY_SLOTID 0x04    /* Slot Identification */
0137 #define PCIY_MSI    0x05    /* Message Signaled Interrupts */
0138 #define PCIY_CHSWP  0x06    /* CompactPCI Hot Swap */
0139 #define PCIY_PCIX   0x07    /* PCI-X */
0140 #define PCIY_HT     0x08    /* HyperTransport */
0141 #define PCIY_VENDOR 0x09    /* Vendor Unique */
0142 #define PCIY_DEBUG  0x0a    /* Debug port */
0143 #define PCIY_CRES   0x0b    /* CompactPCI central resource control */
0144 #define PCIY_HOTPLUG    0x0c    /* PCI Hot-Plug */
0145 #define PCIY_SUBVENDOR  0x0d    /* PCI-PCI bridge subvendor ID */
0146 #define PCIY_AGP8X  0x0e    /* AGP 8x */
0147 #define PCIY_SECDEV 0x0f    /* Secure Device */
0148 #define PCIY_EXPRESS    0x10    /* PCI Express */
0149 #define PCIY_MSIX   0x11    /* MSI-X */
0150 #define PCIY_SATA   0x12    /* SATA */
0151 #define PCIY_PCIAF  0x13    /* PCI Advanced Features */
0152 
0153 /* Extended Capability Register Fields */
0154 
0155 #define PCIR_EXTCAP 0x100
0156 #define PCIM_EXTCAP_ID      0x0000ffff
0157 #define PCIM_EXTCAP_VER     0x000f0000
0158 #define PCIM_EXTCAP_NEXTPTR 0xfff00000
0159 #define PCI_EXTCAP_ID(ecap) ((ecap) & PCIM_EXTCAP_ID)
0160 #define PCI_EXTCAP_VER(ecap)    (((ecap) & PCIM_EXTCAP_VER) >> 16)
0161 #define PCI_EXTCAP_NEXTPTR(ecap) (((ecap) & PCIM_EXTCAP_NEXTPTR) >> 20)
0162 
0163 /* Extended Capability Identification Numbers */
0164 
0165 #define PCIZ_AER    0x0001  /* Advanced Error Reporting */
0166 #define PCIZ_VC     0x0002  /* Virtual Channel if MFVC Ext Cap not set */
0167 #define PCIZ_SERNUM 0x0003  /* Device Serial Number */
0168 #define PCIZ_PWRBDGT    0x0004  /* Power Budgeting */
0169 #define PCIZ_RCLINK_DCL 0x0005  /* Root Complex Link Declaration */
0170 #define PCIZ_RCLINK_CTL 0x0006  /* Root Complex Internal Link Control */
0171 #define PCIZ_RCEC_ASSOC 0x0007  /* Root Complex Event Collector Association */
0172 #define PCIZ_MFVC   0x0008  /* Multi-Function Virtual Channel */
0173 #define PCIZ_VC2    0x0009  /* Virtual Channel if MFVC Ext Cap set */
0174 #define PCIZ_RCRB   0x000a  /* RCRB Header */
0175 #define PCIZ_VENDOR 0x000b  /* Vendor Unique */
0176 #define PCIZ_CAC    0x000c  /* Configuration Access Correction -- obsolete */
0177 #define PCIZ_ACS    0x000d  /* Access Control Services */
0178 #define PCIZ_ARI    0x000e  /* Alternative Routing-ID Interpretation */
0179 #define PCIZ_ATS    0x000f  /* Address Translation Services */
0180 #define PCIZ_SRIOV  0x0010  /* Single Root IO Virtualization */
0181 #define PCIZ_MRIOV  0x0011  /* Multiple Root IO Virtualization */
0182 #define PCIZ_MULTICAST  0x0012  /* Multicast */
0183 #define PCIZ_PAGE_REQ   0x0013  /* Page Request */
0184 #define PCIZ_AMD    0x0014  /* Reserved for AMD */
0185 #define PCIZ_RESIZE_BAR 0x0015  /* Resizable BAR */
0186 #define PCIZ_DPA    0x0016  /* Dynamic Power Allocation */
0187 #define PCIZ_TPH_REQ    0x0017  /* TPH Requester */
0188 #define PCIZ_LTR    0x0018  /* Latency Tolerance Reporting */
0189 #define PCIZ_SEC_PCIE   0x0019  /* Secondary PCI Express */
0190 #define PCIZ_PMUX   0x001a  /* Protocol Multiplexing */
0191 #define PCIZ_PASID  0x001b  /* Process Address Space ID */
0192 #define PCIZ_LN_REQ 0x001c  /* LN Requester */
0193 #define PCIZ_DPC    0x001d  /* Downstream Porto Containment */
0194 #define PCIZ_L1PM   0x001e  /* L1 PM Substates */
0195 
0196 /* config registers for header type 0 devices */
0197 
0198 #define PCIR_BARS   0x10
0199 #define PCIR_BAR(x)     (PCIR_BARS + (x) * 4)
0200 #define PCIR_MAX_BAR_0      5
0201 #define PCI_RID2BAR(rid)    (((rid) - PCIR_BARS) / 4)
0202 #define PCI_BAR_IO(x)       (((x) & PCIM_BAR_SPACE) == PCIM_BAR_IO_SPACE)
0203 #define PCI_BAR_MEM(x)      (((x) & PCIM_BAR_SPACE) == PCIM_BAR_MEM_SPACE)
0204 #define PCIM_BAR_SPACE      0x00000001
0205 #define PCIM_BAR_MEM_SPACE  0
0206 #define PCIM_BAR_IO_SPACE   1
0207 #define PCIM_BAR_MEM_TYPE   0x00000006
0208 #define PCIM_BAR_MEM_32     0
0209 #define PCIM_BAR_MEM_1MB    2   /* Locate below 1MB in PCI <= 2.1 */
0210 #define PCIM_BAR_MEM_64     4
0211 #define PCIM_BAR_MEM_PREFETCH   0x00000008
0212 #define PCIM_BAR_MEM_BASE   0xfffffffffffffff0ULL
0213 #define PCIM_BAR_IO_RESERVED    0x00000002
0214 #define PCIM_BAR_IO_BASE    0xfffffffc
0215 #define PCIR_CIS    0x28
0216 #define PCIM_CIS_ASI_MASK   0x00000007
0217 #define PCIM_CIS_ASI_CONFIG 0
0218 #define PCIM_CIS_ASI_BAR0   1
0219 #define PCIM_CIS_ASI_BAR1   2
0220 #define PCIM_CIS_ASI_BAR2   3
0221 #define PCIM_CIS_ASI_BAR3   4
0222 #define PCIM_CIS_ASI_BAR4   5
0223 #define PCIM_CIS_ASI_BAR5   6
0224 #define PCIM_CIS_ASI_ROM    7
0225 #define PCIM_CIS_ADDR_MASK  0x0ffffff8
0226 #define PCIM_CIS_ROM_MASK   0xf0000000
0227 #define PCIM_CIS_CONFIG_MASK    0xff
0228 #define PCIR_SUBVEND_0  0x2c
0229 #define PCIR_SUBDEV_0   0x2e
0230 #define PCIR_BIOS   0x30
0231 #define PCIM_BIOS_ENABLE    0x01
0232 #define PCIM_BIOS_ADDR_MASK 0xfffff800
0233 #define PCIR_CAP_PTR    0x34
0234 #define PCIR_INTLINE    0x3c
0235 #define PCIR_INTPIN 0x3d
0236 #define PCIR_MINGNT 0x3e
0237 #define PCIR_MAXLAT 0x3f
0238 
0239 /* config registers for header type 1 (PCI-to-PCI bridge) devices */
0240 
0241 #define PCIR_MAX_BAR_1  1
0242 #define PCIR_SECSTAT_1  0x1e
0243 
0244 #define PCIR_PRIBUS_1   0x18
0245 #define PCIR_SECBUS_1   0x19
0246 #define PCIR_SUBBUS_1   0x1a
0247 #define PCIR_SECLAT_1   0x1b
0248 
0249 #define PCIR_IOBASEL_1  0x1c
0250 #define PCIR_IOLIMITL_1 0x1d
0251 #define PCIR_IOBASEH_1  0x30
0252 #define PCIR_IOLIMITH_1 0x32
0253 #define PCIM_BRIO_16        0x0
0254 #define PCIM_BRIO_32        0x1
0255 #define PCIM_BRIO_MASK      0xf
0256 
0257 #define PCIR_MEMBASE_1  0x20
0258 #define PCIR_MEMLIMIT_1 0x22
0259 
0260 #define PCIR_PMBASEL_1  0x24
0261 #define PCIR_PMLIMITL_1 0x26
0262 #define PCIR_PMBASEH_1  0x28
0263 #define PCIR_PMLIMITH_1 0x2c
0264 #define PCIM_BRPM_32        0x0
0265 #define PCIM_BRPM_64        0x1
0266 #define PCIM_BRPM_MASK      0xf
0267 
0268 #define PCIR_BIOS_1 0x38
0269 #define PCIR_BRIDGECTL_1 0x3e
0270 
0271 /* config registers for header type 2 (CardBus) devices */
0272 
0273 #define PCIR_MAX_BAR_2  0
0274 #define PCIR_CAP_PTR_2  0x14
0275 #define PCIR_SECSTAT_2  0x16
0276 
0277 #define PCIR_PRIBUS_2   0x18
0278 #define PCIR_SECBUS_2   0x19
0279 #define PCIR_SUBBUS_2   0x1a
0280 #define PCIR_SECLAT_2   0x1b
0281 
0282 #define PCIR_MEMBASE0_2 0x1c
0283 #define PCIR_MEMLIMIT0_2 0x20
0284 #define PCIR_MEMBASE1_2 0x24
0285 #define PCIR_MEMLIMIT1_2 0x28
0286 #define PCIR_IOBASE0_2  0x2c
0287 #define PCIR_IOLIMIT0_2 0x30
0288 #define PCIR_IOBASE1_2  0x34
0289 #define PCIR_IOLIMIT1_2 0x38
0290 
0291 #define PCIR_BRIDGECTL_2 0x3e
0292 
0293 #define PCIR_SUBVEND_2  0x40
0294 #define PCIR_SUBDEV_2   0x42
0295 
0296 #define PCIR_PCCARDIF_2 0x44
0297 
0298 /* PCI device class, subclass and programming interface definitions */
0299 
0300 #define PCIC_OLD    0x00
0301 #define PCIS_OLD_NONVGA     0x00
0302 #define PCIS_OLD_VGA        0x01
0303 
0304 #define PCIC_STORAGE    0x01
0305 #define PCIS_STORAGE_SCSI   0x00
0306 #define PCIS_STORAGE_IDE    0x01
0307 #define PCIP_STORAGE_IDE_MODEPRIM   0x01
0308 #define PCIP_STORAGE_IDE_PROGINDPRIM    0x02
0309 #define PCIP_STORAGE_IDE_MODESEC    0x04
0310 #define PCIP_STORAGE_IDE_PROGINDSEC 0x08
0311 #define PCIP_STORAGE_IDE_MASTERDEV  0x80
0312 #define PCIS_STORAGE_FLOPPY 0x02
0313 #define PCIS_STORAGE_IPI    0x03
0314 #define PCIS_STORAGE_RAID   0x04
0315 #define PCIS_STORAGE_ATA_ADMA   0x05
0316 #define PCIS_STORAGE_SATA   0x06
0317 #define PCIP_STORAGE_SATA_AHCI_1_0  0x01
0318 #define PCIS_STORAGE_SAS    0x07
0319 #define PCIS_STORAGE_NVM    0x08
0320 #define PCIP_STORAGE_NVM_NVMHCI_1_0 0x01
0321 #define PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0  0x02
0322 #define PCIS_STORAGE_OTHER  0x80
0323 
0324 #define PCIC_NETWORK    0x02
0325 #define PCIS_NETWORK_ETHERNET   0x00
0326 #define PCIS_NETWORK_TOKENRING  0x01
0327 #define PCIS_NETWORK_FDDI   0x02
0328 #define PCIS_NETWORK_ATM    0x03
0329 #define PCIS_NETWORK_ISDN   0x04
0330 #define PCIS_NETWORK_WORLDFIP   0x05
0331 #define PCIS_NETWORK_PICMG  0x06
0332 #define PCIS_NETWORK_OTHER  0x80
0333 
0334 #define PCIC_DISPLAY    0x03
0335 #define PCIS_DISPLAY_VGA    0x00
0336 #define PCIS_DISPLAY_XGA    0x01
0337 #define PCIS_DISPLAY_3D     0x02
0338 #define PCIS_DISPLAY_OTHER  0x80
0339 
0340 #define PCIC_MULTIMEDIA 0x04
0341 #define PCIS_MULTIMEDIA_VIDEO   0x00
0342 #define PCIS_MULTIMEDIA_AUDIO   0x01
0343 #define PCIS_MULTIMEDIA_TELE    0x02
0344 #define PCIS_MULTIMEDIA_HDA 0x03
0345 #define PCIS_MULTIMEDIA_OTHER   0x80
0346 
0347 #define PCIC_MEMORY 0x05
0348 #define PCIS_MEMORY_RAM     0x00
0349 #define PCIS_MEMORY_FLASH   0x01
0350 #define PCIS_MEMORY_OTHER   0x80
0351 
0352 #define PCIC_BRIDGE 0x06
0353 #define PCIS_BRIDGE_HOST    0x00
0354 #define PCIS_BRIDGE_ISA     0x01
0355 #define PCIS_BRIDGE_EISA    0x02
0356 #define PCIS_BRIDGE_MCA     0x03
0357 #define PCIS_BRIDGE_PCI     0x04
0358 #define PCIP_BRIDGE_PCI_SUBTRACTIVE 0x01
0359 #define PCIS_BRIDGE_PCMCIA  0x05
0360 #define PCIS_BRIDGE_NUBUS   0x06
0361 #define PCIS_BRIDGE_CARDBUS 0x07
0362 #define PCIS_BRIDGE_RACEWAY 0x08
0363 #define PCIS_BRIDGE_PCI_TRANSPARENT 0x09
0364 #define PCIS_BRIDGE_INFINIBAND  0x0a
0365 #define PCIS_BRIDGE_OTHER   0x80
0366 
0367 #define PCIC_SIMPLECOMM 0x07
0368 #define PCIS_SIMPLECOMM_UART    0x00
0369 #define PCIP_SIMPLECOMM_UART_8250   0x00
0370 #define PCIP_SIMPLECOMM_UART_16450A 0x01
0371 #define PCIP_SIMPLECOMM_UART_16550A 0x02
0372 #define PCIP_SIMPLECOMM_UART_16650A 0x03
0373 #define PCIP_SIMPLECOMM_UART_16750A 0x04
0374 #define PCIP_SIMPLECOMM_UART_16850A 0x05
0375 #define PCIP_SIMPLECOMM_UART_16950A 0x06
0376 #define PCIS_SIMPLECOMM_PAR 0x01
0377 #define PCIS_SIMPLECOMM_MULSER  0x02
0378 #define PCIS_SIMPLECOMM_MODEM   0x03
0379 #define PCIS_SIMPLECOMM_GPIB    0x04
0380 #define PCIS_SIMPLECOMM_SMART_CARD 0x05
0381 #define PCIS_SIMPLECOMM_OTHER   0x80
0382 
0383 #define PCIC_BASEPERIPH 0x08
0384 #define PCIS_BASEPERIPH_PIC 0x00
0385 #define PCIP_BASEPERIPH_PIC_8259A   0x00
0386 #define PCIP_BASEPERIPH_PIC_ISA     0x01
0387 #define PCIP_BASEPERIPH_PIC_EISA    0x02
0388 #define PCIP_BASEPERIPH_PIC_IO_APIC 0x10
0389 #define PCIP_BASEPERIPH_PIC_IOX_APIC    0x20
0390 #define PCIS_BASEPERIPH_DMA 0x01
0391 #define PCIS_BASEPERIPH_TIMER   0x02
0392 #define PCIS_BASEPERIPH_RTC 0x03
0393 #define PCIS_BASEPERIPH_PCIHOT  0x04
0394 #define PCIS_BASEPERIPH_SDHC    0x05
0395 #define PCIS_BASEPERIPH_IOMMU   0x06
0396 #define PCIS_BASEPERIPH_OTHER   0x80
0397 
0398 #define PCIC_INPUTDEV   0x09
0399 #define PCIS_INPUTDEV_KEYBOARD  0x00
0400 #define PCIS_INPUTDEV_DIGITIZER 0x01
0401 #define PCIS_INPUTDEV_MOUSE 0x02
0402 #define PCIS_INPUTDEV_SCANNER   0x03
0403 #define PCIS_INPUTDEV_GAMEPORT  0x04
0404 #define PCIS_INPUTDEV_OTHER 0x80
0405 
0406 #define PCIC_DOCKING    0x0a
0407 #define PCIS_DOCKING_GENERIC    0x00
0408 #define PCIS_DOCKING_OTHER  0x80
0409 
0410 #define PCIC_PROCESSOR  0x0b
0411 #define PCIS_PROCESSOR_386  0x00
0412 #define PCIS_PROCESSOR_486  0x01
0413 #define PCIS_PROCESSOR_PENTIUM  0x02
0414 #define PCIS_PROCESSOR_ALPHA    0x10
0415 #define PCIS_PROCESSOR_POWERPC  0x20
0416 #define PCIS_PROCESSOR_MIPS 0x30
0417 #define PCIS_PROCESSOR_COPROC   0x40
0418 
0419 #define PCIC_SERIALBUS  0x0c
0420 #define PCIS_SERIALBUS_FW   0x00
0421 #define PCIS_SERIALBUS_ACCESS   0x01
0422 #define PCIS_SERIALBUS_SSA  0x02
0423 #define PCIS_SERIALBUS_USB  0x03
0424 #define PCIP_SERIALBUS_USB_UHCI     0x00
0425 #define PCIP_SERIALBUS_USB_OHCI     0x10
0426 #define PCIP_SERIALBUS_USB_EHCI     0x20
0427 #define PCIP_SERIALBUS_USB_XHCI     0x30
0428 #define PCIP_SERIALBUS_USB_DEVICE   0xfe
0429 #define PCIS_SERIALBUS_FC   0x04
0430 #define PCIS_SERIALBUS_SMBUS    0x05
0431 #define PCIS_SERIALBUS_INFINIBAND 0x06
0432 #define PCIS_SERIALBUS_IPMI 0x07
0433 #define PCIP_SERIALBUS_IPMI_SMIC    0x00
0434 #define PCIP_SERIALBUS_IPMI_KCS     0x01
0435 #define PCIP_SERIALBUS_IPMI_BT      0x02
0436 #define PCIS_SERIALBUS_SERCOS   0x08
0437 #define PCIS_SERIALBUS_CANBUS   0x09
0438 
0439 #define PCIC_WIRELESS   0x0d
0440 #define PCIS_WIRELESS_IRDA  0x00
0441 #define PCIS_WIRELESS_IR    0x01
0442 #define PCIS_WIRELESS_RF    0x10
0443 #define PCIS_WIRELESS_BLUETOOTH 0x11
0444 #define PCIS_WIRELESS_BROADBAND 0x12
0445 #define PCIS_WIRELESS_80211A    0x20
0446 #define PCIS_WIRELESS_80211B    0x21
0447 #define PCIS_WIRELESS_OTHER 0x80
0448 
0449 #define PCIC_INTELLIIO  0x0e
0450 #define PCIS_INTELLIIO_I2O  0x00
0451 
0452 #define PCIC_SATCOM 0x0f
0453 #define PCIS_SATCOM_TV      0x01
0454 #define PCIS_SATCOM_AUDIO   0x02
0455 #define PCIS_SATCOM_VOICE   0x03
0456 #define PCIS_SATCOM_DATA    0x04
0457 
0458 #define PCIC_CRYPTO 0x10
0459 #define PCIS_CRYPTO_NETCOMP 0x00
0460 #define PCIS_CRYPTO_ENTERTAIN   0x10
0461 #define PCIS_CRYPTO_OTHER   0x80
0462 
0463 #define PCIC_DASP   0x11
0464 #define PCIS_DASP_DPIO      0x00
0465 #define PCIS_DASP_PERFCNTRS 0x01
0466 #define PCIS_DASP_COMM_SYNC 0x10
0467 #define PCIS_DASP_MGMT_CARD 0x20
0468 #define PCIS_DASP_OTHER     0x80
0469 
0470 #define PCIC_OTHER  0xff
0471 
0472 /* Bridge Control Values. */
0473 #define PCIB_BCR_PERR_ENABLE        0x0001
0474 #define PCIB_BCR_SERR_ENABLE        0x0002
0475 #define PCIB_BCR_ISA_ENABLE     0x0004
0476 #define PCIB_BCR_VGA_ENABLE     0x0008
0477 #define PCIB_BCR_MASTER_ABORT_MODE  0x0020
0478 #define PCIB_BCR_SECBUS_RESET       0x0040
0479 #define PCIB_BCR_SECBUS_BACKTOBACK  0x0080
0480 #define PCIB_BCR_PRI_DISCARD_TIMEOUT    0x0100
0481 #define PCIB_BCR_SEC_DISCARD_TIMEOUT    0x0200
0482 #define PCIB_BCR_DISCARD_TIMER_STATUS   0x0400
0483 #define PCIB_BCR_DISCARD_TIMER_SERREN   0x0800
0484 
0485 /* PCI power manangement */
0486 #define PCIR_POWER_CAP      0x2
0487 #define PCIM_PCAP_SPEC          0x0007
0488 #define PCIM_PCAP_PMEREQCLK     0x0008
0489 #define PCIM_PCAP_DEVSPECINIT       0x0020
0490 #define PCIM_PCAP_AUXPWR_0      0x0000
0491 #define PCIM_PCAP_AUXPWR_55     0x0040
0492 #define PCIM_PCAP_AUXPWR_100        0x0080
0493 #define PCIM_PCAP_AUXPWR_160        0x00c0
0494 #define PCIM_PCAP_AUXPWR_220        0x0100
0495 #define PCIM_PCAP_AUXPWR_270        0x0140
0496 #define PCIM_PCAP_AUXPWR_320        0x0180
0497 #define PCIM_PCAP_AUXPWR_375        0x01c0
0498 #define PCIM_PCAP_AUXPWRMASK        0x01c0
0499 #define PCIM_PCAP_D1SUPP        0x0200
0500 #define PCIM_PCAP_D2SUPP        0x0400
0501 #define PCIM_PCAP_D0PME         0x0800
0502 #define PCIM_PCAP_D1PME         0x1000
0503 #define PCIM_PCAP_D2PME         0x2000
0504 #define PCIM_PCAP_D3PME_HOT     0x4000
0505 #define PCIM_PCAP_D3PME_COLD        0x8000
0506 
0507 #define PCIR_POWER_STATUS   0x4
0508 #define PCIM_PSTAT_D0           0x0000
0509 #define PCIM_PSTAT_D1           0x0001
0510 #define PCIM_PSTAT_D2           0x0002
0511 #define PCIM_PSTAT_D3           0x0003
0512 #define PCIM_PSTAT_DMASK        0x0003
0513 #define PCIM_PSTAT_NOSOFTRESET      0x0008
0514 #define PCIM_PSTAT_PMEENABLE        0x0100
0515 #define PCIM_PSTAT_D0POWER      0x0000
0516 #define PCIM_PSTAT_D1POWER      0x0200
0517 #define PCIM_PSTAT_D2POWER      0x0400
0518 #define PCIM_PSTAT_D3POWER      0x0600
0519 #define PCIM_PSTAT_D0HEAT       0x0800
0520 #define PCIM_PSTAT_D1HEAT       0x0a00
0521 #define PCIM_PSTAT_D2HEAT       0x0c00
0522 #define PCIM_PSTAT_D3HEAT       0x0e00
0523 #define PCIM_PSTAT_DATASELMASK      0x1e00
0524 #define PCIM_PSTAT_DATAUNKN     0x0000
0525 #define PCIM_PSTAT_DATADIV10        0x2000
0526 #define PCIM_PSTAT_DATADIV100       0x4000
0527 #define PCIM_PSTAT_DATADIV1000      0x6000
0528 #define PCIM_PSTAT_DATADIVMASK      0x6000
0529 #define PCIM_PSTAT_PME          0x8000
0530 
0531 #define PCIR_POWER_BSE      0x6
0532 #define PCIM_PMCSR_BSE_D3B3     0x00
0533 #define PCIM_PMCSR_BSE_D3B2     0x40
0534 #define PCIM_PMCSR_BSE_BPCCE        0x80
0535 
0536 #define PCIR_POWER_DATA     0x7
0537 
0538 /* VPD capability registers */
0539 #define PCIR_VPD_ADDR       0x2
0540 #define PCIR_VPD_DATA       0x4
0541 
0542 /* PCI Message Signalled Interrupts (MSI) */
0543 #define PCIR_MSI_CTRL       0x2
0544 #define PCIM_MSICTRL_VECTOR     0x0100
0545 #define PCIM_MSICTRL_64BIT      0x0080
0546 #define PCIM_MSICTRL_MME_MASK       0x0070
0547 #define PCIM_MSICTRL_MME_1      0x0000
0548 #define PCIM_MSICTRL_MME_2      0x0010
0549 #define PCIM_MSICTRL_MME_4      0x0020
0550 #define PCIM_MSICTRL_MME_8      0x0030
0551 #define PCIM_MSICTRL_MME_16     0x0040
0552 #define PCIM_MSICTRL_MME_32     0x0050
0553 #define PCIM_MSICTRL_MMC_MASK       0x000E
0554 #define PCIM_MSICTRL_MMC_1      0x0000
0555 #define PCIM_MSICTRL_MMC_2      0x0002
0556 #define PCIM_MSICTRL_MMC_4      0x0004
0557 #define PCIM_MSICTRL_MMC_8      0x0006
0558 #define PCIM_MSICTRL_MMC_16     0x0008
0559 #define PCIM_MSICTRL_MMC_32     0x000A
0560 #define PCIM_MSICTRL_MSI_ENABLE     0x0001
0561 #define PCIR_MSI_ADDR       0x4
0562 #define PCIR_MSI_ADDR_HIGH  0x8
0563 #define PCIR_MSI_DATA       0x8
0564 #define PCIR_MSI_DATA_64BIT 0xc
0565 #define PCIR_MSI_MASK       0x10
0566 #define PCIR_MSI_PENDING    0x14
0567 
0568 /* PCI-X definitions */
0569 
0570 /* For header type 0 devices */
0571 #define PCIXR_COMMAND       0x2
0572 #define PCIXM_COMMAND_DPERR_E       0x0001  /* Data Parity Error Recovery */
0573 #define PCIXM_COMMAND_ERO       0x0002  /* Enable Relaxed Ordering */
0574 #define PCIXM_COMMAND_MAX_READ      0x000c  /* Maximum Burst Read Count */
0575 #define PCIXM_COMMAND_MAX_READ_512  0x0000
0576 #define PCIXM_COMMAND_MAX_READ_1024 0x0004
0577 #define PCIXM_COMMAND_MAX_READ_2048 0x0008
0578 #define PCIXM_COMMAND_MAX_READ_4096 0x000c
0579 #define PCIXM_COMMAND_MAX_SPLITS    0x0070  /* Maximum Split Transactions */
0580 #define PCIXM_COMMAND_MAX_SPLITS_1  0x0000
0581 #define PCIXM_COMMAND_MAX_SPLITS_2  0x0010
0582 #define PCIXM_COMMAND_MAX_SPLITS_3  0x0020
0583 #define PCIXM_COMMAND_MAX_SPLITS_4  0x0030
0584 #define PCIXM_COMMAND_MAX_SPLITS_8  0x0040
0585 #define PCIXM_COMMAND_MAX_SPLITS_12 0x0050
0586 #define PCIXM_COMMAND_MAX_SPLITS_16 0x0060
0587 #define PCIXM_COMMAND_MAX_SPLITS_32 0x0070
0588 #define PCIXM_COMMAND_VERSION       0x3000
0589 #define PCIXR_STATUS        0x4
0590 #define PCIXM_STATUS_DEVFN      0x000000FF
0591 #define PCIXM_STATUS_BUS        0x0000FF00
0592 #define PCIXM_STATUS_64BIT      0x00010000
0593 #define PCIXM_STATUS_133CAP     0x00020000
0594 #define PCIXM_STATUS_SC_DISCARDED   0x00040000
0595 #define PCIXM_STATUS_UNEXP_SC       0x00080000
0596 #define PCIXM_STATUS_COMPLEX_DEV    0x00100000
0597 #define PCIXM_STATUS_MAX_READ       0x00600000
0598 #define PCIXM_STATUS_MAX_READ_512   0x00000000
0599 #define PCIXM_STATUS_MAX_READ_1024  0x00200000
0600 #define PCIXM_STATUS_MAX_READ_2048  0x00400000
0601 #define PCIXM_STATUS_MAX_READ_4096  0x00600000
0602 #define PCIXM_STATUS_MAX_SPLITS     0x03800000
0603 #define PCIXM_STATUS_MAX_SPLITS_1   0x00000000
0604 #define PCIXM_STATUS_MAX_SPLITS_2   0x00800000
0605 #define PCIXM_STATUS_MAX_SPLITS_3   0x01000000
0606 #define PCIXM_STATUS_MAX_SPLITS_4   0x01800000
0607 #define PCIXM_STATUS_MAX_SPLITS_8   0x02000000
0608 #define PCIXM_STATUS_MAX_SPLITS_12  0x02800000
0609 #define PCIXM_STATUS_MAX_SPLITS_16  0x03000000
0610 #define PCIXM_STATUS_MAX_SPLITS_32  0x03800000
0611 #define PCIXM_STATUS_MAX_CUM_READ   0x1C000000
0612 #define PCIXM_STATUS_RCVD_SC_ERR    0x20000000
0613 #define PCIXM_STATUS_266CAP     0x40000000
0614 #define PCIXM_STATUS_533CAP     0x80000000
0615 
0616 /* For header type 1 devices (PCI-X bridges) */
0617 #define PCIXR_SEC_STATUS    0x2
0618 #define PCIXM_SEC_STATUS_64BIT      0x0001
0619 #define PCIXM_SEC_STATUS_133CAP     0x0002
0620 #define PCIXM_SEC_STATUS_SC_DISC    0x0004
0621 #define PCIXM_SEC_STATUS_UNEXP_SC   0x0008
0622 #define PCIXM_SEC_STATUS_SC_OVERRUN 0x0010
0623 #define PCIXM_SEC_STATUS_SR_DELAYED 0x0020
0624 #define PCIXM_SEC_STATUS_BUS_MODE   0x03c0
0625 #define PCIXM_SEC_STATUS_VERSION    0x3000
0626 #define PCIXM_SEC_STATUS_266CAP     0x4000
0627 #define PCIXM_SEC_STATUS_533CAP     0x8000
0628 #define PCIXR_BRIDGE_STATUS 0x4
0629 #define PCIXM_BRIDGE_STATUS_DEVFN   0x000000FF
0630 #define PCIXM_BRIDGE_STATUS_BUS     0x0000FF00
0631 #define PCIXM_BRIDGE_STATUS_64BIT   0x00010000
0632 #define PCIXM_BRIDGE_STATUS_133CAP  0x00020000
0633 #define PCIXM_BRIDGE_STATUS_SC_DISCARDED 0x00040000
0634 #define PCIXM_BRIDGE_STATUS_UNEXP_SC    0x00080000
0635 #define PCIXM_BRIDGE_STATUS_SC_OVERRUN  0x00100000
0636 #define PCIXM_BRIDGE_STATUS_SR_DELAYED  0x00200000
0637 #define PCIXM_BRIDGE_STATUS_DEVID_MSGCAP 0x20000000
0638 #define PCIXM_BRIDGE_STATUS_266CAP  0x40000000
0639 #define PCIXM_BRIDGE_STATUS_533CAP  0x80000000
0640 
0641 /* HT (HyperTransport) Capability definitions */
0642 #define PCIR_HT_COMMAND     0x2
0643 #define PCIM_HTCMD_CAP_MASK     0xf800  /* Capability type. */
0644 #define PCIM_HTCAP_SLAVE        0x0000  /* 000xx */
0645 #define PCIM_HTCAP_HOST         0x2000  /* 001xx */
0646 #define PCIM_HTCAP_SWITCH       0x4000  /* 01000 */
0647 #define PCIM_HTCAP_INTERRUPT        0x8000  /* 10000 */
0648 #define PCIM_HTCAP_REVISION_ID      0x8800  /* 10001 */
0649 #define PCIM_HTCAP_UNITID_CLUMPING  0x9000  /* 10010 */
0650 #define PCIM_HTCAP_EXT_CONFIG_SPACE 0x9800  /* 10011 */
0651 #define PCIM_HTCAP_ADDRESS_MAPPING  0xa000  /* 10100 */
0652 #define PCIM_HTCAP_MSI_MAPPING      0xa800  /* 10101 */
0653 #define PCIM_HTCAP_DIRECT_ROUTE     0xb000  /* 10110 */
0654 #define PCIM_HTCAP_VCSET        0xb800  /* 10111 */
0655 #define PCIM_HTCAP_RETRY_MODE       0xc000  /* 11000 */
0656 #define PCIM_HTCAP_X86_ENCODING     0xc800  /* 11001 */
0657 #define PCIM_HTCAP_GEN3         0xd000  /* 11010 */
0658 #define PCIM_HTCAP_FLE          0xd800  /* 11011 */
0659 #define PCIM_HTCAP_PM           0xe000  /* 11100 */
0660 #define PCIM_HTCAP_HIGH_NODE_COUNT  0xe800  /* 11101 */
0661 
0662 /* HT MSI Mapping Capability definitions. */
0663 #define PCIM_HTCMD_MSI_ENABLE       0x0001
0664 #define PCIM_HTCMD_MSI_FIXED        0x0002
0665 #define PCIR_HTMSI_ADDRESS_LO   0x4
0666 #define PCIR_HTMSI_ADDRESS_HI   0x8
0667 
0668 /* PCI Vendor capability definitions */
0669 #define PCIR_VENDOR_LENGTH  0x2
0670 #define PCIR_VENDOR_DATA    0x3
0671 
0672 /* PCI EHCI Debug Port definitions */
0673 #define PCIR_DEBUG_PORT     0x2
0674 #define PCIM_DEBUG_PORT_OFFSET      0x1FFF
0675 #define PCIM_DEBUG_PORT_BAR     0xe000
0676 
0677 /* PCI-PCI Bridge Subvendor definitions */
0678 #define PCIR_SUBVENDCAP_ID  0x4
0679 
0680 /* PCI Express definitions */
0681 #define PCIER_FLAGS     0x2
0682 #define PCIEM_FLAGS_VERSION     0x000F
0683 #define PCIEM_FLAGS_TYPE        0x00F0
0684 #define PCIEM_TYPE_ENDPOINT     0x0000
0685 #define PCIEM_TYPE_LEGACY_ENDPOINT  0x0010
0686 #define PCIEM_TYPE_ROOT_PORT        0x0040
0687 #define PCIEM_TYPE_UPSTREAM_PORT    0x0050
0688 #define PCIEM_TYPE_DOWNSTREAM_PORT  0x0060
0689 #define PCIEM_TYPE_PCI_BRIDGE       0x0070
0690 #define PCIEM_TYPE_PCIE_BRIDGE      0x0080
0691 #define PCIEM_TYPE_ROOT_INT_EP      0x0090
0692 #define PCIEM_TYPE_ROOT_EC      0x00a0
0693 #define PCIEM_FLAGS_SLOT        0x0100
0694 #define PCIEM_FLAGS_IRQ         0x3e00
0695 #define PCIER_DEVICE_CAP    0x4
0696 #define PCIEM_CAP_MAX_PAYLOAD       0x00000007
0697 #define PCIEM_CAP_PHANTHOM_FUNCS    0x00000018
0698 #define PCIEM_CAP_EXT_TAG_FIELD     0x00000020
0699 #define PCIEM_CAP_L0S_LATENCY       0x000001c0
0700 #define PCIEM_CAP_L1_LATENCY        0x00000e00
0701 #define PCIEM_CAP_ROLE_ERR_RPT      0x00008000
0702 #define PCIEM_CAP_SLOT_PWR_LIM_VAL  0x03fc0000
0703 #define PCIEM_CAP_SLOT_PWR_LIM_SCALE    0x0c000000
0704 #define PCIEM_CAP_FLR           0x10000000
0705 #define PCIER_DEVICE_CTL    0x8
0706 #define PCIEM_CTL_COR_ENABLE        0x0001
0707 #define PCIEM_CTL_NFER_ENABLE       0x0002
0708 #define PCIEM_CTL_FER_ENABLE        0x0004
0709 #define PCIEM_CTL_URR_ENABLE        0x0008
0710 #define PCIEM_CTL_RELAXED_ORD_ENABLE    0x0010
0711 #define PCIEM_CTL_MAX_PAYLOAD       0x00e0
0712 #define PCIEM_CTL_EXT_TAG_FIELD     0x0100
0713 #define PCIEM_CTL_PHANTHOM_FUNCS    0x0200
0714 #define PCIEM_CTL_AUX_POWER_PM      0x0400
0715 #define PCIEM_CTL_NOSNOOP_ENABLE    0x0800
0716 #define PCIEM_CTL_MAX_READ_REQUEST  0x7000
0717 #define PCIEM_CTL_BRDG_CFG_RETRY    0x8000  /* PCI-E - PCI/PCI-X bridges */
0718 #define PCIEM_CTL_INITIATE_FLR      0x8000  /* FLR capable endpoints */
0719 #define PCIER_DEVICE_STA    0xa
0720 #define PCIEM_STA_CORRECTABLE_ERROR 0x0001
0721 #define PCIEM_STA_NON_FATAL_ERROR   0x0002
0722 #define PCIEM_STA_FATAL_ERROR       0x0004
0723 #define PCIEM_STA_UNSUPPORTED_REQ   0x0008
0724 #define PCIEM_STA_AUX_POWER     0x0010
0725 #define PCIEM_STA_TRANSACTION_PND   0x0020
0726 #define PCIER_LINK_CAP      0xc
0727 #define PCIEM_LINK_CAP_MAX_SPEED    0x0000000f
0728 #define PCIEM_LINK_CAP_MAX_WIDTH    0x000003f0
0729 #define PCIEM_LINK_CAP_ASPM     0x00000c00
0730 #define PCIEM_LINK_CAP_L0S_EXIT     0x00007000
0731 #define PCIEM_LINK_CAP_L1_EXIT      0x00038000
0732 #define PCIEM_LINK_CAP_CLOCK_PM     0x00040000
0733 #define PCIEM_LINK_CAP_SURPRISE_DOWN    0x00080000
0734 #define PCIEM_LINK_CAP_DL_ACTIVE    0x00100000
0735 #define PCIEM_LINK_CAP_LINK_BW_NOTIFY   0x00200000
0736 #define PCIEM_LINK_CAP_ASPM_COMPLIANCE  0x00400000
0737 #define PCIEM_LINK_CAP_PORT     0xff000000
0738 #define PCIER_LINK_CTL      0x10
0739 #define PCIEM_LINK_CTL_ASPMC_DIS    0x0000
0740 #define PCIEM_LINK_CTL_ASPMC_L0S    0x0001
0741 #define PCIEM_LINK_CTL_ASPMC_L1     0x0002
0742 #define PCIEM_LINK_CTL_ASPMC        0x0003
0743 #define PCIEM_LINK_CTL_RCB      0x0008
0744 #define PCIEM_LINK_CTL_LINK_DIS     0x0010
0745 #define PCIEM_LINK_CTL_RETRAIN_LINK 0x0020
0746 #define PCIEM_LINK_CTL_COMMON_CLOCK 0x0040
0747 #define PCIEM_LINK_CTL_EXTENDED_SYNC    0x0080
0748 #define PCIEM_LINK_CTL_ECPM     0x0100
0749 #define PCIEM_LINK_CTL_HAWD     0x0200
0750 #define PCIEM_LINK_CTL_LBMIE        0x0400
0751 #define PCIEM_LINK_CTL_LABIE        0x0800
0752 #define PCIER_LINK_STA      0x12
0753 #define PCIEM_LINK_STA_SPEED        0x000f
0754 #define PCIEM_LINK_STA_WIDTH        0x03f0
0755 #define PCIEM_LINK_STA_TRAINING_ERROR   0x0400
0756 #define PCIEM_LINK_STA_TRAINING     0x0800
0757 #define PCIEM_LINK_STA_SLOT_CLOCK   0x1000
0758 #define PCIEM_LINK_STA_DL_ACTIVE    0x2000
0759 #define PCIEM_LINK_STA_LINK_BW_MGMT 0x4000
0760 #define PCIEM_LINK_STA_LINK_AUTO_BW 0x8000
0761 #define PCIER_SLOT_CAP      0x14
0762 #define PCIEM_SLOT_CAP_APB      0x00000001
0763 #define PCIEM_SLOT_CAP_PCP      0x00000002
0764 #define PCIEM_SLOT_CAP_MRLSP        0x00000004
0765 #define PCIEM_SLOT_CAP_AIP      0x00000008
0766 #define PCIEM_SLOT_CAP_PIP      0x00000010
0767 #define PCIEM_SLOT_CAP_HPS      0x00000020
0768 #define PCIEM_SLOT_CAP_HPC      0x00000040
0769 #define PCIEM_SLOT_CAP_SPLV     0x00007f80
0770 #define PCIEM_SLOT_CAP_SPLS     0x00018000
0771 #define PCIEM_SLOT_CAP_EIP      0x00020000
0772 #define PCIEM_SLOT_CAP_NCCS     0x00040000
0773 #define PCIEM_SLOT_CAP_PSN      0xfff80000
0774 #define PCIER_SLOT_CTL      0x18
0775 #define PCIEM_SLOT_CTL_ABPE     0x0001
0776 #define PCIEM_SLOT_CTL_PFDE     0x0002
0777 #define PCIEM_SLOT_CTL_MRLSCE       0x0004
0778 #define PCIEM_SLOT_CTL_PDCE     0x0008
0779 #define PCIEM_SLOT_CTL_CCIE     0x0010
0780 #define PCIEM_SLOT_CTL_HPIE     0x0020
0781 #define PCIEM_SLOT_CTL_AIC      0x00c0
0782 #define PCIEM_SLOT_CTL_PIC      0x0300
0783 #define PCIEM_SLOT_CTL_PCC      0x0400
0784 #define PCIEM_SLOT_CTL_EIC      0x0800
0785 #define PCIEM_SLOT_CTL_DLLSCE       0x1000
0786 #define PCIER_SLOT_STA      0x1a
0787 #define PCIEM_SLOT_STA_ABP      0x0001
0788 #define PCIEM_SLOT_STA_PFD      0x0002
0789 #define PCIEM_SLOT_STA_MRLSC        0x0004
0790 #define PCIEM_SLOT_STA_PDC      0x0008
0791 #define PCIEM_SLOT_STA_CC       0x0010
0792 #define PCIEM_SLOT_STA_MRLSS        0x0020
0793 #define PCIEM_SLOT_STA_PDS      0x0040
0794 #define PCIEM_SLOT_STA_EIS      0x0080
0795 #define PCIEM_SLOT_STA_DLLSC        0x0100
0796 #define PCIER_ROOT_CTL      0x1c
0797 #define PCIEM_ROOT_CTL_SERR_CORR    0x0001
0798 #define PCIEM_ROOT_CTL_SERR_NONFATAL    0x0002
0799 #define PCIEM_ROOT_CTL_SERR_FATAL   0x0004
0800 #define PCIEM_ROOT_CTL_PME      0x0008
0801 #define PCIEM_ROOT_CTL_CRS_VIS      0x0010
0802 #define PCIER_ROOT_CAP      0x1e
0803 #define PCIEM_ROOT_CAP_CRS_VIS      0x0001
0804 #define PCIER_ROOT_STA      0x20
0805 #define PCIEM_ROOT_STA_PME_REQID_MASK   0x0000ffff
0806 #define PCIEM_ROOT_STA_PME_STATUS   0x00010000
0807 #define PCIEM_ROOT_STA_PME_PEND     0x00020000
0808 #define PCIER_DEVICE_CAP2   0x24
0809 #define PCIEM_CAP2_ARI      0x20
0810 #define PCIER_DEVICE_CTL2   0x28
0811 #define PCIEM_CTL2_COMP_TIMEOUT_VAL 0x000f
0812 #define PCIEM_CTL2_COMP_TIMEOUT_DIS 0x0010
0813 #define PCIEM_CTL2_ARI          0x0020
0814 #define PCIEM_CTL2_ATOMIC_REQ_ENABLE    0x0040
0815 #define PCIEM_CTL2_ATOMIC_EGR_BLOCK 0x0080
0816 #define PCIEM_CTL2_ID_ORDERED_REQ_EN    0x0100
0817 #define PCIEM_CTL2_ID_ORDERED_CMP_EN    0x0200
0818 #define PCIEM_CTL2_LTR_ENABLE       0x0400
0819 #define PCIEM_CTL2_OBFF         0x6000
0820 #define PCIEM_OBFF_DISABLE      0x0000
0821 #define PCIEM_OBFF_MSGA_ENABLE      0x2000
0822 #define PCIEM_OBFF_MSGB_ENABLE      0x4000
0823 #define PCIEM_OBFF_WAKE_ENABLE      0x6000
0824 #define PCIEM_CTL2_END2END_TLP      0x8000
0825 #define PCIER_DEVICE_STA2   0x2a
0826 #define PCIER_LINK_CAP2     0x2c
0827 #define PCIER_LINK_CTL2     0x30
0828 #define PCIER_LINK_STA2     0x32
0829 #define PCIER_SLOT_CAP2     0x34
0830 #define PCIER_SLOT_CTL2     0x38
0831 #define PCIER_SLOT_STA2     0x3a
0832 
0833 /* MSI-X definitions */
0834 #define PCIR_MSIX_CTRL      0x2
0835 #define PCIM_MSIXCTRL_MSIX_ENABLE   0x8000
0836 #define PCIM_MSIXCTRL_FUNCTION_MASK 0x4000
0837 #define PCIM_MSIXCTRL_TABLE_SIZE    0x07FF
0838 #define PCIR_MSIX_TABLE     0x4
0839 #define PCIR_MSIX_PBA       0x8
0840 #define PCIM_MSIX_BIR_MASK      0x7
0841 #define PCIM_MSIX_BIR_BAR_10        0
0842 #define PCIM_MSIX_BIR_BAR_14        1
0843 #define PCIM_MSIX_BIR_BAR_18        2
0844 #define PCIM_MSIX_BIR_BAR_1C        3
0845 #define PCIM_MSIX_BIR_BAR_20        4
0846 #define PCIM_MSIX_BIR_BAR_24        5
0847 #define PCIM_MSIX_VCTRL_MASK        0x1
0848 
0849 /* PCI Advanced Features definitions */
0850 #define PCIR_PCIAF_CAP      0x3
0851 #define PCIM_PCIAFCAP_TP    0x01
0852 #define PCIM_PCIAFCAP_FLR   0x02
0853 #define PCIR_PCIAF_CTRL     0x4
0854 #define PCIR_PCIAFCTRL_FLR  0x01
0855 #define PCIR_PCIAF_STATUS   0x5
0856 #define PCIR_PCIAFSTATUS_TP 0x01
0857 
0858 /* Advanced Error Reporting */
0859 #define PCIR_AER_UC_STATUS  0x04
0860 #define PCIM_AER_UC_TRAINING_ERROR  0x00000001
0861 #define PCIM_AER_UC_DL_PROTOCOL_ERROR   0x00000010
0862 #define PCIM_AER_UC_SURPRISE_LINK_DOWN  0x00000020
0863 #define PCIM_AER_UC_POISONED_TLP    0x00001000
0864 #define PCIM_AER_UC_FC_PROTOCOL_ERROR   0x00002000
0865 #define PCIM_AER_UC_COMPLETION_TIMEOUT  0x00004000
0866 #define PCIM_AER_UC_COMPLETER_ABORT 0x00008000
0867 #define PCIM_AER_UC_UNEXPECTED_COMPLETION 0x00010000
0868 #define PCIM_AER_UC_RECEIVER_OVERFLOW   0x00020000
0869 #define PCIM_AER_UC_MALFORMED_TLP   0x00040000
0870 #define PCIM_AER_UC_ECRC_ERROR      0x00080000
0871 #define PCIM_AER_UC_UNSUPPORTED_REQUEST 0x00100000
0872 #define PCIM_AER_UC_ACS_VIOLATION   0x00200000
0873 #define PCIM_AER_UC_INTERNAL_ERROR  0x00400000
0874 #define PCIM_AER_UC_MC_BLOCKED_TLP  0x00800000
0875 #define PCIM_AER_UC_ATOMIC_EGRESS_BLK   0x01000000
0876 #define PCIM_AER_UC_TLP_PREFIX_BLOCKED  0x02000000
0877 #define PCIR_AER_UC_MASK    0x08    /* Shares bits with UC_STATUS */
0878 #define PCIR_AER_UC_SEVERITY    0x0c    /* Shares bits with UC_STATUS */
0879 #define PCIR_AER_COR_STATUS 0x10
0880 #define PCIM_AER_COR_RECEIVER_ERROR 0x00000001
0881 #define PCIM_AER_COR_BAD_TLP        0x00000040
0882 #define PCIM_AER_COR_BAD_DLLP       0x00000080
0883 #define PCIM_AER_COR_REPLAY_ROLLOVER    0x00000100
0884 #define PCIM_AER_COR_REPLAY_TIMEOUT 0x00001000
0885 #define PCIM_AER_COR_ADVISORY_NF_ERROR  0x00002000
0886 #define PCIM_AER_COR_INTERNAL_ERROR 0x00004000
0887 #define PCIM_AER_COR_HEADER_LOG_OVFLOW  0x00008000
0888 #define PCIR_AER_COR_MASK   0x14    /* Shares bits with COR_STATUS */
0889 #define PCIR_AER_CAP_CONTROL    0x18
0890 #define PCIM_AER_FIRST_ERROR_PTR    0x0000001f
0891 #define PCIM_AER_ECRC_GEN_CAPABLE   0x00000020
0892 #define PCIM_AER_ECRC_GEN_ENABLE    0x00000040
0893 #define PCIM_AER_ECRC_CHECK_CAPABLE 0x00000080
0894 #define PCIM_AER_ECRC_CHECK_ENABLE  0x00000100
0895 #define PCIM_AER_MULT_HDR_CAPABLE   0x00000200
0896 #define PCIM_AER_MULT_HDR_ENABLE    0x00000400
0897 #define PCIM_AER_TLP_PREFIX_LOG_PRESENT 0x00000800
0898 #define PCIR_AER_HEADER_LOG 0x1c
0899 #define PCIR_AER_ROOTERR_CMD    0x2c    /* Only for root complex ports */
0900 #define PCIM_AER_ROOTERR_COR_ENABLE 0x00000001
0901 #define PCIM_AER_ROOTERR_NF_ENABLE  0x00000002
0902 #define PCIM_AER_ROOTERR_F_ENABLE   0x00000004
0903 #define PCIR_AER_ROOTERR_STATUS 0x30    /* Only for root complex ports */
0904 #define PCIM_AER_ROOTERR_COR_ERR    0x00000001
0905 #define PCIM_AER_ROOTERR_MULTI_COR_ERR  0x00000002
0906 #define PCIM_AER_ROOTERR_UC_ERR     0x00000004
0907 #define PCIM_AER_ROOTERR_MULTI_UC_ERR   0x00000008
0908 #define PCIM_AER_ROOTERR_FIRST_UC_FATAL 0x00000010
0909 #define PCIM_AER_ROOTERR_NF_ERR     0x00000020
0910 #define PCIM_AER_ROOTERR_F_ERR      0x00000040
0911 #define PCIM_AER_ROOTERR_INT_MESSAGE    0xf8000000
0912 #define PCIR_AER_COR_SOURCE_ID  0x34    /* Only for root complex ports */
0913 #define PCIR_AER_ERR_SOURCE_ID  0x36    /* Only for root complex ports */
0914 #define PCIR_AER_TLP_PREFIX_LOG 0x38    /* Only for TLP prefix functions */
0915 
0916 /* Virtual Channel definitions */
0917 #define PCIR_VC_CAP1        0x04
0918 #define PCIM_VC_CAP1_EXT_COUNT      0x00000007
0919 #define PCIM_VC_CAP1_LOWPRI_EXT_COUNT   0x00000070
0920 #define PCIR_VC_CAP2        0x08
0921 #define PCIR_VC_CONTROL     0x0C
0922 #define PCIR_VC_STATUS      0x0E
0923 #define PCIR_VC_RESOURCE_CAP(n) (0x10 + (n) * 0x0C)
0924 #define PCIR_VC_RESOURCE_CTL(n) (0x14 + (n) * 0x0C)
0925 #define PCIR_VC_RESOURCE_STA(n) (0x18 + (n) * 0x0C)
0926 
0927 /* Serial Number definitions */
0928 #define PCIR_SERIAL_LOW     0x04
0929 #define PCIR_SERIAL_HIGH    0x08
0930 
0931 #endif /* __PCI_REG_H__*/