xref: /titanic_44/usr/src/uts/common/sys/pcie.h (revision d0538f66491267879b7418b21ad78e3dcc2dcc83)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_SYS_PCIE_H
27 #define	_SYS_PCIE_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 #include <sys/pci.h>
36 
37 /*
38  * PCI Express capability registers in PCI configuration space relative to
39  * the PCI Express Capability structure.
40  */
41 #define	PCIE_CAP_ID			PCI_CAP_ID
42 #define	PCIE_CAP_NEXT_PTR		PCI_CAP_NEXT_PTR
43 #define	PCIE_PCIECAP			0x02	/* PCI-e Capability Reg */
44 #define	PCIE_DEVCAP			0x04	/* Device Capability */
45 #define	PCIE_DEVCTL			0x08	/* Device Control */
46 #define	PCIE_DEVSTS			0x0A	/* Device Status */
47 #define	PCIE_LINKCAP			0x0C	/* Link Capability */
48 #define	PCIE_LINKCTL			0x10	/* Link Control */
49 #define	PCIE_LINKSTS			0x12	/* Link Status */
50 #define	PCIE_SLOTCAP			0x14	/* Slot Capability */
51 #define	PCIE_SLOTCTL			0x18	/* Slot Control */
52 #define	PCIE_SLOTSTS			0x1A	/* Slot Status */
53 #define	PCIE_ROOTCTL			0x1C	/* Root Control */
54 #define	PCIE_ROOTSTS			0x20	/* Root Status */
55 
56 /*
57  * PCI-Express Config Space size
58  */
59 #define	PCIE_CONF_HDR_SIZE	4096	/* PCIe configuration header size */
60 
61 /*
62  * PCI-Express Capabilities Register (2 bytes)
63  */
64 #define	PCIE_PCIECAP_VER_1_0		0x1	/* PCI-E spec 1.0 */
65 #define	PCIE_PCIECAP_VER_MASK		0xF	/* Version Mask */
66 #define	PCIE_PCIECAP_DEV_TYPE_PCIE_DEV	0x00	/* PCI-E Endpont Device */
67 #define	PCIE_PCIECAP_DEV_TYPE_PCI_DEV	0x10	/* Leg PCI Endpont Device */
68 #define	PCIE_PCIECAP_DEV_TYPE_ROOT	0x40	/* Root Port of Root Complex */
69 #define	PCIE_PCIECAP_DEV_TYPE_UP	0x50	/* Upstream Port of Switch */
70 #define	PCIE_PCIECAP_DEV_TYPE_DOWN	0x60	/* Downstream Port of Switch */
71 #define	PCIE_PCIECAP_DEV_TYPE_PCIE2PCI	0x70	/* PCI-E to PCI Bridge */
72 #define	PCIE_PCIECAP_DEV_TYPE_PCI2PCIE	0x80	/* PCI to PCI-E Bridge */
73 #define	PCIE_PCIECAP_DEV_TYPE_MASK	0xF0	/* Device/Port Type Mask */
74 #define	PCIE_PCIECAP_SLOT_IMPL		0x100	/* Slot Impl vs Integrated */
75 #define	PCIE_PCIECAP_INT_MSG_NUM_SHIFT	9	/* Intr Msg Num Bit Offset */
76 #define	PCIE_PCIECAP_INT_MSG_NUM_MASK	0x1F	/* Intr Msg Number Mask */
77 
78 /*
79  * Device Capabilities Register (4 bytes)
80  */
81 #define	PCIE_DEVCAP_MAX_PAYLOAD_128	0x0
82 #define	PCIE_DEVCAP_MAX_PAYLOAD_256	0x1
83 #define	PCIE_DEVCAP_MAX_PAYLOAD_512	0x2
84 #define	PCIE_DEVCAP_MAX_PAYLOAD_1024	0x3
85 #define	PCIE_DEVCAP_MAX_PAYLOAD_2048	0x4
86 #define	PCIE_DEVCAP_MAX_PAYLOAD_4096	0x5
87 #define	PCIE_DEVCAP_MAX_PAYLOAD_MASK	0x7	/* Max Payload Size Supported */
88 
89 #define	PCIE_DEVCAP_PHTM_FUNC_NONE	0x00	/* No Function # bits used */
90 #define	PCIE_DEVCAP_PHTM_FUNC_ONE	0x08	/* First most sig. bit used */
91 #define	PCIE_DEVCAP_PHTM_FUNC_TWO	0x10	/* First 2 most sig bit used */
92 #define	PCIE_DEVCAP_PHTM_FUNC_THREE	0x18	/* All 3 bits used */
93 #define	PCIE_DEVCAP_PHTM_FUNC_MASK	0x18	/* Phantom Func Supported */
94 
95 #define	PCIE_DEVCAP_EXT_TAG_5BIT	0x00	/* 5-Bit Tag Field Supported */
96 #define	PCIE_DEVCAP_EXT_TAG_8BIT	0x20	/* 8-Bit Tag Field Supported */
97 #define	PCIE_DEVCAP_EXT_TAG_MASK	0x20	/* Ext. Tag Field Supported */
98 
99 #define	PCIE_DEVCAP_EP_L0S_LAT_MIN	0x000	/* < 64 ns */
100 #define	PCIE_DEVCAP_EP_L0S_LAT_64ns	0x040	/* 64 ns - 128 ns */
101 #define	PCIE_DEVCAP_EP_L0S_LAT_128ns	0x080	/* 128 ns - 256 ns */
102 #define	PCIE_DEVCAP_EP_L0S_LAT_256ns	0x0C0	/* 256 ns - 512 ns */
103 #define	PCIE_DEVCAP_EP_L0S_LAT_512ns	0x100	/* 512 ns - 1 us */
104 #define	PCIE_DEVCAP_EP_L0S_LAT_1us	0x140	/* 1 us - 2 us */
105 #define	PCIE_DEVCAP_EP_L0S_LAT_2us	0x180	/* 2 us - 4 us */
106 #define	PCIE_DEVCAP_EP_L0S_LAT_MAX	0x1C0	/* > 4 us */
107 #define	PCIE_DEVCAP_EP_L0S_LAT_MASK	0x1C0	/* EP L0s Accetable Latency */
108 
109 #define	PCIE_DEVCAP_EP_L1_LAT_MIN	0x000	/* < 1 us */
110 #define	PCIE_DEVCAP_EP_L1_LAT_1us	0x140	/* 1 us - 2 us */
111 #define	PCIE_DEVCAP_EP_L1_LAT_2us	0x180	/* 2 us - 4 us */
112 #define	PCIE_DEVCAP_EP_L1_LAT_4us	0x140	/* 4 us - 8 us */
113 #define	PCIE_DEVCAP_EP_L1_LAT_8us	0x180	/* 8 us - 16 us */
114 #define	PCIE_DEVCAP_EP_L1_LAT_16us	0x140	/* 16 us - 32 us */
115 #define	PCIE_DEVCAP_EP_L1_LAT_32us	0x180	/* 32 us - 64 us */
116 #define	PCIE_DEVCAP_EP_L1_LAT_MAX	0x1C0	/* > 64 us */
117 #define	PCIE_DEVCAP_EP_L1_LAT_MASK	0x700	/* EP L1 Accetable Latency */
118 
119 #define	PCIE_DEVCAP_ATTN_BUTTON		0x1000	/* Attention Button Present */
120 #define	PCIE_DEVCAP_ATTN_INDICATOR	0x2000	/* Attn Indicator Present */
121 #define	PCIE_DEVCAP_PWR_INDICATOR	0x4000	/* Power Indicator Present */
122 
123 #define	PCIE_DEVCAP_ROLE_BASED_ERR_REP	0x8000	/* Role Based Error Reporting */
124 
125 #define	PCIE_DEVCAP_PLMT_VAL_SHIFT	18	/* Power Limit Value Shift */
126 #define	PCIE_DEVCAP_PLMT_VAL_MASK	0xFF	/* Power Limit Value Mask */
127 
128 #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1	0x0000000	/* 1x Scale */
129 #define	PCIE_DEVCAP_PLMT_SCL_1_BY_10	0x4000000	/* 0.1x Scale */
130 #define	PCIE_DEVCAP_PLMT_SCL_1_BY_100	0x8000000	/* 0.01x Scale */
131 #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1000	0xC000000	/* 0.001x Scale */
132 #define	PCIE_DEVCAP_PLMT_SCL_MASK	0xC000000	/* Power Limit Scale */
133 
134 /*
135  * Device Control Register (2 bytes)
136  */
137 #define	PCIE_DEVCTL_CE_REPORTING_EN	0x1	/* Correctable Error Enable */
138 #define	PCIE_DEVCTL_NFE_REPORTING_EN	0x2	/* Non-Fatal Error Enable */
139 #define	PCIE_DEVCTL_FE_REPORTING_EN	0x4	/* Fatal Error Enable */
140 #define	PCIE_DEVCTL_UR_REPORTING_EN	0x8	/* Unsupported Request Enable */
141 #define	PCIE_DEVCTL_ERR_MASK		0xF	/* All of the above bits */
142 
143 #define	PCIE_DEVCTL_RO_EN		0x10	/* Enable Relaxed Ordering */
144 
145 #define	PCIE_DEVCTL_MAX_PAYLOAD_128	0x00
146 #define	PCIE_DEVCTL_MAX_PAYLOAD_256	0x20
147 #define	PCIE_DEVCTL_MAX_PAYLOAD_512	0x40
148 #define	PCIE_DEVCTL_MAX_PAYLOAD_1024	0x60
149 #define	PCIE_DEVCTL_MAX_PAYLOAD_2048	0x80
150 #define	PCIE_DEVCTL_MAX_PAYLOAD_4096	0xA0
151 #define	PCIE_DEVCTL_MAX_PAYLOAD_MASK	0xE0	/* Max_Payload_Size */
152 
153 #define	PCIE_DEVCTL_EXT_TAG_FIELD_EN	0x100	/* Extended Tag Field Enable */
154 #define	PCIE_DEVCTL_PHTM_FUNC_EN	0x200	/* Phantom Functions Enable */
155 #define	PCIE_DEVCTL_AUX_POWER_PM_EN	0x400	/* Auxiliary Power PM Enable */
156 #define	PCIE_DEVCTL_ENABLE_NO_SNOOP	0x800	/* Enable No Snoop */
157 
158 #define	PCIE_DEVCTL_MAX_READ_REQ_128	0x0000
159 #define	PCIE_DEVCTL_MAX_READ_REQ_256	0x1000
160 #define	PCIE_DEVCTL_MAX_READ_REQ_512	0x2000
161 #define	PCIE_DEVCTL_MAX_READ_REQ_1024	0x3000
162 #define	PCIE_DEVCTL_MAX_READ_REQ_2048	0x4000
163 #define	PCIE_DEVCTL_MAX_READ_REQ_4096	0x5000
164 #define	PCIE_DEVCTL_MAX_READ_REQ_MASK	0x7000	/* Max_Read_Request_Size */
165 
166 /*
167  * Device Status Register (2 bytes)
168  */
169 #define	PCIE_DEVSTS_CE_DETECTED		0x1	/* Correctable Error Detected */
170 #define	PCIE_DEVSTS_NFE_DETECTED	0x2	/* Non Fatal Error Detected */
171 #define	PCIE_DEVSTS_FE_DETECTED		0x4	/* Fatal Error Detected */
172 #define	PCIE_DEVSTS_UR_DETECTED		0x8	/* Unsupported Req Detected */
173 #define	PCIE_DEVSTS_AUX_POWER		0x10	/* AUX Power Detected */
174 #define	PCIE_DEVSTS_TRANS_PENDING	0x20	/* Transactions Pending */
175 
176 /*
177  * Link Capability Register (4 bytes)
178  */
179 #define	PCIE_LINKCAP_MAX_SPEED_2_5	0x1	/* 2.5 Gb/s Speed */
180 #define	PCIE_LINKCAP_MAX_SPEED_MASK	0xF	/* Maximum Link Speed */
181 #define	PCIE_LINKCAP_MAX_WIDTH_X1	0x010
182 #define	PCIE_LINKCAP_MAX_WIDTH_X2	0x020
183 #define	PCIE_LINKCAP_MAX_WIDTH_X4	0x040
184 #define	PCIE_LINKCAP_MAX_WIDTH_X8	0x080
185 #define	PCIE_LINKCAP_MAX_WIDTH_X12	0x0C0
186 #define	PCIE_LINKCAP_MAX_WIDTH_X16	0x100
187 #define	PCIE_LINKCAP_MAX_WIDTH_X32	0x200
188 #define	PCIE_LINKCAP_MAX_WIDTH_MASK	0x3f0	/* Maximum Link Width */
189 
190 #define	PCIE_LINKCAP_ASPM_SUP_L0S	0x400	/* L0s Entry Supported */
191 #define	PCIE_LINKCAP_ASPM_SUP_L0S_L1	0xC00	/* L0s abd L1 Supported */
192 #define	PCIE_LINKCAP_ASPM_SUP_MASK	0xC00	/* ASPM Support */
193 
194 #define	PCIE_LINKCAP_L0S_EXIT_LAT_MIN	0x0000	/* < 64 ns */
195 #define	PCIE_LINKCAP_L0S_EXIT_LAT_64ns	0x1000	/* 64 ns - 128 ns */
196 #define	PCIE_LINKCAP_L0S_EXIT_LAT_128ns	0x2000	/* 128 ns - 256 ns */
197 #define	PCIE_LINKCAP_L0S_EXIT_LAT_256ns	0x3000	/* 256 ns - 512 ns */
198 #define	PCIE_LINKCAP_L0S_EXIT_LAT_512ns	0x4000	/* 512 ns - 1 us */
199 #define	PCIE_LINKCAP_L0S_EXIT_LAT_1us	0x5000	/* 1 us - 2 us */
200 #define	PCIE_LINKCAP_L0S_EXIT_LAT_2us	0x6000	/* 2 us - 4 us */
201 #define	PCIE_LINKCAP_L0S_EXIT_LAT_MAX	0x7000	/* > 4 us */
202 #define	PCIE_LINKCAP_L0S_EXIT_LAT_MASK	0x7000	/* L0s Exit Latency */
203 
204 #define	PCIE_LINKCAP_L1_EXIT_LAT_MIN	0x00000	/* < 1 us */
205 #define	PCIE_LINKCAP_L1_EXIT_LAT_1us	0x08000	/* 1 us - 2 us */
206 #define	PCIE_LINKCAP_L1_EXIT_LAT_2us	0x10000	/* 2 us - 4 us */
207 #define	PCIE_LINKCAP_L1_EXIT_LAT_4us	0x18000	/* 4 us - 8 us */
208 #define	PCIE_LINKCAP_L1_EXIT_LAT_8us	0x20000	/* 8 us - 16 us */
209 #define	PCIE_LINKCAP_L1_EXIT_LAT_16us	0x28000	/* 16 us - 32 us */
210 #define	PCIE_LINKCAP_L1_EXIT_LAT_32us	0x30000	/* 32 us - 64 us */
211 #define	PCIE_LINKCAP_L1_EXIT_LAT_MAX	0x38000	/* > 64 us */
212 #define	PCIE_LINKCAP_L1_EXIT_LAT_MASK	0x38000	/* L1 Exit Latency */
213 
214 /* PCIe v1.1 spec based */
215 #define	PCIE_LINKCAP_DLL_ACTIVE_REP_CAPABLE	0x100000    /* DLL Active */
216 							    /* Capable bit */
217 
218 #define	PCIE_LINKCAP_PORT_NUMBER	0xF0000000	/* Port Number */
219 
220 /*
221  * Link Control Register (2 bytes)
222  */
223 #define	PCIE_LINKCTL_ASPM_CTL_DIS	0x0	/* ASPM Disable */
224 #define	PCIE_LINKCTL_ASPM_CTL_L0S	0x1	/* ASPM L0s only */
225 #define	PCIE_LINKCTL_ASPM_CTL_L1	0x2	/* ASPM L1 only */
226 #define	PCIE_LINKCTL_ASPM_CTL_L0S_L1	0x3	/* ASPM L0s and L1 only */
227 #define	PCIE_LINKCTL_ASPM_CTL_MASK	0x3	/* ASPM Control */
228 
229 #define	PCIE_LINKCTL_RCB_64_BYTE	0x0	/* 64 Byte */
230 #define	PCIE_LINKCTL_RCB_128_BYTE	0x8	/* 128 Byte */
231 #define	PCIE_LINKCTL_RCB_MASK		0x8	/* Read Completion Boundary */
232 
233 #define	PCIE_LINKCTL_LINK_DISABLE	0x10	/* Link Disable */
234 #define	PCIE_LINKCTL_RETRAIN_LINK	0x20	/* Retrain Link */
235 #define	PCIE_LINKCTL_COMMON_CLK_CFG	0x40	/* Common Clock Configuration */
236 #define	PCIE_LINKCTL_EXT_SYNCH		0x80	/* Extended Synch */
237 
238 /*
239  * Link Status Register (2 bytes)
240  */
241 #define	PCIE_LINKSTS_SPEED_2_5		0x1	/* Link Speed */
242 #define	PCIE_LINKSTS_SPEED_MASK		0xF	/* Link Speed */
243 
244 #define	PCIE_LINKSTS_NEG_WIDTH_X1	0x010
245 #define	PCIE_LINKSTS_NEG_WIDTH_X2	0x020
246 #define	PCIE_LINKSTS_NEG_WIDTH_X4	0x040
247 #define	PCIE_LINKSTS_NEG_WIDTH_X8	0x080
248 #define	PCIE_LINKSTS_NEG_WIDTH_X12	0x0C0
249 #define	PCIE_LINKSTS_NEG_WIDTH_X16	0x100
250 #define	PCIE_LINKSTS_NEG_WIDTH_X32	0x200
251 #define	PCIE_LINKSTS_NEG_WIDTH_MASK	0x3F0	/* Negotiated Link Width */
252 
253 #define	PCIE_LINKSTS_TRAINING_ERROR	0x400	/* Training Error */
254 #define	PCIE_LINKSTS_LINK_TRAINING	0x800	/* Link Training */
255 #define	PCIE_LINKSTS_SLOT_CLK_CFG	0x1000	/* Slot Clock Configuration */
256 
257 /* PCIe v1.1 spec based */
258 #define	PCIE_LINKSTS_DLL_LINK_ACTIVE	0x2000	/* DLL Link Active */
259 
260 /*
261  * Slot Capability Register (4 bytes)
262  */
263 #define	PCIE_SLOTCAP_ATTN_BUTTON	0x1	/* Attention Button Present */
264 #define	PCIE_SLOTCAP_POWER_CONTROLLER	0x2	/* Power Controller Present */
265 #define	PCIE_SLOTCAP_MRL_SENSOR		0x4	/* MRL Sensor Present */
266 #define	PCIE_SLOTCAP_ATTN_INDICATOR	0x8	/* Attn Indicator Present */
267 #define	PCIE_SLOTCAP_PWR_INDICATOR	0x10	/* Power Indicator Present */
268 #define	PCIE_SLOTCAP_HP_SURPRISE	0x20	/* Hot-Plug Surprise */
269 #define	PCIE_SLOTCAP_HP_CAPABLE		0x40	/* Hot-Plug Capable */
270 
271 #define	PCIE_SLOTCAP_PLMT_VAL_SHIFT	7	/* Slot Pwr Limit Value Shift */
272 #define	PCIE_SLOTCAP_PLMT_VAL_MASK	0xFF	/* Slot Pwr Limit Value */
273 
274 #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1	0x00000	/* 1x Scale */
275 #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_10	0x08000	/* 0.1x Scale */
276 #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_100	0x10000	/* 0.01x Scale */
277 #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1000	0x18000	/* 0.001x Scale */
278 #define	PCIE_SLOTCAP_PLMT_SCL_MASK	0x18000	/* Slot Power Limit Scale */
279 #define	PCIE_SLOTCAP_EMI_LOCK_PRESENT	0x20000 /* EMI Lock Present */
280 #define	PCIE_SLOTCAP_NO_CMD_COMP_SUPP	0x40000 /* No Command Comp. Supported */
281 
282 #define	PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT	19	/* Physical Slot Num Shift */
283 #define	PCIE_SLOTCAP_PHY_SLOT_NUM_MASK	0x1FFF	/* Physical Slot Num Mask */
284 
285 #define	PCIE_SLOTCAP_PHY_SLOT_NUM(reg) \
286 	    (((reg) >> PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT) & \
287 	    PCIE_SLOTCAP_PHY_SLOT_NUM_MASK)
288 
289 /*
290  * Slot Control Register (2 bytes)
291  */
292 #define	PCIE_SLOTCTL_ATTN_BTN_EN	0x1	/* Attn Button Pressed Enable */
293 #define	PCIE_SLOTCTL_PWR_FAULT_EN	0x2	/* Pwr Fault Detected Enable */
294 #define	PCIE_SLOTCTL_MRL_SENSOR_EN	0x4	/* MRL Sensor Changed Enable */
295 #define	PCIE_SLOTCTL_PRESENCE_CHANGE_EN	0x8	/* Presence Detect Changed En */
296 #define	PCIE_SLOTCTL_CMD_INTR_EN	0x10	/* CMD Completed Interrupt En */
297 #define	PCIE_SLOTCTL_HP_INTR_EN		0x20	/* Hot-Plug Interrupt Enable */
298 #define	PCIE_SLOTCTL_PWR_CONTROL	0x0400	/* Power controller Control */
299 #define	PCIE_SLOTCTL_EMI_LOCK_CONTROL	0x0800	/* EMI Lock control */
300 #define	PCIE_SLOTCTL_DLL_STATE_EN	0x1000	/* DLL State Changed En */
301 #define	PCIE_SLOTCTL_ATTN_INDICATOR_MASK 0x00C0	/* Attn Indicator mask */
302 #define	PCIE_SLOTCTL_PWR_INDICATOR_MASK	0x0300	/* Power Indicator mask */
303 
304 /* State values for the Power and Attention Indicators */
305 #define	PCIE_SLOTCTL_INDICATOR_STATE_ON		0x1	/* indicator ON */
306 #define	PCIE_SLOTCTL_INDICATOR_STATE_BLINK	0x2	/* indicator BLINK */
307 #define	PCIE_SLOTCTL_INDICATOR_STATE_OFF	0x3	/* indicator OFF */
308 
309 /*
310  * Macros to set/get the state of Power and Attention Indicators
311  * in the PCI Express Slot Control Register.
312  */
313 #define	pcie_slotctl_pwr_indicator_get(reg)	\
314 	(((reg) & PCIE_SLOTCTL_PWR_INDICATOR_MASK) >> 8)
315 #define	pcie_slotctl_attn_indicator_get(ctrl)	\
316 	(((ctrl) & PCIE_SLOTCTL_ATTN_INDICATOR_MASK) >> 6)
317 #define	pcie_slotctl_attn_indicator_set(ctrl, v)\
318 	(((ctrl) & ~PCIE_SLOTCTL_ATTN_INDICATOR_MASK) | ((v) << 6))
319 #define	pcie_slotctl_pwr_indicator_set(ctrl, v)\
320 	(((ctrl) & ~PCIE_SLOTCTL_PWR_INDICATOR_MASK) | ((v) << 8))
321 
322 /*
323  * Slot Status register (2 bytes)
324  */
325 #define	PCIE_SLOTSTS_ATTN_BTN_PRESSED	0x1	/* Attention Button Pressed */
326 #define	PCIE_SLOTSTS_PWR_FAULT_DETECTED	0x2	/* Power Fault Detected */
327 #define	PCIE_SLOTSTS_MRL_SENSOR_CHANGED	0x4	/* MRL Sensor Changed */
328 #define	PCIE_SLOTSTS_PRESENCE_CHANGED	0x8	/* Presence Detect Changed */
329 #define	PCIE_SLOTSTS_COMMAND_COMPLETED	0x10	/* Command Completed */
330 #define	PCIE_SLOTSTS_MRL_SENSOR_OPEN	0x20	/* MRL Sensor Open */
331 #define	PCIE_SLOTSTS_PRESENCE_DETECTED	0x40	/* Card Present in slot */
332 #define	PCIE_SLOTSTS_EMI_LOCK_SET	0x0080	/* EMI Lock set */
333 #define	PCIE_SLOTSTS_DLL_STATE_CHANGED	0x0100	/* DLL State Changed */
334 
335 /*
336  * Root Control Register (2 bytes)
337  */
338 #define	PCIE_ROOTCTL_SYS_ERR_ON_CE_EN	0x1	/* Sys Err on Cor Err Enable */
339 #define	PCIE_ROOTCTL_SYS_ERR_ON_NFE_EN	0x2	/* Sys Err on NF Err Enable */
340 #define	PCIE_ROOTCTL_SYS_ERR_ON_FE_EN	0x4	/* Sys Err on Fatal Err En */
341 #define	PCIE_ROOTCTL_PME_INTERRUPT_EN	0x8	/* PME Interrupt Enable */
342 
343 /*
344  * Root Status Register (4 bytes)
345  */
346 #define	PCIE_ROOTSTS_PME_REQ_ID_SHIFT	0	/* PME Requestor ID */
347 #define	PCIE_ROOTSTS_PME_REQ_ID_MASK	0xFFFF	/* PME Requestor ID */
348 
349 #define	PCIE_ROOTSTS_PME_STATUS		0x10000	/* PME Status */
350 #define	PCIE_ROOTSTS_PME_PENDING	0x20000	/* PME Pending */
351 
352 
353 /*
354  * PCI-Express Enhanced Capabilities Link Entry Bit Offsets
355  */
356 #define	PCIE_EXT_CAP			0x100	/* Base Address of Ext Cap */
357 
358 #define	PCIE_EXT_CAP_ID_SHIFT		0	/* PCI-e Ext Cap ID */
359 #define	PCIE_EXT_CAP_ID_MASK		0xFFFF
360 #define	PCIE_EXT_CAP_VER_SHIFT		16	/* PCI-e Ext Cap Ver */
361 #define	PCIE_EXT_CAP_VER_MASK		0xF
362 #define	PCIE_EXT_CAP_NEXT_PTR_SHIFT	20	/* PCI-e Ext Cap Next Ptr */
363 #define	PCIE_EXT_CAP_NEXT_PTR_MASK	0xFFF
364 
365 #define	PCIE_EXT_CAP_NEXT_PTR_NULL	0x0
366 
367 /*
368  * PCI-Express Enhanced Capability Identifier Values
369  */
370 #define	PCIE_EXT_CAP_ID_AER		0x1	/* Advanced Error Handling */
371 #define	PCIE_EXT_CAP_ID_VC		0x2	/* Virtual Channel, no MFVC */
372 #define	PCIE_EXT_CAP_ID_SER		0x3	/* Serial Number */
373 #define	PCIE_EXT_CAP_ID_PWR_BUDGET	0x4	/* Power Budgeting */
374 #define	PCIE_EXT_CAP_ID_RC_LINK_DECL	0x5	/* RC Link Declaration */
375 #define	PCIE_EXT_CAP_ID_RC_INT_LINKCTRL	0x6	/* RC Internal Link Control */
376 #define	PCIE_EXT_CAP_ID_RC_EVNT_CEA	0x7	/* RC Event Collector */
377 						/* Endpoint Association */
378 #define	PCIE_EXT_CAP_ID_MFVC		0x8	/* Multi-func Virtual Channel */
379 #define	PCIE_EXT_CAP_ID_VC_WITH_MFVC	0x9	/* Virtual Channel w/ MFVC */
380 #define	PCIE_EXT_CAP_ID_RCRB		0xA	/* Root Complex Register Blck */
381 #define	PCIE_EXT_CAP_ID_VS		0xB	/* Vendor Spec Extended Cap */
382 #define	PCIE_EXT_CAP_ID_CAC		0xC	/* Config Access Correlation */
383 #define	PCIE_EXT_CAP_ID_ACS		0xD	/* Access Control Services */
384 #define	PCIE_EXT_CAP_ID_ARI		0xE	/* Alternative Routing ID */
385 #define	PCIE_EXT_CAP_ID_ATS		0xF	/* Address Translation Svcs */
386 
387 /*
388  * PCI-Express Advanced Error Reporting Extended Capability Offsets
389  */
390 #define	PCIE_AER_CAP			0x0	/* Enhanced Capability Header */
391 #define	PCIE_AER_UCE_STS		0x4	/* Uncorrectable Error Status */
392 #define	PCIE_AER_UCE_MASK		0x8	/* Uncorrectable Error Mask */
393 #define	PCIE_AER_UCE_SERV		0xc	/* Uncor Error Severity */
394 #define	PCIE_AER_CE_STS			0x10	/* Correctable Error Status */
395 #define	PCIE_AER_CE_MASK		0x14	/* Correctable Error Mask */
396 #define	PCIE_AER_CTL			0x18	/* AER Capability & Control */
397 #define	PCIE_AER_HDR_LOG		0x1c	/* Header Log */
398 
399 /* Root Ports Only */
400 #define	PCIE_AER_RE_CMD			0x2c	/* Root Error Command */
401 #define	PCIE_AER_RE_STS			0x30	/* Root Error Status */
402 #define	PCIE_AER_CE_SRC_ID		0x34	/* Error Source ID */
403 #define	PCIE_AER_ERR_SRC_ID		0x36	/* Error Source ID */
404 
405 /* Bridges Only */
406 #define	PCIE_AER_SUCE_STS		0x2c	/* Secondary UCE Status */
407 #define	PCIE_AER_SUCE_MASK		0x30	/* Secondary UCE Mask */
408 #define	PCIE_AER_SUCE_SERV		0x34	/* Secondary UCE Severity */
409 #define	PCIE_AER_SCTL			0x38	/* Secondary Cap & Ctl */
410 #define	PCIE_AER_SHDR_LOG		0x3c	/* Secondary Header Log */
411 
412 /*
413  * AER Uncorrectable Error Status/Mask/Severity Register
414  */
415 #define	PCIE_AER_UCE_TRAINING		0x1	/* Training Error Status */
416 #define	PCIE_AER_UCE_DLP		0x10	/* Data Link Protocol Error */
417 #define	PCIE_AER_UCE_SD			0x20	/* Link Surprise down */
418 #define	PCIE_AER_UCE_PTLP		0x1000	/* Poisoned TLP Status */
419 #define	PCIE_AER_UCE_FCP		0x2000	/* Flow Control Protocol Sts */
420 #define	PCIE_AER_UCE_TO			0x4000	/* Completion Timeout Status */
421 #define	PCIE_AER_UCE_CA			0x8000	/* Completer Abort Status */
422 #define	PCIE_AER_UCE_UC			0x10000	/* Unexpected Completion Sts */
423 #define	PCIE_AER_UCE_RO			0x20000	/* Receiver Overflow Status */
424 #define	PCIE_AER_UCE_MTLP		0x40000	/* Malformed TLP Status */
425 #define	PCIE_AER_UCE_ECRC		0x80000	/* ECRC Error Status */
426 #define	PCIE_AER_UCE_UR			0x100000 /* Unsupported Req */
427 #define	PCIE_AER_UCE_BITS		(PCIE_AER_UCE_TRAINING | \
428     PCIE_AER_UCE_DLP | PCIE_AER_UCE_SD | PCIE_AER_UCE_PTLP | \
429     PCIE_AER_UCE_FCP | PCIE_AER_UCE_TO | PCIE_AER_UCE_CA | \
430     PCIE_AER_UCE_UC | PCIE_AER_UCE_RO | PCIE_AER_UCE_MTLP | \
431     PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
432 #define	PCIE_AER_UCE_LOG_BITS		(PCIE_AER_UCE_PTLP | PCIE_AER_UCE_CA | \
433     PCIE_AER_UCE_UC | PCIE_AER_UCE_MTLP | PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
434 
435 /*
436  * AER Correctable Error Status/Mask Register
437  */
438 #define	PCIE_AER_CE_RECEIVER_ERR	0x1	/* Receiver Error Status */
439 #define	PCIE_AER_CE_BAD_TLP		0x40	/* Bad TLP Status */
440 #define	PCIE_AER_CE_BAD_DLLP		0x80	/* Bad DLLP Status */
441 #define	PCIE_AER_CE_REPLAY_ROLLOVER	0x100	/* REPLAY_NUM Rollover Status */
442 #define	PCIE_AER_CE_REPLAY_TO		0x1000	/* Replay Timer Timeout Sts */
443 #define	PCIE_AER_CE_AD_NFE		0x2000	/* Advisory Non-Fatal Status */
444 #define	PCIE_AER_CE_BITS		(PCIE_AER_CE_RECEIVER_ERR | \
445     PCIE_AER_CE_BAD_TLP | PCIE_AER_CE_BAD_DLLP | PCIE_AER_CE_REPLAY_ROLLOVER | \
446     PCIE_AER_CE_REPLAY_TO)
447 
448 /*
449  * AER Capability & Control
450  */
451 #define	PCIE_AER_CTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
452 #define	PCIE_AER_CTL_ECRC_GEN_CAP	0x20	/* ECRC Generation Capable */
453 #define	PCIE_AER_CTL_ECRC_GEN_ENA	0x40	/* ECRC Generation Enable */
454 #define	PCIE_AER_CTL_ECRC_CHECK_CAP	0x80	/* ECRC Check Capable */
455 #define	PCIE_AER_CTL_ECRC_CHECK_ENA	0x100	/* ECRC Check Enable */
456 
457 /*
458  * AER Root Command Register
459  */
460 #define	PCIE_AER_RE_CMD_CE_REP_EN	0x1	/* Correctable Error Enable */
461 #define	PCIE_AER_RE_CMD_NFE_REP_EN	0x2	/* Non-Fatal Error Enable */
462 #define	PCIE_AER_RE_CMD_FE_REP_EN	0x4	/* Fatal Error Enable */
463 
464 /*
465  * AER Root Error Status Register
466  */
467 #define	PCIE_AER_RE_STS_CE_RCVD		0x1	/* ERR_COR Received */
468 #define	PCIE_AER_RE_STS_MUL_CE_RCVD	0x2	/* Multiple ERR_COR Received */
469 #define	PCIE_AER_RE_STS_FE_NFE_RCVD	0x4	/* FATAL/NON-FATAL Received */
470 #define	PCIE_AER_RE_STS_MUL_FE_NFE_RCVD	0x8	/* Multiple ERR_F/NF Received */
471 #define	PCIE_AER_RE_STS_FIRST_UC_FATAL	0x10	/* First Uncorrectable Fatal */
472 #define	PCIE_AER_RE_STS_NFE_MSGS_RCVD	0x20	/* Non-Fatal Error Msgs Rcvd */
473 #define	PCIE_AER_RE_STS_FE_MSGS_RCVD	0x40	/* Fatal Error Messages Rcvd */
474 
475 #define	PCIE_AER_RE_STS_MSG_NUM_SHIFT	27	/* Offset of Intr Msg Number */
476 #define	PCIE_AER_RE_STS_MSG_NUM_MASK	0x1F	/* Intr Msg Number Mask */
477 
478 /*
479  * AER Error Source Identification Register
480  */
481 #define	PCIE_AER_ERR_SRC_ID_CE_SHIFT	0	/* ERR_COR Source ID */
482 #define	PCIE_AER_ERR_SRC_ID_CE_MASK	0xFFFF
483 #define	PCIE_AER_ERR_SRC_ID_UE_SHIFT	16	/* ERR_FATAL/NONFATAL Src ID */
484 #define	PCIE_AER_ERR_SRC_ID_UE_MASK	0xFFF
485 
486 /*
487  * AER Secondary Uncorrectable Error Register
488  */
489 #define	PCIE_AER_SUCE_TA_ON_SC		0x1	/* Target Abort on Split Comp */
490 #define	PCIE_AER_SUCE_MA_ON_SC 		0x2	/* Master Abort on Split Comp */
491 #define	PCIE_AER_SUCE_RCVD_TA		0x4	/* Received Target Abort */
492 #define	PCIE_AER_SUCE_RCVD_MA 		0x8	/* Received Master Abort */
493 #define	PCIE_AER_SUCE_USC_ERR 		0x20	/* Unexpected Split Comp Err */
494 #define	PCIE_AER_SUCE_USC_MSG_DATA_ERR	0x40	/* USC Message Data Error */
495 #define	PCIE_AER_SUCE_UC_DATA_ERR	0x80	/* Uncorrectable Data Error */
496 #define	PCIE_AER_SUCE_UC_ATTR_ERR	0x100	/* UC Attribute Err */
497 #define	PCIE_AER_SUCE_UC_ADDR_ERR	0x200	/* Uncorrectable Address Err */
498 #define	PCIE_AER_SUCE_TIMER_EXPIRED	0x400	/* Delayed xtion discard */
499 #define	PCIE_AER_SUCE_PERR_ASSERT	0x800	/* PERR Assertion Detected */
500 #define	PCIE_AER_SUCE_SERR_ASSERT	0x1000	/* SERR Assertion Detected */
501 #define	PCIE_AER_SUCE_INTERNAL_ERR	0x2000	/* Internal Bridge Err Detect */
502 
503 #define	PCIE_AER_SUCE_HDR_CMD_LWR_MASK	0xF	/* Lower Command Mask */
504 #define	PCIE_AER_SUCE_HDR_CMD_LWR_SHIFT	4	/* Lower Command Shift */
505 #define	PCIE_AER_SUCE_HDR_CMD_UP_MASK	0xF	/* Upper Command Mask */
506 #define	PCIE_AER_SUCE_HDR_CMD_UP_SHIFT	8	/* Upper Command Shift */
507 #define	PCIE_AER_SUCE_HDR_ADDR_SHIFT	32	/* Upper Command Shift */
508 
509 #define	PCIE_AER_SUCE_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
510     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
511     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
512     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
513     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_TIMER_EXPIRED | \
514     PCIE_AER_SUCE_PERR_ASSERT |	PCIE_AER_SUCE_SERR_ASSERT | \
515     PCIE_AER_SUCE_INTERNAL_ERR)
516 #define	PCIE_AER_SUCE_LOG_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
517     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
518     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
519     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
520     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_PERR_ASSERT)
521 
522 /*
523  * AER Secondary Capability & Control
524  */
525 #define	PCIE_AER_SCTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
526 
527 /*
528  * AER Secondary Headers
529  * The Secondary Header Logs is 4 DW long.
530  * The first 2 DW are split into 3 sections
531  * o Transaction Attribute
532  * o Transaction Command Lower
533  * o Transaction Command Higher
534  * The last 2 DW is the Transaction Address
535  */
536 #define	PCIE_AER_SHDR_LOG_ATTR_MASK	0xFFFFFFFFF
537 #define	PCIE_AER_SHDR_LOG_CMD_LOW_MASK	0xF000000000
538 #define	PCIE_AER_SHDR_LOG_CMD_HIGH_MASK	0xF0000000000
539 #define	PCIE_AER_SHDR_LOG_ADDR_MASK	0xFFFFFFFFFFFFFFFF
540 
541 /*
542  * PCI-Express Device Serial Number Capability Offsets.
543  */
544 #define	PCIE_SER_CAP		0x0	/* Enhanced Capability Header */
545 #define	PCIE_SER_SID_LOWER_DW	0x4	/* Lower 32-bit Serial Number */
546 #define	PCIE_SER_SID_UPPER_DW	0x8	/* Upper 32-bit Serial Number */
547 
548 /*
549  * PCI-E Common TLP Header Fields
550  */
551 #define	PCIE_TLP_FMT_3DW	0x00
552 #define	PCIE_TLP_FMT_4DW	0x20
553 #define	PCIE_TLP_FMT_3DW_DATA	0x40
554 #define	PCIE_TLP_FMT_4DW_DATA	0x60
555 
556 #define	PCIE_TLP_TYPE_MEM	0x0
557 #define	PCIE_TLP_TYPE_MEMLK	0x1
558 #define	PCIE_TLP_TYPE_IO	0x2
559 #define	PCIE_TLP_TYPE_CFG0	0x4
560 #define	PCIE_TLP_TYPE_CFG1	0x5
561 #define	PCIE_TLP_TYPE_MSG	0x10
562 #define	PCIE_TLP_TYPE_CPL	0xA
563 #define	PCIE_TLP_TYPE_CPLLK	0xB
564 #define	PCIE_TLP_TYPE_MSI	0x18
565 
566 #define	PCIE_TLP_MRD3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEM)
567 #define	PCIE_TLP_MRD4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEM)
568 #define	PCIE_TLP_MRDLK3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEMLK)
569 #define	PCIE_TLP_MRDLK4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEMLK)
570 #define	PCIE_TLP_MRDWR3		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MEM)
571 #define	PCIE_TLP_MRDWR4		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MEM)
572 #define	PCIE_TLP_IORD		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_IO)
573 #define	PCIE_TLP_IOWR		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_IO)
574 #define	PCIE_TLP_CFGRD0		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG0)
575 #define	PCIE_TLP_CFGWR0		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG0)
576 #define	PCIE_TLP_CFGRD1		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG1)
577 #define	PCIE_TLP_CFGWR1		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG1)
578 #define	PCIE_TLP_MSG		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MSG)
579 #define	PCIE_TLP_MSGD		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSG)
580 #define	PCIE_TLP_CPL		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPL)
581 #define	PCIE_TLP_CPLD		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPL)
582 #define	PCIE_TLP_CPLLK		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPLLK)
583 #define	PCIE_TLP_CPLDLK		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPLLK)
584 #define	PCIE_TLP_MSI32		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MSI)
585 #define	PCIE_TLP_MSI64		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSI)
586 
587 typedef uint16_t pcie_req_id_t;
588 
589 #define	PCIE_REQ_ID_BUS_SHIFT	8
590 #define	PCIE_REQ_ID_BUS_MASK	0xFF00
591 #define	PCIE_REQ_ID_DEV_SHIFT	3
592 #define	PCIE_REQ_ID_DEV_MASK	0x00F1
593 #define	PCIE_REQ_ID_FUNC_SHIFT	0
594 #define	PCIE_REQ_ID_FUNC_MASK	0x0007
595 
596 #define	PCIE_CPL_STS_SUCCESS	0
597 #define	PCIE_CPL_STS_UR		1
598 #define	PCIE_CPL_STS_CRS	2
599 #define	PCIE_CPL_STS_CA		4
600 
601 #if defined(_BIT_FIELDS_LTOH)
602 /*
603  * PCI Express little-endian common TLP header format
604  */
605 typedef struct pcie_tlp_hdr {
606 	uint32_t	len	:10,
607 			rsvd3   :2,
608 			attr    :2,
609 			ep	:1,
610 			td	:1,
611 			rsvd2   :4,
612 			tc	:3,
613 			rsvd1   :1,
614 			type    :5,
615 			fmt	:2,
616 			rsvd0   :1;
617 } pcie_tlp_hdr_t;
618 
619 typedef struct pcie_mem64 {
620 	uint32_t	fbe	:4,
621 			lbe	:4,
622 			tag	:8,
623 			rid	:16;
624 	uint32_t	addr1;
625 	uint32_t	rsvd0   :2,
626 			addr0   :30;
627 } pcie_mem64_t;
628 
629 typedef struct pcie_memio32 {
630 	uint32_t	fbe	:4,
631 			lbe	:4,
632 			tag	:8,
633 			rid	:16;
634 	uint32_t	rsvd0   :2,
635 			addr0   :30;
636 } pcie_memio32_t;
637 
638 typedef struct pcie_cfg {
639 	uint32_t	fbe	:4,
640 			lbe	:4,
641 			tag	:8,
642 			rid	:16;
643 	uint32_t	rsvd1   :2,
644 			reg	:6,
645 			extreg  :4,
646 			rsvd0   :4,
647 			func    :3,
648 			dev	:5,
649 			bus	:8;
650 } pcie_cfg_t;
651 
652 typedef struct pcie_cpl {
653 	uint32_t	bc	:12,
654 			bcm	:1,
655 			status  :3,
656 			cid	:16;
657 	uint32_t	laddr   :7,
658 			rsvd0   :1,
659 			tag	:8,
660 			rid	:16;
661 } pcie_cpl_t;
662 
663 /*
664  * PCI-Express Message Request Header
665  */
666 typedef struct pcie_msg {
667 	uint32_t	msg_code:8,	/* DW1 */
668 			tag	:8,
669 			rid	:16;
670 	uint32_t	unused[2];	/* DW 2 & 3 */
671 } pcie_msg_t;
672 
673 #elif defined(_BIT_FIELDS_HTOL)
674 /*
675  * PCI Express big-endian common TLP header format
676  */
677 typedef struct pcie_tlp_hdr {
678 	uint32_t	rsvd0	:1,
679 			fmt	:2,
680 			type	:5,
681 			rsvd1	:1,
682 			tc	:3,
683 			rsvd2	:4,
684 			td	:1,
685 			ep	:1,
686 			attr	:2,
687 			rsvd3	:2,
688 			len	:10;
689 } pcie_tlp_hdr_t;
690 
691 typedef struct pcie_mem64 {
692 	uint32_t	rid	:16,
693 			tag	:8,
694 			lbe	:4,
695 			fbe	:4;
696 	uint32_t	addr1;
697 	uint32_t	addr0	:30,
698 			rsvd0	:2;
699 } pcie_mem64_t;
700 
701 typedef struct pcie_memio32 {
702 	uint32_t	rid	:16,
703 			tag	:8,
704 			lbe	:4,
705 			fbe	:4;
706 	uint32_t	addr0	:30,
707 			rsvd0	:2;
708 } pcie_memio32_t;
709 
710 typedef struct pcie_cfg {
711 	uint32_t	rid	:16,
712 			tag	:8,
713 			lbe	:4,
714 			fbe	:4;
715 	uint32_t	bus	:8,
716 			dev	:5,
717 			func	:3,
718 			rsvd0	:4,
719 			extreg	:4,
720 			reg	:6,
721 			rsvd1	:2;
722 } pcie_cfg_t;
723 
724 typedef struct pcie_cpl {
725 	uint32_t	cid	:16,
726 			status	:3,
727 			bcm	:1,
728 			bc	:12;
729 	uint32_t	rid	:16,
730 			tag	:8,
731 			rsvd0	:1,
732 			laddr	:7;
733 } pcie_cpl_t;
734 
735 /*
736  * PCI-Express Message Request Header
737  */
738 typedef struct pcie_msg {
739 	uint32_t	rid	:16,	/* DW1 */
740 			tag	:8,
741 			msg_code:8;
742 	uint32_t	unused[2];	/* DW 2 & 3 */
743 } pcie_msg_t;
744 #else
745 #error "bit field not defined"
746 #endif
747 
748 #define	PCIE_MSG_CODE_ERR_COR		0x30
749 #define	PCIE_MSG_CODE_ERR_NONFATAL	0x31
750 #define	PCIE_MSG_CODE_ERR_FATAL		0x33
751 
752 #ifdef	__cplusplus
753 }
754 #endif
755 
756 #endif	/* _SYS_PCIE_H */
757