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 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 #ifndef _FCT_DEFINES_H 26 #define _FCT_DEFINES_H 27 28 #ifdef __cplusplus 29 extern "C" { 30 #endif 31 32 typedef stmf_status_t fct_status_t; 33 /* 34 * Error codes 35 */ 36 #define FCT_SUCCESS STMF_SUCCESS 37 #define FCT_FAILURE STMF_TARGET_FAILURE 38 #define FCT_FCA_FAILURE (FCT_FAILURE | (uint64_t)0x0100000000000000) 39 #define FCT_BUSY STMF_BUSY 40 #define FCT_ABORT_SUCCESS STMF_ABORT_SUCCESS 41 #define FCT_ABORTED STMF_ABORTED 42 #define FCT_NOT_FOUND STMF_NOT_FOUND 43 #define FCT_TIMEOUT STMF_TIMEOUT 44 45 #define FCT_WORKER_STUCK (FCT_FAILURE | STMF_FSC(1)) 46 #define FCT_ALLOC_FAILURE (FCT_FAILURE | STMF_FSC(2)) 47 #define FCT_LOCAL_PORT_OFFLINE (FCT_FAILURE | STMF_FSC(3)) 48 #define FCT_NO_XCHG_RESOURCE (FCT_FAILURE | STMF_FSC(4)) 49 #define FCT_NOT_LOGGED_IN (FCT_FAILURE | STMF_FSC(5)) 50 #define FCT_ABTS_RECEIVED (FCT_FAILURE | STMF_FSC(6)) 51 #define FCT_RPORT_SENT_REJECT (FCT_FAILURE | STMF_FSC(7)) 52 53 #define FCT_REJECT_STATUS(reason, expln) \ 54 (FCT_RPORT_SENT_REJECT | (((uint64_t)(reason)) << 8) | \ 55 ((uint64_t)(expln))) 56 57 /* 58 * Event codes 59 */ 60 #define FCT_EVENT_LINK_UP 0x01 61 #define FCT_EVENT_LINK_DOWN 0x02 62 #define FCT_EVENT_LINK_RESET 0x03 63 #define FCT_EVENT_ADAPTER_FATAL 0x04 64 65 /* 66 * ELS OP codes 67 */ 68 #define ELS_OP_LSRJT 0x01 69 #define ELS_OP_ACC 0x02 70 #define ELS_OP_PLOGI 0x03 71 #define ELS_OP_FLOGI 0x04 72 #define ELS_OP_LOGO 0x05 73 #define ELS_OP_ABTX 0x06 74 #define ELS_OP_ECHO 0x10 75 #define ELS_OP_REC 0x13 76 #define ELS_OP_SRR 0x14 77 #define ELS_OP_PRLI 0x20 78 #define ELS_OP_PRLO 0x21 79 #define ELS_OP_SCN 0x22 80 #define ELS_OP_TPRLO 0x24 81 #define ELS_OP_PDISC 0x50 82 #define ELS_OP_ADISC 0x52 83 #define ELS_OP_RSCN 0x61 84 #define ELS_OP_SCR 0x62 85 #define ELS_OP_RNID 0x78 86 87 /* 88 * BLS replies 89 */ 90 #define BLS_OP_BA_ACC 0x84 91 #define BLS_OP_BA_RJT 0x85 92 93 /* 94 * Name Service Command Codes 95 */ 96 #define NS_GA_NXT 0x0100 /* Get All next */ 97 #define NS_GPN_ID 0x0112 /* Get Port Name */ 98 #define NS_GNN_ID 0x0113 /* Get Node Name */ 99 #define NS_GCS_ID 0x0114 /* Get Class Of service */ 100 #define NS_GFT_ID 0x0117 /* Get FC-4 Types */ 101 #define NS_GSPN_ID 0x0118 /* Get Sym Port name */ 102 #define NS_GPT_ID 0x011A /* Get Port Type */ 103 #define NS_GID_PN 0x0121 /* Get port id for PN */ 104 #define NS_GID_NN 0x0131 /* Get port id for NN */ 105 #define NS_GIP_NN 0x0135 /* Get IP address */ 106 #define NS_GIPA_NN 0x0136 /* Get I.P.A */ 107 #define NS_GSNN_NN 0x0139 /* Get Sym Node name */ 108 #define NS_GNN_IP 0x0153 /* Get Node name for IP */ 109 #define NS_GIPA_IP 0x0156 /* Get I.P.A for IP */ 110 #define NS_GID_FT 0x0171 /* Get port Id for FC-4 type */ 111 #define NS_GID_PT 0x01A1 /* Get port Id for type */ 112 #define NS_RPN_ID 0x0212 /* Reg port name */ 113 #define NS_RNN_ID 0x0213 /* Reg node name */ 114 #define NS_RCS_ID 0x0214 /* Reg C.O.S */ 115 #define NS_RFT_ID 0x0217 /* Reg FC-4 Types */ 116 #define NS_RSPN_ID 0x0218 /* Reg Sym Port name */ 117 #define NS_RPT_ID 0x021A /* Reg Port Type */ 118 #define NS_RIP_NN 0x0235 /* Reg I.P address */ 119 #define NS_RIPA_NN 0x0236 /* Reg I.P.A */ 120 #define NS_RSNN_NN 0x0239 /* Reg Sym Node name */ 121 #define NS_DA_ID 0x0300 /* De-Register all */ 122 123 #define CT_OP_RJT 0x8001 124 #define CT_OP_ACC 0x8002 125 126 /* 127 * PRLI bits 128 */ 129 #define PRLI_BIT_WRITE_XRDY_DISABLED 0x00000001 130 #define PRLI_BIT_READ_XRDY_DISABLED 0x00000002 131 #define PRLI_BIT_TARGET_FUNCTION 0x00000010 132 #define PRLI_BIT_INITIATOR_FUNCTION 0x00000020 133 #define PRLI_BIT_DATA_OVERLAY_ALLOWED 0x00000040 134 #define PRLI_BIT_FCP_CONF_ALLOWED 0x00000080 135 #define PRLI_BIT_RETRY 0x00000100 136 #define PRLI_BIT_TASK_RETRY_IDENT_REQUESTED 0x00000200 137 #define PRLI_BIT_REC_SUPPORT 0x00000400 138 139 #define FC_NS_CLASSF 0x01 140 #define FC_NS_CLASS1 0x02 141 #define FC_NS_CLASS2 0x04 142 #define FC_NS_CLASS3 0x08 143 #define FC_NS_CLASS4 0x10 144 #define FC_NS_CLASS5 0x20 145 #define FC_NS_CLASS6 0x40 146 147 /* 148 * SCR function code 149 */ 150 #define FC_SCR_FABRIC_REGISTRATION 0x01 151 #define FC_SCR_NPORT_REGISTRATION 0x02 152 #define FC_SCR_FULL_REGISTRATION 0x03 153 #define FC_SCR_CLEAR_REGISTRATION 0xFF 154 155 /* 156 * FCP_CNTL bits 157 */ 158 #define FCP_CNTL_TASK_ATTR(fcp_cntl) ((((uint32_t)(fcp_cntl)) >> 16) & 7) 159 #define TASK_ATTR_SIMPLE_Q 0 160 #define TASK_ATTR_HEAD_OF_Q 1 161 #define TASK_ATTR_ORDERED_Q 2 162 #define TASK_ATTR_ACA_Q 4 163 #define TASK_ATTR_UNTAGGED 5 164 #define FCP_CNTL_IS_TASK_MGMT(fcp_cntl) (((uint32_t)(fcp_cntl)) & 0xff00) 165 #define FCP_CNTL_TERMINATE_TASK 0x8000 166 #define FCP_CNTL_CLEAR_ACA 0x4000 167 #define FCP_CNTL_TARGET_RESET 0x2000 168 #define FCP_CNTL_LUN_RESET 0x1000 169 #define FCP_CNTL_CLEAR_TASK_SET 0x0400 170 #define FCP_CNTL_ABORT_TASK_SET 0x0200 171 #define FCP_CNTL_READ_DATA 0x2 172 #define FCP_CNTL_WRITE_DATA 0x1 173 174 /* 175 * SCSI STATUS BITS 176 */ 177 #define FCP_BIDI_RESP 0x8000 178 #define FCP_BIDI_UNDER 0x4000 179 #define FCP_BIDI_OVER 0x2000 180 #define FCP_CONF_REQ 0x1000 181 #define FCP_RESID_UNDER 0x0800 182 #define FCP_RESID_OVER 0x0400 183 #define FCP_SNS_LEN_VALID 0x0200 184 #define FCP_RESP_LEN_VALID 0x0100 185 186 /* 187 * Well known addresses ... 188 */ 189 #define NPORT_ID_DOM_CTLR_START 0xFFFC01 190 #define NPORT_ID_DOM_CTLR_END 0xFFFCFE 191 192 #define FS_GENERAL_MULTICAST 0xFFFFF7 193 #define FS_WELL_KNOWN_MULTICAST 0xFFFFF8 194 #define FS_HUNT_GROUP 0xFFFFF9 195 #define FS_MANAGEMENT_SERVER 0xFFFFFA 196 #define FS_TIME_SERVER 0xFFFFFB 197 #define FS_NAME_SERVER 0xFFFFFC 198 #define FS_FABRIC_CONTROLLER 0xFFFFFD 199 #define FS_FABRIC_F_PORT 0xFFFFFE 200 #define FS_BROADCAST 0xFFFFFF 201 202 #define FC_WELL_KNOWN_START 0xFFFFF0 203 #define FC_WELL_KNOWN_END 0xFFFFFF 204 #define FC_WELL_KNOWN_ADDR(x) \ 205 ((((x) >= FC_WELL_KNOWN_START) && ((x) <= FC_WELL_KNOWN_END)) ||\ 206 (((x) >= NPORT_ID_DOM_CTLR_START) && ((x) <= NPORT_ID_DOM_CTLR_END))) 207 208 #define FC_WWN_LEN 8 209 /* 210 * NB: FC_WWN_BUFLEN should be 64-bit aligned (divisible by 8). 211 */ 212 #define FC_WWN_BUFLEN (FC_WWN_LEN * 3) 213 #define FC_WWN_STRLEN (FC_WWN_BUFLEN - 1) /* add trailing null */ 214 215 struct fct_cmd; 216 struct fct_local_port; 217 struct fct_els; 218 struct fct_link_info; 219 struct fct_flogi_xchg; 220 struct fct_dbuf_store; 221 222 #ifdef __cplusplus 223 } 224 #endif 225 226 #endif /* _FCT_DEFINES_H */ 227