xref: /illumos-gate/usr/src/uts/sun/sys/socal_cq_defs.h (revision 3db86aab)
1*3db86aabSstevel /*
2*3db86aabSstevel  * CDDL HEADER START
3*3db86aabSstevel  *
4*3db86aabSstevel  * The contents of this file are subject to the terms of the
5*3db86aabSstevel  * Common Development and Distribution License (the "License").
6*3db86aabSstevel  * You may not use this file except in compliance with the License.
7*3db86aabSstevel  *
8*3db86aabSstevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*3db86aabSstevel  * or http://www.opensolaris.org/os/licensing.
10*3db86aabSstevel  * See the License for the specific language governing permissions
11*3db86aabSstevel  * and limitations under the License.
12*3db86aabSstevel  *
13*3db86aabSstevel  * When distributing Covered Code, include this CDDL HEADER in each
14*3db86aabSstevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*3db86aabSstevel  * If applicable, add the following below this CDDL HEADER, with the
16*3db86aabSstevel  * fields enclosed by brackets "[]" replaced with your own identifying
17*3db86aabSstevel  * information: Portions Copyright [yyyy] [name of copyright owner]
18*3db86aabSstevel  *
19*3db86aabSstevel  * CDDL HEADER END
20*3db86aabSstevel  */
21*3db86aabSstevel /*
22*3db86aabSstevel  * Copyright 1998 Sun Microsystems, Inc. All rights reserved.
23*3db86aabSstevel  * Use is subject to license terms.
24*3db86aabSstevel  */
25*3db86aabSstevel 
26*3db86aabSstevel #ifndef _SYS_SOCAL_CQ_DEFS_H
27*3db86aabSstevel #define	_SYS_SOCAL_CQ_DEFS_H
28*3db86aabSstevel 
29*3db86aabSstevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
30*3db86aabSstevel 
31*3db86aabSstevel #ifdef __cplusplus
32*3db86aabSstevel extern "C" {
33*3db86aabSstevel #endif
34*3db86aabSstevel 
35*3db86aabSstevel #define	SOC_CQE_PAYLOAD 60
36*3db86aabSstevel 
37*3db86aabSstevel /*
38*3db86aabSstevel  * define the CQ_HEADER for the soc command queue.
39*3db86aabSstevel  */
40*3db86aabSstevel 
41*3db86aabSstevel typedef struct	cq_hdr {
42*3db86aabSstevel 	uchar_t	cq_hdr_count;
43*3db86aabSstevel 	uchar_t	cq_hdr_type;
44*3db86aabSstevel 	uchar_t	cq_hdr_flags;
45*3db86aabSstevel 	uchar_t	cq_hdr_seqno;
46*3db86aabSstevel } cq_hdr_t;
47*3db86aabSstevel 
48*3db86aabSstevel /*
49*3db86aabSstevel  * Command Queue entry description.
50*3db86aabSstevel  */
51*3db86aabSstevel 
52*3db86aabSstevel typedef struct cqe {
53*3db86aabSstevel 	uchar_t		cqe_payload[SOC_CQE_PAYLOAD];
54*3db86aabSstevel 	cq_hdr_t	cqe_hdr;
55*3db86aabSstevel } cqe_t;
56*3db86aabSstevel 
57*3db86aabSstevel /*
58*3db86aabSstevel  * CQ Entry types.
59*3db86aabSstevel  */
60*3db86aabSstevel 
61*3db86aabSstevel #define	CQ_TYPE_NOP		0x00
62*3db86aabSstevel #define	CQ_TYPE_OUTBOUND	0x01
63*3db86aabSstevel #define	CQ_TYPE_INBOUND		0x02
64*3db86aabSstevel #define	CQ_TYPE_SIMPLE		0x03
65*3db86aabSstevel #define	CQ_TYPE_IO_WRITE	0x04
66*3db86aabSstevel #define	CQ_TYPE_IO_READ		0x05
67*3db86aabSstevel #define	CQ_TYPE_UNSOLICITED	0x06
68*3db86aabSstevel #define	CQ_TYPE_BYPASS_DEV	0x06	/* supercedes unsolicited in SOC+ */
69*3db86aabSstevel #define	CQ_TYPE_DIAGNOSTIC	0x07
70*3db86aabSstevel #define	CQ_TYPE_OFFLINE		0x08
71*3db86aabSstevel #define	CQ_TYPE_ADD_POOL	0x09	/* SOC+ enhancement */
72*3db86aabSstevel #define	CQ_TYPE_DELETE_POOL	0x0a	/* SOC+ enhancement */
73*3db86aabSstevel #define	CQ_TYPE_ADD_BUFFER	0x0b	/* SOC+ enhancement */
74*3db86aabSstevel #define	CQ_TYPE_ADD_POOL_BUFFER	0x0c	/* SOC+ enhancement */
75*3db86aabSstevel #define	CQ_TYPE_REQUEST_ABORT	0x0d	/* SOC+ enhnacement */
76*3db86aabSstevel #define	CQ_TYPE_REQUEST_LIP	0x0e	/* SOC+ enhancement */
77*3db86aabSstevel #define	CQ_TYPE_REPORT_MAP	0x0f	/* SOC+ enhancement */
78*3db86aabSstevel #define	CQ_TYPE_RESPONSE	0x10
79*3db86aabSstevel #define	CQ_TYPE_INLINE		0x20
80*3db86aabSstevel 
81*3db86aabSstevel /*
82*3db86aabSstevel  * CQ Entry Flags
83*3db86aabSstevel  */
84*3db86aabSstevel 
85*3db86aabSstevel #define	CQ_FLAG_CONTINUATION	0x01
86*3db86aabSstevel #define	CQ_FLAG_FULL		0x02
87*3db86aabSstevel #define	CQ_FLAG_BADHEADER	0x04
88*3db86aabSstevel #define	CQ_FLAG_BADPACKET	0x08
89*3db86aabSstevel 
90*3db86aabSstevel /*
91*3db86aabSstevel  * CQ Descriptor Definition.
92*3db86aabSstevel  */
93*3db86aabSstevel 
94*3db86aabSstevel typedef	struct cq {
95*3db86aabSstevel 	uint32_t	cq_address;
96*3db86aabSstevel 	uchar_t		cq_in;
97*3db86aabSstevel 	uchar_t		cq_out;
98*3db86aabSstevel 	uchar_t		cq_last_index;
99*3db86aabSstevel 	uchar_t		cq_seqno;
100*3db86aabSstevel } soc_cq_t;
101*3db86aabSstevel 
102*3db86aabSstevel /*
103*3db86aabSstevel  * SOC header definition.
104*3db86aabSstevel  */
105*3db86aabSstevel 
106*3db86aabSstevel typedef struct soc_hdr {
107*3db86aabSstevel 	uint_t		sh_request_token;
108*3db86aabSstevel 	ushort_t	sh_flags;
109*3db86aabSstevel 	uchar_t		sh_class;
110*3db86aabSstevel 	uchar_t		sh_seg_cnt;
111*3db86aabSstevel 	uint_t		sh_byte_cnt;
112*3db86aabSstevel } soc_header_t;
113*3db86aabSstevel 
114*3db86aabSstevel /*
115*3db86aabSstevel  * SOC header request packet definition.
116*3db86aabSstevel  */
117*3db86aabSstevel 
118*3db86aabSstevel typedef struct soc_request {
119*3db86aabSstevel 	soc_header_t		sr_soc_hdr;
120*3db86aabSstevel 	fc_dataseg_t		sr_dataseg[3];
121*3db86aabSstevel 	fc_frame_header_t	sr_fc_frame_hdr;
122*3db86aabSstevel 	cq_hdr_t		sr_cqhdr;
123*3db86aabSstevel } soc_request_t;
124*3db86aabSstevel 
125*3db86aabSstevel typedef	soc_request_t soc_header_request_t;
126*3db86aabSstevel 
127*3db86aabSstevel /*
128*3db86aabSstevel  * SOC header response packet definition.
129*3db86aabSstevel  */
130*3db86aabSstevel 
131*3db86aabSstevel typedef struct soc_response {
132*3db86aabSstevel 	soc_header_t		sr_soc_hdr;
133*3db86aabSstevel 	uint_t			sr_soc_status;
134*3db86aabSstevel 	fc_dataseg_t		sr_dataseg;
135*3db86aabSstevel 	uchar_t			sr_reserved[10];
136*3db86aabSstevel 	ushort_t 		sr_ncmds;
137*3db86aabSstevel 	fc_frame_header_t	sr_fc_frame_hdr;
138*3db86aabSstevel 	cq_hdr_t		sr_cqhdr;
139*3db86aabSstevel } soc_response_t;
140*3db86aabSstevel 
141*3db86aabSstevel /*
142*3db86aabSstevel  * SOC data request packet definition.
143*3db86aabSstevel  */
144*3db86aabSstevel 
145*3db86aabSstevel typedef struct soc_data_request {
146*3db86aabSstevel 	soc_header_t		sdr_soc_hdr;
147*3db86aabSstevel 	fc_dataseg_t		sdr_dataseg[6];
148*3db86aabSstevel 	cq_hdr_t		sdr_cqhdr;
149*3db86aabSstevel } soc_data_request_t;
150*3db86aabSstevel 
151*3db86aabSstevel /*
152*3db86aabSstevel  * SOC+ (only) command-only packet definitiion
153*3db86aabSstevel  */
154*3db86aabSstevel 
155*3db86aabSstevel typedef	struct soc_cmdonly_request {
156*3db86aabSstevel 	soc_header_t	scr_soc_hdr;
157*3db86aabSstevel 	uchar_t		reserved[48];
158*3db86aabSstevel 	cq_hdr_t	scr_cqhdr;
159*3db86aabSstevel } soc_cmdonly_request_t;
160*3db86aabSstevel 
161*3db86aabSstevel /*
162*3db86aabSstevel  * SOC+ (only) diagnostic request packet definition
163*3db86aabSstevel  */
164*3db86aabSstevel 
165*3db86aabSstevel typedef	struct soc_diag_request {
166*3db86aabSstevel 	soc_header_t	sdr_soc_hdr;
167*3db86aabSstevel 	uint_t		sdr_diag_cmd;
168*3db86aabSstevel 	uchar_t		reserved[44];
169*3db86aabSstevel 	cq_hdr_t	sdr_cqhdr;
170*3db86aabSstevel } soc_diag_request_t;
171*3db86aabSstevel 
172*3db86aabSstevel #define	SOC_DIAG_NOP		0x00
173*3db86aabSstevel #define	SOC_DIAG_INT_LOOP	0x01
174*3db86aabSstevel #define	SOC_DIAG_EXT_LOOP	0x02
175*3db86aabSstevel #define	SOC_DIAG_REM_LOOP	0x03
176*3db86aabSstevel #define	SOC_DIAG_XRAM_TEST	0x04
177*3db86aabSstevel #define	SOC_DIAG_SOC_TEST	0x05
178*3db86aabSstevel #define	SOC_DIAG_HCB_TEST	0x06
179*3db86aabSstevel #define	SOC_DIAG_SOCLB_TEST	0x07
180*3db86aabSstevel #define	SOC_DIAG_SRDSLB_TEST	0x08
181*3db86aabSstevel #define	SOC_DIAG_EXTOE_TEST	0x09
182*3db86aabSstevel 
183*3db86aabSstevel /*
184*3db86aabSstevel  * SOC+ (only) pool request packet definition
185*3db86aabSstevel  */
186*3db86aabSstevel 
187*3db86aabSstevel typedef	struct soc_pool_request {
188*3db86aabSstevel 	soc_header_t		spr_soc_hdr;
189*3db86aabSstevel 	uint_t		spr_pool_id;
190*3db86aabSstevel 	uint_t		spr_header_mask;
191*3db86aabSstevel 	uint_t		spr_buf_size;
192*3db86aabSstevel 	uint_t		spr_n_entries;
193*3db86aabSstevel 	uchar_t			reserved[8];
194*3db86aabSstevel 	fc_frame_header_t	spr_fc_frame_hdr;
195*3db86aabSstevel 	cq_hdr_t		spr_cqhdr;
196*3db86aabSstevel } soc_pool_request_t;
197*3db86aabSstevel 
198*3db86aabSstevel #define	SOCPR_MASK_RCTL		0x800000
199*3db86aabSstevel #define	SOCPR_MASK_DID		0x700000
200*3db86aabSstevel #define	SOCPR_MASK_SID		0x070000
201*3db86aabSstevel #define	SOCPR_MASK_TYPE		0x008000
202*3db86aabSstevel #define	SOCPR_MASK_F_CTL	0x007000
203*3db86aabSstevel #define	SOCPR_MASK_SEQ_ID	0x000800
204*3db86aabSstevel #define	SOCPR_MASK_D_CTL	0x000400
205*3db86aabSstevel #define	SOCPR_MASK_SEQ_CNT	0x000300
206*3db86aabSstevel #define	SOCPR_MASK_OX_ID	0x0000f0
207*3db86aabSstevel #define	SOCPR_MASK_PARAMETER	0x0000f0
208*3db86aabSstevel 
209*3db86aabSstevel 
210*3db86aabSstevel /*
211*3db86aabSstevel  * Macros for flags field
212*3db86aabSstevel  *
213*3db86aabSstevel  * values used in both RSP's and REQ's
214*3db86aabSstevel  */
215*3db86aabSstevel #define	SOC_PORT_B	0x0001	/* entry to/from SOC Port B */
216*3db86aabSstevel #define	SOC_FC_HEADER	0x0002	/* this entry contains an FC_HEADER */
217*3db86aabSstevel /*
218*3db86aabSstevel  *	REQ: this request is supplying buffers
219*3db86aabSstevel  *	RSP: this pkt is unsolicited
220*3db86aabSstevel  */
221*3db86aabSstevel #define	SOC_UNSOLICITED	0x0080
222*3db86aabSstevel 
223*3db86aabSstevel /*
224*3db86aabSstevel  * values used only for REQ's
225*3db86aabSstevel  */
226*3db86aabSstevel #define	SOC_NO_RESPONSE	0x0004 /* generate niether RSP nor INT */
227*3db86aabSstevel #define	SOC_NO_INTR	0x0008 /* generate RSP only */
228*3db86aabSstevel #define	SOC_XFER_RDY	0x0010 /* issue a XFRRDY packet for this cmd */
229*3db86aabSstevel #define	SOC_IGNORE_RO	0x0020 /* ignore FC_HEADER relative offset */
230*3db86aabSstevel #define	SOC_RESP_HEADER	0x0200	/* return frame header regardless of status */
231*3db86aabSstevel 
232*3db86aabSstevel /*
233*3db86aabSstevel  * values used only for RSP's
234*3db86aabSstevel  */
235*3db86aabSstevel #define	SOC_COMPLETE	0x0040 /* previous CMD completed. */
236*3db86aabSstevel #define	SOC_STATUS	0x0100 /* a SOC status change has occurred */
237*3db86aabSstevel 
238*3db86aabSstevel #define	CQ_SUCCESS	0x0
239*3db86aabSstevel #define	CQ_FAILURE	0x1
240*3db86aabSstevel #define	CQ_FULL		0x2
241*3db86aabSstevel 
242*3db86aabSstevel #define	CQ_REQUEST_0	0
243*3db86aabSstevel #define	CQ_REQUEST_1	1
244*3db86aabSstevel #define	CQ_REQUEST_2	2
245*3db86aabSstevel #define	CQ_REQUEST_3	3
246*3db86aabSstevel 
247*3db86aabSstevel #define	CQ_RESPONSE_0	0
248*3db86aabSstevel #define	CQ_RESPONSE_1	1
249*3db86aabSstevel #define	CQ_RESPONSE_2	2
250*3db86aabSstevel #define	CQ_RESPONSE_3	3
251*3db86aabSstevel 
252*3db86aabSstevel #define	CQ_SOLICITED_OK		CQ_RESPONSE_0
253*3db86aabSstevel #define	CQ_SOLICITED_BAD	CQ_RESPONSE_1
254*3db86aabSstevel #define	CQ_UNSOLICITED		CQ_RESPONSE_2
255*3db86aabSstevel 
256*3db86aabSstevel 
257*3db86aabSstevel typedef struct soc_request_descriptor {
258*3db86aabSstevel 	soc_request_t	*srd_sp;
259*3db86aabSstevel 	uint_t		srd_sp_count;
260*3db86aabSstevel 
261*3db86aabSstevel 	caddr_t		srd_cmd;
262*3db86aabSstevel 	uint_t		srd_cmd_count;
263*3db86aabSstevel 
264*3db86aabSstevel 	caddr_t		srd_data;
265*3db86aabSstevel 	uint_t		srd_data_count;
266*3db86aabSstevel } soc_request_desc_t;
267*3db86aabSstevel 
268*3db86aabSstevel 
269*3db86aabSstevel #ifdef __cplusplus
270*3db86aabSstevel }
271*3db86aabSstevel #endif
272*3db86aabSstevel 
273*3db86aabSstevel #endif /* !_SYS_SOCAL_CQ_DEFS_H */
274