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