Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / dev / pci / pcireg.h @ 13

History | View | Annotate | Download (71.7 KB)

1 13 up20180614
/*        $NetBSD: pcireg.h,v 1.104 2015/10/02 05:22:53 msaitoh Exp $        */
2
3
/*
4
 * Copyright (c) 1995, 1996, 1999, 2000
5
 *     Christopher G. Demetriou.  All rights reserved.
6
 * Copyright (c) 1994, 1996 Charles M. Hannum.  All rights reserved.
7
 *
8
 * Redistribution and use in source and binary forms, with or without
9
 * modification, are permitted provided that the following conditions
10
 * are met:
11
 * 1. Redistributions of source code must retain the above copyright
12
 *    notice, this list of conditions and the following disclaimer.
13
 * 2. Redistributions in binary form must reproduce the above copyright
14
 *    notice, this list of conditions and the following disclaimer in the
15
 *    documentation and/or other materials provided with the distribution.
16
 * 3. All advertising materials mentioning features or use of this software
17
 *    must display the following acknowledgement:
18
 *        This product includes software developed by Charles M. Hannum.
19
 * 4. The name of the author may not be used to endorse or promote products
20
 *    derived from this software without specific prior written permission.
21
 *
22
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
 */
33
34
#ifndef _DEV_PCI_PCIREG_H_
35
#define        _DEV_PCI_PCIREG_H_
36
37
/*
38
 * Standardized PCI configuration information
39
 *
40
 * XXX This is not complete.
41
 */
42
43
/*
44
 * Size of each function's configuration space.
45
 */
46
47
#define        PCI_CONF_SIZE                        0x100
48
#define        PCI_EXTCONF_SIZE                0x1000
49
50
/*
51
 * Device identification register; contains a vendor ID and a device ID.
52
 */
53
#define        PCI_ID_REG                        0x00
54
55
typedef u_int16_t pci_vendor_id_t;
56
typedef u_int16_t pci_product_id_t;
57
58
#define        PCI_VENDOR_SHIFT                        0
59
#define        PCI_VENDOR_MASK                                0xffff
60
#define        PCI_VENDOR(id) \
61
            (((id) >> PCI_VENDOR_SHIFT) & PCI_VENDOR_MASK)
62
63
#define        PCI_PRODUCT_SHIFT                        16
64
#define        PCI_PRODUCT_MASK                        0xffff
65
#define        PCI_PRODUCT(id) \
66
            (((id) >> PCI_PRODUCT_SHIFT) & PCI_PRODUCT_MASK)
67
68
#define PCI_ID_CODE(vid,pid)                                        \
69
        ((((vid) & PCI_VENDOR_MASK) << PCI_VENDOR_SHIFT) |        \
70
         (((pid) & PCI_PRODUCT_MASK) << PCI_PRODUCT_SHIFT))        \
71
72
/*
73
 * Command and status register.
74
 */
75
#define        PCI_COMMAND_STATUS_REG                        0x04
76
#define        PCI_COMMAND_SHIFT                        0
77
#define        PCI_COMMAND_MASK                        0xffff
78
#define        PCI_STATUS_SHIFT                        16
79
#define        PCI_STATUS_MASK                                0xffff
80
81
#define PCI_COMMAND_STATUS_CODE(cmd,stat)                        \
82
        ((((cmd) & PCI_COMMAND_MASK) << PCI_COMMAND_SHIFT) |        \
83
         (((stat) & PCI_STATUS_MASK) << PCI_STATUS_SHIFT))        \
84
85
#define        PCI_COMMAND_IO_ENABLE                        0x00000001
86
#define        PCI_COMMAND_MEM_ENABLE                        0x00000002
87
#define        PCI_COMMAND_MASTER_ENABLE                0x00000004
88
#define        PCI_COMMAND_SPECIAL_ENABLE                0x00000008
89
#define        PCI_COMMAND_INVALIDATE_ENABLE                0x00000010
90
#define        PCI_COMMAND_PALETTE_ENABLE                0x00000020
91
#define        PCI_COMMAND_PARITY_ENABLE                0x00000040
92
#define        PCI_COMMAND_STEPPING_ENABLE                0x00000080
93
#define        PCI_COMMAND_SERR_ENABLE                        0x00000100
94
#define        PCI_COMMAND_BACKTOBACK_ENABLE                0x00000200
95
#define        PCI_COMMAND_INTERRUPT_DISABLE                0x00000400
96
97
#define        PCI_STATUS_INT_STATUS                        0x00080000
98
#define        PCI_STATUS_CAPLIST_SUPPORT                0x00100000
99
#define        PCI_STATUS_66MHZ_SUPPORT                0x00200000
100
#define        PCI_STATUS_UDF_SUPPORT                        0x00400000
101
#define        PCI_STATUS_BACKTOBACK_SUPPORT                0x00800000
102
#define        PCI_STATUS_PARITY_ERROR                        0x01000000
103
#define        PCI_STATUS_DEVSEL_FAST                        0x00000000
104
#define        PCI_STATUS_DEVSEL_MEDIUM                0x02000000
105
#define        PCI_STATUS_DEVSEL_SLOW                        0x04000000
106
#define        PCI_STATUS_DEVSEL_MASK                        0x06000000
107
#define        PCI_STATUS_TARGET_TARGET_ABORT                0x08000000
108
#define        PCI_STATUS_MASTER_TARGET_ABORT                0x10000000
109
#define        PCI_STATUS_MASTER_ABORT                        0x20000000
110
#define        PCI_STATUS_SPECIAL_ERROR                0x40000000
111
#define        PCI_STATUS_PARITY_DETECT                0x80000000
112
113
/*
114
 * PCI Class and Revision Register; defines type and revision of device.
115
 */
116
#define        PCI_CLASS_REG                        0x08
117
118
typedef u_int8_t pci_class_t;
119
typedef u_int8_t pci_subclass_t;
120
typedef u_int8_t pci_interface_t;
121
typedef u_int8_t pci_revision_t;
122
123
#define        PCI_CLASS_SHIFT                                24
124
#define        PCI_CLASS_MASK                                0xff
125
#define        PCI_CLASS(cr) \
126
            (((cr) >> PCI_CLASS_SHIFT) & PCI_CLASS_MASK)
127
128
#define        PCI_SUBCLASS_SHIFT                        16
129
#define        PCI_SUBCLASS_MASK                        0xff
130
#define        PCI_SUBCLASS(cr) \
131
            (((cr) >> PCI_SUBCLASS_SHIFT) & PCI_SUBCLASS_MASK)
132
133
#define        PCI_INTERFACE_SHIFT                        8
134
#define        PCI_INTERFACE_MASK                        0xff
135
#define        PCI_INTERFACE(cr) \
136
            (((cr) >> PCI_INTERFACE_SHIFT) & PCI_INTERFACE_MASK)
137
138
#define        PCI_REVISION_SHIFT                        0
139
#define        PCI_REVISION_MASK                        0xff
140
#define        PCI_REVISION(cr) \
141
            (((cr) >> PCI_REVISION_SHIFT) & PCI_REVISION_MASK)
142
143
#define        PCI_CLASS_CODE(mainclass, subclass, interface) \
144
            ((((mainclass) & PCI_CLASS_MASK) << PCI_CLASS_SHIFT) | \
145
             (((subclass) & PCI_SUBCLASS_MASK) << PCI_SUBCLASS_SHIFT) | \
146
             (((interface) & PCI_INTERFACE_MASK) << PCI_INTERFACE_SHIFT))
147
148
/* base classes */
149
#define        PCI_CLASS_PREHISTORIC                        0x00
150
#define        PCI_CLASS_MASS_STORAGE                        0x01
151
#define        PCI_CLASS_NETWORK                        0x02
152
#define        PCI_CLASS_DISPLAY                        0x03
153
#define        PCI_CLASS_MULTIMEDIA                        0x04
154
#define        PCI_CLASS_MEMORY                        0x05
155
#define        PCI_CLASS_BRIDGE                        0x06
156
#define        PCI_CLASS_COMMUNICATIONS                0x07
157
#define        PCI_CLASS_SYSTEM                        0x08
158
#define        PCI_CLASS_INPUT                                0x09
159
#define        PCI_CLASS_DOCK                                0x0a
160
#define        PCI_CLASS_PROCESSOR                        0x0b
161
#define        PCI_CLASS_SERIALBUS                        0x0c
162
#define        PCI_CLASS_WIRELESS                        0x0d
163
#define        PCI_CLASS_I2O                                0x0e
164
#define        PCI_CLASS_SATCOM                        0x0f
165
#define        PCI_CLASS_CRYPTO                        0x10
166
#define        PCI_CLASS_DASP                                0x11
167
#define        PCI_CLASS_UNDEFINED                        0xff
168
169
/* 0x00 prehistoric subclasses */
170
#define        PCI_SUBCLASS_PREHISTORIC_MISC                0x00
171
#define        PCI_SUBCLASS_PREHISTORIC_VGA                0x01
172
173
/* 0x01 mass storage subclasses */
174
#define        PCI_SUBCLASS_MASS_STORAGE_SCSI                0x00
175
#define        PCI_SUBCLASS_MASS_STORAGE_IDE                0x01
176
#define        PCI_SUBCLASS_MASS_STORAGE_FLOPPY        0x02
177
#define        PCI_SUBCLASS_MASS_STORAGE_IPI                0x03
178
#define        PCI_SUBCLASS_MASS_STORAGE_RAID                0x04
179
#define        PCI_SUBCLASS_MASS_STORAGE_ATA                0x05
180
#define                PCI_INTERFACE_ATA_SINGLEDMA                0x20
181
#define                PCI_INTERFACE_ATA_CHAINEDDMA                0x30
182
#define        PCI_SUBCLASS_MASS_STORAGE_SATA                0x06
183
#define                PCI_INTERFACE_SATA_VND                        0x00
184
#define                PCI_INTERFACE_SATA_AHCI10                0x01
185
#define                PCI_INTERFACE_SATA_SSBI                        0x02
186
#define        PCI_SUBCLASS_MASS_STORAGE_SAS                0x07
187
#define        PCI_SUBCLASS_MASS_STORAGE_NVM                0x08
188
#define                PCI_INTERFACE_NVM_VND                        0x00
189
#define                PCI_INTERFACE_NVM_NVMHCI10                0x01
190
#define                PCI_INTERFACE_NVM_NVME                        0x02
191
#define        PCI_SUBCLASS_MASS_STORAGE_MISC                0x80
192
193
/* 0x02 network subclasses */
194
#define        PCI_SUBCLASS_NETWORK_ETHERNET                0x00
195
#define        PCI_SUBCLASS_NETWORK_TOKENRING                0x01
196
#define        PCI_SUBCLASS_NETWORK_FDDI                0x02
197
#define        PCI_SUBCLASS_NETWORK_ATM                0x03
198
#define        PCI_SUBCLASS_NETWORK_ISDN                0x04
199
#define        PCI_SUBCLASS_NETWORK_WORLDFIP                0x05
200
#define        PCI_SUBCLASS_NETWORK_PCIMGMULTICOMP        0x06
201
#define        PCI_SUBCLASS_NETWORK_INFINIBAND                0x07
202
#define        PCI_SUBCLASS_NETWORK_MISC                0x80
203
204
/* 0x03 display subclasses */
205
#define        PCI_SUBCLASS_DISPLAY_VGA                0x00
206
#define                PCI_INTERFACE_VGA_VGA                        0x00
207
#define                PCI_INTERFACE_VGA_8514                        0x01
208
#define        PCI_SUBCLASS_DISPLAY_XGA                0x01
209
#define        PCI_SUBCLASS_DISPLAY_3D                        0x02
210
#define        PCI_SUBCLASS_DISPLAY_MISC                0x80
211
212
/* 0x04 multimedia subclasses */
213
#define        PCI_SUBCLASS_MULTIMEDIA_VIDEO                0x00
214
#define        PCI_SUBCLASS_MULTIMEDIA_AUDIO                0x01
215
#define        PCI_SUBCLASS_MULTIMEDIA_TELEPHONY        0x02
216
#define        PCI_SUBCLASS_MULTIMEDIA_HDAUDIO                0x03
217
#define        PCI_SUBCLASS_MULTIMEDIA_MISC                0x80
218
219
/* 0x05 memory subclasses */
220
#define        PCI_SUBCLASS_MEMORY_RAM                        0x00
221
#define        PCI_SUBCLASS_MEMORY_FLASH                0x01
222
#define        PCI_SUBCLASS_MEMORY_MISC                0x80
223
224
/* 0x06 bridge subclasses */
225
#define        PCI_SUBCLASS_BRIDGE_HOST                0x00
226
#define        PCI_SUBCLASS_BRIDGE_ISA                        0x01
227
#define        PCI_SUBCLASS_BRIDGE_EISA                0x02
228
#define        PCI_SUBCLASS_BRIDGE_MC                        0x03        /* XXX _MCA */
229
#define        PCI_SUBCLASS_BRIDGE_PCI                        0x04
230
#define                PCI_INTERFACE_BRIDGE_PCI_PCI                0x00
231
#define                PCI_INTERFACE_BRIDGE_PCI_SUBDEC                0x01
232
#define        PCI_SUBCLASS_BRIDGE_PCMCIA                0x05
233
#define        PCI_SUBCLASS_BRIDGE_NUBUS                0x06
234
#define        PCI_SUBCLASS_BRIDGE_CARDBUS                0x07
235
#define        PCI_SUBCLASS_BRIDGE_RACEWAY                0x08
236
                /* bit0 == 0 ? "transparent mode" : "endpoint mode" */
