root/dev/pci/pcireg.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: pcireg.h,v 1.32 2006/07/31 11:06:33 mickey Exp $      */
    2 /*      $NetBSD: pcireg.h,v 1.26 2000/05/10 16:58:42 thorpej Exp $      */
    3 
    4 /*
    5  * Copyright (c) 1995, 1996 Christopher G. Demetriou.  All rights reserved.
    6  * Copyright (c) 1994, 1996 Charles Hannum.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. All advertising materials mentioning features or use of this software
   17  *    must display the following acknowledgement:
   18  *      This product includes software developed by Charles Hannum.
   19  * 4. The name of the author may not be used to endorse or promote products
   20  *    derived from this software without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   27  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   31  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 
   34 #ifndef _DEV_PCI_PCIREG_H_
   35 #define _DEV_PCI_PCIREG_H_
   36 
   37 /*
   38  * Standardized PCI configuration information
   39  *
   40  * XXX This is not complete.
   41  */
   42 
   43 /*
   44  * Device identification register; contains a vendor ID and a device ID.
   45  */
   46 #define PCI_ID_REG                      0x00
   47 
   48 typedef u_int16_t pci_vendor_id_t;
   49 typedef u_int16_t pci_product_id_t;
   50 
   51 #define PCI_VENDOR_SHIFT                        0
   52 #define PCI_VENDOR_MASK                         0xffff
   53 #define PCI_VENDOR(id) \
   54             (((id) >> PCI_VENDOR_SHIFT) & PCI_VENDOR_MASK)
   55 
   56 #define PCI_PRODUCT_SHIFT                       16
   57 #define PCI_PRODUCT_MASK                        0xffff
   58 #define PCI_PRODUCT(id) \
   59             (((id) >> PCI_PRODUCT_SHIFT) & PCI_PRODUCT_MASK)
   60 
   61 #define PCI_ID_CODE(vid,pid) \
   62         ((((vid) & PCI_VENDOR_MASK) << PCI_VENDOR_SHIFT) | \
   63          (((pid) & PCI_PRODUCT_MASK) << PCI_PRODUCT_SHIFT))
   64 
   65 /*
   66  * Command and status register.
   67  */
   68 #define PCI_COMMAND_STATUS_REG                  0x04
   69 
   70 #define PCI_COMMAND_IO_ENABLE                   0x00000001
   71 #define PCI_COMMAND_MEM_ENABLE                  0x00000002
   72 #define PCI_COMMAND_MASTER_ENABLE               0x00000004
   73 #define PCI_COMMAND_SPECIAL_ENABLE              0x00000008
   74 #define PCI_COMMAND_INVALIDATE_ENABLE           0x00000010
   75 #define PCI_COMMAND_PALETTE_ENABLE              0x00000020
   76 #define PCI_COMMAND_PARITY_ENABLE               0x00000040
   77 #define PCI_COMMAND_STEPPING_ENABLE             0x00000080
   78 #define PCI_COMMAND_SERR_ENABLE                 0x00000100
   79 #define PCI_COMMAND_BACKTOBACK_ENABLE           0x00000200
   80 
   81 #define PCI_STATUS_CAPLIST_SUPPORT              0x00100000
   82 #define PCI_STATUS_66MHZ_SUPPORT                0x00200000
   83 #define PCI_STATUS_UDF_SUPPORT                  0x00400000
   84 #define PCI_STATUS_BACKTOBACK_SUPPORT           0x00800000
   85 #define PCI_STATUS_PARITY_ERROR                 0x01000000
   86 #define PCI_STATUS_DEVSEL_FAST                  0x00000000
   87 #define PCI_STATUS_DEVSEL_MEDIUM                0x02000000
   88 #define PCI_STATUS_DEVSEL_SLOW                  0x04000000
   89 #define PCI_STATUS_DEVSEL_MASK                  0x06000000
   90 #define PCI_STATUS_TARGET_TARGET_ABORT          0x08000000
   91 #define PCI_STATUS_MASTER_TARGET_ABORT          0x10000000
   92 #define PCI_STATUS_MASTER_ABORT                 0x20000000
   93 #define PCI_STATUS_SPECIAL_ERROR                0x40000000
   94 #define PCI_STATUS_PARITY_DETECT                0x80000000
   95 
   96 #define PCI_COMMAND_STATUS_BITS \
   97     ("\020\01IO\02MEM\03MASTER\04SPECIAL\05INVALIDATE\06PALETTE\07PARITY"\
   98      "\010STEPPING\011SERR\012BACKTOBACK\025CAPLIST\026CLK66\027UDF"\
   99      "\030BACK2BACK_STAT\031PARITY_STAT\032DEVSEL_MEDIUM\033DEVSEL_SLOW"\
  100      "\034TARGET_TARGET_ABORT\035MASTER_TARGET_ABORT\036MASTER_ABORT"\
  101      "\037SPECIAL_ERROR\040PARITY_DETECT")
  102 /*
  103  * PCI Class and Revision Register; defines type and revision of device.
  104  */
  105 #define PCI_CLASS_REG                   0x08
  106 
  107 typedef u_int8_t pci_class_t;
  108 typedef u_int8_t pci_subclass_t;
  109 typedef u_int8_t pci_interface_t;
  110 typedef u_int8_t pci_revision_t;
  111 
  112 #define PCI_CLASS_SHIFT                         24
  113 #define PCI_CLASS_MASK                          0xff
  114 #define PCI_CLASS(cr) \
  115             (((cr) >> PCI_CLASS_SHIFT) & PCI_CLASS_MASK)
  116 
  117 #define PCI_SUBCLASS_SHIFT                      16
  118 #define PCI_SUBCLASS_MASK                       0xff
  119 #define PCI_SUBCLASS(cr) \
  120             (((cr) >> PCI_SUBCLASS_SHIFT) & PCI_SUBCLASS_MASK)
  121 
  122 #define PCI_INTERFACE_SHIFT                     8
  123 #define PCI_INTERFACE_MASK                      0xff
  124 #define PCI_INTERFACE(cr) \
  125             (((cr) >> PCI_INTERFACE_SHIFT) & PCI_INTERFACE_MASK)
  126 
  127 #define PCI_REVISION_SHIFT                      0
  128 #define PCI_REVISION_MASK                       0xff
  129 #define PCI_REVISION(cr) \
  130             (((cr) >> PCI_REVISION_SHIFT) & PCI_REVISION_MASK)
  131 
  132 /* base classes */
  133 #define PCI_CLASS_PREHISTORIC                   0x00
  134 #define PCI_CLASS_MASS_STORAGE                  0x01
  135 #define PCI_CLASS_NETWORK                       0x02
  136 #define PCI_CLASS_DISPLAY                       0x03
  137 #define PCI_CLASS_MULTIMEDIA                    0x04
  138 #define PCI_CLASS_MEMORY                        0x05
  139 #define PCI_CLASS_BRIDGE                        0x06
  140 #define PCI_CLASS_COMMUNICATIONS                0x07
  141 #define PCI_CLASS_SYSTEM                        0x08
  142 #define PCI_CLASS_INPUT                         0x09
  143 #define PCI_CLASS_DOCK                          0x0a
  144 #define PCI_CLASS_PROCESSOR                     0x0b
  145 #define PCI_CLASS_SERIALBUS                     0x0c
  146 #define PCI_CLASS_WIRELESS                      0x0d
  147 #define PCI_CLASS_I2O                           0x0e
  148 #define PCI_CLASS_SATCOM                        0x0f
  149 #define PCI_CLASS_CRYPTO                        0x10
  150 #define PCI_CLASS_DASP                          0x11
  151 #define PCI_CLASS_UNDEFINED                     0xff
  152 
  153 /* 0x00 prehistoric subclasses */
  154 #define PCI_SUBCLASS_PREHISTORIC_MISC           0x00
  155 #define PCI_SUBCLASS_PREHISTORIC_VGA            0x01
  156 
  157 /* 0x01 mass storage subclasses */
  158 #define PCI_SUBCLASS_MASS_STORAGE_SCSI          0x00
  159 #define PCI_SUBCLASS_MASS_STORAGE_IDE           0x01
  160 #define PCI_SUBCLASS_MASS_STORAGE_FLOPPY        0x02
  161 #define PCI_SUBCLASS_MASS_STORAGE_IPI           0x03
  162 #define PCI_SUBCLASS_MASS_STORAGE_RAID          0x04
  163 #define PCI_SUBCLASS_MASS_STORAGE_ATA           0x05
  164 #define PCI_SUBCLASS_MASS_STORAGE_SATA          0x06
  165 #define PCI_SUBCLASS_MASS_STORAGE_SAS           0x07
  166 #define PCI_SUBCLASS_MASS_STORAGE_MISC          0x80
  167 
  168 /* 0x02 network subclasses */
  169 #define PCI_SUBCLASS_NETWORK_ETHERNET           0x00
  170 #define PCI_SUBCLASS_NETWORK_TOKENRING          0x01
  171 #define PCI_SUBCLASS_NETWORK_FDDI               0x02
  172 #define PCI_SUBCLASS_NETWORK_ATM                0x03
  173 #define PCI_SUBCLASS_NETWORK_ISDN               0x04
  174 #define PCI_SUBCLASS_NETWORK_WORLDFIP           0x05
  175 #define PCI_SUBCLASS_NETWORK_PCIMGMULTICOMP     0x06
  176 #define PCI_SUBCLASS_NETWORK_MISC               0x80
  177 
  178 /* 0x03 display subclasses */
  179 #define PCI_SUBCLASS_DISPLAY_VGA                0x00
  180 #define PCI_SUBCLASS_DISPLAY_XGA                0x01
  181 #define PCI_SUBCLASS_DISPLAY_3D                 0x02
  182 #define PCI_SUBCLASS_DISPLAY_MISC               0x80
  183 
  184 /* 0x04 multimedia subclasses */
  185 #define PCI_SUBCLASS_MULTIMEDIA_VIDEO           0x00
  186 #define PCI_SUBCLASS_MULTIMEDIA_AUDIO           0x01
  187 #define PCI_SUBCLASS_MULTIMEDIA_TELEPHONY       0x02
  188 #define PCI_SUBCLASS_MULTIMEDIA_HDAUDIO         0x03
  189 #define PCI_SUBCLASS_MULTIMEDIA_MISC            0x80
  190 
  191 /* 0x05 memory subclasses */
  192 #define PCI_SUBCLASS_MEMORY_RAM                 0x00
  193 #define PCI_SUBCLASS_MEMORY_FLASH               0x01
  194 #define PCI_SUBCLASS_MEMORY_MISC                0x80
  195 
  196 /* 0x06 bridge subclasses */
  197 #define PCI_SUBCLASS_BRIDGE_HOST                0x00
  198 #define PCI_SUBCLASS_BRIDGE_ISA                 0x01
  199 #define PCI_SUBCLASS_BRIDGE_EISA                0x02
  200 #define PCI_SUBCLASS_BRIDGE_MC                  0x03
  201 #define PCI_SUBCLASS_BRIDGE_PCI                 0x04
  202 #define PCI_SUBCLASS_BRIDGE_PCMCIA              0x05
  203 #define PCI_SUBCLASS_BRIDGE_NUBUS               0x06
  204 #define PCI_SUBCLASS_BRIDGE_CARDBUS             0x07
  205 #define PCI_SUBCLASS_BRIDGE_RACEWAY             0x08
  206 #define PCI_SUBCLASS_BRIDGE_STPCI               0x09
  207 #define PCI_SUBCLASS_BRIDGE_INFINIBAND          0x0a
  208 #define PCI_SUBCLASS_BRIDGE_MISC                0x80
  209 
  210 /* 0x07 communications subclasses */
  211 #define PCI_SUBCLASS_COMMUNICATIONS_SERIAL      0x00
  212 #define PCI_SUBCLASS_COMMUNICATIONS_PARALLEL    0x01
  213 #define PCI_SUBCLASS_COMMUNICATIONS_MPSERIAL    0x02
  214 #define PCI_SUBCLASS_COMMUNICATIONS_MODEM       0x03
  215 #define PCI_SUBCLASS_COMMUNICATIONS_GPIB        0x04
  216 #define PCI_SUBCLASS_COMMUNICATIONS_SMARTCARD   0x05
  217 #define PCI_SUBCLASS_COMMUNICATIONS_MISC        0x80
  218 
  219 /* 0x08 system subclasses */
  220 #define PCI_SUBCLASS_SYSTEM_PIC                 0x00
  221 #define PCI_SUBCLASS_SYSTEM_DMA                 0x01
  222 #define PCI_SUBCLASS_SYSTEM_TIMER               0x02
  223 #define PCI_SUBCLASS_SYSTEM_RTC                 0x03
  224 #define PCI_SUBCLASS_SYSTEM_PCIHOTPLUG          0x04
  225 #define PCI_SUBCLASS_SYSTEM_SDHC                0x05
  226 #define PCI_SUBCLASS_SYSTEM_MISC                0x80
  227 
  228 /* 0x09 input subclasses */
  229 #define PCI_SUBCLASS_INPUT_KEYBOARD             0x00
  230 #define PCI_SUBCLASS_INPUT_DIGITIZER            0x01
  231 #define PCI_SUBCLASS_INPUT_MOUSE                0x02
  232 #define PCI_SUBCLASS_INPUT_SCANNER              0x03
  233 #define PCI_SUBCLASS_INPUT_GAMEPORT             0x04
  234 #define PCI_SUBCLASS_INPUT_MISC                 0x80
  235 
  236 /* 0x0a dock subclasses */
  237 #define PCI_SUBCLASS_DOCK_GENERIC               0x00
  238 #define PCI_SUBCLASS_DOCK_MISC                  0x80
  239 
  240 /* 0x0b processor subclasses */
  241 #define PCI_SUBCLASS_PROCESSOR_386              0x00
  242 #define PCI_SUBCLASS_PROCESSOR_486              0x01
  243 #define PCI_SUBCLASS_PROCESSOR_PENTIUM          0x02
  244 #define PCI_SUBCLASS_PROCESSOR_ALPHA            0x10
  245 #define PCI_SUBCLASS_PROCESSOR_POWERPC          0x20
  246 #define PCI_SUBCLASS_PROCESSOR_MIPS             0x30
  247 #define PCI_SUBCLASS_PROCESSOR_COPROC           0x40
  248 
  249 /* 0x0c serial bus subclasses */
  250 #define PCI_SUBCLASS_SERIALBUS_FIREWIRE         0x00
  251 #define PCI_SUBCLASS_SERIALBUS_ACCESS           0x01
  252 #define PCI_SUBCLASS_SERIALBUS_SSA              0x02
  253 #define PCI_SUBCLASS_SERIALBUS_USB              0x03
  254 #define PCI_SUBCLASS_SERIALBUS_FIBER            0x04
  255 #define PCI_SUBCLASS_SERIALBUS_SMBUS            0x05
  256 #define PCI_SUBCLASS_SERIALBUS_INFINIBAND       0x06
  257 #define PCI_SUBCLASS_SERIALBUS_IPMI             0x07
  258 #define PCI_SUBCLASS_SERIALBUS_SERCOS           0x08
  259 #define PCI_SUBCLASS_SERIALBUS_CANBUS           0x09
  260 
  261 /* 0x0d wireless subclasses */
  262 #define PCI_SUBCLASS_WIRELESS_IRDA              0x00
  263 #define PCI_SUBCLASS_WIRELESS_CONSUMERIR        0x01
  264 #define PCI_SUBCLASS_WIRELESS_RF                0x10
  265 #define PCI_SUBCLASS_WIRELESS_BLUETOOTH         0x11
  266 #define PCI_SUBCLASS_WIRELESS_BROADBAND         0x12
  267 #define PCI_SUBCLASS_WIRELESS_802_11A           0x20
  268 #define PCI_SUBCLASS_WIRELESS_802_11B           0x21
  269 #define PCI_SUBCLASS_WIRELESS_MISC              0x80
  270 
  271 /* 0x0e I2O (Intelligent I/O) subclasses */
  272 #define PCI_SUBCLASS_I2O_STANDARD               0x00
  273 
  274 /* 0x0f satellite communication subclasses */
  275 /*      PCI_SUBCLASS_SATCOM_???                 0x00    / * XXX ??? */
  276 #define PCI_SUBCLASS_SATCOM_TV                  0x01
  277 #define PCI_SUBCLASS_SATCOM_AUDIO               0x02
  278 #define PCI_SUBCLASS_SATCOM_VOICE               0x03
  279 #define PCI_SUBCLASS_SATCOM_DATA                0x04
  280 
  281 /* 0x10 encryption/decryption subclasses */
  282 #define PCI_SUBCLASS_CRYPTO_NETCOMP             0x00
  283 #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT       0x10
  284 #define PCI_SUBCLASS_CRYPTO_MISC                0x80
  285 
  286 /* 0x11 data acquisition and signal processing subclasses */
  287 #define PCI_SUBCLASS_DASP_DPIO                  0x00
  288 #define PCI_SUBCLASS_DASP_TIMEFREQ              0x01
  289 #define PCI_SUBCLASS_DASP_SYNC                  0x10
  290 #define PCI_SUBCLASS_DASP_MGMT                  0x20
  291 #define PCI_SUBCLASS_DASP_MISC                  0x80
  292 
  293 /*
  294  * PCI BIST/Header Type/Latency Timer/Cache Line Size Register.
  295  */
  296 #define PCI_BHLC_REG                    0x0c
  297 
  298 #define PCI_BIST_SHIFT                          24
  299 #define PCI_BIST_MASK                           0xff
  300 #define PCI_BIST(bhlcr) \
  301             (((bhlcr) >> PCI_BIST_SHIFT) & PCI_BIST_MASK)
  302 
  303 #define PCI_HDRTYPE_SHIFT                       16
  304 #define PCI_HDRTYPE_MASK                        0xff
  305 #define PCI_HDRTYPE(bhlcr) \
  306             (((bhlcr) >> PCI_HDRTYPE_SHIFT) & PCI_HDRTYPE_MASK)
  307 
  308 #define PCI_HDRTYPE_TYPE(bhlcr) \
  309             (PCI_HDRTYPE(bhlcr) & 0x7f)
  310 #define PCI_HDRTYPE_MULTIFN(bhlcr) \
  311             ((PCI_HDRTYPE(bhlcr) & 0x80) != 0)
  312 
  313 #define PCI_LATTIMER_SHIFT                      8
  314 #define PCI_LATTIMER_MASK                       0xff
  315 #define PCI_LATTIMER(bhlcr) \
  316             (((bhlcr) >> PCI_LATTIMER_SHIFT) & PCI_LATTIMER_MASK)
  317 
  318 #define PCI_CACHELINE_SHIFT                     0
  319 #define PCI_CACHELINE_MASK                      0xff
  320 #define PCI_CACHELINE(bhlcr) \
  321             (((bhlcr) >> PCI_CACHELINE_SHIFT) & PCI_CACHELINE_MASK)
  322 
  323 /* config registers for header type 0 devices */
  324 
  325 #define PCI_MAPS        0x10
  326 #define PCI_CARDBUSCIS  0x28
  327 #define PCI_SUBVEND_0   0x2c
  328 #define PCI_SUBDEV_0    0x2e
  329 #define PCI_INTLINE     0x3c
  330 #define PCI_INTPIN      0x3d
  331 #define PCI_MINGNT      0x3e
  332 #define PCI_MAXLAT      0x3f
  333 
  334 /* config registers for header type 1 devices */
  335 
  336 #define PCI_SECSTAT_1   0 /**/
  337 
  338 #define PCI_PRIBUS_1    0x18
  339 #define PCI_SECBUS_1    0x19
  340 #define PCI_SUBBUS_1    0x1a
  341 #define PCI_SECLAT_1    0x1b
  342 
  343 #define PCI_IOBASEL_1   0x1c
  344 #define PCI_IOLIMITL_1  0x1d
  345 #define PCI_IOBASEH_1   0 /**/
  346 #define PCI_IOLIMITH_1  0 /**/
  347 
  348 #define PCI_MEMBASE_1   0x20
  349 #define PCI_MEMLIMIT_1  0x22
  350 
  351 #define PCI_PMBASEL_1   0x24
  352 #define PCI_PMLIMITL_1  0x26
  353 #define PCI_PMBASEH_1   0 /**/
  354 #define PCI_PMLIMITH_1  0 /**/
  355 
  356 #define PCI_BRIDGECTL_1 0 /**/
  357 
  358 #define PCI_SUBVEND_1   0x34
  359 #define PCI_SUBDEV_1    0x36
  360 
  361 /* config registers for header type 2 devices */
  362 
  363 #define PCI_SECSTAT_2   0x16
  364 
  365 #define PCI_PRIBUS_2    0x18
  366 #define PCI_SECBUS_2    0x19
  367 #define PCI_SUBBUS_2    0x1a
  368 #define PCI_SECLAT_2    0x1b
  369 
  370 #define PCI_MEMBASE0_2  0x1c
  371 #define PCI_MEMLIMIT0_2 0x20
  372 #define PCI_MEMBASE1_2  0x24
  373 #define PCI_MEMLIMIT1_2 0x28
  374 #define PCI_IOBASE0_2   0x2c
  375 #define PCI_IOLIMIT0_2  0x30
  376 #define PCI_IOBASE1_2   0x34
  377 #define PCI_IOLIMIT1_2  0x38
  378 
  379 #define PCI_BRIDGECTL_2 0x3e
  380 
  381 #define PCI_SUBVEND_2   0x40
  382 #define PCI_SUBDEV_2    0x42
  383 
  384 #define PCI_PCCARDIF_2  0x44
  385 
  386 /*
  387  * Mapping registers
  388  */
  389 #define PCI_MAPREG_START                0x10
  390 #define PCI_MAPREG_END                  0x28
  391 #define PCI_MAPREG_PPB_END              0x18
  392 #define PCI_MAPREG_PCB_END              0x14
  393 
  394 #define PCI_MAPREG_TYPE(mr)                                             \
  395             ((mr) & PCI_MAPREG_TYPE_MASK)
  396 #define PCI_MAPREG_TYPE_MASK                    0x00000001
  397 
  398 #define PCI_MAPREG_TYPE_MEM                     0x00000000
  399 #define PCI_MAPREG_TYPE_IO                      0x00000001
  400 
  401 #define PCI_MAPREG_MEM_TYPE(mr)                                         \
  402             ((mr) & PCI_MAPREG_MEM_TYPE_MASK)
  403 #define PCI_MAPREG_MEM_TYPE_MASK                0x00000006
  404 
  405 #define PCI_MAPREG_MEM_TYPE_32BIT               0x00000000
  406 #define PCI_MAPREG_MEM_TYPE_32BIT_1M            0x00000002
  407 #define PCI_MAPREG_MEM_TYPE_64BIT               0x00000004
  408 
  409 #define _PCI_MAPREG_TYPEBITS(reg) \
  410         (PCI_MAPREG_TYPE(reg) == PCI_MAPREG_TYPE_IO ? \
  411         reg & PCI_MAPREG_TYPE_MASK : \
  412         reg & (PCI_MAPREG_TYPE_MASK|PCI_MAPREG_MEM_TYPE_MASK))
  413 
  414 #define PCI_MAPREG_MEM_PREFETCHABLE(mr)                                 \
  415             (((mr) & PCI_MAPREG_MEM_PREFETCHABLE_MASK) != 0)
  416 #define PCI_MAPREG_MEM_PREFETCHABLE_MASK        0x00000008
  417 
  418 #define PCI_MAPREG_MEM_ADDR(mr)                                         \
  419             ((mr) & PCI_MAPREG_MEM_ADDR_MASK)
  420 #define PCI_MAPREG_MEM_SIZE(mr)                                         \
  421             (PCI_MAPREG_MEM_ADDR(mr) & -PCI_MAPREG_MEM_ADDR(mr))
  422 #define PCI_MAPREG_MEM_ADDR_MASK                0xfffffff0
  423 
  424 #define PCI_MAPREG_MEM64_ADDR(mr)                                       \
  425             ((mr) & PCI_MAPREG_MEM64_ADDR_MASK)
  426 #define PCI_MAPREG_MEM64_SIZE(mr)                                       \
  427             (PCI_MAPREG_MEM64_ADDR(mr) & -PCI_MAPREG_MEM64_ADDR(mr))
  428 #define PCI_MAPREG_MEM64_ADDR_MASK              0xfffffffffffffff0ULL
  429 
  430 #define PCI_MAPREG_IO_ADDR(mr)                                          \
  431             ((mr) & PCI_MAPREG_IO_ADDR_MASK)
  432 #define PCI_MAPREG_IO_SIZE(mr)                                          \
  433             (PCI_MAPREG_IO_ADDR(mr) & -PCI_MAPREG_IO_ADDR(mr))
  434 #define PCI_MAPREG_IO_ADDR_MASK                 0xfffffffe
  435 
  436 /*
  437  * Cardbus CIS pointer (PCI rev. 2.1)
  438  */
  439 #define PCI_CARDBUS_CIS_REG 0x28
  440 
  441 /*
  442  * Subsystem identification register; contains a vendor ID and a device ID.
  443  * Types/macros for PCI_ID_REG apply.
  444  * (PCI rev. 2.1)
  445  */
  446 #define PCI_SUBSYS_ID_REG 0x2c
  447 
  448 /*
  449  * Expansion ROM Base Address register
  450  * (PCI rev. 2.0)
  451  */
  452 #define PCI_ROM_REG 0x30
  453 
  454 #define PCI_ROM_ENABLE                  0x00000001
  455 #define PCI_ROM_ADDR_MASK               0xfffff800
  456 #define PCI_ROM_ADDR(mr)                                                \
  457             ((mr) & PCI_ROM_ADDR_MASK)
  458 #define PCI_ROM_SIZE(mr)                                                \
  459             (PCI_ROM_ADDR(mr) & -PCI_ROM_ADDR(mr))
  460 
  461 /*
  462  * capabilities link list (PCI rev. 2.2)
  463  */
  464 #define PCI_CAPLISTPTR_REG              0x34    /* header type 0 */
  465 #define PCI_CARDBUS_CAPLISTPTR_REG      0x14    /* header type 2 */
  466 #define PCI_CAPLIST_PTR(cpr) ((cpr) & 0xff)
  467 #define PCI_CAPLIST_NEXT(cr) (((cr) >> 8) & 0xff)
  468 #define PCI_CAPLIST_CAP(cr) ((cr) & 0xff)
  469 
  470 #define PCI_CAP_RESERVED        0x00
  471 #define PCI_CAP_PWRMGMT         0x01
  472 #define PCI_CAP_AGP             0x02
  473 #define PCI_CAP_VPD             0x03
  474 #define PCI_CAP_SLOTID          0x04
  475 #define PCI_CAP_MSI             0x05
  476 #define PCI_CAP_CPCI_HOTSWAP    0x06
  477 #define PCI_CAP_PCIX            0x07
  478 #define PCI_CAP_LDT             0x08
  479 #define PCI_CAP_VENDSPEC        0x09
  480 #define PCI_CAP_DEBUGPORT       0x0a
  481 #define PCI_CAP_CPCI_RSRCCTL    0x0b
  482 #define PCI_CAP_HOTPLUG         0x0c
  483 #define PCI_CAP_AGP8            0x0e
  484 #define PCI_CAP_SECURE          0x0f
  485 #define PCI_CAP_PCIEXPRESS      0x10
  486 #define PCI_CAP_MSIX            0x11
  487 
  488 /*
  489  * Power Management Control Status Register; access via capability pointer.
  490  */
  491 #define PCI_PMCSR               0x04
  492 #define PCI_PMCSR_STATE_MASK    0x03
  493 #define PCI_PMCSR_STATE_D0      0x00
  494 #define PCI_PMCSR_STATE_D1      0x01
  495 #define PCI_PMCSR_STATE_D2      0x02
  496 #define PCI_PMCSR_STATE_D3      0x03
  497 
  498 /*
  499  * Interrupt Configuration Register; contains interrupt pin and line.
  500  */
  501 #define PCI_INTERRUPT_REG               0x3c
  502 
  503 typedef u_int8_t pci_intr_pin_t;
  504 typedef u_int8_t pci_intr_line_t;
  505 
  506 #define PCI_INTERRUPT_PIN_SHIFT                 8
  507 #define PCI_INTERRUPT_PIN_MASK                  0xff
  508 #define PCI_INTERRUPT_PIN(icr) \
  509             (((icr) >> PCI_INTERRUPT_PIN_SHIFT) & PCI_INTERRUPT_PIN_MASK)
  510 
  511 #define PCI_INTERRUPT_LINE_SHIFT                0
  512 #define PCI_INTERRUPT_LINE_MASK                 0xff
  513 #define PCI_INTERRUPT_LINE(icr) \
  514             (((icr) >> PCI_INTERRUPT_LINE_SHIFT) & PCI_INTERRUPT_LINE_MASK)
  515 
  516 #define PCI_MIN_GNT_SHIFT                       16
  517 #define PCI_MIN_GNT_MASK                        0xff
  518 #define PCI_MIN_GNT(icr) \
  519             (((icr) >> PCI_MIN_GNT_SHIFT) & PCI_MIN_GNT_MASK)
  520 
  521 #define PCI_MAX_LAT_SHIFT                       24
  522 #define PCI_MAX_LAT_MASK                        0xff
  523 #define PCI_MAX_LAT(icr) \
  524             (((icr) >> PCI_MAX_LAT_SHIFT) & PCI_MAX_LAT_MASK)
  525 
  526 #define PCI_INTERRUPT_PIN_NONE                  0x00
  527 #define PCI_INTERRUPT_PIN_A                     0x01
  528 #define PCI_INTERRUPT_PIN_B                     0x02
  529 #define PCI_INTERRUPT_PIN_C                     0x03
  530 #define PCI_INTERRUPT_PIN_D                     0x04
  531 #define PCI_INTERRUPT_PIN_MAX                   0x04
  532 
  533 /*
  534  * Vital Product Data resource tags.
  535  */
  536 struct pci_vpd_smallres {
  537         uint8_t         vpdres_byte0;           /* length of data + tag */
  538         /* Actual data. */
  539 } __packed;
  540 
  541 struct pci_vpd_largeres {
  542         uint8_t         vpdres_byte0;
  543         uint8_t         vpdres_len_lsb;         /* length of data only */
  544         uint8_t         vpdres_len_msb;
  545         /* Actual data. */
  546 } __packed;
  547 
  548 #define PCI_VPDRES_ISLARGE(x)                   ((x) & 0x80)
  549 
  550 #define PCI_VPDRES_SMALL_LENGTH(x)              ((x) & 0x7)
  551 #define PCI_VPDRES_SMALL_NAME(x)                (((x) >> 3) & 0xf)
  552 
  553 #define PCI_VPDRES_LARGE_NAME(x)                ((x) & 0x7f)
  554 
  555 #define PCI_VPDRES_TYPE_COMPATIBLE_DEVICE_ID    0x3     /* small */
  556 #define PCI_VPDRES_TYPE_VENDOR_DEFINED          0xe     /* small */
  557 #define PCI_VPDRES_TYPE_END_TAG                 0xf     /* small */
  558 
  559 #define PCI_VPDRES_TYPE_IDENTIFIER_STRING       0x02    /* large */
  560 #define PCI_VPDRES_TYPE_VPD                     0x10    /* large */
  561 
  562 struct pci_vpd {
  563         uint8_t         vpd_key0;
  564         uint8_t         vpd_key1;
  565         uint8_t         vpd_len;                /* length of data only */
  566         /* Actual data. */
  567 } __packed;
  568 
  569 /*
  570  * Recommended VPD fields:
  571  *
  572  *      PN              Part number of assembly
  573  *      FN              FRU part number
  574  *      EC              EC level of assembly
  575  *      MN              Manufacture ID
  576  *      SN              Serial Number
  577  *
  578  * Conditionally recommended VPD fields:
  579  *
  580  *      LI              Load ID
  581  *      RL              ROM Level
  582  *      RM              Alterable ROM Level
  583  *      NA              Network Address
  584  *      DD              Device Driver Level
  585  *      DG              Diagnostic Level
  586  *      LL              Loadable Microcode Level
  587  *      VI              Vendor ID/Device ID
  588  *      FU              Function Number
  589  *      SI              Subsystem Vendor ID/Subsystem ID
  590  *
  591  * Additional VPD fields:
  592  *
  593  *      Z0-ZZ           User/Product Specific
  594  */
  595 
  596 #endif /* _DEV_PCI_PCIREG_H_ */

/* [<][>][^][v][top][bottom][index][help] */