 7725ccfda5
			
		
	
	
	7725ccfda5
	
	
	
		
			
			Add new driver for Brocade Hardware Signed-off-by: Jing Huang <huangj@brocade.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
		
			
				
	
	
		
			224 lines
		
	
	
	
		
			6.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
	
		
			6.2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
 | |
|  * All rights reserved
 | |
|  * www.brocade.com
 | |
|  *
 | |
|  * Linux driver for Brocade Fibre Channel Host Bus Adapter.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify it
 | |
|  * under the terms of the GNU General Public License (GPL) Version 2 as
 | |
|  * published by the Free Software Foundation
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful, but
 | |
|  * WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * General Public License for more details.
 | |
|  */
 | |
| 
 | |
| #ifndef __FC_SP_H__
 | |
| #define __FC_SP_H__
 | |
| 
 | |
| #include <protocol/types.h>
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| enum auth_els_flags{
 | |
| 	FC_AUTH_ELS_MORE_FRAGS_FLAG 	= 0x80,	/*! bit-7. More Fragments
 | |
| 						 * Follow
 | |
| 						 */
 | |
| 	FC_AUTH_ELS_CONCAT_FLAG 	= 0x40,	/*! bit-6. Concatenation Flag */
 | |
| 	FC_AUTH_ELS_SEQ_NUM_FLAG 	= 0x01 	/*! bit-0. Sequence Number */
 | |
| };
 | |
| 
 | |
| enum auth_msg_codes{
 | |
| 	FC_AUTH_MC_AUTH_RJT		= 0x0A,	/*! Auth Reject */
 | |
| 	FC_AUTH_MC_AUTH_NEG 		= 0x0B, /*! Auth Negotiate */
 | |
| 	FC_AUTH_MC_AUTH_DONE 		= 0x0C, /*! Auth Done */
 | |
| 
 | |
| 	FC_AUTH_MC_DHCHAP_CHAL 		= 0x10, /*! DHCHAP Challenge */
 | |
| 	FC_AUTH_MC_DHCHAP_REPLY 	= 0x11, /*! DHCHAP Reply */
 | |
| 	FC_AUTH_MC_DHCHAP_SUCC 		= 0x12, /*! DHCHAP Success */
 | |
| 
 | |
| 	FC_AUTH_MC_FCAP_REQ 		= 0x13, /*! FCAP Request */
 | |
| 	FC_AUTH_MC_FCAP_ACK 		= 0x14, /*! FCAP Acknowledge */
 | |
| 	FC_AUTH_MC_FCAP_CONF 		= 0x15, /*! FCAP Confirm */
 | |
| 
 | |
| 	FC_AUTH_MC_FCPAP_INIT 		= 0x16, /*! FCPAP Init */
 | |
| 	FC_AUTH_MC_FCPAP_ACC 		= 0x17, /*! FCPAP Accept */
 | |
| 	FC_AUTH_MC_FCPAP_COMP 		= 0x18, /*! FCPAP Complete */
 | |
| 
 | |
| 	FC_AUTH_MC_IKE_SA_INIT 		= 0x22, /*! IKE SA INIT */
 | |
| 	FC_AUTH_MC_IKE_SA_AUTH 		= 0x23, /*! IKE SA Auth */
 | |
| 	FC_AUTH_MC_IKE_CREATE_CHILD_SA	= 0x24, /*! IKE Create Child SA */
 | |
| 	FC_AUTH_MC_IKE_INFO 		= 0x25, /*! IKE informational */
 | |
| };
 | |
| 
 | |
| enum auth_proto_version{
 | |
| 	FC_AUTH_PROTO_VER_1 	= 1,	/*! Protocol Version 1 */
 | |
| };
 | |
| 
 | |
