xref: /titanic_53/usr/src/uts/common/sys/pcie.h (revision f8d2de6bd2421da1926f3daa456d161670decdf7)
1*f8d2de6bSjchu /*
2*f8d2de6bSjchu  * CDDL HEADER START
3*f8d2de6bSjchu  *
4*f8d2de6bSjchu  * The contents of this file are subject to the terms of the
5*f8d2de6bSjchu  * Common Development and Distribution License, Version 1.0 only
6*f8d2de6bSjchu  * (the "License").  You may not use this file except in compliance
7*f8d2de6bSjchu  * with the License.
8*f8d2de6bSjchu  *
9*f8d2de6bSjchu  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*f8d2de6bSjchu  * or http://www.opensolaris.org/os/licensing.
11*f8d2de6bSjchu  * See the License for the specific language governing permissions
12*f8d2de6bSjchu  * and limitations under the License.
13*f8d2de6bSjchu  *
14*f8d2de6bSjchu  * When distributing Covered Code, include this CDDL HEADER in each
15*f8d2de6bSjchu  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*f8d2de6bSjchu  * If applicable, add the following below this CDDL HEADER, with the
17*f8d2de6bSjchu  * fields enclosed by brackets "[]" replaced with your own identifying
18*f8d2de6bSjchu  * information: Portions Copyright [yyyy] [name of copyright owner]
19*f8d2de6bSjchu  *
20*f8d2de6bSjchu  * CDDL HEADER END
21*f8d2de6bSjchu  */
22*f8d2de6bSjchu /*
23*f8d2de6bSjchu  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*f8d2de6bSjchu  * Use is subject to license terms.
25*f8d2de6bSjchu  */
26*f8d2de6bSjchu 
27*f8d2de6bSjchu #ifndef	_SYS_PCIE_H
28*f8d2de6bSjchu #define	_SYS_PCIE_H
29*f8d2de6bSjchu 
30*f8d2de6bSjchu #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*f8d2de6bSjchu 
32*f8d2de6bSjchu #ifdef	__cplusplus
33*f8d2de6bSjchu extern "C" {
34*f8d2de6bSjchu #endif
35*f8d2de6bSjchu 
36*f8d2de6bSjchu #include <sys/pci.h>
37*f8d2de6bSjchu 
38*f8d2de6bSjchu /*
39*f8d2de6bSjchu  * PCI-Express Capability Registers Offsets
40*f8d2de6bSjchu  */
41*f8d2de6bSjchu #define	PCIE_CAP_ID			PCI_CAP_ID
42*f8d2de6bSjchu #define	PCIE_CAP_NEXT_PTR		PCI_CAP_NEXT_PTR
43*f8d2de6bSjchu #define	PCIE_PCIECAP			0x02	/* PCI-e Capability Reg */
44*f8d2de6bSjchu #define	PCIE_DEVCAP			0x04	/* Device Capability */
45*f8d2de6bSjchu #define	PCIE_DEVCTL			0x08	/* Device Control */
46*f8d2de6bSjchu #define	PCIE_DEVSTS			0x0A	/* Device Status */
47*f8d2de6bSjchu #define	PCIE_LINKCAP			0x04	/* Link Capability */
48*f8d2de6bSjchu #define	PCIE_LINKCTL			0x0C	/* Link Control */
49*f8d2de6bSjchu #define	PCIE_LINKSTS			0x10	/* Link Status */
50*f8d2de6bSjchu #define	PCIE_SLOTCAP			0x14	/* Slot Capability */
51*f8d2de6bSjchu #define	PCIE_SLOTCTL			0x18	/* Slot Control */
52*f8d2de6bSjchu #define	PCIE_SLOTSTS			0x1A	/* Slot Status */
53*f8d2de6bSjchu #define	PCIE_ROOTCTL			0x1C	/* Root Control */
54*f8d2de6bSjchu #define	PCIE_ROOTSTS			0x20	/* Root Status */
55*f8d2de6bSjchu 
56*f8d2de6bSjchu /*
57*f8d2de6bSjchu  * PCI-Express Capabilities Register
58*f8d2de6bSjchu  */
59*f8d2de6bSjchu #define	PCIE_PCIECAP_VER_1_0		0x1	/* PCI-E spec 1.0 */
60*f8d2de6bSjchu #define	PCIE_PCIECAP_VER_MASK		0xF	/* Version Mask */
61*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE_DEV	0x00	/* PCI-E Endpont Device */
62*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCI_DEV	0x10	/* Leg PCI Endpont Device */
63*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_ROOT	0x40	/* Root Port of Root Complex */
64*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_UP	0x50	/* Upstream Port of Switch */
65*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_DOWN	0x60	/* Downstream Port of Switch */
66*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCIE2PCI	0x70	/* PCI-E to PCI Bridge */
67*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_PCI2PCIE	0x80	/* PCI to PCI-E Bridge */
68*f8d2de6bSjchu #define	PCIE_PCIECAP_DEV_TYPE_MASK	0xF0	/* Device/Port Type Mask */
69*f8d2de6bSjchu #define	PCIE_PCIECAP_SLOT_IMPL		0x100	/* Slot Impl vs Integrated */
70*f8d2de6bSjchu #define	PCIE_PCIECAP_INT_MSG_NUM	0x3700	/* Interrupt Message Number */
71*f8d2de6bSjchu 
72*f8d2de6bSjchu /*
73*f8d2de6bSjchu  * Device Capabilities Register
74*f8d2de6bSjchu  */
75*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_128	0x0
76*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_256	0x1
77*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_512	0x2
78*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_1024	0x3
79*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_2048	0x4
80*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_4096	0x5
81*f8d2de6bSjchu #define	PCIE_DEVCAP_MAX_PAYLOAD_MASK	0x7	/* Max Payload Size Supported */
82*f8d2de6bSjchu 
83*f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_NONE	0x00	/* No Function # bits used */
84*f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_ONE	0x08	/* First most sig. bit used */
85*f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_TWO	0x10	/* First 2 most sig bit used */
86*f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_THREE	0x18	/* All 3 bits used */
87*f8d2de6bSjchu #define	PCIE_DEVCAP_PHTM_FUNC_MASK	0x18	/* Phantom Func Supported */
88*f8d2de6bSjchu 
89*f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_5BIT	0x00	/* 5-Bit Tag Field Supported */
90*f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_8BIT	0x20	/* 8-Bit Tag Field Supported */
91*f8d2de6bSjchu #define	PCIE_DEVCAP_EXT_TAG_MASK	0x20	/* Ext. Tag Field Supported */
92*f8d2de6bSjchu 
93*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MIN	0x000	/* < 64 ns */
94*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_64ns	0x040	/* 64 ns - 128 ns */
95*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_128ns	0x080	/* 128 ns - 256 ns */
96*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_256ns	0x0C0	/* 256 ns - 512 ns */
97*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_512ns	0x100	/* 512 ns - 1 us */
98*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_1us	0x140	/* 1 us - 2 us */
99*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_2us	0x180	/* 2 us - 4 us */
100*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MAX	0x1C0	/* > 4 us */
101*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L0S_LAT_MASK	0x1C0	/* EP L0s Accetable Latency */
102*f8d2de6bSjchu 
103*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MIN	0x000	/* < 1 us */
104*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_1us	0x140	/* 1 us - 2 us */
105*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_2us	0x180	/* 2 us - 4 us */
106*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_4us	0x140	/* 4 us - 8 us */
107*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_8us	0x180	/* 8 us - 16 us */
108*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_16us	0x140	/* 16 us - 32 us */
109*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_32us	0x180	/* 32 us - 64 us */
110*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MAX	0x1C0	/* > 64 us */
111*f8d2de6bSjchu #define	PCIE_DEVCAP_EP_L1_LAT_MASK	0x700	/* EP L1 Accetable Latency */
112*f8d2de6bSjchu 
113*f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_BUTTON		0x1000	/* Attention Button Present */
114*f8d2de6bSjchu #define	PCIE_DEVCAP_ATTN_INDICATOR	0x2000	/* Attn Indicator Present */
115*f8d2de6bSjchu #define	PCIE_DEVCAP_PWR_INDICATOR	0x4000	/* Power Indicator Present */
116*f8d2de6bSjchu 
117*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_SHIFT	18	/* Power Limit Value Shift */
118*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_VAL_MASK	0xFF	/* Power Limit Value Mask */
119*f8d2de6bSjchu 
120*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1	0x0000000	/* 1x Scale */
121*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_10	0x4000000	/* 0.1x Scale */
122*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_100	0x8000000	/* 0.01x Scale */
123*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_1_BY_1000	0xC000000	/* 0.001x Scale */
124*f8d2de6bSjchu #define	PCIE_DEVCAP_PLMT_SCL_MASK	0xC000000	/* Power Limit Scale */
125*f8d2de6bSjchu 
126*f8d2de6bSjchu /*
127*f8d2de6bSjchu  * Device Control Register
128*f8d2de6bSjchu  */
129*f8d2de6bSjchu #define	PCIE_DEVCTL_CE_REPORTING_EN	0x1	/* Correctable Error Enable */
130*f8d2de6bSjchu #define	PCIE_DEVCTL_NFE_REPORTING_EN	0x2	/* Non-Fatal Error Enable */
131*f8d2de6bSjchu #define	PCIE_DEVCTL_FE_REPORTING_EN	0x4	/* Fatal Error Enable */
132*f8d2de6bSjchu #define	PCIE_DEVCTL_UR_REPORTING_EN	0x8	/* Unsupported Request Enable */
133*f8d2de6bSjchu #define	PCIE_DEVCTL_RO_EN		0x10	/* Enable Relaxed Ordering */
134*f8d2de6bSjchu 
135*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_128	0x00
136*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_256	0x20
137*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_512	0x40
138*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_1024	0x60
139*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_2048	0x80
140*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_4096	0xA0
141*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_PAYLOAD_MASK	0xE0	/* Max_Payload_Size */
142*f8d2de6bSjchu 
143*f8d2de6bSjchu #define	PCIE_DEVCTL_EXT_TAG_FIELD_EN	0x100	/* Extended Tag Field Enable */
144*f8d2de6bSjchu #define	PCIE_DEVCTL_PHTM_FUNC_EN	0x200	/* Phantom Functions Enable */
145*f8d2de6bSjchu #define	PCIE_DEVCTL_AUX_POWER_PM_EN	0x400	/* Auxiliary Power PM Enable */
146*f8d2de6bSjchu #define	PCIE_DEVCTL_ENABLE_NO_SNOOP	0x800	/* Enable No Snoop */
147*f8d2de6bSjchu 
148*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_128	0x00
149*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_256	0x10
150*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_512	0x20
151*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_1024	0x30
152*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_2048	0x40
153*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_4096	0x50
154*f8d2de6bSjchu #define	PCIE_DEVCTL_MAX_READ_REQ_MASK	0x7000	/* Max_Read_Request_Size */
155*f8d2de6bSjchu 
156*f8d2de6bSjchu /*
157*f8d2de6bSjchu  * Device Status Register
158*f8d2de6bSjchu  */
159*f8d2de6bSjchu #define	PCIE_DEVSTS_CE_DETECTED		0x1	/* Correctable Error Detected */
160*f8d2de6bSjchu #define	PCIE_DEVSTS_NFE_DETECTED	0x2	/* Non Fatal Error Detected */
161*f8d2de6bSjchu #define	PCIE_DEVSTS_FE_DETECTED		0x4	/* Fatal Error Detected */
162*f8d2de6bSjchu #define	PCIE_DEVSTS_UR_DETECTED		0x8	/* Unsupported Req Detected */
163*f8d2de6bSjchu #define	PCIE_DEVSTS_AUX_POWER		0x10	/* AUX Power Detected */
164*f8d2de6bSjchu #define	PCIE_DEVSTS_TRANS_PENDING	0x20	/* Transactions Pending */
165*f8d2de6bSjchu 
166*f8d2de6bSjchu /*
167*f8d2de6bSjchu  * Link Capability Register
168*f8d2de6bSjchu  */
169*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_SPEED_2_5	0x1	/* 2.5 Gb/s Speed */
170*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_SPEED_MASK	0xF	/* Maximum Link Speed */
171*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X1	0x010
172*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X2	0x020
173*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X4	0x040
174*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X8	0x080
175*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X12	0x0C0
176*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X16	0x100
177*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_X32	0x200
178*f8d2de6bSjchu #define	PCIE_LINKCAP_MAX_WIDTH_MASK	0x3f0	/* Maximum Link Width */
179*f8d2de6bSjchu 
180*f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S	0x400	/* L0s Entry Supported */
181*f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_L0S_L1	0xC00	/* L0s abd L1 Supported */
182*f8d2de6bSjchu #define	PCIE_LINKCAP_ASPM_SUP_MASK	0xC00	/* ASPM Support */
183*f8d2de6bSjchu 
184*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MIN	0x0000	/* < 64 ns */
185*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_64ns	0x1000	/* 64 ns - 128 ns */
186*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_128ns	0x2000	/* 128 ns - 256 ns */
187*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_256ns	0x3000	/* 256 ns - 512 ns */
188*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_512ns	0x4000	/* 512 ns - 1 us */
189*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_1us	0x5000	/* 1 us - 2 us */
190*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_2us	0x6000	/* 2 us - 4 us */
191*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MAX	0x7000	/* > 4 us */
192*f8d2de6bSjchu #define	PCIE_LINKCAP_L0S_EXIT_LAT_MASK	0x7000	/* L0s Exit Latency */
193*f8d2de6bSjchu 
194*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MIN	0x00000	/* < 1 us */
195*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_1us	0x08000	/* 1 us - 2 us */
196*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_2us	0x10000	/* 2 us - 4 us */
197*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_4us	0x18000	/* 4 us - 8 us */
198*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_8us	0x20000	/* 8 us - 16 us */
199*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_16us	0x28000	/* 16 us - 32 us */
200*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_32us	0x30000	/* 32 us - 64 us */
201*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MAX	0x38000	/* > 64 us */
202*f8d2de6bSjchu #define	PCIE_LINKCAP_L1_EXIT_LAT_MASK	0x38000	/* L1 Exit Latency */
203*f8d2de6bSjchu 
204*f8d2de6bSjchu #define	PCIE_LINKCAP_PORT_NUMBER	0xF0000000	/* Port Number */
205*f8d2de6bSjchu 
206*f8d2de6bSjchu /*
207*f8d2de6bSjchu  * Link Control Register
208*f8d2de6bSjchu  */
209*f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_DIS	0x0	/* ASPM Disable */
210*f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S	0x1	/* ASPM L0s only */
211*f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L1	0x2	/* ASPM L1 only */
212*f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_L0S_L1	0x3	/* ASPM L0s and L1 only */
213*f8d2de6bSjchu #define	PCIE_LINKCTL_ASPM_CTL_MASK	0x3	/* ASPM Control */
214*f8d2de6bSjchu 
215*f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_64_BYTE	0x0	/* 64 Byte */
216*f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_128_BYTE	0x8	/* 128 Byte */
217*f8d2de6bSjchu #define	PCIE_LINKCTL_RCB_MASK		0x8	/* Read Completion Boundary */
218*f8d2de6bSjchu 
219*f8d2de6bSjchu #define	PCIE_LINKCTL_LINK_DISABLE	0x10	/* Link Disable */
220*f8d2de6bSjchu #define	PCIE_LINKCTL_RETRAIN_LINK	0x20	/* Retrain Link */
221*f8d2de6bSjchu #define	PCIE_LINKCTL_COMMON_CLK_CFG	0x40	/* Common Clock Configuration */
222*f8d2de6bSjchu #define	PCIE_LINKCTL_EXT_SYNCH		0x80	/* Extended Synch */
223*f8d2de6bSjchu 
224*f8d2de6bSjchu /*
225*f8d2de6bSjchu  * Link Status Register
226*f8d2de6bSjchu  */
227*f8d2de6bSjchu #define	PCIE_LINKSTS_SPEED_2_5		0x1	/* Link Speed */
228*f8d2de6bSjchu #define	PCIE_LINKSTS_SPEED_MASK		0xF	/* Link Speed */
229*f8d2de6bSjchu 
230*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X1	0x010
231*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X2	0x020
232*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X4	0x040
233*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X8	0x080
234*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X12	0x0C0
235*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X16	0x100
236*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_X32	0x200
237*f8d2de6bSjchu #define	PCIE_LINKSTS_NEG_WIDTH_MASK	0x3F0	/* Negotiated Link Width */
238*f8d2de6bSjchu 
239*f8d2de6bSjchu #define	PCIE_LINKSTS_TRAINING_ERROR	0x400	/* Training Error */
240*f8d2de6bSjchu #define	PCIE_LINKSTS_LINK_TRAINING	0x800	/* Link Training */
241*f8d2de6bSjchu #define	PCIE_LINKSTS_SLOT_CLK_CFG	0x1000	/* Slot Clock Configuration */
242*f8d2de6bSjchu 
243*f8d2de6bSjchu /*
244*f8d2de6bSjchu  * Slot Capability Register
245*f8d2de6bSjchu  */
246*f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_BUTTON	0x1	/* Attention Button Present */
247*f8d2de6bSjchu #define	PCIE_SLOTCAP_POWER_CONTROLLER	0x2	/* Power Controller Present */
248*f8d2de6bSjchu #define	PCIE_SLOTCAP_MRL_SENSOR		0x4	/* MRL Sensor Present */
249*f8d2de6bSjchu #define	PCIE_SLOTCAP_ATTN_INDICATOR	0x8	/* Attn Indicator Present */
250*f8d2de6bSjchu #define	PCIE_SLOTCAP_PWR_INDICATOR	0x10	/* Power Indicator Present */
251*f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_SURPRISE	0x20	/* Hot-Plug Surprise */
252*f8d2de6bSjchu #define	PCIE_SLOTCAP_HP_CAPABLE		0x40	/* Hot-Plug Capable */
253*f8d2de6bSjchu 
254*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_SHIFT	7	/* Slot Pwr Limit Value Shift */
255*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_VAL_MASK	0xFF	/* Slot Pwr Limit Value */
256*f8d2de6bSjchu 
257*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1	0x00000	/* 1x Scale */
258*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_10	0x08000	/* 0.1x Scale */
259*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_100	0x10000	/* 0.01x Scale */
260*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_1_BY_1000	0x18000	/* 0.001x Scale */
261*f8d2de6bSjchu #define	PCIE_SLOTCAP_PLMT_SCL_MASK	0x18000	/* Slot Power Limit Scale */
262*f8d2de6bSjchu 
263*f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_SHIFT	19	/* Physical Slot Num Shift */
264*f8d2de6bSjchu #define	PCIE_SLOTCAP_PHY_SLOT_NUM_MASK	0x1FFF	/* Physical Slot Num Mask */
265*f8d2de6bSjchu 
266*f8d2de6bSjchu /*
267*f8d2de6bSjchu  * Slot Control Register
268*f8d2de6bSjchu  */
269*f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_BTN_EN	0x1	/* Attn Button Pressed Enable */
270*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_FAULT_EN	0x2	/* Pwr Fault Detected Enable */
271*f8d2de6bSjchu #define	PCIE_SLOTCTL_MRL_SENSOR_EN	0x4	/* MRL Sensor Changed Enable */
272*f8d2de6bSjchu #define	PCIE_SLOTCTL_PRESENCE_CHANGE_EN	0x8	/* Presence Detect Changed En */
273*f8d2de6bSjchu #define	PCIE_SLOTCTL_CMD_INTR_EN	0x10	/* CMD Completed Interrupt En */
274*f8d2de6bSjchu #define	PCIE_SLOTCTL_HP_INTR_EN		0x20	/* Hot-Plug Interrupt Enable */
275*f8d2de6bSjchu 
276*f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_CTL_ON	0x40	/* On  */
277*f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_CTL_BLINK	0x80	/* Blink */
278*f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_CTL_OFF	0xC0	/* Off */
279*f8d2de6bSjchu #define	PCIE_SLOTCTL_ATTN_CTL_MASK	0xC0	/* Attn Indicator Control */
280*f8d2de6bSjchu 
281*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_CTL_ON		0x100	/* On  */
282*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_CTL_BLINK	0x200	/* Blink */
283*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_CTL_OFF	0x300	/* Off */
284*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_CTL_MASK	0x300	/* Power Indicator Control */
285*f8d2de6bSjchu 
286*f8d2de6bSjchu #define	PCIE_SLOTCTL_PWR_CONTROLLER_CTL	0x400	/* Power Controller Control */
287*f8d2de6bSjchu 
288*f8d2de6bSjchu /*
289*f8d2de6bSjchu  * Slot Status Register
290*f8d2de6bSjchu  */
291*f8d2de6bSjchu #define	PCIE_SLOTSTS_ATTN_BTN_PRESSED	0x1	/* Attention Button Pressed */
292*f8d2de6bSjchu #define	PCIE_SLOTSTS_PWR_FAULT_DETECTED	0x2	/* Power Fault Detected */
293*f8d2de6bSjchu #define	PCIE_SLOTSTS_MRL_SENSOR_CHANGED	0x4	/* MRL Sensor Changed */
294*f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_CHANGED	0x8	/* Presence Detect Changed */
295*f8d2de6bSjchu #define	PCIE_SLOTSTS_COMMAND_COMPLETED	0x10	/* Command Completed */
296*f8d2de6bSjchu #define	PCIE_SLOTSTS_MRL_SENSOR_OPEN	0x20	/* MRL Open */
297*f8d2de6bSjchu #define	PCIE_SLOTSTS_PRESENCE_DETECTED	0x40	/* Card Present in slot */
298*f8d2de6bSjchu 
299*f8d2de6bSjchu /*
300*f8d2de6bSjchu  * Root Control Register
301*f8d2de6bSjchu  */
302*f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_CE_EN	0x1	/* Sys Err on Cor Err Enable */
303*f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_NFE_EN	0x2	/* Sys Err on NF Err Enable */
304*f8d2de6bSjchu #define	PCIE_ROOTCTL_SYS_ERR_ON_FE_EN	0x3	/* Sys Err on Fatal Err En */
305*f8d2de6bSjchu #define	PCIE_ROOTCTL_PME_INTERRUPT_EN	0x4	/* PME Interrupt Enable */
306*f8d2de6bSjchu 
307*f8d2de6bSjchu /*
308*f8d2de6bSjchu  * Root Status Register
309*f8d2de6bSjchu  */
310*f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_SHIFT	0	/* PME Requestor ID */
311*f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_REQ_ID_MASK	0xFFFF	/* PME Requestor ID */
312*f8d2de6bSjchu 
313*f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_STATUS		0x10000	/* PME Status */
314*f8d2de6bSjchu #define	PCIE_ROOTSTS_PME_PENDING	0x20000	/* PME Pending */
315*f8d2de6bSjchu 
316*f8d2de6bSjchu 
317*f8d2de6bSjchu /*
318*f8d2de6bSjchu  * PCI-Express Enhanced Capabilities Link Entry Bit Offsets
319*f8d2de6bSjchu  */
320*f8d2de6bSjchu #define	PCIE_EXT_CAP			0x100	/* Base Address of Ext Cap */
321*f8d2de6bSjchu 
322*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SHIFT		0	/* PCI-e Ext Cap ID */
323*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_MASK		0xFFFF
324*f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_SHIFT		16	/* PCI-e Ext Cap Ver */
325*f8d2de6bSjchu #define	PCIE_EXT_CAP_VER_MASK		0xF
326*f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_SHIFT	20	/* PCI-e Ext Cap Next Ptr */
327*f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_MASK	0xFFF
328*f8d2de6bSjchu 
329*f8d2de6bSjchu #define	PCIE_EXT_CAP_NEXT_PTR_NULL	0x0
330*f8d2de6bSjchu 
331*f8d2de6bSjchu /*
332*f8d2de6bSjchu  * PCI-Express Enhanced Capability Identifier Values
333*f8d2de6bSjchu  */
334*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_AER		0x1	/* Advanced Error Handling */
335*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_VC		0x2	/* Virtual Channel */
336*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_SER		0x3	/* Serial Number */
337*f8d2de6bSjchu #define	PCIE_EXT_CAP_ID_PWR_BUDGET	0x4	/* Power Budgeting */
338*f8d2de6bSjchu 
339*f8d2de6bSjchu /*
340*f8d2de6bSjchu  * PCI-Express Advanced Error Reporting Extended Capability Offsets
341*f8d2de6bSjchu  */
342*f8d2de6bSjchu #define	PCIE_AER_CAP			0x0	/* Enhanced Capability Header */
343*f8d2de6bSjchu #define	PCIE_AER_UCE_STS		0x4	/* Uncorrectable Error Status */
344*f8d2de6bSjchu #define	PCIE_AER_UCE_MASK		0x8	/* Uncorrectable Error Mask */
345*f8d2de6bSjchu #define	PCIE_AER_UCE_SERV		0xc	/* Uncor Error Severity */
346*f8d2de6bSjchu #define	PCIE_AER_CE_STS			0x10	/* Correctable Error Status */
347*f8d2de6bSjchu #define	PCIE_AER_CE_MASK		0x14	/* Correctable Error Mask */
348*f8d2de6bSjchu #define	PCIE_AER_CTL			0x18	/* AER Capability & Control */
349*f8d2de6bSjchu #define	PCIE_AER_HDR_LOG		0x1c	/* Header Log */
350*f8d2de6bSjchu 
351*f8d2de6bSjchu /* Root Ports Only */
352*f8d2de6bSjchu #define	PCIE_AER_RE_CMD			0x2c	/* Root Error Command */
353*f8d2de6bSjchu #define	PCIE_AER_RE_STS			0x30	/* Root Error Status */
354*f8d2de6bSjchu #define	PCIE_AER_CE_SRC_ID		0x34	/* Error Source ID */
355*f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID		0x36	/* Error Source ID */
356*f8d2de6bSjchu 
357*f8d2de6bSjchu /* Bridges Only */
358*f8d2de6bSjchu #define	PCIE_AER_SUCE_STS		0x2c	/* Secondary UCE Status */
359*f8d2de6bSjchu #define	PCIE_AER_SUCE_MASK		0x30	/* Secondary UCE Mask */
360*f8d2de6bSjchu #define	PCIE_AER_SUCE_SERV		0x34	/* Secondary UCE Severity */
361*f8d2de6bSjchu #define	PCIE_AER_SCTL			0x38	/* Secondary Cap & Ctl */
362*f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG		0x3c	/* Secondary Header Log */
363*f8d2de6bSjchu 
364*f8d2de6bSjchu /*
365*f8d2de6bSjchu  * AER Uncorrectable Error Status/Mask/Severity Register
366*f8d2de6bSjchu  */
367*f8d2de6bSjchu #define	PCIE_AER_UCE_TRAINING		0x0	/* Training Error Status */
368*f8d2de6bSjchu #define	PCIE_AER_UCE_DLP		0x10	/* Data Link Protocol Error */
369*f8d2de6bSjchu #define	PCIE_AER_UCE_PTLP		0x1000	/* Poisoned TLP Status */
370*f8d2de6bSjchu #define	PCIE_AER_UCE_FCP		0x2000	/* Flow Control Protocol Sts */
371*f8d2de6bSjchu #define	PCIE_AER_UCE_TO			0x4000	/* Completion Timeout Status */
372*f8d2de6bSjchu #define	PCIE_AER_UCE_CA			0x8000	/* Completer Abort Status */
373*f8d2de6bSjchu #define	PCIE_AER_UCE_UC			0x10000	/* Unexpected Completion Sts */
374*f8d2de6bSjchu #define	PCIE_AER_UCE_RO			0x20000	/* Receiver Overflow Status */
375*f8d2de6bSjchu #define	PCIE_AER_UCE_MTLP		0x40000	/* Malformed TLP Status */
376*f8d2de6bSjchu #define	PCIE_AER_UCE_ECRC		0x80000	/* ECRC Error Status */
377*f8d2de6bSjchu #define	PCIE_AER_UCE_UR		0x100000	/* Unsupported Req */
378*f8d2de6bSjchu #define	PCIE_AER_UCE_BITS		(PCIE_AER_UCE_TRAINING | \
379*f8d2de6bSjchu     PCIE_AER_UCE_DLP | PCIE_AER_UCE_PTLP | PCIE_AER_UCE_FCP | \
380*f8d2de6bSjchu     PCIE_AER_UCE_TO | PCIE_AER_UCE_CA | PCIE_AER_UCE_UC | PCIE_AER_UCE_RO | \
381*f8d2de6bSjchu     PCIE_AER_UCE_MTLP | PCIE_AER_UCE_ECRC | PCIE_AER_UCE_UR)
382*f8d2de6bSjchu 
383*f8d2de6bSjchu /*
384*f8d2de6bSjchu  * AER Correctable Error Status/Mask Register
385*f8d2de6bSjchu  */
386*f8d2de6bSjchu #define	PCIE_AER_CE_RECEIVER_ERR	0x1	/* Receiver Error Status */
387*f8d2de6bSjchu #define	PCIE_AER_CE_BAD_TLP		0x40	/* Bad TLP Status */
388*f8d2de6bSjchu #define	PCIE_AER_CE_BAD_DLLP		0x80	/* Bad DLLP Status */
389*f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_ROLLOVER	0x100	/* REPLAY_NUM Rollover Status */
390*f8d2de6bSjchu #define	PCIE_AER_CE_REPLAY_TO		0x1000	/* Replay Timer Timeout Sts */
391*f8d2de6bSjchu #define	PCIE_AER_CE_BITS		(PCIE_AER_CE_RECEIVER_ERR | \
392*f8d2de6bSjchu     PCIE_AER_CE_BAD_TLP | PCIE_AER_CE_BAD_DLLP | PCIE_AER_CE_REPLAY_ROLLOVER | \
393*f8d2de6bSjchu     PCIE_AER_CE_REPLAY_TO)
394*f8d2de6bSjchu 
395*f8d2de6bSjchu /*
396*f8d2de6bSjchu  * AER Capability & Control
397*f8d2de6bSjchu  */
398*f8d2de6bSjchu #define	PCIE_AER_CTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
399*f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_CAP	0x20	/* ECRC Generation Capable */
400*f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_GEN_ENA	0x40	/* ECRC Generation Enable */
401*f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_CAP	0x80	/* ECRC Check Capable */
402*f8d2de6bSjchu #define	PCIE_AER_CTL_ECRC_CHECK_ENA	0x100	/* ECRC Check Enable */
403*f8d2de6bSjchu 
404*f8d2de6bSjchu /*
405*f8d2de6bSjchu  * AER Root Command Register
406*f8d2de6bSjchu  */
407*f8d2de6bSjchu #define	PCIE_AER_RE_CMD_CE_REP_EN	0x1	/* Correctable Error Enable */
408*f8d2de6bSjchu #define	PCIE_AER_RE_CMD_NFE_REP_EN	0x2	/* Non-Fatal Error Enable */
409*f8d2de6bSjchu #define	PCIE_AER_RE_CMD_FE_REP_EN	0x4	/* Fatal Error Enable */
410*f8d2de6bSjchu 
411*f8d2de6bSjchu /*
412*f8d2de6bSjchu  * AER Root Error Status Register
413*f8d2de6bSjchu  */
414*f8d2de6bSjchu #define	PCIE_AER_RE_STS_CE_RCVD		0x1	/* ERR_COR Received */
415*f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_CE_RCVD	0x2	/* Multiple ERR_COR Received */
416*f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_NFE_RCVD	0x4	/* FATAL/NON-FATAL Received */
417*f8d2de6bSjchu #define	PCIE_AER_RE_STS_MUL_FE_NFE_RCVD	0x8	/* Multiple ERR_F/NF Received */
418*f8d2de6bSjchu #define	PCIE_AER_RE_STS_FIRST_UC_FATAL	0x10	/* First Uncorrectable Fatal */
419*f8d2de6bSjchu #define	PCIE_AER_RE_STS_NFE_MSGS_RCVD	0x20	/* Non-Fatal Error Msgs Rcvd */
420*f8d2de6bSjchu #define	PCIE_AER_RE_STS_FE_MSGS_RCVD	0x40	/* Fatal Error Messages Rcvd */
421*f8d2de6bSjchu 
422*f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_SHIFT	27	/* Offset of Intr Msg Number */
423*f8d2de6bSjchu #define	PCIE_AER_RE_STS_MSG_NUM_MASK	0x1F	/* Intr Msg Number Mask */
424*f8d2de6bSjchu 
425*f8d2de6bSjchu /*
426*f8d2de6bSjchu  * AER Error Source Identification Register
427*f8d2de6bSjchu  */
428*f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_SHIFT	0	/* ERR_COR Source ID */
429*f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_CE_MASK	0xFFFF
430*f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_UE_SHIFT	16	/* ERR_FATAL/NONFATAL Src ID */
431*f8d2de6bSjchu #define	PCIE_AER_ERR_SRC_ID_UE_MASK	0xFFF
432*f8d2de6bSjchu 
433*f8d2de6bSjchu /*
434*f8d2de6bSjchu  * AER Secondary Uncorrectable Error Register
435*f8d2de6bSjchu  */
436*f8d2de6bSjchu #define	PCIE_AER_SUCE_TA_ON_SC		0x1	/* Target Abort on Split Comp */
437*f8d2de6bSjchu #define	PCIE_AER_SUCE_MA_ON_SC 		0x2	/* Master Abort on Split Comp */
438*f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_TA		0x4	/* Received Target Abort */
439*f8d2de6bSjchu #define	PCIE_AER_SUCE_RCVD_MA 		0x8	/* Received Master Abort */
440*f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_ERR 		0x20	/* Unexpected Split Comp Err */
441*f8d2de6bSjchu #define	PCIE_AER_SUCE_USC_MSG_DATA_ERR	0x40	/* USC Message Data Error */
442*f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_DATA_ERR	0x80	/* Uncorrectable Data Error */
443*f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ATTR_ERR	0x100	/* UC Attribute Err */
444*f8d2de6bSjchu #define	PCIE_AER_SUCE_UC_ADDR_ERR	0x200	/* Uncorrectable Address Err */
445*f8d2de6bSjchu #define	PCIE_AER_SUCE_TIMER_EXPIRED	0x400	/* Delayed xtion discard */
446*f8d2de6bSjchu #define	PCIE_AER_SUCE_PERR_ASSERT	0x800	/* PERR Assertion Detected */
447*f8d2de6bSjchu #define	PCIE_AER_SUCE_SERR_ASSERT	0x1000	/* SERR Assertion Detected */
448*f8d2de6bSjchu #define	PCIE_AER_SUCE_INTERNAL_ERR	0x2000	/* Internal Bridge Err Detect */
449*f8d2de6bSjchu #define	PCIE_AER_SUCE_BITS		(PCIE_AER_SUCE_TA_ON_SC | \
450*f8d2de6bSjchu     PCIE_AER_SUCE_MA_ON_SC | PCIE_AER_SUCE_RCVD_TA | PCIE_AER_SUCE_RCVD_MA | \
451*f8d2de6bSjchu     PCIE_AER_SUCE_USC_ERR | PCIE_AER_SUCE_USC_MSG_DATA_ERR | \
452*f8d2de6bSjchu     PCIE_AER_SUCE_UC_DATA_ERR | PCIE_AER_SUCE_UC_ATTR_ERR | \
453*f8d2de6bSjchu     PCIE_AER_SUCE_UC_ADDR_ERR |	PCIE_AER_SUCE_TIMER_EXPIRED | \
454*f8d2de6bSjchu     PCIE_AER_SUCE_PERR_ASSERT |	PCIE_AER_SUCE_SERR_ASSERT | \
455*f8d2de6bSjchu     PCIE_AER_SUCE_INTERNAL_ERR)
456*f8d2de6bSjchu 
457*f8d2de6bSjchu /*
458*f8d2de6bSjchu  * AER Secondary Capability & Control
459*f8d2de6bSjchu  */
460*f8d2de6bSjchu #define	PCIE_AER_SCTL_FST_ERR_PTR_MASK	0x1F	/* First Error Pointer */
461*f8d2de6bSjchu 
462*f8d2de6bSjchu /*
463*f8d2de6bSjchu  * AER Secondary Headers
464*f8d2de6bSjchu  * The Secondary Header Logs is 4 DW long.
465*f8d2de6bSjchu  * The first 2 DW are split into 3 sections
466*f8d2de6bSjchu  * o Transaction Attribute
467*f8d2de6bSjchu  * o Transaction Command Lower
468*f8d2de6bSjchu  * o Transaction Command Higher
469*f8d2de6bSjchu  * The last 2 DW is the Transaction Address
470*f8d2de6bSjchu  */
471*f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ATTR_MASK	0xFFFFFFFFF
472*f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_LOW_MASK	0xF000000000
473*f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_CMD_HIGH_MASK	0xF0000000000
474*f8d2de6bSjchu #define	PCIE_AER_SHDR_LOG_ADDR_MASK	0xFFFFFFFFFFFFFFFF
475*f8d2de6bSjchu 
476*f8d2de6bSjchu /*
477*f8d2de6bSjchu  * PCI-E Common TLP Header Fields
478*f8d2de6bSjchu  */
479*f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW 	0x00
480*f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW	0x20
481*f8d2de6bSjchu #define	PCIE_TLP_FMT_3DW_DATA	0x40
482*f8d2de6bSjchu #define	PCIE_TLP_FMT_4DW_DATA	0x60
483*f8d2de6bSjchu 
484*f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEM	0x0
485*f8d2de6bSjchu #define	PCIE_TLP_TYPE_MEMLK	0x1
486*f8d2de6bSjchu #define	PCIE_TLP_TYPE_IO 	0x2
487*f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG0	0x4
488*f8d2de6bSjchu #define	PCIE_TLP_TYPE_CFG1	0x5
489*f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSG 	0x10
490*f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPL	0xA
491*f8d2de6bSjchu #define	PCIE_TLP_TYPE_CPLLK	0xB
492*f8d2de6bSjchu #define	PCIE_TLP_TYPE_MSI	0x18
493*f8d2de6bSjchu 
494*f8d2de6bSjchu #define	PCIE_TLP_MRD3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEM)
495*f8d2de6bSjchu #define	PCIE_TLP_MRD4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEM)
496*f8d2de6bSjchu #define	PCIE_TLP_MRDLK3		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_MEMLK)
497*f8d2de6bSjchu #define	PCIE_TLP_MRDLK4		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MEMLK)
498*f8d2de6bSjchu #define	PCIE_TLP_MRDWR3		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MEM)
499*f8d2de6bSjchu #define	PCIE_TLP_MRDWR4		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MEM)
500*f8d2de6bSjchu #define	PCIE_TLP_IORD 		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_IO)
501*f8d2de6bSjchu #define	PCIE_TLP_IOWR 		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_IO)
502*f8d2de6bSjchu #define	PCIE_TLP_CFGRD0		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG0)
503*f8d2de6bSjchu #define	PCIE_TLP_CFGWR0		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG0)
504*f8d2de6bSjchu #define	PCIE_TLP_CFGRD1		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CFG1)
505*f8d2de6bSjchu #define	PCIE_TLP_CFGWR1		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CFG1)
506*f8d2de6bSjchu #define	PCIE_TLP_MSG 		(PCIE_TLP_FMT_4DW | PCIE_TLP_TYPE_MSG)
507*f8d2de6bSjchu #define	PCIE_TLP_MSGD 		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSG)
508*f8d2de6bSjchu #define	PCIE_TLP_CPL		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPL)
509*f8d2de6bSjchu #define	PCIE_TLP_CPLD		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPL)
510*f8d2de6bSjchu #define	PCIE_TLP_CPLLK		(PCIE_TLP_FMT_3DW | PCIE_TLP_TYPE_CPLLK)
511*f8d2de6bSjchu #define	PCIE_TLP_CPLDLK		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_CPLLK)
512*f8d2de6bSjchu #define	PCIE_TLP_MSI32		(PCIE_TLP_FMT_3DW_DATA | PCIE_TLP_TYPE_MSI)
513*f8d2de6bSjchu #define	PCIE_TLP_MSI64		(PCIE_TLP_FMT_4DW_DATA | PCIE_TLP_TYPE_MSI)
514*f8d2de6bSjchu 
515*f8d2de6bSjchu typedef uint16_t pcie_req_id_t;
516*f8d2de6bSjchu 
517*f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_SHIFT	8
518*f8d2de6bSjchu #define	PCIE_REQ_ID_BUS_MASK	0xFF00
519*f8d2de6bSjchu #define	PCIE_REQ_ID_DEV_SHIFT	3
520*f8d2de6bSjchu #define	PCIE_REQ_ID_DEV_MASK	0x00F1
521*f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_SHIFT	0
522*f8d2de6bSjchu #define	PCIE_REQ_ID_FUNC_MASK	0x0007
523*f8d2de6bSjchu 
524*f8d2de6bSjchu /*
525*f8d2de6bSjchu  * PCI-Express Message Request Header
526*f8d2de6bSjchu  */
527*f8d2de6bSjchu typedef struct pcie_msg {
528*f8d2de6bSjchu 	uint32_t	rsvd1	:16,	/* DW0 */
529*f8d2de6bSjchu 			td	:1,
530*f8d2de6bSjchu 			ep	:1,
531*f8d2de6bSjchu 			attr	:2,
532*f8d2de6bSjchu 			rsvd2	:2,
533*f8d2de6bSjchu 			len	:10;
534*f8d2de6bSjchu 	uint32_t	rid	:16,	/* DW1 */
535*f8d2de6bSjchu 			tag	:8,
536*f8d2de6bSjchu 			msg_code:8;
537*f8d2de6bSjchu 	uint32_t	unused[2];	/* DW 2 & 3 */
538*f8d2de6bSjchu } pcie_msg_t;
539*f8d2de6bSjchu 
540*f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_COR		0x30
541*f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_NONFATAL	0x31
542*f8d2de6bSjchu #define	PCIE_MSG_CODE_ERR_FATAL		0x33
543*f8d2de6bSjchu 
544*f8d2de6bSjchu #ifdef	__cplusplus
545*f8d2de6bSjchu }
546*f8d2de6bSjchu #endif
547*f8d2de6bSjchu 
548*f8d2de6bSjchu #endif	/* _SYS_PCIE_H */
549