Statistics
| Branch: | Revision:

root / hw / pci_regs.h @ 78ced65e

History | View | Annotate | Download (33.1 kB)

1 cb67beb1 Isaku Yamahata
/*
2 cb67beb1 Isaku Yamahata
 *        pci_regs.h
3 cb67beb1 Isaku Yamahata
 *
4 cb67beb1 Isaku Yamahata
 *        PCI standard defines
5 cb67beb1 Isaku Yamahata
 *        Copyright 1994, Drew Eckhardt
6 cb67beb1 Isaku Yamahata
 *        Copyright 1997--1999 Martin Mares <mj@ucw.cz>
7 cb67beb1 Isaku Yamahata
 *
8 cb67beb1 Isaku Yamahata
 *        For more information, please consult the following manuals (look at
9 cb67beb1 Isaku Yamahata
 *        http://www.pcisig.com/ for how to get them):
10 cb67beb1 Isaku Yamahata
 *
11 cb67beb1 Isaku Yamahata
 *        PCI BIOS Specification
12 cb67beb1 Isaku Yamahata
 *        PCI Local Bus Specification
13 cb67beb1 Isaku Yamahata
 *        PCI to PCI Bridge Specification
14 cb67beb1 Isaku Yamahata
 *        PCI System Design Guide
15 cb67beb1 Isaku Yamahata
 *
16 cb67beb1 Isaku Yamahata
 *         For hypertransport information, please consult the following manuals
17 cb67beb1 Isaku Yamahata
 *         from http://www.hypertransport.org
18 cb67beb1 Isaku Yamahata
 *
19 cb67beb1 Isaku Yamahata
 *        The Hypertransport I/O Link Specification
20 cb67beb1 Isaku Yamahata
 */
21 cb67beb1 Isaku Yamahata
22 cb67beb1 Isaku Yamahata
#ifndef LINUX_PCI_REGS_H
23 cb67beb1 Isaku Yamahata
#define LINUX_PCI_REGS_H
24 cb67beb1 Isaku Yamahata
25 cb67beb1 Isaku Yamahata
/*
26 cb67beb1 Isaku Yamahata
 * Under PCI, each device has 256 bytes of configuration address space,
27 cb67beb1 Isaku Yamahata
 * of which the first 64 bytes are standardized as follows:
28 cb67beb1 Isaku Yamahata
 */
29 cb67beb1 Isaku Yamahata
#define PCI_VENDOR_ID                0x00        /* 16 bits */
30 cb67beb1 Isaku Yamahata
#define PCI_DEVICE_ID                0x02        /* 16 bits */
31 cb67beb1 Isaku Yamahata
#define PCI_COMMAND                0x04        /* 16 bits */
32 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_IO                0x1        /* Enable response in I/O space */
33 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_MEMORY        0x2        /* Enable response in Memory space */
34 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_MASTER        0x4        /* Enable bus mastering */
35 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_SPECIAL        0x8        /* Enable response to special cycles */
36 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_INVALIDATE        0x10        /* Use memory write and invalidate */
37 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_VGA_PALETTE 0x20        /* Enable palette snooping */
38 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_PARITY        0x40        /* Enable parity checking */
39 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_WAIT         0x80        /* Enable address/data stepping */
40 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_SERR        0x100        /* Enable SERR */
41 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_FAST_BACK        0x200        /* Enable back-to-back writes */
42 cb67beb1 Isaku Yamahata
#define  PCI_COMMAND_INTX_DISABLE 0x400 /* INTx Emulation Disable */
43 cb67beb1 Isaku Yamahata
44 cb67beb1 Isaku Yamahata
#define PCI_STATUS                0x06        /* 16 bits */
45 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_INTERRUPT        0x08        /* Interrupt status */
46 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_CAP_LIST        0x10        /* Support Capability List */
47 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_66MHZ        0x20        /* Support 66 Mhz PCI 2.1 bus */
48 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_UDF                0x40        /* Support User Definable Features [obsolete] */
49 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_FAST_BACK        0x80        /* Accept fast-back to back */
50 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_PARITY        0x100        /* Detected parity error */
51 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_DEVSEL_MASK        0x600        /* DEVSEL timing */
52 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_DEVSEL_FAST                0x000
53 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_DEVSEL_MEDIUM        0x200
54 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_DEVSEL_SLOW                0x400
55 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_SIG_TARGET_ABORT        0x800 /* Set on target abort */
56 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_REC_TARGET_ABORT        0x1000 /* Master ack of " */
57 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_REC_MASTER_ABORT        0x2000 /* Set on master abort */
58 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_SIG_SYSTEM_ERROR        0x4000 /* Set when we drive SERR */
59 cb67beb1 Isaku Yamahata
#define  PCI_STATUS_DETECTED_PARITY        0x8000 /* Set on parity error */
60 cb67beb1 Isaku Yamahata
61 cb67beb1 Isaku Yamahata
#define PCI_CLASS_REVISION        0x08        /* High 24 bits are class, low 8 revision */
62 cb67beb1 Isaku Yamahata
#define PCI_REVISION_ID                0x08        /* Revision ID */
63 cb67beb1 Isaku Yamahata
#define PCI_CLASS_PROG                0x09        /* Reg. Level Programming Interface */
64 cb67beb1 Isaku Yamahata
#define PCI_CLASS_DEVICE        0x0a        /* Device class */
65 cb67beb1 Isaku Yamahata
66 cb67beb1 Isaku Yamahata
#define PCI_CACHE_LINE_SIZE        0x0c        /* 8 bits */
67 cb67beb1 Isaku Yamahata
#define PCI_LATENCY_TIMER        0x0d        /* 8 bits */
68 cb67beb1 Isaku Yamahata
#define PCI_HEADER_TYPE                0x0e        /* 8 bits */
69 cb67beb1 Isaku Yamahata
#define  PCI_HEADER_TYPE_NORMAL                0
70 cb67beb1 Isaku Yamahata
#define  PCI_HEADER_TYPE_BRIDGE                1
71 cb67beb1 Isaku Yamahata
#define  PCI_HEADER_TYPE_CARDBUS        2
72 cb67beb1 Isaku Yamahata
73 cb67beb1 Isaku Yamahata
#define PCI_BIST                0x0f        /* 8 bits */
74 cb67beb1 Isaku Yamahata
#define  PCI_BIST_CODE_MASK        0x0f        /* Return result */
75 cb67beb1 Isaku Yamahata
#define  PCI_BIST_START                0x40        /* 1 to start BIST, 2 secs or less */
76 cb67beb1 Isaku Yamahata
#define  PCI_BIST_CAPABLE        0x80        /* 1 if BIST capable */
77 cb67beb1 Isaku Yamahata
78 cb67beb1 Isaku Yamahata
/*
79 cb67beb1 Isaku Yamahata
 * Base addresses specify locations in memory or I/O space.
80 cb67beb1 Isaku Yamahata
 * Decoded size can be determined by writing a value of
81 cb67beb1 Isaku Yamahata
 * 0xffffffff to the register, and reading it back.  Only
82 cb67beb1 Isaku Yamahata
 * 1 bits are decoded.
83 cb67beb1 Isaku Yamahata
 */