| enum {
 | |
| 	FC_AUTH_ELS_COMMAND_CODE = 0x90,/*! Authentication ELS Command code  */
 | |
| 	FC_AUTH_PROTO_PARAM_LEN_SZ = 4,	/*! Size of Proto Parameter Len Field */
 | |
| 	FC_AUTH_PROTO_PARAM_VAL_SZ = 4,	/*! Size of Proto Parameter Val Field */
 | |
| 	FC_MAX_AUTH_SECRET_LEN     = 256,
 | |
| 					/*! Maximum secret string length */
 | |
| 	FC_AUTH_NUM_USABLE_PROTO_LEN_SZ = 4,
 | |
| 					/*! Size of usable protocols field */
 | |
| 	FC_AUTH_RESP_VALUE_LEN_SZ	= 4,
 | |
| 					/*! Size of response value length */
 | |
| 	FC_MAX_CHAP_KEY_LEN	= 256,	/*! Maximum md5 digest length */
 | |
| 	FC_MAX_AUTH_RETRIES     = 3,	/*! Maximum number of retries */
 | |
| 	FC_MD5_DIGEST_LEN       = 16,	/*! MD5 digest length */
 | |
| 	FC_SHA1_DIGEST_LEN      = 20,	/*! SHA1 digest length */
 | |
| 	FC_MAX_DHG_SUPPORTED    = 1,	/*! Maximum DH Groups supported */
 | |
| 	FC_MAX_ALG_SUPPORTED    = 1,	/*! Maximum algorithms supported */
 | |
| 	FC_MAX_PROTO_SUPPORTED  = 1,	/*! Maximum protocols supported */
 | |
| 	FC_START_TXN_ID         = 2,	/*! Starting transaction ID */
 | |
| };
 | |
| 
 | |
| enum auth_proto_id{
 | |
| 	FC_AUTH_PROTO_DHCHAP		= 0x00000001,
 | |
| 	FC_AUTH_PROTO_FCAP 		= 0x00000002,
 | |
| 	FC_AUTH_PROTO_FCPAP 		= 0x00000003,
 | |
| 	FC_AUTH_PROTO_IKEv2 		= 0x00000004,
 | |
| 	FC_AUTH_PROTO_IKEv2_AUTH 	= 0x00000005,
 | |
| };
 | |
| 
 | |
| struct auth_name_s{
 | |
| 	u16	name_tag;	/*! Name Tag = 1 for Authentication */
 | |
| 	u16	name_len;	/*! Name Length = 8 for Authentication
 | |
| 					 */
 | |
| 	wwn_t		name;  		/*! Name. TODO - is this PWWN */
 | |
| };
 | |
| 
 | |
| 
 | |
| enum auth_hash_func{
 | |
| 	FC_AUTH_HASH_FUNC_MD5 		= 0x00000005,
 | |
| 	FC_AUTH_HASH_FUNC_SHA_1 	= 0x00000006,
 | |
| };
 | |
| 
 | |
| enum auth_dh_gid{
 | |
| 	FC_AUTH_DH_GID_0_DHG_NULL	= 0x00000000,
 | |
| 	FC_AUTH_DH_GID_1_DHG_1024	= 0x00000001,
 | |
| 	FC_AUTH_DH_GID_2_DHG_1280	= 0x00000002,
 | |
| 	FC_AUTH_DH_GID_3_DHG_1536	= 0x00000003,
 | |
| 	FC_AUTH_DH_GID_4_DHG_2048	= 0x00000004,
 | |
| 	FC_AUTH_DH_GID_6_DHG_3072	= 0x00000006,
 | |
| 	FC_AUTH_DH_GID_7_DHG_4096	= 0x00000007,
 | |
| 	FC_AUTH_DH_GID_8_DHG_6144	= 0x00000008,
 | |
| 	FC_AUTH_DH_GID_9_DHG_8192	= 0x00000009,
 | |
| };
 | |
| 
 | |
| struct auth_els_msg_s {
 | |
| 	u8		auth_els_code;	/*  Authentication ELS Code (0x90) */
 | |
| 	u8 	auth_els_flag; 	/*  Authentication ELS Flags */
 | |
| 	u8 	auth_msg_code; 	/*  Authentication Message Code */
 | |
| 	u8 	proto_version; 	/*  Protocol Version */
 | |
| 	u32	msg_len; 	/*  Message Length */
 | |
| 	u32	trans_id; 	/*  Transaction Identifier (T_ID) */
 | |
| 
 | |
| 	/* Msg payload follows... */
 | |
| };
 | |
| 
 | |
| 
 | |
| enum auth_neg_param_tags {
 | |
| 	FC_AUTH_NEG_DHCHAP_HASHLIST 	= 0x0001,
 | |
| 	FC_AUTH_NEG_DHCHAP_DHG_ID_LIST 	= 0x0002,
 | |
| };
 | |
| 
 | |
| 
 | |
| struct dhchap_param_format_s {
 | |
| 	u16	tag;		/*! Parameter Tag. See
 | |
| 					 * auth_neg_param_tags_t
 | |
| 					 */
 | |
| 	u16	word_cnt;
 | |
| 
 | |
| 	/* followed by variable length parameter value... */
 | |
| };
 | |
