xref: /illumos-gate/usr/src/uts/common/sys/pcie.h (revision d7574e9a)
1f8d2de6bSjchu /*
2f8d2de6bSjchu  * CDDL HEADER START
3f8d2de6bSjchu  *
4f8d2de6bSjchu  * The contents of this file are subject to the terms of the
5f94c6026Sjj156685  * Common Development and Distribution License (the "License").
6f94c6026Sjj156685  * You may not use this file except in compliance with the License.
7f8d2de6bSjchu  *
8f8d2de6bSjchu  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9f8d2de6bSjchu  * or http://www.opensolaris.org/os/licensing.
10f8d2de6bSjchu  * See the License for the specific language governing permissions
11f8d2de6bSjchu  * and limitations under the License.
12f8d2de6bSjchu  *
13f8d2de6bSjchu  * When distributing Covered Code, include this CDDL HEADER in each
14f8d2de6bSjchu  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15f8d2de6bSjchu  * If applicable, add the following below this CDDL HEADER, with the
16f8d2de6bSjchu  * fields enclosed by brackets "[]" replaced with your own identifying
17f8d2de6bSjchu  * information: Portions Copyright [yyyy] [name of copyright owner]
18f8d2de6bSjchu  *
19f8d2de6bSjchu  * CDDL HEADER END
20f8d2de6bSjchu  */
21f8d2de6bSjchu /*
22c85864d8SKrishna Elango  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23f8d2de6bSjchu  * Use is subject to license terms.
24f8d2de6bSjchu  */
25662dc8a5SRobert Mustacchi /*
26b3d69c05SRobert Mustacchi  * Copyright 2019 Joyent, Inc.
27ccb3ca45SRobert Mustacchi  * Copyright 2023 Oxide Computer Company
28662dc8a5SRobert Mustacchi  */
29f8d2de6bSjchu 
30f8d2de6bSjchu #ifndef	_SYS_PCIE_H
31f8d2de6bSjchu #define	_SYS_PCIE_H
32f8d2de6bSjchu 
33f8d2de6bSjchu #ifdef	__cplusplus
34f8d2de6bSjchu extern "C" {
35f8d2de6bSjchu #endif
36f8d2de6bSjchu 
37f8d2de6bSjchu #include <sys/pci.h>
38f8d2de6bSjchu 
39f8d2de6bSjchu /*
4070025d76Sjohnny  * PCI Express capability registers in PCI configuration space relative to
4170025d76Sjohnny  * the PCI Express Capability structure.
42f8d2de6bSjchu  */
43f8d2de6bSjchu #define	PCIE_CAP_ID			PCI_CAP_ID
44f8d2de6bSjchu #define	PCIE_CAP_NEXT_PTR		PCI_CAP_NEXT_PTR
45f8d2de6bSjchu #define	PCIE_PCIECAP			0x02	/* PCI-e Capability Reg */
46f8d2de6bSjchu #define	PCIE_DEVCAP			0x04	/* Device Capability */
47f8d2de6bSjchu #define	PCIE_DEVCTL			0x08	/* Device Control */
48f8d2de6bSjchu #define	PCIE_DEVSTS			0x0A	/* Device Status */
4992e1ac0dSjj156685 #define	PCIE_LINKCAP			0x0C	/* Link Capability */
5092e1ac0dSjj156685 #define	PCIE_LINKCTL			0x10	/* Link Control */
5192e1ac0dSjj156685 #define	PCIE_LINKSTS			0x12	/* Link Status */
52f8d2de6bSjchu #define	PCIE_SLOTCAP			0x14	/* Slot Capability */
53f8d2de6bSjchu #define	PCIE_SLOTCTL			0x18	/* Slot Control */
54f8d2de6bSjchu #define	PCIE_SLOTSTS			0x1A	/* Slot Status */
55f8d2de6bSjchu #define	PCIE_ROOTCTL			0x1C	/* Root Control */
5633756ae2SRobert Mustacchi #define	PCIE_ROOTCAP			0x1E	/* Root Capabilities */
57f8d2de6bSjchu #define	PCIE_ROOTSTS			0x20	/* Root Status */
5826947304SEvan Yan #define	PCIE_DEVCAP2			0x24	/* Device Capability 2 */
5926947304SEvan Yan #define	PCIE_DEVCTL2			0x28	/* Device Control 2 */
6026947304SEvan Yan #define	PCIE_DEVSTS2			0x2A	/* Device Status 2 */
6126947304SEvan Yan #define	PCIE_LINKCAP2			0x2C	/* Link Capability 2 */
6226947304SEvan Yan #define	PCIE_LINKCTL2			0x30	/* Link Control 2 */
6326947304SEvan Yan #define	PCIE_LINKSTS2			0x32	/* Link Status 2 */
6426947304SEvan Yan #define	PCIE_SLOTCAP2			0x34	/* Slot Capability 2 */
6526947304SEvan Yan #define	PCIE_SLOTCTL2			0x38	/* Slot Control 2 */
6626947304SEvan Yan #define	PCIE_SLOTSTS2			0x3A	/* Slot Status 2 */
67f8d2de6bSjchu 
68f8d2de6bSjchu /*
6970025d76Sjohnny  * PCI-Express Config Space size
7070025d76Sjohnny  */
7170025d76Sjohnny #define	PCIE_CONF_HDR_SIZE	4096	/* PCIe configuration header size */
7270025d76Sjohnny 
7370025d76Sjohnny /*
7470025d76Sjohnny  * PCI-Express Capabilities Register (2 bytes)
75f8d2de6bSjchu  */
76f8d2de6bSjchu #define	PCIE_PCIECAP_VER_1_0		0x1	/* PCI-E spec 1.0 */
7726947304SEvan Yan #define	PCIE_PCIECAP_VER_2_0		0x2	/* PCI-E spec 2.0 */
78f8d2de6bSjchu #define	PCIE_PCIECAP_VER_MASK		0xF	/* Version Mask */
79f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE_DEV	0x00	/* PCI-E Endpont Device */
80c85864d8SKrishna Elango #define	PCIE_PCIECAP_DEV_TYPE_PCI_DEV	0x10	/* "Leg PCI" Endpont Device */
81f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_ROOT	0x40	/* Root Port of Root Complex */
82f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_UP	0x50	/* Upstream Port of Switch */
83f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_DOWN	0x60	/* Downstream Port of Switch */
84f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE2PCI	0x70	/* PCI-E to PCI Bridge */
85f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCI2PCIE	0x80	/* PCI to PCI-E Bridge */
86eae2e508Skrishnae #define	PCIE_PCIECAP_DEV_TYPE_RC_IEP	0x90	/* RootComplex Integrated Dev */
87eae2e508Skrishnae #define	PCIE_PCIECAP_DEV_TYPE_RC_EC	0xA0	/* RootComplex Evt Collector */
88f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_MASK	0xF0	/* Device/Port Type Mask */
89f8d2de6bSjchu #define	PCIE_PCIECAP_SLOT_IMPL		0x100	/* Slot Impl vs Integrated */
903221df98SKrishna Elango #define	PCIE_PCIECAP_INT_MSG_NUM	0x3E00	/* Interrupt Message Number */
91f8d2de6bSjchu 
92f8d2de6bSjchu /*
9370025d76Sjohnny  * Device Capabilities Register (4 bytes)
94f8d2de6bSjchu  */
95f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_128	0x0
96f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_256	0x1
97f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_512	0x2
98f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_1024	0x3
99f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_2048	0x4
100f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_4096	0x5
101f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_MASK	0x7	/* Max Payload Size Supported */
102f8d2de6bSjchu 
103f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_NONE	0x00	/* No Function # bits used */
104f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_ONE	0x08	/* First most sig. bit used */
105f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_TWO	0x10	/* First 2 most sig bit used */
106f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_THREE	0x18	/* All 3 bits used */
107f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_MASK	0x18	/* Phantom Func Supported */
108f8d2de6bSjchu 
109f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_5BIT	0x00	/* 5-Bit Tag Field Supported */
110f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_8BIT	0x20	/* 8-Bit Tag Field Supported */
111f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_MASK	0x20	/* Ext. Tag Field Supported */
112f8d2de6bSjchu 
113f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MIN	0x000	/* < 64 ns */
114f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_64ns	0x040	/* 64 ns - 128 ns */
115f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_128ns	0x080	/* 128 ns - 256 ns */
116f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_256ns	0x0C0	/* 256 ns - 512 ns */
117f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_512ns	0x100	/* 512 ns - 1 us */
118f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_1us	0x140	/* 1 us - 2 us */
119f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_2us	0x180	/* 2 us - 4 us */
120f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MAX	0x1C0	/* > 4 us */
121f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MASK	0x1C0	/* EP L0s Accetable Latency */
122f8d2de6bSjchu 
123f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MIN	0x000	/* < 1 us */
124f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_1us	0x140	/* 1 us - 2 us */
125f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_2us	0x180	/* 2 us - 4 us */
126f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_4us	0x140	/* 4 us - 8 us */
127f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_8us	0x180	/* 8 us - 16 us */
128f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_16us	0x140	/* 16 us - 32 us */
129f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_32us	0x180	/* 32 us - 64 us */
130f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MAX	0x1C0	/* > 64 us */
131f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MASK	0x700	/* EP L1 Accetable Latency */
132f8d2de6bSjchu 
13333756ae2SRobert Mustacchi /*
13433756ae2SRobert Mustacchi  * As of PCIe 2.x these three bits are now undefined.
13533756ae2SRobert Mustacchi  */
136f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_BUTTON		0x1000	/* Attention Button Present */
137f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_INDICATOR	0x2000	/* Attn Indicator Present */
138f8d2de6bSjchu #define	PCIE_DEVCAP_PWR_INDICATOR	0x4000	/* Power Indicator Present */
139f8d2de6bSjchu 
140337fc9e2Sanish #define	PCIE_DEVCAP_ROLE_BASED_ERR_REP	0x8000	/* Role Based Error Reporting */
141337fc9e2Sanish 
142f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_SHIFT	18	/* Power Limit Value Shift */
143f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_MASK	0xFF	/* Power Limit Value Mask */
144f8d2de6bSjchu 
145f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1	0x0000000	/* 1x Scale */
146f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_10	0x4000000	/* 0.1x Scale */
147f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_100	0x8000000	/* 0.01x Scale */
148f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1000	0xC000000	/* 0.001x Scale */
149f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_MASK	0xC000000	/* Power Limit Scale */
150f8d2de6bSjchu 
1519b3f4fe3SHans Rosenfeld #define	PCIE_DEVCAP_FLR			0x10000000 /* Function Level Reset */
1529b3f4fe3SHans Rosenfeld 
153f8d2de6bSjchu /*
15470025d76Sjohnny  * Device Control Register (2 bytes)
155f8d2de6bSjchu  */
156f8d2de6bSjchu #define	PCIE_DEVCTL_CE_REPORTING_EN	0x1	/* Correctable Error Enable */
157f8d2de6bSjchu #define	PCIE_DEVCTL_NFE_REPORTING_EN	0x2	/* Non-Fatal Error Enable */
158f8d2de6bSjchu #define	PCIE_DEVCTL_FE_REPORTING_EN	0x4	/* Fatal Error Enable */
159f8d2de6bSjchu #define	PCIE_DEVCTL_UR_REPORTING_EN	0x8	/* Unsupported Request Enable */
16095ad88f0Sraghuram #define	PCIE_DEVCTL_ERR_MASK		0xF	/* All of the above bits */
16195ad88f0Sraghuram 
162f8d2de6bSjchu #define	PCIE_DEVCTL_RO_EN		0x10	/* Enable Relaxed Ordering */
163f8d2de6bSjchu 
164f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_128	0x00
165f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_256	0x20
166f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_512	0x40
167f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_1024	0x60
168f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_2048	0x80
169f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_4096	0xA0
170f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_MASK	0xE0	/* Max_Payload_Size */
1710114761dSAlan Adamson, SD OSSD #define	PCIE_DEVCTL_MAX_PAYLOAD_SHIFT	0x5
172f8d2de6bSjchu 
173f8d2de6bSjchu #define	PCIE_DEVCTL_EXT_TAG_FIELD_EN	0x100	/* Extended Tag Field Enable */
174f8d2de6bSjchu #define	PCIE_DEVCTL_PHTM_FUNC_EN	0x200	/* Phantom Functions Enable */
175f8d2de6bSjchu #define	PCIE_DEVCTL_AUX_POWER_PM_EN	0x400	/* Auxiliary Power PM Enable */
176f8d2de6bSjchu #define	PCIE_DEVCTL_ENABLE_NO_SNOOP	0x800	/* Enable No Snoop */
177f8d2de6bSjchu 
17895ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_128	0x0000
17995ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_256	0x1000
18095ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_512	0x2000
18195ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_1024	0x3000
18295ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_2048	0x4000
18395ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_4096	0x5000
184f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_MASK	0x7000	/* Max_Read_Request_Size */
1850114761dSAlan Adamson, SD OSSD #define	PCIE_DEVCTL_MAX_READ_REQ_SHIFT	0xC
186f8d2de6bSjchu 
18733756ae2SRobert Mustacchi #define	PCIE_DEVCTL_BRIDGE_RETRY	0x8000	/* Bridge can return CRS */
18833756ae2SRobert Mustacchi #define	PCIE_DEVCTL_INITIATE_FLR	0x8000	/* Start Function Level Reset */
1899b3f4fe3SHans Rosenfeld 
190f8d2de6bSjchu /*
19170025d76Sjohnny  * Device Status Register (2 bytes)
192f8d2de6bSjchu  */
193f8d2de6bSjchu #define	PCIE_DEVSTS_CE_DETECTED		0x1	/* Correctable Error Detected */
194f8d2de6bSjchu #define	PCIE_DEVSTS_NFE_DETECTED	0x2	/* Non Fatal Error Detected */
195f8d2de6bSjchu #define	PCIE_DEVSTS_FE_DETECTED		0x4	/* Fatal Error Detected */
196f8d2de6bSjchu #define	PCIE_DEVSTS_UR_DETECTED		0x8	/* Unsupported Req Detected */
197f8d2de6bSjchu #define	PCIE_DEVSTS_AUX_POWER		0x10	/* AUX Power Detected */
198f8d2de6bSjchu #define	PCIE_DEVSTS_TRANS_PENDING	0x20	/* Transactions Pending */
19933756ae2SRobert Mustacchi #define	PCIE_DEVSTS_EPR_DETECTED	0x40	/* Emergency Power Reduction */
200f8d2de6bSjchu 
201f8d2de6bSjchu /*
20270025d76Sjohnny  * Link Capability Register (4 bytes)
203f8d2de6bSjchu  */
204662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_2_5	0x1	/* 2.5 GT/s Speed */
205662dc8a5SRobert Mustacchi /*
206662dc8a5SRobert Mustacchi  * In version 2 of PCI express, this indicated that both 5.0 GT/s and 2.5 GT/s
207662dc8a5SRobert Mustacchi  * speeds were supported. The use of this as the maximum link speed was added
20889427192SRobert Mustacchi  * with PCIe v3.
209662dc8a5SRobert Mustacchi  */
210662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_5	0x2	/* 5.0 GT/s Speed */
211662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_8	0x3	/* 8.0 GT/s Speed */
21233756ae2SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_16	0x4	/* 16.0 GT/s Speed */
21389427192SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_32	0x5	/* 32.0 GT/s Speed */
21489427192SRobert Mustacchi #define	PCIE_LINKCAP_MAX_SPEED_64	0x6	/* 64.0 GT/s Speed */
215f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_SPEED_MASK	0xF	/* Maximum Link Speed */
216f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X1	0x010
217f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X2	0x020
218f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X4	0x040
219f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X8	0x080
220f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X12	0x0C0
221f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X16	0x100
222f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X32	0x200
223f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_MASK	0x3f0	/* Maximum Link Width */
224f8d2de6bSjchu 
225f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S	0x400	/* L0s Entry Supported */
22633756ae2SRobert Mustacchi #define	PCIE_LINKCAP_ASPM_SUP_L1	0x800	/* L1 Entry Supported */
227f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S_L1	0xC00	/* L0s abd L1 Supported */
228f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_MASK	0xC00	/* ASPM Support */
229f8d2de6bSjchu 
230f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MIN	0x0000	/* < 64 ns */
231f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_64ns	0x1000	/* 64 ns - 128 ns */
232f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_128ns	0x2000	/* 128 ns - 256 ns */
233f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_256ns	0x3000	/* 256 ns - 512 ns */
234f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_512ns	0x4000	/* 512 ns - 1 us */
235f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_1us	0x5000	/* 1 us - 2 us */
236f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_2us	0x6000	/* 2 us - 4 us */
237f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MAX	0x7000	/* > 4 us */
238f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MASK	0x7000	/* L0s Exit Latency */
239f8d2de6bSjchu 
240f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MIN	0x00000	/* < 1 us */
241f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_1us	0x08000	/* 1 us - 2 us */
242f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_2us	0x10000	/* 2 us - 4 us */
243f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_4us	0x18000	/* 4 us - 8 us */
244f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_8us	0x20000	/* 8 us - 16 us */
245f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_16us	0x28000	/* 16 us - 32 us */
246f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_32us	0x30000	/* 32 us - 64 us */
247f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MAX	0x38000	/* > 64 us */
248f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MASK	0x38000	/* L1 Exit Latency */
249f8d2de6bSjchu 
25033756ae2SRobert Mustacchi #define	PCIE_LINKCAP_CLOCK_POWER_MGMT	0x40000	/* Clock Power Management */
25133756ae2SRobert Mustacchi #define	PCIE_LINKCAP_SDER_CAP		0x80000 /* Surprise Down Err report */
25270025d76Sjohnny #define	PCIE_LINKCAP_DLL_ACTIVE_REP_CAPABLE	0x100000    /* DLL Active */
25370025d76Sjohnny 							    /* Capable bit */
25433756ae2SRobert Mustacchi #define	PCIE_LINKCAP_LINK_BW_NOTIFY_CAP	0x200000 /* Link Bandwidth Notify Cap */
25533756ae2SRobert Mustacchi #define	PCIE_LINKCAP_ASPM_OPTIONAL	0x400000 /* ASPM Opt. Comp. */
25670025d76Sjohnny 
257c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER	0xFF000000	/* Port Number */
258c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER_SHIFT	24	/* Port Number Shift */
259c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER_MASK	0xFF	/* Port Number Mask */
260f8d2de6bSjchu 
261f8d2de6bSjchu /*
26270025d76Sjohnny  * Link Control Register (2 bytes)
263f8d2de6bSjchu  */
264f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_DIS	0x0	/* ASPM Disable */
265f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S	0x1	/* ASPM L0s only */
266f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L1	0x2	/* ASPM L1 only */
267f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S_L1	0x3	/* ASPM L0s and L1 only */
268f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_MASK	0x3	/* ASPM Control */
269f8d2de6bSjchu 
270f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_64_BYTE	0x0	/* 64 Byte */
271f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_128_BYTE	0x8	/* 128 Byte */
272f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_MASK		0x8	/* Read Completion Boundary */
273f8d2de6bSjchu 
274f8d2de6bSjchu #define	PCIE_LINKCTL_LINK_DISABLE	0x10	/* Link Disable */
275f8d2de6bSjchu #define	PCIE_LINKCTL_RETRAIN_LINK	0x20	/* Retrain Link */
276f8d2de6bSjchu #define	PCIE_LINKCTL_COMMON_CLK_CFG	0x40	/* Common Clock Configuration */
277f8d2de6bSjchu #define	PCIE_LINKCTL_EXT_SYNCH		0x80	/* Extended Synch */
27833756ae2SRobert Mustacchi #define	PCIE_LINKCTL_CLOCK_POWER_MGMT	0x100	/* Enable Clock Power Mgmt. */
27933756ae2SRobert Mustacchi #define	PCIE_LINKCTL_HW_WIDTH_DISABLE	0x200	/* hw auto width disable */
28033756ae2SRobert Mustacchi #define	PCIE_LINKCTL_LINK_BW_INTR_EN	0x400	/* Link bw mgmt intr */
28133756ae2SRobert Mustacchi #define	PCIE_LINKCTL_LINK_AUTO_BW_INTR_EN	0x800	/* Auto bw intr */
28233756ae2SRobert Mustacchi 
28333756ae2SRobert Mustacchi #define	PCI_LINKCTRL_DRS_SIG_CTRL_NO_REP	0x00
28433756ae2SRobert Mustacchi #define	PCI_LINKCTRL_DRS_SIG_CTRL_IE		0x4000
28533756ae2SRobert Mustacchi #define	PCI_LINKCTRL_DRS_SIG_CTRL_DRS_FRS	0x8000
28633756ae2SRobert Mustacchi #define	PCIE_LINKCTL_DRS_SIG_CTRL_MASK	0xC000	/* DRS Signaling Control */
287f8d2de6bSjchu 
288f8d2de6bSjchu /*
28970025d76Sjohnny  * Link Status Register (2 bytes)
290f8d2de6bSjchu  */
291662dc8a5SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_2_5		0x1	/* 2.5 GT/s Link Speed */
292662dc8a5SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_5		0x2	/* 5.0 GT/s Link Speed */
293662dc8a5SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_8		0x3	/* 8.0 GT/s Link Speed */
29433756ae2SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_16		0x4	/* 16.0 GT/s Link Speed */
29589427192SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_32		0x5	/* 32.0 GT/s Link Speed */
29689427192SRobert Mustacchi #define	PCIE_LINKSTS_SPEED_64		0x6	/* 64.0 GT/s Link Speed */
297f8d2de6bSjchu #define	PCIE_LINKSTS_SPEED_MASK		0xF	/* Link Speed */
298f8d2de6bSjchu 
299f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X1	0x010
300f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X2	0x020
301f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X4	0x040
302f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X8	0x080
303f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X12	0x0C0
304f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X16	0x100
305f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X32	0x200
306f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_MASK	0x3F0	/* Negotiated Link Width */
307f8d2de6bSjchu 
30833756ae2SRobert Mustacchi /* This bit is undefined as of PCIe 2.x */
309f8d2de6bSjchu #define	PCIE_LINKSTS_TRAINING_ERROR	0x400	/* Training Error */
310f8d2de6bSjchu #define	PCIE_LINKSTS_LINK_TRAINING	0x800	/* Link Training */
311f8d2de6bSjchu #define	PCIE_LINKSTS_SLOT_CLK_CFG	0x1000	/* Slot Clock Configuration */
312f94c6026Sjj156685 #define	PCIE_LINKSTS_DLL_LINK_ACTIVE	0x2000	/* DLL Link Active */
31333756ae2SRobert Mustacchi #define	PCIE_LINKSTS_LINK_BW_MGMT	0x4000	/* Link bw mgmt status */
31433756ae2SRobert Mustacchi #define	PCIE_LINKSTS_AUTO_BW		0x8000	/* Link auto BW status */
315f94c6026Sjj156685 
316f8d2de6bSjchu /*
31770025d76Sjohnny  * Slot Capability Register (4 bytes)
318f8d2de6bSjchu  */
319f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_BUTTON	0x1	/* Attention Button Present */
320f8d2de6bSjchu #define	PCIE_SLOTCAP_POWER_CONTROLLER	0x2	/* Power Controller Present */
321f8d2de6bSjchu #define	PCIE_SLOTCAP_MRL_SENSOR		0x4	/* MRL Sensor Present */
322f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_INDICATOR	0x8	/* Attn Indicator Present */
323f8d2de6bSjchu #define	PCIE_SLOTCAP_PWR_INDICATOR	0x10	/* Power Indicator Present */
324f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_SURPRISE	0x20	/* Hot-Plug Surprise */
325f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_CAPABLE		0x40	/* Hot-Plug Capable */
326f8d2de6bSjchu 
327f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_SHIFT	7	/* Slot Pwr Limit Value Shift */
328f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_MASK	0xFF	/* Slot Pwr Limit Value */
329f8d2de6bSjchu 
330f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1	0x00000	/* 1x Scale */
331f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_10	0x08000	/* 0.1x Scale */
332f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_100	0x10000	/* 0.01x Scale */
333f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1000	0x18000	/* 0.001x Scale */
334f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_MASK	0x18000	/* Slot Power Limit Scale */
33570025d76Sjohnny #define	PCIE_SLOTCAP_EMI_LOCK_PRESENT	0x20000 /* EMI Lock Present */
33670025d76Sjohnny #define	PCIE_SLOTCAP_NO_CMD_COMP_SUPP	0x40000 /* No Command Comp. Supported */
337f8d2de6bSjchu 
338f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT	19	/* Physical Slot Num Shift */
339f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_MASK	0x1FFF	/* Physical Slot Num Mask */
340f8d2de6bSjchu 
34170025d76Sjohnny #define	PCIE_SLOTCAP_PHY_SLOT_NUM(reg) \
34270025d76Sjohnny 	    (((reg) >> PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT) & \
34370025d76Sjohnny 	    PCIE_SLOTCAP_PHY_SLOT_NUM_MASK)
34470025d76Sjohnny 
345f8d2de6bSjchu /*
34670025d76Sjohnny  * Slot Control Register (2 bytes)
347f8d2de6bSjchu  */
348f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_BTN_EN	0x1	/* Attn Button Pressed Enable */
349f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_FAULT_EN	0x2	/* Pwr Fault Detected Enable */
350f8d2de6bSjchu #define	PCIE_SLOTCTL_MRL_SENSOR_EN	0x4	/* MRL Sensor Changed Enable */
351f8d2de6bSjchu #define	PCIE_SLOTCTL_PRESENCE_CHANGE_EN	0x8	/* Presence Detect Changed En */
352f8d2de6bSjchu #define	PCIE_SLOTCTL_CMD_INTR_EN	0x10	/* CMD Completed Interrupt En */
353f8d2de6bSjchu #define	PCIE_SLOTCTL_HP_INTR_EN		0x20	/* Hot-Plug Interrupt Enable */
35470025d76Sjohnny #define	PCIE_SLOTCTL_PWR_CONTROL	0x0400	/* Power controller Control */
35570025d76Sjohnny #define	PCIE_SLOTCTL_EMI_LOCK_CONTROL	0x0800	/* EMI Lock control */
356f94c6026Sjj156685 #define	PCIE_SLOTCTL_DLL_STATE_EN	0x1000	/* DLL State Changed En */
35733756ae2SRobert Mustacchi #define	PCIE_SLOTCTL_AUTO_SLOT_PL_DIS	0x2000	/* Auto Slot Power Limit Dis */
35870025d76Sjohnny #define	PCIE_SLOTCTL_ATTN_INDICATOR_MASK 0x00C0	/* Attn Indicator mask */
35970025d76Sjohnny #define	PCIE_SLOTCTL_PWR_INDICATOR_MASK	0x0300	/* Power Indicator mask */
36026947304SEvan Yan #define	PCIE_SLOTCTL_INTR_MASK		0x103f	/* Supported intr mask */
361f8d2de6bSjchu 
36270025d76Sjohnny /* State values for the Power and Attention Indicators */
36370025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_ON		0x1	/* indicator ON */
36470025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_BLINK	0x2	/* indicator BLINK */
36570025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_OFF	0x3	/* indicator OFF */
366f8d2de6bSjchu 
367f8d2de6bSjchu /*
36870025d76Sjohnny  * Macros to set/get the state of Power and Attention Indicators
36970025d76Sjohnny  * in the PCI Express Slot Control Register.
37070025d76Sjohnny  */
37170025d76Sjohnny #define	pcie_slotctl_pwr_indicator_get(reg)	\
37270025d76Sjohnny 	(((reg) & PCIE_SLOTCTL_PWR_INDICATOR_MASK) >> 8)
37370025d76Sjohnny #define	pcie_slotctl_attn_indicator_get(ctrl)	\
37470025d76Sjohnny 	(((ctrl) & PCIE_SLOTCTL_ATTN_INDICATOR_MASK) >> 6)
37570025d76Sjohnny #define	pcie_slotctl_attn_indicator_set(ctrl, v)\
37670025d76Sjohnny 	(((ctrl) & ~PCIE_SLOTCTL_ATTN_INDICATOR_MASK) | ((v) << 6))
37770025d76Sjohnny #define	pcie_slotctl_pwr_indicator_set(ctrl, v)\
37870025d76Sjohnny 	(((ctrl) & ~PCIE_SLOTCTL_PWR_INDICATOR_MASK) | ((v) << 8))
37970025d76Sjohnny 
38070025d76Sjohnny /*
38170025d76Sjohnny  * Slot Status register (2 bytes)
382f8d2de6bSjchu  */
383f8d2de6bSjchu #define	PCIE_SLOTSTS_ATTN_BTN_PRESSED	0x1	/* Attention Button Pressed */
384f8d2de6bSjchu #define	PCIE_SLOTSTS_PWR_FAULT_DETECTED	0x2	/* Power Fault Detected */
385f8d2de6bSjchu #define	PCIE_SLOTSTS_MRL_SENSOR_CHANGED	0x4	/* MRL Sensor Changed */
386f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_CHANGED	0x8	/* Presence Detect Changed */
387f8d2de6bSjchu #define	PCIE_SLOTSTS_COMMAND_COMPLETED	0x10	/* Command Completed */
38870025d76Sjohnny #define	PCIE_SLOTSTS_MRL_SENSOR_OPEN	0x20	/* MRL Sensor Open */
389f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_DETECTED	0x40	/* Card Present in slot */
39070025d76Sjohnny #define	PCIE_SLOTSTS_EMI_LOCK_SET	0x0080	/* EMI Lock set */
39170025d76Sjohnny #define	PCIE_SLOTSTS_DLL_STATE_CHANGED	0x0100	/* DLL State Changed */
39226947304SEvan Yan #define	PCIE_SLOTSTS_STATUS_EVENTS	0x11f	/* Supported events */
393f8d2de6bSjchu 
394f8d2de6bSjchu /*
39570025d76Sjohnny  * Root Control Register (2 bytes)
396f8d2de6bSjchu  */
397f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_CE_EN	0x1	/* Sys Err on Cor Err Enable */
398f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_NFE_EN	0x2	/* Sys Err on NF Err Enable */
39970025d76Sjohnny #define	PCIE_ROOTCTL_SYS_ERR_ON_FE_EN	0x4	/* Sys Err on Fatal Err En */
40070025d76Sjohnny #define	PCIE_ROOTCTL_PME_INTERRUPT_EN	0x8	/* PME Interrupt Enable */
40133756ae2SRobert Mustacchi #define	PCIE_ROOTCTL_CRS_SW_VIS_EN	0x10	/* CRS SW Visibility EN */
40233756ae2SRobert Mustacchi 
40333756ae2SRobert Mustacchi /*
40433756ae2SRobert Mustacchi  * Root Capabilities register (2 bytes)
40533756ae2SRobert Mustacchi  */
40633756ae2SRobert Mustacchi #define	PCIE_ROOTCAP_CRS_SW_VIS		0x01	/* CRS SW Visible */
407f8d2de6bSjchu 
408f8d2de6bSjchu /*
40970025d76Sjohnny  * Root Status Register (4 bytes)
410f8d2de6bSjchu  */
411f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_SHIFT	0	/* PME Requestor ID */
412f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_MASK	0xFFFF	/* PME Requestor ID */
413f8d2de6bSjchu 
414f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_STATUS		0x10000	/* PME Status */
415f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_PENDING	0x20000	/* PME Pending */
416f8d2de6bSjchu 
41726947304SEvan Yan /*
41826947304SEvan Yan  * Device Capabilities 2 Register (4 bytes)
41926947304SEvan Yan  */
42026947304SEvan Yan #define	PCIE_DEVCAP2_COM_TO_RANGE_MASK	0xF
42126947304SEvan Yan #define	PCIE_DEVCAP2_COM_TO_DISABLE	0x10
42226947304SEvan Yan #define	PCIE_DEVCAP2_ARI_FORWARD	0x20
42326947304SEvan Yan #define	PCIE_DEVCAP2_ATOMICOP_ROUTING	0x40
42426947304SEvan Yan #define	PCIE_DEVCAP2_32_ATOMICOP_COMPL  0x80
42526947304SEvan Yan #define	PCIE_DEVCAP2_64_ATOMICOP_COMPL  0x100
42626947304SEvan Yan #define	PCIE_DEVCAP2_128_CAS_COMPL	0x200
42726947304SEvan Yan #define	PCIE_DEVCAP2_NO_RO_PR_PR_PASS	0x400
42826947304SEvan Yan #define	PCIE_DEVCAP2_LTR_MECH		0x800
42926947304SEvan Yan #define	PCIE_DEVCAP2_TPH_COMP_SHIFT	12
43026947304SEvan Yan #define	PCIE_DEVCAP2_TPH_COMP_MASK	0x3
43133756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_LNSYS_CLS_SHIFT	14
43233756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_LNSYS_CLS_MASK	0x3
43333756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_10B_TAG_COMP_SUP	0x10000
43433756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_10B_TAG_REQ_SUP	0x20000
43533756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_OBFF_SHIFT		18
43633756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_OBFF_MASK		0x3
43726947304SEvan Yan #define	PCIE_DEVCAP2_EXT_FMT_FIELD	0x100000
43826947304SEvan Yan #define	PCIE_DEVCAP2_END_END_TLP_PREFIX	0x200000
43926947304SEvan Yan #define	PCIE_DEVCAP2_MAX_END_END_SHIFT	22
44026947304SEvan Yan #define	PCIE_DEVCAP2_MAX_END_END_MASK	0x3
44133756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_EPR_SUP_SHIFT	24
44233756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_EPR_SUP_MASK	0x3
44333756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_EPR_INIT_REQ	0x4000000
44433756ae2SRobert Mustacchi #define	PCIE_DEVCAP2_FRS_SUP		0x80000000
44526947304SEvan Yan 
44626947304SEvan Yan /*
44726947304SEvan Yan  * Device Control 2 Register (2 bytes)
44826947304SEvan Yan  */
4499b3f4fe3SHans Rosenfeld #define	PCIE_DEVCTL2_COM_TO_RANGE_MASK	0xf
45026947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_0	0x0
45126947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_1	0x1
45226947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_2	0x2
45326947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_3	0x5
45426947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_4	0x6
45526947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_5	0x9
45626947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_6	0xa
45726947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_7	0xd
45826947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_8	0xe
45926947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_DISABLE	0x10
46026947304SEvan Yan #define	PCIE_DEVCTL2_ARI_FORWARD_EN	0x20
46126947304SEvan Yan #define	PCIE_DEVCTL2_ATOMICOP_REQ_EN	0x40
46226947304SEvan Yan #define	PCIE_DEVCTL2_ATOMICOP_EGRS_BLK	0x80
46326947304SEvan Yan #define	PCIE_DEVCTL2_IDO_REQ_EN		0x100
46426947304SEvan Yan #define	PCIE_DEVCTL2_IDO_COMPL_EN	0x200
46526947304SEvan Yan #define	PCIE_DEVCTL2_LTR_MECH_EN	0x400
46633756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_EPR_REQ		0x800
4675b2c4190SRobert Mustacchi #define	PCIE_DEVCTL2_10B_TAG_REQ_EN	0x1000
46833756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_OBFF_MASK		0x6000
46933756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_OBFF_DISABLE	0x0000
47033756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_OBFF_EN_VARA	0x2000
47133756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_OBFF_EN_VARB	0x4000
47233756ae2SRobert Mustacchi #define	PCIE_DEVCTL2_OBFF_EN_WAKE	0x6000
47326947304SEvan Yan #define	PCIE_DEVCTL2_END_END_TLP_PREFIX	0x8000
47426947304SEvan Yan 
47526947304SEvan Yan 
476662dc8a5SRobert Mustacchi /*
47789427192SRobert Mustacchi  * Link Capabilities 2 Register (4 bytes)
478662dc8a5SRobert Mustacchi  */
479662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_2_5		0x02
480662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_5		0x04
481662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_8		0x08
48233756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_16		0x10
48389427192SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_32		0x20
48489427192SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_64		0x40
485662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP2_SPEED_MASK	0xfe
486662dc8a5SRobert Mustacchi #define	PCIE_LINKCAP2_CROSSLINK		0x100
48733756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LSKP_OSGSS_MASK	0xfe00
48833756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_2_5	0x0200
48933756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_5	0x0400
49033756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_8	0x0800
49133756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_16	0x1000
49289427192SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_32	0x2000
49389427192SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSGSS_64	0x4000
49433756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_MASK	0x7f0000
49533756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_2_5	0x010000
49633756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_5	0x020000
49733756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_8	0x040000
49833756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_16	0x080000
49989427192SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_32	0x100000
50089427192SRobert Mustacchi #define	PCIE_LINKCAP2_LKSP_OSRSS_64	0x200000
50133756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_RTPD_SUP		0x800000
50233756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_TRTPD_SUP		0x01000000
50333756ae2SRobert Mustacchi #define	PCIE_LINKCAP2_DRS		0x80000000
50433756ae2SRobert Mustacchi 
50533756ae2SRobert Mustacchi /*
50633756ae2SRobert Mustacchi  * Link Control 2 Register (2 bytes)
50733756ae2SRobert Mustacchi  */
508b3d69c05SRobert Mustacchi 
509b3d69c05SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_2_5	0x1	/* 2.5 GT/s Speed */
510b3d69c05SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_5	0x2	/* 5.0 GT/s Speed */
511b3d69c05SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_8	0x3	/* 8.0 GT/s Speed */
512b3d69c05SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_16	0x4	/* 16.0 GT/s Speed */
51389427192SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_32	0x5	/* 32.0 GT/s Speed */
51489427192SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_64	0x6	/* 64.0 GT/s Speed */
51533756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_TARGET_SPEED_MASK	0x000f
51633756ae2SRobert Mustacchi #define	PICE_LINKCTL2_ENTER_COMPLIANCE	0x0010
51733756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_HW_AUTO_SPEED_DIS	0x0020
51833756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_SELECT_DEEMPH	0x0040
51933756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_TX_MARGIN_MASK	0x0380
52033756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_ENTER_MOD_COMP	0x0400
52133756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_COMP_SOS		0x0800
52233756ae2SRobert Mustacchi #define	PCIE_LINKCTL2_COMP_DEEMPM_MASK	0xf000
52333756ae2SRobert Mustacchi 
52433756ae2SRobert Mustacchi /*
52533756ae2SRobert Mustacchi  * Link Status 2 Register (2 bytes)
52633756ae2SRobert Mustacchi  */
52733756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_CUR_DEEMPH	0x0001
52833756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_EQ8GT_COMP	0x0002
52933756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_EQ8GT_P1_SUC	0x0004
53033756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_EQ8GT_P2_SUC	0x0008
53133756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_EQ8GT_P3_SUC	0x0010
53233756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_LINK_EQ_REQ	0x0020
53333756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_RETIMER_PRES_DET	0x0040
53433756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_2RETIMER_PRES_DET	0x0080
53533756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_XLINK_RES		0x0300
53633756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_DS_COMP_PRES_MASK	0x7000
53733756ae2SRobert Mustacchi #define	PCIE_LINKSTS2_DRS_MSG_RX	0x8000
538f8d2de6bSjchu 
539f8d2de6bSjchu /*
540f8d2de6bSjchu  * PCI-Express Enhanced Capabilities Link Entry Bit Offsets
541f8d2de6bSjchu  */
542f8d2de6bSjchu #define	PCIE_EXT_CAP			0x100	/* Base Address of Ext Cap */
543f8d2de6bSjchu 
544f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SHIFT		0	/* PCI-e Ext Cap ID */
545f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_MASK		0xFFFF
546f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_SHIFT		16	/* PCI-e Ext Cap Ver */
547f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_MASK		0xF
548f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_SHIFT	20	/* PCI-e Ext Cap Next Ptr */
549f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_MASK	0xFFF
550f8d2de6bSjchu 
551f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_NULL	0x0
5527687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_MAX_PTR		0x3c0	/* max. number of caps */
553f8d2de6bSjchu 
554f8d2de6bSjchu /*
555f8d2de6bSjchu  * PCI-Express Enhanced Capability Identifier Values
556f8d2de6bSjchu  */
557f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_AER		0x1	/* Advanced Error Handling */
558337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VC		0x2	/* Virtual Channel, no MFVC */
559f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SER		0x3	/* Serial Number */
560f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_PWR_BUDGET	0x4	/* Power Budgeting */
561337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_LINK_DECL	0x5	/* RC Link Declaration */
562337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_INT_LINKCTRL	0x6	/* RC Internal Link Control */
563337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_EVNT_CEA	0x7	/* RC Event Collector */
564337fc9e2Sanish 						/* Endpoint Association */
565337fc9e2Sanish #define	PCIE_EXT_CAP_ID_MFVC		0x8	/* Multi-func Virtual Channel */
566337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VC_WITH_MFVC	0x9	/* Virtual Channel w/ MFVC */
567337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RCRB		0xA	/* Root Complex Register Blck */
568337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VS		0xB	/* Vendor Spec Extended Cap */
569337fc9e2Sanish #define	PCIE_EXT_CAP_ID_CAC		0xC	/* Config Access Correlation */
570337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ACS		0xD	/* Access Control Services */
571337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ARI		0xE	/* Alternative Routing ID */
572337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ATS		0xF	/* Address Translation Svcs */
57333756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_SRIOV		0x10	/* Single Root I/O Virt. */
57433756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_MRIOV		0x11	/* Multi Root I/O Virt. */
57533756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_MULTICAST	0x12	/* Multicast Services */
5767687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PGREQ		0x13	/* Page Request */
57733756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_EA		0x14	/* Enhanced Allocation */
57833756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_RESIZE_BAR	0x15	/* Resizable BAR */
57933756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DPA		0x16	/* Dynamic Power Allocation */
58033756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_TPH_REQ		0x17	/* TPH Requester */
58133756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_LTR		0x18	/* Latency Tolerance Report */
58233756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PCIE2		0x19	/* PCI Express Capability 2 */
58333756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PASID		0x1B	/* PASID */
58433756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_LNR		0x1C	/* LNR */
58533756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DPC		0x1D	/* DPC */
58633756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_L1PM		0x1E	/* L1 PM Substrates */
58733756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PTM		0x1F	/* Precision Time Management */
58833756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_FRS		0x21	/* Function Ready Stat. Queue */
58933756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_RTR		0x22	/* Readiness Time Reporting */
59033756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DVS		0x23	/* Designated Vendor-Specific */
5917687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_VFRBAR		0x24	/* VF Resizable BAR */
59233756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DLF		0x25	/* Data Link Feature */
5937687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PL16GT		0x26	/* Physical Layer 16.0 GT/s */
59433756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_LANE_MARGIN	0x27	/* Lane Margining */
59533756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_HIEARCHY_ID	0x28	/* Hierarchy ID */
59633756ae2SRobert Mustacchi #define	PCIE_EXT_CAP_ID_NPEM		0x29	/* Native PCIe Enclosure Mgmt */
5977687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_PL32GT		0x2A	/* Physical Layer 32.0 GT/s */
5987687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_AP		0x2B	/* Alternate Protocol */
5997687d0d8SRobert Mustacchi #define	PCIE_EXT_CAP_ID_SFI		0x2C	/* Sys. Firmware Intermediary */
60093260af4SRobert Mustacchi #define	PCIE_EXT_CAP_ID_SHDW_FUNC	0x2D	/* Shadow Functions */
60193260af4SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DOE		0x2E	/* Data Object Exchange */
60293260af4SRobert Mustacchi #define	PCIE_EXT_CAP_ID_DEV3		0x2F	/* Device 3 */
60393260af4SRobert Mustacchi #define	PCIE_EXT_CAP_ID_IDE		0x30	/* Integrity and Data Encr. */
604e6d654ccSRobert Mustacchi #define	PCIE_EXT_CAP_ID_PL64GT		0x31	/* Physical Layer 64.0 GT/s */
605e6d654ccSRobert Mustacchi #define	PCIE_EXT_CAP_ID_FLIT_LOG	0x32	/* Flit Logging */
606e6d654ccSRobert Mustacchi #define	PCIE_EXT_CAP_ID_FLIT_PERF	0x33	/* Flit Perf. Measurement */
607e6d654ccSRobert Mustacchi #define	PCIE_EXT_CAP_ID_FLIT_ERR	0x34	/* Flit Error Injection */
608ccb3ca45SRobert Mustacchi #define	PCIE_EXT_CAP_ID_SVC		0x35	/* Streamlined Virtual Chan. */
609*d7574e9aSRobert Mustacchi #define	PCIE_EXT_CAP_ID_MMIO_RBL	0x36	/* MMIO Register Block Loc. */
610f8d2de6bSjchu 
611f8d2de6bSjchu /*
612f8d2de6bSjchu  * PCI-Express Advanced Error Reporting Extended Capability Offsets
613f8d2de6bSjchu  */
614f8d2de6bSjchu #define	PCIE_AER_CAP			0x0	/* Enhanced Capability Header */
615f8d2de6bSjchu #define	PCIE_AER_UCE_STS		0x4	/* Uncorrectable Error Status */
616f8d2de6bSjchu #define	PCIE_AER_UCE_MASK		0x8	/* Uncorrectable Error Mask */
617f8d2de6bSjchu #define	PCIE_AER_UCE_SERV		0xc	/* Uncor Error Severity */
618f8d2de6bSjchu #define	PCIE_AER_CE_STS			0x10	/* Correctable Error Status */
619f8d2de6bSjchu #define	PCIE_AER_CE_MASK		0x14	/* Correctable Error Mask */
620f8d2de6bSjchu #define	PCIE_AER_CTL			0x18	/* AER Capability & Control */
621f8d2de6bSjchu #define	PCIE_AER_HDR_LOG		0x1c	/* Header Log */
622f8d2de6bSjchu 
623f8d2de6bSjchu /* Root Ports Only */
624f8d2de6bSjchu #define	PCIE_AER_RE_CMD			0x2c	/* Root Error Command */
625f8d2de6bSjchu #define	PCIE_AER_RE_STS			0x30	/* Root Error Status */
626f8d2de6bSjchu #define	PCIE_AER_CE_SRC_ID		0x34	/* Error Source ID */
627f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID		0x36	/* Error Source ID */
6287687d0d8SRobert Mustacchi #define	PCIE_AER_TLP_PRE_LOG		0x38	/* TLP Prefix Log */
629f8d2de6bSjchu 
630f8d2de6bSjchu /* Bridges Only */
631f8d2de6bSjchu #define	PCIE_AER_SUCE_STS		0x2c	/* Secondary UCE Status */
632f8d2de6bSjchu #define	PCIE_AER_SUCE_MASK		0x30	/* Secondary UCE Mask */
633f8d2de6bSjchu #define	PCIE_AER_SUCE_SERV		0x34	/* Secondary UCE Severity */
634f8d2de6bSjchu #define	PCIE_AER_SCTL			0x38	/* Secondary Cap & Ctl */
635f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG		0x3c	/* Secondary Header Log */
636f8d2de6bSjchu 
637f8d2de6bSjchu /*
638f8d2de6bSjchu  * AER Uncorrectable Error Status/Mask/Severity Register
639f8d2de6bSjchu  */
64000d0963fSdilpreet #define	PCIE_AER_UCE_TRAINING		0x1	/* Training Error Status */
641f8d2de6bSjchu #define	PCIE_AER_UCE_DLP		0x10	/* Data Link Protocol Error */
64200d0963fSdilpreet #define	PCIE_AER_UCE_SD			0x20	/* Link Surprise down */
643f8d2de6bSjchu #define	PCIE_AER_UCE_PTLP		0x1000	/* Poisoned TLP Status */
644f8d2de6bSjchu #define	PCIE_AER_UCE_FCP		0x2000	/* Flow Control Protocol Sts */
645f8d2de6bSjchu #define	PCIE_AER_UCE_TO			0x4000	/* Completion Timeout Status */
646f8d2de6bSjchu #define	PCIE_AER_UCE_CA			0x8000	/* Completer Abort Status */
647f8d2de6bSjchu #define	PCIE_AER_UCE_UC			0x10000	/* Unexpected Completion Sts */
648f8d2de6bSjchu #define	PCIE_AER_UCE_RO			0x20000	/* Receiver Overflow Status */
649f8d2de6bSjchu #define	PCIE_AER_UCE_MTLP		0x40000	/* Malformed TLP Status */
650f8d2de6bSjchu #define	PCIE_AER_UCE_ECRC		0x80000	/* ECRC Error Status */
651f8d2de6bSjchu #define	PCIE_AER_UCE_UR			0x100000 /* Unsupported Req */
652f8d2de6bSjchu #define	PCIE_AER_UCE_BITS		(PCIE_AER_UCE_TRAINING | \
65300d0963fSdilpreet     PCIE_AER_UCE_DLP | PCIE_AER_UCE_SD | PCIE_AER_UCE_PTLP | \
65400d0963fSdilpreet     PCIE_AER_UCE_FCP | PCIE_AER_UCE_TO | PCIE_AER_UCE_CA | \
65500d0963fSdilpreet     PCIE_AER_UCE_UC | PCIE_AER_UCE_RO | PCIE_AER_UCE_MTLP | \
65600d0963fSdilpreet     PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
65700d0963fSdilpreet #define	PCIE_AER_UCE_LOG_BITS		(PCIE_AER_UCE_PTLP | PCIE_AER_UCE_CA | \
65800d0963fSdilpreet     PCIE_AER_UCE_UC | PCIE_AER_UCE_MTLP | PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
659f8d2de6bSjchu 
660f8d2de6bSjchu /*
661f8d2de6bSjchu  * AER Correctable Error Status/Mask Register
662f8d2de6bSjchu  */
663f8d2de6bSjchu #define	PCIE_AER_CE_RECEIVER_ERR	0x1	/* Receiver Error Status */
664f8d2de6bSjchu #define	PCIE_AER_CE_BAD_TLP		0x40	/* Bad TLP Status */
665f8d2de6bSjchu #define	PCIE_AER_CE_BAD_DLLP		0x80	/* Bad DLLP Status */
666f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_ROLLOVER	0x100	/* REPLAY_NUM Rollover Status */
667f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_TO		0x1000	/* Replay Timer Timeout Sts */
66800d0963fSdilpreet #define	PCIE_AER_CE_AD_NFE		0x2000	/* Advisory Non-Fatal Status */
669f8d2de6bSjchu #define	PCIE_AER_CE_BITS		(PCIE_AER_CE_RECEIVER_ERR | \
670f8d2de6bSjchu     PCIE_AER_CE_BAD_TLP | PCIE_AER_CE_BAD_DLLP | PCIE_AER_CE_REPLAY_ROLLOVER | \
671f8d2de6bSjchu     PCIE_AER_CE_REPLAY_TO)
672f8d2de6bSjchu 
673f8d2de6bSjchu /*
674f8d2de6bSjchu  * AER Capability & Control
675f8d2de6bSjchu  */
676f8d2de6bSjchu #define	PCIE_AER_CTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
677f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_CAP	0x20	/* ECRC Generation Capable */
678f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_ENA	0x40	/* ECRC Generation Enable */
679f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_CAP	0x80	/* ECRC Check Capable */
680f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_ENA	0x100	/* ECRC Check Enable */
681f8d2de6bSjchu 
682f8d2de6bSjchu /*
683f8d2de6bSjchu  * AER Root Command Register
684f8d2de6bSjchu  */
685f8d2de6bSjchu #define	PCIE_AER_RE_CMD_CE_REP_EN	0x1	/* Correctable Error Enable */
686f8d2de6bSjchu #define	PCIE_AER_RE_CMD_NFE_REP_EN	0x2	/* Non-Fatal Error Enable */
687f8d2de6bSjchu #define	PCIE_AER_RE_CMD_FE_REP_EN	0x4	/* Fatal Error Enable */
688f8d2de6bSjchu 
689f8d2de6bSjchu /*
690f8d2de6bSjchu  * AER Root Error Status Register
691f8d2de6bSjchu  */
692f8d2de6bSjchu #define	PCIE_AER_RE_STS_CE_RCVD		0x1	/* ERR_COR Received */
693f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_CE_RCVD	0x2	/* Multiple ERR_COR Received */
694f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_NFE_RCVD	0x4	/* FATAL/NON-FATAL Received */
695f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_FE_NFE_RCVD	0x8	/* Multiple ERR_F/NF Received */
696f8d2de6bSjchu #define	PCIE_AER_RE_STS_FIRST_UC_FATAL	0x10	/* First Uncorrectable Fatal */
697f8d2de6bSjchu #define	PCIE_AER_RE_STS_NFE_MSGS_RCVD	0x20	/* Non-Fatal Error Msgs Rcvd */
698f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_MSGS_RCVD	0x40	/* Fatal Error Messages Rcvd */
699f8d2de6bSjchu 
700f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_SHIFT	27	/* Offset of Intr Msg Number */
701f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_MASK	0x1F	/* Intr Msg Number Mask */
702f8d2de6bSjchu 
703f8d2de6bSjchu /*
704f8d2de6bSjchu  * AER Error Source Identification Register
705f8d2de6bSjchu  */
706f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_SHIFT	0	/* ERR_COR Source ID */
707f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_MASK	0xFFFF
708f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_UE_SHIFT	16	/* ERR_FATAL/NONFATAL Src ID */
709eae2e508Skrishnae #define	PCIE_AER_ERR_SRC_ID_UE_MASK	0xFFFF
710f8d2de6bSjchu 
711f8d2de6bSjchu /*
712f8d2de6bSjchu  * AER Secondary Uncorrectable Error Register
713f8d2de6bSjchu  */
714f8d2de6bSjchu #define	PCIE_AER_SUCE_TA_ON_SC		0x1	/* Target Abort on Split Comp */
715f8d2de6bSjchu #define	PCIE_AER_SUCE_MA_ON_SC		0x2	/* Master Abort on Split Comp */
716f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_TA		0x4	/* Received Target Abort */
717f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_MA		0x8	/* Received Master Abort */
718f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_ERR		0x20	/* Unexpected Split Comp Err */
719f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_MSG_DATA_ERR	0x40	/* USC Message Data Error */
720f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_DATA_ERR	0x80	/* Uncorrectable Data Error */
721f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ATTR_ERR	0x100	/* UC Attribute Err */
722f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ADDR_ERR	0x200	/* Uncorrectable Address Err */
723f8d2de6bSjchu #define	PCIE_AER_SUCE_TIMER_EXPIRED	0x400	/* Delayed xtion discard */
724f8d2de6bSjchu #define	PCIE_AER_SUCE_PERR_ASSERT	0x800	/* PERR Assertion Detected */
725f8d2de6bSjchu #define	PCIE_AER_SUCE_SERR_ASSERT	0x1000	/* SERR Assertion Detected */
726f8d2de6bSjchu #define	PCIE_AER_SUCE_INTERNAL_ERR	0x2000	/* Internal Bridge Err Detect */
72700d0963fSdilpreet 
72800d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_LWR_MASK	0xF	/* Lower Command Mask */
72900d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_LWR_SHIFT	4	/* Lower Command Shift */
73000d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_UP_MASK	0xF	/* Upper Command Mask */
73100d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_UP_SHIFT	8	/* Upper Command Shift */
73200d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_ADDR_SHIFT	32	/* Upper Command Shift */
73300d0963fSdilpreet 
734f8d2de6bSjchu #define	PCIE_AER_SUCE_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
735f8d2de6bSjchu     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
736f8d2de6bSjchu     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
737f8d2de6bSjchu     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
738f8d2de6bSjchu     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_TIMER_EXPIRED | \
739f8d2de6bSjchu     PCIE_AER_SUCE_PERR_ASSERT |	PCIE_AER_SUCE_SERR_ASSERT | \
740f8d2de6bSjchu     PCIE_AER_SUCE_INTERNAL_ERR)
74100d0963fSdilpreet #define	PCIE_AER_SUCE_LOG_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
74200d0963fSdilpreet     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
74300d0963fSdilpreet     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
74400d0963fSdilpreet     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
74500d0963fSdilpreet     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_PERR_ASSERT)
746f8d2de6bSjchu 
747f8d2de6bSjchu /*
748f8d2de6bSjchu  * AER Secondary Capability & Control
749f8d2de6bSjchu  */
750f8d2de6bSjchu #define	PCIE_AER_SCTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
751f8d2de6bSjchu 
752f8d2de6bSjchu /*
753f8d2de6bSjchu  * AER Secondary Headers
754f8d2de6bSjchu  * The Secondary Header Logs is 4 DW long.
755f8d2de6bSjchu  * The first 2 DW are split into 3 sections
756f8d2de6bSjchu  * o Transaction Attribute
757f8d2de6bSjchu  * o Transaction Command Lower
758f8d2de6bSjchu  * o Transaction Command Higher
759f8d2de6bSjchu  * The last 2 DW is the Transaction Address
760f8d2de6bSjchu  */
761f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ATTR_MASK	0xFFFFFFFFF
762f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_LOW_MASK	0xF000000000
763f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_HIGH_MASK	0xF0000000000
764f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ADDR_MASK	0xFFFFFFFFFFFFFFFF
765f8d2de6bSjchu 
766f8d2de6bSjchu /*
767665a7fcaSgovinda  * PCI-Express Device Serial Number Capability Offsets.
768665a7fcaSgovinda  */
769665a7fcaSgovinda #define	PCIE_SER_CAP		0x0	/* Enhanced Capability Header */
770665a7fcaSgovinda #define	PCIE_SER_SID_LOWER_DW	0x4	/* Lower 32-bit Serial Number */
771665a7fcaSgovinda #define	PCIE_SER_SID_UPPER_DW	0x8	/* Upper 32-bit Serial Number */
772665a7fcaSgovinda 
773665a7fcaSgovinda /*
77426947304SEvan Yan  * ARI Capability Offsets
77526947304SEvan Yan  */
77626947304SEvan Yan #define	PCIE_ARI_HDR	0x0		/* Enhanced Capability Header */
77726947304SEvan Yan #define	PCIE_ARI_CAP	0x4		/* ARI Capability Register */
77826947304SEvan Yan #define	PCIE_ARI_CTL	0x6		/* ARI Control Register */
77926947304SEvan Yan 
78026947304SEvan Yan #define	PCIE_ARI_CAP_MFVC_FUNC_GRP	0x01
78126947304SEvan Yan #define	PCIE_ARI_CAP_ASC_FUNC_GRP	0x02
78226947304SEvan Yan 
78326947304SEvan Yan #define	PCIE_ARI_CAP_NEXT_FUNC_SHIFT	8
78426947304SEvan Yan #define	PCIE_ARI_CAP_NEXT_FUNC_MASK	0xffff
78526947304SEvan Yan 
78626947304SEvan Yan #define	PCIE_ARI_CTRL_MFVC_FUNC_GRP	0x01
78726947304SEvan Yan #define	PCIE_ARI_CTRL_ASC_FUNC_GRP	0x02
78826947304SEvan Yan 
78926947304SEvan Yan #define	PCIE_ARI_CTRL_FUNC_GRP_SHIFT	4
79026947304SEvan Yan #define	PCIE_ARI_CTRL_FUNC_GRP_MASK	0x7
79126947304SEvan Yan 
79226947304SEvan Yan /*
7935b2c4190SRobert Mustacchi  * PCIe Device 3 Extended Capability Header (PCIE_EXT_CAP_ID_DEV3)
7945b2c4190SRobert Mustacchi  */
7955b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3		0x04
7965b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_DMWR_REQ_ROUTE	0x01
7975b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_14B_TAG_COMP_SUP	0x02
7985b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_14B_TAG_REQ_SUP	0x04
7995b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_SUP	0x08
8005b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_MASK	0x070
8015b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_MIN	0x0	/* < 1us */
8025b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_1us	0x1	/* [ 1us, 2us ) */
8035b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_2us	0x2	/* [ 2us, 4us ) */
8045b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_4us	0x3	/* [ 4us, 8us ) */
8055b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_8us	0x4	/* [ 8us, 16us ) */
8065b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_16us	0x5	/* [ 16us, 32us ) */
8075b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_32us	0x6	/* [ 32us, 64us ] */
8085b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_PORT_L0P_EXIT_LAT_MAX	0x7	/* > 64us */
8095b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_MASK	0x380
8105b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_MIN	0x0	/* < 1us */
8115b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_1us	0x1	/* [ 1us, 2us ) */
8125b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_2us	0x2	/* [ 2us, 4us ) */
8135b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_4us	0x3	/* [ 4us, 8us ) */
8145b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_8us	0x4	/* [ 8us, 16us ) */
8155b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_16us	0x5	/* [ 16us, 32us ) */
8165b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_32us	0x6	/* [ 32us, 64us ] */
8175b2c4190SRobert Mustacchi #define	PCIE_DEVCAP3_RTMR_L0P_EXIT_LAT_MAX	0x7	/* > 64us */
8185b2c4190SRobert Mustacchi 
8195b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3		0x08
8205b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_DMWR_REQ_EN	0x01
8215b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_DMWR_EG_BLOCK	0x02
8225b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_14B_TAG_REQ_EN	0x04
8235b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_L0P_EN		0x08
8245b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_MASK	0x70
8255b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_X1	0x00
8265b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_X2	0x10
8275b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_X4	0x20
8285b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_X8	0x30
8295b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_X16	0x40
8305b2c4190SRobert Mustacchi #define	PCIE_DEVCTL3_TARGET_WIDTH_DYN	0x70
8315b2c4190SRobert Mustacchi 
8325b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3		0x0c
8335b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_MASK	0x07
8345b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_X1	0x00
8355b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_X2	0x01
8365b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_X4	0x02
8375b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_X8	0x03
8385b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_INIT_WIDTH_X16	0x04
8395b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_SEG_CAP		0x08
8405b2c4190SRobert Mustacchi #define	PCIE_DEVSTS3_REM_L0P_SUP	0x10
8415b2c4190SRobert Mustacchi 
8425b2c4190SRobert Mustacchi /*
843f8d2de6bSjchu  * PCI-E Common TLP Header Fields
844f8d2de6bSjchu  */
845f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW	0x00
846f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW	0x20
847f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW_DATA	0x40
848f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW_DATA	0x60
849f8d2de6bSjchu 
850f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEM	0x0
851f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEMLK	0x1
852f8d2de6bSjchu #define	PCIE_TLP_TYPE_IO	0x2
853f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG0	0x4
854f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG1	0x5
855f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSG	0x10
856f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPL	0xA
857f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPLLK	0xB
858f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSI	0x18
859f8d2de6bSjchu 
860f8d2de6bSjchu #define	PCIE_TLP_MRD3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEM)
861f8d2de6bSjchu #define	PCIE_TLP_MRD4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEM)
862f8d2de6bSjchu #define	PCIE_TLP_MRDLK3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEMLK)
863f8d2de6bSjchu #define	PCIE_TLP_MRDLK4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEMLK)
864f8d2de6bSjchu #define	PCIE_TLP_MRDWR3		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MEM)
865f8d2de6bSjchu #define	PCIE_TLP_MRDWR4		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MEM)
866f8d2de6bSjchu #define	PCIE_TLP_IORD		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_IO)
867f8d2de6bSjchu #define	PCIE_TLP_IOWR		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_IO)
868f8d2de6bSjchu #define	PCIE_TLP_CFGRD0		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG0)
869f8d2de6bSjchu #define	PCIE_TLP_CFGWR0		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG0)
870f8d2de6bSjchu #define	PCIE_TLP_CFGRD1		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG1)
871f8d2de6bSjchu #define	PCIE_TLP_CFGWR1		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG1)
872f8d2de6bSjchu #define	PCIE_TLP_MSG		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MSG)
873f8d2de6bSjchu #define	PCIE_TLP_MSGD		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSG)
874f8d2de6bSjchu #define	PCIE_TLP_CPL		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPL)
875f8d2de6bSjchu #define	PCIE_TLP_CPLD		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPL)
876f8d2de6bSjchu #define	PCIE_TLP_CPLLK		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPLLK)
877f8d2de6bSjchu #define	PCIE_TLP_CPLDLK		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPLLK)
878f8d2de6bSjchu #define	PCIE_TLP_MSI32		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MSI)
879f8d2de6bSjchu #define	PCIE_TLP_MSI64		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSI)
880f8d2de6bSjchu 
881f8d2de6bSjchu typedef uint16_t pcie_req_id_t;
882f8d2de6bSjchu 
883f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_SHIFT	8
884f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_MASK	0xFF00
885f8d2de6bSjchu #define	PCIE_REQ_ID_DEV_SHIFT	3
886c85864d8SKrishna Elango #define	PCIE_REQ_ID_DEV_MASK	0x00F8
887f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_SHIFT	0
888f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_MASK	0x0007
88926947304SEvan Yan #define	PCIE_REQ_ID_ARI_FUNC_MASK	0x00FF
890f8d2de6bSjchu 
891bf8fc234Set142600 #define	PCIE_CPL_STS_SUCCESS	0
892bf8fc234Set142600 #define	PCIE_CPL_STS_UR		1
893bf8fc234Set142600 #define	PCIE_CPL_STS_CRS	2
894bf8fc234Set142600 #define	PCIE_CPL_STS_CA		4
895bf8fc234Set142600 
89600d0963fSdilpreet #if defined(_BIT_FIELDS_LTOH)
89700d0963fSdilpreet /*
89800d0963fSdilpreet  * PCI Express little-endian common TLP header format
89900d0963fSdilpreet  */
90000d0963fSdilpreet typedef struct pcie_tlp_hdr {
90100d0963fSdilpreet 	uint32_t	len	:10,
90200d0963fSdilpreet 			rsvd3   :2,
90300d0963fSdilpreet 			attr    :2,
90400d0963fSdilpreet 			ep	:1,
90500d0963fSdilpreet 			td	:1,
90600d0963fSdilpreet 			rsvd2   :4,
90700d0963fSdilpreet 			tc	:3,
90800d0963fSdilpreet 			rsvd1   :1,
90900d0963fSdilpreet 			type    :5,
91000d0963fSdilpreet 			fmt	:2,
91100d0963fSdilpreet 			rsvd0   :1;
91200d0963fSdilpreet } pcie_tlp_hdr_t;
91300d0963fSdilpreet 
91400d0963fSdilpreet typedef struct pcie_mem64 {
91500d0963fSdilpreet 	uint32_t	fbe	:4,
91600d0963fSdilpreet 			lbe	:4,
91700d0963fSdilpreet 			tag	:8,
91800d0963fSdilpreet 			rid	:16;
91900d0963fSdilpreet 	uint32_t	addr1;
92000d0963fSdilpreet 	uint32_t	rsvd0   :2,
92100d0963fSdilpreet 			addr0   :30;
92200d0963fSdilpreet } pcie_mem64_t;
92300d0963fSdilpreet 
92400d0963fSdilpreet typedef struct pcie_memio32 {
92500d0963fSdilpreet 	uint32_t	fbe	:4,
92600d0963fSdilpreet 			lbe	:4,
92700d0963fSdilpreet 			tag	:8,
92800d0963fSdilpreet 			rid	:16;
92900d0963fSdilpreet 	uint32_t	rsvd0   :2,
93000d0963fSdilpreet 			addr0   :30;
93100d0963fSdilpreet } pcie_memio32_t;
93200d0963fSdilpreet 
93300d0963fSdilpreet typedef struct pcie_cfg {
93400d0963fSdilpreet 	uint32_t	fbe	:4,
93500d0963fSdilpreet 			lbe	:4,
93600d0963fSdilpreet 			tag	:8,
93700d0963fSdilpreet 			rid	:16;
93800d0963fSdilpreet 	uint32_t	rsvd1   :2,
93900d0963fSdilpreet 			reg	:6,
94000d0963fSdilpreet 			extreg  :4,
94100d0963fSdilpreet 			rsvd0   :4,
94200d0963fSdilpreet 			func    :3,
94300d0963fSdilpreet 			dev	:5,
94400d0963fSdilpreet 			bus	:8;
94500d0963fSdilpreet } pcie_cfg_t;
94600d0963fSdilpreet 
94700d0963fSdilpreet typedef struct pcie_cpl {
94800d0963fSdilpreet 	uint32_t	bc	:12,
94900d0963fSdilpreet 			bcm	:1,
95000d0963fSdilpreet 			status  :3,
95100d0963fSdilpreet 			cid	:16;
95200d0963fSdilpreet 	uint32_t	laddr   :7,
95300d0963fSdilpreet 			rsvd0   :1,
95400d0963fSdilpreet 			tag	:8,
95500d0963fSdilpreet 			rid	:16;
95600d0963fSdilpreet } pcie_cpl_t;
95700d0963fSdilpreet 
958f8d2de6bSjchu /*
959f8d2de6bSjchu  * PCI-Express Message Request Header
960f8d2de6bSjchu  */
961f8d2de6bSjchu typedef struct pcie_msg {
96200d0963fSdilpreet 	uint32_t	msg_code:8,	/* DW1 */
96300d0963fSdilpreet 			tag	:8,
96400d0963fSdilpreet 			rid	:16;
96500d0963fSdilpreet 	uint32_t	unused[2];	/* DW 2 & 3 */
96600d0963fSdilpreet } pcie_msg_t;
96700d0963fSdilpreet 
96800d0963fSdilpreet #elif defined(_BIT_FIELDS_HTOL)
96900d0963fSdilpreet /*
97000d0963fSdilpreet  * PCI Express big-endian common TLP header format
97100d0963fSdilpreet  */
97200d0963fSdilpreet typedef struct pcie_tlp_hdr {
97300d0963fSdilpreet 	uint32_t	rsvd0	:1,
97400d0963fSdilpreet 			fmt	:2,
97500d0963fSdilpreet 			type	:5,
97600d0963fSdilpreet 			rsvd1	:1,
97700d0963fSdilpreet 			tc	:3,
97800d0963fSdilpreet 			rsvd2	:4,
979f8d2de6bSjchu 			td	:1,
980f8d2de6bSjchu 			ep	:1,
981f8d2de6bSjchu 			attr	:2,
98200d0963fSdilpreet 			rsvd3	:2,
983f8d2de6bSjchu 			len	:10;
98400d0963fSdilpreet } pcie_tlp_hdr_t;
98500d0963fSdilpreet 
98600d0963fSdilpreet typedef struct pcie_mem64 {
98700d0963fSdilpreet 	uint32_t	rid	:16,
98800d0963fSdilpreet 			tag	:8,
98900d0963fSdilpreet 			lbe	:4,
99000d0963fSdilpreet 			fbe	:4;
99100d0963fSdilpreet 	uint32_t	addr1;
99200d0963fSdilpreet 	uint32_t	addr0	:30,
99300d0963fSdilpreet 			rsvd0	:2;
99400d0963fSdilpreet } pcie_mem64_t;
99500d0963fSdilpreet 
99600d0963fSdilpreet typedef struct pcie_memio32 {
99700d0963fSdilpreet 	uint32_t	rid	:16,
99800d0963fSdilpreet 			tag	:8,
99900d0963fSdilpreet 			lbe	:4,
100000d0963fSdilpreet 			fbe	:4;
100100d0963fSdilpreet 	uint32_t	addr0	:30,
100200d0963fSdilpreet 			rsvd0	:2;
100300d0963fSdilpreet } pcie_memio32_t;
100400d0963fSdilpreet 
100500d0963fSdilpreet typedef struct pcie_cfg {
100600d0963fSdilpreet 	uint32_t	rid	:16,
100700d0963fSdilpreet 			tag	:8,
100800d0963fSdilpreet 			lbe	:4,
100900d0963fSdilpreet 			fbe	:4;
101000d0963fSdilpreet 	uint32_t	bus	:8,
101100d0963fSdilpreet 			dev	:5,
101200d0963fSdilpreet 			func	:3,
101300d0963fSdilpreet 			rsvd0	:4,
101400d0963fSdilpreet 			extreg	:4,
101500d0963fSdilpreet 			reg	:6,
101600d0963fSdilpreet 			rsvd1	:2;
101700d0963fSdilpreet } pcie_cfg_t;
101800d0963fSdilpreet 
101900d0963fSdilpreet typedef struct pcie_cpl {
102000d0963fSdilpreet 	uint32_t	cid	:16,
102100d0963fSdilpreet 			status	:3,
102200d0963fSdilpreet 			bcm	:1,
102300d0963fSdilpreet 			bc	:12;
102400d0963fSdilpreet 	uint32_t	rid	:16,
102500d0963fSdilpreet 			tag	:8,
102600d0963fSdilpreet 			rsvd0	:1,
102700d0963fSdilpreet 			laddr	:7;
102800d0963fSdilpreet } pcie_cpl_t;
102900d0963fSdilpreet 
103000d0963fSdilpreet /*
103100d0963fSdilpreet  * PCI-Express Message Request Header
103200d0963fSdilpreet  */
103300d0963fSdilpreet typedef struct pcie_msg {
1034f8d2de6bSjchu 	uint32_t	rid	:16,	/* DW1 */
1035f8d2de6bSjchu 			tag	:8,
1036f8d2de6bSjchu 			msg_code:8;
1037f8d2de6bSjchu 	uint32_t	unused[2];	/* DW 2 & 3 */
1038f8d2de6bSjchu } pcie_msg_t;
103900d0963fSdilpreet #else
104000d0963fSdilpreet #error "bit field not defined"
104100d0963fSdilpreet #endif
1042f8d2de6bSjchu 
1043f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_COR		0x30
1044f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_NONFATAL	0x31
1045f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_FATAL		0x33
1046f8d2de6bSjchu 
1047f8d2de6bSjchu #ifdef	__cplusplus
1048f8d2de6bSjchu }
1049f8d2de6bSjchu #endif
1050f8d2de6bSjchu 
1051f8d2de6bSjchu #endif	/* _SYS_PCIE_H */
1052