Statistics
| Branch: | Revision:

root / hw / pci_regs.h @ 43997225

History | View | Annotate | Download (35.5 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 465f1ab1 Daniel Verkamp
#define  PCI_CAP_ID_SATA        0x12        /* Serial ATA */
215 cb67beb1 Isaku Yamahata
#define  PCI_CAP_ID_AF                0x13        /* PCI Advanced Features */
216 cb67beb1 Isaku Yamahata
#define PCI_CAP_LIST_NEXT        1        /* Next capability in the list */
217 cb67beb1 Isaku Yamahata
#define PCI_CAP_FLAGS                2        /* Capability defined flags (16 bits) */
218 cb67beb1 Isaku Yamahata
#define PCI_CAP_SIZEOF                4
219 cb67beb1 Isaku Yamahata
220 cb67beb1 Isaku Yamahata
/* Power Management Registers */
221 cb67beb1 Isaku Yamahata
222 cb67beb1 Isaku Yamahata
#define PCI_PM_PMC                2        /* PM Capabilities Register */
223 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_VER_MASK        0x0007        /* Version */
224 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_CLOCK        0x0008        /* PME clock required */
225 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_RESERVED    0x0010  /* Reserved field */
226 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_DSI                0x0020        /* Device specific initialization */
227 a7f22f06 Stefan Weil
#define  PCI_PM_CAP_AUX_POWER        0x01C0        /* Auxiliary power support mask */
228 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_D1                0x0200        /* D1 power state support */
229 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_D2                0x0400        /* D2 power state support */
230 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME                0x0800        /* PME pin supported */
231 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_MASK        0xF800        /* PME Mask of all supported states */
232 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D0        0x0800        /* PME# from D0 */
233 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D1        0x1000        /* PME# from D1 */
234 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D2        0x2000        /* PME# from D2 */
235 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D3        0x4000        /* PME# from D3 (hot) */
236 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_D3cold        0x8000        /* PME# from D3 (cold) */
237 cb67beb1 Isaku Yamahata
#define  PCI_PM_CAP_PME_SHIFT        11        /* Start of the PME Mask in PMC */
238 cb67beb1 Isaku Yamahata
#define PCI_PM_CTRL                4        /* PM control and status register */
239 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_STATE_MASK        0x0003        /* Current power state (D0 to D3) */
240 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_NO_SOFT_RESET        0x0008        /* No reset for D3hot->D0 */
241 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_PME_ENABLE        0x0100        /* PME pin enable */
242 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_DATA_SEL_MASK        0x1e00        /* Data select (??) */
243 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_DATA_SCALE_MASK        0x6000        /* Data scale (??) */
244 cb67beb1 Isaku Yamahata
#define  PCI_PM_CTRL_PME_STATUS        0x8000        /* PME pin status */
245 cb67beb1 Isaku Yamahata
#define PCI_PM_PPB_EXTENSIONS        6        /* PPB support extensions (??) */
246 cb67beb1 Isaku Yamahata
#define  PCI_PM_PPB_B2_B3        0x40        /* Stop clock when in D3hot (??) */
247 cb67beb1 Isaku Yamahata
#define  PCI_PM_BPCC_ENABLE        0x80        /* Bus power/clock control enable (??) */
248 cb67beb1 Isaku Yamahata
#define PCI_PM_DATA_REGISTER        7        /* (??) */
249 cb67beb1 Isaku Yamahata
#define PCI_PM_SIZEOF                8
250 cb67beb1 Isaku Yamahata
251 cb67beb1 Isaku Yamahata
/* AGP registers */
252 cb67beb1 Isaku Yamahata
253 cb67beb1 Isaku Yamahata
#define PCI_AGP_VERSION                2        /* BCD version number */
254 cb67beb1 Isaku Yamahata
#define PCI_AGP_RFU                3        /* Rest of capability flags */
255 cb67beb1 Isaku Yamahata
#define PCI_AGP_STATUS                4        /* Status register */
256 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RQ_MASK        0xff000000        /* Maximum number of requests - 1 */
257 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_SBA        0x0200        /* Sideband addressing supported */
258 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_64BIT        0x0020        /* 64-bit addressing supported */
259 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_FW        0x0010        /* FW transfers supported */
260 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE4        0x0004        /* 4x transfer rate supported */
261 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE2        0x0002        /* 2x transfer rate supported */
262 cb67beb1 Isaku Yamahata
#define  PCI_AGP_STATUS_RATE1        0x0001        /* 1x transfer rate supported */
263 cb67beb1 Isaku Yamahata
#define PCI_AGP_COMMAND                8        /* Control register */
264 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RQ_MASK 0xff000000  /* Master: Maximum number of requests */
265 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_SBA        0x0200        /* Sideband addressing enabled */
266 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_AGP        0x0100        /* Allow processing of AGP transactions */
267 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_64BIT        0x0020         /* Allow processing of 64-bit addresses */
268 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_FW        0x0010         /* Force FW transfers */
269 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE4        0x0004        /* Use 4x rate */
270 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE2        0x0002        /* Use 2x rate */
271 cb67beb1 Isaku Yamahata
#define  PCI_AGP_COMMAND_RATE1        0x0001        /* Use 1x rate */
272 cb67beb1 Isaku Yamahata
#define PCI_AGP_SIZEOF                12
273 cb67beb1 Isaku Yamahata
274 cb67beb1 Isaku Yamahata
/* Vital Product Data */
275 cb67beb1 Isaku Yamahata
276 cb67beb1 Isaku Yamahata
#define PCI_VPD_ADDR                2        /* Address to access (15 bits!) */
277 cb67beb1 Isaku Yamahata
#define  PCI_VPD_ADDR_MASK        0x7fff        /* Address mask */
278 cb67beb1 Isaku Yamahata
#define  PCI_VPD_ADDR_F                0x8000        /* Write 0, 1 indicates completion */
279 cb67beb1 Isaku Yamahata
#define PCI_VPD_DATA                4        /* 32-bits of data returned here */
280 cb67beb1 Isaku Yamahata
281 cb67beb1 Isaku Yamahata
/* Slot Identification */
282 cb67beb1 Isaku Yamahata
283 cb67beb1 Isaku Yamahata
#define PCI_SID_ESR                2        /* Expansion Slot Register */
284 cb67beb1 Isaku Yamahata
#define  PCI_SID_ESR_NSLOTS        0x1f        /* Number of expansion slots available */
285 cb67beb1 Isaku Yamahata
#define  PCI_SID_ESR_FIC        0x20        /* First In Chassis Flag */
286 cb67beb1 Isaku Yamahata
#define PCI_SID_CHASSIS_NR        3        /* Chassis Number */
287 cb67beb1 Isaku Yamahata
288 cb67beb1 Isaku Yamahata
/* Message Signalled Interrupts registers */
289 cb67beb1 Isaku Yamahata
290 cb67beb1 Isaku Yamahata
#define PCI_MSI_FLAGS                2        /* Various flags */
291 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_64BIT        0x80        /* 64-bit addresses allowed */
292 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_QSIZE        0x70        /* Message queue size configured */
293 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_QMASK        0x0e        /* Maximum queue size available */
294 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_ENABLE        0x01        /* MSI feature enabled */
295 cb67beb1 Isaku Yamahata
#define  PCI_MSI_FLAGS_MASKBIT        0x100        /* 64-bit mask bits allowed */
296 cb67beb1 Isaku Yamahata
#define PCI_MSI_RFU                3        /* Rest of capability flags */
297 cb67beb1 Isaku Yamahata
#define PCI_MSI_ADDRESS_LO        4        /* Lower 32 bits */
298 cb67beb1 Isaku Yamahata
#define PCI_MSI_ADDRESS_HI        8        /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
299 cb67beb1 Isaku Yamahata
#define PCI_MSI_DATA_32                8        /* 16 bits of data for 32-bit devices */
300 cb67beb1 Isaku Yamahata
#define PCI_MSI_MASK_32                12        /* Mask bits register for 32-bit devices */
301 cb67beb1 Isaku Yamahata
#define PCI_MSI_DATA_64                12        /* 16 bits of data for 64-bit devices */
302 cb67beb1 Isaku Yamahata
#define PCI_MSI_MASK_64                16        /* Mask bits register for 64-bit devices */
303 cb67beb1 Isaku Yamahata
304 81486b55 Jan Kiszka
/* MSI-X registers */
305 cb67beb1 Isaku Yamahata
#define PCI_MSIX_FLAGS                2
306 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_QSIZE        0x7FF
307 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_ENABLE        (1 << 15)
308 cb67beb1 Isaku Yamahata
#define  PCI_MSIX_FLAGS_MASKALL        (1 << 14)
309 81486b55 Jan Kiszka
#define PCI_MSIX_TABLE                4
310 81486b55 Jan Kiszka
#define PCI_MSIX_PBA                8
311 81486b55 Jan Kiszka
#define  PCI_MSIX_FLAGS_BIRMASK        (7 << 0)
312 81486b55 Jan Kiszka
313 81486b55 Jan Kiszka
/* MSI-X entry's format */
314 81486b55 Jan Kiszka
#define PCI_MSIX_ENTRY_SIZE                16
315 81486b55 Jan Kiszka
#define  PCI_MSIX_ENTRY_LOWER_ADDR        0
316 81486b55 Jan Kiszka
#define  PCI_MSIX_ENTRY_UPPER_ADDR        4
317 81486b55 Jan Kiszka
#define  PCI_MSIX_ENTRY_DATA                8
318 81486b55 Jan Kiszka
#define  PCI_MSIX_ENTRY_VECTOR_CTRL        12
319 81486b55 Jan Kiszka
#define   PCI_MSIX_ENTRY_CTRL_MASKBIT        1
320 cb67beb1 Isaku Yamahata
321 cb67beb1 Isaku Yamahata
/* CompactPCI Hotswap Register */
322 cb67beb1 Isaku Yamahata
323 cb67beb1 Isaku Yamahata
#define PCI_CHSWP_CSR                2        /* Control and Status Register */
324 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_DHA                0x01        /* Device Hiding Arm */
325 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_EIM                0x02        /* ENUM# Signal Mask */
326 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_PIE                0x04        /* Pending Insert or Extract */
327 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_LOO                0x08        /* LED On / Off */
328 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_PI                0x30        /* Programming Interface */
329 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_EXT                0x40        /* ENUM# status - extraction */
330 cb67beb1 Isaku Yamahata
#define  PCI_CHSWP_INS                0x80        /* ENUM# status - insertion */
331 cb67beb1 Isaku Yamahata
332 cb67beb1 Isaku Yamahata
/* PCI Advanced Feature registers */
333 cb67beb1 Isaku Yamahata
334 cb67beb1 Isaku Yamahata
#define PCI_AF_LENGTH                2
335 cb67beb1 Isaku Yamahata
#define PCI_AF_CAP                3
336 cb67beb1 Isaku Yamahata
#define  PCI_AF_CAP_TP                0x01
337 cb67beb1 Isaku Yamahata
#define  PCI_AF_CAP_FLR                0x02
338 cb67beb1 Isaku Yamahata
#define PCI_AF_CTRL                4
339 cb67beb1 Isaku Yamahata
#define  PCI_AF_CTRL_FLR        0x01
340 cb67beb1 Isaku Yamahata
#define PCI_AF_STATUS                5
341 cb67beb1 Isaku Yamahata
#define  PCI_AF_STATUS_TP        0x01
342 cb67beb1 Isaku Yamahata
343 cb67beb1 Isaku Yamahata
/* PCI-X registers */
344 cb67beb1 Isaku Yamahata
345 cb67beb1 Isaku Yamahata
#define PCI_X_CMD                2        /* Modes & Features */
346 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_DPERR_E        0x0001        /* Data Parity Error Recovery Enable */
347 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_ERO                0x0002        /* Enable Relaxed Ordering */
348 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_512        0x0000        /* 512 byte maximum read byte count */
349 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_1K        0x0004        /* 1Kbyte maximum read byte count */
350 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_2K        0x0008        /* 2Kbyte maximum read byte count */
351 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_READ_4K        0x000c        /* 4Kbyte maximum read byte count */
352 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_MAX_READ        0x000c        /* Max Memory Read Byte Count */
353 cb67beb1 Isaku Yamahata
                                /* Max # of outstanding split transactions */
354 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_1        0x0000        /* Max 1 */
355 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_2        0x0010        /* Max 2 */
356 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_3        0x0020        /* Max 3 */
357 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_4        0x0030        /* Max 4 */
358 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_8        0x0040        /* Max 8 */
359 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_12        0x0050        /* Max 12 */
360 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_16        0x0060        /* Max 16 */
361 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_SPLIT_32        0x0070        /* Max 32 */
362 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_MAX_SPLIT        0x0070        /* Max Outstanding Split Transactions */
363 cb67beb1 Isaku Yamahata
#define  PCI_X_CMD_VERSION(x)         (((x) >> 12) & 3) /* Version */
364 cb67beb1 Isaku Yamahata
#define PCI_X_STATUS                4        /* PCI-X capabilities */
365 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_DEVFN        0x000000ff        /* A copy of devfn */
366 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_BUS        0x0000ff00        /* A copy of bus nr */
367 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_64BIT        0x00010000        /* 64-bit device */
368 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_133MHZ        0x00020000        /* 133 MHz capable */
369 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_SPL_DISC        0x00040000        /* Split Completion Discarded */
370 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_UNX_SPL        0x00080000        /* Unexpected Split Completion */
371 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_COMPLEX        0x00100000        /* Device Complexity */
372 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_READ        0x00600000        /* Designed Max Memory Read Count */
373 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_SPLIT        0x03800000        /* Designed Max Outstanding Split Transactions */
374 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_MAX_CUM        0x1c000000        /* Designed Max Cumulative Read Size */
375 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_SPL_ERR        0x20000000        /* Rcvd Split Completion Error Msg */
376 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_266MHZ        0x40000000        /* 266 MHz capable */
377 cb67beb1 Isaku Yamahata
#define  PCI_X_STATUS_533MHZ        0x80000000        /* 533 MHz capable */
378 cb67beb1 Isaku Yamahata
379 81486b55 Jan Kiszka
/* PCI Bridge Subsystem ID registers */
380 81486b55 Jan Kiszka
381 81486b55 Jan Kiszka
#define PCI_SSVID_VENDOR_ID     4        /* PCI-Bridge subsystem vendor id register */
382 81486b55 Jan Kiszka
#define PCI_SSVID_DEVICE_ID     6        /* PCI-Bridge subsystem device id register */
383 81486b55 Jan Kiszka
384 cb67beb1 Isaku Yamahata
/* PCI Express capability registers */
385 cb67beb1 Isaku Yamahata
386 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS                2        /* Capabilities register */
387 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_VERS        0x000f        /* Capability version */
388 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_TYPE        0x00f0        /* Device/Port type */
389 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_ENDPOINT        0x0        /* Express Endpoint */
390 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_LEG_END        0x1        /* Legacy Endpoint */
391 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_ROOT_PORT 0x4        /* Root Port */
392 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_UPSTREAM        0x5        /* Upstream Port */
393 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_DOWNSTREAM 0x6        /* Downstream Port */
394 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_PCI_BRIDGE 0x7        /* PCI/PCI-X Bridge */
395 453058d3 Anthony PERARD
#define  PCI_EXP_TYPE_PCIE_BRIDGE 0x8   /* PCI/PCI-X to PCIE Bridge */
396 cb67beb1 Isaku Yamahata
#define  PCI_EXP_TYPE_RC_END        0x9        /* Root Complex Integrated Endpoint */
397 15a7a778 Anthony PERARD
#define  PCI_EXP_TYPE_RC_EC     0xa     /* Root Complex Event Collector */
398 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_SLOT        0x0100        /* Slot implemented */
399 cb67beb1 Isaku Yamahata
#define PCI_EXP_FLAGS_IRQ        0x3e00        /* Interrupt message number */
400 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCAP                4        /* Device capabilities */
401 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PAYLOAD        0x07        /* Max_Payload_Size */
402 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PHANTOM        0x18        /* Phantom functions */
403 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_EXT_TAG        0x20        /* Extended tags */
404 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_L0S        0x1c0        /* L0s Acceptable Latency */
405 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_L1        0xe00        /* L1 Acceptable Latency */
406 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_ATN_BUT        0x1000        /* Attention Button Present */
407 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_ATN_IND        0x2000        /* Attention Indicator Present */
408 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_IND        0x4000        /* Power Indicator Present */
409 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_RBER        0x8000        /* Role-Based Error Reporting */
410 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_VAL        0x3fc0000 /* Slot Power Limit Value */
411 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_PWR_SCL        0xc000000 /* Slot Power Limit Scale */
412 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
413 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCTL                8        /* Device Control */
414 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_CERE        0x0001        /* Correctable Error Reporting En. */
415 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_NFERE        0x0002        /* Non-Fatal Error Reporting Enable */
416 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_FERE        0x0004        /* Fatal Error Reporting Enable */
417 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_URRE        0x0008        /* Unsupported Request Reporting En. */
418 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_RELAX_EN 0x0010 /* Enable relaxed ordering */
419 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_PAYLOAD        0x00e0        /* Max_Payload_Size */
420 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_EXT_TAG        0x0100        /* Extended Tag Field Enable */
421 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_PHANTOM        0x0200        /* Phantom Functions Enable */
422 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_AUX_PME        0x0400        /* Auxiliary Power PM Enable */
423 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
424 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_READRQ        0x7000        /* Max_Read_Request_Size */
425 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
426 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVSTA                10        /* Device Status */
427 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_CED        0x01        /* Correctable Error Detected */
428 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_NFED        0x02        /* Non-Fatal Error Detected */
429 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_FED        0x04        /* Fatal Error Detected */
430 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_URD        0x08        /* Unsupported Request Detected */
431 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_AUXPD        0x10        /* AUX Power Detected */
432 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVSTA_TRPND        0x20        /* Transactions Pending */
433 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCAP                12        /* Link Capabilities */
434 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_SLS        0x0000000f /* Supported Link Speeds */
435 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_MLW        0x000003f0 /* Maximum Link Width */
436 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_ASPMS        0x00000c00 /* ASPM Support */
437 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_L0SEL        0x00007000 /* L0s Exit Latency */
438 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_L1EL        0x00038000 /* L1 Exit Latency */
439 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_CLKPM        0x00040000 /* L1 Clock Power Management */
440 81486b55 Jan Kiszka
#define  PCI_EXP_LNKCAP_SDERC        0x00080000 /* Surprise Down Error Reporting Capable */
441 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link Active Reporting Capable */
442 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_LBNC        0x00200000 /* Link Bandwidth Notification Capability */
443 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCAP_PN        0xff000000 /* Port Number */
444 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCTL                16        /* Link Control */
445 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_ASPMC        0x0003        /* ASPM Control */
446 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_RCB        0x0008        /* Read Completion Boundary */
447 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LD        0x0010        /* Link Disable */
448 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_RL        0x0020        /* Retrain Link */
449 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_CCC        0x0040        /* Common Clock Configuration */
450 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_ES        0x0080        /* Extended Synch */
451 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_CLKREQ_EN 0x100        /* Enable clkreq */
452 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_HAWD        0x0200        /* Hardware Autonomous Width Disable */
453 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LBMIE        0x0400        /* Link Bandwidth Management Interrupt Enable */
454 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKCTL_LABIE        0x0800        /* Lnk Autonomous Bandwidth Interrupt Enable */
455 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKSTA                18        /* Link Status */
456 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_CLS        0x000f        /* Current Link Speed */
457 81486b55 Jan Kiszka
#define  PCI_EXP_LNKSTA_CLS_2_5GB 0x01        /* Current Link Speed 2.5GT/s */
458 81486b55 Jan Kiszka
#define  PCI_EXP_LNKSTA_CLS_5_0GB 0x02        /* Current Link Speed 5.0GT/s */
459 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_NLW        0x03f0        /* Nogotiated Link Width */
460 81486b55 Jan Kiszka
#define  PCI_EXP_LNKSTA_NLW_SHIFT 4        /* start of NLW mask in link status */
461 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LT        0x0800        /* Link Training */
462 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_SLC        0x1000        /* Slot Clock Configuration */
463 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_DLLLA        0x2000        /* Data Link Layer Link Active */
464 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LBMS        0x4000        /* Link Bandwidth Management Status */
465 cb67beb1 Isaku Yamahata
#define  PCI_EXP_LNKSTA_LABS        0x8000        /* Link Autonomous Bandwidth Status */
466 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCAP                20        /* Slot Capabilities */
467 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_ABP        0x00000001 /* Attention Button Present */
468 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PCP        0x00000002 /* Power Controller Present */
469 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_MRLSP        0x00000004 /* MRL Sensor Present */
470 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_AIP        0x00000008 /* Attention Indicator Present */
471 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PIP        0x00000010 /* Power Indicator Present */
472 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_HPS        0x00000020 /* Hot-Plug Surprise */
473 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_HPC        0x00000040 /* Hot-Plug Capable */
474 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_SPLV        0x00007f80 /* Slot Power Limit Value */
475 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_SPLS        0x00018000 /* Slot Power Limit Scale */
476 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_EIP        0x00020000 /* Electromechanical Interlock Present */
477 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_NCCS        0x00040000 /* No Command Completed Support */
478 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCAP_PSN        0xfff80000 /* Physical Slot Number */
479 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCTL                24        /* Slot Control */
480 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_ABPE        0x0001        /* Attention Button Pressed Enable */
481 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PFDE        0x0002        /* Power Fault Detected Enable */
482 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_MRLSCE        0x0004        /* MRL Sensor Changed Enable */
483 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PDCE        0x0008        /* Presence Detect Changed Enable */
484 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_CCIE        0x0010        /* Command Completed Interrupt Enable */
485 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_HPIE        0x0020        /* Hot-Plug Interrupt Enable */
486 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_AIC        0x00c0        /* Attention Indicator Control */
487 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PIC        0x0300        /* Power Indicator Control */
488 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_PCC        0x0400        /* Power Controller Control */
489 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_EIC        0x0800        /* Electromechanical Interlock Control */
490 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTCTL_DLLSCE        0x1000        /* Data Link Layer State Changed Enable */
491 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTSTA                26        /* Slot Status */
492 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_ABP        0x0001        /* Attention Button Pressed */
493 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PFD        0x0002        /* Power Fault Detected */
494 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_MRLSC        0x0004        /* MRL Sensor Changed */
495 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PDC        0x0008        /* Presence Detect Changed */
496 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_CC        0x0010        /* Command Completed */
497 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_MRLSS        0x0020        /* MRL Sensor State */
498 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_PDS        0x0040        /* Presence Detect State */
499 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_EIS        0x0080        /* Electromechanical Interlock Status */
500 cb67beb1 Isaku Yamahata
#define  PCI_EXP_SLTSTA_DLLSC        0x0100        /* Data Link Layer State Changed */
501 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTCTL                28        /* Root Control */
502 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SECEE        0x01        /* System Error on Correctable Error */
503 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SENFEE        0x02        /* System Error on Non-Fatal Error */
504 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_SEFEE        0x04        /* System Error on Fatal Error */
505 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_PMEIE        0x08        /* PME Interrupt Enable */
506 cb67beb1 Isaku Yamahata
#define  PCI_EXP_RTCTL_CRSSVE        0x10        /* CRS Software Visibility Enable */
507 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTCAP                30        /* Root Capabilities */
508 cb67beb1 Isaku Yamahata
#define PCI_EXP_RTSTA                32        /* Root Status */
509 81486b55 Jan Kiszka
#define PCI_EXP_RTSTA_PME        0x10000 /* PME status */
510 81486b55 Jan Kiszka
#define PCI_EXP_RTSTA_PENDING        0x20000 /* PME pending */
511 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCAP2                36        /* Device Capabilities 2 */
512 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCAP2_ARI        0x20        /* Alternative Routing-ID */
513 81486b55 Jan Kiszka
#define  PCI_EXP_DEVCAP2_LTR        0x800        /* Latency tolerance reporting */
514 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_MASK        0xc0000 /* OBFF support mechanism */
515 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_MSG        0x40000 /* New message signaling */
516 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_WAKE        0x80000 /* Re-use WAKE# for OBFF */
517 cb67beb1 Isaku Yamahata
#define PCI_EXP_DEVCTL2                40        /* Device Control 2 */
518 cb67beb1 Isaku Yamahata
#define  PCI_EXP_DEVCTL2_ARI        0x20        /* Alternative Routing-ID */
519 81486b55 Jan Kiszka
#define  PCI_EXP_IDO_REQ_EN        0x100        /* ID-based ordering request enable */
520 81486b55 Jan Kiszka
#define  PCI_EXP_IDO_CMP_EN        0x200        /* ID-based ordering completion enable */
521 81486b55 Jan Kiszka
#define  PCI_EXP_LTR_EN                0x400        /* Latency tolerance reporting */
522 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_MSGA_EN        0x2000        /* OBFF enable with Message type A */
523 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_MSGB_EN        0x4000        /* OBFF enable with Message type B */
524 81486b55 Jan Kiszka
#define  PCI_EXP_OBFF_WAKE_EN        0x6000        /* OBFF using WAKE# signaling */
525 cb67beb1 Isaku Yamahata
#define PCI_EXP_LNKCTL2                48        /* Link Control 2 */
526 cb67beb1 Isaku Yamahata
#define PCI_EXP_SLTCTL2                56        /* Slot Control 2 */
527 cb67beb1 Isaku Yamahata
528 cb67beb1 Isaku Yamahata
/* Extended Capabilities (PCI-X 2.0 and Express) */
529 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID(header)                (header & 0x0000ffff)
530 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_VER(header)                ((header >> 16) & 0xf)
531 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_NEXT(header)        ((header >> 20) & 0xffc)
532 cb67beb1 Isaku Yamahata
533 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ERR        1
534 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_VC        2
535 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_DSN        3
536 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_PWR        4
537 81486b55 Jan Kiszka
#define PCI_EXT_CAP_ID_VNDR        11
538 81486b55 Jan Kiszka
#define PCI_EXT_CAP_ID_ACS        13
539 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ARI        14
540 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_ATS        15
541 cb67beb1 Isaku Yamahata
#define PCI_EXT_CAP_ID_SRIOV        16
542 81486b55 Jan Kiszka
#define PCI_EXT_CAP_ID_LTR        24
543 cb67beb1 Isaku Yamahata
544 cb67beb1 Isaku Yamahata
/* Advanced Error Reporting */
545 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_STATUS        4        /* Uncorrectable Error Status */
546 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_TRAIN        0x00000001        /* Training */
547 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_DLP        0x00000010        /* Data Link Protocol */
548 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_POISON_TLP        0x00001000        /* Poisoned TLP */
549 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_FCP        0x00002000        /* Flow Control Protocol */
550 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_COMP_TIME        0x00004000        /* Completion Timeout */
551 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_COMP_ABORT        0x00008000        /* Completer Abort */
552 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_UNX_COMP        0x00010000        /* Unexpected Completion */
553 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_RX_OVER        0x00020000        /* Receiver Overflow */
554 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_MALF_TLP        0x00040000        /* Malformed TLP */
555 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_ECRC        0x00080000        /* ECRC Error Status */
556 cb67beb1 Isaku Yamahata
#define  PCI_ERR_UNC_UNSUP        0x00100000        /* Unsupported Request */
557 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_MASK        8        /* Uncorrectable Error Mask */
558 cb67beb1 Isaku Yamahata
        /* Same bits as above */
559 cb67beb1 Isaku Yamahata
#define PCI_ERR_UNCOR_SEVER        12        /* Uncorrectable Error Severity */
560 cb67beb1 Isaku Yamahata
        /* Same bits as above */
561 cb67beb1 Isaku Yamahata
#define PCI_ERR_COR_STATUS        16        /* Correctable Error Status */
562 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_RCVR        0x00000001        /* Receiver Error Status */
563 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_BAD_TLP        0x00000040        /* Bad TLP Status */
564 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_BAD_DLLP        0x00000080        /* Bad DLLP Status */
565 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_REP_ROLL        0x00000100        /* REPLAY_NUM Rollover */
566 cb67beb1 Isaku Yamahata
#define  PCI_ERR_COR_REP_TIMER        0x00001000        /* Replay Timer Timeout */
567 cb67beb1 Isaku Yamahata
#define PCI_ERR_COR_MASK        20        /* Correctable Error Mask */
568 cb67beb1 Isaku Yamahata
        /* Same bits as above */
569 cb67beb1 Isaku Yamahata
#define PCI_ERR_CAP                24        /* Advanced Error Capabilities */
570 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_FEP(x)        ((x) & 31)        /* First Error Pointer */
571 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_GENC        0x00000020        /* ECRC Generation Capable */
572 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_GENE        0x00000040        /* ECRC Generation Enable */
573 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_CHKC        0x00000080        /* ECRC Check Capable */
574 cb67beb1 Isaku Yamahata
#define  PCI_ERR_CAP_ECRC_CHKE        0x00000100        /* ECRC Check Enable */
575 cb67beb1 Isaku Yamahata
#define PCI_ERR_HEADER_LOG        28        /* Header Log Register (16 bytes) */
576 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_COMMAND        44        /* Root Error Command */
577 cb67beb1 Isaku Yamahata
/* Correctable Err Reporting Enable */
578 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_COR_EN                0x00000001
579 cb67beb1 Isaku Yamahata
/* Non-fatal Err Reporting Enable */
580 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_NONFATAL_EN        0x00000002
581 cb67beb1 Isaku Yamahata
/* Fatal Err Reporting Enable */
582 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_CMD_FATAL_EN        0x00000004
583 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_STATUS        48
584 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_COR_RCV                0x00000001        /* ERR_COR Received */
585 cb67beb1 Isaku Yamahata
/* Multi ERR_COR Received */
586 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_MULTI_COR_RCV        0x00000002
587 cb67beb1 Isaku Yamahata
/* ERR_FATAL/NONFATAL Recevied */
588 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_UNCOR_RCV                0x00000004
589 cb67beb1 Isaku Yamahata
/* Multi ERR_FATAL/NONFATAL Recevied */
590 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_MULTI_UNCOR_RCV        0x00000008
591 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_FIRST_FATAL        0x00000010        /* First Fatal */
592 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_NONFATAL_RCV        0x00000020        /* Non-Fatal Received */
593 cb67beb1 Isaku Yamahata
#define PCI_ERR_ROOT_FATAL_RCV                0x00000040        /* Fatal Received */
594 81486b55 Jan Kiszka
#define PCI_ERR_ROOT_ERR_SRC        52        /* Error Source Identification */
595 cb67beb1 Isaku Yamahata
596 cb67beb1 Isaku Yamahata
/* Virtual Channel */
597 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_REG1        4
598 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_REG2        8
599 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_CTRL        12
600 cb67beb1 Isaku Yamahata
#define PCI_VC_PORT_STATUS        14
601 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_CAP                16
602 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_CTRL                20
603 cb67beb1 Isaku Yamahata
#define PCI_VC_RES_STATUS        26
604 cb67beb1 Isaku Yamahata
605 cb67beb1 Isaku Yamahata
/* Power Budgeting */
606 cb67beb1 Isaku Yamahata
#define PCI_PWR_DSR                4        /* Data Select Register */
607 cb67beb1 Isaku Yamahata
#define PCI_PWR_DATA                8        /* Data Register */
608 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_BASE(x)        ((x) & 0xff)            /* Base Power */
609 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_SCALE(x)        (((x) >> 8) & 3)    /* Data Scale */
610 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_PM_SUB(x)        (((x) >> 10) & 7)   /* PM Sub State */
611 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
612 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_TYPE(x)        (((x) >> 15) & 7)   /* Type */
613 cb67beb1 Isaku Yamahata
#define  PCI_PWR_DATA_RAIL(x)        (((x) >> 18) & 7)   /* Power Rail */
614 cb67beb1 Isaku Yamahata
#define PCI_PWR_CAP                12        /* Capability */
615 cb67beb1 Isaku Yamahata
#define  PCI_PWR_CAP_BUDGET(x)        ((x) & 1)        /* Included in system budget */
616 cb67beb1 Isaku Yamahata
617 cb67beb1 Isaku Yamahata
/*
618 cb67beb1 Isaku Yamahata
 * Hypertransport sub capability types
619 cb67beb1 Isaku Yamahata
 *
620 cb67beb1 Isaku Yamahata
 * Unfortunately there are both 3 bit and 5 bit capability types defined
621 cb67beb1 Isaku Yamahata
 * in the HT spec, catering for that is a little messy. You probably don't
622 cb67beb1 Isaku Yamahata
 * want to use these directly, just use pci_find_ht_capability() and it
623 cb67beb1 Isaku Yamahata
 * will do the right thing for you.
624 cb67beb1 Isaku Yamahata
 */
625 cb67beb1 Isaku Yamahata
#define HT_3BIT_CAP_MASK        0xE0
626 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_SLAVE        0x00        /* Slave/Primary link configuration */
627 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_HOST                0x20        /* Host/Secondary link configuration */
628 cb67beb1 Isaku Yamahata
629 cb67beb1 Isaku Yamahata
#define HT_5BIT_CAP_MASK        0xF8
630 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_IRQ                0x80        /* IRQ Configuration */
631 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_REMAPPING_40        0xA0        /* 40 bit address remapping */
632 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_REMAPPING_64 0xA2        /* 64 bit address remapping */
633 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_UNITID_CLUMP        0x90        /* Unit ID clumping */
634 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_EXTCONF        0x98        /* Extended Configuration Space Access */
635 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_MSI_MAPPING        0xA8        /* MSI Mapping Capability */
636 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS                0x02                /* Offset to flags */
637 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS_ENABLE        0x1                /* Mapping enable */
638 cb67beb1 Isaku Yamahata
#define  HT_MSI_FLAGS_FIXED        0x2                /* Fixed mapping only */
639 cb67beb1 Isaku Yamahata
#define  HT_MSI_FIXED_ADDR        0x00000000FEE00000ULL        /* Fixed addr */
640 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_LO                0x04                /* Offset to low addr bits */
641 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_LO_MASK        0xFFF00000        /* Low address bit mask */
642 cb67beb1 Isaku Yamahata
#define  HT_MSI_ADDR_HI                0x08                /* Offset to high addr bits */
643 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_DIRECT_ROUTE        0xB0        /* Direct routing configuration */
644 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_VCSET        0xB8        /* Virtual Channel configuration */
645 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_ERROR_RETRY        0xC0        /* Retry on error configuration */
646 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_GEN3                0xD0        /* Generation 3 hypertransport configuration */
647 cb67beb1 Isaku Yamahata
#define HT_CAPTYPE_PM                0xE0        /* Hypertransport powermanagement configuration */
648 cb67beb1 Isaku Yamahata
649 cb67beb1 Isaku Yamahata
/* Alternative Routing-ID Interpretation */
650 cb67beb1 Isaku Yamahata
#define PCI_ARI_CAP                0x04        /* ARI Capability Register */
651 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_MFVC        0x0001        /* MFVC Function Groups Capability */
652 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_ACS        0x0002        /* ACS Function Groups Capability */
653 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CAP_NFN(x)        (((x) >> 8) & 0xff) /* Next Function Number */
654 cb67beb1 Isaku Yamahata
#define PCI_ARI_CTRL                0x06        /* ARI Control Register */
655 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_MFVC        0x0001        /* MFVC Function Groups Enable */
656 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_ACS        0x0002        /* ACS Function Groups Enable */
657 cb67beb1 Isaku Yamahata
#define  PCI_ARI_CTRL_FG(x)        (((x) >> 4) & 7) /* Function Group */
658 cb67beb1 Isaku Yamahata
659 cb67beb1 Isaku Yamahata
/* Address Translation Service */
660 cb67beb1 Isaku Yamahata
#define PCI_ATS_CAP                0x04        /* ATS Capability Register */
661 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CAP_QDEP(x)        ((x) & 0x1f)        /* Invalidate Queue Depth */
662 cb67beb1 Isaku Yamahata
#define  PCI_ATS_MAX_QDEP        32        /* Max Invalidate Queue Depth */
663 cb67beb1 Isaku Yamahata
#define PCI_ATS_CTRL                0x06        /* ATS Control Register */
664 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CTRL_ENABLE        0x8000        /* ATS Enable */
665 cb67beb1 Isaku Yamahata
#define  PCI_ATS_CTRL_STU(x)        ((x) & 0x1f)        /* Smallest Translation Unit */
666 cb67beb1 Isaku Yamahata
#define  PCI_ATS_MIN_STU        12        /* shift of minimum STU block */
667 cb67beb1 Isaku Yamahata
668 cb67beb1 Isaku Yamahata
/* Single Root I/O Virtualization */
669 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_CAP                0x04        /* SR-IOV Capabilities */
670 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CAP_VFM        0x01        /* VF Migration Capable */
671 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CAP_INTR(x)        ((x) >> 21) /* Interrupt Message Number */
672 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_CTRL                0x08        /* SR-IOV Control */
673 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_VFE        0x01        /* VF Enable */
674 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_VFM        0x02        /* VF Migration Enable */
675 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_INTR        0x04        /* VF Migration Interrupt Enable */
676 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_MSE        0x08        /* VF Memory Space Enable */
677 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_CTRL_ARI        0x10        /* ARI Capable Hierarchy */
678 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_STATUS        0x0a        /* SR-IOV Status */
679 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_STATUS_VFM        0x01        /* VF Migration Status */
680 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_INITIAL_VF        0x0c        /* Initial VFs */
681 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_TOTAL_VF        0x0e        /* Total VFs */
682 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_NUM_VF        0x10        /* Number of VFs */
683 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_FUNC_LINK        0x12        /* Function Dependency Link */
684 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_OFFSET        0x14        /* First VF Offset */
685 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_STRIDE        0x16        /* Following VF Stride */
686 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VF_DID        0x1a        /* VF Device ID */
687 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_SUP_PGSIZE        0x1c        /* Supported Page Sizes */
688 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_SYS_PGSIZE        0x20        /* System Page Size */
689 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_BAR                0x24        /* VF BAR0 */
690 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_NUM_BARS        6        /* Number of VF BARs */
691 cb67beb1 Isaku Yamahata
#define PCI_SRIOV_VFM                0x3c        /* VF Migration State Array Offset*/
692 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_BIR(x)        ((x) & 7)        /* State BIR */
693 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_OFFSET(x) ((x) & ~7)        /* State Offset */
694 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_UA        0x0        /* Inactive.Unavailable */
695 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_MI        0x1        /* Dormant.MigrateIn */
696 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_MO        0x2        /* Active.MigrateOut */
697 cb67beb1 Isaku Yamahata
#define  PCI_SRIOV_VFM_AV        0x3        /* Active.Available */
698 cb67beb1 Isaku Yamahata
699 81486b55 Jan Kiszka
#define PCI_LTR_MAX_SNOOP_LAT        0x4
700 81486b55 Jan Kiszka
#define PCI_LTR_MAX_NOSNOOP_LAT        0x6
701 81486b55 Jan Kiszka
#define  PCI_LTR_VALUE_MASK        0x000003ff
702 81486b55 Jan Kiszka
#define  PCI_LTR_SCALE_MASK        0x00001c00
703 81486b55 Jan Kiszka
#define  PCI_LTR_SCALE_SHIFT        10
704 81486b55 Jan Kiszka
705 81486b55 Jan Kiszka
/* Access Control Service */
706 81486b55 Jan Kiszka
#define PCI_ACS_CAP                0x04        /* ACS Capability Register */
707 81486b55 Jan Kiszka
#define  PCI_ACS_SV                0x01        /* Source Validation */
708 81486b55 Jan Kiszka
#define  PCI_ACS_TB                0x02        /* Translation Blocking */
709 81486b55 Jan Kiszka
#define  PCI_ACS_RR                0x04        /* P2P Request Redirect */
710 81486b55 Jan Kiszka
#define  PCI_ACS_CR                0x08        /* P2P Completion Redirect */
711 81486b55 Jan Kiszka
#define  PCI_ACS_UF                0x10        /* Upstream Forwarding */
712 81486b55 Jan Kiszka
#define  PCI_ACS_EC                0x20        /* P2P Egress Control */
713 81486b55 Jan Kiszka
#define  PCI_ACS_DT                0x40        /* Direct Translated P2P */
714 81486b55 Jan Kiszka
#define PCI_ACS_CTRL                0x06        /* ACS Control Register */
715 81486b55 Jan Kiszka
#define PCI_ACS_EGRESS_CTL_V        0x08        /* ACS Egress Control Vector */
716 81486b55 Jan Kiszka
717 cb67beb1 Isaku Yamahata
#endif /* LINUX_PCI_REGS_H */