| 
 | |
| struct auth_proto_params_s {
 | |
| 	u32	proto_param_len;
 | |
| 	u32	proto_id;
 | |
| 
 | |
| 	/*
 | |
| 	 * Followed by variable length Protocol specific parameters. DH-CHAP
 | |
| 	 * uses dhchap_param_format_t
 | |
| 	 */
 | |
| };
 | |
| 
 | |
| struct auth_neg_msg_s {
 | |
| 	struct auth_name_s	auth_ini_name;
 | |
| 	u32		usable_auth_protos;
 | |
| 	struct auth_proto_params_s proto_params[1]; /*! (1..usable_auth_proto)
 | |
| 						     * protocol params
 | |
| 						     */
 | |
| };
 | |
| 
 | |
| struct auth_dh_val_s {
 | |
| 	u32 dh_val_len;
 | |
| 	u32 dh_val[1];
 | |
| };
 | |
| 
 | |
| struct auth_dhchap_chal_msg_s {
 | |
| 	struct auth_els_msg_s	hdr;
 | |
| 	struct auth_name_s auth_responder_name;	/* TODO VRK - is auth_name_t
 | |
| 						 * type OK?
 | |
| 						 */
 | |
| 	u32 	hash_id;
 | |
| 	u32 	dh_grp_id;
 | |
| 	u32 	chal_val_len;
 | |
| 	char		chal_val[1];
 | |
| 
 | |
| 	/* ...followed by variable Challenge length/value and DH length/value */
 | |
| };
 | |
| 
 | |
| 
 | |
| enum auth_rjt_codes {
 | |
| 	FC_AUTH_RJT_CODE_AUTH_FAILURE 	= 0x01,
 | |
| 	FC_AUTH_RJT_CODE_LOGICAL_ERR	= 0x02,
 | |
| };
 | |
| 
 | |
| enum auth_rjt_code_exps {
 | |
| 	FC_AUTH_CEXP_AUTH_MECH_NOT_USABLE	= 0x01,
 | |
| 	FC_AUTH_CEXP_DH_GROUP_NOT_USABLE 	= 0x02,
 | |
| 	FC_AUTH_CEXP_HASH_FUNC_NOT_USABLE 	= 0x03,
 | |
| 	FC_AUTH_CEXP_AUTH_XACT_STARTED		= 0x04,
 | |
| 	FC_AUTH_CEXP_AUTH_FAILED 		= 0x05,
 | |
| 	FC_AUTH_CEXP_INCORRECT_PLD 		= 0x06,
 | |
| 	FC_AUTH_CEXP_INCORRECT_PROTO_MSG 	= 0x07,
 | |
| 	FC_AUTH_CEXP_RESTART_AUTH_PROTO 	= 0x08,
 | |
| 	FC_AUTH_CEXP_AUTH_CONCAT_NOT_SUPP 	= 0x09,
 | |
| 	FC_AUTH_CEXP_PROTO_VER_NOT_SUPP 	= 0x0A,
 | |
| };
 | |
| 
 | |
| enum auth_status {
 | |
| 	FC_AUTH_STATE_INPROGRESS = 0, 	/*! authentication in progress 	*/
 | |
| 	FC_AUTH_STATE_FAILED	= 1, 	/*! authentication failed */
 | |
| 	FC_AUTH_STATE_SUCCESS	= 2 	/*! authentication successful	*/
 | |
| };
 | |
| 
 | |
| struct auth_rjt_msg_s {
 | |
| 	struct auth_els_msg_s	hdr;
 | |
| 	u8		reason_code;
 | |
| 	u8		reason_code_exp;
 | |
| 	u8		rsvd[2];
 | |
| };
 | |
| 
 | |
| 
 | |
| struct auth_dhchap_neg_msg_s {
 | |
| 	struct auth_els_msg_s hdr;
 | |
| 	struct auth_neg_msg_s nego;
 | |
| };
 | |
| 
 | |
| struct auth_dhchap_reply_msg_s {
 | |
| 	struct auth_els_msg_s	hdr;
 | |
| 
 | |
| 	/*
 | |
| 	 * followed by response value length & Value + DH Value Length & Value
 | |
| 	 */
 | |
| };
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| #endif /* __FC_SP_H__ */
 |