[BACK]Return to pcireg.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

Annotation of sys/dev/pci/pcireg.h, Revision 1.1

1.1     ! nbrk        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_ */

CVSweb