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 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_FIBRE_CHANNEL_IMPL_FC_LINKAPP_H 27 #define _SYS_FIBRE_CHANNEL_IMPL_FC_LINKAPP_H 28 29 30 31 #include <sys/note.h> 32 33 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 #if !defined(_BIT_FIELDS_LTOH) && !defined(_BIT_FIELDS_HTOL) 38 #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 39 #endif /* _BIT_FIELDS_LTOH */ 40 41 /* 42 * Link Application Opcodes. 43 */ 44 #define LA_ELS_RJT 0x01 45 #define LA_ELS_ACC 0x02 46 #define LA_ELS_PLOGI 0x03 47 #define LA_ELS_FLOGI 0x04 48 #define LA_ELS_LOGO 0x05 49 #define LA_ELS_ABTX 0x06 50 #define LA_ELS_RCS 0x07 51 #define LA_ELS_RES 0x08 52 #define LA_ELS_RSS 0x09 53 #define LA_ELS_RSI 0x0a 54 #define LA_ELS_ESTS 0x0b 55 #define LA_ELS_ESTC 0x0c 56 #define LA_ELS_ADVC 0x0d 57 #define LA_ELS_RTV 0x0e 58 #define LA_ELS_RLS 0x0f 59 #define LA_ELS_ECHO 0x10 60 #define LA_ELS_RRQ 0x12 61 #define LA_ELS_PRLI 0x20 62 #define LA_ELS_PRLO 0x21 63 #define LA_ELS_SCN 0x22 64 #define LA_ELS_TPLS 0x23 65 #define LA_ELS_GPRLO 0x24 66 #define LA_ELS_GAID 0x30 67 #define LA_ELS_FACT 0x31 68 #define LA_ELS_FDACT 0x32 69 #define LA_ELS_NACT 0x33 70 #define LA_ELS_NDACT 0x34 71 #define LA_ELS_QoSR 0x40 72 #define LA_ELS_RVCS 0x41 73 #define LA_ELS_PDISC 0x50 74 #define LA_ELS_FDISC 0x51 75 #define LA_ELS_ADISC 0x52 76 #define LA_ELS_RSCN 0x61 77 #define LA_ELS_SCR 0x62 78 #define LA_ELS_LINIT 0x70 79 #define LA_ELS_RNID 0x78 80 81 /* 82 * LINIT status codes in the ACC 83 */ 84 #define FC_LINIT_SUCCESS 0x01 85 #define FC_LINIT_FAILURE 0x02 86 87 /* Basic Accept Payload. */ 88 typedef struct la_ba_acc { 89 90 #if defined(_BIT_FIELDS_LTOH) 91 uint32_t org_sid : 24, 92 seq_id : 8; 93 94 #else 95 uint32_t seq_id : 8, 96 org_sid : 24; 97 98 #endif /* _BIT_FIELDS_LTOH */ 99 100 uint16_t ox_id; 101 uint16_t rx_id; 102 } la_ba_acc_t; 103 104 105 /* Basic Reject. */ 106 typedef struct la_ba_rjt { 107 uchar_t reserved; 108 uchar_t reason_code; 109 uchar_t explanation; 110 uchar_t vendor; 111 } la_ba_rjt_t; 112 113 114 /* Logout payload. */ 115 typedef struct la_els_logo { 116 ls_code_t ls_code; 117 fc_portid_t nport_id; 118 la_wwn_t nport_ww_name; 119 } la_els_logo_t; 120 121 /* Address discovery */ 122 typedef struct la_els_adisc { 123 ls_code_t ls_code; 124 fc_hardaddr_t hard_addr; 125 la_wwn_t port_wwn; 126 la_wwn_t node_wwn; 127 fc_portid_t nport_id; 128 } la_els_adisc_t; 129 130 131 /* Link Application Reject */ 132 typedef struct la_els_rjt { 133 ls_code_t ls_code; 134 uchar_t action; 135 uchar_t reason; 136 uchar_t reserved; 137 uchar_t vu; 138 } la_els_rjt_t; 139 140 /* Process Login/Logout Service Parameter Page */ 141 #define SP_OPA_VALID 0x8000 142 #define SP_RPA_VALID 0x4000 143 #define SP_ESTABLISH_IMAGE_PAIR 0x2000 144 #define SP_RESP_CODE_MASK 0x0F00 145 #define SP_RESP_CODE_REQ_EXECUTED 0x0100 146 147 typedef struct service_parameter_page { 148 uint8_t type_code; 149 uint8_t type_code_ext; 150 uint16_t flags; 151 uint32_t opa; 152 uint32_t rpa; 153 uint32_t sp; 154 } service_parameter_page_t; 155 156 /* Process login */ 157 typedef struct la_els_prli { 158 #if defined(_BIT_FIELDS_LTOH) 159 uint32_t payload_length : 16, 160 page_length : 8, 161 ls_code : 8; 162 163 #elif defined(_BIT_FIELDS_HTOL) 164 uint32_t ls_code : 8, 165 page_length : 8, 166 payload_length : 16; 167 168 #endif /* _BIT_FIELDS_LTOH */ 169 uchar_t service_params[16]; 170 } la_els_prli_t; 171 172 /* Process Logout */ 173 typedef struct la_els_prlo { 174 uint8_t ls_code; 175 uint8_t page_length; 176 uint16_t payload_length; 177 uint8_t type_code; 178 uint8_t type_code_extension; 179 uint16_t flags; 180 uint32_t opa; 181 uint32_t rpa; 182 uint32_t reserved; 183 } la_els_prlo_t; 184 185 #if !defined(__lint) 186 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_ba_rjt)) 187 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_logo)) 188 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_adisc)) 189 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_rjt)) 190 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_els_prli_t)) 191 _NOTE(SCHEME_PROTECTS_DATA("unique per request", la_ba_acc)) 192 #endif /* __lint */ 193 194 195 #ifdef __cplusplus 196 } 197 #endif 198 199 #endif /* _SYS_FIBRE_CHANNEL_IMPL_FC_LINKAPP_H */ 200