84 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_0        0x10        /* 32 bits */
85 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_1        0x14        /* 32 bits [htype 0,1 only] */
86 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_2        0x18        /* 32 bits [htype 0 only] */
87 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_3        0x1c        /* 32 bits */
88 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_4        0x20        /* 32 bits */
89 cb67beb1 Isaku Yamahata
#define PCI_BASE_ADDRESS_5        0x24        /* 32 bits */
90 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_SPACE                0x01        /* 0 = memory, 1 = I/O */
91 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_SPACE_IO        0x01
92 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_SPACE_MEMORY        0x00
93 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_TYPE_MASK        0x06
94 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_TYPE_32        0x00        /* 32 bit address */
95 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_TYPE_1M        0x02        /* Below 1M [obsolete] */
96 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_TYPE_64        0x04        /* 64 bit address */
97 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_PREFETCH        0x08        /* prefetchable? */
98 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_MEM_MASK        (~0x0fUL)
99 cb67beb1 Isaku Yamahata
#define  PCI_BASE_ADDRESS_IO_MASK        (~0x03UL)
100 cb67beb1 Isaku Yamahata
/* bit 1 is reserved if address_space = 1 */
101 cb67beb1 Isaku Yamahata
102 cb67beb1 Isaku Yamahata
/* Header type 0 (normal devices) */
103 cb67beb1 Isaku Yamahata
#define PCI_CARDBUS_CIS                0x28
104 cb67beb1 Isaku Yamahata
#define PCI_SUBSYSTEM_VENDOR_ID        0x2c
105 cb67beb1 Isaku Yamahata
#define PCI_SUBSYSTEM_ID        0x2e
106 cb67beb1 Isaku Yamahata
#define PCI_ROM_ADDRESS                0x30        /* Bits 31..11 are address, 10..1 reserved */
107 cb67beb1 Isaku Yamahata
#define  PCI_ROM_ADDRESS_ENABLE        0x01
108 cb67beb1 Isaku Yamahata
#define PCI_ROM_ADDRESS_MASK        (~0x7ffUL)
109 cb67beb1 Isaku Yamahata
110 cb67beb1 Isaku Yamahata
#define PCI_CAPABILITY_LIST        0x34        /* Offset of first capability list entry */
111 cb67beb1 Isaku Yamahata
112 cb67beb1 Isaku Yamahata
/* 0x35-0x3b are reserved */
113 cb67beb1 Isaku Yamahata
#define PCI_INTERRUPT_LINE        0x3c        /* 8 bits */
114 cb67beb1 Isaku Yamahata
#define PCI_INTERRUPT_PIN        0x3d        /* 8 bits */
115 cb67beb1 Isaku Yamahata
#define PCI_MIN_GNT                0x3e        /* 8 bits */
116 cb67beb1 Isaku Yamahata
#define PCI_MAX_LAT                0x3f        /* 8 bits */
117 cb67beb1 Isaku Yamahata
118 cb67beb1 Isaku Yamahata
/* Header type 1 (PCI-to-PCI bridges) */
119 cb67beb1 Isaku Yamahata
#define PCI_PRIMARY_BUS                0x18        /* Primary bus number */
120 cb67beb1 Isaku Yamahata
#define PCI_SECONDARY_BUS        0x19        /* Secondary bus number */
121 cb67beb1 Isaku Yamahata
#define PCI_SUBORDINATE_BUS        0x1a        /* Highest bus number behind the bridge */
122 cb67beb1 Isaku Yamahata
#define PCI_SEC_LATENCY_TIMER        0x1b        /* Latency timer for secondary interface */
123 cb67beb1 Isaku Yamahata
#define PCI_IO_BASE                0x1c        /* I/O range behind the bridge */
124 cb67beb1 Isaku Yamahata
#define PCI_IO_LIMIT                0x1d
125 cb67beb1 Isaku Yamahata
#define  PCI_IO_RANGE_TYPE_MASK        0x0fUL        /* I/O bridging type */
126 cb67beb1 Isaku Yamahata
#define  PCI_IO_RANGE_TYPE_16        0x00
127 cb67beb1 Isaku Yamahata
#define  PCI_IO_RANGE_TYPE_32        0x01
128 cb67beb1 Isaku Yamahata
#define  PCI_IO_RANGE_MASK        (~0x0fUL)
129 cb67beb1 Isaku Yamahata
#define PCI_SEC_STATUS                0x1e        /* Secondary status register, only bit 14 used */
130 cb67beb1 Isaku Yamahata
#define PCI_MEMORY_BASE                0x20        /* Memory range behind */
131 cb67beb1 Isaku Yamahata
#define PCI_MEMORY_LIMIT        0x22
132 cb67beb1 Isaku Yamahata
#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
133 cb67beb1 Isaku Yamahata
#define  PCI_MEMORY_RANGE_MASK        (~0x0fUL)
134 cb67beb1 Isaku Yamahata
#define PCI_PREF_MEMORY_BASE        0x24        /* Prefetchable memory range behind */
135 cb67beb1 Isaku Yamahata
#define PCI_PREF_MEMORY_LIMIT        0x26
136 cb67beb1 Isaku Yamahata
#define  PCI_PREF_RANGE_TYPE_MASK 0x0fUL
137 cb67beb1 Isaku Yamahata
#define  PCI_PREF_RANGE_TYPE_32        0x00
138 cb67beb1 Isaku Yamahata
#define  PCI_PREF_RANGE_TYPE_64        0x01
139 cb67beb1 Isaku Yamahata
#define  PCI_PREF_RANGE_MASK        (~0x0fUL)
140 cb67beb1 Isaku Yamahata
#define PCI_PREF_BASE_UPPER32        0x28        /* Upper half of prefetchable memory range */
141 cb67beb1 Isaku Yamahata
#define PCI_PREF_LIMIT_UPPER32        0x2c
142 cb67beb1 Isaku Yamahata
#define PCI_IO_BASE_UPPER16        0x30        /* Upper half of I/O addresses */
143 cb67beb1 Isaku Yamahata
#define PCI_IO_LIMIT_UPPER16        0x32
144 cb67beb1 Isaku Yamahata
/* 0x34 same as for htype 0 */
145 cb67beb1 Isaku Yamahata
/* 0x35-0x3b is reserved */
146 cb67beb1 Isaku Yamahata
#define PCI_ROM_ADDRESS1        0x38        /* Same as PCI_ROM_ADDRESS, but for htype 1 */
147 cb67beb1 Isaku Yamahata
/* 0x3c-0x3d are same as for htype 0 */
148 cb67beb1 Isaku Yamahata
#define PCI_BRIDGE_CONTROL        0x3e
149 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_PARITY        0x01        /* Enable parity detection on secondary interface */
150 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_SERR        0x02        /* The same for SERR forwarding */
151 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_ISA        0x04        /* Enable ISA mode */
152 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_VGA        0x08        /* Forward VGA addresses */
153 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_MASTER_ABORT        0x20  /* Report master aborts */
154 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_BUS_RESET        0x40        /* Secondary bus reset */
155 cb67beb1 Isaku Yamahata
#define  PCI_BRIDGE_CTL_FAST_BACK        0x80        /* Fast Back2Back enabled on secondary interface */
156 cb67beb1 Isaku Yamahata
157 cb67beb1 Isaku Yamahata
/* Header type 2 (CardBus bridges) */
158 cb67beb1 Isaku Yamahata
#define PCI_CB_CAPABILITY_LIST        0x14
159 cb67beb1 Isaku Yamahata
/* 0x15 reserved */
160 cb67beb1 Isaku Yamahata
#define PCI_CB_SEC_STATUS        0x16        /* Secondary status */
161 cb67beb1 Isaku Yamahata
#define PCI_CB_PRIMARY_BUS        0x18        /* PCI bus number */
162 cb67beb1 Isaku Yamahata
#define PCI_CB_CARD_BUS                0x19        /* CardBus bus number */
163 cb67beb1 Isaku Yamahata
#define PCI_CB_SUBORDINATE_BUS        0x1a        /* Subordinate bus number */
164 cb67beb1 Isaku Yamahata
#define PCI_CB_LATENCY_TIMER        0x1b        /* CardBus latency timer */
165 cb67beb1 Isaku Yamahata
#define PCI_CB_MEMORY_BASE_0        0x1c
166 cb67beb1 Isaku Yamahata
#define PCI_CB_MEMORY_LIMIT_0        0x20
167 cb67beb1 Isaku Yamahata
#define PCI_CB_MEMORY_BASE_1        0x24
168 cb67beb1 Isaku Yamahata
#define PCI_CB_MEMORY_LIMIT_1        0x28
169 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_BASE_0        0x2c
170 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_BASE_0_HI        0x2e
171 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_LIMIT_0        0x30
172 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_LIMIT_0_HI        0x32
173 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_BASE_1        0x34
174 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_BASE_1_HI        0x36
175 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_LIMIT_1        0x38
176 cb67beb1 Isaku Yamahata
#define PCI_CB_IO_LIMIT_1_HI        0x3a
177 cb67beb1 Isaku Yamahata
#define  PCI_CB_IO_RANGE_MASK        (~0x03UL)
178 cb67beb1 Isaku Yamahata
/* 0x3c-0x3d are same as for htype 0 */
179 cb67beb1 Isaku Yamahata
#define PCI_CB_BRIDGE_CONTROL        0x3e
180 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_PARITY        0x01        /* Similar to standard bridge control register */
181 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_SERR                0x02
182 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_ISA                0x04
183 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_VGA                0x08
184 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_MASTER_ABORT        0x20
185 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_CB_RESET        0x40        /* CardBus reset */
186 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_16BIT_INT        0x80        /* Enable interrupt for 16-bit cards */
187 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM0 0x100        /* Prefetch enable for both memory regions */
188 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_PREFETCH_MEM1 0x200
189 cb67beb1 Isaku Yamahata
#define  PCI_CB_BRIDGE_CTL_POST_WRITES        0x400
190 cb67beb1 Isaku Yamahata
#define PCI_CB_SUBSYSTEM_VENDOR_ID        0x40
191 cb67beb1 Isaku Yamahata
#define PCI_CB_SUBSYSTEM_ID                0x42
192 cb67beb1 Isaku Yamahata
#define PCI_CB_LEGACY_MODE_BASE                0x44        /* 16-bit PC Card legacy mode base address (ExCa) */
193 cb67beb1 Isaku Yamahata
/* 0x48-0x7f reserved */
194 cb67beb1 Isaku Yamahata
195 cb67beb1 Isaku Yamahata
/* Capability lists */
196 cb67beb1 Isaku Yamahata
197 cb67beb1 Isaku Yamahata
#define PCI_CAP_LIST_ID                0        /* Capability ID */
198 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_PM                0x01        /* Power Management */
199 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_AGP                0x02        /* Accelerated Graphics Port */
200 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_VPD                0x03        /* Vital Product Data */
201 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_SLOTID        0x04        /* Slot Identification */
202 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_MSI                0x05        /* Message Signalled Interrupts */
203 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_CHSWP        0x06        /* CompactPCI HotSwap */
204 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_PCIX        0x07        /* PCI-X */
205 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_HT                0x08        /* HyperTransport */
206 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_VNDR        0x09        /* Vendor specific */
207 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_DBG                0x0A        /* Debug port */
208 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_CCRC        0x0B        /* CompactPCI Central Resource Control */
209 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_SHPC         0x0C        /* PCI Standard Hot-Plug Controller */
210 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_SSVID        0x0D        /* Bridge subsystem vendor/device ID */
211 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_AGP3        0x0E        /* AGP Target PCI-PCI bridge */
212 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_EXP         0x10        /* PCI Express */
213 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_MSIX        0x11        /* MSI-X */
214 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_AF                0x13        /* PCI Advanced Features */
215 cb67beb1 Isaku Yamahata
#define PCI_CAP_LIST_NEXT        1        /* Next capability in the list */
216 cb67beb1 Isaku Yamahata
#define PCI_CAP_FLAGS                2        /* Capability defined flags (16 bits) */
217 cb67beb1 Isaku Yamahata
#define PCI_CAP_SIZEOF                4
218 cb67beb1 Isaku Yamahata
219 cb67beb1 Isaku Yamahata
/* Power Management Registers */
220 cb67beb1 Isaku Yamahata
221 cb67beb1 Isaku Yamahata
#define PCI_PM_PMC                2        /* PM Capabilities Register */
222 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_VER_MASK        0x0007        /* Version */
223 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_CLOCK        0x0008        /* PME clock required */
224 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */
225 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_DSI                0x0020        /* Device specific initialization */
226 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_AUX_POWER        0x01C0        /* Auxilliary power support mask */
227 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_D1                0x0200        /* D1 power state support */
228 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_D2                0x0400        /* D2 power state support */
229 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME                0x0800        /* PME pin supported */
230 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_MASK        0xF800        /* PME Mask of all supported states */
231 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D0        0x0800        /* PME# from D0 */
232 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D1        0x1000        /* PME# from D1 */
233 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D2        0x2000        /* PME# from D2 */
234 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D3        0x4000        /* PME# from D3 (hot) */
235 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D3cold        0x8000        /* PME# from D3 (cold) */
236 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_SHIFT        11        /* Start of the PME Mask in PMC */
237 cb67beb1 Isaku Yamahata
#define PCI_PM_CTRL                4        /* PM control and status register */
238 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_STATE_MASK        0x0003        /* Current power state (D0 to D3) */
239 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_NO_SOFT_RESET        0x0008        /* No reset for D3hot->D0 */
240 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_PME_ENABLE        0x0100        /* PME pin enable */
241 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_DATA_SEL_MASK        0x1e00        /* Data select (??) */
242 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_DATA_SCALE_MASK        0x6000        /* Data scale (??) */
243 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_PME_STATUS        0x8000        /* PME pin status */
244 cb67beb1 Isaku Yamahata
#define PCI_PM_PPB_EXTENSIONS        6        /* PPB support extensions (??) */
245 cb67beb1 Isaku Yamahata
#define  PCI_PM_PPB_B2_B3        0x40        /* Stop clock when in D3hot (??) */
246 cb67beb1 Isaku Yamahata
#define  PCI_PM_BPCC_ENABLE        0x80        /* Bus power/clock control enable (??) */
247 cb67beb1 Isaku Yamahata
#define PCI_PM_DATA_REGISTER        7        /* (??) */
248 cb67beb1 Isaku Yamahata
#define PCI_PM_SIZEOF                8
249 cb67beb1 Isaku Yamahata
250 cb67beb1 Isaku Yamahata
/* AGP registers */
251 cb67beb1 Isaku Yamahata
252 cb67beb1 Isaku Yamahata
#define PCI_AGP_VERSION                2        /* BCD version number */
253 cb67beb1 Isaku Yamahata
#define PCI_AGP_RFU                3        /* Rest of capability flags */
254 cb67beb1 Isaku Yamahata
#define PCI_AGP_STATUS                4        /* Status register */
255 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RQ_MASK        0xff000000        /* Maximum number of requests - 1 */
256 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_SBA        0x0200        /* Sideband addressing supported */
257 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_64BIT        0x0020        /* 64-bit addressing supported */
258 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_FW        0x0010        /* FW transfers supported */
259 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE4        0x0004        /* 4x transfer rate supported */
260 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE2        0x0002        /* 2x transfer rate supported */
261 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE1        0x0001        /* 1x transfer rate supported */
262 cb67beb1 Isaku Yamahata
#define PCI_AGP_COMMAND                8        /* Control register */
263 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */
264 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_SBA        0x0200        /* Sideband addressing enabled */
265 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_AGP        0x0100        /* Allow processing of AGP transactions */
266 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_64BIT        0x0020         /* Allow processing of 64-bit addresses */
267 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_FW        0x0010         /* Force FW transfers */
268 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE4        0x0004        /* Use 4x rate */
269 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE2        0x0002        /* Use 2x rate */
270 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE1        0x0001        /* Use 1x rate */
271 cb67beb1 Isaku Yamahata
#define PCI_AGP_SIZEOF                12
272 cb67beb1 Isaku Yamahata
273 cb67beb1 Isaku Yamahata
/* Vital Product Data */
274 cb67beb1 Isaku Yamahata
275 cb67beb1 Isaku Yamahata
#define PCI_VPD_ADDR                2        /* Address to access (15 bits!) */
276 cb67beb1 Isaku Yamahata
#define  PCI_VPD_ADDR_MASK        0x7fff        /* Address mask */
277 cb67beb1 Isaku Yamahata
#define  PCI_VPD_ADDR_F                0x8000        /* Write 0, 1 indicates completion */
278 cb67beb1 Isaku Yamahata
#define PCI_VPD_DATA                4        /* 32-bits of data returned here */
279 cb67beb1 Isaku Yamahata
280 cb67beb1 Isaku Yamahata
/* Slot Identification */
281 cb67beb1 Isaku Yamahata
282 cb67beb1 Isaku Yamahata
#define PCI_SID_ESR                2        /* Expansion Slot Register */
283 cb67beb1 Isaku Yamahata
#define  PCI_SID_ESR_NSLOTS        0x1f        /* Number of expansion slots available */
284 cb67beb1 Isaku Yamahata
#define  PCI_SID_ESR_FIC        0x20        /* First In Chassis Flag */
285 cb67beb1 Isaku Yamahata
#define PCI_SID_CHASSIS_NR        3        /* Chassis Number */
286 cb67beb1 Isaku Yamahata
287 cb67beb1 Isaku Yamahata
/* Message Signalled Interrupts registers */
288 cb67beb1 Isaku Yamahata
289 cb67beb1 Isaku Yamahata
#define PCI_MSI_FLAGS                2        /* Various flags */
290 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_64BIT        0x80        /* 64-bit addresses allowed */
291 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_QSIZE        0x70        /* Message queue size configured */
292 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_QMASK        0x0e        /* Maximum queue size available */
293 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_ENABLE        0x01        /* MSI feature enabled */
294 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_MASKBIT        0x100        /* 64-bit mask bits allowed */
295 cb67beb1 Isaku Yamahata
#define PCI_MSI_RFU                3        /* Rest of capability flags */
296 cb67beb1 Isaku Yamahata
#define PCI_MSI_ADDRESS_LO        4        /* Lower 32 bits */
297 cb67beb1 Isaku Yamahata
#define PCI_MSI_ADDRESS_HI        8        /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
298 cb67beb1 Isaku Yamahata
#define PCI_MSI_DATA_32                8        /* 16 bits of data for 32-bit devices */
299 cb67beb1 Isaku Yamahata
#define PCI_MSI_MASK_32                12        /* Mask bits register for 32-bit devices */
300 cb67beb1 Isaku Yamahata
#define PCI_MSI_DATA_64                12        /* 16 bits of data for 64-bit devices */
301 cb67beb1 Isaku Yamahata
#define PCI_MSI_MASK_64                16        /* Mask bits register for 64-bit devices */
302 cb67beb1 Isaku Yamahata
303 cb67beb1 Isaku Yamahata
/* MSI-X registers (these are at offset PCI_MSIX_FLAGS) */
304 cb67beb1 Isaku Yamahata
#define PCI_MSIX_FLAGS                2
305 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_QSIZE        0x7FF
306 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_ENABLE        (1 << 15)
307 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_MASKALL        (1 << 14)
308 cb67beb1 Isaku Yamahata
#define PCI_MSIX_FLAGS_BIRMASK        (7 << 0)
309 cb67beb1 Isaku Yamahata
310 cb67beb1 Isaku Yamahata
/* CompactPCI Hotswap Register */
311 cb67beb1 Isaku Yamahata
312 cb67beb1 Isaku Yamahata
#define PCI_CHSWP_CSR                2        /* Control and Status Register */
313 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_DHA                0x01        /* Device Hiding Arm */
314 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_EIM                0x02        /* ENUM# Signal Mask */
315 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_PIE                0x04        /* Pending Insert or Extract */
316 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_LOO                0x08        /* LED On / Off */
317 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_PI                0x30        /* Programming Interface */
318 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_EXT                0x40        /* ENUM# status - extraction */
319 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_INS                0x80        /* ENUM# status - insertion */
320 cb67beb1 Isaku Yamahata
321 cb67beb1 Isaku Yamahata
/* PCI Advanced Feature registers */
322 cb67beb1 Isaku Yamahata
323 cb67beb1 Isaku Yamahata
#define PCI_AF_LENGTH                2
324 cb67beb1 Isaku Yamahata
#define PCI_AF_CAP                3
325 cb67beb1 Isaku Yamahata
#define  PCI_AF_CAP_TP                0x01
326 cb67beb1 Isaku Yamahata
#define  PCI_AF_CAP_FLR                0x02
327 cb67beb1 Isaku Yamahata
#define PCI_AF_CTRL                4
328 cb67beb1 Isaku Yamahata
#define  PCI_AF_CTRL_FLR        0x01
329 cb67beb1 Isaku Yamahata
#define PCI_AF_STATUS                5
330 cb67beb1 Isaku Yamahata
#define  PCI_AF_STATUS_TP        0x01
331 cb67beb1 Isaku Yamahata
332 cb67beb1 Isaku Yamahata
/* PCI-X registers */
333 cb67beb1 Isaku Yamahata
334 cb67beb1 Isaku Yamahata
#define PCI_X_CMD                2        /* Modes & Features */
335 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_DPERR_E        0x0001        /* Data Parity Error Recovery Enable */
336 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_ERO                0x0002        /* Enable Relaxed Ordering */
337 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_512        0x0000        /* 512 byte maximum read byte count */
338 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_1K        0x0004        /* 1Kbyte maximum read byte count */
339 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_2K        0x0008        /* 2Kbyte maximum read byte count */
340 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_4K        0x000c        /* 4Kbyte maximum read byte count */
341 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_MAX_READ        0x000c        /* Max Memory Read Byte Count */
342 cb67beb1 Isaku Yamahata
                                /* Max # of outstanding split transactions */
