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