xref: /illumos-gate/usr/src/uts/sun4v/io/px/px_err.h (revision 4df55fde)
1f8d2de6bSjchu /*
2f8d2de6bSjchu  * CDDL HEADER START
3f8d2de6bSjchu  *
4f8d2de6bSjchu  * The contents of this file are subject to the terms of the
5bf8fc234Set  * Common Development and Distribution License (the "License").
6bf8fc234Set  * 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 /*
22*4df55fdeSJanie Lu  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23f8d2de6bSjchu  * Use is subject to license terms.
24f8d2de6bSjchu  */
25f8d2de6bSjchu 
26f8d2de6bSjchu #ifndef _SYS_PX_ERR_H
27f8d2de6bSjchu #define	_SYS_PX_ERR_H
28f8d2de6bSjchu 
29f8d2de6bSjchu #ifdef	__cplusplus
30f8d2de6bSjchu extern "C" {
31f8d2de6bSjchu #endif
32f8d2de6bSjchu 
33f8d2de6bSjchu /* error packet definitions */
34f8d2de6bSjchu 
35f8d2de6bSjchu /* Block Definitions */
36f8d2de6bSjchu #define	BLOCK_RSVD		0x0
37f8d2de6bSjchu #define	BLOCK_HOSTBUS		0x1
38f8d2de6bSjchu #define	BLOCK_MMU		0x2
39f8d2de6bSjchu #define	BLOCK_INTR		0x3
40f8d2de6bSjchu #define	BLOCK_PCIE		0x4
41*4df55fdeSJanie Lu #define	BLOCK_PORT		0x5
42f8d2de6bSjchu #define	BLOCK_UNKNOWN		0xe
43f8d2de6bSjchu 
44f8d2de6bSjchu /* Op definitions for HOSTBUS */
45f8d2de6bSjchu #define	OP_RESERVED		0x0
46f8d2de6bSjchu #define	OP_PIO			0x1
47f8d2de6bSjchu #define	OP_DMA			0x2
48f8d2de6bSjchu #define	OP_UNKNOWN		0xe
49f8d2de6bSjchu 
50f8d2de6bSjchu /* Op definitions for MMU */
51f8d2de6bSjchu #define	OP_RESERVED		0x0
52f8d2de6bSjchu #define	OP_XLAT			0x1
53f8d2de6bSjchu #define	OP_BYPASS		0x2
54f8d2de6bSjchu #define	OP_TBW			0x3
55f8d2de6bSjchu #define	OP_UNKNOWN		0xe
56f8d2de6bSjchu 
57f8d2de6bSjchu /* Op definitions for INTR */
58f8d2de6bSjchu #define	OP_RESERVED		0x0
59f8d2de6bSjchu #define	OP_MSI32		0x1
60f8d2de6bSjchu #define	OP_MSI64		0x2
61f8d2de6bSjchu #define	OP_MSIQ			0x3
62f8d2de6bSjchu #define	OP_PCIEMSG		0x4
63*4df55fdeSJanie Lu #define	OP_FIXED		0x5
64*4df55fdeSJanie Lu #define	OP_UNKNOWN		0xe
65*4df55fdeSJanie Lu 
66*4df55fdeSJanie Lu /* Op definitions for PORT */
67*4df55fdeSJanie Lu #define	OP_RESERVED		0x0
68*4df55fdeSJanie Lu #define	OP_PIO			0x1
69*4df55fdeSJanie Lu #define	OP_DMA			0x2
70*4df55fdeSJanie Lu #define	OP_LINK			0x3
71f8d2de6bSjchu #define	OP_UNKNOWN		0xe
72f8d2de6bSjchu 
73f8d2de6bSjchu /* Phase definitons */
74f8d2de6bSjchu #define	PH_RESERVED		0x0
75f8d2de6bSjchu #define	PH_ADDR			0x1
76f8d2de6bSjchu #define	PH_DATA			0x2
77f8d2de6bSjchu #define	PH_UNKNOWN		0xe
78f8d2de6bSjchu #define	PH_IRR			0xf
79f8d2de6bSjchu 
80*4df55fdeSJanie Lu /* Phase definitions for PORT/Link */
81*4df55fdeSJanie Lu #define	PH_FC			0x1
82*4df55fdeSJanie Lu 
83f8d2de6bSjchu 
84*4df55fdeSJanie Lu /* Condition definitions for any major Block/Op/Phase */
85f8d2de6bSjchu #define	CND_RESERVED		0x0
86f8d2de6bSjchu #define	CND_ILL			0x1
87*4df55fdeSJanie Lu #define	CND_UNMAP		0x2
88f8d2de6bSjchu #define	CND_INT			0x3
89f8d2de6bSjchu #define	CND_UE			0x4
90*4df55fdeSJanie Lu #define	CND_INV			0x6
91f8d2de6bSjchu #define	CND_UNKNOWN		0xe
92f8d2de6bSjchu #define	CND_IRR			0xf
93f8d2de6bSjchu 
94*4df55fdeSJanie Lu /* Additional condition definitions for INTR Block MSIQ phase */
95f8d2de6bSjchu #define	CND_OV			0x5
96f8d2de6bSjchu 
97*4df55fdeSJanie Lu /* Additional condition definitions for MMU|INTR Block ADDR phase */
98*4df55fdeSJanie Lu #define	CND_PROT		0x5
99*4df55fdeSJanie Lu 
100*4df55fdeSJanie Lu /* Additional condition definitions for DATA phase */
101f8d2de6bSjchu #define	CND_TO			0x5
102*4df55fdeSJanie Lu 
103*4df55fdeSJanie Lu /* Additional condition definitions for Port Link phase */
104*4df55fdeSJanie Lu #define	CND_RCA			0x7
105*4df55fdeSJanie Lu #define	CND_RUR			0x8
106*4df55fdeSJanie Lu #define	CND_UC			0x9
107f8d2de6bSjchu 
108f8d2de6bSjchu /* Dir definitions for HOSTBUS & MMU */
109f8d2de6bSjchu #define	DIR_RESERVED		0x0
110f8d2de6bSjchu #define	DIR_READ		0x1
111f8d2de6bSjchu #define	DIR_WRITE		0x2
112f8d2de6bSjchu #define	DIR_RDWR		0x3
113f8d2de6bSjchu #define	DIR_INGRESS		0x4
114f8d2de6bSjchu #define	DIR_EGRESS		0x5
115f8d2de6bSjchu #define	DIR_LINK		0x6
116f8d2de6bSjchu #define	DIR_UNKNOWN		0xe
117f8d2de6bSjchu #define	DIR_IRR			0xf
118f8d2de6bSjchu 
119bf8fc234Set #define	PX_FM_RC_UNRECOG	"fire.epkt"
120bf8fc234Set #define	EPKT_SYSINO		"sysino"
121bf8fc234Set #define	EPKT_EHDL		"ehdl"
122bf8fc234Set #define	EPKT_STICK		"stick"
123*4df55fdeSJanie Lu #define	EPKT_DW0		"dw0"
124*4df55fdeSJanie Lu #define	EPKT_DW1		"dw1"
125*4df55fdeSJanie Lu #define	EPKT_DW2		"dw2"
126*4df55fdeSJanie Lu #define	EPKT_DW3		"dw3"
127*4df55fdeSJanie Lu #define	EPKT_DW4		"dw4"
128bf8fc234Set #define	EPKT_RC_DESCR		"rc_descr"
129bf8fc234Set #define	EPKT_PEC_DESCR		"pec_descr"
130bf8fc234Set 
131*4df55fdeSJanie Lu #ifndef _ESC
132f8d2de6bSjchu typedef struct root_complex {
133f8d2de6bSjchu 	uint64_t  sysino;
134f8d2de6bSjchu 	uint64_t  ehdl;
135f8d2de6bSjchu 	uint64_t  stick;
136f8d2de6bSjchu 	struct  {
137*4df55fdeSJanie Lu #if defined(_BIT_FIELDS_LTOH)
138*4df55fdeSJanie Lu 		uint32_t S	: 1,	/* Also the "Q" flag */
139*4df55fdeSJanie Lu 			M	: 1,
140*4df55fdeSJanie Lu 			D	: 1,
141*4df55fdeSJanie Lu 			R	: 1,
142*4df55fdeSJanie Lu 			H	: 1,
143*4df55fdeSJanie Lu 			C	: 1,
144*4df55fdeSJanie Lu 			I	: 1,
145*4df55fdeSJanie Lu 			B	: 1,
146*4df55fdeSJanie Lu 				: 3,
147*4df55fdeSJanie Lu 			STOP	: 1,
148*4df55fdeSJanie Lu 			dir	: 4,
149*4df55fdeSJanie Lu 			cond	: 4,
150*4df55fdeSJanie Lu 			phase	: 4,
151*4df55fdeSJanie Lu 			op	: 4,
152*4df55fdeSJanie Lu 			block	: 4;
153*4df55fdeSJanie Lu #elif defined(_BIT_FIELDS_HTOL)
154f8d2de6bSjchu 		uint32_t block	: 4,
155f8d2de6bSjchu 			op	: 4,
156f8d2de6bSjchu 			phase	: 4,
157f8d2de6bSjchu 			cond	: 4,
158f8d2de6bSjchu 			dir	: 4,
159bf8fc234Set 			STOP	: 1,
160*4df55fdeSJanie Lu 				: 3,
161*4df55fdeSJanie Lu 			B	: 1,
162*4df55fdeSJanie Lu 			I	: 1,
163*4df55fdeSJanie Lu 			C	: 1,
164f8d2de6bSjchu 			H	: 1,
165f8d2de6bSjchu 			R	: 1,
166f8d2de6bSjchu 			D	: 1,
167f8d2de6bSjchu 			M	: 1,
168*4df55fdeSJanie Lu 			S	: 1;	/* Also the "Q" flag */
169*4df55fdeSJanie Lu #else
170*4df55fdeSJanie Lu #error "bit field not defined"
171*4df55fdeSJanie Lu #endif
172f8d2de6bSjchu 	} rc_descr;
173*4df55fdeSJanie Lu 	uint32_t  size;			/* Also the EQ Num */
174f8d2de6bSjchu 	uint64_t  addr;
175f8d2de6bSjchu 	uint64_t  hdr[2];
176*4df55fdeSJanie Lu 	uint64_t  reserved;		/* Contains Port */
177f8d2de6bSjchu } px_rc_err_t;
178f8d2de6bSjchu 
179f8d2de6bSjchu typedef struct pec_block_err {
180f8d2de6bSjchu 	uint64_t  sysino;
181f8d2de6bSjchu 	uint64_t  ehdl;
182f8d2de6bSjchu 	uint64_t  stick;
183f8d2de6bSjchu 	struct  {
184f8d2de6bSjchu 		uint32_t block	: 4,
185f8d2de6bSjchu 			rsvd1	: 12,
186f8d2de6bSjchu 			dir	: 4,
187f8d2de6bSjchu 				: 3,
188f8d2de6bSjchu 			Z	: 1,
189f8d2de6bSjchu 			S	: 1,
190f8d2de6bSjchu 			R	: 1,
191f8d2de6bSjchu 			I	: 1,
192f8d2de6bSjchu 			H	: 1,
193f8d2de6bSjchu 			C	: 1,
194f8d2de6bSjchu 			U	: 1,
195f8d2de6bSjchu 			E	: 1,
196f8d2de6bSjchu 			P	: 1;
197f8d2de6bSjchu 	} pec_descr;
198f8d2de6bSjchu 	uint16_t  pci_err_status;
199f8d2de6bSjchu 	uint16_t  pcie_err_status;
200f8d2de6bSjchu 	uint32_t  ce_reg_status;
201f8d2de6bSjchu 	uint32_t  ue_reg_status;
202f8d2de6bSjchu 	uint64_t  hdr[2];
203f8d2de6bSjchu 	uint32_t  err_src_reg;
204f8d2de6bSjchu 	uint32_t  root_err_status;
205f8d2de6bSjchu } px_pec_err_t;
206*4df55fdeSJanie Lu #endif	/* _ESC */
207f8d2de6bSjchu 
208f8d2de6bSjchu #ifdef	__cplusplus
209f8d2de6bSjchu }
210f8d2de6bSjchu #endif
211f8d2de6bSjchu 
212f8d2de6bSjchu #endif	/* _SYS_PX_ERR_H */
213