237
#define        PCI_SUBCLASS_BRIDGE_STPCI                0x09
238
#define                PCI_INTERFACE_STPCI_PRIMARY                0x40
239
#define                PCI_INTERFACE_STPCI_SECONDARY                0x80
240
#define        PCI_SUBCLASS_BRIDGE_INFINIBAND                0x0a
241
#define        PCI_SUBCLASS_BRIDGE_ADVSW                0x0b
242
#define                PCI_INTERFACE_ADVSW_CUSTOM                0x00
243
#define                PCI_INTERFACE_ADVSW_ASISIG                0x01
244
#define        PCI_SUBCLASS_BRIDGE_MISC                0x80
245
246
/* 0x07 communications subclasses */
247
#define        PCI_SUBCLASS_COMMUNICATIONS_SERIAL        0x00
248
#define                PCI_INTERFACE_SERIAL_XT                        0x00
249
#define                PCI_INTERFACE_SERIAL_16450                0x01
250
#define                PCI_INTERFACE_SERIAL_16550                0x02
251
#define                PCI_INTERFACE_SERIAL_16650                0x03
252
#define                PCI_INTERFACE_SERIAL_16750                0x04
253
#define                PCI_INTERFACE_SERIAL_16850                0x05
254
#define                PCI_INTERFACE_SERIAL_16950                0x06
255
#define        PCI_SUBCLASS_COMMUNICATIONS_PARALLEL        0x01
256
#define                PCI_INTERFACE_PARALLEL                        0x00
257
#define                PCI_INTERFACE_PARALLEL_BIDIRECTIONAL        0x01
258
#define                PCI_INTERFACE_PARALLEL_ECP1X                0x02
259
#define                PCI_INTERFACE_PARALLEL_IEEE1284_CNTRL        0x03
260
#define                PCI_INTERFACE_PARALLEL_IEEE1284_TGT        0xfe
261
#define        PCI_SUBCLASS_COMMUNICATIONS_MPSERIAL        0x02
262
#define        PCI_SUBCLASS_COMMUNICATIONS_MODEM        0x03
263
#define                PCI_INTERFACE_MODEM                        0x00
264
#define                PCI_INTERFACE_MODEM_HAYES16450                0x01
265
#define                PCI_INTERFACE_MODEM_HAYES16550                0x02
266
#define                PCI_INTERFACE_MODEM_HAYES16650                0x03
267
#define                PCI_INTERFACE_MODEM_HAYES16750                0x04
268
#define        PCI_SUBCLASS_COMMUNICATIONS_GPIB        0x04
269
#define        PCI_SUBCLASS_COMMUNICATIONS_SMARTCARD        0x05
270
#define        PCI_SUBCLASS_COMMUNICATIONS_MISC        0x80
271
272
/* 0x08 system subclasses */
273
#define        PCI_SUBCLASS_SYSTEM_PIC                        0x00
274
#define                PCI_INTERFACE_PIC_8259                        0x00
275
#define                PCI_INTERFACE_PIC_ISA                        0x01
276
#define                PCI_INTERFACE_PIC_EISA                        0x02
277
#define                PCI_INTERFACE_PIC_IOAPIC                0x10
278
#define                PCI_INTERFACE_PIC_IOXAPIC                0x20
279
#define        PCI_SUBCLASS_SYSTEM_DMA                        0x01
280
#define                PCI_INTERFACE_DMA_8237                        0x00
281
#define                PCI_INTERFACE_DMA_ISA                        0x01
282
#define                PCI_INTERFACE_DMA_EISA                        0x02
283
#define        PCI_SUBCLASS_SYSTEM_TIMER                0x02
284
#define                PCI_INTERFACE_TIMER_8254                0x00
285
#define                PCI_INTERFACE_TIMER_ISA                        0x01
286
#define                PCI_INTERFACE_TIMER_EISA                0x02
287
#define                PCI_INTERFACE_TIMER_HPET                0x03
288
#define        PCI_SUBCLASS_SYSTEM_RTC                        0x03
289
#define                PCI_INTERFACE_RTC_GENERIC                0x00
290
#define                PCI_INTERFACE_RTC_ISA                        0x01
291
#define        PCI_SUBCLASS_SYSTEM_PCIHOTPLUG                0x04
292
#define        PCI_SUBCLASS_SYSTEM_SDHC                0x05
293
#define        PCI_SUBCLASS_SYSTEM_IOMMU                0x06 /* or RCEC in old spec */
294
#define        PCI_SUBCLASS_SYSTEM_RCEC                0x07
295
#define        PCI_SUBCLASS_SYSTEM_MISC                0x80
296
297
/* 0x09 input subclasses */
298
#define        PCI_SUBCLASS_INPUT_KEYBOARD                0x00
299
#define        PCI_SUBCLASS_INPUT_DIGITIZER                0x01
300
#define        PCI_SUBCLASS_INPUT_MOUSE                0x02
301
#define        PCI_SUBCLASS_INPUT_SCANNER                0x03
302
#define        PCI_SUBCLASS_INPUT_GAMEPORT                0x04
303
#define                PCI_INTERFACE_GAMEPORT_GENERIC                0x00
304
#define                PCI_INTERFACE_GAMEPORT_LEGACY                0x10
305
#define        PCI_SUBCLASS_INPUT_MISC                        0x80
306
307
/* 0x0a dock subclasses */
308
#define        PCI_SUBCLASS_DOCK_GENERIC                0x00
309
#define        PCI_SUBCLASS_DOCK_MISC                        0x80
310
311
/* 0x0b processor subclasses */
312
#define        PCI_SUBCLASS_PROCESSOR_386                0x00
313
#define        PCI_SUBCLASS_PROCESSOR_486                0x01
314
#define        PCI_SUBCLASS_PROCESSOR_PENTIUM                0x02
315
#define        PCI_SUBCLASS_PROCESSOR_ALPHA                0x10
316
#define        PCI_SUBCLASS_PROCESSOR_POWERPC                0x20
317
#define        PCI_SUBCLASS_PROCESSOR_MIPS                0x30
318
#define        PCI_SUBCLASS_PROCESSOR_COPROC                0x40
319
#define        PCI_SUBCLASS_PROCESSOR_MISC                0x80
320
321
/* 0x0c serial bus subclasses */
322
#define        PCI_SUBCLASS_SERIALBUS_FIREWIRE                0x00
323
#define                PCI_INTERFACE_IEEE1394_FIREWIRE                0x00
324
#define                PCI_INTERFACE_IEEE1394_OPENHCI                0x10
325
#define        PCI_SUBCLASS_SERIALBUS_ACCESS                0x01
326
#define        PCI_SUBCLASS_SERIALBUS_SSA                0x02
327
#define        PCI_SUBCLASS_SERIALBUS_USB                0x03
328
#define                PCI_INTERFACE_USB_UHCI                        0x00
329
#define                PCI_INTERFACE_USB_OHCI                        0x10
330
#define                PCI_INTERFACE_USB_EHCI                        0x20
331
#define                PCI_INTERFACE_USB_XHCI                        0x30
332
#define                PCI_INTERFACE_USB_OTHERHC                0x80
333
#define                PCI_INTERFACE_USB_DEVICE                0xfe
334
#define        PCI_SUBCLASS_SERIALBUS_FIBER                0x04        /* XXX _FIBRECHANNEL */
335
#define        PCI_SUBCLASS_SERIALBUS_SMBUS                0x05
336
#define        PCI_SUBCLASS_SERIALBUS_INFINIBAND        0x06        /* Deprecated */
337
#define        PCI_SUBCLASS_SERIALBUS_IPMI                0x07
338
#define                PCI_INTERFACE_IPMI_SMIC                        0x00
339
#define                PCI_INTERFACE_IPMI_KBD                        0x01
340
#define                PCI_INTERFACE_IPMI_BLOCKXFER                0x02
341
#define        PCI_SUBCLASS_SERIALBUS_SERCOS                0x08
342
#define        PCI_SUBCLASS_SERIALBUS_CANBUS                0x09
343
#define        PCI_SUBCLASS_SERIALBUS_MISC                0x80
344
345
/* 0x0d wireless subclasses */
346
#define        PCI_SUBCLASS_WIRELESS_IRDA                0x00
347
#define        PCI_SUBCLASS_WIRELESS_CONSUMERIR        0x01
348
#define                PCI_INTERFACE_CONSUMERIR                0x00
349
#define                PCI_INTERFACE_UWB                        0x10
350
#define        PCI_SUBCLASS_WIRELESS_RF                0x10
351
#define        PCI_SUBCLASS_WIRELESS_BLUETOOTH                0x11
352
#define        PCI_SUBCLASS_WIRELESS_BROADBAND                0x12
353
#define        PCI_SUBCLASS_WIRELESS_802_11A                0x20
354
#define        PCI_SUBCLASS_WIRELESS_802_11B                0x21
355
#define        PCI_SUBCLASS_WIRELESS_MISC                0x80
356
357
/* 0x0e I2O (Intelligent I/O) subclasses */
358
#define        PCI_SUBCLASS_I2O_STANDARD                0x00
359
#define                PCI_INTERFACE_I2O_FIFOAT40                0x00
360
                /* others for I2O spec */
361
#define        PCI_SUBCLASS_I2O_MISC                        0x80
362
363
/* 0x0f satellite communication subclasses */
364
/*        PCI_SUBCLASS_SATCOM_???                        0x00        / * XXX ??? */
365
#define        PCI_SUBCLASS_SATCOM_TV                        0x01
366
#define        PCI_SUBCLASS_SATCOM_AUDIO                0x02
367
#define        PCI_SUBCLASS_SATCOM_VOICE                0x03
368
#define        PCI_SUBCLASS_SATCOM_DATA                0x04
369
#define        PCI_SUBCLASS_SATCOM_MISC                0x80
370
371
/* 0x10 encryption/decryption subclasses */
372
#define        PCI_SUBCLASS_CRYPTO_NETCOMP                0x00
373
#define        PCI_SUBCLASS_CRYPTO_ENTERTAINMENT        0x10
374
#define        PCI_SUBCLASS_CRYPTO_MISC                0x80
375
376
/* 0x11 data acquisition and signal processing subclasses */
377
#define        PCI_SUBCLASS_DASP_DPIO                        0x00
378
#define        PCI_SUBCLASS_DASP_TIMEFREQ                0x01 /* performance counters */
379
#define        PCI_SUBCLASS_DASP_SYNC                        0x10
380
#define        PCI_SUBCLASS_DASP_MGMT                        0x20
381
#define        PCI_SUBCLASS_DASP_MISC                        0x80
382
383
/*
384
 * PCI BIST/Header Type/Latency Timer/Cache Line Size Register.
385
 */
386
#define        PCI_BHLC_REG                        0x0c
387
388
#define        PCI_BIST_SHIFT                                24
389
#define        PCI_BIST_MASK                                0xff
390
#define        PCI_BIST(bhlcr) \
391
            (((bhlcr) >> PCI_BIST_SHIFT) & PCI_BIST_MASK)
392
393
#define        PCI_HDRTYPE_SHIFT                        16
394
#define        PCI_HDRTYPE_MASK                        0xff
395
#define        PCI_HDRTYPE(bhlcr) \
396
            (((bhlcr) >> PCI_HDRTYPE_SHIFT) & PCI_HDRTYPE_MASK)
397
398
#define        PCI_HDRTYPE_TYPE(bhlcr) \
399
            (PCI_HDRTYPE(bhlcr) & 0x7f)
400
#define        PCI_HDRTYPE_MULTIFN(bhlcr) \
401
            ((PCI_HDRTYPE(bhlcr) & 0x80) != 0)
402
403
#define        PCI_LATTIMER_SHIFT                        8
404
#define        PCI_LATTIMER_MASK                        0xff
405
#define        PCI_LATTIMER(bhlcr) \
406
            (((bhlcr) >> PCI_LATTIMER_SHIFT) & PCI_LATTIMER_MASK)
407
408
#define        PCI_CACHELINE_SHIFT                        0
409
#define        PCI_CACHELINE_MASK                        0xff
410
#define        PCI_CACHELINE(bhlcr) \
411
            (((bhlcr) >> PCI_CACHELINE_SHIFT) & PCI_CACHELINE_MASK)
412
413
#define PCI_BHLC_CODE(bist,type,multi,latency,cacheline)                \
414
            ((((bist) & PCI_BIST_MASK) << PCI_BIST_SHIFT) |                \
415
             (((type) & PCI_HDRTYPE_MASK) << PCI_HDRTYPE_SHIFT) |        \
416
             (((multi)?0x80:0) << PCI_HDRTYPE_SHIFT) |                        \
417
             (((latency) & PCI_LATTIMER_MASK) << PCI_LATTIMER_SHIFT) |        \
418
             (((cacheline) & PCI_CACHELINE_MASK) << PCI_CACHELINE_SHIFT))
419
420
/*
421
 * PCI header type
422
 */
423
#define PCI_HDRTYPE_DEVICE        0        /* PCI/PCIX/Cardbus */
424
#define PCI_HDRTYPE_PPB                1        /* PCI/PCIX/Cardbus */
425
#define PCI_HDRTYPE_PCB                2        /* PCI/PCIX/Cardbus */
426
#define PCI_HDRTYPE_EP                0        /* PCI Express */
427
#define PCI_HDRTYPE_RC                1        /* PCI Express */
428
429
430
/*
431
 * Mapping registers
432
 */
433
#define        PCI_MAPREG_START                0x10
434
#define        PCI_MAPREG_END                        0x28
435
#define        PCI_MAPREG_ROM                        0x30
436
#define        PCI_MAPREG_PPB_END                0x18
437
#define        PCI_MAPREG_PCB_END                0x14
438
439
#define PCI_BAR0                0x10
440
#define PCI_BAR1                0x14
441
#define PCI_BAR2                0x18
442
#define PCI_BAR3                0x1C
443
#define PCI_BAR4                0x20
444
#define PCI_BAR5                0x24
445
446
#define        PCI_BAR(__n)                (PCI_MAPREG_START + 4 * (__n))
447
448
#define        PCI_MAPREG_TYPE(mr)                                                \
449
            ((mr) & PCI_MAPREG_TYPE_MASK)
450
#define        PCI_MAPREG_TYPE_MASK                        0x00000001
451
452
#define        PCI_MAPREG_TYPE_MEM                        0x00000000
453
#define        PCI_MAPREG_TYPE_ROM                        0x00000000
454
#define        PCI_MAPREG_TYPE_IO                        0x00000001
455
#define        PCI_MAPREG_ROM_ENABLE                        0x00000001
456
457
#define        PCI_MAPREG_MEM_TYPE(mr)                                                \
458
            ((mr) & PCI_MAPREG_MEM_TYPE_MASK)
459
#define        PCI_MAPREG_MEM_TYPE_MASK                0x00000006
460
461
#define        PCI_MAPREG_MEM_TYPE_32BIT                0x00000000
462
#define        PCI_MAPREG_MEM_TYPE_32BIT_1M                0x00000002
463
#define        PCI_MAPREG_MEM_TYPE_64BIT                0x00000004
464
465
#define        PCI_MAPREG_MEM_PREFETCHABLE(mr)                                \
466
            (((mr) & PCI_MAPREG_MEM_PREFETCHABLE_MASK) != 0)
467
#define        PCI_MAPREG_MEM_PREFETCHABLE_MASK        0x00000008
468
469
#define        PCI_MAPREG_MEM_ADDR(mr)                                                \
470
            ((mr) & PCI_MAPREG_MEM_ADDR_MASK)
471
#define        PCI_MAPREG_MEM_SIZE(mr)                                                \
472
            (PCI_MAPREG_MEM_ADDR(mr) & -PCI_MAPREG_MEM_ADDR(mr))
473
#define        PCI_MAPREG_MEM_ADDR_MASK                0xfffffff0
474
475
#define        PCI_MAPREG_MEM64_ADDR(mr)                                        \
476
            ((mr) & PCI_MAPREG_MEM64_ADDR_MASK)
477
#define        PCI_MAPREG_MEM64_SIZE(mr)                                        \
478
            (PCI_MAPREG_MEM64_ADDR(mr) & -PCI_MAPREG_MEM64_ADDR(mr))
479
#define        PCI_MAPREG_MEM64_ADDR_MASK                0xfffffffffffffff0ULL
480
481
#define        PCI_MAPREG_IO_ADDR(mr)                                                \
482
            ((mr) & PCI_MAPREG_IO_ADDR_MASK)
483
#define        PCI_MAPREG_IO_SIZE(mr)                                                \
484
            (PCI_MAPREG_IO_ADDR(mr) & -PCI_MAPREG_IO_ADDR(mr))
485
#define        PCI_MAPREG_IO_ADDR_MASK                        0xfffffffc
486
487
#define PCI_MAPREG_SIZE_TO_MASK(size)                                        \
488
            (-(size))
489
490
#define PCI_MAPREG_NUM(offset)                                                \
491
            (((unsigned)(offset)-PCI_MAPREG_START)/4)
492
493
494
/*
495
 * Cardbus CIS pointer (PCI rev. 2.1)
496
 */
497
#define PCI_CARDBUS_CIS_REG 0x28
498
499
/*
500
 * Subsystem identification register; contains a vendor ID and a device ID.
501
 * Types/macros for PCI_ID_REG apply.
502
 * (PCI rev. 2.1)
503
 */
504
#define PCI_SUBSYS_ID_REG 0x2c
505
506
#define        PCI_SUBSYS_VENDOR_MASK        __BITS(15, 0)
507
#define        PCI_SUBSYS_ID_MASK                __BITS(31, 16)
508
509
#define        PCI_SUBSYS_VENDOR(__subsys_id)        \
510
    __SHIFTOUT(__subsys_id, PCI_SUBSYS_VENDOR_MASK)
511
512
#define        PCI_SUBSYS_ID(__subsys_id)        \
513
    __SHIFTOUT(__subsys_id, PCI_SUBSYS_ID_MASK)
514
515
/*
516
 * Capabilities link list (PCI rev. 2.2)
517
 */
