bfa_port_priv.h 3.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * 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_PORT_PRIV_H__
#define __BFA_PORT_PRIV_H__

#include <defs/bfa_defs_pport.h>
#include <bfi/bfi_pport.h>
#include "bfa_intr_priv.h"

25 26 27
/**
 * Link notification data structure
 */
28 29
struct bfa_fcport_ln_s {
	struct bfa_fcport_s     *fcport;
30 31 32 33 34
	bfa_sm_t                sm;
	struct bfa_cb_qe_s      ln_qe;  /*  BFA callback queue elem for ln */
	enum bfa_pport_linkstate ln_event; /*  ln event for callback */
};

35
/**
36
 * BFA FC port data structure
37
 */
38
struct bfa_fcport_s {
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
	struct bfa_s 		*bfa;	/*  parent BFA instance */
	bfa_sm_t		sm;	/*  port state machine */
	wwn_t			nwwn;	/*  node wwn of physical port */
	wwn_t			pwwn;	/*  port wwn of physical oprt */
	enum bfa_pport_speed speed_sup;
					/*  supported speeds */
	enum bfa_pport_speed speed;	/*  current speed */
	enum bfa_pport_topology topology;	/*  current topology */
	u8			myalpa;	/*  my ALPA in LOOP topology */
	u8			rsvd[3];
	struct bfa_pport_cfg_s	cfg;	/*  current port configuration */
	struct bfa_qos_attr_s  qos_attr;   /* QoS Attributes */
	struct bfa_qos_vc_attr_s qos_vc_attr;  /*  VC info from ELP */
	struct bfa_reqq_wait_s	reqq_wait;
					/*  to wait for room in reqq */
	struct bfa_reqq_wait_s	svcreq_wait;
					/*  to wait for room in reqq */
	struct bfa_reqq_wait_s	stats_reqq_wait;
					/*  to wait for room in reqq (stats) */
	void			*event_cbarg;
	void			(*event_cbfn) (void *cbarg,
						bfa_pport_event_t event);
	union {
		union bfi_pport_i2h_msg_u i2hmsg;
	} event_arg;
	void			*bfad;	/*  BFA driver handle */
65
	struct bfa_fcport_ln_s   ln; /* Link Notification */
66 67 68 69 70
	struct bfa_cb_qe_s		hcb_qe;	/*  BFA callback queue elem */
	u32		msgtag;	/*  fimrware msg tag for reply */
	u8			*stats_kva;
	u64		stats_pa;
	union bfa_pport_stats_u *stats;	/*  pport stats */
71 72
	u32		mypid:24;
	u32		rsvd_b:8;
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
	struct bfa_timer_s 	timer;	/*  timer */
	union bfa_pport_stats_u 	*stats_ret;
					/*  driver stats location */
	bfa_status_t		stats_status;
					/*  stats/statsclr status */
	bfa_boolean_t   	stats_busy;
					/*  outstanding stats/statsclr */
	bfa_boolean_t   	stats_qfull;
	bfa_boolean_t   	diag_busy;
					/*  diag busy status */
	bfa_boolean_t   	beacon;
					/*  port beacon status */
	bfa_boolean_t   	link_e2e_beacon;
					/*  link beacon status */
	bfa_cb_pport_t		stats_cbfn;
					/*  driver callback function */
	void			*stats_cbarg;
					/* *!< user callback arg */
91 92 93 94 95
	/* FCport stats */
	u8         *fcport_stats_kva;
	u64        fcport_stats_pa;
	union bfa_fcport_stats_u *fcport_stats;
	union bfa_fcport_stats_u *fcport_stats_ret;
96 97
};

98
#define BFA_FCPORT_MOD(__bfa)	(&(__bfa)->modules.fcport)
99 100 101 102

/*
 * public functions
 */
103
void	bfa_fcport_isr(struct bfa_s *bfa, struct bfi_msg_s *msg);
104
#endif /* __BFA_PORT_PRIV_H__ */