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__ */
|