6d315ffb1e99512d55982e26ac5252ff7cf18faa
[safe/jmp/linux-2.6] / drivers / scsi / bfa / bfa_port_priv.h
1 /*
2  * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
3  * All rights reserved
4  * www.brocade.com
5  *
6  * Linux driver for Brocade Fibre Channel Host Bus Adapter.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License (GPL) Version 2 as
10  * published by the Free Software Foundation
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  */
17
18 #ifndef __BFA_PORT_PRIV_H__
19 #define __BFA_PORT_PRIV_H__
20
21 #include <defs/bfa_defs_pport.h>
22 #include <bfi/bfi_pport.h>
23 #include "bfa_intr_priv.h"
24
25 /**
26  * Link notification data structure
27  */
28 struct bfa_fcport_ln_s {
29         struct bfa_fcport_s     *fcport;
30         bfa_sm_t                sm;
31         struct bfa_cb_qe_s      ln_qe;  /*  BFA callback queue elem for ln */
32         enum bfa_pport_linkstate ln_event; /*  ln event for callback */
33 };
34
35 /**
36  * BFA FC port data structure
37  */
38 struct bfa_fcport_s {
39         struct bfa_s            *bfa;   /*  parent BFA instance */
40         bfa_sm_t                sm;     /*  port state machine */
41         wwn_t                   nwwn;   /*  node wwn of physical port */
42         wwn_t                   pwwn;   /*  port wwn of physical oprt */
43         enum bfa_pport_speed speed_sup;
44                                         /*  supported speeds */
45         enum bfa_pport_speed speed;     /*  current speed */
46         enum bfa_pport_topology topology;       /*  current topology */
47         u8                      myalpa; /*  my ALPA in LOOP topology */
48         u8                      rsvd[3];
49         struct bfa_pport_cfg_s  cfg;    /*  current port configuration */
50         struct bfa_qos_attr_s  qos_attr;   /* QoS Attributes */
51         struct bfa_qos_vc_attr_s qos_vc_attr;  /*  VC info from ELP */
52         struct bfa_reqq_wait_s  reqq_wait;
53                                         /*  to wait for room in reqq */
54         struct bfa_reqq_wait_s  svcreq_wait;
55                                         /*  to wait for room in reqq */
56         struct bfa_reqq_wait_s  stats_reqq_wait;
57                                         /*  to wait for room in reqq (stats) */
58         void                    *event_cbarg;
59         void                    (*event_cbfn) (void *cbarg,
60                                                 bfa_pport_event_t event);
61         union {
62                 union bfi_pport_i2h_msg_u i2hmsg;
63         } event_arg;
64         void                    *bfad;  /*  BFA driver handle */
65         struct bfa_fcport_ln_s   ln; /* Link Notification */
66         struct bfa_cb_qe_s              hcb_qe; /*  BFA callback queue elem */
67         u32             msgtag; /*  fimrware msg tag for reply */
68         u8                      *stats_kva;
69         u64             stats_pa;
70         union bfa_pport_stats_u *stats; /*  pport stats */
71         u32             mypid:24;
72         u32             rsvd_b:8;
73         struct bfa_timer_s      timer;  /*  timer */
74         union bfa_pport_stats_u         *stats_ret;
75                                         /*  driver stats location */
76         bfa_status_t            stats_status;
77                                         /*  stats/statsclr status */
78         bfa_boolean_t           stats_busy;
79                                         /*  outstanding stats/statsclr */
80         bfa_boolean_t           stats_qfull;
81         bfa_boolean_t           diag_busy;
82                                         /*  diag busy status */
83         bfa_boolean_t           beacon;
84                                         /*  port beacon status */
85         bfa_boolean_t           link_e2e_beacon;
86                                         /*  link beacon status */
87         bfa_cb_pport_t          stats_cbfn;
88                                         /*  driver callback function */
89         void                    *stats_cbarg;
90                                         /* *!< user callback arg */
91         /* FCport stats */
92         u8         *fcport_stats_kva;
93         u64        fcport_stats_pa;
94         union bfa_fcport_stats_u *fcport_stats;
95         union bfa_fcport_stats_u *fcport_stats_ret;
96 };
97
98 #define BFA_FCPORT_MOD(__bfa)   (&(__bfa)->modules.fcport)
99
100 /*
101  * public functions
102  */
103 void    bfa_fcport_isr(struct bfa_s *bfa, struct bfi_msg_s *msg);
104 #endif /* __BFA_PORT_PRIV_H__ */