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 26#ifndef _SYS_FIBRE_CHANNEL_IMPL_FCGS2_H 27#define _SYS_FIBRE_CHANNEL_IMPL_FCGS2_H 28 29 30#include <sys/note.h> 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36/* 37 * A device handle describes the characterics of a device 38 * Node. Each device handle also contains information 39 * on the serveral different ports it is discovered on. 40 * 41 * Classification of Name Server Objects 42 * 43 * +-----------------------------------+---------------------------+ 44 * | Device (node) Specific | Port Specific | 45 * +-----------------------------------+---------------------------+ 46 * | Node Name (NN) | Port type (PT) | 47 * | Symbolic Node Name Length | Port Id (ID) | 48 * | Symbloic Node Name(SNN) | Symbolic Port Name length | 49 * | Initial Process associator(IPA) | Symbolic Port Name (SPN) | 50 * | | Class of Service (CS) | 51 * | | fc4 types (FT) | 52 * | | IP Address (IP) | 53 * +-----------------------------------+---------------------------+ 54 * 55 * The above classification causes some inconvenience in not having 56 * the ability to directly copy all the nameserver objects into a 57 * contiguous piece of memory. But we'll live with it. 58 */ 59 60#define CT_REV 0x01 /* Common Transport revision */ 61 62/* FCS types */ 63#define FCSTYPE_KEYSERVICE 0xF7 64#define FCSTYPE_ALIAS 0xF8 65#define FCSTYPE_MGMTSERVICE 0xFA 66#define FCSTYPE_TIMESERVICE 0xFB 67#define FCSTYPE_DIRECTORY 0xFC 68#define FCSTYEP_FABRIC 0xFD 69 70/* 71 * FCS subtypes for Directory Service 72 */ 73#define FCSSUB_DS_NAME_SERVER 0x02 /* Zoned Name Server */ 74#define FCSSUB_DS_IPADDR_SERVER 0x03 /* IP Address Server */ 75 76/* 77 * FCS subtypes for Management Service 78 */ 79#define FCSSUB_MS_CONFIG_SERVER 0x01 /* Fabric Config Server */ 80#define FCSSUB_MS_UNZONED_NAME_SERVER 0x02 /* Unzoned Name Server */ 81#define FCSSUB_MS_ZONE_SERVER 0x03 /* Fabric Zone Server */ 82 83/* 84 * FCS subtypes for Time Service 85 */ 86#define FCSSUB_TS_TIME_SERVER 0x01 /* Time Server */ 87 88/* 89 * FCS subtypes for Alias Service 90 */ 91#define FCSSUB_AS_ALIAS_SERVER 0x01 /* Alias Server */ 92 93/* 94 * FCS subtypes for Key Service 95 */ 96#define FCSSUB_KS_KEY_SERVER 0x00 /* Key Distribution Server */ 97 98/* FC-CT response codes */ 99#define FS_RJT_IU 0x8001 100#define FS_ACC_IU 0x8002 101 102/* FS_RJT Reason Codes */ 103#define FSRJT_BADCMD 0x01 /* Invalid command code */ 104#define FSRJT_BADVER 0x02 /* Invalid version level */ 105#define FSRJT_LOGICALERR 0x03 /* Logical error */ 106#define FSRJT_BADSIZE 0x04 /* Invalid IU size */ 107#define FSRJT_BUSY 0x05 /* Logical busy */ 108#define FSRJT_PROTOCOLERR 0x07 /* Protocol error */ 109#define FSRJT_CMDFAILED 0x08 /* Unable to perform command */ 110#define FSRJT_UNSUPP 0x0b /* Command not supported */ 111#define FSRJT_VENDOR 0xff /* vendor unique error */ 112 113/* Name Service Command Codes */ 114#define NS_GA_NXT 0x0100 /* Get All next */ 115#define NS_GPN_ID 0x0112 /* Get Port Name */ 116#define NS_GNN_ID 0x0113 /* Get Node Name */ 117#define NS_GCS_ID 0x0114 /* Get Class Of service */ 118#define NS_GFT_ID 0x0117 /* Get FC-4 Types */ 119#define NS_GSPN_ID 0x0118 /* Get Sym Port name */ 120#define NS_GPT_ID 0x011A /* Get Port Type */ 121#define NS_GID_PN 0x0121 /* Get port id for PN */ 122#define NS_GID_NN 0x0131 /* Get port id for NN */ 123#define NS_GIP_NN 0x0135 /* Get IP address */ 124#define NS_GIPA_NN 0x0136 /* Get I.P.A */ 125#define NS_GSNN_NN 0x0139 /* Get Sym Node name */ 126#define NS_GNN_IP 0x0153 /* Get Node name for IP */ 127#define NS_GIPA_IP 0x0156 /* Get I.P.A for IP */ 128#define NS_GID_FT 0x0171 /* Get port Id for FC-4 type */ 129#define NS_GID_PT 0x01A1 /* Get port Id for type */ 130#define NS_RPN_ID 0x0212 /* Reg port name */ 131#define NS_RNN_ID 0x0213 /* Reg node name */ 132#define NS_RCS_ID 0x0214 /* Reg C.O.S */ 133#define NS_RFT_ID 0x0217 /* Reg FC-4 Types */ 134#define NS_RSPN_ID 0x0218 /* Reg Sym Port name */ 135#define NS_RPT_ID 0x021A /* Reg Port Type */ 136#define NS_RIP_NN 0x0235 /* Reg I.P address */ 137#define NS_RIPA_NN 0x0236 /* Reg I.P.A */ 138#define NS_RSNN_NN 0x0239 /* Reg Sym Node name */ 139#define NS_DA_ID 0x0300 /* De-Register all */ 140 141/* Name service reject explanation codes */ 142#define NSRJTX_NONE 0x00 /* No additional explanation */ 143#define NSRJTX_PORTNOTREG 0x01 /* Port ID not registered */ 144#define NSRJTX_PWWNNOTREG 0x02 /* Port Name not registered */ 145#define NSRJTX_NWWNNOTREG 0x03 /* Node Name not registered */ 146#define NSRJTX_CoSNOTREG 0x04 /* Class of Service no registered */ 147#define NSRJTX_IPNOTREG 0x05 /* IP Address not registered */ 148#define NSRJTX_IPANOTREG 0x06 /* Initial Proc. Assoc not reg. */ 149#define NSRJTX_FC4NOTREG 0x07 /* FC$ types not registered */ 150#define NSRJTX_SPNNOTREG 0x08 /* Symbolic port name not registered */ 151#define NSRJTX_SNNNOTREG 0x09 /* Symbolic node name not registered */ 152#define NSRJTX_TYPENOTREG 0x0a /* Port type not registered */ 153#define NSRJTX_NOPERM 0x10 /* Access denied */ 154#define NSRJTX_BADPORTID 0x11 /* Unacceptable port ID */ 155#define NSRJTX_DBEMPTY 0x12 /* Data base empty */ 156 157/* Management Service Command Codes */ 158#define MS_GIEL 0x0101 /* Get Interconnect Element List */ 159 160#define FC_NS_CLASSF 0x01 161#define FC_NS_CLASS1 0x02 162#define FC_NS_CLASS2 0x04 163#define FC_NS_CLASS3 0x08 164#define FC_NS_CLASS4 0x10 165#define FC_NS_CLASS5 0x20 166#define FC_NS_CLASS6 0x40 167 168#define FC_NS_PORT_UNKNOWN 0x00 169#define FC_NS_PORT_N 0x01 170#define FC_NS_PORT_NL 0x02 171#define FC_NS_PORT_F_NL 0x03 172#define FC_NS_PORT_NX 0x7F 173#define FC_NS_PORT_F 0x81 174#define FC_NS_PORT_FL 0x82 175#define FC_NS_PORT_E 0x84 176 177#define FC_IS_CMD_A_QUERY(cmd) ((cmd) >= NS_GA_NXT && (cmd) <= NS_GID_PT) 178#define FC_IS_CMD_A_REG(cmd) ((cmd) >= NS_RPN_ID && (cmd) <= NS_DA_ID) 179#define NS_GAN_RESP_LEN (sizeof (ns_resp_gan_t)) 180 181/* 182 * SCR registration function codes 183 */ 184#define FC_SCR_FABRIC_REGISTRATION 0x01 185#define FC_SCR_NPORT_REGISTRATION 0x02 186#define FC_SCR_FULL_REGISTRATION 0x03 187#define FC_SCR_CLEAR_REGISTRATION 0xFF 188 189/* 190 * Register port/node name request payload 191 * 192 * 'x' means either P (port) or N (node) 193 */ 194typedef struct rxn_id { 195 fc_portid_t rxn_port_id; /* Port Identfier */ 196 la_wwn_t rxn_xname; /* Port/Node Name */ 197} ns_rxn_req_t; 198 199/* 200 * Register Class of service request payload 201 */ 202typedef struct rcos { 203 fc_portid_t rcos_port_id; 204 uint32_t rcos_cos; 205} ns_rcos_t; 206 207/* 208 * Register FC-4 TYPEs request payload 209 */ 210typedef struct rfc_type { 211 fc_portid_t rfc_port_id; 212 uchar_t rfc_types[32]; /* bit map of ULP types */ 213} ns_rfc_type_t; 214 215/* 216 * Register symbolic port name request payload 217 */ 218typedef struct spn { 219 fc_portid_t spn_port_id; 220 uchar_t spn_len; 221 /* 222 * What follows here is the actual name 223 * which is allocated on the fly during 224 * packet allocation. 225 */ 226} ns_spn_t; 227 228/* 229 * Register port type request payload 230 */ 231typedef struct rpt { 232 fc_portid_t rpt_port_id; 233 fc_porttype_t rpt_type; 234} ns_rpt_t; 235 236/* 237 * Register IP address request payload 238 */ 239typedef struct rip { 240 la_wwn_t rip_node_name; 241 uchar_t rip_ip_addr[16]; 242} ns_rip_t; 243 244/* 245 * Register Initial Process Associator request payload 246 */ 247typedef struct ipa { 248 la_wwn_t ipa_node_name; 249 uchar_t ipa_value[8]; 250} ns_ipa_t; 251 252/* 253 * Register Symbolic Node Name request payload 254 */ 255typedef struct snn { 256 la_wwn_t snn_node_name; 257 uchar_t snn_len; 258 /* 259 * What follows here is the actual name 260 * which is allocated on the fly during 261 * packet allocation. 262 */ 263} ns_snn_t; 264 265/* 266 * Remove all request payload 267 */ 268typedef struct remall { 269 fc_portid_t rem_port_id; 270} ns_remall_t; 271 272typedef fc_ct_header_t fc_reg_resp_t; 273typedef fc_ct_header_t fc_query_resp_t; 274 275typedef struct ns_req_gid_pt { 276 fc_porttype_t port_type; 277} ns_req_gid_pt_t; 278 279typedef struct ns_resp_gid_pt { 280 fc_portid_t gid_port_id; 281} ns_resp_gid_pt_t; 282 283typedef struct ns_req_gan { 284 fc_portid_t pid; 285} ns_req_gan_t; 286 287typedef struct ns_resp_gan { 288 fc_porttype_t gan_type_id; /* type and id next */ 289 la_wwn_t gan_pwwn; /* Port Name */ 290 uchar_t gan_spnlen; /* Sym P Name Len */ 291 char gan_spname[255]; /* Sym Port name */ 292 293 la_wwn_t gan_nwwn; /* Node Name */ 294 uchar_t gan_snnlen; /* Sym N name Len */ 295 char gan_snname[255]; /* Sym Node name */ 296 297 uchar_t gan_ipa[8]; /* Initial Proc assoc */ 298 uchar_t gan_ip[16]; /* IP Address */ 299 uint32_t gan_cos; /* Class of Service */ 300 301 uint32_t gan_fc4types[8]; /* FC-4 Types */ 302} ns_resp_gan_t; 303 304typedef struct ns_req_gid_pn { 305 la_wwn_t pwwn; 306} ns_req_gid_pn_t; 307 308typedef struct ns_resp_gid_pn { 309 fc_portid_t pid; 310} ns_resp_gid_pn_t; 311 312typedef struct ns_req_gpn_id { 313 fc_portid_t pid; 314} ns_req_gpn_id_t; 315 316typedef struct ns_resp_gpn_id { 317 la_wwn_t pwwn; 318} ns_resp_gpn_id_t; 319 320typedef struct ns_req_gpt_id { 321 fc_portid_t pid; 322} ns_req_gpt_id_t; 323 324typedef struct ns_resp_gpt_id { 325 fc_porttype_t port_type; 326} ns_resp_gpt_id_t; 327 328#if !defined(__lint) 329_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_resp_gpn_id)) 330_NOTE(SCHEME_PROTECTS_DATA("unique per request", rxn_id)) 331_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_req_gpn_id)) 332_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_resp_gid_pn)) 333_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_req_gid_pn)) 334_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_resp_gan)) 335_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_req_gan)) 336_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_req_gid_pt)) 337_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_req_gpt_id)) 338_NOTE(SCHEME_PROTECTS_DATA("unique per request", ns_resp_gpt_id)) 339_NOTE(SCHEME_PROTECTS_DATA("unique per request", remall)) 340_NOTE(SCHEME_PROTECTS_DATA("unique per request", snn)) 341_NOTE(SCHEME_PROTECTS_DATA("unique per request", ipa)) 342_NOTE(SCHEME_PROTECTS_DATA("unique per request", rip)) 343_NOTE(SCHEME_PROTECTS_DATA("unique per request", rpt)) 344_NOTE(SCHEME_PROTECTS_DATA("unique per request", spn)) 345_NOTE(SCHEME_PROTECTS_DATA("unique per request", rfc_type)) 346_NOTE(SCHEME_PROTECTS_DATA("unique per request", rcos)) 347#endif /* __lint */ 348 349#ifdef __cplusplus 350} 351#endif 352 353#endif /* _SYS_FIBRE_CHANNEL_IMPL_FCGS2_H */ 354