2012-11-15 21:11:18 +04:00
/*
* This file is part of the Chelsio FCoE driver for Linux .
*
* Copyright ( c ) 2008 - 2012 Chelsio Communications , Inc . All rights reserved .
*
* This software is available to you under a choice of one of two
* licenses . You may choose to be licensed under the terms of the GNU
* General Public License ( GPL ) Version 2 , available from the file
* COPYING in the main directory of this source tree , or the
* OpenIB . org BSD license below :
*
* Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* - Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
*
* - Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND ,
* EXPRESS OR IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT . IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY , WHETHER IN AN
* ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
*/
# ifndef __CSIO_RNODE_H__
# define __CSIO_RNODE_H__
# include "csio_defs.h"
/* State machine evets */
enum csio_rn_ev {
CSIO_RNFE_NONE = ( uint32_t ) 0 , /* None */
CSIO_RNFE_LOGGED_IN , /* [N/F]Port login
* complete .
*/
CSIO_RNFE_PRLI_DONE , /* PRLI completed */
CSIO_RNFE_PLOGI_RECV , /* Received PLOGI */
CSIO_RNFE_PRLI_RECV , /* Received PLOGI */
CSIO_RNFE_LOGO_RECV , /* Received LOGO */
CSIO_RNFE_PRLO_RECV , /* Received PRLO */
CSIO_RNFE_DOWN , /* Rnode is down */
CSIO_RNFE_CLOSE , /* Close rnode */
CSIO_RNFE_NAME_MISSING , /* Rnode name missing
* in name server .
*/
CSIO_RNFE_MAX_EVENT ,
} ;
/* rnode stats */
struct csio_rnode_stats {
uint32_t n_err ; /* error */
uint32_t n_err_inval ; /* invalid parameter */
uint32_t n_err_nomem ; /* error nomem */
uint32_t n_evt_unexp ; /* unexpected event */
uint32_t n_evt_drop ; /* unexpected event */
2013-03-16 14:07:56 +04:00
uint32_t n_evt_fw [ PROTO_ERR_IMPL_LOGO + 1 ] ; /* fw events */
2012-11-15 21:11:18 +04:00
enum csio_rn_ev n_evt_sm [ CSIO_RNFE_MAX_EVENT ] ; /* State m/c events */
uint32_t n_lun_rst ; /* Number of resets of
* of LUNs under this
* target
*/
uint32_t n_lun_rst_fail ; /* Number of LUN reset
* failures .
*/
uint32_t n_tgt_rst ; /* Number of target resets */
uint32_t n_tgt_rst_fail ; /* Number of target reset
* failures .
*/
} ;
/* Defines for rnode role */
# define CSIO_RNFR_INITIATOR 0x1
# define CSIO_RNFR_TARGET 0x2
# define CSIO_RNFR_FABRIC 0x4
# define CSIO_RNFR_NS 0x8
# define CSIO_RNFR_NPORT 0x10
struct csio_rnode {
struct csio_sm sm ; /* State machine -
* should be the
* 1 st member
*/
struct csio_lnode * lnp ; /* Pointer to owning
* Lnode */
uint32_t flowid ; /* Firmware ID */
struct list_head host_cmpl_q ; /* SCSI IOs
* pending to completed
* to Mid - layer .
*/
/* FC identifiers for remote node */
uint32_t nport_id ;
uint16_t fcp_flags ; /* FCP Flags */
uint8_t cur_evt ; /* Current event */
uint8_t prev_evt ; /* Previous event */
uint32_t role ; /* Fabric/Target/
* Initiator / NS
*/
struct fcoe_rdev_entry * rdev_entry ; /* Rdev entry */
struct csio_service_parms rn_sparm ;
/* FC transport attributes */
struct fc_rport * rport ; /* FC transport rport */
uint32_t supp_classes ; /* Supported FC classes */
uint32_t maxframe_size ; /* Max Frame size */
uint32_t scsi_id ; /* Transport given SCSI id */
struct csio_rnode_stats stats ; /* Common rnode stats */
} ;
# define csio_rn_flowid(rn) ((rn)->flowid)
# define csio_rn_wwpn(rn) ((rn)->rn_sparm.wwpn)
# define csio_rn_wwnn(rn) ((rn)->rn_sparm.wwnn)
# define csio_rnode_to_lnode(rn) ((rn)->lnp)
int csio_is_rnode_ready ( struct csio_rnode * rn ) ;
void csio_rnode_state_to_str ( struct csio_rnode * rn , int8_t * str ) ;
struct csio_rnode * csio_rnode_lookup_portid ( struct csio_lnode * , uint32_t ) ;
struct csio_rnode * csio_confirm_rnode ( struct csio_lnode * ,
uint32_t , struct fcoe_rdev_entry * ) ;
void csio_rnode_fwevt_handler ( struct csio_rnode * rn , uint8_t fwevt ) ;
void csio_put_rnode ( struct csio_lnode * ln , struct csio_rnode * rn ) ;
void csio_reg_rnode ( struct csio_rnode * ) ;
void csio_unreg_rnode ( struct csio_rnode * ) ;
void csio_rnode_devloss_handler ( struct csio_rnode * ) ;
# endif /* ifndef __CSIO_RNODE_H__ */