343 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_1        0x0000        /* Max 1 */
344 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_2        0x0010        /* Max 2 */
345 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_3        0x0020        /* Max 3 */
346 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_4        0x0030        /* Max 4 */
347 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_8        0x0040        /* Max 8 */
348 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_12        0x0050        /* Max 12 */
349 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_16        0x0060        /* Max 16 */
350 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_32        0x0070        /* Max 32 */
351 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_MAX_SPLIT        0x0070        /* Max Outstanding Split Transactions */
352 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_VERSION(x)         (((x) >> 12) & 3) /* Version */
353 cb67beb1 Isaku Yamahata
#define PCI_X_STATUS                4        /* PCI-X capabilities */
354 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_DEVFN        0x000000ff        /* A copy of devfn */
355 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_BUS        0x0000ff00        /* A copy of bus nr */
356 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_64BIT        0x00010000        /* 64-bit device */
357 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_133MHZ        0x00020000        /* 133 MHz capable */
358 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_SPL_DISC        0x00040000        /* Split Completion Discarded */
359 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_UNX_SPL        0x00080000        /* Unexpected Split Completion */
360 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_COMPLEX        0x00100000        /* Device Complexity */
361 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_READ        0x00600000        /* Designed Max Memory Read Count */
362 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_SPLIT        0x03800000        /* Designed Max Outstanding Split Transactions */
363 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_CUM        0x1c000000        /* Designed Max Cumulative Read Size */
364 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_SPL_ERR        0x20000000        /* Rcvd Split Completion Error Msg */
365 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_266MHZ        0x40000000        /* 266 MHz capable */
366 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_533MHZ        0x80000000        /* 533 MHz capable */
367 cb67beb1 Isaku Yamahata
368 cb67beb1 Isaku Yamahata
/* PCI Express capability registers */
369 cb67beb1 Isaku Yamahata
370 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS                2        /* Capabilities register */
371 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_VERS        0x000f        /* Capability version */
372 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_TYPE        0x00f0        /* Device/Port type */
373 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_ENDPOINT        0x0        /* Express Endpoint */
374 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_LEG_END        0x1        /* Legacy Endpoint */
375 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_ROOT_PORT 0x4        /* Root Port */
376 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_UPSTREAM        0x5        /* Upstream Port */
377 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_DOWNSTREAM 0x6        /* Downstream Port */
378 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7        /* PCI/PCI-X Bridge */
379 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_RC_END        0x9        /* Root Complex Integrated Endpoint */
380 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_RC_EC        0x10        /* Root Complex Event Collector */
381 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_SLOT        0x0100        /* Slot implemented */
382 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_IRQ        0x3e00        /* Interrupt message number */
383 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCAP                4        /* Device capabilities */
384 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PAYLOAD        0x07        /* Max_Payload_Size */
385 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PHANTOM        0x18        /* Phantom functions */
386 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_EXT_TAG        0x20        /* Extended tags */
387 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_L0S        0x1c0        /* L0s Acceptable Latency */
388 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_L1        0xe00        /* L1 Acceptable Latency */
389 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_ATN_BUT        0x1000        /* Attention Button Present */
390 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_ATN_IND        0x2000        /* Attention Indicator Present */
391 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_IND        0x4000        /* Power Indicator Present */
392 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_RBER        0x8000        /* Role-Based Error Reporting */
393 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_VAL        0x3fc0000 /* Slot Power Limit Value */
394 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_SCL        0xc000000 /* Slot Power Limit Scale */
395 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
396 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCTL                8        /* Device Control */
397 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_CERE        0x0001        /* Correctable Error Reporting En. */
398 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_NFERE        0x0002        /* Non-Fatal Error Reporting Enable */
399 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_FERE        0x0004        /* Fatal Error Reporting Enable */
400 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_URRE        0x0008        /* Unsupported Request Reporting En. */
401 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
402 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_PAYLOAD        0x00e0        /* Max_Payload_Size */
403 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_EXT_TAG        0x0100        /* Extended Tag Field Enable */
404 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_PHANTOM        0x0200        /* Phantom Functions Enable */
405 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_AUX_PME        0x0400        /* Auxiliary Power PM Enable */
406 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
407 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_READRQ        0x7000        /* Max_Read_Request_Size */
408 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
409 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVSTA                10        /* Device Status */
410 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_CED        0x01        /* Correctable Error Detected */
411 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_NFED        0x02        /* Non-Fatal Error Detected */
412 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_FED        0x04        /* Fatal Error Detected */
413 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_URD        0x08        /* Unsupported Request Detected */
414 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_AUXPD        0x10        /* AUX Power Detected */
415 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_TRPND        0x20        /* Transactions Pending */
416 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCAP                12        /* Link Capabilities */
417 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_SLS        0x0000000f /* Supported Link Speeds */
418 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_MLW        0x000003f0 /* Maximum Link Width */
419 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_ASPMS        0x00000c00 /* ASPM Support */
420 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_L0SEL        0x00007000 /* L0s Exit Latency */
421 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_L1EL        0x00038000 /* L1 Exit Latency */
422 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_CLKPM        0x00040000 /* L1 Clock Power Management */
423 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_SDERC        0x00080000 /* Suprise Down Error Reporting Capable */
424 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link Active Reporting Capable */
425 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_LBNC        0x00200000 /* Link Bandwidth Notification Capability */
426 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_PN        0xff000000 /* Port Number */
427 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCTL                16        /* Link Control */
428 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_ASPMC        0x0003        /* ASPM Control */
429 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_RCB        0x0008        /* Read Completion Boundary */
430 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LD        0x0010        /* Link Disable */
431 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_RL        0x0020        /* Retrain Link */
432 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_CCC        0x0040        /* Common Clock Configuration */
433 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_ES        0x0080        /* Extended Synch */
434 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_CLKREQ_EN 0x100        /* Enable clkreq */
435 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_HAWD        0x0200        /* Hardware Autonomous Width Disable */
436 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LBMIE        0x0400        /* Link Bandwidth Management Interrupt Enable */
437 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LABIE        0x0800        /* Lnk Autonomous Bandwidth Interrupt Enable */
438 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKSTA                18        /* Link Status */
439 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_CLS        0x000f        /* Current Link Speed */
440 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_NLW        0x03f0        /* Nogotiated Link Width */
441 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LT        0x0800        /* Link Training */
442 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_SLC        0x1000        /* Slot Clock Configuration */
443 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_DLLLA        0x2000        /* Data Link Layer Link Active */
444 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LBMS        0x4000        /* Link Bandwidth Management Status */
445 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LABS        0x8000        /* Link Autonomous Bandwidth Status */
446 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCAP                20        /* Slot Capabilities */
447 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_ABP        0x00000001 /* Attention Button Present */
448 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PCP        0x00000002 /* Power Controller Present */
449 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_MRLSP        0x00000004 /* MRL Sensor Present */
450 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_AIP        0x00000008 /* Attention Indicator Present */
451 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PIP        0x00000010 /* Power Indicator Present */
452 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_HPS        0x00000020 /* Hot-Plug Surprise */
453 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_HPC        0x00000040 /* Hot-Plug Capable */
454 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_SPLV        0x00007f80 /* Slot Power Limit Value */
455 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_SPLS        0x00018000 /* Slot Power Limit Scale */
456 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_EIP        0x00020000 /* Electromechanical Interlock Present */
457 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_NCCS        0x00040000 /* No Command Completed Support */
458 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PSN        0xfff80000 /* Physical Slot Number */
459 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCTL                24        /* Slot Control */
460 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_ABPE        0x0001        /* Attention Button Pressed Enable */
461 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PFDE        0x0002        /* Power Fault Detected Enable */
462 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_MRLSCE        0x0004        /* MRL Sensor Changed Enable */
463 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PDCE        0x0008        /* Presence Detect Changed Enable */
464 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_CCIE        0x0010        /* Command Completed Interrupt Enable */
465 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_HPIE        0x0020        /* Hot-Plug Interrupt Enable */
466 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_AIC        0x00c0        /* Attention Indicator Control */
467 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PIC        0x0300        /* Power Indicator Control */
468 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PCC        0x0400        /* Power Controller Control */
469 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_EIC        0x0800        /* Electromechanical Interlock Control */
470 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_DLLSCE        0x1000        /* Data Link Layer State Changed Enable */
471 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTSTA                26        /* Slot Status */
472 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_ABP        0x0001        /* Attention Button Pressed */
473 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PFD        0x0002        /* Power Fault Detected */
474 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_MRLSC        0x0004        /* MRL Sensor Changed */
475 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PDC        0x0008        /* Presence Detect Changed */
476 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_CC        0x0010        /* Command Completed */
477 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_MRLSS        0x0020        /* MRL Sensor State */
478 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PDS        0x0040        /* Presence Detect State */
479 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_EIS        0x0080        /* Electromechanical Interlock Status */
480 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_DLLSC        0x0100        /* Data Link Layer State Changed */
481 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTCTL                28        /* Root Control */
482 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SECEE        0x01        /* System Error on Correctable Error */
483 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SENFEE        0x02        /* System Error on Non-Fatal Error */
484 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SEFEE        0x04        /* System Error on Fatal Error */
485 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_PMEIE        0x08        /* PME Interrupt Enable */
486 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_CRSSVE        0x10        /* CRS Software Visibility Enable */
487 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTCAP                30        /* Root Capabilities */
488 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTSTA                32        /* Root Status */
489 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCAP2                36        /* Device Capabilities 2 */
490 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP2_ARI        0x20        /* Alternative Routing-ID */
491 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCTL2                40        /* Device Control 2 */
492 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL2_ARI        0x20        /* Alternative Routing-ID */
493 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCTL2                48        /* Link Control 2 */
494 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCTL2                56        /* Slot Control 2 */
495 cb67beb1 Isaku Yamahata
496 cb67beb1 Isaku Yamahata
/* Extended Capabilities (PCI-X 2.0 and Express) */
497 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID(header)                (header & 0x0000ffff)
498 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_VER(header)                ((header >> 16) & 0xf)
499 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_NEXT(header)        ((header >> 20) & 0xffc)
500 cb67beb1 Isaku Yamahata
501 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ERR        1
502 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_VC        2
503 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_DSN        3
504 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_PWR        4
505 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ARI        14
506 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ATS        15
507 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_SRIOV        16
508 cb67beb1 Isaku Yamahata
509 cb67beb1 Isaku Yamahata
/* Advanced Error Reporting */
510 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_STATUS        4        /* Uncorrectable Error Status */
511 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_TRAIN        0x00000001        /* Training */
512 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_DLP        0x00000010        /* Data Link Protocol */
513 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_POISON_TLP        0x00001000        /* Poisoned TLP */
514 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_FCP        0x00002000        /* Flow Control Protocol */
515 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_COMP_TIME        0x00004000        /* Completion Timeout */
516 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_COMP_ABORT        0x00008000        /* Completer Abort */
517 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_UNX_COMP        0x00010000        /* Unexpected Completion */
518 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_RX_OVER        0x00020000        /* Receiver Overflow */
519 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_MALF_TLP        0x00040000        /* Malformed TLP */
520 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_ECRC        0x00080000        /* ECRC Error Status */
521 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_UNSUP        0x00100000        /* Unsupported Request */
522 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_MASK        8        /* Uncorrectable Error Mask */
523 cb67beb1 Isaku Yamahata
        /* Same bits as above */
