113 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.9 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 __BFA_FCS_FABRIC_H__
 | 
						|
#define __BFA_FCS_FABRIC_H__
 | 
						|
 | 
						|
struct bfa_fcs_s;
 | 
						|
 | 
						|
#include <defs/bfa_defs_status.h>
 | 
						|
#include <defs/bfa_defs_vf.h>
 | 
						|
#include <cs/bfa_q.h>
 | 
						|
#include <cs/bfa_sm.h>
 | 
						|
#include <defs/bfa_defs_pport.h>
 | 
						|
#include <fcs/bfa_fcs_lport.h>
 | 
						|
#include <protocol/fc_sp.h>
 | 
						|
#include <fcs/bfa_fcs_auth.h>
 | 
						|
 | 
						|
/*
 | 
						|
 * forward declaration
 | 
						|
 */
 | 
						|
struct bfad_vf_s;
 | 
						|
 | 
						|
enum bfa_fcs_fabric_type {
 | 
						|
	BFA_FCS_FABRIC_UNKNOWN = 0,
 | 
						|
	BFA_FCS_FABRIC_SWITCHED = 1,
 | 
						|
	BFA_FCS_FABRIC_PLOOP = 2,
 | 
						|
	BFA_FCS_FABRIC_N2N = 3,
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fcs_fabric_s {
 | 
						|
	struct list_head   qe;		/*  queue element */
 | 
						|
	bfa_sm_t	 sm;		/*  state machine */
 | 
						|
	struct bfa_fcs_s *fcs;		/*  FCS instance */
 | 
						|
	struct bfa_fcs_port_s  bport;	/*  base logical port */
 | 
						|
	enum bfa_fcs_fabric_type fab_type; /*  fabric type */
 | 
						|
	enum bfa_pport_type oper_type;	/*  current link topology */
 | 
						|
	u8         is_vf;		/*  is virtual fabric? */
 | 
						|
	u8         is_npiv;	/*  is NPIV supported ? */
 | 
						|
	u8         is_auth;	/*  is Security/Auth supported ? */
 | 
						|
	u16        bb_credit;	/*  BB credit from fabric */
 | 
						|
	u16        vf_id;		/*  virtual fabric ID */
 | 
						|
	u16        num_vports;	/*  num vports */
 | 
						|
	u16        rsvd;
 | 
						|
	struct list_head         vport_q;	/*  queue of virtual ports */
 | 
						|
	struct list_head         vf_q;	/*  queue of virtual fabrics */
 | 
						|
	struct bfad_vf_s      *vf_drv;	/*  driver vf structure */
 | 
						|
	struct bfa_timer_s link_timer;	/*  Link Failure timer. Vport */
 | 
						|
	wwn_t           fabric_name;	/*  attached fabric name */
 | 
						|
	bfa_boolean_t   auth_reqd;	/*  authentication required	*/
 | 
						|
	struct bfa_timer_s delay_timer;	/*  delay timer		*/
 | 
						|
	union {
 | 
						|
		u16        swp_vfid;/*  switch port VF id		*/
 | 
						|
	} event_arg;
 | 
						|
	struct bfa_fcs_auth_s  auth;	/*  authentication config	*/
 | 
						|
	struct bfa_wc_s        wc;	/*  wait counter for delete	*/
 | 
						|
	struct bfa_vf_stats_s  stats; 	/*  fabric/vf stats		*/
 | 
						|
	struct bfa_lps_s	*lps;	/*  lport login services	*/
 | 
						|
	u8	fabric_ip_addr[BFA_FCS_FABRIC_IPADDR_SZ];  /*  attached
 | 
						|
							    * fabric's ip addr
 | 
						|
							    */
 | 
						|
};
 | 
						|
 | 
						|
#define bfa_fcs_fabric_npiv_capable(__f)    (__f)->is_npiv
 | 
						|
#define bfa_fcs_fabric_is_switched(__f)			\
 | 
						|
	((__f)->fab_type == BFA_FCS_FABRIC_SWITCHED)
 | 
						|
 | 
						|
/**
 | 
						|
 *   The design calls for a single implementation of base fabric and vf.
 | 
						|
 */
 | 
						|
#define bfa_fcs_vf_t struct bfa_fcs_fabric_s
 | 
						|
 | 
						|
struct bfa_vf_event_s {
 | 
						|
	u32        undefined;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * bfa fcs vf public functions
 | 
						|
 */
 | 
						|
bfa_status_t bfa_fcs_vf_mode_enable(struct bfa_fcs_s *fcs, u16 vf_id);
 | 
						|
bfa_status_t bfa_fcs_vf_mode_disable(struct bfa_fcs_s *fcs);
 | 
						|
bfa_status_t bfa_fcs_vf_create(bfa_fcs_vf_t *vf, struct bfa_fcs_s *fcs,
 | 
						|
			       u16 vf_id, struct bfa_port_cfg_s *port_cfg,
 | 
						|
			       struct bfad_vf_s *vf_drv);
 | 
						|
bfa_status_t bfa_fcs_vf_delete(bfa_fcs_vf_t *vf);
 | 
						|
void bfa_fcs_vf_start(bfa_fcs_vf_t *vf);
 | 
						|
bfa_status_t bfa_fcs_vf_stop(bfa_fcs_vf_t *vf);
 | 
						|
void bfa_fcs_vf_list(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs);
 | 
						|
void bfa_fcs_vf_list_all(struct bfa_fcs_s *fcs, u16 *vf_ids, int *nvfs);
 | 
						|
void bfa_fcs_vf_get_attr(bfa_fcs_vf_t *vf, struct bfa_vf_attr_s *vf_attr);
 | 
						|
void bfa_fcs_vf_get_stats(bfa_fcs_vf_t *vf,
 | 
						|
			  struct bfa_vf_stats_s *vf_stats);
 | 
						|
void bfa_fcs_vf_clear_stats(bfa_fcs_vf_t *vf);
 | 
						|
void bfa_fcs_vf_get_ports(bfa_fcs_vf_t *vf, wwn_t vpwwn[], int *nports);
 | 
						|
bfa_fcs_vf_t *bfa_fcs_vf_lookup(struct bfa_fcs_s *fcs, u16 vf_id);
 | 
						|
struct bfad_vf_s *bfa_fcs_vf_get_drv_vf(bfa_fcs_vf_t *vf);
 | 
						|
 | 
						|
#endif /* __BFA_FCS_FABRIC_H__ */
 |