518
#define        PCI_CAPLISTPTR_REG                0x34        /* header type 0 */
519
#define        PCI_CARDBUS_CAPLISTPTR_REG        0x14        /* header type 2 */
520
#define        PCI_CAPLIST_PTR(cpr)        ((cpr) & 0xff)
521
#define        PCI_CAPLIST_NEXT(cr)        (((cr) >> 8) & 0xff)
522
#define        PCI_CAPLIST_CAP(cr)        ((cr) & 0xff)
523
524
#define        PCI_CAP_RESERVED0        0x00
525
#define        PCI_CAP_PWRMGMT                0x01
526
#define        PCI_CAP_AGP                0x02
527
#define PCI_CAP_AGP_MAJOR(cr)        (((cr) >> 20) & 0xf)
528
#define PCI_CAP_AGP_MINOR(cr)        (((cr) >> 16) & 0xf)
529
#define        PCI_CAP_VPD                0x03
530
#define        PCI_CAP_SLOTID                0x04
531
#define        PCI_CAP_MSI                0x05
532
#define        PCI_CAP_CPCI_HOTSWAP        0x06
533
#define        PCI_CAP_PCIX                0x07
534
#define        PCI_CAP_LDT                0x08        /* HyperTransport */
535
#define        PCI_CAP_VENDSPEC        0x09
536
#define        PCI_CAP_DEBUGPORT        0x0a
537
#define        PCI_CAP_CPCI_RSRCCTL        0x0b
538
#define        PCI_CAP_HOTPLUG                0x0c
539
#define        PCI_CAP_SUBVENDOR        0x0d
540
#define        PCI_CAP_AGP8                0x0e
541
#define        PCI_CAP_SECURE                0x0f
542
#define        PCI_CAP_PCIEXPRESS             0x10
543
#define        PCI_CAP_MSIX                0x11
544
#define        PCI_CAP_SATA                0x12
545
#define        PCI_CAP_PCIAF                0x13
546
547
/*
548
 * Capability ID: 0x01
549
 * Power Management Capability; access via capability pointer.
550
 */
551
552
/* Power Management Capability Register */
553
#define PCI_PMCR_SHIFT                16
554
#define PCI_PMCR                0x02
555
#define PCI_PMCR_VERSION_MASK        0x0007
556
#define PCI_PMCR_VERSION_10        0x0001
557
#define PCI_PMCR_VERSION_11        0x0002
558
#define PCI_PMCR_VERSION_12        0x0003
559
#define PCI_PMCR_PME_CLOCK        0x0008
560
#define PCI_PMCR_DSI                0x0020
561
#define PCI_PMCR_AUXCUR_MASK        0x01c0
562
#define PCI_PMCR_AUXCUR_0        0x0000
563
#define PCI_PMCR_AUXCUR_55        0x0040
564
#define PCI_PMCR_AUXCUR_100        0x0080
565
#define PCI_PMCR_AUXCUR_160        0x00c0
566
#define PCI_PMCR_AUXCUR_220        0x0100
567
#define PCI_PMCR_AUXCUR_270        0x0140
568
#define PCI_PMCR_AUXCUR_320        0x0180
569
#define PCI_PMCR_AUXCUR_375        0x01c0
570
#define PCI_PMCR_D1SUPP                0x0200
571
#define PCI_PMCR_D2SUPP                0x0400
572
#define PCI_PMCR_PME_D0                0x0800
573
#define PCI_PMCR_PME_D1                0x1000
574
#define PCI_PMCR_PME_D2                0x2000
575
#define PCI_PMCR_PME_D3HOT        0x4000
576
#define PCI_PMCR_PME_D3COLD        0x8000
577
/*
578
 * Power Management Control Status Register, Bridge Support Extensions Register
579
 * and Data Register.
580
 */
581
#define PCI_PMCSR                0x04
582
#define PCI_PMCSR_STATE_MASK        0x00000003
583
#define PCI_PMCSR_STATE_D0        0x00000000
584
#define PCI_PMCSR_STATE_D1        0x00000001
585
#define PCI_PMCSR_STATE_D2        0x00000002
586
#define PCI_PMCSR_STATE_D3        0x00000003
587
#define PCI_PMCSR_NO_SOFTRST        0x00000008
588
#define        PCI_PMCSR_PME_EN        0x00000100
589
#define PCI_PMCSR_DATASEL_MASK        0x00001e00
590
#define PCI_PMCSR_DATASCL_MASK        0x00006000
591
#define PCI_PMCSR_PME_STS        0x00008000
592
#define PCI_PMCSR_B2B3_SUPPORT        0x00400000
593
#define PCI_PMCSR_BPCC_EN        0x00800000
594
595
596
/*
597
 * Capability ID: 0x02
598
 * AGP
599
 */
600
601
/*
602
 * Capability ID: 0x03
603
 * Vital Product Data; access via capability pointer (PCI rev 2.2).
604
 */
605
#define        PCI_VPD_ADDRESS_MASK        0x7fff
606
#define        PCI_VPD_ADDRESS_SHIFT        16
607
#define        PCI_VPD_ADDRESS(ofs)        \
608
        (((ofs) & PCI_VPD_ADDRESS_MASK) << PCI_VPD_ADDRESS_SHIFT)
609
#define        PCI_VPD_DATAREG(ofs)        ((ofs) + 4)
610
#define        PCI_VPD_OPFLAG                0x80000000
611
612
/*
613
 * Capability ID: 0x04
614
 * Slot ID
615
 */
616
617
/*
618
 * Capability ID: 0x05
619
 * MSI
620
 */
621
622
#define        PCI_MSI_CTL                0x0        /* Message Control Register offset */
623
#define        PCI_MSI_MADDR                0x4        /* Message Address Register (least
624
                                         * significant bits) offset
625
                                         */
626
#define        PCI_MSI_MADDR64_LO        0x4        /* 64-bit Message Address Register
627
                                         * (least significant bits) offset
628
                                         */
629
#define        PCI_MSI_MADDR64_HI        0x8        /* 64-bit Message Address Register
630
                                         * (most significant bits) offset
631
                                         */
632
#define        PCI_MSI_MDATA                0x8        /* Message Data Register offset */
633
#define        PCI_MSI_MDATA64                0xC        /* 64-bit Message Data Register
634
                                         * offset
635
                                         */
636
#define        PCI_MSI_MASK                0x10        /* Vector Mask register */
637
#define        PCI_MSI_PENDING                0x14        /* Vector Pending register */
638
639
#define        PCI_MSI_CTL_MASK        __BITS(31, 16)
640
#define        PCI_MSI_CTL_PERVEC_MASK        __SHIFTIN(__BIT(8), PCI_MSI_CTL_MASK)
641
#define        PCI_MSI_CTL_64BIT_ADDR        __SHIFTIN(__BIT(7), PCI_MSI_CTL_MASK)
642
#define        PCI_MSI_CTL_MME_MASK        __SHIFTIN(__BITS(6, 4), PCI_MSI_CTL_MASK)
643
#define        PCI_MSI_CTL_MME(reg)        __SHIFTOUT(reg, PCI_MSI_CTL_MME_MASK)
644
#define        PCI_MSI_CTL_MMC_MASK        __SHIFTIN(__BITS(3, 1), PCI_MSI_CTL_MASK)
645
#define        PCI_MSI_CTL_MMC(reg)        __SHIFTOUT(reg, PCI_MSI_CTL_MMC_MASK)
646
#define        PCI_MSI_CTL_MSI_ENABLE        __SHIFTIN(__BIT(0), PCI_MSI_CTL_MASK)
647
648
/*
649
 * MSI Message Address is at offset 4.
650
 * MSI Message Upper Address (if 64bit) is at offset 8.
651
 * MSI Message data is at offset 8 or 12 and is 16 bits.
652
 * [16 bit reserved field]
653
 * MSI Mask Bits (32 bit field)
654
 * MSI Pending Bits (32 bit field)
655
 */
656
657
 /* Max number of MSI vectors. See PCI-SIG specification. */
658
#define        PCI_MSI_MAX_VECTORS        32
659
660
/*
661
 * Capability ID: 0x07
662
 * PCI-X capability.
663
 *
664
 * PCI-X capability register has two different layouts. One is for bridge
665
 * function. Another is for non-bridge functions.
666
 */
667
668
669
/* For non-bridge functions */
670
671
/*
672
 * Command. 16 bits at offset 2 (e.g. upper 16 bits of the first 32-bit
673
 * word at the capability; the lower 16 bits are the capability ID and
674
 * next capability pointer).
675
 *
676
 * Since we always read PCI config space in 32-bit words, we define these
677
 * as 32-bit values, offset and shifted appropriately.  Make sure you perform
678
 * the appropriate R/M/W cycles!
679
 */
680
#define PCIX_CMD                0x00
681
#define PCIX_CMD_PERR_RECOVER        0x00010000
682
#define PCIX_CMD_RELAXED_ORDER        0x00020000
683
#define PCIX_CMD_BYTECNT_MASK        0x000c0000
684
#define        PCIX_CMD_BYTECNT_SHIFT        18
685
#define        PCIX_CMD_BYTECNT(reg)        \
686
        (512 << (((reg) & PCIX_CMD_BYTECNT_MASK) >> PCIX_CMD_BYTECNT_SHIFT))
687
#define                PCIX_CMD_BCNT_512        0x00000000
688
#define                PCIX_CMD_BCNT_1024        0x00040000
689
#define                PCIX_CMD_BCNT_2048        0x00080000
690
#define                PCIX_CMD_BCNT_4096        0x000c0000
691
#define PCIX_CMD_SPLTRANS_MASK        0x00700000
692
#define        PCIX_CMD_SPLTRANS_SHIFT        20
693
#define                PCIX_CMD_SPLTRANS_1        0x00000000
694
#define                PCIX_CMD_SPLTRANS_2        0x00100000
695
#define                PCIX_CMD_SPLTRANS_3        0x00200000
696
#define                PCIX_CMD_SPLTRANS_4        0x00300000
697
#define                PCIX_CMD_SPLTRANS_8        0x00400000
698
#define                PCIX_CMD_SPLTRANS_12        0x00500000
699
#define                PCIX_CMD_SPLTRANS_16        0x00600000
700
#define                PCIX_CMD_SPLTRANS_32        0x00700000
701
702
/*
703
 * Status. 32 bits at offset 4.
704
 */
705
#define PCIX_STATUS                0x04
706
#define PCIX_STATUS_FN_MASK        0x00000007
707
#define PCIX_STATUS_DEV_MASK        0x000000f8
708
#define PCIX_STATUS_DEV_SHIFT        3
709
#define PCIX_STATUS_BUS_MASK        0x0000ff00
710
#define PCIX_STATUS_BUS_SHIFT        8
711
#define PCIX_STATUS_FN(val)        ((val) & PCIX_STATUS_FN_MASK)
712
#define PCIX_STATUS_DEV(val)        \
713
        (((val) & PCIX_STATUS_DEV_MASK) >> PCIX_STATUS_DEV_SHIFT)
714
#define PCIX_STATUS_BUS(val)        \
715
        (((val) & PCIX_STATUS_BUS_MASK) >> PCIX_STATUS_BUS_SHIFT)
716
#define PCIX_STATUS_64BIT        0x00010000        /* 64bit device */
717
#define PCIX_STATUS_133                0x00020000        /* 133MHz capable */
718
#define PCIX_STATUS_SPLDISC        0x00040000        /* Split completion discarded*/
719
#define PCIX_STATUS_SPLUNEX        0x00080000        /* Unexpected split complet. */
720
#define PCIX_STATUS_DEVCPLX        0x00100000        /* Device Complexity */
721
#define PCIX_STATUS_MAXB_MASK        0x00600000        /* MAX memory read Byte count*/
722
#define        PCIX_STATUS_MAXB_SHIFT        21
723
#define                PCIX_STATUS_MAXB_512        0x00000000
724
#define                PCIX_STATUS_MAXB_1024        0x00200000
725
#define                PCIX_STATUS_MAXB_2048        0x00400000
726
#define                PCIX_STATUS_MAXB_4096        0x00600000
727
#define PCIX_STATUS_MAXST_MASK        0x03800000        /* MAX outstand. Split Trans.*/
728
#define        PCIX_STATUS_MAXST_SHIFT        23
729
#define                PCIX_STATUS_MAXST_1        0x00000000
730
#define                PCIX_STATUS_MAXST_2        0x00800000
731
#define                PCIX_STATUS_MAXST_3        0x01000000
732
#define                PCIX_STATUS_MAXST_4        0x01800000
733
#define                PCIX_STATUS_MAXST_8        0x02000000
734
#define                PCIX_STATUS_MAXST_12        0x02800000
735
#define                PCIX_STATUS_MAXST_16        0x03000000
736
#define                PCIX_STATUS_MAXST_32        0x03800000
737
#define PCIX_STATUS_MAXRS_MASK        0x1c000000        /* MAX cumulative Read Size */
738
#define PCIX_STATUS_MAXRS_SHIFT        26
739
#define                PCIX_STATUS_MAXRS_1K        0x00000000
740
#define                PCIX_STATUS_MAXRS_2K        0x04000000
741
#define                PCIX_STATUS_MAXRS_4K        0x08000000
742
#define                PCIX_STATUS_MAXRS_8K        0x0c000000
743
#define                PCIX_STATUS_MAXRS_16K        0x10000000
744
#define                PCIX_STATUS_MAXRS_32K        0x14000000
745
#define                PCIX_STATUS_MAXRS_64K        0x18000000
746
#define                PCIX_STATUS_MAXRS_128K        0x1c000000
747
#define PCIX_STATUS_SCERR        0x20000000        /* rcv. Split Completion ERR.*/
748
#define PCIX_STATUS_266                0x40000000        /* 266MHz capable */
749
#define PCIX_STATUS_533                0x80000000        /* 533MHz capable */
750
751
/* For bridge function */
752
753
#define PCIX_BRIDGE_2ND_STATUS        0x00
754
#define PCIX_BRIDGE_ST_64BIT        0x00010000        /* Same as PCIX_STATUS (nonb)*/
755
#define PCIX_BRIDGE_ST_133        0x00020000        /* Same as PCIX_STATUS (nonb)*/
756
#define PCIX_BRIDGE_ST_SPLDISC        0x00040000        /* Same as PCIX_STATUS (nonb)*/
757
#define PCIX_BRIDGE_ST_SPLUNEX        0x00080000        /* Same as PCIX_STATUS (nonb)*/
758
#define PCIX_BRIDGE_ST_SPLOVRN        0x00100000        /* Split completion overrun */
759
#define PCIX_BRIDGE_ST_SPLRQDL        0x00200000        /* Split request delayed */
760
#define PCIX_BRIDGE_2NDST_CLKF        0x03c00000        /* Secondary clock frequency */
761
#define PCIX_BRIDGE_2NDST_CLKF_SHIFT 22
762
#define PCIX_BRIDGE_2NDST_VER_MASK 0x30000000        /* Version */
763
#define PCIX_BRIDGE_2NDST_VER_SHIFT 28
764
#define PCIX_BRIDGE_ST_266        0x40000000        /* Same as PCIX_STATUS (nonb)*/
765
#define PCIX_BRIDGE_ST_533        0x80000000        /* Same as PCIX_STATUS (nonb)*/
766
767
#define PCIX_BRIDGE_PRI_STATUS        0x04
768
/* Bit 0 to 15 are the same as PCIX_STATUS */
769
/* Bit 16 to 21 are the same as PCIX_BRIDGE_2ND_STATUS */
770
/* Bit 30 and 31 are the same as PCIX_BRIDGE_2ND_STATUS */
771
772
#define PCIX_BRIDGE_UP_STCR        0x08 /* Upstream Split Transaction Control */
773
#define PCIX_BRIDGE_DOWN_STCR        0x0c /* Downstream Split Transaction Control */
774
/* The layouts of above two registers are the same */
775
#define PCIX_BRIDGE_STCAP        0x0000ffff        /* Sp. Tr. Capacity */
776
#define PCIX_BRIDGE_STCLIM        0xffff0000        /* Sp. Tr. Commitment Limit */
777
#define PCIX_BRIDGE_STCLIM_SHIFT 16
778
779
/*
780
 * Capability ID: 0x08
781
 * HyperTransport
782
 */
783
784
#define PCI_HT_CMD        0x00        /* Capability List & Command Register */
785
#define        PCI_HT_CMD_MASK                __BITS(31, 16)
786
#define PCI_HT_MSI_ENABLED        __BIT(16)
787
#define PCI_HT_MSI_FIXED        __BIT(17)
788
#define PCI_HT_CAP(cr) ((((cr) >> 27) < 0x08) ?                                      \
789
    (((cr) >> 27) & 0x1c) : (((cr) >> 27) & 0x1f))