524 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_SEVER        12        /* Uncorrectable Error Severity */
525 cb67beb1 Isaku Yamahata
        /* Same bits as above */
526 cb67beb1 Isaku Yamahata
#define PCI_ERR_COR_STATUS        16        /* Correctable Error Status */
527 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_RCVR        0x00000001        /* Receiver Error Status */
528 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_BAD_TLP        0x00000040        /* Bad TLP Status */
529 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_BAD_DLLP        0x00000080        /* Bad DLLP Status */
530 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_REP_ROLL        0x00000100        /* REPLAY_NUM Rollover */
531 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_REP_TIMER        0x00001000        /* Replay Timer Timeout */
532 cb67beb1 Isaku Yamahata
#define PCI_ERR_COR_MASK        20        /* Correctable Error Mask */
533 cb67beb1 Isaku Yamahata
        /* Same bits as above */
534 cb67beb1 Isaku Yamahata
#define PCI_ERR_CAP                24        /* Advanced Error Capabilities */
535 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_FEP(x)        ((x) & 31)        /* First Error Pointer */
536 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_GENC        0x00000020        /* ECRC Generation Capable */
537 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_GENE        0x00000040        /* ECRC Generation Enable */
538 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_CHKC        0x00000080        /* ECRC Check Capable */
539 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_CHKE        0x00000100        /* ECRC Check Enable */
540 cb67beb1 Isaku Yamahata
#define PCI_ERR_HEADER_LOG        28        /* Header Log Register (16 bytes) */
541 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_COMMAND        44        /* Root Error Command */
542 cb67beb1 Isaku Yamahata
/* Correctable Err Reporting Enable */
543 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_COR_EN                0x00000001
544 cb67beb1 Isaku Yamahata
/* Non-fatal Err Reporting Enable */
545 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_NONFATAL_EN        0x00000002
546 cb67beb1 Isaku Yamahata
/* Fatal Err Reporting Enable */
547 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_FATAL_EN        0x00000004
548 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_STATUS        48
549 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_COR_RCV                0x00000001        /* ERR_COR Received */
550 cb67beb1 Isaku Yamahata
/* Multi ERR_COR Received */
551 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_MULTI_COR_RCV        0x00000002
552 cb67beb1 Isaku Yamahata
/* ERR_FATAL/NONFATAL Recevied */
553 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_UNCOR_RCV                0x00000004
554 cb67beb1 Isaku Yamahata
/* Multi ERR_FATAL/NONFATAL Recevied */
555 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_MULTI_UNCOR_RCV        0x00000008
556 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_FIRST_FATAL        0x00000010        /* First Fatal */
557 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_NONFATAL_RCV        0x00000020        /* Non-Fatal Received */
558 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_FATAL_RCV                0x00000040        /* Fatal Received */
559 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_COR_SRC        52
560 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_SRC        54
561 cb67beb1 Isaku Yamahata
562 cb67beb1 Isaku Yamahata
/* Virtual Channel */
563 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_REG1        4
564 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_REG2        8
565 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_CTRL        12
566 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_STATUS        14
567 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_CAP                16
568 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_CTRL                20
569 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_STATUS        26
570 cb67beb1 Isaku Yamahata
571 cb67beb1 Isaku Yamahata
/* Power Budgeting */
572 cb67beb1 Isaku Yamahata
#define PCI_PWR_DSR                4        /* Data Select Register */
573 cb67beb1 Isaku Yamahata
#define PCI_PWR_DATA                8        /* Data Register */
574 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_BASE(x)        ((x) & 0xff)            /* Base Power */
575 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_SCALE(x)        (((x) >> 8) & 3)    /* Data Scale */
576 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_PM_SUB(x)        (((x) >> 10) & 7)   /* PM Sub State */
577 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
578 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_TYPE(x)        (((x) >> 15) & 7)   /* Type */
579 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_RAIL(x)        (((x) >> 18) & 7)   /* Power Rail */
580 cb67beb1 Isaku Yamahata
#define PCI_PWR_CAP                12        /* Capability */
581 cb67beb1 Isaku Yamahata
#define  PCI_PWR_CAP_BUDGET(x)        ((x) & 1)        /* Included in system budget */
582 cb67beb1 Isaku Yamahata
583 cb67beb1 Isaku Yamahata
/*
584 cb67beb1 Isaku Yamahata
 * Hypertransport sub capability types
585 cb67beb1 Isaku Yamahata
 *
586 cb67beb1 Isaku Yamahata
 * Unfortunately there are both 3 bit and 5 bit capability types defined
587 cb67beb1 Isaku Yamahata
 * in the HT spec, catering for that is a little messy. You probably don't
588 cb67beb1 Isaku Yamahata
 * want to use these directly, just use pci_find_ht_capability() and it
589 cb67beb1 Isaku Yamahata
 * will do the right thing for you.
590 cb67beb1 Isaku Yamahata
 */
