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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright (c) 1995,1997-1998 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27#ifndef _SYS_FC4_LINKAPP_H 28#define _SYS_FC4_LINKAPP_H 29 30#pragma ident "%Z%%M% %I% %E% SMI" 31 32#ifdef __cplusplus 33extern "C" { 34#endif 35 36/* 37 * linkapp.h 38 * 39 * This file contains the definitions for structures and macros 40 * for fiber channel link application payloads and data. 41 */ 42 43/* 44 * Well Known Fiber Chaneel Addresses to reach the fabric for 45 * various services. 46 */ 47 48#define FS_GENERAL_MULTICAST 0xfffff7 49#define FS_WELL_KNOWN_MULTICAST 0xfffff8 50#define FS_HUNT_GROUP 0xfffff9 51#define FS_MANAGEMENT_SERVER 0xfffffa 52#define FS_TIME_SERVER 0xfffffb 53#define FS_NAME_SERVER 0xfffffc 54#define FS_FABRIC_CONTROLLER 0xfffffd 55#define FS_FABRIC_F_PORT 0xfffffe 56#define FS_BROADCAST 0xffffff 57 58/* 59 * Link Application Opcodes. 60 */ 61 62#define LA_RJT 0x01000000 63#define LA_ACC 0x02000000 64#define LA_LOGI 0x03000000 65#define LA_LOGO 0x04000000 66#define LA_RLS 0x0d000000 67#define LA_IDENT 0x20000000 68 69/* Basic Accept Payload. */ 70typedef struct ba_acc { 71 uchar_t seq_id:8; 72 uchar_t org_s_id[3]; 73 ushort_t ox_id; 74 ushort_t rx_id; 75} ba_acc_t; 76 77/* Basic Reject. */ 78typedef struct ba_rjt { 79 uchar_t reseved; 80 uchar_t reason_code; 81 uchar_t explanation; 82 uchar_t vendor; 83} ba_rjt_t; 84 85/* 86 * Basic Reject Reason Codes. 87 */ 88#define RJT_INVALID_CMD 0x01 89#define RJT_LOGICAL_ERR 0x03 90#define RJT_LOGICAL_BUSY 0x05 91#define RJT_PROTOCOL_ERR 0x07 92#define RJT_UNABLE 0x09 93#define RJT_UNSUPPORTED 0x0B 94#define RJT_VENDOR 0xFF 95 96/* 97 * Basic Reject Explanation Codes 98 */ 99#define RJT_NOEXPLANATION 0x00 100#define RJT_INVALID_OSID 0x01 101#define RJT_INVALID_OXID_RXID 0x03 102#define RJT_INVALID_SEQID 0x05 103#define RJT_ABORT_INACTIVE_SEQ 0x07 104#define RJT_UNABLE_TO_SUPPLY 0x09 105 106/* 107 * Service parameters. 108 */ 109typedef struct common_service { 110 uint_t fcph; 111 uint_t btob_crdt; 112 uint_t cmn_features; 113 uint_t reserved; 114} common_svc_t; 115 116typedef struct service_param { 117 uchar_t data[16]; 118} svc_param_t; 119 120/* World Wide Name formats */ 121typedef union la_wwn { 122 uchar_t raw_wwn[8]; 123 struct { 124 uint_t naa_id : 4; 125 uint_t nport_id : 12; 126 uint_t wwn_hi : 16; 127 uint_t wwn_lo; 128 } w; 129} la_wwn_t; 130 131/* 132 * Values for naa_id 133 */ 134#define NAA_ID_IEEE 1 135#define NAA_ID_IEEE_EXTENDED 2 136 137/* Login Payload. */ 138typedef struct la_logi { 139 unsigned code; 140 common_svc_t common_service; 141 142 la_wwn_t nport_ww_name; 143 la_wwn_t node_ww_name; 144 145 svc_param_t class_1; 146 svc_param_t class_2; 147 svc_param_t class_3; 148} la_logi_t; 149 150#define SP_F_PORT_LOGIN 0x10 151 152/* Read Link Error Status */ 153typedef struct la_rls { 154 unsigned code; 155 uchar_t reserved; 156 uchar_t nport_id[3]; 157} la_rls_t; 158 159/* Read Link Error Status Reply */ 160typedef struct la_rls_reply { 161 unsigned code; 162 unsigned link_failure; 163 unsigned loss_of_sync; 164 unsigned loss_of_signal; 165 unsigned primitive; 166 unsigned invalid_transmission; 167 unsigned invalid_crc; 168} la_rls_reply_t; 169 170/* Logout payload. */ 171typedef struct la_logo { 172 unsigned cmd; 173} la_logo_t; 174 175/* Logout reply payload. */ 176typedef la_logo_t la_logo_reply_t; 177 178/* Link Application Reject */ 179typedef struct la_rjt { 180 int code; 181 uchar_t reserved; 182 uchar_t reason_code; 183 uchar_t explanation; 184 uchar_t vendor; 185} la_rjt_t; 186 187/* 188 * LA_RJT Reason Codes. 189 */ 190#define LA_RJT_INVALID 0x01 191#define LA_RJT_LOGICAL_ERR 0x03 192#define LA_RJT_LOGICAL_BUSY 0x05 193#define LA_RJT_PROTOCOL_ERR 0x07 194#define LA_RJT_UNABLE_TO_PERFORM 0x09 195#define LA_RJT_NOT_SUPPORTED 0x0b 196#define LA_RJT_VENDOR 0xff 197 198/* 199 * LA_RJT explanations 200 */ 201#define LA_RJT_NOEXPLANATION 0x00 202#define LA_RJT_OPTIONS 0x01 203#define LA_RJT_INITIATOR 0x03 204#define LA_RJT_RECIPIENT 0x05 205#define LA_RJT_DATA_FIELD_SIZE 0x07 206#define LA_RJT_CONCURRENT 0x09 207#define LA_RJT_CREDIT 0x0b 208 209#define LA_RJT_INVALID_PORT_WWNAME 0x0d 210#define LA_RJT_INVALID_NODE_WWNAME 0x0e 211#define LA_RJT_INVALID_COMMON_SVC 0x0f 212 213#define LA_RJT_INSUFFICENT 0x29 214 215#ifdef __cplusplus 216} 217#endif 218 219#endif /* !_SYS_FC4_LINKAPP_H */ 220