- patches.suse/slab-handle-memoryless-nodes-v2a.patch: Refresh.
[linux-flexiantxendom0-3.2.10.git] / drivers / scsi / bfa / include / fcs / bfa_fcs_rport.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_FCS_RPORT_H__
19 #define __BFA_FCS_RPORT_H__
20
21 #include <defs/bfa_defs_status.h>
22 #include <cs/bfa_q.h>
23 #include <fcs/bfa_fcs.h>
24 #include <defs/bfa_defs_rport.h>
25
26 #define BFA_FCS_RPORT_DEF_DEL_TIMEOUT   90      /* in secs */
27 /*
28  * forward declarations
29  */
30 struct bfad_rport_s;
31
32 struct bfa_fcs_itnim_s;
33 struct bfa_fcs_tin_s;
34 struct bfa_fcs_iprp_s;
35
36 /* Rport Features (RPF) */
37 struct bfa_fcs_rpf_s {
38         bfa_sm_t               sm;      /*  state machine */
39         struct bfa_fcs_rport_s *rport;  /*  parent rport */
40         struct bfa_timer_s      timer;  /*  general purpose timer */
41         struct bfa_fcxp_s       *fcxp;  /*  FCXP needed for discarding */
42         struct bfa_fcxp_wqe_s   fcxp_wqe;       /*  fcxp wait queue element */
43         int                     rpsc_retries;   /*  max RPSC retry attempts */
44         enum bfa_pport_speed    rpsc_speed;     /* Current Speed from RPSC.
45                                                  * O if RPSC fails */
46         enum bfa_pport_speed    assigned_speed; /* Speed assigned by the user.
47                                                  * will be used if RPSC is not
48                                                  * supported by the rport */
49 };
50
51 struct bfa_fcs_rport_s {
52         struct list_head         qe;    /*  used by port/vport */
53         struct bfa_fcs_port_s *port;    /*  parent FCS port */
54         struct bfa_fcs_s      *fcs;     /*  fcs instance */
55         struct bfad_rport_s   *rp_drv;  /*  driver peer instance */
56         u32        pid; /*  port ID of rport */
57         u16        maxfrsize;   /*  maximum frame size */
58         u16        reply_oxid;  /*  OX_ID of inbound requests */
59         enum fc_cos        fc_cos;      /*  FC classes of service supp */
60         bfa_boolean_t   cisc;   /*  CISC capable device */
61         wwn_t           pwwn;   /*  port wwn of rport */
62         wwn_t           nwwn;   /*  node wwn of rport */
63         struct bfa_rport_symname_s psym_name; /*  port symbolic name  */
64         bfa_sm_t        sm;             /*  state machine */
65         struct bfa_timer_s timer;       /*  general purpose timer */
66         struct bfa_fcs_itnim_s *itnim;  /*  ITN initiator mode role */
67         struct bfa_fcs_tin_s *tin;      /*  ITN initiator mode role */
68         struct bfa_fcs_iprp_s *iprp;    /*  IP/FC role */
69         struct bfa_rport_s *bfa_rport;  /*  BFA Rport */
70         struct bfa_fcxp_s *fcxp;        /*  FCXP needed for discarding */
71         int             plogi_retries;  /*  max plogi retry attempts */
72         int             ns_retries;     /*  max NS query retry attempts */
73         struct bfa_fcxp_wqe_s   fcxp_wqe; /*  fcxp wait queue element */
74         struct bfa_rport_stats_s stats; /*  rport stats */
75         enum bfa_rport_function scsi_function;  /*  Initiator/Target */
76         struct bfa_fcs_rpf_s rpf;       /* Rport features module */
77 };
78
79 static inline struct bfa_rport_s *
80 bfa_fcs_rport_get_halrport(struct bfa_fcs_rport_s *rport)
81 {
82         return rport->bfa_rport;
83 }
84
85 /**
86  * bfa fcs rport API functions
87  */
88 bfa_status_t bfa_fcs_rport_add(struct bfa_fcs_port_s *port, wwn_t *pwwn,
89                         struct bfa_fcs_rport_s *rport,
90                         struct bfad_rport_s *rport_drv);
91 bfa_status_t bfa_fcs_rport_remove(struct bfa_fcs_rport_s *rport);
92 void bfa_fcs_rport_get_attr(struct bfa_fcs_rport_s *rport,
93                         struct bfa_rport_attr_s *attr);
94 void bfa_fcs_rport_get_stats(struct bfa_fcs_rport_s *rport,
95                         struct bfa_rport_stats_s *stats);
96 void bfa_fcs_rport_clear_stats(struct bfa_fcs_rport_s *rport);
97 struct bfa_fcs_rport_s *bfa_fcs_rport_lookup(struct bfa_fcs_port_s *port,
98                         wwn_t rpwwn);
99 struct bfa_fcs_rport_s *bfa_fcs_rport_lookup_by_nwwn(
100                         struct bfa_fcs_port_s *port, wwn_t rnwwn);
101 void bfa_fcs_rport_set_del_timeout(u8 rport_tmo);
102 void bfa_fcs_rport_set_speed(struct bfa_fcs_rport_s *rport,
103                         enum bfa_pport_speed speed);
104 #endif /* __BFA_FCS_RPORT_H__ */