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