790
#define PCI_HT_CAPMASK                __BITS(31, 27)
791
#define PCI_HT_CAP_SLAVE        __SHIFTIN(0b00000, PCI_HT_CAPMASK) /* 000xx */
792
#define PCI_HT_CAP_HOST                __SHIFTIN(0b00100, PCI_HT_CAPMASK) /* 001xx */
793
#define PCI_HT_CAP_SWITCH        __SHIFTIN(0b01000, PCI_HT_CAPMASK)
794
#define PCI_HT_CAP_INTERRUPT        __SHIFTIN(0b10000, PCI_HT_CAPMASK)
795
#define PCI_HT_CAP_REVID        __SHIFTIN(0b10001, PCI_HT_CAPMASK)
796
#define PCI_HT_CAP_UNITID_CLUMP        __SHIFTIN(0b10010, PCI_HT_CAPMASK)
797
#define PCI_HT_CAP_EXTCNFSPACE        __SHIFTIN(0b10011, PCI_HT_CAPMASK)
798
#define PCI_HT_CAP_ADDRMAP        __SHIFTIN(0b10100, PCI_HT_CAPMASK)
799
#define PCI_HT_CAP_MSIMAP        __SHIFTIN(0b10101, PCI_HT_CAPMASK)
800
#define PCI_HT_CAP_DIRECTROUTE        __SHIFTIN(0b10110, PCI_HT_CAPMASK)
801
#define PCI_HT_CAP_VCSET        __SHIFTIN(0b10111, PCI_HT_CAPMASK)
802
#define PCI_HT_CAP_RETRYMODE        __SHIFTIN(0b11000, PCI_HT_CAPMASK)
803
#define PCI_HT_CAP_X86ENCODE        __SHIFTIN(0b11001, PCI_HT_CAPMASK)
804
#define PCI_HT_CAP_GEN3                __SHIFTIN(0b11010, PCI_HT_CAPMASK)
805
#define PCI_HT_CAP_FLE                __SHIFTIN(0b11011, PCI_HT_CAPMASK)
806
#define PCI_HT_CAP_PM                __SHIFTIN(0b11100, PCI_HT_CAPMASK)
807
#define PCI_HT_CAP_HIGHNODECNT        __SHIFTIN(0b11101, PCI_HT_CAPMASK)
808
809
#define PCI_HT_MSI_ADDR_LO        0x04
810
#define PCI_HT_MSI_ADDR_HI        0x08
811
#define PCI_HT_MSI_FIXED_ADDR        0xfee00000UL
812
813
/*
814
 * Capability ID: 0x09
815
 * Vendor Specific
816
 */
817
#define PCI_VENDORSPECIFIC_SHIFT        16
818
#define PCI_VENDORSPECIFIC                0x02
819
820
/*
821
 * Capability ID: 0x0a
822
 * Debug Port
823
 */
824
#define PCI_DEBUG_BASER                0x00        /* Debug Base Register */
825
#define PCI_DEBUG_BASER_SHIFT        16
826
#define PCI_DEBUG_PORTOFF_SHIFT        16
827
#define        PCI_DEBUG_PORTOFF_MASK        0x1fff0000        /* Debug port offset */
828
#define PCI_DEBUG_BARNUM_SHIFT        29
829
#define        PCI_DEBUG_BARNUM_MASK        0xe0000000        /* BAR number */
830
831
/*
832
 * Capability ID: 0x0b
833
 * Compact PCI
834
 */
835
836
/*
837
 * Capability ID: 0x0c
838
 * Hotplug
839
 */
840
841
/*
842
 * Capability ID: 0x0d
843
 * Subsystem
844
 */
845
#define PCI_CAP_SUBSYS_ID 0x04
846
/* bit field layout is the same as PCI_SUBSYS_ID_REG's one */
847
848
/*
849
 * Capability ID: 0x0e
850
 * AGP8
851
 */
852
853
/*
854
 * Capability ID: 0x0f
855
 * Secure
856
 */
857
858
/*
859
 * Capability ID: 0x10
860
 * PCI Express; access via capability pointer.
861
 */
862
#define PCIE_XCAP        0x00        /* Capability List & Capabilities Register */
863
#define        PCIE_XCAP_MASK                __BITS(31, 16)
864
/* Capability Version */
865
#define PCIE_XCAP_VER_MASK        __SHIFTIN(__BITS(3, 0), PCIE_XCAP_MASK)
866
#define         PCIE_XCAP_VER_1        __SHIFTIN(1, PCIE_XCAP_VER_MASK)
867
#define         PCIE_XCAP_VER_2        __SHIFTIN(2, PCIE_XCAP_VER_MASK)
868
#define        PCIE_XCAP_TYPE_MASK        __SHIFTIN(__BITS(7, 4), PCIE_XCAP_MASK)
869
#define         PCIE_XCAP_TYPE_PCIE_DEV __SHIFTIN(0x0, PCIE_XCAP_TYPE_MASK)
870
#define         PCIE_XCAP_TYPE_PCI_DEV        __SHIFTIN(0x1, PCIE_XCAP_TYPE_MASK)
871
#define         PCIE_XCAP_TYPE_ROOT        __SHIFTIN(0x4, PCIE_XCAP_TYPE_MASK)
872
#define         PCIE_XCAP_TYPE_UP        __SHIFTIN(0x5, PCIE_XCAP_TYPE_MASK)
873
#define         PCIE_XCAP_TYPE_DOWN        __SHIFTIN(0x6, PCIE_XCAP_TYPE_MASK)
874
#define         PCIE_XCAP_TYPE_PCIE2PCI __SHIFTIN(0x7, PCIE_XCAP_TYPE_MASK)
875
#define         PCIE_XCAP_TYPE_PCI2PCIE __SHIFTIN(0x8, PCIE_XCAP_TYPE_MASK)
876
#define         PCIE_XCAP_TYPE_ROOT_INTEP __SHIFTIN(0x9, PCIE_XCAP_TYPE_MASK)
877
#define         PCIE_XCAP_TYPE_ROOT_EVNTC __SHIFTIN(0xa, PCIE_XCAP_TYPE_MASK)
878
#define PCIE_XCAP_SI                __SHIFTIN(__BIT(8), PCIE_XCAP_MASK) /* Slot Implemented */
879
#define PCIE_XCAP_IRQ                __SHIFTIN(__BITS(13, 9), PCIE_XCAP_MASK)
880
#define PCIE_DCAP        0x04        /* Device Capabilities Register */
881
#define PCIE_DCAP_MAX_PAYLOAD        __BITS(2, 0)   /* Max Payload Size Supported */
882
#define PCIE_DCAP_PHANTOM_FUNCS        __BITS(4, 3)   /* Phantom Functions Supported*/
883
#define PCIE_DCAP_EXT_TAG_FIELD        __BIT(5)       /* Extended Tag Field Support */
884
#define PCIE_DCAP_L0S_LATENCY        __BITS(8, 6)   /* Endpoint L0 Accptbl Latency*/
885
#define PCIE_DCAP_L1_LATENCY        __BITS(11, 9)  /* Endpoint L1 Accptbl Latency*/
886
#define PCIE_DCAP_ATTN_BUTTON        __BIT(12)      /* Attention Indicator Button */
887
#define PCIE_DCAP_ATTN_IND        __BIT(13)      /* Attention Indicator Present*/
888
#define PCIE_DCAP_PWR_IND        __BIT(14)      /* Power Indicator Present */
889
#define PCIE_DCAP_ROLE_ERR_RPT        __BIT(15)      /* Role-Based Error Reporting */
890
#define PCIE_DCAP_SLOT_PWR_LIM_VAL __BITS(25, 18) /* Cap. Slot PWR Limit Val */
891
#define PCIE_DCAP_SLOT_PWR_LIM_SCALE __BITS(27, 26) /* Cap. SlotPWRLimit Scl */
892
#define PCIE_DCAP_FLR                __BIT(28)      /* Function-Level Reset Cap. */
893
#define PCIE_DCSR        0x08        /* Device Control & Status Register */
894
#define PCIE_DCSR_ENA_COR_ERR        __BIT(0)       /* Correctable Error Report En*/
895
#define PCIE_DCSR_ENA_NFER        __BIT(1)       /* Non-Fatal Error Report En. */
896
#define PCIE_DCSR_ENA_FER        __BIT(2)       /* Fatal Error Reporting Enabl*/
897
#define PCIE_DCSR_ENA_URR        __BIT(3)       /* Unsupported Request Rpt En */
898
#define PCIE_DCSR_ENA_RELAX_ORD        __BIT(4)       /* Enable Relaxed Ordering */
899
#define PCIE_DCSR_MAX_PAYLOAD        __BITS(7, 5)   /* Max Payload Size */
900
#define PCIE_DCSR_EXT_TAG_FIELD        __BIT(8)       /* Extended Tag Field Enable */
901
#define PCIE_DCSR_PHANTOM_FUNCS        __BIT(9)       /* Phantom Functions Enable */
902
#define PCIE_DCSR_AUX_POWER_PM        __BIT(10)      /* Aux Power PM Enable */
903
#define PCIE_DCSR_ENA_NO_SNOOP        __BIT(11)      /* Enable No Snoop */
904
#define PCIE_DCSR_MAX_READ_REQ        __BITS(14, 12) /* Max Read Request Size */
905
#define PCIE_DCSR_BRDG_CFG_RETRY __BIT(15)     /* Bridge Config Retry Enable */
906
#define PCIE_DCSR_INITIATE_FLR        __BIT(15)      /* Initiate Function-Level Rst*/
907
#define PCIE_DCSR_CED                __BIT(0 + 16)  /* Correctable Error Detected */
908
#define PCIE_DCSR_NFED                __BIT(1 + 16)  /* Non-Fatal Error Detected */
909
#define PCIE_DCSR_FED                __BIT(2 + 16)  /* Fatal Error Detected */
910
#define PCIE_DCSR_URD                __BIT(3 + 16)  /* Unsupported Req. Detected */
911
#define PCIE_DCSR_AUX_PWR        __BIT(4 + 16)  /* Aux Power Detected */
912
#define PCIE_DCSR_TRANSACTION_PND __BIT(5 + 16) /* Transaction Pending */
913
#define PCIE_LCAP        0x0c        /* Link Capabilities Register */
914
#define PCIE_LCAP_MAX_SPEED        __BITS(3, 0)   /* Max Link Speed */
915
#define PCIE_LCAP_MAX_WIDTH        __BITS(9, 4)   /* Maximum Link Width */
916
#define PCIE_LCAP_ASPM                __BITS(11, 10) /* Active State Link PM Supp. */
917
#define PCIE_LCAP_L0S_EXIT        __BITS(14, 12) /* L0s Exit Latency */
918
#define PCIE_LCAP_L1_EXIT        __BITS(17, 15) /* L1 Exit Latency */
919
#define PCIE_LCAP_CLOCK_PM        __BIT(18)      /* Clock Power Management */
920
#define PCIE_LCAP_SURPRISE_DOWN        __BIT(19)      /* Surprise Down Err Rpt Cap. */
921
#define PCIE_LCAP_DL_ACTIVE        __BIT(20)      /* Data Link Layer Link Active*/
922
#define PCIE_LCAP_LINK_BW_NOTIFY __BIT(21)     /* Link BW Notification Capabl*/
923
#define PCIE_LCAP_ASPM_COMPLIANCE __BIT(22)    /* ASPM Optionally Compliance */
924
#define PCIE_LCAP_PORT                __BITS(31, 24) /* Port Number */
925
#define PCIE_LCSR        0x10        /* Link Control & Status Register */
926
#define PCIE_LCSR_ASPM_L0S        __BIT(0)       /* Active State PM Control L0s*/
927
#define PCIE_LCSR_ASPM_L1        __BIT(1)       /* Active State PM Control L1 */
928
#define PCIE_LCSR_RCB                __BIT(3)       /* Read Completion Boundry Ctl*/
929
#define PCIE_LCSR_LINK_DIS        __BIT(4)       /* Link Disable */
930
#define PCIE_LCSR_RETRAIN        __BIT(5)       /* Retrain Link */
931
#define PCIE_LCSR_COMCLKCFG        __BIT(6)       /* Common Clock Configuration */
932
#define PCIE_LCSR_EXTNDSYNC        __BIT(7)       /* Extended Synch */
933
#define PCIE_LCSR_ENCLKPM        __BIT(8)       /* Enable Clock Power Managmt */
934
#define PCIE_LCSR_HAWD                __BIT(9)       /* HW Autonomous Width Disable*/
935
#define PCIE_LCSR_LBMIE                __BIT(10)      /* Link BW Management Intr En */
936
#define PCIE_LCSR_LABIE                __BIT(11)      /* Link Autonomous BW Intr En */
937
#define        PCIE_LCSR_LINKSPEED        __BITS(19, 16) /* Link Speed */
938
#define        PCIE_LCSR_NLW                __BITS(25, 20) /* Negotiated Link Width */
939
#define        PCIE_LCSR_LINKTRAIN_ERR        __BIT(10 + 16) /* Link Training Error */
940
#define        PCIE_LCSR_LINKTRAIN        __BIT(11 + 16) /* Link Training */
941
#define        PCIE_LCSR_SLOTCLKCFG         __BIT(12 + 16) /* Slot Clock Configuration */
942
#define        PCIE_LCSR_DLACTIVE        __BIT(13 + 16) /* Data Link Layer Link Active*/
943
#define        PCIE_LCSR_LINK_BW_MGMT        __BIT(14 + 16) /* Link BW Management Status */
944
#define        PCIE_LCSR_LINK_AUTO_BW        __BIT(15 + 16) /* Link Autonomous BW Status */
945
#define PCIE_SLCAP        0x14        /* Slot Capabilities Register */
946
#define PCIE_SLCAP_ABP                __BIT(0)       /* Attention Button Present */
947
#define PCIE_SLCAP_PCP                __BIT(1)       /* Power Controller Present */
948
#define PCIE_SLCAP_MSP                __BIT(2)       /* MRL Sensor Present */
949
#define PCIE_SLCAP_AIP                __BIT(3)       /* Attention Indicator Present*/
950
#define PCIE_SLCAP_PIP                __BIT(4)       /* Power Indicator Present */
951
#define PCIE_SLCAP_HPS                __BIT(5)       /* Hot-Plug Surprise */
952
#define PCIE_SLCAP_HPC                __BIT(6)       /* Hot-Plug Capable */
953
#define        PCIE_SLCAP_SPLV                __BITS(14, 7)  /* Slot Power Limit Value */
954
#define        PCIE_SLCAP_SPLS                __BITS(16, 15) /* Slot Power Limit Scale */
955
#define        PCIE_SLCAP_EIP                __BIT(17)      /* Electromechanical Interlock*/
956
#define        PCIE_SLCAP_NCCS                __BIT(18)      /* No Command Completed Supp. */
957
#define        PCIE_SLCAP_PSN                __BITS(31, 19) /* Physical Slot Number */
958
#define PCIE_SLCSR        0x18        /* Slot Control & Status Register */
959
#define PCIE_SLCSR_ABE                __BIT(0)       /* Attention Button Pressed En*/
960
#define PCIE_SLCSR_PFE                __BIT(1)       /* Power Button Pressed Enable*/
961
#define PCIE_SLCSR_MSE                __BIT(2)       /* MRL Sensor Changed Enable */
962
#define PCIE_SLCSR_PDE                __BIT(3)       /* Presence Detect Changed Ena*/
963
#define PCIE_SLCSR_CCE                __BIT(4)       /* Command Completed Intr. En */
964
#define PCIE_SLCSR_HPE                __BIT(5)       /* Hot Plug Interrupt Enable */
965
#define PCIE_SLCSR_AIC                __BITS(7, 6)   /* Attention Indicator Control*/
966
#define PCIE_SLCSR_PIC                __BITS(9, 8)   /* Power Indicator Control */
967
#define PCIE_SLCSR_PCC                __BIT(10)      /* Power Controller Control */
968
#define PCIE_SLCSR_EIC                __BIT(11)      /* Electromechanical Interlock*/
969
#define PCIE_SLCSR_DLLSCE        __BIT(12)      /* DataLinkLayer State Changed*/
970
#define PCIE_SLCSR_ABP                __BIT(0 + 16)  /* Attention Button Pressed */
971
#define PCIE_SLCSR_PFD                __BIT(1 + 16)  /* Power Fault Detected */
972
#define PCIE_SLCSR_MSC                __BIT(2 + 16)  /* MRL Sensor Changed */
973
#define PCIE_SLCSR_PDC                __BIT(3 + 16)  /* Presence Detect Changed */
974
#define PCIE_SLCSR_CC                __BIT(4 + 16)  /* Command Completed */
975
#define PCIE_SLCSR_MS                __BIT(5 + 16)  /* MRL Sensor State */
976
#define PCIE_SLCSR_PDS                __BIT(6 + 16)  /* Presence Detect State */
977
#define PCIE_SLCSR_EIS                __BIT(7 + 16)  /* Electromechanical Interlock*/
978
#define PCIE_SLCSR_LACS                __BIT(8 + 16)  /* Data Link Layer State Chg. */
979
#define PCIE_RCR        0x1c        /* Root Control & Capabilities Reg. */
980
#define PCIE_RCR_SERR_CER        __BIT(0)       /* SERR on Correctable Err. En*/
981
#define PCIE_RCR_SERR_NFER        __BIT(1)       /* SERR on Non-Fatal Error En */
982
#define PCIE_RCR_SERR_FER        __BIT(2)       /* SERR on Fatal Error Enable */
983
#define PCIE_RCR_PME_IE                __BIT(3)       /* PME Interrupt Enable */
984
#define PCIE_RCR_CRS_SVE        __BIT(4)       /* CRS Software Visibility En */
985
#define PCIE_RCR_CRS_SV                __BIT(16)      /* CRS Software Visibility */
986
#define PCIE_RSR        0x20        /* Root Status Register */
987
#define PCIE_RSR_PME_REQESTER        __BITS(15, 0)  /* PME Requester ID */
988
#define PCIE_RSR_PME_STAT        __BIT(16)      /* PME Status */
989
#define PCIE_RSR_PME_PEND        __BIT(17)      /* PME Pending */
990
#define PCIE_DCAP2        0x24        /* Device Capabilities 2 Register */
991
#define PCIE_DCAP2_COMPT_RANGE        __BITS(3,0)    /* Compl. Timeout Ranges Supp */
992
#define PCIE_DCAP2_COMPT_DIS        __BIT(4)       /* Compl. Timeout Disable Supp*/
993
#define PCIE_DCAP2_ARI_FWD        __BIT(5)       /* ARI Forward Supported */
994
#define PCIE_DCAP2_ATOM_ROUT        __BIT(6)       /* AtomicOp Routing Supported */
995
#define PCIE_DCAP2_32ATOM        __BIT(7)       /* 32bit AtomicOp Compl. Supp */
996
#define PCIE_DCAP2_64ATOM        __BIT(8)       /* 64bit AtomicOp Compl. Supp */
997
#define PCIE_DCAP2_128CAS        __BIT(9)       /* 128bit Cas Completer Supp. */
998
#define PCIE_DCAP2_NO_ROPR_PASS        __BIT(10)      /* No RO-enabled PR-PR Passng */
999
#define PCIE_DCAP2_LTR_MEC        __BIT(11)      /* LTR Mechanism Supported */
1000
#define PCIE_DCAP2_TPH_COMP        __BITS(13, 12) /* TPH Completer Supported */
1001
#define PCIE_DCAP2_OBFF                __BITS(19, 18) /* OBPF */
1002
#define PCIE_DCAP2_EXTFMT_FLD        __BIT(20)      /* Extended Fmt Field Support */
1003
#define PCIE_DCAP2_EETLP_PREF        __BIT(21)      /* End-End TLP Prefix Support */
1004
#define PCIE_DCAP2_MAX_EETLP        __BITS(23, 22) /* Max End-End TLP Prefix Sup */
1005
#define PCIE_DCSR2        0x28        /* Device Control & Status 2 Register */
1006
#define PCIE_DCSR2_COMPT_VAL        __BITS(3, 0)   /* Completion Timeout Value */
1007
#define PCIE_DCSR2_COMPT_DIS        __BIT(4)       /* Completion Timeout Disable */
1008
#define PCIE_DCSR2_ARI_FWD        __BIT(5)       /* ARI Forwarding Enable */
1009
#define PCIE_DCSR2_ATOM_REQ        __BIT(6)       /* AtomicOp Requester Enable */
1010
#define PCIE_DCSR2_ATOM_EBLK        __BIT(7)       /* AtomicOp Egress Blocking */
1011
#define PCIE_DCSR2_IDO_REQ        __BIT(8)       /* IDO Request Enable */
1012
#define PCIE_DCSR2_IDO_COMP        __BIT(9)       /* IDO Completion Enable */
1013
#define PCIE_DCSR2_LTR_MEC        __BIT(10)      /* LTR Mechanism Enable */
1014
#define PCIE_DCSR2_OBFF_EN        __BITS(14, 13) /* OBPF Enable */
1015
#define PCIE_DCSR2_EETLP        __BIT(15)      /* End-End TLP Prefix Blcking */
1016
#define PCIE_LCAP2        0x2c        /* Link Capabilities 2 Register */
1017
#define PCIE_LCAP2_SUP_LNKSV        __BITS(7, 1)   /* Supported Link Speeds Vect */
1018
#define PCIE_LCAP2_CROSSLNK        __BIT(8)       /* Crosslink Supported */
1019
#define PCIE_LCSR2        0x30        /* Link Control & Status 2 Register */
1020
#define PCIE_LCSR2_TGT_LSPEED        __BITS(3, 0)   /* Target Link Speed */
1021
#define PCIE_LCSR2_ENT_COMPL        __BIT(4)       /* Enter Compliance */
1022
#define PCIE_LCSR2_HW_AS_DIS        __BIT(5)       /* HW Autonomous Speed Disabl */
1023
#define PCIE_LCSR2_SEL_DEEMP        __BIT(6)       /* Selectable De-emphasis */
1024
#define PCIE_LCSR2_TX_MARGIN        __BITS(9, 7)   /* Transmit Margin */
1025
#define PCIE_LCSR2_EN_MCOMP        __BIT(10)      /* Enter Modified Compliance */
1026
#define PCIE_LCSR2_COMP_SOS        __BIT(11)      /* Compliance SOS */
1027
#define PCIE_LCSR2_COMP_DEEMP        __BITS(15, 12) /* Compliance Present/De-emph */
1028
#define PCIE_LCSR2_DEEMP_LVL        __BIT(0 + 16)  /* Current De-emphasis Level */
1029
#define PCIE_LCSR2_EQ_COMPL        __BIT(1 + 16)  /* Equalization Complete */
1030
#define PCIE_LCSR2_EQP1_SUC        __BIT(2 + 16)  /* Equaliz Phase 1 Successful */
1031
#define PCIE_LCSR2_EQP2_SUC        __BIT(3 + 16)  /* Equaliz Phase 2 Successful */
1032
#define PCIE_LCSR2_EQP3_SUC        __BIT(4 + 16)  /* Equaliz Phase 3 Successful */
1033
#define PCIE_LCSR2_LNKEQ_REQ        __BIT(5 + 16)  /* Link Equalization Request */
1034
1035
#define PCIE_SLCAP2        0x34        /* Slot Capabilities 2 Register */
1036
#define PCIE_SLCSR2        0x38        /* Slot Control & Status 2 Register */
1037
1038
/*
1039
 * Capability ID: 0x11
1040
 * MSIX
1041
 */
