130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC Transport BSG Interface 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 2008 James Smart, Emulex Corporation 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or modify 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * it under the terms of the GNU General Public License as published by 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the Free Software Foundation; either version 2 of the License, or 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (at your option) any later version. 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is distributed in the hope that it will be useful, 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GNU General Public License for more details. 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * You should have received a copy of the GNU General Public License 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * along with this program; if not, write to the Free Software 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef SCSI_BSG_FC_H 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SCSI_BSG_FC_H 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This file intended to be included by both kernel and user space 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC Transport SGIO v4 BSG Message Support 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Default BSG request timeout (in seconds) */ 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_DEFAULT_BSG_TIMEOUT (10 * HZ) 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Request Message Codes supported by the FC Transport 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* define the class masks for the message codes */ 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_CLS_MASK 0xF0000000 /* find object class */ 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_MASK 0x80000000 /* fc host class */ 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_RPT_MASK 0x40000000 /* fc rport class */ 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* fc_host Message Codes */ 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_ADD_RPORT (FC_BSG_HST_MASK | 0x00000001) 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_DEL_RPORT (FC_BSG_HST_MASK | 0x00000002) 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_ELS_NOLOGIN (FC_BSG_HST_MASK | 0x00000003) 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_CT (FC_BSG_HST_MASK | 0x00000004) 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_HST_VENDOR (FC_BSG_HST_MASK | 0x000000FF) 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* fc_rport Message Codes */ 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_RPT_ELS (FC_BSG_RPT_MASK | 0x00000001) 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_BSG_RPT_CT (FC_BSG_RPT_MASK | 0x00000002) 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC Address Identifiers in Message Structures : 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Whenever a command payload contains a FC Address Identifier 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (aka port_id), the value is effectively in big-endian 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * order, thus the array elements are decoded as follows: 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * element [0] is bits 23:16 of the FC Address Identifier 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * element [1] is bits 15:8 of the FC Address Identifier 6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * element [2] is bits 7:0 of the FC Address Identifier 6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC Host Messages 7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_HST_ADDR_PORT : */ 7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests the FC host to login to the remote port 7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * at the specified N_Port_Id. The remote port is to be enumerated 8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * with the transport upon completion of the login. 8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 8230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_add_rport { 8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t reserved; 8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* FC Address Identier of the remote port to login to */ 8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t port_id[3]; 8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * There is no additional response data - fc_bsg_reply->result is sufficient 9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_HST_DEL_RPORT : */ 9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests the FC host to remove an enumerated 9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * remote port and to terminate the login to it. 9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: The driver is free to reject this request if it desires to 10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * remain logged in with the remote port. 10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 10330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_del_rport { 10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t reserved; 10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* FC Address Identier of the remote port to logout of */ 10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t port_id[3]; 10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * There is no additional response data - fc_bsg_reply->result is sufficient 11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_HST_ELS_NOLOGIN : */ 11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests the FC_Host to send an ELS to a specific 11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * N_Port_ID. The host does not need to log into the remote port, 12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * nor does it need to enumerate the rport for further traffic 12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (although, the FC host is free to do so if it desires). 12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 12330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_els { 12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ELS Command Code being sent (must be the same as byte 0 12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * of the payload) 12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t command_code; 12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* FC Address Identier of the remote port to send the ELS to */ 13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t port_id[3]; 13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* fc_bsg_ctels_reply->status values */ 13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_OK 0x00000000 13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_REJECT 0x00000001 13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_P_RJT 0x00000002 14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_F_RJT 0x00000003 14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_P_BSY 0x00000004 14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define FC_CTELS_STATUS_F_BSY 0x00000006 14330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_ctels_reply { 14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: An ELS LS_RJT may be reported in 2 ways: 14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * a) A status of FC_CTELS_STATUS_OK is returned. The caller 14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is to look into the ELS receive payload to determine 14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * LS_ACC or LS_RJT (by contents of word 0). The reject 14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * data will be in word 1. 15030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * b) A status of FC_CTELS_STATUS_REJECT is returned, The 15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * rjt_data field will contain valid data. 15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: ELS LS_ACC is determined by an FC_CTELS_STATUS_OK, and 15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the receive payload word 0 indicates LS_ACC 15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * (e.g. value is 0x02xxxxxx). 15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: Similarly, a CT Reject may be reported in 2 ways: 15830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * a) A status of FC_CTELS_STATUS_OK is returned. The caller 15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is to look into the CT receive payload to determine 16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Accept or Reject (by contents of word 2). The reject 16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * data will be in word 3. 16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * b) A status of FC_CTELS_STATUS_REJECT is returned, The 16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * rjt_data field will contain valid data. 16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: x_RJT/BSY status will indicae that the rjt_data field 16630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * is valid and contains the reason/explanation values. 16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t status; /* See FC_CTELS_STATUS_xxx */ 16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* valid if status is not FC_CTELS_STATUS_OK */ 17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct { 17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t action; /* fragment_id for CT REJECT */ 17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t reason_code; 17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t reason_explanation; 17530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t vendor_unique; 17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } rjt_data; 17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_HST_CT : */ 18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 18330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests that a CT Request be performed with the 18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * indicated N_Port_ID. The driver is responsible for logging in with 18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * the fabric and/or N_Port_ID, etc as per FC rules. This request does 18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * not mandate that the driver must enumerate the destination in the 18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * transport. The driver is allowed to decide whether to enumerate it, 18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * and whether to tear it down after the request. 18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 19030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_ct { 19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t reserved; 19230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* FC Address Identier of the remote port to send the ELS to */ 19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t port_id[3]; 19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * We need words 0-2 of the generic preamble for the LLD's 19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word0; /* revision & IN_ID */ 20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 20130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word2; /* Cmd Code, Max Size */ 20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The reply structure is an fc_bsg_ctels_reply structure 20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 20930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_HST_VENDOR : */ 21130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 21230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 21330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note: When specifying vendor_id, be sure to read the Vendor Type and ID 21430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * formatting requirements specified in scsi_netlink.h 21530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 21630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_vendor { 21730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 21830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Identifies the vendor that the message is formatted for. This 21930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * should be the recipient of the message. 22030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 22130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint64_t vendor_id; 22230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 22330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* start of vendor command area */ 22430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t vendor_cmd[0]; 22530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 22630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 22730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 22830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 22930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_host_vendor_reply { 23030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* start of vendor response area */ 23130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t vendor_rsp[0]; 23230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 23330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 23630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* 23730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC Remote Port Messages 23830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 23930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_RPT_ELS : */ 24130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 24230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 24330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests that an ELS be performed with the rport. 24430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 24530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_rport_els { 24630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 24730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ELS Command Code being sent (must be the same as 24830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * byte 0 of the payload) 24930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 25030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint8_t els_code; 25130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 25230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 25430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 25530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The reply structure is an fc_bsg_ctels_reply structure 25630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 25730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 25930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* FC_BSG_RPT_CT : */ 26030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 26130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Request: 26230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This message requests that a CT Request be performed with the rport. 26330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 26430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_rport_ct { 26530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 26630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * We need words 0-2 of the generic preamble for the LLD's 26730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 26830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word0; /* revision & IN_ID */ 26930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word1; /* GS_Type, GS_SubType, Options, Rsvd */ 27030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t preamble_word2; /* Cmd Code, Max Size */ 27130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 27230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* Response: 27330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 27430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The reply structure is an fc_bsg_ctels_reply structure 27530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 27630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 27930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 28030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* request (CDB) structure of the sg_io_v4 */ 28130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_request { 28230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t msgcode; 28330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 28430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_add_rport h_addrport; 28530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_del_rport h_delrport; 28630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_els h_els; 28730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_ct h_ct; 28830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_vendor h_vendor; 28930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 29030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_rport_els r_els; 29130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_rport_ct r_ct; 29230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } rqst_data; 29330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((packed)); 29430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 29530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 29630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/* response (request sense data) structure of the sg_io_v4 */ 29730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_bsg_reply { 29830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* 29930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * The completion result. Result exists in two forms: 30030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * if negative, it is an -Exxx system errno value. There will 30130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * be no further reply information supplied. 30230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * else, it's the 4-byte scsi error result, with driver, host, 30330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * msg and status fields. The per-msgcode reply structure 30430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * will contain valid data. 30530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */ 30630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t result; 30730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 30830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng /* If there was reply_payload, how much was recevied ? */ 30930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng uint32_t reply_payload_rcv_len; 31030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng union { 31230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_host_vendor_reply vendor_reply; 31330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng struct fc_bsg_ctels_reply ctels_reply; 31530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng } reply_data; 31630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng}; 31730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 31930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* SCSI_BSG_FC_H */ 32030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 321