xref: /titanic_52/usr/src/uts/common/sys/pcie.h (revision 269473047d747f7815af570197e4ef7322d3632c)
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  */
25f8d2de6bSjchu 
26f8d2de6bSjchu #ifndef	_SYS_PCIE_H
27f8d2de6bSjchu #define	_SYS_PCIE_H
28f8d2de6bSjchu 
29f8d2de6bSjchu #ifdef	__cplusplus
30f8d2de6bSjchu extern "C" {
31f8d2de6bSjchu #endif
32f8d2de6bSjchu 
33f8d2de6bSjchu #include <sys/pci.h>
34f8d2de6bSjchu 
35f8d2de6bSjchu /*
3670025d76Sjohnny  * PCI Express capability registers in PCI configuration space relative to
3770025d76Sjohnny  * the PCI Express Capability structure.
38f8d2de6bSjchu  */
39f8d2de6bSjchu #define	PCIE_CAP_ID			PCI_CAP_ID
40f8d2de6bSjchu #define	PCIE_CAP_NEXT_PTR		PCI_CAP_NEXT_PTR
41f8d2de6bSjchu #define	PCIE_PCIECAP			0x02	/* PCI-e Capability Reg */
42f8d2de6bSjchu #define	PCIE_DEVCAP			0x04	/* Device Capability */
43f8d2de6bSjchu #define	PCIE_DEVCTL			0x08	/* Device Control */
44f8d2de6bSjchu #define	PCIE_DEVSTS			0x0A	/* Device Status */
4592e1ac0dSjj156685 #define	PCIE_LINKCAP			0x0C	/* Link Capability */
4692e1ac0dSjj156685 #define	PCIE_LINKCTL			0x10	/* Link Control */
4792e1ac0dSjj156685 #define	PCIE_LINKSTS			0x12	/* Link Status */
48f8d2de6bSjchu #define	PCIE_SLOTCAP			0x14	/* Slot Capability */
49f8d2de6bSjchu #define	PCIE_SLOTCTL			0x18	/* Slot Control */
50f8d2de6bSjchu #define	PCIE_SLOTSTS			0x1A	/* Slot Status */
51f8d2de6bSjchu #define	PCIE_ROOTCTL			0x1C	/* Root Control */
52f8d2de6bSjchu #define	PCIE_ROOTSTS			0x20	/* Root Status */
53*26947304SEvan Yan #define	PCIE_DEVCAP2			0x24	/* Device Capability 2 */
54*26947304SEvan Yan #define	PCIE_DEVCTL2			0x28	/* Device Control 2 */
55*26947304SEvan Yan #define	PCIE_DEVSTS2			0x2A	/* Device Status 2 */
56*26947304SEvan Yan #define	PCIE_LINKCAP2			0x2C	/* Link Capability 2 */
57*26947304SEvan Yan #define	PCIE_LINKCTL2			0x30	/* Link Control 2 */
58*26947304SEvan Yan #define	PCIE_LINKSTS2			0x32	/* Link Status 2 */
59*26947304SEvan Yan #define	PCIE_SLOTCAP2			0x34	/* Slot Capability 2 */
60*26947304SEvan Yan #define	PCIE_SLOTCTL2			0x38	/* Slot Control 2 */
61*26947304SEvan Yan #define	PCIE_SLOTSTS2			0x3A	/* Slot Status 2 */
62f8d2de6bSjchu 
63f8d2de6bSjchu /*
6470025d76Sjohnny  * PCI-Express Config Space size
6570025d76Sjohnny  */
6670025d76Sjohnny #define	PCIE_CONF_HDR_SIZE	4096	/* PCIe configuration header size */
6770025d76Sjohnny 
6870025d76Sjohnny /*
6970025d76Sjohnny  * PCI-Express Capabilities Register (2 bytes)
70f8d2de6bSjchu  */
71f8d2de6bSjchu #define	PCIE_PCIECAP_VER_1_0		0x1	/* PCI-E spec 1.0 */
72*26947304SEvan Yan #define	PCIE_PCIECAP_VER_2_0		0x2	/* PCI-E spec 2.0 */
73f8d2de6bSjchu #define	PCIE_PCIECAP_VER_MASK		0xF	/* Version Mask */
74f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE_DEV	0x00	/* PCI-E Endpont Device */
75c85864d8SKrishna Elango #define	PCIE_PCIECAP_DEV_TYPE_PCI_DEV	0x10	/* "Leg PCI" Endpont Device */
76f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_ROOT	0x40	/* Root Port of Root Complex */
77f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_UP	0x50	/* Upstream Port of Switch */
78f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_DOWN	0x60	/* Downstream Port of Switch */
79f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE2PCI	0x70	/* PCI-E to PCI Bridge */
80f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCI2PCIE	0x80	/* PCI to PCI-E Bridge */
81eae2e508Skrishnae #define	PCIE_PCIECAP_DEV_TYPE_RC_IEP	0x90	/* RootComplex Integrated Dev */
82eae2e508Skrishnae #define	PCIE_PCIECAP_DEV_TYPE_RC_EC	0xA0	/* RootComplex Evt Collector */
83f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_MASK	0xF0	/* Device/Port Type Mask */
84f8d2de6bSjchu #define	PCIE_PCIECAP_SLOT_IMPL		0x100	/* Slot Impl vs Integrated */
853221df98SKrishna Elango #define	PCIE_PCIECAP_INT_MSG_NUM	0x3E00	/* Interrupt Message Number */
86f8d2de6bSjchu 
87f8d2de6bSjchu /*
8870025d76Sjohnny  * Device Capabilities Register (4 bytes)
89f8d2de6bSjchu  */
90f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_128	0x0
91f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_256	0x1
92f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_512	0x2
93f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_1024	0x3
94f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_2048	0x4
95f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_4096	0x5
96f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_MASK	0x7	/* Max Payload Size Supported */
97f8d2de6bSjchu 
98f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_NONE	0x00	/* No Function # bits used */
99f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_ONE	0x08	/* First most sig. bit used */
100f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_TWO	0x10	/* First 2 most sig bit used */
101f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_THREE	0x18	/* All 3 bits used */
102f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_MASK	0x18	/* Phantom Func Supported */
103f8d2de6bSjchu 
104f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_5BIT	0x00	/* 5-Bit Tag Field Supported */
105f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_8BIT	0x20	/* 8-Bit Tag Field Supported */
106f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_MASK	0x20	/* Ext. Tag Field Supported */
107f8d2de6bSjchu 
108f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MIN	0x000	/* < 64 ns */
109f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_64ns	0x040	/* 64 ns - 128 ns */
110f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_128ns	0x080	/* 128 ns - 256 ns */
111f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_256ns	0x0C0	/* 256 ns - 512 ns */
112f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_512ns	0x100	/* 512 ns - 1 us */
113f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_1us	0x140	/* 1 us - 2 us */
114f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_2us	0x180	/* 2 us - 4 us */
115f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MAX	0x1C0	/* > 4 us */
116f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MASK	0x1C0	/* EP L0s Accetable Latency */
117f8d2de6bSjchu 
118f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MIN	0x000	/* < 1 us */
119f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_1us	0x140	/* 1 us - 2 us */
120f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_2us	0x180	/* 2 us - 4 us */
121f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_4us	0x140	/* 4 us - 8 us */
122f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_8us	0x180	/* 8 us - 16 us */
123f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_16us	0x140	/* 16 us - 32 us */
124f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_32us	0x180	/* 32 us - 64 us */
125f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MAX	0x1C0	/* > 64 us */
126f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MASK	0x700	/* EP L1 Accetable Latency */
127f8d2de6bSjchu 
128f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_BUTTON		0x1000	/* Attention Button Present */
129f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_INDICATOR	0x2000	/* Attn Indicator Present */
130f8d2de6bSjchu #define	PCIE_DEVCAP_PWR_INDICATOR	0x4000	/* Power Indicator Present */
131f8d2de6bSjchu 
132337fc9e2Sanish #define	PCIE_DEVCAP_ROLE_BASED_ERR_REP	0x8000	/* Role Based Error Reporting */
133337fc9e2Sanish 
134f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_SHIFT	18	/* Power Limit Value Shift */
135f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_MASK	0xFF	/* Power Limit Value Mask */
136f8d2de6bSjchu 
137f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1	0x0000000	/* 1x Scale */
138f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_10	0x4000000	/* 0.1x Scale */
139f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_100	0x8000000	/* 0.01x Scale */
140f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1000	0xC000000	/* 0.001x Scale */
141f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_MASK	0xC000000	/* Power Limit Scale */
142f8d2de6bSjchu 
143f8d2de6bSjchu /*
14470025d76Sjohnny  * Device Control Register (2 bytes)
145f8d2de6bSjchu  */
146f8d2de6bSjchu #define	PCIE_DEVCTL_CE_REPORTING_EN	0x1	/* Correctable Error Enable */
147f8d2de6bSjchu #define	PCIE_DEVCTL_NFE_REPORTING_EN	0x2	/* Non-Fatal Error Enable */
148f8d2de6bSjchu #define	PCIE_DEVCTL_FE_REPORTING_EN	0x4	/* Fatal Error Enable */
149f8d2de6bSjchu #define	PCIE_DEVCTL_UR_REPORTING_EN	0x8	/* Unsupported Request Enable */
15095ad88f0Sraghuram #define	PCIE_DEVCTL_ERR_MASK		0xF	/* All of the above bits */
15195ad88f0Sraghuram 
152f8d2de6bSjchu #define	PCIE_DEVCTL_RO_EN		0x10	/* Enable Relaxed Ordering */
153f8d2de6bSjchu 
154f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_128	0x00
155f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_256	0x20
156f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_512	0x40
157f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_1024	0x60
158f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_2048	0x80
159f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_4096	0xA0
160f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_MASK	0xE0	/* Max_Payload_Size */
1610114761dSAlan Adamson, SD OSSD #define	PCIE_DEVCTL_MAX_PAYLOAD_SHIFT	0x5
162f8d2de6bSjchu 
163f8d2de6bSjchu #define	PCIE_DEVCTL_EXT_TAG_FIELD_EN	0x100	/* Extended Tag Field Enable */
164f8d2de6bSjchu #define	PCIE_DEVCTL_PHTM_FUNC_EN	0x200	/* Phantom Functions Enable */
165f8d2de6bSjchu #define	PCIE_DEVCTL_AUX_POWER_PM_EN	0x400	/* Auxiliary Power PM Enable */
166f8d2de6bSjchu #define	PCIE_DEVCTL_ENABLE_NO_SNOOP	0x800	/* Enable No Snoop */
167f8d2de6bSjchu 
16895ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_128	0x0000
16995ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_256	0x1000
17095ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_512	0x2000
17195ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_1024	0x3000
17295ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_2048	0x4000
17395ad88f0Sraghuram #define	PCIE_DEVCTL_MAX_READ_REQ_4096	0x5000
174f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_MASK	0x7000	/* Max_Read_Request_Size */
1750114761dSAlan Adamson, SD OSSD #define	PCIE_DEVCTL_MAX_READ_REQ_SHIFT	0xC
176f8d2de6bSjchu 
177f8d2de6bSjchu /*
17870025d76Sjohnny  * Device Status Register (2 bytes)
179f8d2de6bSjchu  */
180f8d2de6bSjchu #define	PCIE_DEVSTS_CE_DETECTED		0x1	/* Correctable Error Detected */
181f8d2de6bSjchu #define	PCIE_DEVSTS_NFE_DETECTED	0x2	/* Non Fatal Error Detected */
182f8d2de6bSjchu #define	PCIE_DEVSTS_FE_DETECTED		0x4	/* Fatal Error Detected */
183f8d2de6bSjchu #define	PCIE_DEVSTS_UR_DETECTED		0x8	/* Unsupported Req Detected */
184f8d2de6bSjchu #define	PCIE_DEVSTS_AUX_POWER		0x10	/* AUX Power Detected */
185f8d2de6bSjchu #define	PCIE_DEVSTS_TRANS_PENDING	0x20	/* Transactions Pending */
186f8d2de6bSjchu 
187f8d2de6bSjchu /*
18870025d76Sjohnny  * Link Capability Register (4 bytes)
189f8d2de6bSjchu  */
190f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_SPEED_2_5	0x1	/* 2.5 Gb/s Speed */
191f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_SPEED_MASK	0xF	/* Maximum Link Speed */
192f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X1	0x010
193f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X2	0x020
194f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X4	0x040
195f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X8	0x080
196f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X12	0x0C0
197f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X16	0x100
198f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X32	0x200
199f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_MASK	0x3f0	/* Maximum Link Width */
200f8d2de6bSjchu 
201f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S	0x400	/* L0s Entry Supported */
202f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S_L1	0xC00	/* L0s abd L1 Supported */
203f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_MASK	0xC00	/* ASPM Support */
204f8d2de6bSjchu 
205f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MIN	0x0000	/* < 64 ns */
206f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_64ns	0x1000	/* 64 ns - 128 ns */
207f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_128ns	0x2000	/* 128 ns - 256 ns */
208f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_256ns	0x3000	/* 256 ns - 512 ns */
209f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_512ns	0x4000	/* 512 ns - 1 us */
210f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_1us	0x5000	/* 1 us - 2 us */
211f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_2us	0x6000	/* 2 us - 4 us */
212f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MAX	0x7000	/* > 4 us */
213f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MASK	0x7000	/* L0s Exit Latency */
214f8d2de6bSjchu 
215f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MIN	0x00000	/* < 1 us */
216f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_1us	0x08000	/* 1 us - 2 us */
217f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_2us	0x10000	/* 2 us - 4 us */
218f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_4us	0x18000	/* 4 us - 8 us */
219f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_8us	0x20000	/* 8 us - 16 us */
220f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_16us	0x28000	/* 16 us - 32 us */
221f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_32us	0x30000	/* 32 us - 64 us */
222f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MAX	0x38000	/* > 64 us */
223f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MASK	0x38000	/* L1 Exit Latency */
224f8d2de6bSjchu 
22570025d76Sjohnny /* PCIe v1.1 spec based */
22670025d76Sjohnny #define	PCIE_LINKCAP_DLL_ACTIVE_REP_CAPABLE	0x100000    /* DLL Active */
22770025d76Sjohnny 							    /* Capable bit */
22870025d76Sjohnny 
229c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER	0xFF000000	/* Port Number */
230c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER_SHIFT	24	/* Port Number Shift */
231c85864d8SKrishna Elango #define	PCIE_LINKCAP_PORT_NUMBER_MASK	0xFF	/* Port Number Mask */
232f8d2de6bSjchu 
233f8d2de6bSjchu /*
23470025d76Sjohnny  * Link Control Register (2 bytes)
235f8d2de6bSjchu  */
236f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_DIS	0x0	/* ASPM Disable */
237f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S	0x1	/* ASPM L0s only */
238f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L1	0x2	/* ASPM L1 only */
239f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S_L1	0x3	/* ASPM L0s and L1 only */
240f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_MASK	0x3	/* ASPM Control */
241f8d2de6bSjchu 
242f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_64_BYTE	0x0	/* 64 Byte */
243f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_128_BYTE	0x8	/* 128 Byte */
244f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_MASK		0x8	/* Read Completion Boundary */
245f8d2de6bSjchu 
246f8d2de6bSjchu #define	PCIE_LINKCTL_LINK_DISABLE	0x10	/* Link Disable */
247f8d2de6bSjchu #define	PCIE_LINKCTL_RETRAIN_LINK	0x20	/* Retrain Link */
248f8d2de6bSjchu #define	PCIE_LINKCTL_COMMON_CLK_CFG	0x40	/* Common Clock Configuration */
249f8d2de6bSjchu #define	PCIE_LINKCTL_EXT_SYNCH		0x80	/* Extended Synch */
250f8d2de6bSjchu 
251f8d2de6bSjchu /*
25270025d76Sjohnny  * Link Status Register (2 bytes)
253f8d2de6bSjchu  */
254f8d2de6bSjchu #define	PCIE_LINKSTS_SPEED_2_5		0x1	/* Link Speed */
255f8d2de6bSjchu #define	PCIE_LINKSTS_SPEED_MASK		0xF	/* Link Speed */
256f8d2de6bSjchu 
257f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X1	0x010
258f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X2	0x020
259f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X4	0x040
260f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X8	0x080
261f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X12	0x0C0
262f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X16	0x100
263f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X32	0x200
264f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_MASK	0x3F0	/* Negotiated Link Width */
265f8d2de6bSjchu 
266f8d2de6bSjchu #define	PCIE_LINKSTS_TRAINING_ERROR	0x400	/* Training Error */
267f8d2de6bSjchu #define	PCIE_LINKSTS_LINK_TRAINING	0x800	/* Link Training */
268f8d2de6bSjchu #define	PCIE_LINKSTS_SLOT_CLK_CFG	0x1000	/* Slot Clock Configuration */
269f8d2de6bSjchu 
270f94c6026Sjj156685 /* PCIe v1.1 spec based */
271f94c6026Sjj156685 #define	PCIE_LINKSTS_DLL_LINK_ACTIVE	0x2000	/* DLL Link Active */
272f94c6026Sjj156685 
273f8d2de6bSjchu /*
27470025d76Sjohnny  * Slot Capability Register (4 bytes)
275f8d2de6bSjchu  */
276f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_BUTTON	0x1	/* Attention Button Present */
277f8d2de6bSjchu #define	PCIE_SLOTCAP_POWER_CONTROLLER	0x2	/* Power Controller Present */
278f8d2de6bSjchu #define	PCIE_SLOTCAP_MRL_SENSOR		0x4	/* MRL Sensor Present */
279f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_INDICATOR	0x8	/* Attn Indicator Present */
280f8d2de6bSjchu #define	PCIE_SLOTCAP_PWR_INDICATOR	0x10	/* Power Indicator Present */
281f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_SURPRISE	0x20	/* Hot-Plug Surprise */
282f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_CAPABLE		0x40	/* Hot-Plug Capable */
283f8d2de6bSjchu 
284f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_SHIFT	7	/* Slot Pwr Limit Value Shift */
285f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_MASK	0xFF	/* Slot Pwr Limit Value */
286f8d2de6bSjchu 
287f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1	0x00000	/* 1x Scale */
288f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_10	0x08000	/* 0.1x Scale */
289f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_100	0x10000	/* 0.01x Scale */
290f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1000	0x18000	/* 0.001x Scale */
291f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_MASK	0x18000	/* Slot Power Limit Scale */
29270025d76Sjohnny #define	PCIE_SLOTCAP_EMI_LOCK_PRESENT	0x20000 /* EMI Lock Present */
29370025d76Sjohnny #define	PCIE_SLOTCAP_NO_CMD_COMP_SUPP	0x40000 /* No Command Comp. Supported */
294f8d2de6bSjchu 
295f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT	19	/* Physical Slot Num Shift */
296f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_MASK	0x1FFF	/* Physical Slot Num Mask */
297f8d2de6bSjchu 
29870025d76Sjohnny #define	PCIE_SLOTCAP_PHY_SLOT_NUM(reg) \
29970025d76Sjohnny 	    (((reg) >> PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT) & \
30070025d76Sjohnny 	    PCIE_SLOTCAP_PHY_SLOT_NUM_MASK)
30170025d76Sjohnny 
302f8d2de6bSjchu /*
30370025d76Sjohnny  * Slot Control Register (2 bytes)
304f8d2de6bSjchu  */
305f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_BTN_EN	0x1	/* Attn Button Pressed Enable */
306f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_FAULT_EN	0x2	/* Pwr Fault Detected Enable */
307f8d2de6bSjchu #define	PCIE_SLOTCTL_MRL_SENSOR_EN	0x4	/* MRL Sensor Changed Enable */
308f8d2de6bSjchu #define	PCIE_SLOTCTL_PRESENCE_CHANGE_EN	0x8	/* Presence Detect Changed En */
309f8d2de6bSjchu #define	PCIE_SLOTCTL_CMD_INTR_EN	0x10	/* CMD Completed Interrupt En */
310f8d2de6bSjchu #define	PCIE_SLOTCTL_HP_INTR_EN		0x20	/* Hot-Plug Interrupt Enable */
31170025d76Sjohnny #define	PCIE_SLOTCTL_PWR_CONTROL	0x0400	/* Power controller Control */
31270025d76Sjohnny #define	PCIE_SLOTCTL_EMI_LOCK_CONTROL	0x0800	/* EMI Lock control */
313f94c6026Sjj156685 #define	PCIE_SLOTCTL_DLL_STATE_EN	0x1000	/* DLL State Changed En */
31470025d76Sjohnny #define	PCIE_SLOTCTL_ATTN_INDICATOR_MASK 0x00C0	/* Attn Indicator mask */
31570025d76Sjohnny #define	PCIE_SLOTCTL_PWR_INDICATOR_MASK	0x0300	/* Power Indicator mask */
316*26947304SEvan Yan #define	PCIE_SLOTCTL_INTR_MASK		0x103f	/* Supported intr mask */
317f8d2de6bSjchu 
31870025d76Sjohnny /* State values for the Power and Attention Indicators */
31970025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_ON		0x1	/* indicator ON */
32070025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_BLINK	0x2	/* indicator BLINK */
32170025d76Sjohnny #define	PCIE_SLOTCTL_INDICATOR_STATE_OFF	0x3	/* indicator OFF */
322f8d2de6bSjchu 
323f8d2de6bSjchu /*
32470025d76Sjohnny  * Macros to set/get the state of Power and Attention Indicators
32570025d76Sjohnny  * in the PCI Express Slot Control Register.
32670025d76Sjohnny  */
32770025d76Sjohnny #define	pcie_slotctl_pwr_indicator_get(reg)	\
32870025d76Sjohnny 	(((reg) & PCIE_SLOTCTL_PWR_INDICATOR_MASK) >> 8)
32970025d76Sjohnny #define	pcie_slotctl_attn_indicator_get(ctrl)	\
33070025d76Sjohnny 	(((ctrl) & PCIE_SLOTCTL_ATTN_INDICATOR_MASK) >> 6)
33170025d76Sjohnny #define	pcie_slotctl_attn_indicator_set(ctrl, v)\
33270025d76Sjohnny 	(((ctrl) & ~PCIE_SLOTCTL_ATTN_INDICATOR_MASK) | ((v) << 6))
33370025d76Sjohnny #define	pcie_slotctl_pwr_indicator_set(ctrl, v)\
33470025d76Sjohnny 	(((ctrl) & ~PCIE_SLOTCTL_PWR_INDICATOR_MASK) | ((v) << 8))
33570025d76Sjohnny 
33670025d76Sjohnny /*
33770025d76Sjohnny  * Slot Status register (2 bytes)
338f8d2de6bSjchu  */
339f8d2de6bSjchu #define	PCIE_SLOTSTS_ATTN_BTN_PRESSED	0x1	/* Attention Button Pressed */
340f8d2de6bSjchu #define	PCIE_SLOTSTS_PWR_FAULT_DETECTED	0x2	/* Power Fault Detected */
341f8d2de6bSjchu #define	PCIE_SLOTSTS_MRL_SENSOR_CHANGED	0x4	/* MRL Sensor Changed */
342f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_CHANGED	0x8	/* Presence Detect Changed */
343f8d2de6bSjchu #define	PCIE_SLOTSTS_COMMAND_COMPLETED	0x10	/* Command Completed */
34470025d76Sjohnny #define	PCIE_SLOTSTS_MRL_SENSOR_OPEN	0x20	/* MRL Sensor Open */
345f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_DETECTED	0x40	/* Card Present in slot */
34670025d76Sjohnny #define	PCIE_SLOTSTS_EMI_LOCK_SET	0x0080	/* EMI Lock set */
34770025d76Sjohnny #define	PCIE_SLOTSTS_DLL_STATE_CHANGED	0x0100	/* DLL State Changed */
348*26947304SEvan Yan #define	PCIE_SLOTSTS_STATUS_EVENTS	0x11f	/* Supported events */
349f8d2de6bSjchu 
350f8d2de6bSjchu /*
35170025d76Sjohnny  * Root Control Register (2 bytes)
352f8d2de6bSjchu  */
353f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_CE_EN	0x1	/* Sys Err on Cor Err Enable */
354f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_NFE_EN	0x2	/* Sys Err on NF Err Enable */
35570025d76Sjohnny #define	PCIE_ROOTCTL_SYS_ERR_ON_FE_EN	0x4	/* Sys Err on Fatal Err En */
35670025d76Sjohnny #define	PCIE_ROOTCTL_PME_INTERRUPT_EN	0x8	/* PME Interrupt Enable */
357f8d2de6bSjchu 
358f8d2de6bSjchu /*
35970025d76Sjohnny  * Root Status Register (4 bytes)
360f8d2de6bSjchu  */
361f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_SHIFT	0	/* PME Requestor ID */
362f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_MASK	0xFFFF	/* PME Requestor ID */
363f8d2de6bSjchu 
364f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_STATUS		0x10000	/* PME Status */
365f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_PENDING	0x20000	/* PME Pending */
366f8d2de6bSjchu 
367*26947304SEvan Yan /*
368*26947304SEvan Yan  * Device Capabilities 2 Register (4 bytes)
369*26947304SEvan Yan  */
370*26947304SEvan Yan #define	PCIE_DEVCAP2_COM_TO_RANGE_MASK	0xF
371*26947304SEvan Yan #define	PCIE_DEVCAP2_COM_TO_DISABLE	0x10
372*26947304SEvan Yan #define	PCIE_DEVCAP2_ARI_FORWARD	0x20
373*26947304SEvan Yan #define	PCIE_DEVCAP2_ATOMICOP_ROUTING	0x40
374*26947304SEvan Yan #define	PCIE_DEVCAP2_32_ATOMICOP_COMPL  0x80
375*26947304SEvan Yan #define	PCIE_DEVCAP2_64_ATOMICOP_COMPL  0x100
376*26947304SEvan Yan #define	PCIE_DEVCAP2_128_CAS_COMPL	0x200
377*26947304SEvan Yan #define	PCIE_DEVCAP2_NO_RO_PR_PR_PASS	0x400
378*26947304SEvan Yan #define	PCIE_DEVCAP2_LTR_MECH		0x800
379*26947304SEvan Yan #define	PCIE_DEVCAP2_TPH_COMP_SHIFT	12
380*26947304SEvan Yan #define	PCIE_DEVCAP2_TPH_COMP_MASK	0x3
381*26947304SEvan Yan #define	PCIE_DEVCAP2_EXT_FMT_FIELD	0x100000
382*26947304SEvan Yan #define	PCIE_DEVCAP2_END_END_TLP_PREFIX	0x200000
383*26947304SEvan Yan #define	PCIE_DEVCAP2_MAX_END_END_SHIFT	22
384*26947304SEvan Yan #define	PCIE_DEVCAP2_MAX_END_END_MASK	0x3
385*26947304SEvan Yan 
386*26947304SEvan Yan /*
387*26947304SEvan Yan  * Device Control 2 Register (2 bytes)
388*26947304SEvan Yan  */
389*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_0	0x0
390*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_1	0x1
391*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_2	0x2
392*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_3	0x5
393*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_4	0x6
394*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_5	0x9
395*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_6	0xa
396*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_7	0xd
397*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_RANGE_8	0xe
398*26947304SEvan Yan #define	PCIE_DEVCTL2_COM_TO_DISABLE	0x10
399*26947304SEvan Yan #define	PCIE_DEVCTL2_ARI_FORWARD_EN	0x20
400*26947304SEvan Yan #define	PCIE_DEVCTL2_ATOMICOP_REQ_EN	0x40
401*26947304SEvan Yan #define	PCIE_DEVCTL2_ATOMICOP_EGRS_BLK	0x80
402*26947304SEvan Yan #define	PCIE_DEVCTL2_IDO_REQ_EN		0x100
403*26947304SEvan Yan #define	PCIE_DEVCTL2_IDO_COMPL_EN	0x200
404*26947304SEvan Yan #define	PCIE_DEVCTL2_LTR_MECH_EN	0x400
405*26947304SEvan Yan #define	PCIE_DEVCTL2_END_END_TLP_PREFIX	0x8000
406*26947304SEvan Yan 
407*26947304SEvan Yan 
408*26947304SEvan Yan 
409*26947304SEvan Yan 
410f8d2de6bSjchu 
411f8d2de6bSjchu /*
412f8d2de6bSjchu  * PCI-Express Enhanced Capabilities Link Entry Bit Offsets
413f8d2de6bSjchu  */
414f8d2de6bSjchu #define	PCIE_EXT_CAP			0x100	/* Base Address of Ext Cap */
415f8d2de6bSjchu 
416f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SHIFT		0	/* PCI-e Ext Cap ID */
417f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_MASK		0xFFFF
418f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_SHIFT		16	/* PCI-e Ext Cap Ver */
419f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_MASK		0xF
420f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_SHIFT	20	/* PCI-e Ext Cap Next Ptr */
421f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_MASK	0xFFF
422f8d2de6bSjchu 
423f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_NULL	0x0
424f8d2de6bSjchu 
425f8d2de6bSjchu /*
426f8d2de6bSjchu  * PCI-Express Enhanced Capability Identifier Values
427f8d2de6bSjchu  */
428f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_AER		0x1	/* Advanced Error Handling */
429337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VC		0x2	/* Virtual Channel, no MFVC */
430f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SER		0x3	/* Serial Number */
431f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_PWR_BUDGET	0x4	/* Power Budgeting */
432337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_LINK_DECL	0x5	/* RC Link Declaration */
433337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_INT_LINKCTRL	0x6	/* RC Internal Link Control */
434337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RC_EVNT_CEA	0x7	/* RC Event Collector */
435337fc9e2Sanish 						/* Endpoint Association */
436337fc9e2Sanish #define	PCIE_EXT_CAP_ID_MFVC		0x8	/* Multi-func Virtual Channel */
437337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VC_WITH_MFVC	0x9	/* Virtual Channel w/ MFVC */
438337fc9e2Sanish #define	PCIE_EXT_CAP_ID_RCRB		0xA	/* Root Complex Register Blck */
439337fc9e2Sanish #define	PCIE_EXT_CAP_ID_VS		0xB	/* Vendor Spec Extended Cap */
440337fc9e2Sanish #define	PCIE_EXT_CAP_ID_CAC		0xC	/* Config Access Correlation */
441337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ACS		0xD	/* Access Control Services */
442337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ARI		0xE	/* Alternative Routing ID */
443337fc9e2Sanish #define	PCIE_EXT_CAP_ID_ATS		0xF	/* Address Translation Svcs */
444f8d2de6bSjchu 
445f8d2de6bSjchu /*
446f8d2de6bSjchu  * PCI-Express Advanced Error Reporting Extended Capability Offsets
447f8d2de6bSjchu  */
448f8d2de6bSjchu #define	PCIE_AER_CAP			0x0	/* Enhanced Capability Header */
449f8d2de6bSjchu #define	PCIE_AER_UCE_STS		0x4	/* Uncorrectable Error Status */
450f8d2de6bSjchu #define	PCIE_AER_UCE_MASK		0x8	/* Uncorrectable Error Mask */
451f8d2de6bSjchu #define	PCIE_AER_UCE_SERV		0xc	/* Uncor Error Severity */
452f8d2de6bSjchu #define	PCIE_AER_CE_STS			0x10	/* Correctable Error Status */
453f8d2de6bSjchu #define	PCIE_AER_CE_MASK		0x14	/* Correctable Error Mask */
454f8d2de6bSjchu #define	PCIE_AER_CTL			0x18	/* AER Capability & Control */
455f8d2de6bSjchu #define	PCIE_AER_HDR_LOG		0x1c	/* Header Log */
456f8d2de6bSjchu 
457f8d2de6bSjchu /* Root Ports Only */
458f8d2de6bSjchu #define	PCIE_AER_RE_CMD			0x2c	/* Root Error Command */
459f8d2de6bSjchu #define	PCIE_AER_RE_STS			0x30	/* Root Error Status */
460f8d2de6bSjchu #define	PCIE_AER_CE_SRC_ID		0x34	/* Error Source ID */
461f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID		0x36	/* Error Source ID */
462f8d2de6bSjchu 
463f8d2de6bSjchu /* Bridges Only */
464f8d2de6bSjchu #define	PCIE_AER_SUCE_STS		0x2c	/* Secondary UCE Status */
465f8d2de6bSjchu #define	PCIE_AER_SUCE_MASK		0x30	/* Secondary UCE Mask */
466f8d2de6bSjchu #define	PCIE_AER_SUCE_SERV		0x34	/* Secondary UCE Severity */
467f8d2de6bSjchu #define	PCIE_AER_SCTL			0x38	/* Secondary Cap & Ctl */
468f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG		0x3c	/* Secondary Header Log */
469f8d2de6bSjchu 
470f8d2de6bSjchu /*
471f8d2de6bSjchu  * AER Uncorrectable Error Status/Mask/Severity Register
472f8d2de6bSjchu  */
47300d0963fSdilpreet #define	PCIE_AER_UCE_TRAINING		0x1	/* Training Error Status */
474f8d2de6bSjchu #define	PCIE_AER_UCE_DLP		0x10	/* Data Link Protocol Error */
47500d0963fSdilpreet #define	PCIE_AER_UCE_SD			0x20	/* Link Surprise down */
476f8d2de6bSjchu #define	PCIE_AER_UCE_PTLP		0x1000	/* Poisoned TLP Status */
477f8d2de6bSjchu #define	PCIE_AER_UCE_FCP		0x2000	/* Flow Control Protocol Sts */
478f8d2de6bSjchu #define	PCIE_AER_UCE_TO			0x4000	/* Completion Timeout Status */
479f8d2de6bSjchu #define	PCIE_AER_UCE_CA			0x8000	/* Completer Abort Status */
480f8d2de6bSjchu #define	PCIE_AER_UCE_UC			0x10000	/* Unexpected Completion Sts */
481f8d2de6bSjchu #define	PCIE_AER_UCE_RO			0x20000	/* Receiver Overflow Status */
482f8d2de6bSjchu #define	PCIE_AER_UCE_MTLP		0x40000	/* Malformed TLP Status */
483f8d2de6bSjchu #define	PCIE_AER_UCE_ECRC		0x80000	/* ECRC Error Status */
484f8d2de6bSjchu #define	PCIE_AER_UCE_UR			0x100000 /* Unsupported Req */
485f8d2de6bSjchu #define	PCIE_AER_UCE_BITS		(PCIE_AER_UCE_TRAINING | \
48600d0963fSdilpreet     PCIE_AER_UCE_DLP | PCIE_AER_UCE_SD | PCIE_AER_UCE_PTLP | \
48700d0963fSdilpreet     PCIE_AER_UCE_FCP | PCIE_AER_UCE_TO | PCIE_AER_UCE_CA | \
48800d0963fSdilpreet     PCIE_AER_UCE_UC | PCIE_AER_UCE_RO | PCIE_AER_UCE_MTLP | \
48900d0963fSdilpreet     PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
49000d0963fSdilpreet #define	PCIE_AER_UCE_LOG_BITS		(PCIE_AER_UCE_PTLP | PCIE_AER_UCE_CA | \
49100d0963fSdilpreet     PCIE_AER_UCE_UC | PCIE_AER_UCE_MTLP | PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
492f8d2de6bSjchu 
493f8d2de6bSjchu /*
494f8d2de6bSjchu  * AER Correctable Error Status/Mask Register
495f8d2de6bSjchu  */
496f8d2de6bSjchu #define	PCIE_AER_CE_RECEIVER_ERR	0x1	/* Receiver Error Status */
497f8d2de6bSjchu #define	PCIE_AER_CE_BAD_TLP		0x40	/* Bad TLP Status */
498f8d2de6bSjchu #define	PCIE_AER_CE_BAD_DLLP		0x80	/* Bad DLLP Status */
499f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_ROLLOVER	0x100	/* REPLAY_NUM Rollover Status */
500f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_TO		0x1000	/* Replay Timer Timeout Sts */
50100d0963fSdilpreet #define	PCIE_AER_CE_AD_NFE		0x2000	/* Advisory Non-Fatal Status */
502f8d2de6bSjchu #define	PCIE_AER_CE_BITS		(PCIE_AER_CE_RECEIVER_ERR | \
503f8d2de6bSjchu     PCIE_AER_CE_BAD_TLP | PCIE_AER_CE_BAD_DLLP | PCIE_AER_CE_REPLAY_ROLLOVER | \
504f8d2de6bSjchu     PCIE_AER_CE_REPLAY_TO)
505f8d2de6bSjchu 
506f8d2de6bSjchu /*
507f8d2de6bSjchu  * AER Capability & Control
508f8d2de6bSjchu  */
509f8d2de6bSjchu #define	PCIE_AER_CTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
510f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_CAP	0x20	/* ECRC Generation Capable */
511f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_ENA	0x40	/* ECRC Generation Enable */
512f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_CAP	0x80	/* ECRC Check Capable */
513f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_ENA	0x100	/* ECRC Check Enable */
514f8d2de6bSjchu 
515f8d2de6bSjchu /*
516f8d2de6bSjchu  * AER Root Command Register
517f8d2de6bSjchu  */
518f8d2de6bSjchu #define	PCIE_AER_RE_CMD_CE_REP_EN	0x1	/* Correctable Error Enable */
519f8d2de6bSjchu #define	PCIE_AER_RE_CMD_NFE_REP_EN	0x2	/* Non-Fatal Error Enable */
520f8d2de6bSjchu #define	PCIE_AER_RE_CMD_FE_REP_EN	0x4	/* Fatal Error Enable */
521f8d2de6bSjchu 
522f8d2de6bSjchu /*
523f8d2de6bSjchu  * AER Root Error Status Register
524f8d2de6bSjchu  */
525f8d2de6bSjchu #define	PCIE_AER_RE_STS_CE_RCVD		0x1	/* ERR_COR Received */
526f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_CE_RCVD	0x2	/* Multiple ERR_COR Received */
527f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_NFE_RCVD	0x4	/* FATAL/NON-FATAL Received */
528f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_FE_NFE_RCVD	0x8	/* Multiple ERR_F/NF Received */
529f8d2de6bSjchu #define	PCIE_AER_RE_STS_FIRST_UC_FATAL	0x10	/* First Uncorrectable Fatal */
530f8d2de6bSjchu #define	PCIE_AER_RE_STS_NFE_MSGS_RCVD	0x20	/* Non-Fatal Error Msgs Rcvd */
531f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_MSGS_RCVD	0x40	/* Fatal Error Messages Rcvd */
532f8d2de6bSjchu 
533f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_SHIFT	27	/* Offset of Intr Msg Number */
534f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_MASK	0x1F	/* Intr Msg Number Mask */
535f8d2de6bSjchu 
536f8d2de6bSjchu /*
537f8d2de6bSjchu  * AER Error Source Identification Register
538f8d2de6bSjchu  */
539f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_SHIFT	0	/* ERR_COR Source ID */
540f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_MASK	0xFFFF
541f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_UE_SHIFT	16	/* ERR_FATAL/NONFATAL Src ID */
542eae2e508Skrishnae #define	PCIE_AER_ERR_SRC_ID_UE_MASK	0xFFFF
543f8d2de6bSjchu 
544f8d2de6bSjchu /*
545f8d2de6bSjchu  * AER Secondary Uncorrectable Error Register
546f8d2de6bSjchu  */
547f8d2de6bSjchu #define	PCIE_AER_SUCE_TA_ON_SC		0x1	/* Target Abort on Split Comp */
548f8d2de6bSjchu #define	PCIE_AER_SUCE_MA_ON_SC 		0x2	/* Master Abort on Split Comp */
549f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_TA		0x4	/* Received Target Abort */
550f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_MA 		0x8	/* Received Master Abort */
551f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_ERR 		0x20	/* Unexpected Split Comp Err */
552f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_MSG_DATA_ERR	0x40	/* USC Message Data Error */
553f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_DATA_ERR	0x80	/* Uncorrectable Data Error */
554f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ATTR_ERR	0x100	/* UC Attribute Err */
555f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ADDR_ERR	0x200	/* Uncorrectable Address Err */
556f8d2de6bSjchu #define	PCIE_AER_SUCE_TIMER_EXPIRED	0x400	/* Delayed xtion discard */
557f8d2de6bSjchu #define	PCIE_AER_SUCE_PERR_ASSERT	0x800	/* PERR Assertion Detected */
558f8d2de6bSjchu #define	PCIE_AER_SUCE_SERR_ASSERT	0x1000	/* SERR Assertion Detected */
559f8d2de6bSjchu #define	PCIE_AER_SUCE_INTERNAL_ERR	0x2000	/* Internal Bridge Err Detect */
56000d0963fSdilpreet 
56100d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_LWR_MASK	0xF	/* Lower Command Mask */
56200d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_LWR_SHIFT	4	/* Lower Command Shift */
56300d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_UP_MASK	0xF	/* Upper Command Mask */
56400d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_CMD_UP_SHIFT	8	/* Upper Command Shift */
56500d0963fSdilpreet #define	PCIE_AER_SUCE_HDR_ADDR_SHIFT	32	/* Upper Command Shift */
56600d0963fSdilpreet 
567f8d2de6bSjchu #define	PCIE_AER_SUCE_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
568f8d2de6bSjchu     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
569f8d2de6bSjchu     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
570f8d2de6bSjchu     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
571f8d2de6bSjchu     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_TIMER_EXPIRED | \
572f8d2de6bSjchu     PCIE_AER_SUCE_PERR_ASSERT |	PCIE_AER_SUCE_SERR_ASSERT | \
573f8d2de6bSjchu     PCIE_AER_SUCE_INTERNAL_ERR)
57400d0963fSdilpreet #define	PCIE_AER_SUCE_LOG_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
57500d0963fSdilpreet     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
57600d0963fSdilpreet     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
57700d0963fSdilpreet     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
57800d0963fSdilpreet     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_PERR_ASSERT)
579f8d2de6bSjchu 
580f8d2de6bSjchu /*
581f8d2de6bSjchu  * AER Secondary Capability & Control
582f8d2de6bSjchu  */
583f8d2de6bSjchu #define	PCIE_AER_SCTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
584f8d2de6bSjchu 
585f8d2de6bSjchu /*
586f8d2de6bSjchu  * AER Secondary Headers
587f8d2de6bSjchu  * The Secondary Header Logs is 4 DW long.
588f8d2de6bSjchu  * The first 2 DW are split into 3 sections
589f8d2de6bSjchu  * o Transaction Attribute
590f8d2de6bSjchu  * o Transaction Command Lower
591f8d2de6bSjchu  * o Transaction Command Higher
592f8d2de6bSjchu  * The last 2 DW is the Transaction Address
593f8d2de6bSjchu  */
594f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ATTR_MASK	0xFFFFFFFFF
595f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_LOW_MASK	0xF000000000
596f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_HIGH_MASK	0xF0000000000
597f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ADDR_MASK	0xFFFFFFFFFFFFFFFF
598f8d2de6bSjchu 
599f8d2de6bSjchu /*
600665a7fcaSgovinda  * PCI-Express Device Serial Number Capability Offsets.
601665a7fcaSgovinda  */
602665a7fcaSgovinda #define	PCIE_SER_CAP		0x0	/* Enhanced Capability Header */
603665a7fcaSgovinda #define	PCIE_SER_SID_LOWER_DW	0x4	/* Lower 32-bit Serial Number */
604665a7fcaSgovinda #define	PCIE_SER_SID_UPPER_DW	0x8	/* Upper 32-bit Serial Number */
605665a7fcaSgovinda 
606665a7fcaSgovinda /*
607*26947304SEvan Yan  * ARI Capability Offsets
608*26947304SEvan Yan  */
609*26947304SEvan Yan #define	PCIE_ARI_HDR	0x0		/* Enhanced Capability Header */
610*26947304SEvan Yan #define	PCIE_ARI_CAP	0x4		/* ARI Capability Register */
611*26947304SEvan Yan #define	PCIE_ARI_CTL	0x6		/* ARI Control Register */
612*26947304SEvan Yan 
613*26947304SEvan Yan #define	PCIE_ARI_CAP_MFVC_FUNC_GRP	0x01
614*26947304SEvan Yan #define	PCIE_ARI_CAP_ASC_FUNC_GRP	0x02
615*26947304SEvan Yan 
616*26947304SEvan Yan #define	PCIE_ARI_CAP_NEXT_FUNC_SHIFT	8
617*26947304SEvan Yan #define	PCIE_ARI_CAP_NEXT_FUNC_MASK	0xffff
618*26947304SEvan Yan 
619*26947304SEvan Yan #define	PCIE_ARI_CTRL_MFVC_FUNC_GRP	0x01
620*26947304SEvan Yan #define	PCIE_ARI_CTRL_ASC_FUNC_GRP	0x02
621*26947304SEvan Yan 
622*26947304SEvan Yan #define	PCIE_ARI_CTRL_FUNC_GRP_SHIFT	4
623*26947304SEvan Yan #define	PCIE_ARI_CTRL_FUNC_GRP_MASK	0x7
624*26947304SEvan Yan 
625*26947304SEvan Yan /*
626f8d2de6bSjchu  * PCI-E Common TLP Header Fields
627f8d2de6bSjchu  */
628f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW	0x00
629f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW	0x20
630f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW_DATA	0x40
631f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW_DATA	0x60
632f8d2de6bSjchu 
633f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEM	0x0
634f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEMLK	0x1
635f8d2de6bSjchu #define	PCIE_TLP_TYPE_IO	0x2
636f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG0	0x4
637f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG1	0x5
638f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSG	0x10
639f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPL	0xA
640f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPLLK	0xB
641f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSI	0x18
642f8d2de6bSjchu 
643f8d2de6bSjchu #define	PCIE_TLP_MRD3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEM)
644f8d2de6bSjchu #define	PCIE_TLP_MRD4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEM)
645f8d2de6bSjchu #define	PCIE_TLP_MRDLK3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEMLK)
646f8d2de6bSjchu #define	PCIE_TLP_MRDLK4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEMLK)
647f8d2de6bSjchu #define	PCIE_TLP_MRDWR3		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MEM)
648f8d2de6bSjchu #define	PCIE_TLP_MRDWR4		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MEM)
649f8d2de6bSjchu #define	PCIE_TLP_IORD		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_IO)
650f8d2de6bSjchu #define	PCIE_TLP_IOWR		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_IO)
651f8d2de6bSjchu #define	PCIE_TLP_CFGRD0		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG0)
652f8d2de6bSjchu #define	PCIE_TLP_CFGWR0		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG0)
653f8d2de6bSjchu #define	PCIE_TLP_CFGRD1		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG1)
654f8d2de6bSjchu #define	PCIE_TLP_CFGWR1		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG1)
655f8d2de6bSjchu #define	PCIE_TLP_MSG		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MSG)
656f8d2de6bSjchu #define	PCIE_TLP_MSGD		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSG)
657f8d2de6bSjchu #define	PCIE_TLP_CPL		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPL)
658f8d2de6bSjchu #define	PCIE_TLP_CPLD		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPL)
659f8d2de6bSjchu #define	PCIE_TLP_CPLLK		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPLLK)
660f8d2de6bSjchu #define	PCIE_TLP_CPLDLK		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPLLK)
661f8d2de6bSjchu #define	PCIE_TLP_MSI32		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MSI)
662f8d2de6bSjchu #define	PCIE_TLP_MSI64		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSI)
663f8d2de6bSjchu 
664f8d2de6bSjchu typedef uint16_t pcie_req_id_t;
665f8d2de6bSjchu 
666f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_SHIFT	8
667f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_MASK	0xFF00
668f8d2de6bSjchu #define	PCIE_REQ_ID_DEV_SHIFT	3
669c85864d8SKrishna Elango #define	PCIE_REQ_ID_DEV_MASK	0x00F8
670f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_SHIFT	0
671f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_MASK	0x0007
672*26947304SEvan Yan #define	PCIE_REQ_ID_ARI_FUNC_MASK	0x00FF
673f8d2de6bSjchu 
674bf8fc234Set142600 #define	PCIE_CPL_STS_SUCCESS	0
675bf8fc234Set142600 #define	PCIE_CPL_STS_UR		1
676bf8fc234Set142600 #define	PCIE_CPL_STS_CRS	2
677bf8fc234Set142600 #define	PCIE_CPL_STS_CA		4
678bf8fc234Set142600 
67900d0963fSdilpreet #if defined(_BIT_FIELDS_LTOH)
68000d0963fSdilpreet /*
68100d0963fSdilpreet  * PCI Express little-endian common TLP header format
68200d0963fSdilpreet  */
68300d0963fSdilpreet typedef struct pcie_tlp_hdr {
68400d0963fSdilpreet 	uint32_t	len	:10,
68500d0963fSdilpreet 			rsvd3   :2,
68600d0963fSdilpreet 			attr    :2,
68700d0963fSdilpreet 			ep	:1,
68800d0963fSdilpreet 			td	:1,
68900d0963fSdilpreet 			rsvd2   :4,
69000d0963fSdilpreet 			tc	:3,
69100d0963fSdilpreet 			rsvd1   :1,
69200d0963fSdilpreet 			type    :5,
69300d0963fSdilpreet 			fmt	:2,
69400d0963fSdilpreet 			rsvd0   :1;
69500d0963fSdilpreet } pcie_tlp_hdr_t;
69600d0963fSdilpreet 
69700d0963fSdilpreet typedef struct pcie_mem64 {
69800d0963fSdilpreet 	uint32_t	fbe	:4,
69900d0963fSdilpreet 			lbe	:4,
70000d0963fSdilpreet 			tag	:8,
70100d0963fSdilpreet 			rid	:16;
70200d0963fSdilpreet 	uint32_t	addr1;
70300d0963fSdilpreet 	uint32_t	rsvd0   :2,
70400d0963fSdilpreet 			addr0   :30;
70500d0963fSdilpreet } pcie_mem64_t;
70600d0963fSdilpreet 
70700d0963fSdilpreet typedef struct pcie_memio32 {
70800d0963fSdilpreet 	uint32_t	fbe	:4,
70900d0963fSdilpreet 			lbe	:4,
71000d0963fSdilpreet 			tag	:8,
71100d0963fSdilpreet 			rid	:16;
71200d0963fSdilpreet 	uint32_t	rsvd0   :2,
71300d0963fSdilpreet 			addr0   :30;
71400d0963fSdilpreet } pcie_memio32_t;
71500d0963fSdilpreet 
71600d0963fSdilpreet typedef struct pcie_cfg {
71700d0963fSdilpreet 	uint32_t	fbe	:4,
71800d0963fSdilpreet 			lbe	:4,
71900d0963fSdilpreet 			tag	:8,
72000d0963fSdilpreet 			rid	:16;
72100d0963fSdilpreet 	uint32_t	rsvd1   :2,
72200d0963fSdilpreet 			reg	:6,
72300d0963fSdilpreet 			extreg  :4,
72400d0963fSdilpreet 			rsvd0   :4,
72500d0963fSdilpreet 			func    :3,
72600d0963fSdilpreet 			dev	:5,
72700d0963fSdilpreet 			bus	:8;
72800d0963fSdilpreet } pcie_cfg_t;
72900d0963fSdilpreet 
73000d0963fSdilpreet typedef struct pcie_cpl {
73100d0963fSdilpreet 	uint32_t	bc	:12,
73200d0963fSdilpreet 			bcm	:1,
73300d0963fSdilpreet 			status  :3,
73400d0963fSdilpreet 			cid	:16;
73500d0963fSdilpreet 	uint32_t	laddr   :7,
73600d0963fSdilpreet 			rsvd0   :1,
73700d0963fSdilpreet 			tag	:8,
73800d0963fSdilpreet 			rid	:16;
73900d0963fSdilpreet } pcie_cpl_t;
74000d0963fSdilpreet 
741f8d2de6bSjchu /*
742f8d2de6bSjchu  * PCI-Express Message Request Header
743f8d2de6bSjchu  */
744f8d2de6bSjchu typedef struct pcie_msg {
74500d0963fSdilpreet 	uint32_t	msg_code:8,	/* DW1 */
74600d0963fSdilpreet 			tag	:8,
74700d0963fSdilpreet 			rid	:16;
74800d0963fSdilpreet 	uint32_t	unused[2];	/* DW 2 & 3 */
74900d0963fSdilpreet } pcie_msg_t;
75000d0963fSdilpreet 
75100d0963fSdilpreet #elif defined(_BIT_FIELDS_HTOL)
75200d0963fSdilpreet /*
75300d0963fSdilpreet  * PCI Express big-endian common TLP header format
75400d0963fSdilpreet  */
75500d0963fSdilpreet typedef struct pcie_tlp_hdr {
75600d0963fSdilpreet 	uint32_t	rsvd0	:1,
75700d0963fSdilpreet 			fmt	:2,
75800d0963fSdilpreet 			type	:5,
75900d0963fSdilpreet 			rsvd1	:1,
76000d0963fSdilpreet 			tc	:3,
76100d0963fSdilpreet 			rsvd2	:4,
762f8d2de6bSjchu 			td	:1,
763f8d2de6bSjchu 			ep	:1,
764f8d2de6bSjchu 			attr	:2,
76500d0963fSdilpreet 			rsvd3	:2,
766f8d2de6bSjchu 			len	:10;
76700d0963fSdilpreet } pcie_tlp_hdr_t;
76800d0963fSdilpreet 
76900d0963fSdilpreet typedef struct pcie_mem64 {
77000d0963fSdilpreet 	uint32_t	rid	:16,
77100d0963fSdilpreet 			tag	:8,
77200d0963fSdilpreet 			lbe	:4,
77300d0963fSdilpreet 			fbe	:4;
77400d0963fSdilpreet 	uint32_t	addr1;
77500d0963fSdilpreet 	uint32_t	addr0	:30,
77600d0963fSdilpreet 			rsvd0	:2;
77700d0963fSdilpreet } pcie_mem64_t;
77800d0963fSdilpreet 
77900d0963fSdilpreet typedef struct pcie_memio32 {
78000d0963fSdilpreet 	uint32_t	rid	:16,
78100d0963fSdilpreet 			tag	:8,
78200d0963fSdilpreet 			lbe	:4,
78300d0963fSdilpreet 			fbe	:4;
78400d0963fSdilpreet 	uint32_t	addr0	:30,
78500d0963fSdilpreet 			rsvd0	:2;
78600d0963fSdilpreet } pcie_memio32_t;
78700d0963fSdilpreet 
78800d0963fSdilpreet typedef struct pcie_cfg {
78900d0963fSdilpreet 	uint32_t	rid	:16,
79000d0963fSdilpreet 			tag	:8,
79100d0963fSdilpreet 			lbe	:4,
79200d0963fSdilpreet 			fbe	:4;
79300d0963fSdilpreet 	uint32_t	bus	:8,
79400d0963fSdilpreet 			dev	:5,
79500d0963fSdilpreet 			func	:3,
79600d0963fSdilpreet 			rsvd0	:4,
79700d0963fSdilpreet 			extreg	:4,
79800d0963fSdilpreet 			reg	:6,
79900d0963fSdilpreet 			rsvd1	:2;
80000d0963fSdilpreet } pcie_cfg_t;
80100d0963fSdilpreet 
80200d0963fSdilpreet typedef struct pcie_cpl {
80300d0963fSdilpreet 	uint32_t	cid	:16,
80400d0963fSdilpreet 			status	:3,
80500d0963fSdilpreet 			bcm	:1,
80600d0963fSdilpreet 			bc	:12;
80700d0963fSdilpreet 	uint32_t	rid	:16,
80800d0963fSdilpreet 			tag	:8,
80900d0963fSdilpreet 			rsvd0	:1,
81000d0963fSdilpreet 			laddr	:7;
81100d0963fSdilpreet } pcie_cpl_t;
81200d0963fSdilpreet 
81300d0963fSdilpreet /*
81400d0963fSdilpreet  * PCI-Express Message Request Header
81500d0963fSdilpreet  */
81600d0963fSdilpreet typedef struct pcie_msg {
817f8d2de6bSjchu 	uint32_t	rid	:16,	/* DW1 */
818f8d2de6bSjchu 			tag	:8,
819f8d2de6bSjchu 			msg_code:8;
820f8d2de6bSjchu 	uint32_t	unused[2];	/* DW 2 & 3 */
821f8d2de6bSjchu } pcie_msg_t;
82200d0963fSdilpreet #else
82300d0963fSdilpreet #error "bit field not defined"
82400d0963fSdilpreet #endif
825f8d2de6bSjchu 
826f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_COR		0x30
827f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_NONFATAL	0x31
828f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_FATAL		0x33
829f8d2de6bSjchu 
830f8d2de6bSjchu #ifdef	__cplusplus
831f8d2de6bSjchu }
832f8d2de6bSjchu #endif
833f8d2de6bSjchu 
834f8d2de6bSjchu #endif	/* _SYS_PCIE_H */
835