1042
1043
#define PCI_MSIX_CTL        0x00
1044
#define        PCI_MSIX_CTL_ENABLE        0x80000000
1045
#define        PCI_MSIX_CTL_FUNCMASK        0x40000000
1046
#define        PCI_MSIX_CTL_TBLSIZE_MASK 0x07ff0000
1047
#define        PCI_MSIX_CTL_TBLSIZE_SHIFT 16
1048
#define        PCI_MSIX_CTL_TBLSIZE(ofs)        ((((ofs) & PCI_MSIX_CTL_TBLSIZE_MASK) \
1049
                >> PCI_MSIX_CTL_TBLSIZE_SHIFT) + 1)
1050
/*
1051
 * 2nd DWORD is the Table Offset
1052
 */
1053
#define        PCI_MSIX_TBLOFFSET        0x04
1054
#define        PCI_MSIX_TBLOFFSET_MASK        0xfffffff8
1055
#define        PCI_MSIX_TBLBIR_MASK        0x00000007
1056
/*
1057
 * 3rd DWORD is the Pending Bitmap Array Offset
1058
 */
1059
#define        PCI_MSIX_PBAOFFSET        0x08
1060
#define        PCI_MSIX_PBAOFFSET_MASK        0xfffffff8
1061
#define        PCI_MSIX_PBABIR_MASK        0x00000007
1062
1063
#define PCI_MSIX_TABLE_ENTRY_SIZE        16
1064
#define PCI_MSIX_TABLE_ENTRY_ADDR_LO        0x0
1065
#define PCI_MSIX_TABLE_ENTRY_ADDR_HI        0x4
1066
#define PCI_MSIX_TABLE_ENTRY_DATA        0x8
1067
#define PCI_MSIX_TABLE_ENTRY_VECTCTL        0xc
1068
struct pci_msix_table_entry {
1069
        uint32_t pci_msix_addr_lo;
1070
        uint32_t pci_msix_addr_hi;
1071
        uint32_t pci_msix_value;
1072
        uint32_t pci_msix_vector_control;
1073
};
1074
#define        PCI_MSIX_VECTCTL_HWMASK_MASK        0x00000001
1075
1076
 /* Max number of MSI-X vectors. See PCI-SIG specification. */
1077
#define        PCI_MSIX_MAX_VECTORS                2048
1078
1079
/*
1080
 * Capability ID: 0x12
1081
 * SATA
1082
 */
1083
1084
/*
1085
 * Capability ID: 0x13
1086
 * Advanced Feature
1087
 */
1088
#define PCI_AFCAPR                0x00        /* Capabilities */
1089
#define        PCI_AFCAPR_MASK                __BITS(31, 24)
1090
#define        PCI_AF_TP_CAP                __BIT(24)        /* Transaction Pending */
1091
#define        PCI_AF_FLR_CAP                __BIT(25)        /* Function Level Reset */
1092
#define PCI_AFCSR                0x04        /* Control & Status register */
1093
#define PCI_AFCR_INITIATE_FLR        __BIT(0)        /* Initiate Function LVL RST */
1094
#define PCI_AFSR_TP                __BIT(8)        /* Transaction Pending */
1095
1096
1097
/*
1098
 * Interrupt Configuration Register; contains interrupt pin and line.
1099
 */
1100
#define        PCI_INTERRUPT_REG                0x3c
1101
1102
typedef u_int8_t pci_intr_latency_t;
1103
typedef u_int8_t pci_intr_grant_t;
1104
typedef u_int8_t pci_intr_pin_t;
1105
typedef u_int8_t pci_intr_line_t;
1106
1107
#define PCI_MAX_LAT_SHIFT                        24
1108
#define        PCI_MAX_LAT_MASK                        0xff
1109
#define        PCI_MAX_LAT(icr) \
1110
            (((icr) >> PCI_MAX_LAT_SHIFT) & PCI_MAX_LAT_MASK)
1111
1112
#define PCI_MIN_GNT_SHIFT                        16
1113
#define        PCI_MIN_GNT_MASK                        0xff
1114
#define        PCI_MIN_GNT(icr) \
1115
            (((icr) >> PCI_MIN_GNT_SHIFT) & PCI_MIN_GNT_MASK)
1116
1117
#define        PCI_INTERRUPT_GRANT_SHIFT                24
1118
#define        PCI_INTERRUPT_GRANT_MASK                0xff
1119
#define        PCI_INTERRUPT_GRANT(icr) \
1120
            (((icr) >> PCI_INTERRUPT_GRANT_SHIFT) & PCI_INTERRUPT_GRANT_MASK)
1121
1122
#define        PCI_INTERRUPT_LATENCY_SHIFT                16
1123
#define        PCI_INTERRUPT_LATENCY_MASK                0xff
1124
#define        PCI_INTERRUPT_LATENCY(icr) \
1125
            (((icr) >> PCI_INTERRUPT_LATENCY_SHIFT) & PCI_INTERRUPT_LATENCY_MASK)
1126
1127
#define        PCI_INTERRUPT_PIN_SHIFT                        8
1128
#define        PCI_INTERRUPT_PIN_MASK                        0xff
1129
#define        PCI_INTERRUPT_PIN(icr) \
1130
            (((icr) >> PCI_INTERRUPT_PIN_SHIFT) & PCI_INTERRUPT_PIN_MASK)
1131
1132
#define        PCI_INTERRUPT_LINE_SHIFT                0
1133
#define        PCI_INTERRUPT_LINE_MASK                        0xff
1134
#define        PCI_INTERRUPT_LINE(icr) \
1135
            (((icr) >> PCI_INTERRUPT_LINE_SHIFT) & PCI_INTERRUPT_LINE_MASK)
1136
1137
#define PCI_INTERRUPT_CODE(lat,gnt,pin,line)                \
1138
          ((((lat)&PCI_INTERRUPT_LATENCY_MASK)<<PCI_INTERRUPT_LATENCY_SHIFT)| \
1139
           (((gnt)&PCI_INTERRUPT_GRANT_MASK)  <<PCI_INTERRUPT_GRANT_SHIFT)  | \
1140
           (((pin)&PCI_INTERRUPT_PIN_MASK)    <<PCI_INTERRUPT_PIN_SHIFT)    | \
1141
           (((line)&PCI_INTERRUPT_LINE_MASK)  <<PCI_INTERRUPT_LINE_SHIFT))
