Commit | Line | Data |
---|---|---|
7725ccfd JH |
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_DEFS_PPORT_H__ | |
19 | #define __BFA_DEFS_PPORT_H__ | |
20 | ||
21 | #include <bfa_os_inc.h> | |
22 | #include <protocol/fc.h> | |
23 | #include <defs/bfa_defs_types.h> | |
24 | #include <defs/bfa_defs_qos.h> | |
25 | #include <cna/pstats/phyport_defs.h> | |
26 | ||
27 | /* Modify char* port_stt[] in bfal_port.c if a new state was added */ | |
28 | enum bfa_pport_states { | |
29 | BFA_PPORT_ST_UNINIT = 1, | |
30 | BFA_PPORT_ST_ENABLING_QWAIT = 2, | |
31 | BFA_PPORT_ST_ENABLING = 3, | |
32 | BFA_PPORT_ST_LINKDOWN = 4, | |
33 | BFA_PPORT_ST_LINKUP = 5, | |
34 | BFA_PPORT_ST_DISABLING_QWAIT = 6, | |
35 | BFA_PPORT_ST_DISABLING = 7, | |
36 | BFA_PPORT_ST_DISABLED = 8, | |
37 | BFA_PPORT_ST_STOPPED = 9, | |
38 | BFA_PPORT_ST_IOCDOWN = 10, | |
39 | BFA_PPORT_ST_IOCDIS = 11, | |
40 | BFA_PPORT_ST_FWMISMATCH = 12, | |
41 | BFA_PPORT_ST_MAX_STATE, | |
42 | }; | |
43 | ||
44 | /** | |
45 | * Port speed settings. Each specific speed is a bit field. Use multiple | |
46 | * bits to specify speeds to be selected for auto-negotiation. | |
47 | */ | |
48 | enum bfa_pport_speed { | |
49 | BFA_PPORT_SPEED_UNKNOWN = 0, | |
50 | BFA_PPORT_SPEED_1GBPS = 1, | |
51 | BFA_PPORT_SPEED_2GBPS = 2, | |
52 | BFA_PPORT_SPEED_4GBPS = 4, | |
53 | BFA_PPORT_SPEED_8GBPS = 8, | |
54 | BFA_PPORT_SPEED_10GBPS = 10, | |
55 | BFA_PPORT_SPEED_AUTO = | |
56 | (BFA_PPORT_SPEED_1GBPS | BFA_PPORT_SPEED_2GBPS | | |
57 | BFA_PPORT_SPEED_4GBPS | BFA_PPORT_SPEED_8GBPS), | |
58 | }; | |
59 | ||
60 | /** | |
61 | * Port operational type (in sync with SNIA port type). | |
62 | */ | |
63 | enum bfa_pport_type { | |
af901ca1 | 64 | BFA_PPORT_TYPE_UNKNOWN = 1, /* port type is unknown */ |
7725ccfd JH |
65 | BFA_PPORT_TYPE_TRUNKED = 2, /* Trunked mode */ |
66 | BFA_PPORT_TYPE_NPORT = 5, /* P2P with switched fabric */ | |
67 | BFA_PPORT_TYPE_NLPORT = 6, /* public loop */ | |
68 | BFA_PPORT_TYPE_LPORT = 20, /* private loop */ | |
69 | BFA_PPORT_TYPE_P2P = 21, /* P2P with no switched fabric */ | |
70 | BFA_PPORT_TYPE_VPORT = 22, /* NPIV - virtual port */ | |
71 | }; | |
72 | ||
73 | /** | |
74 | * Port topology setting. A port's topology and fabric login status | |
75 | * determine its operational type. | |
76 | */ | |
77 | enum bfa_pport_topology { | |
78 | BFA_PPORT_TOPOLOGY_NONE = 0, /* No valid topology */ | |
79 | BFA_PPORT_TOPOLOGY_P2P = 1, /* P2P only */ | |
80 | BFA_PPORT_TOPOLOGY_LOOP = 2, /* LOOP topology */ | |
81 | BFA_PPORT_TOPOLOGY_AUTO = 3, /* auto topology selection */ | |
82 | }; | |
83 | ||
84 | /** | |
85 | * Physical port loopback types. | |
86 | */ | |
87 | enum bfa_pport_opmode { | |
88 | BFA_PPORT_OPMODE_NORMAL = 0x00, /* normal non-loopback mode */ | |
89 | BFA_PPORT_OPMODE_LB_INT = 0x01, /* internal loop back */ | |
90 | BFA_PPORT_OPMODE_LB_SLW = 0x02, /* serial link wrapback (serdes) */ | |
91 | BFA_PPORT_OPMODE_LB_EXT = 0x04, /* external loop back (serdes) */ | |
92 | BFA_PPORT_OPMODE_LB_CBL = 0x08, /* cabled loop back */ | |
93 | BFA_PPORT_OPMODE_LB_NLINT = 0x20, /* NL_Port internal loopback */ | |
94 | }; | |
95 | ||
96 | #define BFA_PPORT_OPMODE_LB_HARD(_mode) \ | |
97 | ((_mode == BFA_PPORT_OPMODE_LB_INT) || \ | |
98 | (_mode == BFA_PPORT_OPMODE_LB_SLW) || \ | |
99 | (_mode == BFA_PPORT_OPMODE_LB_EXT)) | |
100 | ||
101 | /** | |
102 | Port State (in sync with SNIA port state). | |
103 | */ | |
104 | enum bfa_pport_snia_state { | |
105 | BFA_PPORT_STATE_UNKNOWN = 1, /* port is not initialized */ | |
106 | BFA_PPORT_STATE_ONLINE = 2, /* port is ONLINE */ | |
107 | BFA_PPORT_STATE_DISABLED = 3, /* port is disabled by user */ | |
108 | BFA_PPORT_STATE_BYPASSED = 4, /* port is bypassed (in LOOP) */ | |
109 | BFA_PPORT_STATE_DIAG = 5, /* port diagnostics is active */ | |
110 | BFA_PPORT_STATE_LINKDOWN = 6, /* link is down */ | |
111 | BFA_PPORT_STATE_LOOPBACK = 8, /* port is looped back */ | |
112 | }; | |
113 | ||
114 | /** | |
115 | * Port link state | |
116 | */ | |
117 | enum bfa_pport_linkstate { | |
118 | BFA_PPORT_LINKUP = 1, /* Physical port/Trunk link up */ | |
119 | BFA_PPORT_LINKDOWN = 2, /* Physical port/Trunk link down */ | |
120 | BFA_PPORT_TRUNK_LINKDOWN = 3, /* Trunk link down (new tmaster) */ | |
121 | }; | |
122 | ||
123 | /** | |
124 | * Port link state event | |
125 | */ | |
126 | #define bfa_pport_event_t enum bfa_pport_linkstate | |
127 | ||
128 | /** | |
129 | * Port link state reason code | |
130 | */ | |
131 | enum bfa_pport_linkstate_rsn { | |
132 | BFA_PPORT_LINKSTATE_RSN_NONE = 0, | |
133 | BFA_PPORT_LINKSTATE_RSN_DISABLED = 1, | |
134 | BFA_PPORT_LINKSTATE_RSN_RX_NOS = 2, | |
135 | BFA_PPORT_LINKSTATE_RSN_RX_OLS = 3, | |
136 | BFA_PPORT_LINKSTATE_RSN_RX_LIP = 4, | |
137 | BFA_PPORT_LINKSTATE_RSN_RX_LIPF7 = 5, | |
138 | BFA_PPORT_LINKSTATE_RSN_SFP_REMOVED = 6, | |
139 | BFA_PPORT_LINKSTATE_RSN_PORT_FAULT = 7, | |
140 | BFA_PPORT_LINKSTATE_RSN_RX_LOS = 8, | |
141 | BFA_PPORT_LINKSTATE_RSN_LOCAL_FAULT = 9, | |
142 | BFA_PPORT_LINKSTATE_RSN_REMOTE_FAULT = 10, | |
143 | BFA_PPORT_LINKSTATE_RSN_TIMEOUT = 11, | |
144 | ||
145 | ||
146 | ||
147 | /* CEE related reason codes/errors */ | |
148 | CEE_LLDP_INFO_AGED_OUT = 20, | |
149 | CEE_LLDP_SHUTDOWN_TLV_RCVD = 21, | |
150 | CEE_PEER_NOT_ADVERTISE_DCBX = 22, | |
151 | CEE_PEER_NOT_ADVERTISE_PG = 23, | |
152 | CEE_PEER_NOT_ADVERTISE_PFC = 24, | |
153 | CEE_PEER_NOT_ADVERTISE_FCOE = 25, | |
154 | CEE_PG_NOT_COMPATIBLE = 26, | |
155 | CEE_PFC_NOT_COMPATIBLE = 27, | |
156 | CEE_FCOE_NOT_COMPATIBLE = 28, | |
157 | CEE_BAD_PG_RCVD = 29, | |
158 | CEE_BAD_BW_RCVD = 30, | |
159 | CEE_BAD_PFC_RCVD = 31, | |
160 | CEE_BAD_FCOE_PRI_RCVD = 32, | |
161 | CEE_FCOE_PRI_PFC_OFF = 33, | |
162 | CEE_DUP_CONTROL_TLV_RCVD = 34, | |
163 | CEE_DUP_FEAT_TLV_RCVD = 35, | |
164 | CEE_APPLY_NEW_CFG = 36, /* reason, not an error */ | |
165 | CEE_PROTOCOL_INIT = 37, /* reason, not an error */ | |
166 | CEE_PHY_LINK_DOWN = 38, | |
167 | CEE_LLS_FCOE_ABSENT = 39, | |
168 | CEE_LLS_FCOE_DOWN = 40 | |
169 | }; | |
170 | ||
171 | /** | |
172 | * Default Target Rate Limiting Speed. | |
173 | */ | |
174 | #define BFA_PPORT_DEF_TRL_SPEED BFA_PPORT_SPEED_1GBPS | |
175 | ||
176 | /** | |
177 | * Physical port configuration | |
178 | */ | |
179 | struct bfa_pport_cfg_s { | |
180 | u8 topology; /* bfa_pport_topology */ | |
181 | u8 speed; /* enum bfa_pport_speed */ | |
182 | u8 trunked; /* trunked or not */ | |
183 | u8 qos_enabled; /* qos enabled or not */ | |
184 | u8 trunk_ports; /* bitmap of trunked ports */ | |
185 | u8 cfg_hardalpa; /* is hard alpa configured */ | |
186 | u16 maxfrsize; /* maximum frame size */ | |
187 | u8 hardalpa; /* configured hard alpa */ | |
188 | u8 rx_bbcredit; /* receive buffer credits */ | |
189 | u8 tx_bbcredit; /* transmit buffer credits */ | |
190 | u8 ratelimit; /* ratelimit enabled or not */ | |
191 | u8 trl_def_speed; /* ratelimit default speed */ | |
192 | u8 rsvd[3]; | |
193 | u16 path_tov; /* device path timeout */ | |
194 | u16 q_depth; /* SCSI Queue depth */ | |
195 | }; | |
196 | ||
197 | /** | |
198 | * Port attribute values. | |
199 | */ | |
200 | struct bfa_pport_attr_s { | |
201 | /* | |
202 | * Static fields | |
203 | */ | |
204 | wwn_t nwwn; /* node wwn */ | |
205 | wwn_t pwwn; /* port wwn */ | |
206 | enum fc_cos cos_supported; /* supported class of services */ | |
207 | u32 rsvd; | |
208 | struct fc_symname_s port_symname; /* port symbolic name */ | |
209 | enum bfa_pport_speed speed_supported; /* supported speeds */ | |
210 | bfa_boolean_t pbind_enabled; /* Will be set if Persistent binding | |
211 | * enabled. Relevant only in Windows | |
212 | */ | |
213 | ||
214 | /* | |
215 | * Configured values | |
216 | */ | |
217 | struct bfa_pport_cfg_s pport_cfg; /* pport cfg */ | |
218 | ||
219 | /* | |
220 | * Dynamic field - info from BFA | |
221 | */ | |
222 | enum bfa_pport_states port_state; /* current port state */ | |
223 | enum bfa_pport_speed speed; /* current speed */ | |
224 | enum bfa_pport_topology topology; /* current topology */ | |
225 | bfa_boolean_t beacon; /* current beacon status */ | |
226 | bfa_boolean_t link_e2e_beacon;/* set if link beacon on */ | |
227 | bfa_boolean_t plog_enabled; /* set if portlog is enabled*/ | |
228 | ||
229 | /* | |
230 | * Dynamic field - info from FCS | |
231 | */ | |
232 | u32 pid; /* port ID */ | |
233 | enum bfa_pport_type port_type; /* current topology */ | |
234 | u32 loopback; /* external loopback */ | |
235 | u32 rsvd1; | |
236 | u32 rsvd2; /* padding for 64 bit */ | |
237 | }; | |
238 | ||
239 | /** | |
240 | * FC Port statistics. | |
241 | */ | |
242 | struct bfa_pport_fc_stats_s { | |
243 | u64 secs_reset; /* seconds since stats is reset */ | |
244 | u64 tx_frames; /* transmitted frames */ | |
245 | u64 tx_words; /* transmitted words */ | |
246 | u64 rx_frames; /* received frames */ | |
247 | u64 rx_words; /* received words */ | |
248 | u64 lip_count; /* LIPs seen */ | |
249 | u64 nos_count; /* NOS count */ | |
250 | u64 error_frames; /* errored frames (sent?) */ | |
251 | u64 dropped_frames; /* dropped frames */ | |
252 | u64 link_failures; /* link failure count */ | |
253 | u64 loss_of_syncs; /* loss of sync count */ | |
254 | u64 loss_of_signals;/* loss of signal count */ | |
255 | u64 primseq_errs; /* primitive sequence protocol */ | |
256 | u64 bad_os_count; /* invalid ordered set */ | |
257 | u64 err_enc_out; /* Encoding error outside frame */ | |
258 | u64 invalid_crcs; /* frames received with invalid CRC*/ | |
259 | u64 undersized_frm; /* undersized frames */ | |
260 | u64 oversized_frm; /* oversized frames */ | |
261 | u64 bad_eof_frm; /* frames with bad EOF */ | |
262 | struct bfa_qos_stats_s qos_stats; /* QoS statistics */ | |
263 | }; | |
264 | ||
265 | /** | |
266 | * Eth Port statistics. | |
267 | */ | |
268 | struct bfa_pport_eth_stats_s { | |
269 | u64 secs_reset; /* seconds since stats is reset */ | |
270 | u64 frame_64; /* both rx and tx counter */ | |
271 | u64 frame_65_127; /* both rx and tx counter */ | |
272 | u64 frame_128_255; /* both rx and tx counter */ | |
273 | u64 frame_256_511; /* both rx and tx counter */ | |
274 | u64 frame_512_1023; /* both rx and tx counter */ | |
275 | u64 frame_1024_1518; /* both rx and tx counter */ | |
276 | u64 frame_1519_1522; /* both rx and tx counter */ | |
277 | ||
278 | u64 tx_bytes; | |
279 | u64 tx_packets; | |
280 | u64 tx_mcast_packets; | |
281 | u64 tx_bcast_packets; | |
282 | u64 tx_control_frame; | |
283 | u64 tx_drop; | |
284 | u64 tx_jabber; | |
285 | u64 tx_fcs_error; | |
286 | u64 tx_fragments; | |
287 | ||
288 | u64 rx_bytes; | |
289 | u64 rx_packets; | |
290 | u64 rx_mcast_packets; | |
291 | u64 rx_bcast_packets; | |
292 | u64 rx_control_frames; | |
293 | u64 rx_unknown_opcode; | |
294 | u64 rx_drop; | |
295 | u64 rx_jabber; | |
296 | u64 rx_fcs_error; | |
297 | u64 rx_alignment_error; | |
298 | u64 rx_frame_length_error; | |
299 | u64 rx_code_error; | |
300 | u64 rx_fragments; | |
301 | ||
302 | u64 rx_pause; /* BPC */ | |
303 | u64 rx_zero_pause; /* BPC Pause cancellation */ | |
304 | u64 tx_pause; /* BPC */ | |
305 | u64 tx_zero_pause; /* BPC Pause cancellation */ | |
306 | u64 rx_fcoe_pause; /* BPC */ | |
307 | u64 rx_fcoe_zero_pause; /* BPC Pause cancellation */ | |
308 | u64 tx_fcoe_pause; /* BPC */ | |
309 | u64 tx_fcoe_zero_pause; /* BPC Pause cancellation */ | |
310 | }; | |
311 | ||
312 | /** | |
313 | * Port statistics. | |
314 | */ | |
315 | union bfa_pport_stats_u { | |
316 | struct bfa_pport_fc_stats_s fc; | |
317 | struct bfa_pport_eth_stats_s eth; | |
318 | }; | |
319 | ||
320 | /** | |
321 | * Port FCP mappings. | |
322 | */ | |
323 | struct bfa_pport_fcpmap_s { | |
324 | char osdevname[256]; | |
325 | u32 bus; | |
326 | u32 target; | |
327 | u32 oslun; | |
328 | u32 fcid; | |
329 | wwn_t nwwn; | |
330 | wwn_t pwwn; | |
331 | u64 fcplun; | |
332 | char luid[256]; | |
333 | }; | |
334 | ||
335 | /** | |
336 | * Port RNID info. | |
337 | */ | |
338 | struct bfa_pport_rnid_s { | |
339 | wwn_t wwn; | |
340 | u32 unittype; | |
341 | u32 portid; | |
342 | u32 attached_nodes_num; | |
343 | u16 ip_version; | |
344 | u16 udp_port; | |
345 | u8 ipaddr[16]; | |
346 | u16 rsvd; | |
347 | u16 topologydiscoveryflags; | |
348 | }; | |
349 | ||
350 | /** | |
351 | * Link state information | |
352 | */ | |
353 | struct bfa_pport_link_s { | |
354 | u8 linkstate; /* Link state bfa_pport_linkstate */ | |
355 | u8 linkstate_rsn; /* bfa_pport_linkstate_rsn_t */ | |
356 | u8 topology; /* P2P/LOOP bfa_pport_topology */ | |
357 | u8 speed; /* Link speed (1/2/4/8 G) */ | |
358 | u32 linkstate_opt; /* Linkstate optional data (debug) */ | |
359 | u8 trunked; /* Trunked or not (1 or 0) */ | |
360 | u8 resvd[3]; | |
361 | struct bfa_qos_attr_s qos_attr; /* QoS Attributes */ | |
362 | struct bfa_qos_vc_attr_s qos_vc_attr; /* VC info from ELP */ | |
363 | union { | |
364 | struct { | |
365 | u8 tmaster;/* Trunk Master or | |
366 | * not (1 or 0) */ | |
367 | u8 tlinks; /* Trunk links bitmap | |
368 | * (linkup) */ | |
369 | u8 resv1; /* Reserved */ | |
370 | } trunk_info; | |
371 | ||
372 | struct { | |
373 | u8 myalpa; /* alpa claimed */ | |
374 | u8 login_req; /* Login required or | |
375 | * not (1 or 0) */ | |
376 | u8 alpabm_val;/* alpa bitmap valid | |
377 | * or not (1 or 0) */ | |
378 | struct fc_alpabm_s alpabm; /* alpa bitmap */ | |
379 | } loop_info; | |
380 | } tl; | |
381 | }; | |
382 | ||
383 | #endif /* __BFA_DEFS_PPORT_H__ */ |