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