591 cb67beb1 Isaku Yamahata
#define HT_3BIT_CAP_MASK        0xE0
592 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_SLAVE        0x00        /* Slave/Primary link configuration */
593 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_HOST                0x20        /* Host/Secondary link configuration */
594 cb67beb1 Isaku Yamahata
595 cb67beb1 Isaku Yamahata
#define HT_5BIT_CAP_MASK        0xF8
596 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_IRQ                0x80        /* IRQ Configuration */
597 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_REMAPPING_40        0xA0        /* 40 bit address remapping */
598 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_REMAPPING_64 0xA2        /* 64 bit address remapping */
599 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_UNITID_CLUMP        0x90        /* Unit ID clumping */
600 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_EXTCONF        0x98        /* Extended Configuration Space Access */
601 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_MSI_MAPPING        0xA8        /* MSI Mapping Capability */
602 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS                0x02                /* Offset to flags */
603 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS_ENABLE        0x1                /* Mapping enable */
604 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS_FIXED        0x2                /* Fixed mapping only */
605 cb67beb1 Isaku Yamahata
#define  HT_MSI_FIXED_ADDR        0x00000000FEE00000ULL        /* Fixed addr */
606 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_LO                0x04                /* Offset to low addr bits */
607 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_LO_MASK        0xFFF00000        /* Low address bit mask */
608 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_HI                0x08                /* Offset to high addr bits */
609 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_DIRECT_ROUTE        0xB0        /* Direct routing configuration */
610 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_VCSET        0xB8        /* Virtual Channel configuration */
611 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_ERROR_RETRY        0xC0        /* Retry on error configuration */
612 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_GEN3                0xD0        /* Generation 3 hypertransport configuration */
613 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_PM                0xE0        /* Hypertransport powermanagement configuration */
614 cb67beb1 Isaku Yamahata
615 cb67beb1 Isaku Yamahata
/* Alternative Routing-ID Interpretation */
616 cb67beb1 Isaku Yamahata
#define PCI_ARI_CAP                0x04        /* ARI Capability Register */
617 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_MFVC        0x0001        /* MFVC Function Groups Capability */
618 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_ACS        0x0002        /* ACS Function Groups Capability */
619 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_NFN(x)        (((x) >> 8) & 0xff) /* Next Function Number */
620 cb67beb1 Isaku Yamahata
#define PCI_ARI_CTRL                0x06        /* ARI Control Register */
621 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_MFVC        0x0001        /* MFVC Function Groups Enable */
622 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_ACS        0x0002        /* ACS Function Groups Enable */
623 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_FG(x)        (((x) >> 4) & 7) /* Function Group */
624 cb67beb1 Isaku Yamahata
625 cb67beb1 Isaku Yamahata
/* Address Translation Service */
626 cb67beb1 Isaku Yamahata
#define PCI_ATS_CAP                0x04        /* ATS Capability Register */
627 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CAP_QDEP(x)        ((x) & 0x1f)        /* Invalidate Queue Depth */
628 cb67beb1 Isaku Yamahata
#define  PCI_ATS_MAX_QDEP        32        /* Max Invalidate Queue Depth */
629 cb67beb1 Isaku Yamahata
#define PCI_ATS_CTRL                0x06        /* ATS Control Register */
630 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CTRL_ENABLE        0x8000        /* ATS Enable */
631 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CTRL_STU(x)        ((x) & 0x1f)        /* Smallest Translation Unit */
632 cb67beb1 Isaku Yamahata
#define  PCI_ATS_MIN_STU        12        /* shift of minimum STU block */
633 cb67beb1 Isaku Yamahata
634 cb67beb1 Isaku Yamahata
/* Single Root I/O Virtualization */
635 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_CAP                0x04        /* SR-IOV Capabilities */
636 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CAP_VFM        0x01        /* VF Migration Capable */
637 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CAP_INTR(x)        ((x) >> 21) /* Interrupt Message Number */
638 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_CTRL                0x08        /* SR-IOV Control */
639 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_VFE        0x01        /* VF Enable */
640 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_VFM        0x02        /* VF Migration Enable */
641 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_INTR        0x04        /* VF Migration Interrupt Enable */
642 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_MSE        0x08        /* VF Memory Space Enable */
643 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_ARI        0x10        /* ARI Capable Hierarchy */
644 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_STATUS        0x0a        /* SR-IOV Status */
645 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_STATUS_VFM        0x01        /* VF Migration Status */
646 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_INITIAL_VF        0x0c        /* Initial VFs */
647 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_TOTAL_VF        0x0e        /* Total VFs */
648 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_NUM_VF        0x10        /* Number of VFs */
649 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_FUNC_LINK        0x12        /* Function Dependency Link */
650 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_OFFSET        0x14        /* First VF Offset */
651 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_STRIDE        0x16        /* Following VF Stride */
652 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_DID        0x1a        /* VF Device ID */
653 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_SUP_PGSIZE        0x1c        /* Supported Page Sizes */
654 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_SYS_PGSIZE        0x20        /* System Page Size */
655 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_BAR                0x24        /* VF BAR0 */
656 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_NUM_BARS        6        /* Number of VF BARs */
657 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VFM                0x3c        /* VF Migration State Array Offset*/
658 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_BIR(x)        ((x) & 7)        /* State BIR */
659 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7)        /* State Offset */
660 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_UA        0x0        /* Inactive.Unavailable */
661 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_MI        0x1        /* Dormant.MigrateIn */
662 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_MO        0x2        /* Active.MigrateOut */
663 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_AV        0x3        /* Active.Available */
664 cb67beb1 Isaku Yamahata
665 cb67beb1 Isaku Yamahata
#endif /* LINUX_PCI_REGS_H */