1142
1143
#define        PCI_INTERRUPT_PIN_NONE                        0x00
1144
#define        PCI_INTERRUPT_PIN_A                        0x01
1145
#define        PCI_INTERRUPT_PIN_B                        0x02
1146
#define        PCI_INTERRUPT_PIN_C                        0x03
1147
#define        PCI_INTERRUPT_PIN_D                        0x04
1148
#define        PCI_INTERRUPT_PIN_MAX                        0x04
1149
1150
/* Header Type 1 (Bridge) configuration registers */
1151
#define PCI_BRIDGE_BUS_REG                0x18
1152
#define   PCI_BRIDGE_BUS_EACH_MASK                0xff
1153
#define   PCI_BRIDGE_BUS_PRIMARY_SHIFT                0
1154
#define   PCI_BRIDGE_BUS_SECONDARY_SHIFT        8
1155
#define   PCI_BRIDGE_BUS_SUBORDINATE_SHIFT        16
1156
#define   PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT        24
1157
#define   PCI_BRIDGE_BUS_PRIMARY(reg) \
1158
        (((reg) >> PCI_BRIDGE_BUS_PRIMARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK)
1159
#define   PCI_BRIDGE_BUS_SECONDARY(reg) \
1160
        (((reg) >> PCI_BRIDGE_BUS_SECONDARY_SHIFT) & PCI_BRIDGE_BUS_EACH_MASK)
1161
#define   PCI_BRIDGE_BUS_SUBORDINATE(reg) \
1162
        (((reg) >> PCI_BRIDGE_BUS_SUBORDINATE_SHIFT) &PCI_BRIDGE_BUS_EACH_MASK)
1163
#define   PCI_BRIDGE_BUS_SEC_LATTIMER(reg) \
1164
        (((reg) >> PCI_BRIDGE_BUS_SEC_LATTIMER_SHIFT)&PCI_BRIDGE_BUS_EACH_MASK)
1165
1166
1167
#define PCI_BRIDGE_STATIO_REG                0x1C
1168
#define          PCI_BRIDGE_STATIO_IOBASE_SHIFT        0
1169
#define          PCI_BRIDGE_STATIO_IOLIMIT_SHIFT        8
1170
#define          PCI_BRIDGE_STATIO_STATUS_SHIFT        16
1171
#define          PCI_BRIDGE_STATIO_IOBASE_MASK                0xf0
1172
#define          PCI_BRIDGE_STATIO_IOLIMIT_MASK        0xf0
1173
#define          PCI_BRIDGE_STATIO_STATUS_MASK                0xffff
1174
#define          PCI_BRIDGE_IO_32BITS(reg)                (((reg) & 0xf) == 1)
1175
1176
#define PCI_BRIDGE_MEMORY_REG                0x20
1177
#define          PCI_BRIDGE_MEMORY_BASE_SHIFT                4
1178
#define          PCI_BRIDGE_MEMORY_LIMIT_SHIFT                20
1179
#define          PCI_BRIDGE_MEMORY_BASE_MASK                0x0fff
1180
#define          PCI_BRIDGE_MEMORY_LIMIT_MASK                0x0fff
1181
1182
#define PCI_BRIDGE_PREFETCHMEM_REG        0x24
1183
#define          PCI_BRIDGE_PREFETCHMEM_BASE_SHIFT        4
1184
#define          PCI_BRIDGE_PREFETCHMEM_LIMIT_SHIFT        20
1185
#define          PCI_BRIDGE_PREFETCHMEM_BASE_MASK        0x0fff
1186
#define          PCI_BRIDGE_PREFETCHMEM_LIMIT_MASK        0x0fff
1187
#define          PCI_BRIDGE_PREFETCHMEM_64BITS(reg)        ((reg) & 0xf)
1188
1189
#define PCI_BRIDGE_PREFETCHBASE32_REG        0x28
1190
#define PCI_BRIDGE_PREFETCHLIMIT32_REG        0x2C
1191
1192
#define PCI_BRIDGE_IOHIGH_REG                0x30
1193
#define          PCI_BRIDGE_IOHIGH_BASE_SHIFT                0
1194
#define          PCI_BRIDGE_IOHIGH_LIMIT_SHIFT                16
1195
#define          PCI_BRIDGE_IOHIGH_BASE_MASK                0xffff
1196
#define          PCI_BRIDGE_IOHIGH_LIMIT_MASK                0xffff
1197
1198
#define PCI_BRIDGE_CONTROL_REG                0x3C
1199
#define          PCI_BRIDGE_CONTROL_SHIFT                16
1200
#define          PCI_BRIDGE_CONTROL_MASK                0xffff
1201
#define   PCI_BRIDGE_CONTROL_PERE                (1 <<  0)
1202
#define   PCI_BRIDGE_CONTROL_SERR                (1 <<  1)
1203
#define   PCI_BRIDGE_CONTROL_ISA                (1 <<  2)
1204
#define   PCI_BRIDGE_CONTROL_VGA                (1 <<  3)
1205
/* Reserved                                        (1 <<  4) */
1206
#define   PCI_BRIDGE_CONTROL_MABRT                (1 <<  5)
1207
#define   PCI_BRIDGE_CONTROL_SECBR                (1 <<  6)
1208
#define   PCI_BRIDGE_CONTROL_SECFASTB2B                (1 <<  7)
1209
#define   PCI_BRIDGE_CONTROL_PRI_DISC_TIMER        (1 <<  8)
1210
#define   PCI_BRIDGE_CONTROL_SEC_DISC_TIMER        (1 <<  9)
1211
#define   PCI_BRIDGE_CONTROL_DISC_TIMER_STAT        (1 << 10)
1212
#define   PCI_BRIDGE_CONTROL_DISC_TIMER_SERR        (1 << 11)
1213
/* Reserved                                        (1 << 12) - (1 << 15) */
1214
1215
/*
1216
 * Vital Product Data resource tags.
1217
 */
1218
struct pci_vpd_smallres {
1219
        uint8_t                vpdres_byte0;                /* length of data + tag */
1220
        /* Actual data. */
1221
} __packed;
1222
1223
struct pci_vpd_largeres {
1224
        uint8_t                vpdres_byte0;
1225
        uint8_t                vpdres_len_lsb;                /* length of data only */
1226
        uint8_t                vpdres_len_msb;
1227
        /* Actual data. */
1228
} __packed;
1229
1230
#define        PCI_VPDRES_ISLARGE(x)                        ((x) & 0x80)
1231
1232
#define        PCI_VPDRES_SMALL_LENGTH(x)                ((x) & 0x7)
1233
#define        PCI_VPDRES_SMALL_NAME(x)                (((x) >> 3) & 0xf)
1234
1235
#define        PCI_VPDRES_LARGE_NAME(x)                ((x) & 0x7f)
1236
1237
#define        PCI_VPDRES_TYPE_COMPATIBLE_DEVICE_ID        0x3        /* small */
1238
#define        PCI_VPDRES_TYPE_VENDOR_DEFINED                0xe        /* small */
1239
#define        PCI_VPDRES_TYPE_END_TAG                        0xf        /* small */
1240
1241
#define        PCI_VPDRES_TYPE_IDENTIFIER_STRING        0x02        /* large */
1242
#define        PCI_VPDRES_TYPE_VPD                        0x10        /* large */
1243
1244
struct pci_vpd {
1245
        uint8_t                vpd_key0;
1246
        uint8_t                vpd_key1;
1247
        uint8_t                vpd_len;                /* length of data only */
1248
        /* Actual data. */
1249
} __packed;
1250
1251
/*
1252
 * Recommended VPD fields:
1253
 *
1254
 *        PN                Part number of assembly
1255
 *        FN                FRU part number
1256
 *        EC                EC level of assembly
1257
 *        MN                Manufacture ID
1258
 *        SN                Serial Number
1259
 *
1260
 * Conditionally recommended VPD fields:
1261
 *
1262
 *        LI                Load ID
1263
 *        RL                ROM Level
1264
 *        RM                Alterable ROM Level
1265
 *        NA                Network Address
1266
 *        DD                Device Driver Level
1267
 *        DG                Diagnostic Level
1268
 *        LL                Loadable Microcode Level
1269
 *        VI                Vendor ID/Device ID
1270
 *        FU                Function Number
1271
 *        SI                Subsystem Vendor ID/Subsystem ID
1272
 *
1273
 * Additional VPD fields:
1274
 *
1275
 *        Z0-ZZ                User/Product Specific
1276
 */
1277
1278
/*
1279
 * PCI Expansion Rom
1280
 */
1281
1282
struct pci_rom_header {
1283
        uint16_t                romh_magic;        /* 0xAA55 little endian */
1284
        uint8_t                        romh_reserved[22];
1285
        uint16_t                romh_data_ptr;        /* pointer to pci_rom struct */
1286
} __packed;
1287
1288
#define        PCI_ROM_HEADER_MAGIC        0xAA55                /* little endian */
1289
1290
struct pci_rom {
1291
        uint32_t                rom_signature;
1292
        pci_vendor_id_t                rom_vendor;
1293
        pci_product_id_t        rom_product;
1294
        uint16_t                rom_vpd_ptr;        /* reserved in PCI 2.2 */
1295
        uint16_t                rom_data_len;
1296
        uint8_t                        rom_data_rev;
1297
        pci_interface_t                rom_interface;        /* the class reg is 24-bits */
1298
        pci_subclass_t                rom_subclass;        /* in little endian */
1299
        pci_class_t                rom_class;
1300
        uint16_t                rom_len;        /* code length / 512 byte */
1301
        uint16_t                rom_rev;        /* code revision level */
1302
        uint8_t                        rom_code_type;        /* type of code */
1303
        uint8_t                        rom_indicator;
1304
        uint16_t                rom_reserved;
1305
        /* Actual data. */
1306
} __packed;
1307
1308
#define        PCI_ROM_SIGNATURE        0x52494350        /* "PCIR", endian reversed */
1309
#define        PCI_ROM_CODE_TYPE_X86        0                /* Intel x86 BIOS */
1310
#define        PCI_ROM_CODE_TYPE_OFW        1                /* Open Firmware */
1311
#define        PCI_ROM_CODE_TYPE_HPPA        2                /* HP PA/RISC */
1312
#define        PCI_ROM_CODE_TYPE_EFI        3                /* EFI Image */
1313
1314
#define        PCI_ROM_INDICATOR_LAST        0x80
1315
1316
/*
1317
 * Threshold below which 32bit PCI DMA needs bouncing.
1318
 */
1319
#define PCI32_DMA_BOUNCE_THRESHOLD        0x100000000ULL
1320
1321
/*
1322
 * PCI-X 2.0/ PCI-express Extended Capability List
1323
 */
1324
1325
#define        PCI_EXTCAPLIST_BASE                0x100
1326
1327
#define        PCI_EXTCAPLIST_CAP(ecr)                ((ecr) & 0xffff)
1328
#define        PCI_EXTCAPLIST_VERSION(ecr)        (((ecr) >> 16) & 0xf)
1329
#define        PCI_EXTCAPLIST_NEXT(ecr)        (((ecr) >> 20) & 0xfff)
1330
1331
/* Extended Capability Identification Numbers */
1332
1333
#define        PCI_EXTCAP_AER                0x0001        /* Advanced Error Reporting */
1334
#define        PCI_EXTCAP_VC                0x0002        /* Virtual Channel if MFVC Ext Cap not set */
1335
#define        PCI_EXTCAP_SERNUM        0x0003        /* Device Serial Number */
1336
#define        PCI_EXTCAP_PWRBDGT        0x0004        /* Power Budgeting */
1337
#define        PCI_EXTCAP_RCLINK_DCL        0x0005        /* Root Complex Link Declaration */
1338
#define        PCI_EXTCAP_RCLINK_CTL        0x0006        /* Root Complex Internal Link Control */
1339
#define        PCI_EXTCAP_RCEC_ASSOC        0x0007        /* Root Complex Event Collector Association */
1340
#define        PCI_EXTCAP_MFVC                0x0008        /* Multi-Function Virtual Channel */
1341
#define        PCI_EXTCAP_VC2                0x0009        /* Virtual Channel if MFVC Ext Cap set */
1342
#define        PCI_EXTCAP_RCRB                0x000a        /* RCRB Header */
1343
#define        PCI_EXTCAP_VENDOR        0x000b        /* Vendor Unique */
1344
#define        PCI_EXTCAP_CAC                0x000c        /* Configuration Access Correction -- obsolete */
1345
#define        PCI_EXTCAP_ACS                0x000d        /* Access Control Services */
1346
#define        PCI_EXTCAP_ARI                0x000e        /* Alternative Routing-ID Interpretation */
1347
#define        PCI_EXTCAP_ATS                0x000f        /* Address Translation Services */
1348
#define        PCI_EXTCAP_SRIOV        0x0010        /* Single Root IO Virtualization */
1349
#define        PCI_EXTCAP_MRIOV        0x0011        /* Multiple Root IO Virtualization */
1350
#define        PCI_EXTCAP_MULTICAST        0x0012        /* Multicast */
1351
#define        PCI_EXTCAP_PAGE_REQ        0x0013        /* Page Request */
1352
#define        PCI_EXTCAP_AMD                0x0014        /* Reserved for AMD */
1353
#define        PCI_EXTCAP_RESIZE_BAR        0x0015        /* Resizable BAR */
1354
#define        PCI_EXTCAP_DPA                0x0016        /* Dynamic Power Allocation */
1355
#define        PCI_EXTCAP_TPH_REQ        0x0017        /* TPH Requester */
1356
#define        PCI_EXTCAP_LTR                0x0018        /* Latency Tolerance Reporting */
1357
#define        PCI_EXTCAP_SEC_PCIE        0x0019        /* Secondary PCI Express */
1358
#define        PCI_EXTCAP_PMUX                0x001a        /* Protocol Multiplexing */
1359
#define        PCI_EXTCAP_PASID        0x001b        /* Process Address Space ID */
1360
#define        PCI_EXTCAP_LN_REQ        0x001c        /* LN Requester */
1361
#define        PCI_EXTCAP_DPC                0x001d        /* Downstream Port Containment */
1362
#define        PCI_EXTCAP_L1PM                0x001e        /* L1 PM Substates */
1363
#define        PCI_EXTCAP_PTM                0x001f        /* Precision Time Management */
1364
#define        PCI_EXTCAP_MPCIE        0x0020        /* M-PCIe */
1365
#define        PCI_EXTCAP_FRSQ                0x0021        /* Function Reading Status Queueing */
1366
#define        PCI_EXTCAP_RTR                0x0022        /* Readiness Time Reporting */
1367
#define        PCI_EXTCAP_DESIGVNDSP        0x0023        /* Designated Vendor-Specific */
1368
1369
/*
1370
 * Extended capability ID: 0x0001
1371
 * Advanced Error Reporting
1372
 */
1373
#define        PCI_AER_UC_STATUS        0x04        /* Uncorrectable Error Status Register */
1374
#define          PCI_AER_UC_UNDEFINED                        __BIT(0)
1375
#define          PCI_AER_UC_DL_PROTOCOL_ERROR                __BIT(4)
1376
#define          PCI_AER_UC_SURPRISE_DOWN_ERROR        __BIT(5)
1377
#define          PCI_AER_UC_POISONED_TLP                __BIT(12)
1378
#define          PCI_AER_UC_FC_PROTOCOL_ERROR                __BIT(13)
1379
#define          PCI_AER_UC_COMPLETION_TIMEOUT                __BIT(14)
1380
#define          PCI_AER_UC_COMPLETER_ABORT                __BIT(15)
1381
#define          PCI_AER_UC_UNEXPECTED_COMPLETION        __BIT(16)
1382
#define          PCI_AER_UC_RECEIVER_OVERFLOW                __BIT(17)
1383
#define          PCI_AER_UC_MALFORMED_TLP                __BIT(18)
1384
#define          PCI_AER_UC_ECRC_ERROR                        __BIT(19)
1385
#define          PCI_AER_UC_UNSUPPORTED_REQUEST_ERROR        __BIT(20)
1386
#define          PCI_AER_UC_ACS_VIOLATION                __BIT(21)
1387
#define          PCI_AER_UC_INTERNAL_ERROR                __BIT(22)
1388
#define          PCI_AER_UC_MC_BLOCKED_TLP                __BIT(23)
1389
#define          PCI_AER_UC_ATOMIC_OP_EGRESS_BLOCKED        __BIT(24)
1390
#define          PCI_AER_UC_TLP_PREFIX_BLOCKED_ERROR        __BIT(25)
1391
#define        PCI_AER_UC_MASK                0x08        /* Uncorrectable Error Mask Register */
1392
          /* Shares bits with UC_STATUS */
1393
#define        PCI_AER_UC_SEVERITY        0x0c        /* Uncorrectable Error Severity Register */
1394
          /* Shares bits with UC_STATUS */
1395
#define        PCI_AER_COR_STATUS        0x10        /* Correctable Error Status Register */
1396
#define          PCI_AER_COR_RECEIVER_ERROR                __BIT(0)
1397
#define          PCI_AER_COR_BAD_TLP                        __BIT(6)
1398
#define          PCI_AER_COR_BAD_DLLP                        __BIT(7)
1399
#define          PCI_AER_COR_REPLAY_NUM_ROLLOVER        __BIT(8)
1400
#define          PCI_AER_COR_REPLAY_TIMER_TIMEOUT        __BIT(12)
1401
#define          PCI_AER_COR_ADVISORY_NF_ERROR                __BIT(13)
1402
#define          PCI_AER_COR_INTERNAL_ERROR                __BIT(14)
1403
#define          PCI_AER_COR_HEADER_LOG_OVERFLOW        __BIT(15)
1404
#define        PCI_AER_COR_MASK        0x14        /* Correctable Error Mask Register */
1405
          /* Shares bits with COR_STATUS */
1406
#define        PCI_AER_CAP_CONTROL        0x18        /* Advanced Error Capabilities and Control Register */
1407
#define          PCI_AER_FIRST_ERROR_PTR                __BITS(4, 0)
1408
#define          PCI_AER_FIRST_ERROR_PTR_S                0
1409
#define          PCI_AER_FIRST_ERROR_PTR_M                0x1f
1410
#define          PCI_AER_ECRC_GEN_CAPABLE                __BIT(5)
1411
#define          PCI_AER_ECRC_GEN_ENABLE                __BIT(6)
1412
#define          PCI_AER_ECRC_CHECK_CAPABLE                __BIT(7)
1413
#define          PCI_AER_ECRC_CHECK_ENABLE                __BIT(8)
1414
#define          PCI_AER_MULT_HDR_CAPABLE                __BIT(9)
1415
#define          PCI_AER_MULT_HDR_ENABLE                __BIT(10)
1416
#define          PCI_AER_TLP_PREFIX_LOG_PRESENT        __BIT(11)
1417
#define        PCI_AER_HEADER_LOG        0x1c        /* Header Log Register */
1418
#define        PCI_AER_ROOTERR_CMD        0x2c        /* Root Error Command Register */
1419
                                        /* Only for root complex ports */
1420
#define          PCI_AER_ROOTERR_COR_ENABLE                __BIT(0)
1421
#define          PCI_AER_ROOTERR_NF_ENABLE                __BIT(1)
1422
#define          PCI_AER_ROOTERR_F_ENABLE                __BIT(2)
1423
#define        PCI_AER_ROOTERR_STATUS        0x30        /* Root Error Status Register */
1424
                                        /* Only for root complex ports */
1425
#define          PCI_AER_ROOTERR_COR_ERR                __BIT(0)
1426
#define          PCI_AER_ROOTERR_MULTI_COR_ERR                __BIT(1)
1427
#define          PCI_AER_ROOTERR_UC_ERR                __BIT(2)
1428
#define          PCI_AER_ROOTERR_MULTI_UC_ERR                __BIT(3)
1429
#define          PCI_AER_ROOTERR_FIRST_UC_FATAL        __BIT(4)
1430
#define          PCI_AER_ROOTERR_NF_ERR                __BIT(5)
1431
#define          PCI_AER_ROOTERR_F_ERR                        __BIT(6)
1432
#define          PCI_AER_ROOTERR_INT_MESSAGE                __BITS(31, 27)
1433
#define          PCI_AER_ROOTERR_INT_MESSAGE_S                27
1434
#define          PCI_AER_ROOTERR_INT_MESSAGE_M                0x1f
1435
#define        PCI_AER_ERRSRC_ID        0x34        /* Error Source Identification Register */
1436
#define          PCI_AER_ERRSRC_ID_ERR_COR                __BITS(15, 0)
1437
#define          PCI_AER_ERRSRC_ID_ERR_COR_S                0
1438
#define          PCI_AER_ERRSRC_ID_ERR_COR_M                0xffff
1439
#define          PCI_AER_ERRSRC_ID_ERR_UC                __BITS(31, 16)
1440
#define          PCI_AER_ERRSRC_ID_ERR_UC_S                16
1441
#define          PCI_AER_ERRSRC_ID_ERR_UC_M                0xffff
1442
                                        /* Only for root complex ports */
1443
#define        PCI_AER_TLP_PREFIX_LOG        0x38        /*TLP Prefix Log Register */
1444
                                        /* Only for TLP prefix functions */
1445
1446
/*
1447
 * Extended capability ID: 0x0002, 0x0009
1448
 * Virtual Channel
1449
 */
1450
#define        PCI_VC_CAP1                0x04        /* Port VC Capability Register 1 */
1451
#define          PCI_VC_CAP1_EXT_COUNT                        __BITS(2, 0)
1452
#define          PCI_VC_CAP1_EXT_COUNT_S                0
1453
#define          PCI_VC_CAP1_EXT_COUNT_M                0x7
1454
#define          PCI_VC_CAP1_LOWPRI_EXT_COUNT                __BITS(6, 4)
1455
#define          PCI_VC_CAP1_LOWPRI_EXT_COUNT_S        4
1456
#define          PCI_VC_CAP1_LOWPRI_EXT_COUNT_M        0x7
1457
#define          PCI_VC_CAP1_REFCLK                        __BITS(9, 8)
1458
#define          PCI_VC_CAP1_REFCLK_S                        8
1459
#define          PCI_VC_CAP1_REFCLK_M                        0x3
1460
#define          PCI_VC_CAP1_REFCLK_100NS                0x0
1461
#define          PCI_VC_CAP1_PORT_ARB_TABLE_SIZE        __BITS(11, 10)
1462
#define          PCI_VC_CAP1_PORT_ARB_TABLE_SIZE_S        10
1463
#define          PCI_VC_CAP1_PORT_ARB_TABLE_SIZE_M        0x3
1464
#define        PCI_VC_CAP2                0x08        /* Port VC Capability Register 2 */
1465
#define          PCI_VC_CAP2_ARB_CAP_HW_FIXED_SCHEME        __BIT(0)
1466
#define          PCI_VC_CAP2_ARB_CAP_WRR_32                __BIT(1)
1467
#define          PCI_VC_CAP2_ARB_CAP_WRR_64                __BIT(2)
1468
#define          PCI_VC_CAP2_ARB_CAP_WRR_128                __BIT(3)
1469
#define          PCI_VC_CAP2_ARB_TABLE_OFFSET                __BITS(31, 24)
1470
#define          PCI_VC_CAP2_ARB_TABLE_OFFSET_S        24
1471
#define          PCI_VC_CAP2_ARB_TABLE_OFFSET_M        0xff
1472
#define        PCI_VC_CONTROL                0x0c        /* Port VC Control Register (16bit) */
1473
#define          PCI_VC_CONTROL_LOAD_VC_ARB_TABLE        __BIT(0)
1474
#define          PCI_VC_CONTROL_VC_ARB_SELECT                __BITS(3, 1)
1475
#define          PCI_VC_CONTROL_VC_ARB_SELECT_S        1
1476
#define          PCI_VC_CONTROL_VC_ARB_SELECT_M        0x7
1477
#define        PCI_VC_STATUS                0x0e        /* Port VC Status Register (16bit) */
1478
#define          PCI_VC_STATUS_LOAD_VC_ARB_TABLE        __BIT(0)
1479
#define        PCI_VC_RESOURCE_CAP(n)        (0x10 + ((n) * 0x0c))        /* VC Resource Capability Register */
1480
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_HW_FIXED_SCHEME __BIT(0)
1481
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_WRR_32          __BIT(1)
1482
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_WRR_64          __BIT(2)
1483
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_WRR_128         __BIT(3)
1484
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_TWRR_128        __BIT(4)
1485
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_CAP_WRR_256         __BIT(5)
1486
#define          PCI_VC_RESOURCE_CAP_ADV_PKT_SWITCH        __BIT(14)
1487
#define          PCI_VC_RESOURCE_CAP_REJCT_SNOOP_TRANS        __BIT(15)
1488
#define          PCI_VC_RESOURCE_CAP_MAX_TIME_SLOTS        __BITS(22, 16)
1489
#define          PCI_VC_RESOURCE_CAP_MAX_TIME_SLOTS_S        16
1490
#define          PCI_VC_RESOURCE_CAP_MAX_TIME_SLOTS_M        0x7f
1491
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_TABLE_OFFSET   __BITS(31, 24)
1492
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_TABLE_OFFSET_S 24
1493
#define          PCI_VC_RESOURCE_CAP_PORT_ARB_TABLE_OFFSET_M 0xff
1494
#define        PCI_VC_RESOURCE_CTL(n)        (0x14 + ((n) * 0x0c))        /* VC Resource Control Register */
1495
#define          PCI_VC_RESOURCE_CTL_TCVC_MAP                __BITS(7, 0)
1496
#define          PCI_VC_RESOURCE_CTL_TCVC_MAP_S        0
1497
#define          PCI_VC_RESOURCE_CTL_TCVC_MAP_M        0xff
1498
#define          PCI_VC_RESOURCE_CTL_LOAD_PORT_ARB_TABLE __BIT(16)
1499
#define          PCI_VC_RESOURCE_CTL_PORT_ARB_SELECT        __BITS(19, 17)
1500
#define          PCI_VC_RESOURCE_CTL_PORT_ARB_SELECT_S        17
1501
#define          PCI_VC_RESOURCE_CTL_PORT_ARB_SELECT_M        0x7
1502
#define          PCI_VC_RESOURCE_CTL_VC_ID                __BITS(26, 24)
1503
#define          PCI_VC_RESOURCE_CTL_VC_ID_S                24
1504
#define          PCI_VC_RESOURCE_CTL_VC_ID_M                0x7
1505
#define          PCI_VC_RESOURCE_CTL_VC_ENABLE                __BIT(31)
1506
#define        PCI_VC_RESOURCE_STA(n)        (0x18 + ((n) * 0x0c))        /* VC Resource Status Register */
1507
#define          PCI_VC_RESOURCE_STA_PORT_ARB_TABLE        __BIT(0)
1508
#define          PCI_VC_RESOURCE_STA_VC_NEG_PENDING        __BIT(1)
1509
1510
/*
1511
 * Extended capability ID: 0x0003
1512
 * Serial Number
1513
 */
1514
#define        PCI_SERIAL_LOW                0x04
1515
#define        PCI_SERIAL_HIGH                0x08
1516
1517
/*
1518
 * Extended capability ID: 0x0004
1519
 * Power Budgeting
1520
 */
1521
#define        PCI_PWRBDGT_DSEL        0x04        /* Data Select */
1522
#define        PCI_PWRBDGT_DATA        0x08        /* Data */
1523
#define        PCI_PWRBDGT_DATA_BASEPWR        __BITS(7, 0)        /* Base Power */
1524
#define        PCI_PWRBDGT_DATA_SCALE                __BITS(9, 8)        /* Data Scale */
1525
#define        PCI_PWRBDGT_PM_SUBSTAT                __BITS(12, 10)        /* PM Sub State */
1526
#define        PCI_PWRBDGT_PM_STAT                __BITS(14, 13)        /* PM State */
1527
#define        PCI_PWRBDGT_TYPE                __BITS(17, 15)        /* Type */
1528
#define        PCI_PWRBDGT_PWRRAIL                __BITS(20, 18)        /* Power Rail */
1529
#define        PCI_PWRBDGT_CAP                0x0c        /* Capability */
1530
#define        PCI_PWRBDGT_CAP_SYSALLOC        __BIT(0)        /* System Allocated */
1531
1532
/*
1533
 * Extended capability ID: 0x0005
1534
 * Root Complex Link Declaration
1535
 */
1536
#define        PCI_RCLINK_DCL_ESDESC        0x04        /* Element Self Description */
1537
#define        PCI_RCLINK_DCL_ESDESC_ELMTYPE __BITS(3, 0)        /* Element Type */
1538
#define        PCI_RCLINK_DCL_ESDESC_NUMLINKENT __BITS(15, 8) /* Num of Link Entries*/
1539
#define        PCI_RCLINK_DCL_ESDESC_COMPID  __BITS(23, 16)        /* Component ID */
1540
#define        PCI_RCLINK_DCL_ESDESC_PORTNUM __BITS(31, 24)        /* Port Number */
1541
#define        PCI_RCLINK_DCL_LINKENTS        0x10        /* Link Entries */
1542
#define        PCI_RCLINK_DCL_LINKDESC(x)        /* Link Description */        \
1543
        (PCI_RCLINK_DCL_LINKENTS + ((x) * 16))
1544
#define        PCI_RCLINK_DCL_LINKDESC_LVALID        __BIT(0)        /* Link Valid */
1545
#define        PCI_RCLINK_DCL_LINKDESC_LTYPE        __BIT(1)        /* Link Type */
1546
#define        PCI_RCLINK_DCL_LINKDESC_ARCRBH        __BIT(2)    /* Associate RCRB Header */
1547
#define        PCI_RCLINK_DCL_LINKDESC_TCOMPID        __BITS(23, 16) /* Target Component ID*/
1548
#define        PCI_RCLINK_DCL_LINKDESC_TPNUM        __BITS(31, 24) /* Target Port Number */
1549
#define        PCI_RCLINK_DCL_LINKADDR_LT0_LO(x) /* LT0: Link Address Low */        \
1550
        (PCI_RCLINK_DCL_LINKENTS + ((x) * 16) + 0x08)
1551
#define        PCI_RCLINK_DCL_LINKADDR_LT0_HI(x) /* LT0: Link Address High */        \
1552
        (PCI_RCLINK_DCL_LINKENTS + ((x) * 16) + 0x0c)
1553
#define        PCI_RCLINK_DCL_LINKADDR_LT1_LO(x) /* LT1: Config Space (low) */        \
1554
        (PCI_RCLINK_DCL_LINKENTS + ((x) * 16) + 0x08)
1555
#define        PCI_RCLINK_DCL_LINKADDR_LT1_N        __BITS(2, 0)        /* N */
1556
#define        PCI_RCLINK_DCL_LINKADDR_LT1_FUNC __BITS(14, 12)        /* Function Number */
1557
#define        PCI_RCLINK_DCL_LINKADDR_LT1_DEV        __BITS(19, 15)        /* Device Number */
1558
#define        PCI_RCLINK_DCL_LINKADDR_LT1_BUS(N) __BITS(19 + (N), 20) /* Bus Number*/
1559
#define        PCI_RCLINK_DCL_LINKADDR_LT1_BAL(N) __BITS(31, 20 + (N)) /* BAddr(L) */
1560
#define        PCI_RCLINK_DCL_LINKADDR_LT1_HI(x) /* LT1: Config Space Base Addr(H) */\
1561
        (PCI_RCLINK_DCL_LINKENTS + ((x) * 16) + 0x0c)
1562
1563
/*
1564
 * Extended capability ID: 0x0006
1565
 * Root Complex Internal Link Control
1566
 */
1567
1568
/*
1569
 * Extended capability ID: 0x0007
1570
 * Root Complex Event Collector Association
1571
 */
1572
#define        PCI_RCEC_ASSOC_ASSOCBITMAP 0x04
1573
1574
/*
1575
 * Extended capability ID: 0x0008
1576
 * Multi-Function Virtual Channel
1577
 */
1578
1579
/*
1580
 * Extended capability ID: 0x0009
1581
 * Virtual Channel if MFVC Ext Cap set
1582
 */
1583
1584
/*
1585
 * Extended capability ID: 0x000a
1586
 * RCRB Header
1587
 */
1588
1589
/*
1590
 * Extended capability ID: 0x000b
1591
 * Vendor Unique
1592
 */
1593
1594
/*
1595
 * Extended capability ID: 0x000c
1596
 * Configuration Access Correction
1597
 */
1598
1599
/*
1600
 * Extended capability ID: 0x000d
1601
 * Access Control Services
1602
 */
1603
#define        PCI_ACS_CAP        0x04        /* Capability Register */
1604
#define PCI_ACS_CAP_V        __BIT(0)        /* Source Validation */
1605
#define PCI_ACS_CAP_B        __BIT(1)        /* Transaction Blocking */
1606
#define PCI_ACS_CAP_R        __BIT(2)        /* P2P Request Redirect */
1607
#define PCI_ACS_CAP_C        __BIT(3)        /* P2P Completion Redirect */
1608
#define PCI_ACS_CAP_U        __BIT(4)        /* Upstream Forwarding */
1609
#define PCI_ACS_CAP_E        __BIT(5)        /* Egress Control */
1610
#define PCI_ACS_CAP_T        __BIT(6)        /* Direct Translated P2P */
1611
#define PCI_ACS_CAP_ECVSIZE __BITS(15, 8) /* Egress Control Vector Size */
1612
#define        PCI_ACS_CTL        0x04        /* Control Register */
1613
#define PCI_ACS_CTL_V        __BIT(0 + 16)        /* Source Validation Enable */
1614
#define PCI_ACS_CTL_B        __BIT(1 + 16)        /* Transaction Blocking Enable */
1615
#define PCI_ACS_CTL_R        __BIT(2 + 16)        /* P2P Request Redirect Enable */
1616
#define PCI_ACS_CTL_C        __BIT(3 + 16)        /* P2P Completion Redirect Enable */
1617
#define PCI_ACS_CTL_U        __BIT(4 + 16)        /* Upstream Forwarding Enable */
1618
#define PCI_ACS_CTL_E        __BIT(5 + 16)        /* Egress Control Enable */
1619
#define PCI_ACS_CTL_T        __BIT(6 + 16)        /* Direct Translated P2P Enable */
1620
#define        PCI_ACS_ECV        0x08        /* Egress Control Vector */
1621
1622
/*
1623
 * Extended capability ID: 0x000e
1624
 * ARI
1625
 */
1626
#define PCI_ARI_CAP        0x04        /* Capability Register */
1627
#define PCI_ARI_CAP_M                __BIT(0)        /* MFVC Function Groups Cap. */
1628
#define PCI_ARI_CAP_A                __BIT(1)        /* ACS Function Groups Cap. */
1629
#define PCI_ARI_CAP_NXTFN        __BITS(15, 8)        /* Next Function Number */
1630
#define PCI_ARI_CTL        0x04        /* Control Register */
1631
#define PCI_ARI_CTL_M                __BIT(16)        /* MFVC Function Groups Ena. */
1632
#define PCI_ARI_CTL_A                __BIT(17)        /* ACS Function Groups Ena. */
1633
#define PCI_ARI_CTL_FUNCGRP        __BITS(31, 24)        /* Function Group */
1634
1635
/*
1636
 * Extended capability ID: 0x000f
1637
 * Address Translation Services
1638
 */
1639
#define        PCI_ATS_CAP        0x04        /* Capability Register */
1640
#define        PCI_ATS_CAP_INVQDEPTH        __BITS(4, 0)        /* Invalidate Queue Depth */
1641
#define        PCI_ATS_CAP_PALIGNREQ        __BIT(5)        /* Page Aligned Request */
1642
#define        PCI_ATS_CTL        0x04        /* Control Register */
1643
#define        PCI_ATS_CTL_STU                __BITS(20, 16)        /* Smallest Translation Unit */
1644
#define        PCI_ATS_CTL_EN                __BIT(31)        /* Enable */
1645
1646
/*
1647
 * Extended capability ID: 0x0010
1648
 * SR-IOV
1649
 */
1650
#define        PCI_SRIOV_CAP                0x04        /* SR-IOV Capabilities */
1651
#define          PCI_SRIOV_CAP_VF_MIGRATION                __BIT(0)
1652
#define          PCI_SRIOV_CAP_ARI_CAP_HIER_PRESERVED        __BIT(1)
1653
#define          PCI_SRIOV_CAP_VF_MIGRATION_INTMSG_N        __BITS(31, 21)
1654
#define          PCI_SRIOV_CAP_VF_MIGRATION_INTMSG_N_S        21
1655
#define          PCI_SRIOV_CAP_VF_MIGRATION_INTMSG_N_M        0x7ff
1656
#define        PCI_SRIOV_CTL                0x08        /* SR-IOV Control (16bit) */
1657
#define          PCI_SRIOV_CTL_VF_ENABLE                __BIT(0)
1658
#define          PCI_SRIOV_CTL_VF_MIGRATION_SUPPORT        __BIT(1)
1659
#define          PCI_SRIOV_CTL_VF_MIGRATION_INT_ENABLE        __BIT(2)
1660
#define          PCI_SRIOV_CTL_VF_MSE                        __BIT(3)
1661
#define          PCI_SRIOV_CTL_ARI_CAP_HIER                __BIT(4)
1662
#define        PCI_SRIOV_STA                0x0a        /* SR-IOV Status (16bit) */
1663
#define          PCI_SRIOV_STA_VF_MIGRATION                __BIT(0)
1664
#define        PCI_SRIOV_INITIAL_VFS        0x0c        /* InitialVFs (16bit) */
1665
#define        PCI_SRIOV_TOTAL_VFS        0x0e        /* TotalVFs (16bit) */
1666
#define        PCI_SRIOV_NUM_VFS        0x10        /* NumVFs (16bit) */
1667
#define        PCI_SRIOV_FUNC_DEP_LINK        0x12        /* Function Dependency Link (16bit) */
1668
#define        PCI_SRIOV_VF_OFF        0x14        /* First VF Offset (16bit) */
1669
#define        PCI_SRIOV_VF_STRIDE        0x16        /* VF Stride (16bit) */
1670
#define        PCI_SRIOV_VF_DID        0x1a        /* VF Device ID (16bit) */
1671
#define        PCI_SRIOV_PAGE_CAP        0x1c        /* Supported Page Sizes */
1672
#define        PCI_SRIOV_PAGE_SIZE        0x20        /* System Page Size */
1673
#define          PCI_SRIOV_BASE_PAGE_SHIFT        12
1674
#define        PCI_SRIOV_BARS                0x24        /* VF BAR0-5 */
1675
#define        PCI_SRIOV_BAR(x)        (PCI_SRIOV_BARS + ((x) * 4))
1676
#define        PCI_SRIOV_VF_MIG_STA_AR        0x3c        /* VF Migration State Array Offset */
1677
#define          PCI_SRIOV_VF_MIG_STA_OFFSET        __BITS(31, 3)
1678
#define          PCI_SRIOV_VF_MIG_STA_OFFSET_S        3
1679
#define          PCI_SRIOV_VF_MIG_STA_OFFSET_M        0x1fffffff
1680
#define          PCI_SRIOV_VF_MIG_STA_BIR                __BITS(2, 0)
1681
#define          PCI_SRIOV_VF_MIG_STA_BIR_S                0
1682
#define          PCI_SRIOV_VF_MIG_STA_BIR_M                0x7
1683
1684
/*
1685
 * Extended capability ID: 0x0011
1686
 * Multiple Root IO Virtualization
1687
 */
1688
1689
/*
1690
 * Extended capability ID: 0x0012
1691
 * Multicast
1692
 */
1693
1694
/*
1695
 * Extended capability ID: 0x0013
1696
 * Page Request
1697
 */
1698
#define        PCI_PAGE_REQ_CTL        0x04        /* Control Register */
1699
#define        PCI_PAGE_REQ_CTL_E        __BIT(0)        /* Enalbe */
1700
#define        PCI_PAGE_REQ_CTL_R        __BIT(1)        /* Reset */
1701
#define        PCI_PAGE_REQ_STA        0x04        /* Status Register */
1702
#define        PCI_PAGE_REQ_STA_RF        __BIT(0+16)        /* Response Failure */
1703
#define        PCI_PAGE_REQ_STA_UPRGI        __BIT(1+16)   /* Unexpected Page Req Grp Idx */
1704
#define        PCI_PAGE_REQ_STA_S        __BIT(8+16)        /* Stopped */
1705
#define        PCI_PAGE_REQ_OUTSTCAPA        0x08        /* Outstanding Page Request Capacity */
1706
#define        PCI_PAGE_REQ_OUTSTALLOC        0x0c  /* Outstanding Page Request Allocation */
1707
1708
/*
1709
 * Extended capability ID: 0x0014
1710
 * (Reserved for AMD)
1711
 */
1712
1713
/*
1714
 * Extended capability ID: 0x0015
1715
 * Resizable BAR
1716
 */
1717
1718
/*
1719
 * Extended capability ID: 0x0016
1720
 * Dynamic Power Allocation
1721
 */
1722
1723
/*
1724
 * Extended capability ID: 0x0017
1725
 * TPH Requester
1726
 */
1727
#define        PCI_TPH_REQ_CAP        0x04        /* TPH Requester Capability */
1728
#define        PCI_TPH_REQ_CAP_NOST        __BIT(0)        /* No ST Mode Supported */
1729
#define        PCI_TPH_REQ_CAP_INTVEC        __BIT(1)        /* Intr Vec Mode Supported */
1730
#define        PCI_TPH_REQ_CAP_DEVSPEC        __BIT(2)   /* Device Specific Mode Supported */
1731
#define        PCI_TPH_REQ_CAP_XTPHREQ        __BIT(8)    /* Extend TPH Reqester Supported */
1732
#define        PCI_TPH_REQ_CAP_STTBLLOC __BITS(10, 9)        /* ST Table Location */
1733
#define        PCI_TPH_REQ_CAP_STTBLSIZ __BITS(26, 16)        /* ST Table Size */
1734
#define        PCI_TPH_REQ_CTL        0x08        /* TPH Requester Control */
1735
#define        PCI_TPH_REQ_CTL_STSEL        _BITS(2, 0)        /* ST Mode Select */
1736
#define        PCI_TPH_REQ_CTL_TPHREQEN _BITS(9, 8)        /* TPH Requester Enable */
1737
#define        PCI_TPH_REQ_STTBL 0x0c        /* TPH ST Table */
1738
1739
/*
1740
 * Extended capability ID: 0x0018
1741
 * Latency Tolerance Reporting
1742
 */
1743
#define        PCI_LTR_MAXSNOOPLAT        0x04        /* Max Snoop Latency */
1744
#define        PCI_LTR_MAXSNOOPLAT_VAL        __BITS(9, 0)        /* Max Snoop LatencyValue */
1745
#define        PCI_LTR_MAXSNOOPLAT_SCALE __BITS(12, 10) /* Max Snoop LatencyScale */
1746
#define        PCI_LTR_MAXNOSNOOPLAT        0x04        /* Max No-Snoop Latency */
1747
#define        PCI_LTR_MAXNOSNOOPLAT_VAL __BITS(25, 16) /* Max No-Snoop LatencyValue*/
1748
#define        PCI_LTR_MAXNOSNOOPLAT_SCALE __BITS(28, 26) /*Max NoSnoop LatencyScale*/
1749
#define        PCI_LTR_SCALETONS(x) ((32 << (x)) / 32)
1750
1751
/*
1752
 * Extended capability ID: 0x0019
1753
 * Seconday PCI Express Extended Capability
1754
 */
1755
#define PCI_SECPCIE_LCTL3        0x04        /* Link Control 3 */
1756
#define PCI_SECPCIE_LCTL3_PERFEQ        __BIT(0) /* Perform Equalization */
1757
#define PCI_SECPCIE_LCTL3_LINKEQREQ_IE        __BIT(1) /* Link Eq. Req. Int. Ena. */
1758
#define PCI_SECPCIE_LANEERR_STA 0x08        /* Lane Error Status */
1759
#define PCI_SECPCIE_EQCTLS        0x0c        /* Equalization Control [0-maxlane] */
1760
#define        PCI_SECPCIE_EQCTL(x)        (PCI_SECPCIE_EQCTLS + ((x) * 2))
1761
#define        PCI_SECPCIE_EQCTL_DP_XMIT_PRESET __BITS(3, 0) /* DwnStPort Xmit Pres */
1762
#define        PCI_SECPCIE_EQCTL_DP_RCV_HINT        __BITS(6, 4) /* DwnStPort Rcv PreHnt */
1763
#define        PCI_SECPCIE_EQCTL_UP_XMIT_PRESET __BITS(11, 8) /* UpStPort Xmit Pres */
1764
#define        PCI_SECPCIE_EQCTL_UP_RCV_HINT        __BITS(14, 12) /* UpStPort Rcv PreHnt*/
1765
1766
/*
1767
 * Extended capability ID: 0x001a
1768
 * Protocol Multiplexing
1769
 */
1770
1771
/*
1772
 * Extended capability ID: 0x001b
1773
 * Process Address Space ID
1774
 */
1775
#define        PCI_PASID_CAP        0x04        /* Capability Register */
1776
#define        PCI_PASID_CAP_XPERM        __BIT(1)     /* Execute Permission Supported */
1777
#define        PCI_PASID_CAP_PRIVMODE        __BIT(2)        /* Privileged Mode Supported */
1778
#define        PCI_PASID_CAP_MAXPASIDW        __BITS(12, 8)        /* Max PASID Width */
1779
#define        PCI_PASID_CTL        0x04        /* Control Register */
1780
#define        PCI_PASID_CTL_PASID_EN        __BIT(0)        /* PASID Enable */
1781
#define        PCI_PASID_CTL_XPERM_EN        __BIT(1)        /* Execute Permission Enable */
1782
#define        PCI_PASID_CTL_PRIVMODE_EN __BIT(2)        /* Privileged Mode Enable */
1783
1784
/*
1785
 * Extended capability ID: 0x001c
1786
 * LN Requester
1787
 */
1788
#define        PCI_LNR_CAP        0x04        /* Capability Register */
1789
#define        PCI_LNR_CAP_64                __BIT(0)        /* LNR-64 Supported */
1790
#define        PCI_LNR_CAP_128                __BIT(1)        /* LNR-128 Supported */
1791
#define        PCI_LNR_CAP_REGISTMAX        __BITS(12, 8)        /* LNR Registration MAX */
1792
#define        PCI_LNR_CTL        0x04        /* Control Register */
1793
#define        PCI_LNR_CTL_EN                __BIT(0+16)        /* LNR Enable */
1794
#define        PCI_LNR_CTL_CLS                __BIT(1+16)        /* LNR CLS */
1795
#define        PCI_LNR_CTL_REGISTLIM        __BITS(28, 24)        /* LNR Registration Limit */
1796
1797
/*
1798
 * Extended capability ID: 0x001d
1799
 * Downstream Port Containment
1800
 */
1801
1802
/*
1803
 * Extended capability ID: 0x001e
1804
 * L1 PM Substates
1805
 */
1806
#define        PCI_L1PM_CAP        0x04        /* Capabilities Register */
1807
#define        PCI_L1PM_CAP_PCIPM12        __BIT(0)        /* PCI-PM L1.2 Supported */
1808
#define        PCI_L1PM_CAP_PCIPM11        __BIT(1)        /* PCI-PM L1.1 Supported */
1809
#define        PCI_L1PM_CAP_ASPM12        __BIT(2)        /* ASPM L1.2 Supported */
1810
#define        PCI_L1PM_CAP_ASPM11        __BIT(3)        /* ASPM L1.1 Supported */
1811
#define        PCI_L1PM_CAP_L1PM        __BIT(4)        /* L1 PM Substates Supported */
1812
#define        PCI_L1PM_CAP_PCMRT        __BITS(15, 8) /*Port Common Mode Restore Time*/
1813
#define        PCI_L1PM_CAP_PTPOSCALE        __BITS(17, 16)        /* Port T_POWER_ON Scale */
1814
#define        PCI_L1PM_CAP_PTPOVAL        __BITS(23, 19)        /* Port T_POWER_ON Value */
1815
#define        PCI_L1PM_CTL1        0x08        /* Control Register 1 */
1816
#define        PCI_L1PM_CTL1_PCIPM12_EN __BIT(0)        /* PCI-PM L1.2 Enable */
1817
#define        PCI_L1PM_CTL1_PCIPM11_EN __BIT(1)        /* PCI-PM L1.1 Enable */
1818
#define        PCI_L1PM_CTL1_ASPM12_EN        __BIT(2)        /* ASPM L1.2 Enable */
1819
#define        PCI_L1PM_CTL1_ASPM11_EN        __BIT(3)        /* ASPM L1.1 Enable */
1820
#define        PCI_L1PM_CTL1_CMRT        __BITS(15, 8)        /* Common Mode Restore Time */
1821
#define        PCI_L1PM_CTL1_LTRTHVAL        __BITS(25, 16)        /* LTR L1.2 THRESHOLD Value */
1822
#define        PCI_L1PM_CTL1_LTRTHSCALE __BITS(31, 29)        /* LTR L1.2 THRESHOLD Scale */
1823
#define        PCI_L1PM_CTL2        0x0c        /* Control Register 2 */
1824
#define        PCI_L1PM_CTL2_TPOSCALE        __BITS(1, 0)        /* T_POWER_ON Scale */
1825
#define        PCI_L1PM_CTL2_TPOVAL        __BITS(7, 3)        /* T_POWER_ON Value */
1826
1827
/*
1828
 * Local constants
1829
 */
1830
#define PCI_INTRSTR_LEN                        64
1831
1832
#endif /* _DEV_PCI_PCIREG_H_ */