1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __BFA_FCS_H__
19#define __BFA_FCS_H__
20
21#include "bfa_cs.h"
22#include "bfa_defs.h"
23#include "bfa_defs_fcs.h"
24#include "bfa_modules.h"
25#include "bfa_fc.h"
26
27#define BFA_FCS_OS_STR_LEN 64
28
29
30
31
32
33enum bfa_lps_event {
34 BFA_LPS_SM_LOGIN = 1,
35 BFA_LPS_SM_LOGOUT = 2,
36 BFA_LPS_SM_FWRSP = 3,
37 BFA_LPS_SM_RESUME = 4,
38 BFA_LPS_SM_DELETE = 5,
39 BFA_LPS_SM_OFFLINE = 6,
40 BFA_LPS_SM_RX_CVL = 7,
41 BFA_LPS_SM_SET_N2N_PID = 8,
42};
43
44
45
46
47
48
49enum {
50 BFA_TRC_FCS_FCS = 1,
51 BFA_TRC_FCS_PORT = 2,
52 BFA_TRC_FCS_RPORT = 3,
53 BFA_TRC_FCS_FCPIM = 4,
54};
55
56
57struct bfa_fcs_s;
58
59#define __fcs_min_cfg(__fcs) ((__fcs)->min_cfg)
60
61#define BFA_FCS_BRCD_SWITCH_OUI 0x051e
62#define N2N_LOCAL_PID 0x010000
63#define N2N_REMOTE_PID 0x020000
64#define BFA_FCS_RETRY_TIMEOUT 2000
65#define BFA_FCS_MAX_NS_RETRIES 5
66#define BFA_FCS_PID_IS_WKA(pid) ((bfa_ntoh3b(pid) > 0xFFF000) ? 1 : 0)
67#define BFA_FCS_MAX_RPORT_LOGINS 1024
68
69struct bfa_fcs_lport_ns_s {
70 bfa_sm_t sm;
71 struct bfa_timer_s timer;
72 struct bfa_fcs_lport_s *port;
73 struct bfa_fcxp_s *fcxp;
74 struct bfa_fcxp_wqe_s fcxp_wqe;
75 u8 num_rnnid_retries;
76 u8 num_rsnn_nn_retries;
77};
78
79
80struct bfa_fcs_lport_scn_s {
81 bfa_sm_t sm;
82 struct bfa_timer_s timer;
83 struct bfa_fcs_lport_s *port;
84 struct bfa_fcxp_s *fcxp;
85 struct bfa_fcxp_wqe_s fcxp_wqe;
86};
87
88
89struct bfa_fcs_lport_fdmi_s {
90 bfa_sm_t sm;
91 struct bfa_timer_s timer;
92 struct bfa_fcs_lport_ms_s *ms;
93 struct bfa_fcxp_s *fcxp;
94 struct bfa_fcxp_wqe_s fcxp_wqe;
95 u8 retry_cnt;
96 u8 rsvd[3];
97};
98
99
100struct bfa_fcs_lport_ms_s {
101 bfa_sm_t sm;
102 struct bfa_timer_s timer;
103 struct bfa_fcs_lport_s *port;
104 struct bfa_fcxp_s *fcxp;
105 struct bfa_fcxp_wqe_s fcxp_wqe;
106 struct bfa_fcs_lport_fdmi_s fdmi;
107 u8 retry_cnt;
108 u8 rsvd[3];
109};
110
111
112struct bfa_fcs_lport_fab_s {
113 struct bfa_fcs_lport_ns_s ns;
114 struct bfa_fcs_lport_scn_s scn;
115 struct bfa_fcs_lport_ms_s ms;
116};
117
118#define MAX_ALPA_COUNT 127
119
120struct bfa_fcs_lport_loop_s {
121 u8 num_alpa;
122 u8 alpabm_valid;
123 u8 alpa_pos_map[MAX_ALPA_COUNT];
124 struct bfa_fcs_lport_s *port;
125};
126
127struct bfa_fcs_lport_n2n_s {
128 u32 rsvd;
129 __be16 reply_oxid;
130
131 wwn_t rem_port_wwn;
132};
133
134
135union bfa_fcs_lport_topo_u {
136 struct bfa_fcs_lport_fab_s pfab;
137 struct bfa_fcs_lport_loop_s ploop;
138 struct bfa_fcs_lport_n2n_s pn2n;
139};
140
141
142struct bfa_fcs_lport_s {
143 struct list_head qe;
144 bfa_sm_t sm;
145 struct bfa_fcs_fabric_s *fabric;
146 struct bfa_lport_cfg_s port_cfg;
147 struct bfa_timer_s link_timer;
148 u32 pid:24;
149 u8 lp_tag;
150 u16 num_rports;
151 struct list_head rport_q;
152 struct bfa_fcs_s *fcs;
153 union bfa_fcs_lport_topo_u port_topo;
154 struct bfad_port_s *bfad_port;
155 struct bfa_fcs_vport_s *vport;
156 struct bfa_fcxp_s *fcxp;
157 struct bfa_fcxp_wqe_s fcxp_wqe;
158 struct bfa_lport_stats_s stats;
159 struct bfa_wc_s wc;
160};
161#define BFA_FCS_GET_HAL_FROM_PORT(port) (port->fcs->bfa)
162#define BFA_FCS_GET_NS_FROM_PORT(port) (&port->port_topo.pfab.ns)
163#define BFA_FCS_GET_SCN_FROM_PORT(port) (&port->port_topo.pfab.scn)
164#define BFA_FCS_GET_MS_FROM_PORT(port) (&port->port_topo.pfab.ms)
165#define BFA_FCS_GET_FDMI_FROM_PORT(port) (&port->port_topo.pfab.ms.fdmi)
166#define BFA_FCS_VPORT_IS_INITIATOR_MODE(port) \
167 (port->port_cfg.roles & BFA_LPORT_ROLE_FCP_IM)
168
169
170
171
172struct bfad_vf_s;
173
174enum bfa_fcs_fabric_type {
175 BFA_FCS_FABRIC_UNKNOWN = 0,
176 BFA_FCS_FABRIC_SWITCHED = 1,
177 BFA_FCS_FABRIC_N2N = 2,
178 BFA_FCS_FABRIC_LOOP = 3,
179};
180
181
182struct bfa_fcs_fabric_s {
183 struct list_head qe;
184 bfa_sm_t sm;
185 struct bfa_fcs_s *fcs;
186 struct bfa_fcs_lport_s bport;
187 enum bfa_fcs_fabric_type fab_type;
188 enum bfa_port_type oper_type;
189 u8 is_vf;
190 u8 is_npiv;
191 u8 is_auth;
192 u16 bb_credit;
193 u16 vf_id;
194 u16 num_vports;
195 u16 rsvd;
196 struct list_head vport_q;
197 struct list_head vf_q;
198 struct bfad_vf_s *vf_drv;
199 struct bfa_timer_s link_timer;
200 wwn_t fabric_name;
201 bfa_boolean_t auth_reqd;
202 struct bfa_timer_s delay_timer;
203 union {
204 u16 swp_vfid;
205 } event_arg;
206 struct bfa_wc_s wc;
207 struct bfa_vf_stats_s stats;
208 struct bfa_lps_s *lps;
209 u8 fabric_ip_addr[BFA_FCS_FABRIC_IPADDR_SZ];
210
211 struct bfa_wc_s stop_wc;
212};
213
214#define bfa_fcs_fabric_npiv_capable(__f) ((__f)->is_npiv)
215#define bfa_fcs_fabric_is_switched(__f) \
216 ((__f)->fab_type == BFA_FCS_FABRIC_SWITCHED)
217
218
219
220
221#define bfa_fcs_vf_t struct bfa_fcs_fabric_s
222
223struct bfa_vf_event_s {
224 u32 undefined;
225};
226
227struct bfa_fcs_s;
228struct bfa_fcs_fabric_s;
229
230
231
232
233
234#define BFA_FCS_MAX_RPORTS_SUPP 256
235
236#define bfa_fcs_lport_t struct bfa_fcs_lport_s
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253#define BFA_FCS_PORT_SYMBNAME_SEPARATOR " | "
254
255#define BFA_FCS_PORT_SYMBNAME_MODEL_SZ 12
256#define BFA_FCS_PORT_SYMBNAME_VERSION_SZ 10
257#define BFA_FCS_PORT_SYMBNAME_MACHINENAME_SZ 30
258#define BFA_FCS_PORT_SYMBNAME_OSINFO_SZ 48
259#define BFA_FCS_PORT_SYMBNAME_OSPATCH_SZ 16
260
261
262#define BFA_FCS_PORT_DEF_BB_SCN 3
263
264
265
266
267#define bfa_fcs_lport_get_fcid(_lport) ((_lport)->pid)
268#define bfa_fcs_lport_get_pwwn(_lport) ((_lport)->port_cfg.pwwn)
269#define bfa_fcs_lport_get_nwwn(_lport) ((_lport)->port_cfg.nwwn)
270#define bfa_fcs_lport_get_psym_name(_lport) ((_lport)->port_cfg.sym_name)
271#define bfa_fcs_lport_get_nsym_name(_lport) ((_lport)->port_cfg.node_sym_name)
272#define bfa_fcs_lport_is_initiator(_lport) \
273 ((_lport)->port_cfg.roles & BFA_LPORT_ROLE_FCP_IM)
274#define bfa_fcs_lport_get_nrports(_lport) \
275 ((_lport) ? (_lport)->num_rports : 0)
276
277static inline struct bfad_port_s *
278bfa_fcs_lport_get_drvport(struct bfa_fcs_lport_s *port)
279{
280 return port->bfad_port;
281}
282
283#define bfa_fcs_lport_get_opertype(_lport) ((_lport)->fabric->oper_type)
284#define bfa_fcs_lport_get_fabric_name(_lport) ((_lport)->fabric->fabric_name)
285#define bfa_fcs_lport_get_fabric_ipaddr(_lport) \
286 ((_lport)->fabric->fabric_ip_addr)
287
288
289
290
291
292bfa_boolean_t bfa_fcs_lport_is_online(struct bfa_fcs_lport_s *port);
293struct bfa_fcs_lport_s *bfa_fcs_get_base_port(struct bfa_fcs_s *fcs);
294void bfa_fcs_lport_get_rport_quals(struct bfa_fcs_lport_s *port,
295 struct bfa_rport_qualifier_s rport[], int *nrports);
296wwn_t bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn,
297 int index, int nrports, bfa_boolean_t bwwn);
298
299struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
300 u16 vf_id, wwn_t lpwwn);
301
302void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
303 struct bfa_lport_info_s *port_info);
304void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
305 struct bfa_lport_attr_s *port_attr);
306void bfa_fcs_lport_get_stats(struct bfa_fcs_lport_s *fcs_port,
307 struct bfa_lport_stats_s *port_stats);
308void bfa_fcs_lport_clear_stats(struct bfa_fcs_lport_s *fcs_port);
309enum bfa_port_speed bfa_fcs_lport_get_rport_max_speed(
310 struct bfa_fcs_lport_s *port);
311
312
313void bfa_fcs_lport_ms_init(struct bfa_fcs_lport_s *port);
314void bfa_fcs_lport_ms_offline(struct bfa_fcs_lport_s *port);
315void bfa_fcs_lport_ms_online(struct bfa_fcs_lport_s *port);
316void bfa_fcs_lport_ms_fabric_rscn(struct bfa_fcs_lport_s *port);
317
318
319void bfa_fcs_lport_fdmi_init(struct bfa_fcs_lport_ms_s *ms);
320void bfa_fcs_lport_fdmi_offline(struct bfa_fcs_lport_ms_s *ms);
321void bfa_fcs_lport_fdmi_online(struct bfa_fcs_lport_ms_s *ms);
322void bfa_fcs_lport_uf_recv(struct bfa_fcs_lport_s *lport, struct fchs_s *fchs,
323 u16 len);
324void bfa_fcs_lport_attach(struct bfa_fcs_lport_s *lport, struct bfa_fcs_s *fcs,
325 u16 vf_id, struct bfa_fcs_vport_s *vport);
326void bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,
327 struct bfa_lport_cfg_s *port_cfg);
328void bfa_fcs_lport_online(struct bfa_fcs_lport_s *port);
329void bfa_fcs_lport_offline(struct bfa_fcs_lport_s *port);
330void bfa_fcs_lport_delete(struct bfa_fcs_lport_s *port);
331void bfa_fcs_lport_stop(struct bfa_fcs_lport_s *port);
332struct bfa_fcs_rport_s *bfa_fcs_lport_get_rport_by_pid(
333 struct bfa_fcs_lport_s *port, u32 pid);
334struct bfa_fcs_rport_s *bfa_fcs_lport_get_rport_by_old_pid(
335 struct bfa_fcs_lport_s *port, u32 pid);
336struct bfa_fcs_rport_s *bfa_fcs_lport_get_rport_by_pwwn(
337 struct bfa_fcs_lport_s *port, wwn_t pwwn);
338struct bfa_fcs_rport_s *bfa_fcs_lport_get_rport_by_nwwn(
339 struct bfa_fcs_lport_s *port, wwn_t nwwn);
340struct bfa_fcs_rport_s *bfa_fcs_lport_get_rport_by_qualifier(
341 struct bfa_fcs_lport_s *port, wwn_t pwwn, u32 pid);
342void bfa_fcs_lport_add_rport(struct bfa_fcs_lport_s *port,
343 struct bfa_fcs_rport_s *rport);
344void bfa_fcs_lport_del_rport(struct bfa_fcs_lport_s *port,
345 struct bfa_fcs_rport_s *rport);
346void bfa_fcs_lport_ns_init(struct bfa_fcs_lport_s *vport);
347void bfa_fcs_lport_ns_offline(struct bfa_fcs_lport_s *vport);
348void bfa_fcs_lport_ns_online(struct bfa_fcs_lport_s *vport);
349void bfa_fcs_lport_ns_query(struct bfa_fcs_lport_s *port);
350void bfa_fcs_lport_ns_util_send_rspn_id(void *cbarg,
351 struct bfa_fcxp_s *fcxp_alloced);
352void bfa_fcs_lport_scn_init(struct bfa_fcs_lport_s *vport);
353void bfa_fcs_lport_scn_offline(struct bfa_fcs_lport_s *vport);
354void bfa_fcs_lport_fab_scn_online(struct bfa_fcs_lport_s *vport);
355void bfa_fcs_lport_scn_process_rscn(struct bfa_fcs_lport_s *port,
356 struct fchs_s *rx_frame, u32 len);
357void bfa_fcs_lport_lip_scn_online(bfa_fcs_lport_t *port);
358
359struct bfa_fcs_vport_s {
360 struct list_head qe;
361 bfa_sm_t sm;
362 bfa_fcs_lport_t lport;
363 struct bfa_timer_s timer;
364 struct bfad_vport_s *vport_drv;
365 struct bfa_vport_stats_s vport_stats;
366 struct bfa_lps_s *lps;
367 int fdisc_retries;
368};
369
370#define bfa_fcs_vport_get_port(vport) \
371 ((struct bfa_fcs_lport_s *)(&vport->port))
372
373
374
375
376bfa_status_t bfa_fcs_vport_create(struct bfa_fcs_vport_s *vport,
377 struct bfa_fcs_s *fcs, u16 vf_id,
378 struct bfa_lport_cfg_s *port_cfg,
379 struct bfad_vport_s *vport_drv);
380bfa_status_t bfa_fcs_pbc_vport_create(struct bfa_fcs_vport_s *vport,
381 struct bfa_fcs_s *fcs, u16 vf_id,
382 struct bfa_lport_cfg_s *port_cfg,
383 struct bfad_vport_s *vport_drv);
384bfa_boolean_t bfa_fcs_is_pbc_vport(struct bfa_fcs_vport_s *vport);
385bfa_status_t bfa_fcs_vport_delete(struct bfa_fcs_vport_s *vport);
386bfa_status_t bfa_fcs_vport_start(struct bfa_fcs_vport_s *vport);
387bfa_status_t bfa_fcs_vport_stop(struct bfa_fcs_vport_s *vport);
388void bfa_fcs_vport_get_attr(struct bfa_fcs_vport_s *vport,
389 struct bfa_vport_attr_s *vport_attr);
390struct bfa_fcs_vport_s *bfa_fcs_vport_lookup(struct bfa_fcs_s *fcs,
391 u16 vf_id, wwn_t vpwwn);
392void bfa_fcs_vport_cleanup(struct bfa_fcs_vport_s *vport);
393void bfa_fcs_vport_online(struct bfa_fcs_vport_s *vport);
394void bfa_fcs_vport_offline(struct bfa_fcs_vport_s *vport);
395void bfa_fcs_vport_delete_comp(struct bfa_fcs_vport_s *vport);
396void bfa_fcs_vport_fcs_delete(struct bfa_fcs_vport_s *vport);
397void bfa_fcs_vport_fcs_stop(struct bfa_fcs_vport_s *vport);
398void bfa_fcs_vport_stop_comp(struct bfa_fcs_vport_s *vport);
399
400#define BFA_FCS_RPORT_DEF_DEL_TIMEOUT 90
401#define BFA_FCS_RPORT_MAX_RETRIES (5)
402
403
404
405
406struct bfad_rport_s;
407
408struct bfa_fcs_itnim_s;
409struct bfa_fcs_tin_s;
410struct bfa_fcs_iprp_s;
411
412
413struct bfa_fcs_rpf_s {
414 bfa_sm_t sm;
415 struct bfa_fcs_rport_s *rport;
416 struct bfa_timer_s timer;
417 struct bfa_fcxp_s *fcxp;
418 struct bfa_fcxp_wqe_s fcxp_wqe;
419 int rpsc_retries;
420 enum bfa_port_speed rpsc_speed;
421
422 enum bfa_port_speed assigned_speed;
423
424
425
426
427};
428
429struct bfa_fcs_rport_s {
430 struct list_head qe;
431 struct bfa_fcs_lport_s *port;
432 struct bfa_fcs_s *fcs;
433 struct bfad_rport_s *rp_drv;
434 u32 pid;
435 u32 old_pid;
436 u16 maxfrsize;
437 __be16 reply_oxid;
438 enum fc_cos fc_cos;
439 bfa_boolean_t cisc;
440 bfa_boolean_t prlo;
441 bfa_boolean_t plogi_pending;
442 wwn_t pwwn;
443 wwn_t nwwn;
444 struct bfa_rport_symname_s psym_name;
445 bfa_sm_t sm;
446 struct bfa_timer_s timer;
447 struct bfa_fcs_itnim_s *itnim;
448 struct bfa_fcs_tin_s *tin;
449 struct bfa_fcs_iprp_s *iprp;
450 struct bfa_rport_s *bfa_rport;
451 struct bfa_fcxp_s *fcxp;
452 int plogi_retries;
453 int ns_retries;
454 struct bfa_fcxp_wqe_s fcxp_wqe;
455 struct bfa_rport_stats_s stats;
456 enum bfa_rport_function scsi_function;
457 struct bfa_fcs_rpf_s rpf;
458 bfa_boolean_t scn_online;
459};
460
461static inline struct bfa_rport_s *
462bfa_fcs_rport_get_halrport(struct bfa_fcs_rport_s *rport)
463{
464 return rport->bfa_rport;
465}
466
467
468
469
470void bfa_fcs_rport_get_attr(struct bfa_fcs_rport_s *rport,
471 struct bfa_rport_attr_s *attr);
472struct bfa_fcs_rport_s *bfa_fcs_rport_lookup(struct bfa_fcs_lport_s *port,
473 wwn_t rpwwn);
474struct bfa_fcs_rport_s *bfa_fcs_rport_lookup_by_nwwn(
475 struct bfa_fcs_lport_s *port, wwn_t rnwwn);
476void bfa_fcs_rport_set_del_timeout(u8 rport_tmo);
477void bfa_fcs_rport_set_max_logins(u32 max_logins);
478void bfa_fcs_rport_uf_recv(struct bfa_fcs_rport_s *rport,
479 struct fchs_s *fchs, u16 len);
480void bfa_fcs_rport_scn(struct bfa_fcs_rport_s *rport);
481
482struct bfa_fcs_rport_s *bfa_fcs_rport_create(struct bfa_fcs_lport_s *port,
483 u32 pid);
484void bfa_fcs_rport_start(struct bfa_fcs_lport_s *port, struct fchs_s *rx_fchs,
485 struct fc_logi_s *plogi_rsp);
486void bfa_fcs_rport_plogi_create(struct bfa_fcs_lport_s *port,
487 struct fchs_s *rx_fchs,
488 struct fc_logi_s *plogi);
489void bfa_fcs_rport_plogi(struct bfa_fcs_rport_s *rport, struct fchs_s *fchs,
490 struct fc_logi_s *plogi);
491void bfa_fcs_rport_prlo(struct bfa_fcs_rport_s *rport, __be16 ox_id);
492
493void bfa_fcs_rport_itntm_ack(struct bfa_fcs_rport_s *rport);
494void bfa_fcs_rport_fcptm_offline_done(struct bfa_fcs_rport_s *rport);
495int bfa_fcs_rport_get_state(struct bfa_fcs_rport_s *rport);
496struct bfa_fcs_rport_s *bfa_fcs_rport_create_by_wwn(
497 struct bfa_fcs_lport_s *port, wwn_t wwn);
498void bfa_fcs_rpf_init(struct bfa_fcs_rport_s *rport);
499void bfa_fcs_rpf_rport_online(struct bfa_fcs_rport_s *rport);
500void bfa_fcs_rpf_rport_offline(struct bfa_fcs_rport_s *rport);
501
502
503
504
505struct bfad_itnim_s;
506
507struct bfa_fcs_itnim_s {
508 bfa_sm_t sm;
509 struct bfa_fcs_rport_s *rport;
510 struct bfad_itnim_s *itnim_drv;
511 struct bfa_fcs_s *fcs;
512 struct bfa_timer_s timer;
513 struct bfa_itnim_s *bfa_itnim;
514 u32 prli_retries;
515 bfa_boolean_t seq_rec;
516 bfa_boolean_t rec_support;
517 bfa_boolean_t conf_comp;
518 bfa_boolean_t task_retry_id;
519 struct bfa_fcxp_wqe_s fcxp_wqe;
520 struct bfa_fcxp_s *fcxp;
521 struct bfa_itnim_stats_s stats;
522};
523#define bfa_fcs_fcxp_alloc(__fcs, __req) \
524 bfa_fcxp_req_rsp_alloc(NULL, (__fcs)->bfa, 0, 0, \
525 NULL, NULL, NULL, NULL, __req)
526#define bfa_fcs_fcxp_alloc_wait(__bfa, __wqe, __alloc_cbfn, \
527 __alloc_cbarg, __req) \
528 bfa_fcxp_req_rsp_alloc_wait(__bfa, __wqe, __alloc_cbfn, \
529 __alloc_cbarg, NULL, 0, 0, NULL, NULL, NULL, NULL, __req)
530
531static inline struct bfad_port_s *
532bfa_fcs_itnim_get_drvport(struct bfa_fcs_itnim_s *itnim)
533{
534 return itnim->rport->port->bfad_port;
535}
536
537
538static inline struct bfa_fcs_lport_s *
539bfa_fcs_itnim_get_port(struct bfa_fcs_itnim_s *itnim)
540{
541 return itnim->rport->port;
542}
543
544
545static inline wwn_t
546bfa_fcs_itnim_get_nwwn(struct bfa_fcs_itnim_s *itnim)
547{
548 return itnim->rport->nwwn;
549}
550
551
552static inline wwn_t
553bfa_fcs_itnim_get_pwwn(struct bfa_fcs_itnim_s *itnim)
554{
555 return itnim->rport->pwwn;
556}
557
558
559static inline u32
560bfa_fcs_itnim_get_fcid(struct bfa_fcs_itnim_s *itnim)
561{
562 return itnim->rport->pid;
563}
564
565
566static inline u32
567bfa_fcs_itnim_get_maxfrsize(struct bfa_fcs_itnim_s *itnim)
568{
569 return itnim->rport->maxfrsize;
570}
571
572
573static inline enum fc_cos
574bfa_fcs_itnim_get_cos(struct bfa_fcs_itnim_s *itnim)
575{
576 return itnim->rport->fc_cos;
577}
578
579
580static inline struct bfad_itnim_s *
581bfa_fcs_itnim_get_drvitn(struct bfa_fcs_itnim_s *itnim)
582{
583 return itnim->itnim_drv;
584}
585
586
587static inline struct bfa_itnim_s *
588bfa_fcs_itnim_get_halitn(struct bfa_fcs_itnim_s *itnim)
589{
590 return itnim->bfa_itnim;
591}
592
593
594
595
596void bfa_fcs_itnim_get_attr(struct bfa_fcs_itnim_s *itnim,
597 struct bfa_itnim_attr_s *attr);
598void bfa_fcs_itnim_get_stats(struct bfa_fcs_itnim_s *itnim,
599 struct bfa_itnim_stats_s *stats);
600struct bfa_fcs_itnim_s *bfa_fcs_itnim_lookup(struct bfa_fcs_lport_s *port,
601 wwn_t rpwwn);
602bfa_status_t bfa_fcs_itnim_attr_get(struct bfa_fcs_lport_s *port, wwn_t rpwwn,
603 struct bfa_itnim_attr_s *attr);
604bfa_status_t bfa_fcs_itnim_stats_get(struct bfa_fcs_lport_s *port, wwn_t rpwwn,
605 struct bfa_itnim_stats_s *stats);
606bfa_status_t bfa_fcs_itnim_stats_clear(struct bfa_fcs_lport_s *port,
607 wwn_t rpwwn);
608struct bfa_fcs_itnim_s *bfa_fcs_itnim_create(struct bfa_fcs_rport_s *rport);
609void bfa_fcs_itnim_delete(struct bfa_fcs_itnim_s *itnim);
610void bfa_fcs_itnim_rport_offline(struct bfa_fcs_itnim_s *itnim);
611void bfa_fcs_itnim_brp_online(struct bfa_fcs_itnim_s *itnim);
612bfa_status_t bfa_fcs_itnim_get_online_state(struct bfa_fcs_itnim_s *itnim);
613void bfa_fcs_itnim_is_initiator(struct bfa_fcs_itnim_s *itnim);
614void bfa_fcs_fcpim_uf_recv(struct bfa_fcs_itnim_s *itnim,
615 struct fchs_s *fchs, u16 len);
616
617#define BFA_FCS_FDMI_SUPP_SPEEDS_4G (FDMI_TRANS_SPEED_1G | \
618 FDMI_TRANS_SPEED_2G | \
619 FDMI_TRANS_SPEED_4G)
620
621#define BFA_FCS_FDMI_SUPP_SPEEDS_8G (FDMI_TRANS_SPEED_1G | \
622 FDMI_TRANS_SPEED_2G | \
623 FDMI_TRANS_SPEED_4G | \
624 FDMI_TRANS_SPEED_8G)
625
626#define BFA_FCS_FDMI_SUPP_SPEEDS_16G (FDMI_TRANS_SPEED_2G | \
627 FDMI_TRANS_SPEED_4G | \
628 FDMI_TRANS_SPEED_8G | \
629 FDMI_TRANS_SPEED_16G)
630
631#define BFA_FCS_FDMI_SUPP_SPEEDS_10G FDMI_TRANS_SPEED_10G
632
633
634
635
636
637
638struct bfa_fcs_fdmi_hba_attr_s {
639 wwn_t node_name;
640 u8 manufacturer[64];
641 u8 serial_num[64];
642 u8 model[16];
643 u8 model_desc[256];
644 u8 hw_version[8];
645 u8 driver_version[BFA_VERSION_LEN];
646 u8 option_rom_ver[BFA_VERSION_LEN];
647 u8 fw_version[BFA_VERSION_LEN];
648 u8 os_name[256];
649 __be32 max_ct_pyld;
650};
651
652
653
654
655struct bfa_fcs_fdmi_port_attr_s {
656 u8 supp_fc4_types[32];
657 __be32 supp_speed;
658 __be32 curr_speed;
659 __be32 max_frm_size;
660 u8 os_device_name[256];
661 u8 host_name[256];
662};
663
664struct bfa_fcs_stats_s {
665 struct {
666 u32 untagged;
667 u32 tagged;
668 u32 vfid_unknown;
669 } uf;
670};
671
672struct bfa_fcs_driver_info_s {
673 u8 version[BFA_VERSION_LEN];
674 u8 host_machine_name[BFA_FCS_OS_STR_LEN];
675 u8 host_os_name[BFA_FCS_OS_STR_LEN];
676 u8 host_os_patch[BFA_FCS_OS_STR_LEN];
677 u8 os_device_name[BFA_FCS_OS_STR_LEN];
678};
679
680struct bfa_fcs_s {
681 struct bfa_s *bfa;
682 struct bfad_s *bfad;
683 struct bfa_trc_mod_s *trcmod;
684 bfa_boolean_t vf_enabled;
685 bfa_boolean_t fdmi_enabled;
686 bfa_boolean_t bbscn_enabled;
687 bfa_boolean_t bbscn_flogi_rjt;
688 bfa_boolean_t min_cfg;
689 u16 port_vfid;
690 struct bfa_fcs_driver_info_s driver_info;
691 struct bfa_fcs_fabric_s fabric;
692 struct bfa_fcs_stats_s stats;
693 struct bfa_wc_s wc;
694 int fcs_aen_seq;
695 u32 num_rport_logins;
696};
697
698
699
700
701
702
703
704
705enum bfa_fcs_fabric_event {
706 BFA_FCS_FABRIC_SM_CREATE = 1,
707 BFA_FCS_FABRIC_SM_DELETE = 2,
708 BFA_FCS_FABRIC_SM_LINK_DOWN = 3,
709 BFA_FCS_FABRIC_SM_LINK_UP = 4,
710 BFA_FCS_FABRIC_SM_CONT_OP = 5,
711 BFA_FCS_FABRIC_SM_RETRY_OP = 6,
712 BFA_FCS_FABRIC_SM_NO_FABRIC = 7,
713 BFA_FCS_FABRIC_SM_PERF_EVFP = 8,
714 BFA_FCS_FABRIC_SM_ISOLATE = 9,
715 BFA_FCS_FABRIC_SM_NO_TAGGING = 10,
716 BFA_FCS_FABRIC_SM_DELAYED = 11,
717 BFA_FCS_FABRIC_SM_AUTH_FAILED = 12,
718 BFA_FCS_FABRIC_SM_AUTH_SUCCESS = 13,
719 BFA_FCS_FABRIC_SM_DELCOMP = 14,
720 BFA_FCS_FABRIC_SM_LOOPBACK = 15,
721 BFA_FCS_FABRIC_SM_START = 16,
722 BFA_FCS_FABRIC_SM_STOP = 17,
723 BFA_FCS_FABRIC_SM_STOPCOMP = 18,
724 BFA_FCS_FABRIC_SM_LOGOCOMP = 19,
725};
726
727
728
729
730
731enum rport_event {
732 RPSM_EVENT_PLOGI_SEND = 1,
733 RPSM_EVENT_PLOGI_RCVD = 2,
734 RPSM_EVENT_PLOGI_COMP = 3,
735 RPSM_EVENT_LOGO_RCVD = 4,
736 RPSM_EVENT_LOGO_IMP = 5,
737 RPSM_EVENT_FCXP_SENT = 6,
738 RPSM_EVENT_DELETE = 7,
739 RPSM_EVENT_FAB_SCN = 8,
740 RPSM_EVENT_ACCEPTED = 9,
741 RPSM_EVENT_FAILED = 10,
742 RPSM_EVENT_TIMEOUT = 11,
743 RPSM_EVENT_HCB_ONLINE = 12,
744 RPSM_EVENT_HCB_OFFLINE = 13,
745 RPSM_EVENT_FC4_OFFLINE = 14,
746 RPSM_EVENT_ADDRESS_CHANGE = 15,
747 RPSM_EVENT_ADDRESS_DISC = 16,
748 RPSM_EVENT_PRLO_RCVD = 17,
749 RPSM_EVENT_PLOGI_RETRY = 18,
750 RPSM_EVENT_SCN_OFFLINE = 19,
751 RPSM_EVENT_SCN_ONLINE = 20,
752 RPSM_EVENT_FC4_FCS_ONLINE = 21,
753};
754
755
756
757
758enum bfa_fcs_itnim_event {
759 BFA_FCS_ITNIM_SM_FCS_ONLINE = 1,
760 BFA_FCS_ITNIM_SM_OFFLINE = 2,
761 BFA_FCS_ITNIM_SM_FRMSENT = 3,
762 BFA_FCS_ITNIM_SM_RSP_OK = 4,
763 BFA_FCS_ITNIM_SM_RSP_ERROR = 5,
764 BFA_FCS_ITNIM_SM_TIMEOUT = 6,
765 BFA_FCS_ITNIM_SM_HCB_OFFLINE = 7,
766 BFA_FCS_ITNIM_SM_HCB_ONLINE = 8,
767 BFA_FCS_ITNIM_SM_INITIATOR = 9,
768 BFA_FCS_ITNIM_SM_DELETE = 10,
769 BFA_FCS_ITNIM_SM_PRLO = 11,
770 BFA_FCS_ITNIM_SM_RSP_NOT_SUPP = 12,
771 BFA_FCS_ITNIM_SM_HAL_ONLINE = 13,
772};
773
774
775
776
777void bfa_fcs_attach(struct bfa_fcs_s *fcs, struct bfa_s *bfa,
778 struct bfad_s *bfad,
779 bfa_boolean_t min_cfg);
780void bfa_fcs_init(struct bfa_fcs_s *fcs);
781void bfa_fcs_pbc_vport_init(struct bfa_fcs_s *fcs);
782void bfa_fcs_update_cfg(struct bfa_fcs_s *fcs);
783void bfa_fcs_driver_info_init(struct bfa_fcs_s *fcs,
784 struct bfa_fcs_driver_info_s *driver_info);
785void bfa_fcs_exit(struct bfa_fcs_s *fcs);
786void bfa_fcs_stop(struct bfa_fcs_s *fcs);
787
788
789
790
791bfa_fcs_vf_t *bfa_fcs_vf_lookup(struct bfa_fcs_s *fcs, u16 vf_id);
792void bfa_fcs_vf_get_ports(bfa_fcs_vf_t *vf, wwn_t vpwwn[], int *nports);
793
794
795
796
797void bfa_fcs_fabric_attach(struct bfa_fcs_s *fcs);
798void bfa_fcs_fabric_modinit(struct bfa_fcs_s *fcs);
799void bfa_fcs_fabric_modexit(struct bfa_fcs_s *fcs);
800void bfa_fcs_fabric_link_up(struct bfa_fcs_fabric_s *fabric);
801void bfa_fcs_fabric_link_down(struct bfa_fcs_fabric_s *fabric);
802void bfa_fcs_fabric_addvport(struct bfa_fcs_fabric_s *fabric,
803 struct bfa_fcs_vport_s *vport);
804void bfa_fcs_fabric_delvport(struct bfa_fcs_fabric_s *fabric,
805 struct bfa_fcs_vport_s *vport);
806struct bfa_fcs_vport_s *bfa_fcs_fabric_vport_lookup(
807 struct bfa_fcs_fabric_s *fabric, wwn_t pwwn);
808void bfa_fcs_fabric_modstart(struct bfa_fcs_s *fcs);
809void bfa_fcs_fabric_uf_recv(struct bfa_fcs_fabric_s *fabric,
810 struct fchs_s *fchs, u16 len);
811void bfa_fcs_fabric_psymb_init(struct bfa_fcs_fabric_s *fabric);
812void bfa_fcs_fabric_nsymb_init(struct bfa_fcs_fabric_s *fabric);
813void bfa_fcs_fabric_set_fabric_name(struct bfa_fcs_fabric_s *fabric,
814 wwn_t fabric_name);
815u16 bfa_fcs_fabric_get_switch_oui(struct bfa_fcs_fabric_s *fabric);
816void bfa_fcs_uf_attach(struct bfa_fcs_s *fcs);
817void bfa_fcs_port_attach(struct bfa_fcs_s *fcs);
818void bfa_fcs_fabric_modstop(struct bfa_fcs_s *fcs);
819void bfa_fcs_fabric_sm_online(struct bfa_fcs_fabric_s *fabric,
820 enum bfa_fcs_fabric_event event);
821void bfa_fcs_fabric_sm_loopback(struct bfa_fcs_fabric_s *fabric,
822 enum bfa_fcs_fabric_event event);
823void bfa_fcs_fabric_sm_auth_failed(struct bfa_fcs_fabric_s *fabric,
824 enum bfa_fcs_fabric_event event);
825
826
827
828
829
830
831
832
833
834struct bfad_port_s;
835struct bfad_vf_s;
836struct bfad_vport_s;
837struct bfad_rport_s;
838
839
840
841
842struct bfad_port_s *bfa_fcb_lport_new(struct bfad_s *bfad,
843 struct bfa_fcs_lport_s *port,
844 enum bfa_lport_role roles,
845 struct bfad_vf_s *vf_drv,
846 struct bfad_vport_s *vp_drv);
847
848
849
850
851void bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s);
852
853
854
855
856bfa_status_t bfa_fcb_rport_alloc(struct bfad_s *bfad,
857 struct bfa_fcs_rport_s **rport,
858 struct bfad_rport_s **rport_drv);
859
860
861
862
863void bfa_fcb_itnim_alloc(struct bfad_s *bfad, struct bfa_fcs_itnim_s **itnim,
864 struct bfad_itnim_s **itnim_drv);
865void bfa_fcb_itnim_free(struct bfad_s *bfad,
866 struct bfad_itnim_s *itnim_drv);
867void bfa_fcb_itnim_online(struct bfad_itnim_s *itnim_drv);
868void bfa_fcb_itnim_offline(struct bfad_itnim_s *itnim_drv);
869
870#endif
871