Merge tag 'usb-for-v4.1-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi...
[deliverable/linux.git] / drivers / net / ethernet / emulex / benet / be_main.c
1 /*
2 * Copyright (C) 2005 - 2014 Emulex
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License version 2
7 * as published by the Free Software Foundation. The full GNU General
8 * Public License is included in this distribution in the file called COPYING.
9 *
10 * Contact Information:
11 * linux-drivers@emulex.com
12 *
13 * Emulex
14 * 3333 Susan Street
15 * Costa Mesa, CA 92626
16 */
17
18 #include <linux/prefetch.h>
19 #include <linux/module.h>
20 #include "be.h"
21 #include "be_cmds.h"
22 #include <asm/div64.h>
23 #include <linux/aer.h>
24 #include <linux/if_bridge.h>
25 #include <net/busy_poll.h>
26 #include <net/vxlan.h>
27
28 MODULE_VERSION(DRV_VER);
29 MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
30 MODULE_AUTHOR("Emulex Corporation");
31 MODULE_LICENSE("GPL");
32
33 static unsigned int num_vfs;
34 module_param(num_vfs, uint, S_IRUGO);
35 MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
36
37 static ushort rx_frag_size = 2048;
38 module_param(rx_frag_size, ushort, S_IRUGO);
39 MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
40
41 static const struct pci_device_id be_dev_ids[] = {
42 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
43 { PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) },
44 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
45 { PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
46 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID3)},
47 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID4)},
48 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID5)},
49 { PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID6)},
50 { 0 }
51 };
52 MODULE_DEVICE_TABLE(pci, be_dev_ids);
53 /* UE Status Low CSR */
54 static const char * const ue_status_low_desc[] = {
55 "CEV",
56 "CTX",
57 "DBUF",
58 "ERX",
59 "Host",
60 "MPU",
61 "NDMA",
62 "PTC ",
63 "RDMA ",
64 "RXF ",
65 "RXIPS ",
66 "RXULP0 ",
67 "RXULP1 ",
68 "RXULP2 ",
69 "TIM ",
70 "TPOST ",
71 "TPRE ",
72 "TXIPS ",
73 "TXULP0 ",
74 "TXULP1 ",
75 "UC ",
76 "WDMA ",
77 "TXULP2 ",
78 "HOST1 ",
79 "P0_OB_LINK ",
80 "P1_OB_LINK ",
81 "HOST_GPIO ",
82 "MBOX ",
83 "ERX2 ",
84 "SPARE ",
85 "JTAG ",
86 "MPU_INTPEND "
87 };
88
89 /* UE Status High CSR */
90 static const char * const ue_status_hi_desc[] = {
91 "LPCMEMHOST",
92 "MGMT_MAC",
93 "PCS0ONLINE",
94 "MPU_IRAM",
95 "PCS1ONLINE",
96 "PCTL0",
97 "PCTL1",
98 "PMEM",
99 "RR",
100 "TXPB",
101 "RXPP",
102 "XAUI",
103 "TXP",
104 "ARM",
105 "IPC",
106 "HOST2",
107 "HOST3",
108 "HOST4",
109 "HOST5",
110 "HOST6",
111 "HOST7",
112 "ECRC",
113 "Poison TLP",
114 "NETC",
115 "PERIPH",
116 "LLTXULP",
117 "D2P",
118 "RCON",
119 "LDMA",
120 "LLTXP",
121 "LLTXPB",
122 "Unknown"
123 };
124
125 static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
126 {
127 struct be_dma_mem *mem = &q->dma_mem;
128
129 if (mem->va) {
130 dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
131 mem->dma);
132 mem->va = NULL;
133 }
134 }
135
136 static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
137 u16 len, u16 entry_size)
138 {
139 struct be_dma_mem *mem = &q->dma_mem;
140
141 memset(q, 0, sizeof(*q));
142 q->len = len;
143 q->entry_size = entry_size;
144 mem->size = len * entry_size;
145 mem->va = dma_zalloc_coherent(&adapter->pdev->dev, mem->size, &mem->dma,
146 GFP_KERNEL);
147 if (!mem->va)
148 return -ENOMEM;
149 return 0;
150 }
151
152 static void be_reg_intr_set(struct be_adapter *adapter, bool enable)
153 {
154 u32 reg, enabled;
155
156 pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET,
157 &reg);
158 enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
159
160 if (!enabled && enable)
161 reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
162 else if (enabled && !enable)
163 reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
164 else
165 return;
166
167 pci_write_config_dword(adapter->pdev,
168 PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
169 }
170
171 static void be_intr_set(struct be_adapter *adapter, bool enable)
172 {
173 int status = 0;
174
175 /* On lancer interrupts can't be controlled via this register */
176 if (lancer_chip(adapter))
177 return;
178
179 if (adapter->eeh_error)
180 return;
181
182 status = be_cmd_intr_set(adapter, enable);
183 if (status)
184 be_reg_intr_set(adapter, enable);
185 }
186
187 static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
188 {
189 u32 val = 0;
190
191 val |= qid & DB_RQ_RING_ID_MASK;
192 val |= posted << DB_RQ_NUM_POSTED_SHIFT;
193
194 wmb();
195 iowrite32(val, adapter->db + DB_RQ_OFFSET);
196 }
197
198 static void be_txq_notify(struct be_adapter *adapter, struct be_tx_obj *txo,
199 u16 posted)
200 {
201 u32 val = 0;
202
203 val |= txo->q.id & DB_TXULP_RING_ID_MASK;
204 val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
205
206 wmb();
207 iowrite32(val, adapter->db + txo->db_offset);
208 }
209
210 static void be_eq_notify(struct be_adapter *adapter, u16 qid,
211 bool arm, bool clear_int, u16 num_popped)
212 {
213 u32 val = 0;
214
215 val |= qid & DB_EQ_RING_ID_MASK;
216 val |= ((qid & DB_EQ_RING_ID_EXT_MASK) << DB_EQ_RING_ID_EXT_MASK_SHIFT);
217
218 if (adapter->eeh_error)
219 return;
220
221 if (arm)
222 val |= 1 << DB_EQ_REARM_SHIFT;
223 if (clear_int)
224 val |= 1 << DB_EQ_CLR_SHIFT;
225 val |= 1 << DB_EQ_EVNT_SHIFT;
226 val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
227 iowrite32(val, adapter->db + DB_EQ_OFFSET);
228 }
229
230 void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
231 {
232 u32 val = 0;
233
234 val |= qid & DB_CQ_RING_ID_MASK;
235 val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
236 DB_CQ_RING_ID_EXT_MASK_SHIFT);
237
238 if (adapter->eeh_error)
239 return;
240
241 if (arm)
242 val |= 1 << DB_CQ_REARM_SHIFT;
243 val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
244 iowrite32(val, adapter->db + DB_CQ_OFFSET);
245 }
246
247 static int be_mac_addr_set(struct net_device *netdev, void *p)
248 {
249 struct be_adapter *adapter = netdev_priv(netdev);
250 struct device *dev = &adapter->pdev->dev;
251 struct sockaddr *addr = p;
252 int status;
253 u8 mac[ETH_ALEN];
254 u32 old_pmac_id = adapter->pmac_id[0], curr_pmac_id = 0;
255
256 if (!is_valid_ether_addr(addr->sa_data))
257 return -EADDRNOTAVAIL;
258
259 /* Proceed further only if, User provided MAC is different
260 * from active MAC
261 */
262 if (ether_addr_equal(addr->sa_data, netdev->dev_addr))
263 return 0;
264
265 /* The PMAC_ADD cmd may fail if the VF doesn't have FILTMGMT
266 * privilege or if PF did not provision the new MAC address.
267 * On BE3, this cmd will always fail if the VF doesn't have the
268 * FILTMGMT privilege. This failure is OK, only if the PF programmed
269 * the MAC for the VF.
270 */
271 status = be_cmd_pmac_add(adapter, (u8 *)addr->sa_data,
272 adapter->if_handle, &adapter->pmac_id[0], 0);
273 if (!status) {
274 curr_pmac_id = adapter->pmac_id[0];
275
276 /* Delete the old programmed MAC. This call may fail if the
277 * old MAC was already deleted by the PF driver.
278 */
279 if (adapter->pmac_id[0] != old_pmac_id)
280 be_cmd_pmac_del(adapter, adapter->if_handle,
281 old_pmac_id, 0);
282 }
283
284 /* Decide if the new MAC is successfully activated only after
285 * querying the FW
286 */
287 status = be_cmd_get_active_mac(adapter, curr_pmac_id, mac,
288 adapter->if_handle, true, 0);
289 if (status)
290 goto err;
291
292 /* The MAC change did not happen, either due to lack of privilege
293 * or PF didn't pre-provision.
294 */
295 if (!ether_addr_equal(addr->sa_data, mac)) {
296 status = -EPERM;
297 goto err;
298 }
299
300 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
301 dev_info(dev, "MAC address changed to %pM\n", mac);
302 return 0;
303 err:
304 dev_warn(dev, "MAC address change to %pM failed\n", addr->sa_data);
305 return status;
306 }
307
308 /* BE2 supports only v0 cmd */
309 static void *hw_stats_from_cmd(struct be_adapter *adapter)
310 {
311 if (BE2_chip(adapter)) {
312 struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
313
314 return &cmd->hw_stats;
315 } else if (BE3_chip(adapter)) {
316 struct be_cmd_resp_get_stats_v1 *cmd = adapter->stats_cmd.va;
317
318 return &cmd->hw_stats;
319 } else {
320 struct be_cmd_resp_get_stats_v2 *cmd = adapter->stats_cmd.va;
321
322 return &cmd->hw_stats;
323 }
324 }
325
326 /* BE2 supports only v0 cmd */
327 static void *be_erx_stats_from_cmd(struct be_adapter *adapter)
328 {
329 if (BE2_chip(adapter)) {
330 struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
331
332 return &hw_stats->erx;
333 } else if (BE3_chip(adapter)) {
334 struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
335
336 return &hw_stats->erx;
337 } else {
338 struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
339
340 return &hw_stats->erx;
341 }
342 }
343
344 static void populate_be_v0_stats(struct be_adapter *adapter)
345 {
346 struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
347 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
348 struct be_rxf_stats_v0 *rxf_stats = &hw_stats->rxf;
349 struct be_port_rxf_stats_v0 *port_stats =
350 &rxf_stats->port[adapter->port_num];
351 struct be_drv_stats *drvs = &adapter->drv_stats;
352
353 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
354 drvs->rx_pause_frames = port_stats->rx_pause_frames;
355 drvs->rx_crc_errors = port_stats->rx_crc_errors;
356 drvs->rx_control_frames = port_stats->rx_control_frames;
357 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
358 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
359 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
360 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
361 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
362 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
363 drvs->rxpp_fifo_overflow_drop = port_stats->rx_fifo_overflow;
364 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
365 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
366 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
367 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
368 drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow;
369 drvs->rx_dropped_header_too_small =
370 port_stats->rx_dropped_header_too_small;
371 drvs->rx_address_filtered =
372 port_stats->rx_address_filtered +
373 port_stats->rx_vlan_filtered;
374 drvs->rx_alignment_symbol_errors =
375 port_stats->rx_alignment_symbol_errors;
376
377 drvs->tx_pauseframes = port_stats->tx_pauseframes;
378 drvs->tx_controlframes = port_stats->tx_controlframes;
379
380 if (adapter->port_num)
381 drvs->jabber_events = rxf_stats->port1_jabber_events;
382 else
383 drvs->jabber_events = rxf_stats->port0_jabber_events;
384 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
385 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
386 drvs->forwarded_packets = rxf_stats->forwarded_packets;
387 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
388 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
389 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
390 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
391 }
392
393 static void populate_be_v1_stats(struct be_adapter *adapter)
394 {
395 struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
396 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
397 struct be_rxf_stats_v1 *rxf_stats = &hw_stats->rxf;
398 struct be_port_rxf_stats_v1 *port_stats =
399 &rxf_stats->port[adapter->port_num];
400 struct be_drv_stats *drvs = &adapter->drv_stats;
401
402 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
403 drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
404 drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
405 drvs->rx_pause_frames = port_stats->rx_pause_frames;
406 drvs->rx_crc_errors = port_stats->rx_crc_errors;
407 drvs->rx_control_frames = port_stats->rx_control_frames;
408 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
409 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
410 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
411 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
412 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
413 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
414 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
415 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
416 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
417 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
418 drvs->rx_dropped_header_too_small =
419 port_stats->rx_dropped_header_too_small;
420 drvs->rx_input_fifo_overflow_drop =
421 port_stats->rx_input_fifo_overflow_drop;
422 drvs->rx_address_filtered = port_stats->rx_address_filtered;
423 drvs->rx_alignment_symbol_errors =
424 port_stats->rx_alignment_symbol_errors;
425 drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
426 drvs->tx_pauseframes = port_stats->tx_pauseframes;
427 drvs->tx_controlframes = port_stats->tx_controlframes;
428 drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
429 drvs->jabber_events = port_stats->jabber_events;
430 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
431 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
432 drvs->forwarded_packets = rxf_stats->forwarded_packets;
433 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
434 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
435 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
436 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
437 }
438
439 static void populate_be_v2_stats(struct be_adapter *adapter)
440 {
441 struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
442 struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
443 struct be_rxf_stats_v2 *rxf_stats = &hw_stats->rxf;
444 struct be_port_rxf_stats_v2 *port_stats =
445 &rxf_stats->port[adapter->port_num];
446 struct be_drv_stats *drvs = &adapter->drv_stats;
447
448 be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
449 drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
450 drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
451 drvs->rx_pause_frames = port_stats->rx_pause_frames;
452 drvs->rx_crc_errors = port_stats->rx_crc_errors;
453 drvs->rx_control_frames = port_stats->rx_control_frames;
454 drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
455 drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
456 drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
457 drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
458 drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
459 drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
460 drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
461 drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
462 drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
463 drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
464 drvs->rx_dropped_header_too_small =
465 port_stats->rx_dropped_header_too_small;
466 drvs->rx_input_fifo_overflow_drop =
467 port_stats->rx_input_fifo_overflow_drop;
468 drvs->rx_address_filtered = port_stats->rx_address_filtered;
469 drvs->rx_alignment_symbol_errors =
470 port_stats->rx_alignment_symbol_errors;
471 drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
472 drvs->tx_pauseframes = port_stats->tx_pauseframes;
473 drvs->tx_controlframes = port_stats->tx_controlframes;
474 drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
475 drvs->jabber_events = port_stats->jabber_events;
476 drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
477 drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
478 drvs->forwarded_packets = rxf_stats->forwarded_packets;
479 drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
480 drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
481 drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
482 adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
483 if (be_roce_supported(adapter)) {
484 drvs->rx_roce_bytes_lsd = port_stats->roce_bytes_received_lsd;
485 drvs->rx_roce_bytes_msd = port_stats->roce_bytes_received_msd;
486 drvs->rx_roce_frames = port_stats->roce_frames_received;
487 drvs->roce_drops_crc = port_stats->roce_drops_crc;
488 drvs->roce_drops_payload_len =
489 port_stats->roce_drops_payload_len;
490 }
491 }
492
493 static void populate_lancer_stats(struct be_adapter *adapter)
494 {
495 struct be_drv_stats *drvs = &adapter->drv_stats;
496 struct lancer_pport_stats *pport_stats = pport_stats_from_cmd(adapter);
497
498 be_dws_le_to_cpu(pport_stats, sizeof(*pport_stats));
499 drvs->rx_pause_frames = pport_stats->rx_pause_frames_lo;
500 drvs->rx_crc_errors = pport_stats->rx_crc_errors_lo;
501 drvs->rx_control_frames = pport_stats->rx_control_frames_lo;
502 drvs->rx_in_range_errors = pport_stats->rx_in_range_errors;
503 drvs->rx_frame_too_long = pport_stats->rx_frames_too_long_lo;
504 drvs->rx_dropped_runt = pport_stats->rx_dropped_runt;
505 drvs->rx_ip_checksum_errs = pport_stats->rx_ip_checksum_errors;
506 drvs->rx_tcp_checksum_errs = pport_stats->rx_tcp_checksum_errors;
507 drvs->rx_udp_checksum_errs = pport_stats->rx_udp_checksum_errors;
508 drvs->rx_dropped_tcp_length =
509 pport_stats->rx_dropped_invalid_tcp_length;
510 drvs->rx_dropped_too_small = pport_stats->rx_dropped_too_small;
511 drvs->rx_dropped_too_short = pport_stats->rx_dropped_too_short;
512 drvs->rx_out_range_errors = pport_stats->rx_out_of_range_errors;
513 drvs->rx_dropped_header_too_small =
514 pport_stats->rx_dropped_header_too_small;
515 drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
516 drvs->rx_address_filtered =
517 pport_stats->rx_address_filtered +
518 pport_stats->rx_vlan_filtered;
519 drvs->rx_alignment_symbol_errors = pport_stats->rx_symbol_errors_lo;
520 drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
521 drvs->tx_pauseframes = pport_stats->tx_pause_frames_lo;
522 drvs->tx_controlframes = pport_stats->tx_control_frames_lo;
523 drvs->jabber_events = pport_stats->rx_jabbers;
524 drvs->forwarded_packets = pport_stats->num_forwards_lo;
525 drvs->rx_drops_mtu = pport_stats->rx_drops_mtu_lo;
526 drvs->rx_drops_too_many_frags =
527 pport_stats->rx_drops_too_many_frags_lo;
528 }
529
530 static void accumulate_16bit_val(u32 *acc, u16 val)
531 {
532 #define lo(x) (x & 0xFFFF)
533 #define hi(x) (x & 0xFFFF0000)
534 bool wrapped = val < lo(*acc);
535 u32 newacc = hi(*acc) + val;
536
537 if (wrapped)
538 newacc += 65536;
539 ACCESS_ONCE(*acc) = newacc;
540 }
541
542 static void populate_erx_stats(struct be_adapter *adapter,
543 struct be_rx_obj *rxo, u32 erx_stat)
544 {
545 if (!BEx_chip(adapter))
546 rx_stats(rxo)->rx_drops_no_frags = erx_stat;
547 else
548 /* below erx HW counter can actually wrap around after
549 * 65535. Driver accumulates a 32-bit value
550 */
551 accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
552 (u16)erx_stat);
553 }
554
555 void be_parse_stats(struct be_adapter *adapter)
556 {
557 struct be_erx_stats_v2 *erx = be_erx_stats_from_cmd(adapter);
558 struct be_rx_obj *rxo;
559 int i;
560 u32 erx_stat;
561
562 if (lancer_chip(adapter)) {
563 populate_lancer_stats(adapter);
564 } else {
565 if (BE2_chip(adapter))
566 populate_be_v0_stats(adapter);
567 else if (BE3_chip(adapter))
568 /* for BE3 */
569 populate_be_v1_stats(adapter);
570 else
571 populate_be_v2_stats(adapter);
572
573 /* erx_v2 is longer than v0, v1. use v2 for v0, v1 access */
574 for_all_rx_queues(adapter, rxo, i) {
575 erx_stat = erx->rx_drops_no_fragments[rxo->q.id];
576 populate_erx_stats(adapter, rxo, erx_stat);
577 }
578 }
579 }
580
581 static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
582 struct rtnl_link_stats64 *stats)
583 {
584 struct be_adapter *adapter = netdev_priv(netdev);
585 struct be_drv_stats *drvs = &adapter->drv_stats;
586 struct be_rx_obj *rxo;
587 struct be_tx_obj *txo;
588 u64 pkts, bytes;
589 unsigned int start;
590 int i;
591
592 for_all_rx_queues(adapter, rxo, i) {
593 const struct be_rx_stats *rx_stats = rx_stats(rxo);
594
595 do {
596 start = u64_stats_fetch_begin_irq(&rx_stats->sync);
597 pkts = rx_stats(rxo)->rx_pkts;
598 bytes = rx_stats(rxo)->rx_bytes;
599 } while (u64_stats_fetch_retry_irq(&rx_stats->sync, start));
600 stats->rx_packets += pkts;
601 stats->rx_bytes += bytes;
602 stats->multicast += rx_stats(rxo)->rx_mcast_pkts;
603 stats->rx_dropped += rx_stats(rxo)->rx_drops_no_skbs +
604 rx_stats(rxo)->rx_drops_no_frags;
605 }
606
607 for_all_tx_queues(adapter, txo, i) {
608 const struct be_tx_stats *tx_stats = tx_stats(txo);
609
610 do {
611 start = u64_stats_fetch_begin_irq(&tx_stats->sync);
612 pkts = tx_stats(txo)->tx_pkts;
613 bytes = tx_stats(txo)->tx_bytes;
614 } while (u64_stats_fetch_retry_irq(&tx_stats->sync, start));
615 stats->tx_packets += pkts;
616 stats->tx_bytes += bytes;
617 }
618
619 /* bad pkts received */
620 stats->rx_errors = drvs->rx_crc_errors +
621 drvs->rx_alignment_symbol_errors +
622 drvs->rx_in_range_errors +
623 drvs->rx_out_range_errors +
624 drvs->rx_frame_too_long +
625 drvs->rx_dropped_too_small +
626 drvs->rx_dropped_too_short +
627 drvs->rx_dropped_header_too_small +
628 drvs->rx_dropped_tcp_length +
629 drvs->rx_dropped_runt;
630
631 /* detailed rx errors */
632 stats->rx_length_errors = drvs->rx_in_range_errors +
633 drvs->rx_out_range_errors +
634 drvs->rx_frame_too_long;
635
636 stats->rx_crc_errors = drvs->rx_crc_errors;
637
638 /* frame alignment errors */
639 stats->rx_frame_errors = drvs->rx_alignment_symbol_errors;
640
641 /* receiver fifo overrun */
642 /* drops_no_pbuf is no per i/f, it's per BE card */
643 stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
644 drvs->rx_input_fifo_overflow_drop +
645 drvs->rx_drops_no_pbuf;
646 return stats;
647 }
648
649 void be_link_status_update(struct be_adapter *adapter, u8 link_status)
650 {
651 struct net_device *netdev = adapter->netdev;
652
653 if (!(adapter->flags & BE_FLAGS_LINK_STATUS_INIT)) {
654 netif_carrier_off(netdev);
655 adapter->flags |= BE_FLAGS_LINK_STATUS_INIT;
656 }
657
658 if (link_status)
659 netif_carrier_on(netdev);
660 else
661 netif_carrier_off(netdev);
662 }
663
664 static void be_tx_stats_update(struct be_tx_obj *txo, struct sk_buff *skb)
665 {
666 struct be_tx_stats *stats = tx_stats(txo);
667
668 u64_stats_update_begin(&stats->sync);
669 stats->tx_reqs++;
670 stats->tx_bytes += skb->len;
671 stats->tx_pkts += (skb_shinfo(skb)->gso_segs ? : 1);
672 u64_stats_update_end(&stats->sync);
673 }
674
675 /* Returns number of WRBs needed for the skb */
676 static u32 skb_wrb_cnt(struct sk_buff *skb)
677 {
678 /* +1 for the header wrb */
679 return 1 + (skb_headlen(skb) ? 1 : 0) + skb_shinfo(skb)->nr_frags;
680 }
681
682 static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
683 {
684 wrb->frag_pa_hi = cpu_to_le32(upper_32_bits(addr));
685 wrb->frag_pa_lo = cpu_to_le32(lower_32_bits(addr));
686 wrb->frag_len = cpu_to_le32(len & ETH_WRB_FRAG_LEN_MASK);
687 wrb->rsvd0 = 0;
688 }
689
690 /* A dummy wrb is just all zeros. Using a separate routine for dummy-wrb
691 * to avoid the swap and shift/mask operations in wrb_fill().
692 */
693 static inline void wrb_fill_dummy(struct be_eth_wrb *wrb)
694 {
695 wrb->frag_pa_hi = 0;
696 wrb->frag_pa_lo = 0;
697 wrb->frag_len = 0;
698 wrb->rsvd0 = 0;
699 }
700
701 static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
702 struct sk_buff *skb)
703 {
704 u8 vlan_prio;
705 u16 vlan_tag;
706
707 vlan_tag = skb_vlan_tag_get(skb);
708 vlan_prio = (vlan_tag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
709 /* If vlan priority provided by OS is NOT in available bmap */
710 if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
711 vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
712 adapter->recommended_prio;
713
714 return vlan_tag;
715 }
716
717 /* Used only for IP tunnel packets */
718 static u16 skb_inner_ip_proto(struct sk_buff *skb)
719 {
720 return (inner_ip_hdr(skb)->version == 4) ?
721 inner_ip_hdr(skb)->protocol : inner_ipv6_hdr(skb)->nexthdr;
722 }
723
724 static u16 skb_ip_proto(struct sk_buff *skb)
725 {
726 return (ip_hdr(skb)->version == 4) ?
727 ip_hdr(skb)->protocol : ipv6_hdr(skb)->nexthdr;
728 }
729
730 static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
731 struct sk_buff *skb, u32 wrb_cnt, u32 len,
732 bool skip_hw_vlan)
733 {
734 u16 vlan_tag, proto;
735
736 memset(hdr, 0, sizeof(*hdr));
737
738 SET_TX_WRB_HDR_BITS(crc, hdr, 1);
739
740 if (skb_is_gso(skb)) {
741 SET_TX_WRB_HDR_BITS(lso, hdr, 1);
742 SET_TX_WRB_HDR_BITS(lso_mss, hdr, skb_shinfo(skb)->gso_size);
743 if (skb_is_gso_v6(skb) && !lancer_chip(adapter))
744 SET_TX_WRB_HDR_BITS(lso6, hdr, 1);
745 } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
746 if (skb->encapsulation) {
747 SET_TX_WRB_HDR_BITS(ipcs, hdr, 1);
748 proto = skb_inner_ip_proto(skb);
749 } else {
750 proto = skb_ip_proto(skb);
751 }
752 if (proto == IPPROTO_TCP)
753 SET_TX_WRB_HDR_BITS(tcpcs, hdr, 1);
754 else if (proto == IPPROTO_UDP)
755 SET_TX_WRB_HDR_BITS(udpcs, hdr, 1);
756 }
757
758 if (skb_vlan_tag_present(skb)) {
759 SET_TX_WRB_HDR_BITS(vlan, hdr, 1);
760 vlan_tag = be_get_tx_vlan_tag(adapter, skb);
761 SET_TX_WRB_HDR_BITS(vlan_tag, hdr, vlan_tag);
762 }
763
764 SET_TX_WRB_HDR_BITS(num_wrb, hdr, wrb_cnt);
765 SET_TX_WRB_HDR_BITS(len, hdr, len);
766
767 /* Hack to skip HW VLAN tagging needs evt = 1, compl = 0
768 * When this hack is not needed, the evt bit is set while ringing DB
769 */
770 if (skip_hw_vlan)
771 SET_TX_WRB_HDR_BITS(event, hdr, 1);
772 }
773
774 static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
775 bool unmap_single)
776 {
777 dma_addr_t dma;
778 u32 frag_len = le32_to_cpu(wrb->frag_len);
779
780
781 dma = (u64)le32_to_cpu(wrb->frag_pa_hi) << 32 |
782 (u64)le32_to_cpu(wrb->frag_pa_lo);
783 if (frag_len) {
784 if (unmap_single)
785 dma_unmap_single(dev, dma, frag_len, DMA_TO_DEVICE);
786 else
787 dma_unmap_page(dev, dma, frag_len, DMA_TO_DEVICE);
788 }
789 }
790
791 /* Returns the number of WRBs used up by the skb */
792 static u32 be_xmit_enqueue(struct be_adapter *adapter, struct be_tx_obj *txo,
793 struct sk_buff *skb, bool skip_hw_vlan)
794 {
795 u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb);
796 struct device *dev = &adapter->pdev->dev;
797 struct be_queue_info *txq = &txo->q;
798 struct be_eth_hdr_wrb *hdr;
799 bool map_single = false;
800 struct be_eth_wrb *wrb;
801 dma_addr_t busaddr;
802 u16 head = txq->head;
803
804 hdr = queue_head_node(txq);
805 wrb_fill_hdr(adapter, hdr, skb, wrb_cnt, skb->len, skip_hw_vlan);
806 be_dws_cpu_to_le(hdr, sizeof(*hdr));
807
808 queue_head_inc(txq);
809
810 if (skb->len > skb->data_len) {
811 int len = skb_headlen(skb);
812
813 busaddr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
814 if (dma_mapping_error(dev, busaddr))
815 goto dma_err;
816 map_single = true;
817 wrb = queue_head_node(txq);
818 wrb_fill(wrb, busaddr, len);
819 queue_head_inc(txq);
820 copied += len;
821 }
822
823 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
824 const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
825
826 busaddr = skb_frag_dma_map(dev, frag, 0,
827 skb_frag_size(frag), DMA_TO_DEVICE);
828 if (dma_mapping_error(dev, busaddr))
829 goto dma_err;
830 wrb = queue_head_node(txq);
831 wrb_fill(wrb, busaddr, skb_frag_size(frag));
832 queue_head_inc(txq);
833 copied += skb_frag_size(frag);
834 }
835
836 BUG_ON(txo->sent_skb_list[head]);
837 txo->sent_skb_list[head] = skb;
838 txo->last_req_hdr = head;
839 atomic_add(wrb_cnt, &txq->used);
840 txo->last_req_wrb_cnt = wrb_cnt;
841 txo->pend_wrb_cnt += wrb_cnt;
842
843 be_tx_stats_update(txo, skb);
844 return wrb_cnt;
845
846 dma_err:
847 /* Bring the queue back to the state it was in before this
848 * routine was invoked.
849 */
850 txq->head = head;
851 /* skip the first wrb (hdr); it's not mapped */
852 queue_head_inc(txq);
853 while (copied) {
854 wrb = queue_head_node(txq);
855 unmap_tx_frag(dev, wrb, map_single);
856 map_single = false;
857 copied -= le32_to_cpu(wrb->frag_len);
858 adapter->drv_stats.dma_map_errors++;
859 queue_head_inc(txq);
860 }
861 txq->head = head;
862 return 0;
863 }
864
865 static inline int qnq_async_evt_rcvd(struct be_adapter *adapter)
866 {
867 return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD;
868 }
869
870 static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
871 struct sk_buff *skb,
872 bool *skip_hw_vlan)
873 {
874 u16 vlan_tag = 0;
875
876 skb = skb_share_check(skb, GFP_ATOMIC);
877 if (unlikely(!skb))
878 return skb;
879
880 if (skb_vlan_tag_present(skb))
881 vlan_tag = be_get_tx_vlan_tag(adapter, skb);
882
883 if (qnq_async_evt_rcvd(adapter) && adapter->pvid) {
884 if (!vlan_tag)
885 vlan_tag = adapter->pvid;
886 /* f/w workaround to set skip_hw_vlan = 1, informs the F/W to
887 * skip VLAN insertion
888 */
889 if (skip_hw_vlan)
890 *skip_hw_vlan = true;
891 }
892
893 if (vlan_tag) {
894 skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
895 vlan_tag);
896 if (unlikely(!skb))
897 return skb;
898 skb->vlan_tci = 0;
899 }
900
901 /* Insert the outer VLAN, if any */
902 if (adapter->qnq_vid) {
903 vlan_tag = adapter->qnq_vid;
904 skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
905 vlan_tag);
906 if (unlikely(!skb))
907 return skb;
908 if (skip_hw_vlan)
909 *skip_hw_vlan = true;
910 }
911
912 return skb;
913 }
914
915 static bool be_ipv6_exthdr_check(struct sk_buff *skb)
916 {
917 struct ethhdr *eh = (struct ethhdr *)skb->data;
918 u16 offset = ETH_HLEN;
919
920 if (eh->h_proto == htons(ETH_P_IPV6)) {
921 struct ipv6hdr *ip6h = (struct ipv6hdr *)(skb->data + offset);
922
923 offset += sizeof(struct ipv6hdr);
924 if (ip6h->nexthdr != NEXTHDR_TCP &&
925 ip6h->nexthdr != NEXTHDR_UDP) {
926 struct ipv6_opt_hdr *ehdr =
927 (struct ipv6_opt_hdr *)(skb->data + offset);
928
929 /* offending pkt: 2nd byte following IPv6 hdr is 0xff */
930 if (ehdr->hdrlen == 0xff)
931 return true;
932 }
933 }
934 return false;
935 }
936
937 static int be_vlan_tag_tx_chk(struct be_adapter *adapter, struct sk_buff *skb)
938 {
939 return skb_vlan_tag_present(skb) || adapter->pvid || adapter->qnq_vid;
940 }
941
942 static int be_ipv6_tx_stall_chk(struct be_adapter *adapter, struct sk_buff *skb)
943 {
944 return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
945 }
946
947 static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
948 struct sk_buff *skb,
949 bool *skip_hw_vlan)
950 {
951 struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
952 unsigned int eth_hdr_len;
953 struct iphdr *ip;
954
955 /* For padded packets, BE HW modifies tot_len field in IP header
956 * incorrecly when VLAN tag is inserted by HW.
957 * For padded packets, Lancer computes incorrect checksum.
958 */
959 eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ?
960 VLAN_ETH_HLEN : ETH_HLEN;
961 if (skb->len <= 60 &&
962 (lancer_chip(adapter) || skb_vlan_tag_present(skb)) &&
963 is_ipv4_pkt(skb)) {
964 ip = (struct iphdr *)ip_hdr(skb);
965 pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len));
966 }
967
968 /* If vlan tag is already inlined in the packet, skip HW VLAN
969 * tagging in pvid-tagging mode
970 */
971 if (be_pvid_tagging_enabled(adapter) &&
972 veh->h_vlan_proto == htons(ETH_P_8021Q))
973 *skip_hw_vlan = true;
974
975 /* HW has a bug wherein it will calculate CSUM for VLAN
976 * pkts even though it is disabled.
977 * Manually insert VLAN in pkt.
978 */
979 if (skb->ip_summed != CHECKSUM_PARTIAL &&
980 skb_vlan_tag_present(skb)) {
981 skb = be_insert_vlan_in_pkt(adapter, skb, skip_hw_vlan);
982 if (unlikely(!skb))
983 goto err;
984 }
985
986 /* HW may lockup when VLAN HW tagging is requested on
987 * certain ipv6 packets. Drop such pkts if the HW workaround to
988 * skip HW tagging is not enabled by FW.
989 */
990 if (unlikely(be_ipv6_tx_stall_chk(adapter, skb) &&
991 (adapter->pvid || adapter->qnq_vid) &&
992 !qnq_async_evt_rcvd(adapter)))
993 goto tx_drop;
994
995 /* Manual VLAN tag insertion to prevent:
996 * ASIC lockup when the ASIC inserts VLAN tag into
997 * certain ipv6 packets. Insert VLAN tags in driver,
998 * and set event, completion, vlan bits accordingly
999 * in the Tx WRB.
1000 */
1001 if (be_ipv6_tx_stall_chk(adapter, skb) &&
1002 be_vlan_tag_tx_chk(adapter, skb)) {
1003 skb = be_insert_vlan_in_pkt(adapter, skb, skip_hw_vlan);
1004 if (unlikely(!skb))
1005 goto err;
1006 }
1007
1008 return skb;
1009 tx_drop:
1010 dev_kfree_skb_any(skb);
1011 err:
1012 return NULL;
1013 }
1014
1015 static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
1016 struct sk_buff *skb,
1017 bool *skip_hw_vlan)
1018 {
1019 /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or
1020 * less may cause a transmit stall on that port. So the work-around is
1021 * to pad short packets (<= 32 bytes) to a 36-byte length.
1022 */
1023 if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
1024 if (skb_put_padto(skb, 36))
1025 return NULL;
1026 }
1027
1028 if (BEx_chip(adapter) || lancer_chip(adapter)) {
1029 skb = be_lancer_xmit_workarounds(adapter, skb, skip_hw_vlan);
1030 if (!skb)
1031 return NULL;
1032 }
1033
1034 return skb;
1035 }
1036
1037 static void be_xmit_flush(struct be_adapter *adapter, struct be_tx_obj *txo)
1038 {
1039 struct be_queue_info *txq = &txo->q;
1040 struct be_eth_hdr_wrb *hdr = queue_index_node(txq, txo->last_req_hdr);
1041
1042 /* Mark the last request eventable if it hasn't been marked already */
1043 if (!(hdr->dw[2] & cpu_to_le32(TX_HDR_WRB_EVT)))
1044 hdr->dw[2] |= cpu_to_le32(TX_HDR_WRB_EVT | TX_HDR_WRB_COMPL);
1045
1046 /* compose a dummy wrb if there are odd set of wrbs to notify */
1047 if (!lancer_chip(adapter) && (txo->pend_wrb_cnt & 1)) {
1048 wrb_fill_dummy(queue_head_node(txq));
1049 queue_head_inc(txq);
1050 atomic_inc(&txq->used);
1051 txo->pend_wrb_cnt++;
1052 hdr->dw[2] &= ~cpu_to_le32(TX_HDR_WRB_NUM_MASK <<
1053 TX_HDR_WRB_NUM_SHIFT);
1054 hdr->dw[2] |= cpu_to_le32((txo->last_req_wrb_cnt + 1) <<
1055 TX_HDR_WRB_NUM_SHIFT);
1056 }
1057 be_txq_notify(adapter, txo, txo->pend_wrb_cnt);
1058 txo->pend_wrb_cnt = 0;
1059 }
1060
1061 static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
1062 {
1063 bool skip_hw_vlan = false, flush = !skb->xmit_more;
1064 struct be_adapter *adapter = netdev_priv(netdev);
1065 u16 q_idx = skb_get_queue_mapping(skb);
1066 struct be_tx_obj *txo = &adapter->tx_obj[q_idx];
1067 struct be_queue_info *txq = &txo->q;
1068 u16 wrb_cnt;
1069
1070 skb = be_xmit_workarounds(adapter, skb, &skip_hw_vlan);
1071 if (unlikely(!skb))
1072 goto drop;
1073
1074 wrb_cnt = be_xmit_enqueue(adapter, txo, skb, skip_hw_vlan);
1075 if (unlikely(!wrb_cnt)) {
1076 dev_kfree_skb_any(skb);
1077 goto drop;
1078 }
1079
1080 if ((atomic_read(&txq->used) + BE_MAX_TX_FRAG_COUNT) >= txq->len) {
1081 netif_stop_subqueue(netdev, q_idx);
1082 tx_stats(txo)->tx_stops++;
1083 }
1084
1085 if (flush || __netif_subqueue_stopped(netdev, q_idx))
1086 be_xmit_flush(adapter, txo);
1087
1088 return NETDEV_TX_OK;
1089 drop:
1090 tx_stats(txo)->tx_drv_drops++;
1091 /* Flush the already enqueued tx requests */
1092 if (flush && txo->pend_wrb_cnt)
1093 be_xmit_flush(adapter, txo);
1094
1095 return NETDEV_TX_OK;
1096 }
1097
1098 static int be_change_mtu(struct net_device *netdev, int new_mtu)
1099 {
1100 struct be_adapter *adapter = netdev_priv(netdev);
1101 struct device *dev = &adapter->pdev->dev;
1102
1103 if (new_mtu < BE_MIN_MTU || new_mtu > BE_MAX_MTU) {
1104 dev_info(dev, "MTU must be between %d and %d bytes\n",
1105 BE_MIN_MTU, BE_MAX_MTU);
1106 return -EINVAL;
1107 }
1108
1109 dev_info(dev, "MTU changed from %d to %d bytes\n",
1110 netdev->mtu, new_mtu);
1111 netdev->mtu = new_mtu;
1112 return 0;
1113 }
1114
1115 static inline bool be_in_all_promisc(struct be_adapter *adapter)
1116 {
1117 return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) ==
1118 BE_IF_FLAGS_ALL_PROMISCUOUS;
1119 }
1120
1121 static int be_set_vlan_promisc(struct be_adapter *adapter)
1122 {
1123 struct device *dev = &adapter->pdev->dev;
1124 int status;
1125
1126 if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS)
1127 return 0;
1128
1129 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, ON);
1130 if (!status) {
1131 dev_info(dev, "Enabled VLAN promiscuous mode\n");
1132 adapter->if_flags |= BE_IF_FLAGS_VLAN_PROMISCUOUS;
1133 } else {
1134 dev_err(dev, "Failed to enable VLAN promiscuous mode\n");
1135 }
1136 return status;
1137 }
1138
1139 static int be_clear_vlan_promisc(struct be_adapter *adapter)
1140 {
1141 struct device *dev = &adapter->pdev->dev;
1142 int status;
1143
1144 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, OFF);
1145 if (!status) {
1146 dev_info(dev, "Disabling VLAN promiscuous mode\n");
1147 adapter->if_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
1148 }
1149 return status;
1150 }
1151
1152 /*
1153 * A max of 64 (BE_NUM_VLANS_SUPPORTED) vlans can be configured in BE.
1154 * If the user configures more, place BE in vlan promiscuous mode.
1155 */
1156 static int be_vid_config(struct be_adapter *adapter)
1157 {
1158 struct device *dev = &adapter->pdev->dev;
1159 u16 vids[BE_NUM_VLANS_SUPPORTED];
1160 u16 num = 0, i = 0;
1161 int status = 0;
1162
1163 /* No need to further configure vids if in promiscuous mode */
1164 if (be_in_all_promisc(adapter))
1165 return 0;
1166
1167 if (adapter->vlans_added > be_max_vlans(adapter))
1168 return be_set_vlan_promisc(adapter);
1169
1170 /* Construct VLAN Table to give to HW */
1171 for_each_set_bit(i, adapter->vids, VLAN_N_VID)
1172 vids[num++] = cpu_to_le16(i);
1173
1174 status = be_cmd_vlan_config(adapter, adapter->if_handle, vids, num, 0);
1175 if (status) {
1176 dev_err(dev, "Setting HW VLAN filtering failed\n");
1177 /* Set to VLAN promisc mode as setting VLAN filter failed */
1178 if (addl_status(status) ==
1179 MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES)
1180 return be_set_vlan_promisc(adapter);
1181 } else if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS) {
1182 status = be_clear_vlan_promisc(adapter);
1183 }
1184 return status;
1185 }
1186
1187 static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
1188 {
1189 struct be_adapter *adapter = netdev_priv(netdev);
1190 int status = 0;
1191
1192 /* Packets with VID 0 are always received by Lancer by default */
1193 if (lancer_chip(adapter) && vid == 0)
1194 return status;
1195
1196 if (test_bit(vid, adapter->vids))
1197 return status;
1198
1199 set_bit(vid, adapter->vids);
1200 adapter->vlans_added++;
1201
1202 status = be_vid_config(adapter);
1203 if (status) {
1204 adapter->vlans_added--;
1205 clear_bit(vid, adapter->vids);
1206 }
1207
1208 return status;
1209 }
1210
1211 static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
1212 {
1213 struct be_adapter *adapter = netdev_priv(netdev);
1214
1215 /* Packets with VID 0 are always received by Lancer by default */
1216 if (lancer_chip(adapter) && vid == 0)
1217 return 0;
1218
1219 clear_bit(vid, adapter->vids);
1220 adapter->vlans_added--;
1221
1222 return be_vid_config(adapter);
1223 }
1224
1225 static void be_clear_all_promisc(struct be_adapter *adapter)
1226 {
1227 be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, OFF);
1228 adapter->if_flags &= ~BE_IF_FLAGS_ALL_PROMISCUOUS;
1229 }
1230
1231 static void be_set_all_promisc(struct be_adapter *adapter)
1232 {
1233 be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, ON);
1234 adapter->if_flags |= BE_IF_FLAGS_ALL_PROMISCUOUS;
1235 }
1236
1237 static void be_set_mc_promisc(struct be_adapter *adapter)
1238 {
1239 int status;
1240
1241 if (adapter->if_flags & BE_IF_FLAGS_MCAST_PROMISCUOUS)
1242 return;
1243
1244 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MCAST_PROMISCUOUS, ON);
1245 if (!status)
1246 adapter->if_flags |= BE_IF_FLAGS_MCAST_PROMISCUOUS;
1247 }
1248
1249 static void be_set_mc_list(struct be_adapter *adapter)
1250 {
1251 int status;
1252
1253 status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MULTICAST, ON);
1254 if (!status)
1255 adapter->if_flags &= ~BE_IF_FLAGS_MCAST_PROMISCUOUS;
1256 else
1257 be_set_mc_promisc(adapter);
1258 }
1259
1260 static void be_set_uc_list(struct be_adapter *adapter)
1261 {
1262 struct netdev_hw_addr *ha;
1263 int i = 1; /* First slot is claimed by the Primary MAC */
1264
1265 for (; adapter->uc_macs > 0; adapter->uc_macs--, i++)
1266 be_cmd_pmac_del(adapter, adapter->if_handle,
1267 adapter->pmac_id[i], 0);
1268
1269 if (netdev_uc_count(adapter->netdev) > be_max_uc(adapter)) {
1270 be_set_all_promisc(adapter);
1271 return;
1272 }
1273
1274 netdev_for_each_uc_addr(ha, adapter->netdev) {
1275 adapter->uc_macs++; /* First slot is for Primary MAC */
1276 be_cmd_pmac_add(adapter, (u8 *)ha->addr, adapter->if_handle,
1277 &adapter->pmac_id[adapter->uc_macs], 0);
1278 }
1279 }
1280
1281 static void be_clear_uc_list(struct be_adapter *adapter)
1282 {
1283 int i;
1284
1285 for (i = 1; i < (adapter->uc_macs + 1); i++)
1286 be_cmd_pmac_del(adapter, adapter->if_handle,
1287 adapter->pmac_id[i], 0);
1288 adapter->uc_macs = 0;
1289 }
1290
1291 static void be_set_rx_mode(struct net_device *netdev)
1292 {
1293 struct be_adapter *adapter = netdev_priv(netdev);
1294
1295 if (netdev->flags & IFF_PROMISC) {
1296 be_set_all_promisc(adapter);
1297 return;
1298 }
1299
1300 /* Interface was previously in promiscuous mode; disable it */
1301 if (be_in_all_promisc(adapter)) {
1302 be_clear_all_promisc(adapter);
1303 if (adapter->vlans_added)
1304 be_vid_config(adapter);
1305 }
1306
1307 /* Enable multicast promisc if num configured exceeds what we support */
1308 if (netdev->flags & IFF_ALLMULTI ||
1309 netdev_mc_count(netdev) > be_max_mc(adapter)) {
1310 be_set_mc_promisc(adapter);
1311 return;
1312 }
1313
1314 if (netdev_uc_count(netdev) != adapter->uc_macs)
1315 be_set_uc_list(adapter);
1316
1317 be_set_mc_list(adapter);
1318 }
1319
1320 static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
1321 {
1322 struct be_adapter *adapter = netdev_priv(netdev);
1323 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1324 int status;
1325
1326 if (!sriov_enabled(adapter))
1327 return -EPERM;
1328
1329 if (!is_valid_ether_addr(mac) || vf >= adapter->num_vfs)
1330 return -EINVAL;
1331
1332 /* Proceed further only if user provided MAC is different
1333 * from active MAC
1334 */
1335 if (ether_addr_equal(mac, vf_cfg->mac_addr))
1336 return 0;
1337
1338 if (BEx_chip(adapter)) {
1339 be_cmd_pmac_del(adapter, vf_cfg->if_handle, vf_cfg->pmac_id,
1340 vf + 1);
1341
1342 status = be_cmd_pmac_add(adapter, mac, vf_cfg->if_handle,
1343 &vf_cfg->pmac_id, vf + 1);
1344 } else {
1345 status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
1346 vf + 1);
1347 }
1348
1349 if (status) {
1350 dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed: %#x",
1351 mac, vf, status);
1352 return be_cmd_status(status);
1353 }
1354
1355 ether_addr_copy(vf_cfg->mac_addr, mac);
1356
1357 return 0;
1358 }
1359
1360 static int be_get_vf_config(struct net_device *netdev, int vf,
1361 struct ifla_vf_info *vi)
1362 {
1363 struct be_adapter *adapter = netdev_priv(netdev);
1364 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1365
1366 if (!sriov_enabled(adapter))
1367 return -EPERM;
1368
1369 if (vf >= adapter->num_vfs)
1370 return -EINVAL;
1371
1372 vi->vf = vf;
1373 vi->max_tx_rate = vf_cfg->tx_rate;
1374 vi->min_tx_rate = 0;
1375 vi->vlan = vf_cfg->vlan_tag & VLAN_VID_MASK;
1376 vi->qos = vf_cfg->vlan_tag >> VLAN_PRIO_SHIFT;
1377 memcpy(&vi->mac, vf_cfg->mac_addr, ETH_ALEN);
1378 vi->linkstate = adapter->vf_cfg[vf].plink_tracking;
1379
1380 return 0;
1381 }
1382
1383 static int be_set_vf_tvt(struct be_adapter *adapter, int vf, u16 vlan)
1384 {
1385 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1386 u16 vids[BE_NUM_VLANS_SUPPORTED];
1387 int vf_if_id = vf_cfg->if_handle;
1388 int status;
1389
1390 /* Enable Transparent VLAN Tagging */
1391 status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, vf_if_id, 0);
1392 if (status)
1393 return status;
1394
1395 /* Clear pre-programmed VLAN filters on VF if any, if TVT is enabled */
1396 vids[0] = 0;
1397 status = be_cmd_vlan_config(adapter, vf_if_id, vids, 1, vf + 1);
1398 if (!status)
1399 dev_info(&adapter->pdev->dev,
1400 "Cleared guest VLANs on VF%d", vf);
1401
1402 /* After TVT is enabled, disallow VFs to program VLAN filters */
1403 if (vf_cfg->privileges & BE_PRIV_FILTMGMT) {
1404 status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges &
1405 ~BE_PRIV_FILTMGMT, vf + 1);
1406 if (!status)
1407 vf_cfg->privileges &= ~BE_PRIV_FILTMGMT;
1408 }
1409 return 0;
1410 }
1411
1412 static int be_clear_vf_tvt(struct be_adapter *adapter, int vf)
1413 {
1414 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1415 struct device *dev = &adapter->pdev->dev;
1416 int status;
1417
1418 /* Reset Transparent VLAN Tagging. */
1419 status = be_cmd_set_hsw_config(adapter, BE_RESET_VLAN_TAG_ID, vf + 1,
1420 vf_cfg->if_handle, 0);
1421 if (status)
1422 return status;
1423
1424 /* Allow VFs to program VLAN filtering */
1425 if (!(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
1426 status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges |
1427 BE_PRIV_FILTMGMT, vf + 1);
1428 if (!status) {
1429 vf_cfg->privileges |= BE_PRIV_FILTMGMT;
1430 dev_info(dev, "VF%d: FILTMGMT priv enabled", vf);
1431 }
1432 }
1433
1434 dev_info(dev,
1435 "Disable/re-enable i/f in VM to clear Transparent VLAN tag");
1436 return 0;
1437 }
1438
1439 static int be_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
1440 {
1441 struct be_adapter *adapter = netdev_priv(netdev);
1442 struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1443 int status;
1444
1445 if (!sriov_enabled(adapter))
1446 return -EPERM;
1447
1448 if (vf >= adapter->num_vfs || vlan > 4095 || qos > 7)
1449 return -EINVAL;
1450
1451 if (vlan || qos) {
1452 vlan |= qos << VLAN_PRIO_SHIFT;
1453 status = be_set_vf_tvt(adapter, vf, vlan);
1454 } else {
1455 status = be_clear_vf_tvt(adapter, vf);
1456 }
1457
1458 if (status) {
1459 dev_err(&adapter->pdev->dev,
1460 "VLAN %d config on VF %d failed : %#x\n", vlan, vf,
1461 status);
1462 return be_cmd_status(status);
1463 }
1464
1465 vf_cfg->vlan_tag = vlan;
1466 return 0;
1467 }
1468
1469 static int be_set_vf_tx_rate(struct net_device *netdev, int vf,
1470 int min_tx_rate, int max_tx_rate)
1471 {
1472 struct be_adapter *adapter = netdev_priv(netdev);
1473 struct device *dev = &adapter->pdev->dev;
1474 int percent_rate, status = 0;
1475 u16 link_speed = 0;
1476 u8 link_status;
1477
1478 if (!sriov_enabled(adapter))
1479 return -EPERM;
1480
1481 if (vf >= adapter->num_vfs)
1482 return -EINVAL;
1483
1484 if (min_tx_rate)
1485 return -EINVAL;
1486
1487 if (!max_tx_rate)
1488 goto config_qos;
1489
1490 status = be_cmd_link_status_query(adapter, &link_speed,
1491 &link_status, 0);
1492 if (status)
1493 goto err;
1494
1495 if (!link_status) {
1496 dev_err(dev, "TX-rate setting not allowed when link is down\n");
1497 status = -ENETDOWN;
1498 goto err;
1499 }
1500
1501 if (max_tx_rate < 100 || max_tx_rate > link_speed) {
1502 dev_err(dev, "TX-rate must be between 100 and %d Mbps\n",
1503 link_speed);
1504 status = -EINVAL;
1505 goto err;
1506 }
1507
1508 /* On Skyhawk the QOS setting must be done only as a % value */
1509 percent_rate = link_speed / 100;
1510 if (skyhawk_chip(adapter) && (max_tx_rate % percent_rate)) {
1511 dev_err(dev, "TX-rate must be a multiple of %d Mbps\n",
1512 percent_rate);
1513 status = -EINVAL;
1514 goto err;
1515 }
1516
1517 config_qos:
1518 status = be_cmd_config_qos(adapter, max_tx_rate, link_speed, vf + 1);
1519 if (status)
1520 goto err;
1521
1522 adapter->vf_cfg[vf].tx_rate = max_tx_rate;
1523 return 0;
1524
1525 err:
1526 dev_err(dev, "TX-rate setting of %dMbps on VF%d failed\n",
1527 max_tx_rate, vf);
1528 return be_cmd_status(status);
1529 }
1530
1531 static int be_set_vf_link_state(struct net_device *netdev, int vf,
1532 int link_state)
1533 {
1534 struct be_adapter *adapter = netdev_priv(netdev);
1535 int status;
1536
1537 if (!sriov_enabled(adapter))
1538 return -EPERM;
1539
1540 if (vf >= adapter->num_vfs)
1541 return -EINVAL;
1542
1543 status = be_cmd_set_logical_link_config(adapter, link_state, vf+1);
1544 if (status) {
1545 dev_err(&adapter->pdev->dev,
1546 "Link state change on VF %d failed: %#x\n", vf, status);
1547 return be_cmd_status(status);
1548 }
1549
1550 adapter->vf_cfg[vf].plink_tracking = link_state;
1551
1552 return 0;
1553 }
1554
1555 static void be_aic_update(struct be_aic_obj *aic, u64 rx_pkts, u64 tx_pkts,
1556 ulong now)
1557 {
1558 aic->rx_pkts_prev = rx_pkts;
1559 aic->tx_reqs_prev = tx_pkts;
1560 aic->jiffies = now;
1561 }
1562
1563 static void be_eqd_update(struct be_adapter *adapter)
1564 {
1565 struct be_set_eqd set_eqd[MAX_EVT_QS];
1566 int eqd, i, num = 0, start;
1567 struct be_aic_obj *aic;
1568 struct be_eq_obj *eqo;
1569 struct be_rx_obj *rxo;
1570 struct be_tx_obj *txo;
1571 u64 rx_pkts, tx_pkts;
1572 ulong now;
1573 u32 pps, delta;
1574
1575 for_all_evt_queues(adapter, eqo, i) {
1576 aic = &adapter->aic_obj[eqo->idx];
1577 if (!aic->enable) {
1578 if (aic->jiffies)
1579 aic->jiffies = 0;
1580 eqd = aic->et_eqd;
1581 goto modify_eqd;
1582 }
1583
1584 rxo = &adapter->rx_obj[eqo->idx];
1585 do {
1586 start = u64_stats_fetch_begin_irq(&rxo->stats.sync);
1587 rx_pkts = rxo->stats.rx_pkts;
1588 } while (u64_stats_fetch_retry_irq(&rxo->stats.sync, start));
1589
1590 txo = &adapter->tx_obj[eqo->idx];
1591 do {
1592 start = u64_stats_fetch_begin_irq(&txo->stats.sync);
1593 tx_pkts = txo->stats.tx_reqs;
1594 } while (u64_stats_fetch_retry_irq(&txo->stats.sync, start));
1595
1596 /* Skip, if wrapped around or first calculation */
1597 now = jiffies;
1598 if (!aic->jiffies || time_before(now, aic->jiffies) ||
1599 rx_pkts < aic->rx_pkts_prev ||
1600 tx_pkts < aic->tx_reqs_prev) {
1601 be_aic_update(aic, rx_pkts, tx_pkts, now);
1602 continue;
1603 }
1604
1605 delta = jiffies_to_msecs(now - aic->jiffies);
1606 pps = (((u32)(rx_pkts - aic->rx_pkts_prev) * 1000) / delta) +
1607 (((u32)(tx_pkts - aic->tx_reqs_prev) * 1000) / delta);
1608 eqd = (pps / 15000) << 2;
1609
1610 if (eqd < 8)
1611 eqd = 0;
1612 eqd = min_t(u32, eqd, aic->max_eqd);
1613 eqd = max_t(u32, eqd, aic->min_eqd);
1614
1615 be_aic_update(aic, rx_pkts, tx_pkts, now);
1616 modify_eqd:
1617 if (eqd != aic->prev_eqd) {
1618 set_eqd[num].delay_multiplier = (eqd * 65)/100;
1619 set_eqd[num].eq_id = eqo->q.id;
1620 aic->prev_eqd = eqd;
1621 num++;
1622 }
1623 }
1624
1625 if (num)
1626 be_cmd_modify_eqd(adapter, set_eqd, num);
1627 }
1628
1629 static void be_rx_stats_update(struct be_rx_obj *rxo,
1630 struct be_rx_compl_info *rxcp)
1631 {
1632 struct be_rx_stats *stats = rx_stats(rxo);
1633
1634 u64_stats_update_begin(&stats->sync);
1635 stats->rx_compl++;
1636 stats->rx_bytes += rxcp->pkt_size;
1637 stats->rx_pkts++;
1638 if (rxcp->pkt_type == BE_MULTICAST_PACKET)
1639 stats->rx_mcast_pkts++;
1640 if (rxcp->err)
1641 stats->rx_compl_err++;
1642 u64_stats_update_end(&stats->sync);
1643 }
1644
1645 static inline bool csum_passed(struct be_rx_compl_info *rxcp)
1646 {
1647 /* L4 checksum is not reliable for non TCP/UDP packets.
1648 * Also ignore ipcksm for ipv6 pkts
1649 */
1650 return (rxcp->tcpf || rxcp->udpf) && rxcp->l4_csum &&
1651 (rxcp->ip_csum || rxcp->ipv6) && !rxcp->err;
1652 }
1653
1654 static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo)
1655 {
1656 struct be_adapter *adapter = rxo->adapter;
1657 struct be_rx_page_info *rx_page_info;
1658 struct be_queue_info *rxq = &rxo->q;
1659 u16 frag_idx = rxq->tail;
1660
1661 rx_page_info = &rxo->page_info_tbl[frag_idx];
1662 BUG_ON(!rx_page_info->page);
1663
1664 if (rx_page_info->last_frag) {
1665 dma_unmap_page(&adapter->pdev->dev,
1666 dma_unmap_addr(rx_page_info, bus),
1667 adapter->big_page_size, DMA_FROM_DEVICE);
1668 rx_page_info->last_frag = false;
1669 } else {
1670 dma_sync_single_for_cpu(&adapter->pdev->dev,
1671 dma_unmap_addr(rx_page_info, bus),
1672 rx_frag_size, DMA_FROM_DEVICE);
1673 }
1674
1675 queue_tail_inc(rxq);
1676 atomic_dec(&rxq->used);
1677 return rx_page_info;
1678 }
1679
1680 /* Throwaway the data in the Rx completion */
1681 static void be_rx_compl_discard(struct be_rx_obj *rxo,
1682 struct be_rx_compl_info *rxcp)
1683 {
1684 struct be_rx_page_info *page_info;
1685 u16 i, num_rcvd = rxcp->num_rcvd;
1686
1687 for (i = 0; i < num_rcvd; i++) {
1688 page_info = get_rx_page_info(rxo);
1689 put_page(page_info->page);
1690 memset(page_info, 0, sizeof(*page_info));
1691 }
1692 }
1693
1694 /*
1695 * skb_fill_rx_data forms a complete skb for an ether frame
1696 * indicated by rxcp.
1697 */
1698 static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
1699 struct be_rx_compl_info *rxcp)
1700 {
1701 struct be_rx_page_info *page_info;
1702 u16 i, j;
1703 u16 hdr_len, curr_frag_len, remaining;
1704 u8 *start;
1705
1706 page_info = get_rx_page_info(rxo);
1707 start = page_address(page_info->page) + page_info->page_offset;
1708 prefetch(start);
1709
1710 /* Copy data in the first descriptor of this completion */
1711 curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
1712
1713 skb->len = curr_frag_len;
1714 if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
1715 memcpy(skb->data, start, curr_frag_len);
1716 /* Complete packet has now been moved to data */
1717 put_page(page_info->page);
1718 skb->data_len = 0;
1719 skb->tail += curr_frag_len;
1720 } else {
1721 hdr_len = ETH_HLEN;
1722 memcpy(skb->data, start, hdr_len);
1723 skb_shinfo(skb)->nr_frags = 1;
1724 skb_frag_set_page(skb, 0, page_info->page);
1725 skb_shinfo(skb)->frags[0].page_offset =
1726 page_info->page_offset + hdr_len;
1727 skb_frag_size_set(&skb_shinfo(skb)->frags[0],
1728 curr_frag_len - hdr_len);
1729 skb->data_len = curr_frag_len - hdr_len;
1730 skb->truesize += rx_frag_size;
1731 skb->tail += hdr_len;
1732 }
1733 page_info->page = NULL;
1734
1735 if (rxcp->pkt_size <= rx_frag_size) {
1736 BUG_ON(rxcp->num_rcvd != 1);
1737 return;
1738 }
1739
1740 /* More frags present for this completion */
1741 remaining = rxcp->pkt_size - curr_frag_len;
1742 for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
1743 page_info = get_rx_page_info(rxo);
1744 curr_frag_len = min(remaining, rx_frag_size);
1745
1746 /* Coalesce all frags from the same physical page in one slot */
1747 if (page_info->page_offset == 0) {
1748 /* Fresh page */
1749 j++;
1750 skb_frag_set_page(skb, j, page_info->page);
1751 skb_shinfo(skb)->frags[j].page_offset =
1752 page_info->page_offset;
1753 skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1754 skb_shinfo(skb)->nr_frags++;
1755 } else {
1756 put_page(page_info->page);
1757 }
1758
1759 skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1760 skb->len += curr_frag_len;
1761 skb->data_len += curr_frag_len;
1762 skb->truesize += rx_frag_size;
1763 remaining -= curr_frag_len;
1764 page_info->page = NULL;
1765 }
1766 BUG_ON(j > MAX_SKB_FRAGS);
1767 }
1768
1769 /* Process the RX completion indicated by rxcp when GRO is disabled */
1770 static void be_rx_compl_process(struct be_rx_obj *rxo, struct napi_struct *napi,
1771 struct be_rx_compl_info *rxcp)
1772 {
1773 struct be_adapter *adapter = rxo->adapter;
1774 struct net_device *netdev = adapter->netdev;
1775 struct sk_buff *skb;
1776
1777 skb = netdev_alloc_skb_ip_align(netdev, BE_RX_SKB_ALLOC_SIZE);
1778 if (unlikely(!skb)) {
1779 rx_stats(rxo)->rx_drops_no_skbs++;
1780 be_rx_compl_discard(rxo, rxcp);
1781 return;
1782 }
1783
1784 skb_fill_rx_data(rxo, skb, rxcp);
1785
1786 if (likely((netdev->features & NETIF_F_RXCSUM) && csum_passed(rxcp)))
1787 skb->ip_summed = CHECKSUM_UNNECESSARY;
1788 else
1789 skb_checksum_none_assert(skb);
1790
1791 skb->protocol = eth_type_trans(skb, netdev);
1792 skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
1793 if (netdev->features & NETIF_F_RXHASH)
1794 skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
1795
1796 skb->csum_level = rxcp->tunneled;
1797 skb_mark_napi_id(skb, napi);
1798
1799 if (rxcp->vlanf)
1800 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
1801
1802 netif_receive_skb(skb);
1803 }
1804
1805 /* Process the RX completion indicated by rxcp when GRO is enabled */
1806 static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
1807 struct napi_struct *napi,
1808 struct be_rx_compl_info *rxcp)
1809 {
1810 struct be_adapter *adapter = rxo->adapter;
1811 struct be_rx_page_info *page_info;
1812 struct sk_buff *skb = NULL;
1813 u16 remaining, curr_frag_len;
1814 u16 i, j;
1815
1816 skb = napi_get_frags(napi);
1817 if (!skb) {
1818 be_rx_compl_discard(rxo, rxcp);
1819 return;
1820 }
1821
1822 remaining = rxcp->pkt_size;
1823 for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
1824 page_info = get_rx_page_info(rxo);
1825
1826 curr_frag_len = min(remaining, rx_frag_size);
1827
1828 /* Coalesce all frags from the same physical page in one slot */
1829 if (i == 0 || page_info->page_offset == 0) {
1830 /* First frag or Fresh page */
1831 j++;
1832 skb_frag_set_page(skb, j, page_info->page);
1833 skb_shinfo(skb)->frags[j].page_offset =
1834 page_info->page_offset;
1835 skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1836 } else {
1837 put_page(page_info->page);
1838 }
1839 skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1840 skb->truesize += rx_frag_size;
1841 remaining -= curr_frag_len;
1842 memset(page_info, 0, sizeof(*page_info));
1843 }
1844 BUG_ON(j > MAX_SKB_FRAGS);
1845
1846 skb_shinfo(skb)->nr_frags = j + 1;
1847 skb->len = rxcp->pkt_size;
1848 skb->data_len = rxcp->pkt_size;
1849 skb->ip_summed = CHECKSUM_UNNECESSARY;
1850 skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
1851 if (adapter->netdev->features & NETIF_F_RXHASH)
1852 skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
1853
1854 skb->csum_level = rxcp->tunneled;
1855 skb_mark_napi_id(skb, napi);
1856
1857 if (rxcp->vlanf)
1858 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
1859
1860 napi_gro_frags(napi);
1861 }
1862
1863 static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
1864 struct be_rx_compl_info *rxcp)
1865 {
1866 rxcp->pkt_size = GET_RX_COMPL_V1_BITS(pktsize, compl);
1867 rxcp->vlanf = GET_RX_COMPL_V1_BITS(vtp, compl);
1868 rxcp->err = GET_RX_COMPL_V1_BITS(err, compl);
1869 rxcp->tcpf = GET_RX_COMPL_V1_BITS(tcpf, compl);
1870 rxcp->udpf = GET_RX_COMPL_V1_BITS(udpf, compl);
1871 rxcp->ip_csum = GET_RX_COMPL_V1_BITS(ipcksm, compl);
1872 rxcp->l4_csum = GET_RX_COMPL_V1_BITS(l4_cksm, compl);
1873 rxcp->ipv6 = GET_RX_COMPL_V1_BITS(ip_version, compl);
1874 rxcp->num_rcvd = GET_RX_COMPL_V1_BITS(numfrags, compl);
1875 rxcp->pkt_type = GET_RX_COMPL_V1_BITS(cast_enc, compl);
1876 rxcp->rss_hash = GET_RX_COMPL_V1_BITS(rsshash, compl);
1877 if (rxcp->vlanf) {
1878 rxcp->qnq = GET_RX_COMPL_V1_BITS(qnq, compl);
1879 rxcp->vlan_tag = GET_RX_COMPL_V1_BITS(vlan_tag, compl);
1880 }
1881 rxcp->port = GET_RX_COMPL_V1_BITS(port, compl);
1882 rxcp->tunneled =
1883 GET_RX_COMPL_V1_BITS(tunneled, compl);
1884 }
1885
1886 static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
1887 struct be_rx_compl_info *rxcp)
1888 {
1889 rxcp->pkt_size = GET_RX_COMPL_V0_BITS(pktsize, compl);
1890 rxcp->vlanf = GET_RX_COMPL_V0_BITS(vtp, compl);
1891 rxcp->err = GET_RX_COMPL_V0_BITS(err, compl);
1892 rxcp->tcpf = GET_RX_COMPL_V0_BITS(tcpf, compl);
1893 rxcp->udpf = GET_RX_COMPL_V0_BITS(udpf, compl);
1894 rxcp->ip_csum = GET_RX_COMPL_V0_BITS(ipcksm, compl);
1895 rxcp->l4_csum = GET_RX_COMPL_V0_BITS(l4_cksm, compl);
1896 rxcp->ipv6 = GET_RX_COMPL_V0_BITS(ip_version, compl);
1897 rxcp->num_rcvd = GET_RX_COMPL_V0_BITS(numfrags, compl);
1898 rxcp->pkt_type = GET_RX_COMPL_V0_BITS(cast_enc, compl);
1899 rxcp->rss_hash = GET_RX_COMPL_V0_BITS(rsshash, compl);
1900 if (rxcp->vlanf) {
1901 rxcp->qnq = GET_RX_COMPL_V0_BITS(qnq, compl);
1902 rxcp->vlan_tag = GET_RX_COMPL_V0_BITS(vlan_tag, compl);
1903 }
1904 rxcp->port = GET_RX_COMPL_V0_BITS(port, compl);
1905 rxcp->ip_frag = GET_RX_COMPL_V0_BITS(ip_frag, compl);
1906 }
1907
1908 static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
1909 {
1910 struct be_eth_rx_compl *compl = queue_tail_node(&rxo->cq);
1911 struct be_rx_compl_info *rxcp = &rxo->rxcp;
1912 struct be_adapter *adapter = rxo->adapter;
1913
1914 /* For checking the valid bit it is Ok to use either definition as the
1915 * valid bit is at the same position in both v0 and v1 Rx compl */
1916 if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0)
1917 return NULL;
1918
1919 rmb();
1920 be_dws_le_to_cpu(compl, sizeof(*compl));
1921
1922 if (adapter->be3_native)
1923 be_parse_rx_compl_v1(compl, rxcp);
1924 else
1925 be_parse_rx_compl_v0(compl, rxcp);
1926
1927 if (rxcp->ip_frag)
1928 rxcp->l4_csum = 0;
1929
1930 if (rxcp->vlanf) {
1931 /* In QNQ modes, if qnq bit is not set, then the packet was
1932 * tagged only with the transparent outer vlan-tag and must
1933 * not be treated as a vlan packet by host
1934 */
1935 if (be_is_qnq_mode(adapter) && !rxcp->qnq)
1936 rxcp->vlanf = 0;
1937
1938 if (!lancer_chip(adapter))
1939 rxcp->vlan_tag = swab16(rxcp->vlan_tag);
1940
1941 if (adapter->pvid == (rxcp->vlan_tag & VLAN_VID_MASK) &&
1942 !test_bit(rxcp->vlan_tag, adapter->vids))
1943 rxcp->vlanf = 0;
1944 }
1945
1946 /* As the compl has been parsed, reset it; we wont touch it again */
1947 compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;
1948
1949 queue_tail_inc(&rxo->cq);
1950 return rxcp;
1951 }
1952
1953 static inline struct page *be_alloc_pages(u32 size, gfp_t gfp)
1954 {
1955 u32 order = get_order(size);
1956
1957 if (order > 0)
1958 gfp |= __GFP_COMP;
1959 return alloc_pages(gfp, order);
1960 }
1961
1962 /*
1963 * Allocate a page, split it to fragments of size rx_frag_size and post as
1964 * receive buffers to BE
1965 */
1966 static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp, u32 frags_needed)
1967 {
1968 struct be_adapter *adapter = rxo->adapter;
1969 struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
1970 struct be_queue_info *rxq = &rxo->q;
1971 struct page *pagep = NULL;
1972 struct device *dev = &adapter->pdev->dev;
1973 struct be_eth_rx_d *rxd;
1974 u64 page_dmaaddr = 0, frag_dmaaddr;
1975 u32 posted, page_offset = 0, notify = 0;
1976
1977 page_info = &rxo->page_info_tbl[rxq->head];
1978 for (posted = 0; posted < frags_needed && !page_info->page; posted++) {
1979 if (!pagep) {
1980 pagep = be_alloc_pages(adapter->big_page_size, gfp);
1981 if (unlikely(!pagep)) {
1982 rx_stats(rxo)->rx_post_fail++;
1983 break;
1984 }
1985 page_dmaaddr = dma_map_page(dev, pagep, 0,
1986 adapter->big_page_size,
1987 DMA_FROM_DEVICE);
1988 if (dma_mapping_error(dev, page_dmaaddr)) {
1989 put_page(pagep);
1990 pagep = NULL;
1991 adapter->drv_stats.dma_map_errors++;
1992 break;
1993 }
1994 page_offset = 0;
1995 } else {
1996 get_page(pagep);
1997 page_offset += rx_frag_size;
1998 }
1999 page_info->page_offset = page_offset;
2000 page_info->page = pagep;
2001
2002 rxd = queue_head_node(rxq);
2003 frag_dmaaddr = page_dmaaddr + page_info->page_offset;
2004 rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
2005 rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
2006
2007 /* Any space left in the current big page for another frag? */
2008 if ((page_offset + rx_frag_size + rx_frag_size) >
2009 adapter->big_page_size) {
2010 pagep = NULL;
2011 page_info->last_frag = true;
2012 dma_unmap_addr_set(page_info, bus, page_dmaaddr);
2013 } else {
2014 dma_unmap_addr_set(page_info, bus, frag_dmaaddr);
2015 }
2016
2017 prev_page_info = page_info;
2018 queue_head_inc(rxq);
2019 page_info = &rxo->page_info_tbl[rxq->head];
2020 }
2021
2022 /* Mark the last frag of a page when we break out of the above loop
2023 * with no more slots available in the RXQ
2024 */
2025 if (pagep) {
2026 prev_page_info->last_frag = true;
2027 dma_unmap_addr_set(prev_page_info, bus, page_dmaaddr);
2028 }
2029
2030 if (posted) {
2031 atomic_add(posted, &rxq->used);
2032 if (rxo->rx_post_starved)
2033 rxo->rx_post_starved = false;
2034 do {
2035 notify = min(256u, posted);
2036 be_rxq_notify(adapter, rxq->id, notify);
2037 posted -= notify;
2038 } while (posted);
2039 } else if (atomic_read(&rxq->used) == 0) {
2040 /* Let be_worker replenish when memory is available */
2041 rxo->rx_post_starved = true;
2042 }
2043 }
2044
2045 static struct be_eth_tx_compl *be_tx_compl_get(struct be_queue_info *tx_cq)
2046 {
2047 struct be_eth_tx_compl *txcp = queue_tail_node(tx_cq);
2048
2049 if (txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
2050 return NULL;
2051
2052 rmb();
2053 be_dws_le_to_cpu(txcp, sizeof(*txcp));
2054
2055 txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
2056
2057 queue_tail_inc(tx_cq);
2058 return txcp;
2059 }
2060
2061 static u16 be_tx_compl_process(struct be_adapter *adapter,
2062 struct be_tx_obj *txo, u16 last_index)
2063 {
2064 struct sk_buff **sent_skbs = txo->sent_skb_list;
2065 struct be_queue_info *txq = &txo->q;
2066 u16 frag_index, num_wrbs = 0;
2067 struct sk_buff *skb = NULL;
2068 bool unmap_skb_hdr = false;
2069 struct be_eth_wrb *wrb;
2070
2071 do {
2072 if (sent_skbs[txq->tail]) {
2073 /* Free skb from prev req */
2074 if (skb)
2075 dev_consume_skb_any(skb);
2076 skb = sent_skbs[txq->tail];
2077 sent_skbs[txq->tail] = NULL;
2078 queue_tail_inc(txq); /* skip hdr wrb */
2079 num_wrbs++;
2080 unmap_skb_hdr = true;
2081 }
2082 wrb = queue_tail_node(txq);
2083 frag_index = txq->tail;
2084 unmap_tx_frag(&adapter->pdev->dev, wrb,
2085 (unmap_skb_hdr && skb_headlen(skb)));
2086 unmap_skb_hdr = false;
2087 queue_tail_inc(txq);
2088 num_wrbs++;
2089 } while (frag_index != last_index);
2090 dev_consume_skb_any(skb);
2091
2092 return num_wrbs;
2093 }
2094
2095 /* Return the number of events in the event queue */
2096 static inline int events_get(struct be_eq_obj *eqo)
2097 {
2098 struct be_eq_entry *eqe;
2099 int num = 0;
2100
2101 do {
2102 eqe = queue_tail_node(&eqo->q);
2103 if (eqe->evt == 0)
2104 break;
2105
2106 rmb();
2107 eqe->evt = 0;
2108 num++;
2109 queue_tail_inc(&eqo->q);
2110 } while (true);
2111
2112 return num;
2113 }
2114
2115 /* Leaves the EQ is disarmed state */
2116 static void be_eq_clean(struct be_eq_obj *eqo)
2117 {
2118 int num = events_get(eqo);
2119
2120 be_eq_notify(eqo->adapter, eqo->q.id, false, true, num);
2121 }
2122
2123 static void be_rx_cq_clean(struct be_rx_obj *rxo)
2124 {
2125 struct be_rx_page_info *page_info;
2126 struct be_queue_info *rxq = &rxo->q;
2127 struct be_queue_info *rx_cq = &rxo->cq;
2128 struct be_rx_compl_info *rxcp;
2129 struct be_adapter *adapter = rxo->adapter;
2130 int flush_wait = 0;
2131
2132 /* Consume pending rx completions.
2133 * Wait for the flush completion (identified by zero num_rcvd)
2134 * to arrive. Notify CQ even when there are no more CQ entries
2135 * for HW to flush partially coalesced CQ entries.
2136 * In Lancer, there is no need to wait for flush compl.
2137 */
2138 for (;;) {
2139 rxcp = be_rx_compl_get(rxo);
2140 if (!rxcp) {
2141 if (lancer_chip(adapter))
2142 break;
2143
2144 if (flush_wait++ > 10 || be_hw_error(adapter)) {
2145 dev_warn(&adapter->pdev->dev,
2146 "did not receive flush compl\n");
2147 break;
2148 }
2149 be_cq_notify(adapter, rx_cq->id, true, 0);
2150 mdelay(1);
2151 } else {
2152 be_rx_compl_discard(rxo, rxcp);
2153 be_cq_notify(adapter, rx_cq->id, false, 1);
2154 if (rxcp->num_rcvd == 0)
2155 break;
2156 }
2157 }
2158
2159 /* After cleanup, leave the CQ in unarmed state */
2160 be_cq_notify(adapter, rx_cq->id, false, 0);
2161
2162 /* Then free posted rx buffers that were not used */
2163 while (atomic_read(&rxq->used) > 0) {
2164 page_info = get_rx_page_info(rxo);
2165 put_page(page_info->page);
2166 memset(page_info, 0, sizeof(*page_info));
2167 }
2168 BUG_ON(atomic_read(&rxq->used));
2169 rxq->tail = 0;
2170 rxq->head = 0;
2171 }
2172
2173 static void be_tx_compl_clean(struct be_adapter *adapter)
2174 {
2175 u16 end_idx, notified_idx, cmpl = 0, timeo = 0, num_wrbs = 0;
2176 struct device *dev = &adapter->pdev->dev;
2177 struct be_tx_obj *txo;
2178 struct be_queue_info *txq;
2179 struct be_eth_tx_compl *txcp;
2180 int i, pending_txqs;
2181
2182 /* Stop polling for compls when HW has been silent for 10ms */
2183 do {
2184 pending_txqs = adapter->num_tx_qs;
2185
2186 for_all_tx_queues(adapter, txo, i) {
2187 cmpl = 0;
2188 num_wrbs = 0;
2189 txq = &txo->q;
2190 while ((txcp = be_tx_compl_get(&txo->cq))) {
2191 end_idx = GET_TX_COMPL_BITS(wrb_index, txcp);
2192 num_wrbs += be_tx_compl_process(adapter, txo,
2193 end_idx);
2194 cmpl++;
2195 }
2196 if (cmpl) {
2197 be_cq_notify(adapter, txo->cq.id, false, cmpl);
2198 atomic_sub(num_wrbs, &txq->used);
2199 timeo = 0;
2200 }
2201 if (atomic_read(&txq->used) == txo->pend_wrb_cnt)
2202 pending_txqs--;
2203 }
2204
2205 if (pending_txqs == 0 || ++timeo > 10 || be_hw_error(adapter))
2206 break;
2207
2208 mdelay(1);
2209 } while (true);
2210
2211 /* Free enqueued TX that was never notified to HW */
2212 for_all_tx_queues(adapter, txo, i) {
2213 txq = &txo->q;
2214
2215 if (atomic_read(&txq->used)) {
2216 dev_info(dev, "txq%d: cleaning %d pending tx-wrbs\n",
2217 i, atomic_read(&txq->used));
2218 notified_idx = txq->tail;
2219 end_idx = txq->tail;
2220 index_adv(&end_idx, atomic_read(&txq->used) - 1,
2221 txq->len);
2222 /* Use the tx-compl process logic to handle requests
2223 * that were not sent to the HW.
2224 */
2225 num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
2226 atomic_sub(num_wrbs, &txq->used);
2227 BUG_ON(atomic_read(&txq->used));
2228 txo->pend_wrb_cnt = 0;
2229 /* Since hw was never notified of these requests,
2230 * reset TXQ indices
2231 */
2232 txq->head = notified_idx;
2233 txq->tail = notified_idx;
2234 }
2235 }
2236 }
2237
2238 static void be_evt_queues_destroy(struct be_adapter *adapter)
2239 {
2240 struct be_eq_obj *eqo;
2241 int i;
2242
2243 for_all_evt_queues(adapter, eqo, i) {
2244 if (eqo->q.created) {
2245 be_eq_clean(eqo);
2246 be_cmd_q_destroy(adapter, &eqo->q, QTYPE_EQ);
2247 napi_hash_del(&eqo->napi);
2248 netif_napi_del(&eqo->napi);
2249 }
2250 be_queue_free(adapter, &eqo->q);
2251 }
2252 }
2253
2254 static int be_evt_queues_create(struct be_adapter *adapter)
2255 {
2256 struct be_queue_info *eq;
2257 struct be_eq_obj *eqo;
2258 struct be_aic_obj *aic;
2259 int i, rc;
2260
2261 adapter->num_evt_qs = min_t(u16, num_irqs(adapter),
2262 adapter->cfg_num_qs);
2263
2264 for_all_evt_queues(adapter, eqo, i) {
2265 netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
2266 BE_NAPI_WEIGHT);
2267 napi_hash_add(&eqo->napi);
2268 aic = &adapter->aic_obj[i];
2269 eqo->adapter = adapter;
2270 eqo->idx = i;
2271 aic->max_eqd = BE_MAX_EQD;
2272 aic->enable = true;
2273
2274 eq = &eqo->q;
2275 rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
2276 sizeof(struct be_eq_entry));
2277 if (rc)
2278 return rc;
2279
2280 rc = be_cmd_eq_create(adapter, eqo);
2281 if (rc)
2282 return rc;
2283 }
2284 return 0;
2285 }
2286
2287 static void be_mcc_queues_destroy(struct be_adapter *adapter)
2288 {
2289 struct be_queue_info *q;
2290
2291 q = &adapter->mcc_obj.q;
2292 if (q->created)
2293 be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
2294 be_queue_free(adapter, q);
2295
2296 q = &adapter->mcc_obj.cq;
2297 if (q->created)
2298 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2299 be_queue_free(adapter, q);
2300 }
2301
2302 /* Must be called only after TX qs are created as MCC shares TX EQ */
2303 static int be_mcc_queues_create(struct be_adapter *adapter)
2304 {
2305 struct be_queue_info *q, *cq;
2306
2307 cq = &adapter->mcc_obj.cq;
2308 if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
2309 sizeof(struct be_mcc_compl)))
2310 goto err;
2311
2312 /* Use the default EQ for MCC completions */
2313 if (be_cmd_cq_create(adapter, cq, &mcc_eqo(adapter)->q, true, 0))
2314 goto mcc_cq_free;
2315
2316 q = &adapter->mcc_obj.q;
2317 if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
2318 goto mcc_cq_destroy;
2319
2320 if (be_cmd_mccq_create(adapter, q, cq))
2321 goto mcc_q_free;
2322
2323 return 0;
2324
2325 mcc_q_free:
2326 be_queue_free(adapter, q);
2327 mcc_cq_destroy:
2328 be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
2329 mcc_cq_free:
2330 be_queue_free(adapter, cq);
2331 err:
2332 return -1;
2333 }
2334
2335 static void be_tx_queues_destroy(struct be_adapter *adapter)
2336 {
2337 struct be_queue_info *q;
2338 struct be_tx_obj *txo;
2339 u8 i;
2340
2341 for_all_tx_queues(adapter, txo, i) {
2342 q = &txo->q;
2343 if (q->created)
2344 be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
2345 be_queue_free(adapter, q);
2346
2347 q = &txo->cq;
2348 if (q->created)
2349 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2350 be_queue_free(adapter, q);
2351 }
2352 }
2353
2354 static int be_tx_qs_create(struct be_adapter *adapter)
2355 {
2356 struct be_queue_info *cq, *eq;
2357 struct be_tx_obj *txo;
2358 int status, i;
2359
2360 adapter->num_tx_qs = min(adapter->num_evt_qs, be_max_txqs(adapter));
2361
2362 for_all_tx_queues(adapter, txo, i) {
2363 cq = &txo->cq;
2364 status = be_queue_alloc(adapter, cq, TX_CQ_LEN,
2365 sizeof(struct be_eth_tx_compl));
2366 if (status)
2367 return status;
2368
2369 u64_stats_init(&txo->stats.sync);
2370 u64_stats_init(&txo->stats.sync_compl);
2371
2372 /* If num_evt_qs is less than num_tx_qs, then more than
2373 * one txq share an eq
2374 */
2375 eq = &adapter->eq_obj[i % adapter->num_evt_qs].q;
2376 status = be_cmd_cq_create(adapter, cq, eq, false, 3);
2377 if (status)
2378 return status;
2379
2380 status = be_queue_alloc(adapter, &txo->q, TX_Q_LEN,
2381 sizeof(struct be_eth_wrb));
2382 if (status)
2383 return status;
2384
2385 status = be_cmd_txq_create(adapter, txo);
2386 if (status)
2387 return status;
2388 }
2389
2390 dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n",
2391 adapter->num_tx_qs);
2392 return 0;
2393 }
2394
2395 static void be_rx_cqs_destroy(struct be_adapter *adapter)
2396 {
2397 struct be_queue_info *q;
2398 struct be_rx_obj *rxo;
2399 int i;
2400
2401 for_all_rx_queues(adapter, rxo, i) {
2402 q = &rxo->cq;
2403 if (q->created)
2404 be_cmd_q_destroy(adapter, q, QTYPE_CQ);
2405 be_queue_free(adapter, q);
2406 }
2407 }
2408
2409 static int be_rx_cqs_create(struct be_adapter *adapter)
2410 {
2411 struct be_queue_info *eq, *cq;
2412 struct be_rx_obj *rxo;
2413 int rc, i;
2414
2415 /* We can create as many RSS rings as there are EQs. */
2416 adapter->num_rx_qs = adapter->num_evt_qs;
2417
2418 /* We'll use RSS only if atleast 2 RSS rings are supported.
2419 * When RSS is used, we'll need a default RXQ for non-IP traffic.
2420 */
2421 if (adapter->num_rx_qs > 1)
2422 adapter->num_rx_qs++;
2423
2424 adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
2425 for_all_rx_queues(adapter, rxo, i) {
2426 rxo->adapter = adapter;
2427 cq = &rxo->cq;
2428 rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
2429 sizeof(struct be_eth_rx_compl));
2430 if (rc)
2431 return rc;
2432
2433 u64_stats_init(&rxo->stats.sync);
2434 eq = &adapter->eq_obj[i % adapter->num_evt_qs].q;
2435 rc = be_cmd_cq_create(adapter, cq, eq, false, 3);
2436 if (rc)
2437 return rc;
2438 }
2439
2440 dev_info(&adapter->pdev->dev,
2441 "created %d RSS queue(s) and 1 default RX queue\n",
2442 adapter->num_rx_qs - 1);
2443 return 0;
2444 }
2445
2446 static irqreturn_t be_intx(int irq, void *dev)
2447 {
2448 struct be_eq_obj *eqo = dev;
2449 struct be_adapter *adapter = eqo->adapter;
2450 int num_evts = 0;
2451
2452 /* IRQ is not expected when NAPI is scheduled as the EQ
2453 * will not be armed.
2454 * But, this can happen on Lancer INTx where it takes
2455 * a while to de-assert INTx or in BE2 where occasionaly
2456 * an interrupt may be raised even when EQ is unarmed.
2457 * If NAPI is already scheduled, then counting & notifying
2458 * events will orphan them.
2459 */
2460 if (napi_schedule_prep(&eqo->napi)) {
2461 num_evts = events_get(eqo);
2462 __napi_schedule(&eqo->napi);
2463 if (num_evts)
2464 eqo->spurious_intr = 0;
2465 }
2466 be_eq_notify(adapter, eqo->q.id, false, true, num_evts);
2467
2468 /* Return IRQ_HANDLED only for the the first spurious intr
2469 * after a valid intr to stop the kernel from branding
2470 * this irq as a bad one!
2471 */
2472 if (num_evts || eqo->spurious_intr++ == 0)
2473 return IRQ_HANDLED;
2474 else
2475 return IRQ_NONE;
2476 }
2477
2478 static irqreturn_t be_msix(int irq, void *dev)
2479 {
2480 struct be_eq_obj *eqo = dev;
2481
2482 be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0);
2483 napi_schedule(&eqo->napi);
2484 return IRQ_HANDLED;
2485 }
2486
2487 static inline bool do_gro(struct be_rx_compl_info *rxcp)
2488 {
2489 return (rxcp->tcpf && !rxcp->err && rxcp->l4_csum) ? true : false;
2490 }
2491
2492 static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,
2493 int budget, int polling)
2494 {
2495 struct be_adapter *adapter = rxo->adapter;
2496 struct be_queue_info *rx_cq = &rxo->cq;
2497 struct be_rx_compl_info *rxcp;
2498 u32 work_done;
2499 u32 frags_consumed = 0;
2500
2501 for (work_done = 0; work_done < budget; work_done++) {
2502 rxcp = be_rx_compl_get(rxo);
2503 if (!rxcp)
2504 break;
2505
2506 /* Is it a flush compl that has no data */
2507 if (unlikely(rxcp->num_rcvd == 0))
2508 goto loop_continue;
2509
2510 /* Discard compl with partial DMA Lancer B0 */
2511 if (unlikely(!rxcp->pkt_size)) {
2512 be_rx_compl_discard(rxo, rxcp);
2513 goto loop_continue;
2514 }
2515
2516 /* On BE drop pkts that arrive due to imperfect filtering in
2517 * promiscuous mode on some skews
2518 */
2519 if (unlikely(rxcp->port != adapter->port_num &&
2520 !lancer_chip(adapter))) {
2521 be_rx_compl_discard(rxo, rxcp);
2522 goto loop_continue;
2523 }
2524
2525 /* Don't do gro when we're busy_polling */
2526 if (do_gro(rxcp) && polling != BUSY_POLLING)
2527 be_rx_compl_process_gro(rxo, napi, rxcp);
2528 else
2529 be_rx_compl_process(rxo, napi, rxcp);
2530
2531 loop_continue:
2532 frags_consumed += rxcp->num_rcvd;
2533 be_rx_stats_update(rxo, rxcp);
2534 }
2535
2536 if (work_done) {
2537 be_cq_notify(adapter, rx_cq->id, true, work_done);
2538
2539 /* When an rx-obj gets into post_starved state, just
2540 * let be_worker do the posting.
2541 */
2542 if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM &&
2543 !rxo->rx_post_starved)
2544 be_post_rx_frags(rxo, GFP_ATOMIC,
2545 max_t(u32, MAX_RX_POST,
2546 frags_consumed));
2547 }
2548
2549 return work_done;
2550 }
2551
2552 static inline void be_update_tx_err(struct be_tx_obj *txo, u32 status)
2553 {
2554 switch (status) {
2555 case BE_TX_COMP_HDR_PARSE_ERR:
2556 tx_stats(txo)->tx_hdr_parse_err++;
2557 break;
2558 case BE_TX_COMP_NDMA_ERR:
2559 tx_stats(txo)->tx_dma_err++;
2560 break;
2561 case BE_TX_COMP_ACL_ERR:
2562 tx_stats(txo)->tx_spoof_check_err++;
2563 break;
2564 }
2565 }
2566
2567 static inline void lancer_update_tx_err(struct be_tx_obj *txo, u32 status)
2568 {
2569 switch (status) {
2570 case LANCER_TX_COMP_LSO_ERR:
2571 tx_stats(txo)->tx_tso_err++;
2572 break;
2573 case LANCER_TX_COMP_HSW_DROP_MAC_ERR:
2574 case LANCER_TX_COMP_HSW_DROP_VLAN_ERR:
2575 tx_stats(txo)->tx_spoof_check_err++;
2576 break;
2577 case LANCER_TX_COMP_QINQ_ERR:
2578 tx_stats(txo)->tx_qinq_err++;
2579 break;
2580 case LANCER_TX_COMP_PARITY_ERR:
2581 tx_stats(txo)->tx_internal_parity_err++;
2582 break;
2583 case LANCER_TX_COMP_DMA_ERR:
2584 tx_stats(txo)->tx_dma_err++;
2585 break;
2586 }
2587 }
2588
2589 static void be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo,
2590 int idx)
2591 {
2592 struct be_eth_tx_compl *txcp;
2593 int num_wrbs = 0, work_done = 0;
2594 u32 compl_status;
2595 u16 last_idx;
2596
2597 while ((txcp = be_tx_compl_get(&txo->cq))) {
2598 last_idx = GET_TX_COMPL_BITS(wrb_index, txcp);
2599 num_wrbs += be_tx_compl_process(adapter, txo, last_idx);
2600 work_done++;
2601
2602 compl_status = GET_TX_COMPL_BITS(status, txcp);
2603 if (compl_status) {
2604 if (lancer_chip(adapter))
2605 lancer_update_tx_err(txo, compl_status);
2606 else
2607 be_update_tx_err(txo, compl_status);
2608 }
2609 }
2610
2611 if (work_done) {
2612 be_cq_notify(adapter, txo->cq.id, true, work_done);
2613 atomic_sub(num_wrbs, &txo->q.used);
2614
2615 /* As Tx wrbs have been freed up, wake up netdev queue
2616 * if it was stopped due to lack of tx wrbs. */
2617 if (__netif_subqueue_stopped(adapter->netdev, idx) &&
2618 atomic_read(&txo->q.used) < txo->q.len / 2) {
2619 netif_wake_subqueue(adapter->netdev, idx);
2620 }
2621
2622 u64_stats_update_begin(&tx_stats(txo)->sync_compl);
2623 tx_stats(txo)->tx_compl += work_done;
2624 u64_stats_update_end(&tx_stats(txo)->sync_compl);
2625 }
2626 }
2627
2628 #ifdef CONFIG_NET_RX_BUSY_POLL
2629 static inline bool be_lock_napi(struct be_eq_obj *eqo)
2630 {
2631 bool status = true;
2632
2633 spin_lock(&eqo->lock); /* BH is already disabled */
2634 if (eqo->state & BE_EQ_LOCKED) {
2635 WARN_ON(eqo->state & BE_EQ_NAPI);
2636 eqo->state |= BE_EQ_NAPI_YIELD;
2637 status = false;
2638 } else {
2639 eqo->state = BE_EQ_NAPI;
2640 }
2641 spin_unlock(&eqo->lock);
2642 return status;
2643 }
2644
2645 static inline void be_unlock_napi(struct be_eq_obj *eqo)
2646 {
2647 spin_lock(&eqo->lock); /* BH is already disabled */
2648
2649 WARN_ON(eqo->state & (BE_EQ_POLL | BE_EQ_NAPI_YIELD));
2650 eqo->state = BE_EQ_IDLE;
2651
2652 spin_unlock(&eqo->lock);
2653 }
2654
2655 static inline bool be_lock_busy_poll(struct be_eq_obj *eqo)
2656 {
2657 bool status = true;
2658
2659 spin_lock_bh(&eqo->lock);
2660 if (eqo->state & BE_EQ_LOCKED) {
2661 eqo->state |= BE_EQ_POLL_YIELD;
2662 status = false;
2663 } else {
2664 eqo->state |= BE_EQ_POLL;
2665 }
2666 spin_unlock_bh(&eqo->lock);
2667 return status;
2668 }
2669
2670 static inline void be_unlock_busy_poll(struct be_eq_obj *eqo)
2671 {
2672 spin_lock_bh(&eqo->lock);
2673
2674 WARN_ON(eqo->state & (BE_EQ_NAPI));
2675 eqo->state = BE_EQ_IDLE;
2676
2677 spin_unlock_bh(&eqo->lock);
2678 }
2679
2680 static inline void be_enable_busy_poll(struct be_eq_obj *eqo)
2681 {
2682 spin_lock_init(&eqo->lock);
2683 eqo->state = BE_EQ_IDLE;
2684 }
2685
2686 static inline void be_disable_busy_poll(struct be_eq_obj *eqo)
2687 {
2688 local_bh_disable();
2689
2690 /* It's enough to just acquire napi lock on the eqo to stop
2691 * be_busy_poll() from processing any queueus.
2692 */
2693 while (!be_lock_napi(eqo))
2694 mdelay(1);
2695
2696 local_bh_enable();
2697 }
2698
2699 #else /* CONFIG_NET_RX_BUSY_POLL */
2700
2701 static inline bool be_lock_napi(struct be_eq_obj *eqo)
2702 {
2703 return true;
2704 }
2705
2706 static inline void be_unlock_napi(struct be_eq_obj *eqo)
2707 {
2708 }
2709
2710 static inline bool be_lock_busy_poll(struct be_eq_obj *eqo)
2711 {
2712 return false;
2713 }
2714
2715 static inline void be_unlock_busy_poll(struct be_eq_obj *eqo)
2716 {
2717 }
2718
2719 static inline void be_enable_busy_poll(struct be_eq_obj *eqo)
2720 {
2721 }
2722
2723 static inline void be_disable_busy_poll(struct be_eq_obj *eqo)
2724 {
2725 }
2726 #endif /* CONFIG_NET_RX_BUSY_POLL */
2727
2728 int be_poll(struct napi_struct *napi, int budget)
2729 {
2730 struct be_eq_obj *eqo = container_of(napi, struct be_eq_obj, napi);
2731 struct be_adapter *adapter = eqo->adapter;
2732 int max_work = 0, work, i, num_evts;
2733 struct be_rx_obj *rxo;
2734 struct be_tx_obj *txo;
2735
2736 num_evts = events_get(eqo);
2737
2738 for_all_tx_queues_on_eq(adapter, eqo, txo, i)
2739 be_process_tx(adapter, txo, i);
2740
2741 if (be_lock_napi(eqo)) {
2742 /* This loop will iterate twice for EQ0 in which
2743 * completions of the last RXQ (default one) are also processed
2744 * For other EQs the loop iterates only once
2745 */
2746 for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
2747 work = be_process_rx(rxo, napi, budget, NAPI_POLLING);
2748 max_work = max(work, max_work);
2749 }
2750 be_unlock_napi(eqo);
2751 } else {
2752 max_work = budget;
2753 }
2754
2755 if (is_mcc_eqo(eqo))
2756 be_process_mcc(adapter);
2757
2758 if (max_work < budget) {
2759 napi_complete(napi);
2760 be_eq_notify(adapter, eqo->q.id, true, false, num_evts);
2761 } else {
2762 /* As we'll continue in polling mode, count and clear events */
2763 be_eq_notify(adapter, eqo->q.id, false, false, num_evts);
2764 }
2765 return max_work;
2766 }
2767
2768 #ifdef CONFIG_NET_RX_BUSY_POLL
2769 static int be_busy_poll(struct napi_struct *napi)
2770 {
2771 struct be_eq_obj *eqo = container_of(napi, struct be_eq_obj, napi);
2772 struct be_adapter *adapter = eqo->adapter;
2773 struct be_rx_obj *rxo;
2774 int i, work = 0;
2775
2776 if (!be_lock_busy_poll(eqo))
2777 return LL_FLUSH_BUSY;
2778
2779 for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
2780 work = be_process_rx(rxo, napi, 4, BUSY_POLLING);
2781 if (work)
2782 break;
2783 }
2784
2785 be_unlock_busy_poll(eqo);
2786 return work;
2787 }
2788 #endif
2789
2790 void be_detect_error(struct be_adapter *adapter)
2791 {
2792 u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0;
2793 u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0;
2794 u32 i;
2795 bool error_detected = false;
2796 struct device *dev = &adapter->pdev->dev;
2797 struct net_device *netdev = adapter->netdev;
2798
2799 if (be_hw_error(adapter))
2800 return;
2801
2802 if (lancer_chip(adapter)) {
2803 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
2804 if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
2805 sliport_err1 = ioread32(adapter->db +
2806 SLIPORT_ERROR1_OFFSET);
2807 sliport_err2 = ioread32(adapter->db +
2808 SLIPORT_ERROR2_OFFSET);
2809 adapter->hw_error = true;
2810 /* Do not log error messages if its a FW reset */
2811 if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 &&
2812 sliport_err2 == SLIPORT_ERROR_FW_RESET2) {
2813 dev_info(dev, "Firmware update in progress\n");
2814 } else {
2815 error_detected = true;
2816 dev_err(dev, "Error detected in the card\n");
2817 dev_err(dev, "ERR: sliport status 0x%x\n",
2818 sliport_status);
2819 dev_err(dev, "ERR: sliport error1 0x%x\n",
2820 sliport_err1);
2821 dev_err(dev, "ERR: sliport error2 0x%x\n",
2822 sliport_err2);
2823 }
2824 }
2825 } else {
2826 ue_lo = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_LOW);
2827 ue_hi = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_HIGH);
2828 ue_lo_mask = ioread32(adapter->pcicfg +
2829 PCICFG_UE_STATUS_LOW_MASK);
2830 ue_hi_mask = ioread32(adapter->pcicfg +
2831 PCICFG_UE_STATUS_HI_MASK);
2832
2833 ue_lo = (ue_lo & ~ue_lo_mask);
2834 ue_hi = (ue_hi & ~ue_hi_mask);
2835
2836 /* On certain platforms BE hardware can indicate spurious UEs.
2837 * Allow HW to stop working completely in case of a real UE.
2838 * Hence not setting the hw_error for UE detection.
2839 */
2840
2841 if (ue_lo || ue_hi) {
2842 error_detected = true;
2843 dev_err(dev,
2844 "Unrecoverable Error detected in the adapter");
2845 dev_err(dev, "Please reboot server to recover");
2846 if (skyhawk_chip(adapter))
2847 adapter->hw_error = true;
2848 for (i = 0; ue_lo; ue_lo >>= 1, i++) {
2849 if (ue_lo & 1)
2850 dev_err(dev, "UE: %s bit set\n",
2851 ue_status_low_desc[i]);
2852 }
2853 for (i = 0; ue_hi; ue_hi >>= 1, i++) {
2854 if (ue_hi & 1)
2855 dev_err(dev, "UE: %s bit set\n",
2856 ue_status_hi_desc[i]);
2857 }
2858 }
2859 }
2860 if (error_detected)
2861 netif_carrier_off(netdev);
2862 }
2863
2864 static void be_msix_disable(struct be_adapter *adapter)
2865 {
2866 if (msix_enabled(adapter)) {
2867 pci_disable_msix(adapter->pdev);
2868 adapter->num_msix_vec = 0;
2869 adapter->num_msix_roce_vec = 0;
2870 }
2871 }
2872
2873 static int be_msix_enable(struct be_adapter *adapter)
2874 {
2875 int i, num_vec;
2876 struct device *dev = &adapter->pdev->dev;
2877
2878 /* If RoCE is supported, program the max number of NIC vectors that
2879 * may be configured via set-channels, along with vectors needed for
2880 * RoCe. Else, just program the number we'll use initially.
2881 */
2882 if (be_roce_supported(adapter))
2883 num_vec = min_t(int, 2 * be_max_eqs(adapter),
2884 2 * num_online_cpus());
2885 else
2886 num_vec = adapter->cfg_num_qs;
2887
2888 for (i = 0; i < num_vec; i++)
2889 adapter->msix_entries[i].entry = i;
2890
2891 num_vec = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
2892 MIN_MSIX_VECTORS, num_vec);
2893 if (num_vec < 0)
2894 goto fail;
2895
2896 if (be_roce_supported(adapter) && num_vec > MIN_MSIX_VECTORS) {
2897 adapter->num_msix_roce_vec = num_vec / 2;
2898 dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
2899 adapter->num_msix_roce_vec);
2900 }
2901
2902 adapter->num_msix_vec = num_vec - adapter->num_msix_roce_vec;
2903
2904 dev_info(dev, "enabled %d MSI-x vector(s) for NIC\n",
2905 adapter->num_msix_vec);
2906 return 0;
2907
2908 fail:
2909 dev_warn(dev, "MSIx enable failed\n");
2910
2911 /* INTx is not supported in VFs, so fail probe if enable_msix fails */
2912 if (!be_physfn(adapter))
2913 return num_vec;
2914 return 0;
2915 }
2916
2917 static inline int be_msix_vec_get(struct be_adapter *adapter,
2918 struct be_eq_obj *eqo)
2919 {
2920 return adapter->msix_entries[eqo->msix_idx].vector;
2921 }
2922
2923 static int be_msix_register(struct be_adapter *adapter)
2924 {
2925 struct net_device *netdev = adapter->netdev;
2926 struct be_eq_obj *eqo;
2927 int status, i, vec;
2928
2929 for_all_evt_queues(adapter, eqo, i) {
2930 sprintf(eqo->desc, "%s-q%d", netdev->name, i);
2931 vec = be_msix_vec_get(adapter, eqo);
2932 status = request_irq(vec, be_msix, 0, eqo->desc, eqo);
2933 if (status)
2934 goto err_msix;
2935 }
2936
2937 return 0;
2938 err_msix:
2939 for (i--, eqo = &adapter->eq_obj[i]; i >= 0; i--, eqo--)
2940 free_irq(be_msix_vec_get(adapter, eqo), eqo);
2941 dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
2942 status);
2943 be_msix_disable(adapter);
2944 return status;
2945 }
2946
2947 static int be_irq_register(struct be_adapter *adapter)
2948 {
2949 struct net_device *netdev = adapter->netdev;
2950 int status;
2951
2952 if (msix_enabled(adapter)) {
2953 status = be_msix_register(adapter);
2954 if (status == 0)
2955 goto done;
2956 /* INTx is not supported for VF */
2957 if (!be_physfn(adapter))
2958 return status;
2959 }
2960
2961 /* INTx: only the first EQ is used */
2962 netdev->irq = adapter->pdev->irq;
2963 status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
2964 &adapter->eq_obj[0]);
2965 if (status) {
2966 dev_err(&adapter->pdev->dev,
2967 "INTx request IRQ failed - err %d\n", status);
2968 return status;
2969 }
2970 done:
2971 adapter->isr_registered = true;
2972 return 0;
2973 }
2974
2975 static void be_irq_unregister(struct be_adapter *adapter)
2976 {
2977 struct net_device *netdev = adapter->netdev;
2978 struct be_eq_obj *eqo;
2979 int i;
2980
2981 if (!adapter->isr_registered)
2982 return;
2983
2984 /* INTx */
2985 if (!msix_enabled(adapter)) {
2986 free_irq(netdev->irq, &adapter->eq_obj[0]);
2987 goto done;
2988 }
2989
2990 /* MSIx */
2991 for_all_evt_queues(adapter, eqo, i)
2992 free_irq(be_msix_vec_get(adapter, eqo), eqo);
2993
2994 done:
2995 adapter->isr_registered = false;
2996 }
2997
2998 static void be_rx_qs_destroy(struct be_adapter *adapter)
2999 {
3000 struct be_queue_info *q;
3001 struct be_rx_obj *rxo;
3002 int i;
3003
3004 for_all_rx_queues(adapter, rxo, i) {
3005 q = &rxo->q;
3006 if (q->created) {
3007 be_cmd_rxq_destroy(adapter, q);
3008 be_rx_cq_clean(rxo);
3009 }
3010 be_queue_free(adapter, q);
3011 }
3012 }
3013
3014 static int be_close(struct net_device *netdev)
3015 {
3016 struct be_adapter *adapter = netdev_priv(netdev);
3017 struct be_eq_obj *eqo;
3018 int i;
3019
3020 /* This protection is needed as be_close() may be called even when the
3021 * adapter is in cleared state (after eeh perm failure)
3022 */
3023 if (!(adapter->flags & BE_FLAGS_SETUP_DONE))
3024 return 0;
3025
3026 be_roce_dev_close(adapter);
3027
3028 if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
3029 for_all_evt_queues(adapter, eqo, i) {
3030 napi_disable(&eqo->napi);
3031 be_disable_busy_poll(eqo);
3032 }
3033 adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
3034 }
3035
3036 be_async_mcc_disable(adapter);
3037
3038 /* Wait for all pending tx completions to arrive so that
3039 * all tx skbs are freed.
3040 */
3041 netif_tx_disable(netdev);
3042 be_tx_compl_clean(adapter);
3043
3044 be_rx_qs_destroy(adapter);
3045 be_clear_uc_list(adapter);
3046
3047 for_all_evt_queues(adapter, eqo, i) {
3048 if (msix_enabled(adapter))
3049 synchronize_irq(be_msix_vec_get(adapter, eqo));
3050 else
3051 synchronize_irq(netdev->irq);
3052 be_eq_clean(eqo);
3053 }
3054
3055 be_irq_unregister(adapter);
3056
3057 return 0;
3058 }
3059
3060 static int be_rx_qs_create(struct be_adapter *adapter)
3061 {
3062 struct rss_info *rss = &adapter->rss_info;
3063 u8 rss_key[RSS_HASH_KEY_LEN];
3064 struct be_rx_obj *rxo;
3065 int rc, i, j;
3066
3067 for_all_rx_queues(adapter, rxo, i) {
3068 rc = be_queue_alloc(adapter, &rxo->q, RX_Q_LEN,
3069 sizeof(struct be_eth_rx_d));
3070 if (rc)
3071 return rc;
3072 }
3073
3074 /* The FW would like the default RXQ to be created first */
3075 rxo = default_rxo(adapter);
3076 rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id, rx_frag_size,
3077 adapter->if_handle, false, &rxo->rss_id);
3078 if (rc)
3079 return rc;
3080
3081 for_all_rss_queues(adapter, rxo, i) {
3082 rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
3083 rx_frag_size, adapter->if_handle,
3084 true, &rxo->rss_id);
3085 if (rc)
3086 return rc;
3087 }
3088
3089 if (be_multi_rxq(adapter)) {
3090 for (j = 0; j < RSS_INDIR_TABLE_LEN;
3091 j += adapter->num_rx_qs - 1) {
3092 for_all_rss_queues(adapter, rxo, i) {
3093 if ((j + i) >= RSS_INDIR_TABLE_LEN)
3094 break;
3095 rss->rsstable[j + i] = rxo->rss_id;
3096 rss->rss_queue[j + i] = i;
3097 }
3098 }
3099 rss->rss_flags = RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 |
3100 RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6;
3101
3102 if (!BEx_chip(adapter))
3103 rss->rss_flags |= RSS_ENABLE_UDP_IPV4 |
3104 RSS_ENABLE_UDP_IPV6;
3105 } else {
3106 /* Disable RSS, if only default RX Q is created */
3107 rss->rss_flags = RSS_ENABLE_NONE;
3108 }
3109
3110 netdev_rss_key_fill(rss_key, RSS_HASH_KEY_LEN);
3111 rc = be_cmd_rss_config(adapter, rss->rsstable, rss->rss_flags,
3112 128, rss_key);
3113 if (rc) {
3114 rss->rss_flags = RSS_ENABLE_NONE;
3115 return rc;
3116 }
3117
3118 memcpy(rss->rss_hkey, rss_key, RSS_HASH_KEY_LEN);
3119
3120 /* First time posting */
3121 for_all_rx_queues(adapter, rxo, i)
3122 be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
3123 return 0;
3124 }
3125
3126 static int be_open(struct net_device *netdev)
3127 {
3128 struct be_adapter *adapter = netdev_priv(netdev);
3129 struct be_eq_obj *eqo;
3130 struct be_rx_obj *rxo;
3131 struct be_tx_obj *txo;
3132 u8 link_status;
3133 int status, i;
3134
3135 status = be_rx_qs_create(adapter);
3136 if (status)
3137 goto err;
3138
3139 status = be_irq_register(adapter);
3140 if (status)
3141 goto err;
3142
3143 for_all_rx_queues(adapter, rxo, i)
3144 be_cq_notify(adapter, rxo->cq.id, true, 0);
3145
3146 for_all_tx_queues(adapter, txo, i)
3147 be_cq_notify(adapter, txo->cq.id, true, 0);
3148
3149 be_async_mcc_enable(adapter);
3150
3151 for_all_evt_queues(adapter, eqo, i) {
3152 napi_enable(&eqo->napi);
3153 be_enable_busy_poll(eqo);
3154 be_eq_notify(adapter, eqo->q.id, true, true, 0);
3155 }
3156 adapter->flags |= BE_FLAGS_NAPI_ENABLED;
3157
3158 status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
3159 if (!status)
3160 be_link_status_update(adapter, link_status);
3161
3162 netif_tx_start_all_queues(netdev);
3163 be_roce_dev_open(adapter);
3164
3165 #ifdef CONFIG_BE2NET_VXLAN
3166 if (skyhawk_chip(adapter))
3167 vxlan_get_rx_port(netdev);
3168 #endif
3169
3170 return 0;
3171 err:
3172 be_close(adapter->netdev);
3173 return -EIO;
3174 }
3175
3176 static int be_setup_wol(struct be_adapter *adapter, bool enable)
3177 {
3178 struct be_dma_mem cmd;
3179 int status = 0;
3180 u8 mac[ETH_ALEN];
3181
3182 memset(mac, 0, ETH_ALEN);
3183
3184 cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
3185 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
3186 GFP_KERNEL);
3187 if (!cmd.va)
3188 return -ENOMEM;
3189
3190 if (enable) {
3191 status = pci_write_config_dword(adapter->pdev,
3192 PCICFG_PM_CONTROL_OFFSET,
3193 PCICFG_PM_CONTROL_MASK);
3194 if (status) {
3195 dev_err(&adapter->pdev->dev,
3196 "Could not enable Wake-on-lan\n");
3197 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
3198 cmd.dma);
3199 return status;
3200 }
3201 status = be_cmd_enable_magic_wol(adapter,
3202 adapter->netdev->dev_addr,
3203 &cmd);
3204 pci_enable_wake(adapter->pdev, PCI_D3hot, 1);
3205 pci_enable_wake(adapter->pdev, PCI_D3cold, 1);
3206 } else {
3207 status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
3208 pci_enable_wake(adapter->pdev, PCI_D3hot, 0);
3209 pci_enable_wake(adapter->pdev, PCI_D3cold, 0);
3210 }
3211
3212 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
3213 return status;
3214 }
3215
3216 static void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
3217 {
3218 u32 addr;
3219
3220 addr = jhash(adapter->netdev->dev_addr, ETH_ALEN, 0);
3221
3222 mac[5] = (u8)(addr & 0xFF);
3223 mac[4] = (u8)((addr >> 8) & 0xFF);
3224 mac[3] = (u8)((addr >> 16) & 0xFF);
3225 /* Use the OUI from the current MAC address */
3226 memcpy(mac, adapter->netdev->dev_addr, 3);
3227 }
3228
3229 /*
3230 * Generate a seed MAC address from the PF MAC Address using jhash.
3231 * MAC Address for VFs are assigned incrementally starting from the seed.
3232 * These addresses are programmed in the ASIC by the PF and the VF driver
3233 * queries for the MAC address during its probe.
3234 */
3235 static int be_vf_eth_addr_config(struct be_adapter *adapter)
3236 {
3237 u32 vf;
3238 int status = 0;
3239 u8 mac[ETH_ALEN];
3240 struct be_vf_cfg *vf_cfg;
3241
3242 be_vf_eth_addr_generate(adapter, mac);
3243
3244 for_all_vfs(adapter, vf_cfg, vf) {
3245 if (BEx_chip(adapter))
3246 status = be_cmd_pmac_add(adapter, mac,
3247 vf_cfg->if_handle,
3248 &vf_cfg->pmac_id, vf + 1);
3249 else
3250 status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
3251 vf + 1);
3252
3253 if (status)
3254 dev_err(&adapter->pdev->dev,
3255 "Mac address assignment failed for VF %d\n",
3256 vf);
3257 else
3258 memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3259
3260 mac[5] += 1;
3261 }
3262 return status;
3263 }
3264
3265 static int be_vfs_mac_query(struct be_adapter *adapter)
3266 {
3267 int status, vf;
3268 u8 mac[ETH_ALEN];
3269 struct be_vf_cfg *vf_cfg;
3270
3271 for_all_vfs(adapter, vf_cfg, vf) {
3272 status = be_cmd_get_active_mac(adapter, vf_cfg->pmac_id,
3273 mac, vf_cfg->if_handle,
3274 false, vf+1);
3275 if (status)
3276 return status;
3277 memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3278 }
3279 return 0;
3280 }
3281
3282 static void be_vf_clear(struct be_adapter *adapter)
3283 {
3284 struct be_vf_cfg *vf_cfg;
3285 u32 vf;
3286
3287 if (pci_vfs_assigned(adapter->pdev)) {
3288 dev_warn(&adapter->pdev->dev,
3289 "VFs are assigned to VMs: not disabling VFs\n");
3290 goto done;
3291 }
3292
3293 pci_disable_sriov(adapter->pdev);
3294
3295 for_all_vfs(adapter, vf_cfg, vf) {
3296 if (BEx_chip(adapter))
3297 be_cmd_pmac_del(adapter, vf_cfg->if_handle,
3298 vf_cfg->pmac_id, vf + 1);
3299 else
3300 be_cmd_set_mac(adapter, NULL, vf_cfg->if_handle,
3301 vf + 1);
3302
3303 be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1);
3304 }
3305 done:
3306 kfree(adapter->vf_cfg);
3307 adapter->num_vfs = 0;
3308 adapter->flags &= ~BE_FLAGS_SRIOV_ENABLED;
3309 }
3310
3311 static void be_clear_queues(struct be_adapter *adapter)
3312 {
3313 be_mcc_queues_destroy(adapter);
3314 be_rx_cqs_destroy(adapter);
3315 be_tx_queues_destroy(adapter);
3316 be_evt_queues_destroy(adapter);
3317 }
3318
3319 static void be_cancel_worker(struct be_adapter *adapter)
3320 {
3321 if (adapter->flags & BE_FLAGS_WORKER_SCHEDULED) {
3322 cancel_delayed_work_sync(&adapter->work);
3323 adapter->flags &= ~BE_FLAGS_WORKER_SCHEDULED;
3324 }
3325 }
3326
3327 static void be_mac_clear(struct be_adapter *adapter)
3328 {
3329 if (adapter->pmac_id) {
3330 be_cmd_pmac_del(adapter, adapter->if_handle,
3331 adapter->pmac_id[0], 0);
3332 kfree(adapter->pmac_id);
3333 adapter->pmac_id = NULL;
3334 }
3335 }
3336
3337 #ifdef CONFIG_BE2NET_VXLAN
3338 static void be_disable_vxlan_offloads(struct be_adapter *adapter)
3339 {
3340 struct net_device *netdev = adapter->netdev;
3341
3342 if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS)
3343 be_cmd_manage_iface(adapter, adapter->if_handle,
3344 OP_CONVERT_TUNNEL_TO_NORMAL);
3345
3346 if (adapter->vxlan_port)
3347 be_cmd_set_vxlan_port(adapter, 0);
3348
3349 adapter->flags &= ~BE_FLAGS_VXLAN_OFFLOADS;
3350 adapter->vxlan_port = 0;
3351
3352 netdev->hw_enc_features = 0;
3353 netdev->hw_features &= ~(NETIF_F_GSO_UDP_TUNNEL);
3354 netdev->features &= ~(NETIF_F_GSO_UDP_TUNNEL);
3355 }
3356 #endif
3357
3358 static int be_clear(struct be_adapter *adapter)
3359 {
3360 be_cancel_worker(adapter);
3361
3362 if (sriov_enabled(adapter))
3363 be_vf_clear(adapter);
3364
3365 /* Re-configure FW to distribute resources evenly across max-supported
3366 * number of VFs, only when VFs are not already enabled.
3367 */
3368 if (be_physfn(adapter) && !pci_vfs_assigned(adapter->pdev))
3369 be_cmd_set_sriov_config(adapter, adapter->pool_res,
3370 pci_sriov_get_totalvfs(adapter->pdev));
3371
3372 #ifdef CONFIG_BE2NET_VXLAN
3373 be_disable_vxlan_offloads(adapter);
3374 #endif
3375 /* delete the primary mac along with the uc-mac list */
3376 be_mac_clear(adapter);
3377
3378 be_cmd_if_destroy(adapter, adapter->if_handle, 0);
3379
3380 be_clear_queues(adapter);
3381
3382 be_msix_disable(adapter);
3383 adapter->flags &= ~BE_FLAGS_SETUP_DONE;
3384 return 0;
3385 }
3386
3387 static int be_if_create(struct be_adapter *adapter, u32 *if_handle,
3388 u32 cap_flags, u32 vf)
3389 {
3390 u32 en_flags;
3391
3392 en_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST |
3393 BE_IF_FLAGS_MULTICAST | BE_IF_FLAGS_PASS_L3L4_ERRORS |
3394 BE_IF_FLAGS_RSS;
3395
3396 en_flags &= cap_flags;
3397
3398 return be_cmd_if_create(adapter, cap_flags, en_flags, if_handle, vf);
3399 }
3400
3401 static int be_vfs_if_create(struct be_adapter *adapter)
3402 {
3403 struct be_resources res = {0};
3404 struct be_vf_cfg *vf_cfg;
3405 u32 cap_flags, vf;
3406 int status;
3407
3408 /* If a FW profile exists, then cap_flags are updated */
3409 cap_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST |
3410 BE_IF_FLAGS_MULTICAST;
3411
3412 for_all_vfs(adapter, vf_cfg, vf) {
3413 if (!BE3_chip(adapter)) {
3414 status = be_cmd_get_profile_config(adapter, &res,
3415 vf + 1);
3416 if (!status) {
3417 cap_flags = res.if_cap_flags;
3418 /* Prevent VFs from enabling VLAN promiscuous
3419 * mode
3420 */
3421 cap_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
3422 }
3423 }
3424
3425 status = be_if_create(adapter, &vf_cfg->if_handle,
3426 cap_flags, vf + 1);
3427 if (status)
3428 return status;
3429 }
3430
3431 return 0;
3432 }
3433
3434 static int be_vf_setup_init(struct be_adapter *adapter)
3435 {
3436 struct be_vf_cfg *vf_cfg;
3437 int vf;
3438
3439 adapter->vf_cfg = kcalloc(adapter->num_vfs, sizeof(*vf_cfg),
3440 GFP_KERNEL);
3441 if (!adapter->vf_cfg)
3442 return -ENOMEM;
3443
3444 for_all_vfs(adapter, vf_cfg, vf) {
3445 vf_cfg->if_handle = -1;
3446 vf_cfg->pmac_id = -1;
3447 }
3448 return 0;
3449 }
3450
3451 static int be_vf_setup(struct be_adapter *adapter)
3452 {
3453 struct device *dev = &adapter->pdev->dev;
3454 struct be_vf_cfg *vf_cfg;
3455 int status, old_vfs, vf;
3456
3457 old_vfs = pci_num_vf(adapter->pdev);
3458
3459 status = be_vf_setup_init(adapter);
3460 if (status)
3461 goto err;
3462
3463 if (old_vfs) {
3464 for_all_vfs(adapter, vf_cfg, vf) {
3465 status = be_cmd_get_if_id(adapter, vf_cfg, vf);
3466 if (status)
3467 goto err;
3468 }
3469
3470 status = be_vfs_mac_query(adapter);
3471 if (status)
3472 goto err;
3473 } else {
3474 status = be_vfs_if_create(adapter);
3475 if (status)
3476 goto err;
3477
3478 status = be_vf_eth_addr_config(adapter);
3479 if (status)
3480 goto err;
3481 }
3482
3483 for_all_vfs(adapter, vf_cfg, vf) {
3484 /* Allow VFs to programs MAC/VLAN filters */
3485 status = be_cmd_get_fn_privileges(adapter, &vf_cfg->privileges,
3486 vf + 1);
3487 if (!status && !(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
3488 status = be_cmd_set_fn_privileges(adapter,
3489 vf_cfg->privileges |
3490 BE_PRIV_FILTMGMT,
3491 vf + 1);
3492 if (!status) {
3493 vf_cfg->privileges |= BE_PRIV_FILTMGMT;
3494 dev_info(dev, "VF%d has FILTMGMT privilege\n",
3495 vf);
3496 }
3497 }
3498
3499 /* Allow full available bandwidth */
3500 if (!old_vfs)
3501 be_cmd_config_qos(adapter, 0, 0, vf + 1);
3502
3503 if (!old_vfs) {
3504 be_cmd_enable_vf(adapter, vf + 1);
3505 be_cmd_set_logical_link_config(adapter,
3506 IFLA_VF_LINK_STATE_AUTO,
3507 vf+1);
3508 }
3509 }
3510
3511 if (!old_vfs) {
3512 status = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
3513 if (status) {
3514 dev_err(dev, "SRIOV enable failed\n");
3515 adapter->num_vfs = 0;
3516 goto err;
3517 }
3518 }
3519
3520 adapter->flags |= BE_FLAGS_SRIOV_ENABLED;
3521 return 0;
3522 err:
3523 dev_err(dev, "VF setup failed\n");
3524 be_vf_clear(adapter);
3525 return status;
3526 }
3527
3528 /* Converting function_mode bits on BE3 to SH mc_type enums */
3529
3530 static u8 be_convert_mc_type(u32 function_mode)
3531 {
3532 if (function_mode & VNIC_MODE && function_mode & QNQ_MODE)
3533 return vNIC1;
3534 else if (function_mode & QNQ_MODE)
3535 return FLEX10;
3536 else if (function_mode & VNIC_MODE)
3537 return vNIC2;
3538 else if (function_mode & UMC_ENABLED)
3539 return UMC;
3540 else
3541 return MC_NONE;
3542 }
3543
3544 /* On BE2/BE3 FW does not suggest the supported limits */
3545 static void BEx_get_resources(struct be_adapter *adapter,
3546 struct be_resources *res)
3547 {
3548 bool use_sriov = adapter->num_vfs ? 1 : 0;
3549
3550 if (be_physfn(adapter))
3551 res->max_uc_mac = BE_UC_PMAC_COUNT;
3552 else
3553 res->max_uc_mac = BE_VF_UC_PMAC_COUNT;
3554
3555 adapter->mc_type = be_convert_mc_type(adapter->function_mode);
3556
3557 if (be_is_mc(adapter)) {
3558 /* Assuming that there are 4 channels per port,
3559 * when multi-channel is enabled
3560 */
3561 if (be_is_qnq_mode(adapter))
3562 res->max_vlans = BE_NUM_VLANS_SUPPORTED/8;
3563 else
3564 /* In a non-qnq multichannel mode, the pvid
3565 * takes up one vlan entry
3566 */
3567 res->max_vlans = (BE_NUM_VLANS_SUPPORTED / 4) - 1;
3568 } else {
3569 res->max_vlans = BE_NUM_VLANS_SUPPORTED;
3570 }
3571
3572 res->max_mcast_mac = BE_MAX_MC;
3573
3574 /* 1) For BE3 1Gb ports, FW does not support multiple TXQs
3575 * 2) Create multiple TX rings on a BE3-R multi-channel interface
3576 * *only* if it is RSS-capable.
3577 */
3578 if (BE2_chip(adapter) || use_sriov || (adapter->port_num > 1) ||
3579 !be_physfn(adapter) || (be_is_mc(adapter) &&
3580 !(adapter->function_caps & BE_FUNCTION_CAPS_RSS))) {
3581 res->max_tx_qs = 1;
3582 } else if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) {
3583 struct be_resources super_nic_res = {0};
3584
3585 /* On a SuperNIC profile, the driver needs to use the
3586 * GET_PROFILE_CONFIG cmd to query the per-function TXQ limits
3587 */
3588 be_cmd_get_profile_config(adapter, &super_nic_res, 0);
3589 /* Some old versions of BE3 FW don't report max_tx_qs value */
3590 res->max_tx_qs = super_nic_res.max_tx_qs ? : BE3_MAX_TX_QS;
3591 } else {
3592 res->max_tx_qs = BE3_MAX_TX_QS;
3593 }
3594
3595 if ((adapter->function_caps & BE_FUNCTION_CAPS_RSS) &&
3596 !use_sriov && be_physfn(adapter))
3597 res->max_rss_qs = (adapter->be3_native) ?
3598 BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
3599 res->max_rx_qs = res->max_rss_qs + 1;
3600
3601 if (be_physfn(adapter))
3602 res->max_evt_qs = (be_max_vfs(adapter) > 0) ?
3603 BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
3604 else
3605 res->max_evt_qs = 1;
3606
3607 res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
3608 if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
3609 res->if_cap_flags &= ~BE_IF_FLAGS_RSS;
3610 }
3611
3612 static void be_setup_init(struct be_adapter *adapter)
3613 {
3614 adapter->vlan_prio_bmap = 0xff;
3615 adapter->phy.link_speed = -1;
3616 adapter->if_handle = -1;
3617 adapter->be3_native = false;
3618 adapter->if_flags = 0;
3619 if (be_physfn(adapter))
3620 adapter->cmd_privileges = MAX_PRIVILEGES;
3621 else
3622 adapter->cmd_privileges = MIN_PRIVILEGES;
3623 }
3624
3625 static int be_get_sriov_config(struct be_adapter *adapter)
3626 {
3627 struct device *dev = &adapter->pdev->dev;
3628 struct be_resources res = {0};
3629 int max_vfs, old_vfs;
3630
3631 /* Some old versions of BE3 FW don't report max_vfs value */
3632 be_cmd_get_profile_config(adapter, &res, 0);
3633
3634 if (BE3_chip(adapter) && !res.max_vfs) {
3635 max_vfs = pci_sriov_get_totalvfs(adapter->pdev);
3636 res.max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
3637 }
3638
3639 adapter->pool_res = res;
3640
3641 if (!be_max_vfs(adapter)) {
3642 if (num_vfs)
3643 dev_warn(dev, "SRIOV is disabled. Ignoring num_vfs\n");
3644 adapter->num_vfs = 0;
3645 return 0;
3646 }
3647
3648 pci_sriov_set_totalvfs(adapter->pdev, be_max_vfs(adapter));
3649
3650 /* validate num_vfs module param */
3651 old_vfs = pci_num_vf(adapter->pdev);
3652 if (old_vfs) {
3653 dev_info(dev, "%d VFs are already enabled\n", old_vfs);
3654 if (old_vfs != num_vfs)
3655 dev_warn(dev, "Ignoring num_vfs=%d setting\n", num_vfs);
3656 adapter->num_vfs = old_vfs;
3657 } else {
3658 if (num_vfs > be_max_vfs(adapter)) {
3659 dev_info(dev, "Resources unavailable to init %d VFs\n",
3660 num_vfs);
3661 dev_info(dev, "Limiting to %d VFs\n",
3662 be_max_vfs(adapter));
3663 }
3664 adapter->num_vfs = min_t(u16, num_vfs, be_max_vfs(adapter));
3665 }
3666
3667 return 0;
3668 }
3669
3670 static int be_get_resources(struct be_adapter *adapter)
3671 {
3672 struct device *dev = &adapter->pdev->dev;
3673 struct be_resources res = {0};
3674 int status;
3675
3676 if (BEx_chip(adapter)) {
3677 BEx_get_resources(adapter, &res);
3678 adapter->res = res;
3679 }
3680
3681 /* For Lancer, SH etc read per-function resource limits from FW.
3682 * GET_FUNC_CONFIG returns per function guaranteed limits.
3683 * GET_PROFILE_CONFIG returns PCI-E related limits PF-pool limits
3684 */
3685 if (!BEx_chip(adapter)) {
3686 status = be_cmd_get_func_config(adapter, &res);
3687 if (status)
3688 return status;
3689
3690 /* If RoCE may be enabled stash away half the EQs for RoCE */
3691 if (be_roce_supported(adapter))
3692 res.max_evt_qs /= 2;
3693 adapter->res = res;
3694 }
3695
3696 dev_info(dev, "Max: txqs %d, rxqs %d, rss %d, eqs %d, vfs %d\n",
3697 be_max_txqs(adapter), be_max_rxqs(adapter),
3698 be_max_rss(adapter), be_max_eqs(adapter),
3699 be_max_vfs(adapter));
3700 dev_info(dev, "Max: uc-macs %d, mc-macs %d, vlans %d\n",
3701 be_max_uc(adapter), be_max_mc(adapter),
3702 be_max_vlans(adapter));
3703
3704 return 0;
3705 }
3706
3707 static void be_sriov_config(struct be_adapter *adapter)
3708 {
3709 struct device *dev = &adapter->pdev->dev;
3710 int status;
3711
3712 status = be_get_sriov_config(adapter);
3713 if (status) {
3714 dev_err(dev, "Failed to query SR-IOV configuration\n");
3715 dev_err(dev, "SR-IOV cannot be enabled\n");
3716 return;
3717 }
3718
3719 /* When the HW is in SRIOV capable configuration, the PF-pool
3720 * resources are equally distributed across the max-number of
3721 * VFs. The user may request only a subset of the max-vfs to be
3722 * enabled. Based on num_vfs, redistribute the resources across
3723 * num_vfs so that each VF will have access to more number of
3724 * resources. This facility is not available in BE3 FW.
3725 * Also, this is done by FW in Lancer chip.
3726 */
3727 if (be_max_vfs(adapter) && !pci_num_vf(adapter->pdev)) {
3728 status = be_cmd_set_sriov_config(adapter,
3729 adapter->pool_res,
3730 adapter->num_vfs);
3731 if (status)
3732 dev_err(dev, "Failed to optimize SR-IOV resources\n");
3733 }
3734 }
3735
3736 static int be_get_config(struct be_adapter *adapter)
3737 {
3738 u16 profile_id;
3739 int status;
3740
3741 status = be_cmd_query_fw_cfg(adapter);
3742 if (status)
3743 return status;
3744
3745 be_cmd_query_port_name(adapter);
3746
3747 if (be_physfn(adapter)) {
3748 status = be_cmd_get_active_profile(adapter, &profile_id);
3749 if (!status)
3750 dev_info(&adapter->pdev->dev,
3751 "Using profile 0x%x\n", profile_id);
3752 }
3753
3754 if (!BE2_chip(adapter) && be_physfn(adapter))
3755 be_sriov_config(adapter);
3756
3757 status = be_get_resources(adapter);
3758 if (status)
3759 return status;
3760
3761 adapter->pmac_id = kcalloc(be_max_uc(adapter),
3762 sizeof(*adapter->pmac_id), GFP_KERNEL);
3763 if (!adapter->pmac_id)
3764 return -ENOMEM;
3765
3766 /* Sanitize cfg_num_qs based on HW and platform limits */
3767 adapter->cfg_num_qs = min(adapter->cfg_num_qs, be_max_qs(adapter));
3768
3769 return 0;
3770 }
3771
3772 static int be_mac_setup(struct be_adapter *adapter)
3773 {
3774 u8 mac[ETH_ALEN];
3775 int status;
3776
3777 if (is_zero_ether_addr(adapter->netdev->dev_addr)) {
3778 status = be_cmd_get_perm_mac(adapter, mac);
3779 if (status)
3780 return status;
3781
3782 memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
3783 memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
3784 } else {
3785 /* Maybe the HW was reset; dev_addr must be re-programmed */
3786 memcpy(mac, adapter->netdev->dev_addr, ETH_ALEN);
3787 }
3788
3789 /* For BE3-R VFs, the PF programs the initial MAC address */
3790 if (!(BEx_chip(adapter) && be_virtfn(adapter)))
3791 be_cmd_pmac_add(adapter, mac, adapter->if_handle,
3792 &adapter->pmac_id[0], 0);
3793 return 0;
3794 }
3795
3796 static void be_schedule_worker(struct be_adapter *adapter)
3797 {
3798 schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
3799 adapter->flags |= BE_FLAGS_WORKER_SCHEDULED;
3800 }
3801
3802 static int be_setup_queues(struct be_adapter *adapter)
3803 {
3804 struct net_device *netdev = adapter->netdev;
3805 int status;
3806
3807 status = be_evt_queues_create(adapter);
3808 if (status)
3809 goto err;
3810
3811 status = be_tx_qs_create(adapter);
3812 if (status)
3813 goto err;
3814
3815 status = be_rx_cqs_create(adapter);
3816 if (status)
3817 goto err;
3818
3819 status = be_mcc_queues_create(adapter);
3820 if (status)
3821 goto err;
3822
3823 status = netif_set_real_num_rx_queues(netdev, adapter->num_rx_qs);
3824 if (status)
3825 goto err;
3826
3827 status = netif_set_real_num_tx_queues(netdev, adapter->num_tx_qs);
3828 if (status)
3829 goto err;
3830
3831 return 0;
3832 err:
3833 dev_err(&adapter->pdev->dev, "queue_setup failed\n");
3834 return status;
3835 }
3836
3837 int be_update_queues(struct be_adapter *adapter)
3838 {
3839 struct net_device *netdev = adapter->netdev;
3840 int status;
3841
3842 if (netif_running(netdev))
3843 be_close(netdev);
3844
3845 be_cancel_worker(adapter);
3846
3847 /* If any vectors have been shared with RoCE we cannot re-program
3848 * the MSIx table.
3849 */
3850 if (!adapter->num_msix_roce_vec)
3851 be_msix_disable(adapter);
3852
3853 be_clear_queues(adapter);
3854
3855 if (!msix_enabled(adapter)) {
3856 status = be_msix_enable(adapter);
3857 if (status)
3858 return status;
3859 }
3860
3861 status = be_setup_queues(adapter);
3862 if (status)
3863 return status;
3864
3865 be_schedule_worker(adapter);
3866
3867 if (netif_running(netdev))
3868 status = be_open(netdev);
3869
3870 return status;
3871 }
3872
3873 static inline int fw_major_num(const char *fw_ver)
3874 {
3875 int fw_major = 0, i;
3876
3877 i = sscanf(fw_ver, "%d.", &fw_major);
3878 if (i != 1)
3879 return 0;
3880
3881 return fw_major;
3882 }
3883
3884 static int be_setup(struct be_adapter *adapter)
3885 {
3886 struct device *dev = &adapter->pdev->dev;
3887 int status;
3888
3889 be_setup_init(adapter);
3890
3891 if (!lancer_chip(adapter))
3892 be_cmd_req_native_mode(adapter);
3893
3894 status = be_get_config(adapter);
3895 if (status)
3896 goto err;
3897
3898 status = be_msix_enable(adapter);
3899 if (status)
3900 goto err;
3901
3902 status = be_if_create(adapter, &adapter->if_handle,
3903 be_if_cap_flags(adapter), 0);
3904 if (status)
3905 goto err;
3906
3907 /* Updating real_num_tx/rx_queues() requires rtnl_lock() */
3908 rtnl_lock();
3909 status = be_setup_queues(adapter);
3910 rtnl_unlock();
3911 if (status)
3912 goto err;
3913
3914 be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0);
3915
3916 status = be_mac_setup(adapter);
3917 if (status)
3918 goto err;
3919
3920 be_cmd_get_fw_ver(adapter);
3921 dev_info(dev, "FW version is %s\n", adapter->fw_ver);
3922
3923 if (BE2_chip(adapter) && fw_major_num(adapter->fw_ver) < 4) {
3924 dev_err(dev, "Firmware on card is old(%s), IRQs may not work",
3925 adapter->fw_ver);
3926 dev_err(dev, "Please upgrade firmware to version >= 4.0\n");
3927 }
3928
3929 if (adapter->vlans_added)
3930 be_vid_config(adapter);
3931
3932 be_set_rx_mode(adapter->netdev);
3933
3934 be_cmd_get_acpi_wol_cap(adapter);
3935
3936 status = be_cmd_set_flow_control(adapter, adapter->tx_fc,
3937 adapter->rx_fc);
3938 if (status)
3939 be_cmd_get_flow_control(adapter, &adapter->tx_fc,
3940 &adapter->rx_fc);
3941
3942 dev_info(&adapter->pdev->dev, "HW Flow control - TX:%d RX:%d\n",
3943 adapter->tx_fc, adapter->rx_fc);
3944
3945 if (be_physfn(adapter))
3946 be_cmd_set_logical_link_config(adapter,
3947 IFLA_VF_LINK_STATE_AUTO, 0);
3948
3949 if (adapter->num_vfs)
3950 be_vf_setup(adapter);
3951
3952 status = be_cmd_get_phy_info(adapter);
3953 if (!status && be_pause_supported(adapter))
3954 adapter->phy.fc_autoneg = 1;
3955
3956 be_schedule_worker(adapter);
3957 adapter->flags |= BE_FLAGS_SETUP_DONE;
3958 return 0;
3959 err:
3960 be_clear(adapter);
3961 return status;
3962 }
3963
3964 #ifdef CONFIG_NET_POLL_CONTROLLER
3965 static void be_netpoll(struct net_device *netdev)
3966 {
3967 struct be_adapter *adapter = netdev_priv(netdev);
3968 struct be_eq_obj *eqo;
3969 int i;
3970
3971 for_all_evt_queues(adapter, eqo, i) {
3972 be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0);
3973 napi_schedule(&eqo->napi);
3974 }
3975 }
3976 #endif
3977
3978 static char flash_cookie[2][16] = {"*** SE FLAS", "H DIRECTORY *** "};
3979
3980 static bool phy_flashing_required(struct be_adapter *adapter)
3981 {
3982 return (adapter->phy.phy_type == PHY_TYPE_TN_8022 &&
3983 adapter->phy.interface_type == PHY_TYPE_BASET_10GB);
3984 }
3985
3986 static bool is_comp_in_ufi(struct be_adapter *adapter,
3987 struct flash_section_info *fsec, int type)
3988 {
3989 int i = 0, img_type = 0;
3990 struct flash_section_info_g2 *fsec_g2 = NULL;
3991
3992 if (BE2_chip(adapter))
3993 fsec_g2 = (struct flash_section_info_g2 *)fsec;
3994
3995 for (i = 0; i < MAX_FLASH_COMP; i++) {
3996 if (fsec_g2)
3997 img_type = le32_to_cpu(fsec_g2->fsec_entry[i].type);
3998 else
3999 img_type = le32_to_cpu(fsec->fsec_entry[i].type);
4000
4001 if (img_type == type)
4002 return true;
4003 }
4004 return false;
4005
4006 }
4007
4008 static struct flash_section_info *get_fsec_info(struct be_adapter *adapter,
4009 int header_size,
4010 const struct firmware *fw)
4011 {
4012 struct flash_section_info *fsec = NULL;
4013 const u8 *p = fw->data;
4014
4015 p += header_size;
4016 while (p < (fw->data + fw->size)) {
4017 fsec = (struct flash_section_info *)p;
4018 if (!memcmp(flash_cookie, fsec->cookie, sizeof(flash_cookie)))
4019 return fsec;
4020 p += 32;
4021 }
4022 return NULL;
4023 }
4024
4025 static int be_check_flash_crc(struct be_adapter *adapter, const u8 *p,
4026 u32 img_offset, u32 img_size, int hdr_size,
4027 u16 img_optype, bool *crc_match)
4028 {
4029 u32 crc_offset;
4030 int status;
4031 u8 crc[4];
4032
4033 status = be_cmd_get_flash_crc(adapter, crc, img_optype, img_offset,
4034 img_size - 4);
4035 if (status)
4036 return status;
4037
4038 crc_offset = hdr_size + img_offset + img_size - 4;
4039
4040 /* Skip flashing, if crc of flashed region matches */
4041 if (!memcmp(crc, p + crc_offset, 4))
4042 *crc_match = true;
4043 else
4044 *crc_match = false;
4045
4046 return status;
4047 }
4048
4049 static int be_flash(struct be_adapter *adapter, const u8 *img,
4050 struct be_dma_mem *flash_cmd, int optype, int img_size,
4051 u32 img_offset)
4052 {
4053 u32 flash_op, num_bytes, total_bytes = img_size, bytes_sent = 0;
4054 struct be_cmd_write_flashrom *req = flash_cmd->va;
4055 int status;
4056
4057 while (total_bytes) {
4058 num_bytes = min_t(u32, 32*1024, total_bytes);
4059
4060 total_bytes -= num_bytes;
4061
4062 if (!total_bytes) {
4063 if (optype == OPTYPE_PHY_FW)
4064 flash_op = FLASHROM_OPER_PHY_FLASH;
4065 else
4066 flash_op = FLASHROM_OPER_FLASH;
4067 } else {
4068 if (optype == OPTYPE_PHY_FW)
4069 flash_op = FLASHROM_OPER_PHY_SAVE;
4070 else
4071 flash_op = FLASHROM_OPER_SAVE;
4072 }
4073
4074 memcpy(req->data_buf, img, num_bytes);
4075 img += num_bytes;
4076 status = be_cmd_write_flashrom(adapter, flash_cmd, optype,
4077 flash_op, img_offset +
4078 bytes_sent, num_bytes);
4079 if (base_status(status) == MCC_STATUS_ILLEGAL_REQUEST &&
4080 optype == OPTYPE_PHY_FW)
4081 break;
4082 else if (status)
4083 return status;
4084
4085 bytes_sent += num_bytes;
4086 }
4087 return 0;
4088 }
4089
4090 /* For BE2, BE3 and BE3-R */
4091 static int be_flash_BEx(struct be_adapter *adapter,
4092 const struct firmware *fw,
4093 struct be_dma_mem *flash_cmd, int num_of_images)
4094 {
4095 int img_hdrs_size = (num_of_images * sizeof(struct image_hdr));
4096 struct device *dev = &adapter->pdev->dev;
4097 struct flash_section_info *fsec = NULL;
4098 int status, i, filehdr_size, num_comp;
4099 const struct flash_comp *pflashcomp;
4100 bool crc_match;
4101 const u8 *p;
4102
4103 struct flash_comp gen3_flash_types[] = {
4104 { FLASH_iSCSI_PRIMARY_IMAGE_START_g3, OPTYPE_ISCSI_ACTIVE,
4105 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_iSCSI},
4106 { FLASH_REDBOOT_START_g3, OPTYPE_REDBOOT,
4107 FLASH_REDBOOT_IMAGE_MAX_SIZE_g3, IMAGE_BOOT_CODE},
4108 { FLASH_iSCSI_BIOS_START_g3, OPTYPE_BIOS,
4109 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_ISCSI},
4110 { FLASH_PXE_BIOS_START_g3, OPTYPE_PXE_BIOS,
4111 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_PXE},
4112 { FLASH_FCoE_BIOS_START_g3, OPTYPE_FCOE_BIOS,
4113 FLASH_BIOS_IMAGE_MAX_SIZE_g3, IMAGE_OPTION_ROM_FCoE},
4114 { FLASH_iSCSI_BACKUP_IMAGE_START_g3, OPTYPE_ISCSI_BACKUP,
4115 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_iSCSI},
4116 { FLASH_FCoE_PRIMARY_IMAGE_START_g3, OPTYPE_FCOE_FW_ACTIVE,
4117 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_FCoE},
4118 { FLASH_FCoE_BACKUP_IMAGE_START_g3, OPTYPE_FCOE_FW_BACKUP,
4119 FLASH_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_BACKUP_FCoE},
4120 { FLASH_NCSI_START_g3, OPTYPE_NCSI_FW,
4121 FLASH_NCSI_IMAGE_MAX_SIZE_g3, IMAGE_NCSI},
4122 { FLASH_PHY_FW_START_g3, OPTYPE_PHY_FW,
4123 FLASH_PHY_FW_IMAGE_MAX_SIZE_g3, IMAGE_FIRMWARE_PHY}
4124 };
4125
4126 struct flash_comp gen2_flash_types[] = {
4127 { FLASH_iSCSI_PRIMARY_IMAGE_START_g2, OPTYPE_ISCSI_ACTIVE,
4128 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_iSCSI},
4129 { FLASH_REDBOOT_START_g2, OPTYPE_REDBOOT,
4130 FLASH_REDBOOT_IMAGE_MAX_SIZE_g2, IMAGE_BOOT_CODE},
4131 { FLASH_iSCSI_BIOS_START_g2, OPTYPE_BIOS,
4132 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_ISCSI},
4133 { FLASH_PXE_BIOS_START_g2, OPTYPE_PXE_BIOS,
4134 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_PXE},
4135 { FLASH_FCoE_BIOS_START_g2, OPTYPE_FCOE_BIOS,
4136 FLASH_BIOS_IMAGE_MAX_SIZE_g2, IMAGE_OPTION_ROM_FCoE},
4137 { FLASH_iSCSI_BACKUP_IMAGE_START_g2, OPTYPE_ISCSI_BACKUP,
4138 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_iSCSI},
4139 { FLASH_FCoE_PRIMARY_IMAGE_START_g2, OPTYPE_FCOE_FW_ACTIVE,
4140 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_FCoE},
4141 { FLASH_FCoE_BACKUP_IMAGE_START_g2, OPTYPE_FCOE_FW_BACKUP,
4142 FLASH_IMAGE_MAX_SIZE_g2, IMAGE_FIRMWARE_BACKUP_FCoE}
4143 };
4144
4145 if (BE3_chip(adapter)) {
4146 pflashcomp = gen3_flash_types;
4147 filehdr_size = sizeof(struct flash_file_hdr_g3);
4148 num_comp = ARRAY_SIZE(gen3_flash_types);
4149 } else {
4150 pflashcomp = gen2_flash_types;
4151 filehdr_size = sizeof(struct flash_file_hdr_g2);
4152 num_comp = ARRAY_SIZE(gen2_flash_types);
4153 img_hdrs_size = 0;
4154 }
4155
4156 /* Get flash section info*/
4157 fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
4158 if (!fsec) {
4159 dev_err(dev, "Invalid Cookie. FW image may be corrupted\n");
4160 return -1;
4161 }
4162 for (i = 0; i < num_comp; i++) {
4163 if (!is_comp_in_ufi(adapter, fsec, pflashcomp[i].img_type))
4164 continue;
4165
4166 if ((pflashcomp[i].optype == OPTYPE_NCSI_FW) &&
4167 memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0)
4168 continue;
4169
4170 if (pflashcomp[i].optype == OPTYPE_PHY_FW &&
4171 !phy_flashing_required(adapter))
4172 continue;
4173
4174 if (pflashcomp[i].optype == OPTYPE_REDBOOT) {
4175 status = be_check_flash_crc(adapter, fw->data,
4176 pflashcomp[i].offset,
4177 pflashcomp[i].size,
4178 filehdr_size +
4179 img_hdrs_size,
4180 OPTYPE_REDBOOT, &crc_match);
4181 if (status) {
4182 dev_err(dev,
4183 "Could not get CRC for 0x%x region\n",
4184 pflashcomp[i].optype);
4185 continue;
4186 }
4187
4188 if (crc_match)
4189 continue;
4190 }
4191
4192 p = fw->data + filehdr_size + pflashcomp[i].offset +
4193 img_hdrs_size;
4194 if (p + pflashcomp[i].size > fw->data + fw->size)
4195 return -1;
4196
4197 status = be_flash(adapter, p, flash_cmd, pflashcomp[i].optype,
4198 pflashcomp[i].size, 0);
4199 if (status) {
4200 dev_err(dev, "Flashing section type 0x%x failed\n",
4201 pflashcomp[i].img_type);
4202 return status;
4203 }
4204 }
4205 return 0;
4206 }
4207
4208 static u16 be_get_img_optype(struct flash_section_entry fsec_entry)
4209 {
4210 u32 img_type = le32_to_cpu(fsec_entry.type);
4211 u16 img_optype = le16_to_cpu(fsec_entry.optype);
4212
4213 if (img_optype != 0xFFFF)
4214 return img_optype;
4215
4216 switch (img_type) {
4217 case IMAGE_FIRMWARE_iSCSI:
4218 img_optype = OPTYPE_ISCSI_ACTIVE;
4219 break;
4220 case IMAGE_BOOT_CODE:
4221 img_optype = OPTYPE_REDBOOT;
4222 break;
4223 case IMAGE_OPTION_ROM_ISCSI:
4224 img_optype = OPTYPE_BIOS;
4225 break;
4226 case IMAGE_OPTION_ROM_PXE:
4227 img_optype = OPTYPE_PXE_BIOS;
4228 break;
4229 case IMAGE_OPTION_ROM_FCoE:
4230 img_optype = OPTYPE_FCOE_BIOS;
4231 break;
4232 case IMAGE_FIRMWARE_BACKUP_iSCSI:
4233 img_optype = OPTYPE_ISCSI_BACKUP;
4234 break;
4235 case IMAGE_NCSI:
4236 img_optype = OPTYPE_NCSI_FW;
4237 break;
4238 case IMAGE_FLASHISM_JUMPVECTOR:
4239 img_optype = OPTYPE_FLASHISM_JUMPVECTOR;
4240 break;
4241 case IMAGE_FIRMWARE_PHY:
4242 img_optype = OPTYPE_SH_PHY_FW;
4243 break;
4244 case IMAGE_REDBOOT_DIR:
4245 img_optype = OPTYPE_REDBOOT_DIR;
4246 break;
4247 case IMAGE_REDBOOT_CONFIG:
4248 img_optype = OPTYPE_REDBOOT_CONFIG;
4249 break;
4250 case IMAGE_UFI_DIR:
4251 img_optype = OPTYPE_UFI_DIR;
4252 break;
4253 default:
4254 break;
4255 }
4256
4257 return img_optype;
4258 }
4259
4260 static int be_flash_skyhawk(struct be_adapter *adapter,
4261 const struct firmware *fw,
4262 struct be_dma_mem *flash_cmd, int num_of_images)
4263 {
4264 int img_hdrs_size = num_of_images * sizeof(struct image_hdr);
4265 bool crc_match, old_fw_img, flash_offset_support = true;
4266 struct device *dev = &adapter->pdev->dev;
4267 struct flash_section_info *fsec = NULL;
4268 u32 img_offset, img_size, img_type;
4269 u16 img_optype, flash_optype;
4270 int status, i, filehdr_size;
4271 const u8 *p;
4272
4273 filehdr_size = sizeof(struct flash_file_hdr_g3);
4274 fsec = get_fsec_info(adapter, filehdr_size + img_hdrs_size, fw);
4275 if (!fsec) {
4276 dev_err(dev, "Invalid Cookie. FW image may be corrupted\n");
4277 return -EINVAL;
4278 }
4279
4280 retry_flash:
4281 for (i = 0; i < le32_to_cpu(fsec->fsec_hdr.num_images); i++) {
4282 img_offset = le32_to_cpu(fsec->fsec_entry[i].offset);
4283 img_size = le32_to_cpu(fsec->fsec_entry[i].pad_size);
4284 img_type = le32_to_cpu(fsec->fsec_entry[i].type);
4285 img_optype = be_get_img_optype(fsec->fsec_entry[i]);
4286 old_fw_img = fsec->fsec_entry[i].optype == 0xFFFF;
4287
4288 if (img_optype == 0xFFFF)
4289 continue;
4290
4291 if (flash_offset_support)
4292 flash_optype = OPTYPE_OFFSET_SPECIFIED;
4293 else
4294 flash_optype = img_optype;
4295
4296 /* Don't bother verifying CRC if an old FW image is being
4297 * flashed
4298 */
4299 if (old_fw_img)
4300 goto flash;
4301
4302 status = be_check_flash_crc(adapter, fw->data, img_offset,
4303 img_size, filehdr_size +
4304 img_hdrs_size, flash_optype,
4305 &crc_match);
4306 if (base_status(status) == MCC_STATUS_ILLEGAL_REQUEST ||
4307 base_status(status) == MCC_STATUS_ILLEGAL_FIELD) {
4308 /* The current FW image on the card does not support
4309 * OFFSET based flashing. Retry using older mechanism
4310 * of OPTYPE based flashing
4311 */
4312 if (flash_optype == OPTYPE_OFFSET_SPECIFIED) {
4313 flash_offset_support = false;
4314 goto retry_flash;
4315 }
4316
4317 /* The current FW image on the card does not recognize
4318 * the new FLASH op_type. The FW download is partially
4319 * complete. Reboot the server now to enable FW image
4320 * to recognize the new FLASH op_type. To complete the
4321 * remaining process, download the same FW again after
4322 * the reboot.
4323 */
4324 dev_err(dev, "Flash incomplete. Reset the server\n");
4325 dev_err(dev, "Download FW image again after reset\n");
4326 return -EAGAIN;
4327 } else if (status) {
4328 dev_err(dev, "Could not get CRC for 0x%x region\n",
4329 img_optype);
4330 return -EFAULT;
4331 }
4332
4333 if (crc_match)
4334 continue;
4335
4336 flash:
4337 p = fw->data + filehdr_size + img_offset + img_hdrs_size;
4338 if (p + img_size > fw->data + fw->size)
4339 return -1;
4340
4341 status = be_flash(adapter, p, flash_cmd, flash_optype, img_size,
4342 img_offset);
4343
4344 /* The current FW image on the card does not support OFFSET
4345 * based flashing. Retry using older mechanism of OPTYPE based
4346 * flashing
4347 */
4348 if (base_status(status) == MCC_STATUS_ILLEGAL_FIELD &&
4349 flash_optype == OPTYPE_OFFSET_SPECIFIED) {
4350 flash_offset_support = false;
4351 goto retry_flash;
4352 }
4353
4354 /* For old FW images ignore ILLEGAL_FIELD error or errors on
4355 * UFI_DIR region
4356 */
4357 if (old_fw_img &&
4358 (base_status(status) == MCC_STATUS_ILLEGAL_FIELD ||
4359 (img_optype == OPTYPE_UFI_DIR &&
4360 base_status(status) == MCC_STATUS_FAILED))) {
4361 continue;
4362 } else if (status) {
4363 dev_err(dev, "Flashing section type 0x%x failed\n",
4364 img_type);
4365 return -EFAULT;
4366 }
4367 }
4368 return 0;
4369 }
4370
4371 static int lancer_fw_download(struct be_adapter *adapter,
4372 const struct firmware *fw)
4373 {
4374 #define LANCER_FW_DOWNLOAD_CHUNK (32 * 1024)
4375 #define LANCER_FW_DOWNLOAD_LOCATION "/prg"
4376 struct device *dev = &adapter->pdev->dev;
4377 struct be_dma_mem flash_cmd;
4378 const u8 *data_ptr = NULL;
4379 u8 *dest_image_ptr = NULL;
4380 size_t image_size = 0;
4381 u32 chunk_size = 0;
4382 u32 data_written = 0;
4383 u32 offset = 0;
4384 int status = 0;
4385 u8 add_status = 0;
4386 u8 change_status;
4387
4388 if (!IS_ALIGNED(fw->size, sizeof(u32))) {
4389 dev_err(dev, "FW image size should be multiple of 4\n");
4390 return -EINVAL;
4391 }
4392
4393 flash_cmd.size = sizeof(struct lancer_cmd_req_write_object)
4394 + LANCER_FW_DOWNLOAD_CHUNK;
4395 flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size,
4396 &flash_cmd.dma, GFP_KERNEL);
4397 if (!flash_cmd.va)
4398 return -ENOMEM;
4399
4400 dest_image_ptr = flash_cmd.va +
4401 sizeof(struct lancer_cmd_req_write_object);
4402 image_size = fw->size;
4403 data_ptr = fw->data;
4404
4405 while (image_size) {
4406 chunk_size = min_t(u32, image_size, LANCER_FW_DOWNLOAD_CHUNK);
4407
4408 /* Copy the image chunk content. */
4409 memcpy(dest_image_ptr, data_ptr, chunk_size);
4410
4411 status = lancer_cmd_write_object(adapter, &flash_cmd,
4412 chunk_size, offset,
4413 LANCER_FW_DOWNLOAD_LOCATION,
4414 &data_written, &change_status,
4415 &add_status);
4416 if (status)
4417 break;
4418
4419 offset += data_written;
4420 data_ptr += data_written;
4421 image_size -= data_written;
4422 }
4423
4424 if (!status) {
4425 /* Commit the FW written */
4426 status = lancer_cmd_write_object(adapter, &flash_cmd,
4427 0, offset,
4428 LANCER_FW_DOWNLOAD_LOCATION,
4429 &data_written, &change_status,
4430 &add_status);
4431 }
4432
4433 dma_free_coherent(dev, flash_cmd.size, flash_cmd.va, flash_cmd.dma);
4434 if (status) {
4435 dev_err(dev, "Firmware load error\n");
4436 return be_cmd_status(status);
4437 }
4438
4439 dev_info(dev, "Firmware flashed successfully\n");
4440
4441 if (change_status == LANCER_FW_RESET_NEEDED) {
4442 dev_info(dev, "Resetting adapter to activate new FW\n");
4443 status = lancer_physdev_ctrl(adapter,
4444 PHYSDEV_CONTROL_FW_RESET_MASK);
4445 if (status) {
4446 dev_err(dev, "Adapter busy, could not reset FW\n");
4447 dev_err(dev, "Reboot server to activate new FW\n");
4448 }
4449 } else if (change_status != LANCER_NO_RESET_NEEDED) {
4450 dev_info(dev, "Reboot server to activate new FW\n");
4451 }
4452
4453 return 0;
4454 }
4455
4456 #define BE2_UFI 2
4457 #define BE3_UFI 3
4458 #define BE3R_UFI 10
4459 #define SH_UFI 4
4460 #define SH_P2_UFI 11
4461
4462 static int be_get_ufi_type(struct be_adapter *adapter,
4463 struct flash_file_hdr_g3 *fhdr)
4464 {
4465 if (!fhdr) {
4466 dev_err(&adapter->pdev->dev, "Invalid FW UFI file");
4467 return -1;
4468 }
4469
4470 /* First letter of the build version is used to identify
4471 * which chip this image file is meant for.
4472 */
4473 switch (fhdr->build[0]) {
4474 case BLD_STR_UFI_TYPE_SH:
4475 return (fhdr->asic_type_rev == ASIC_REV_P2) ? SH_P2_UFI :
4476 SH_UFI;
4477 case BLD_STR_UFI_TYPE_BE3:
4478 return (fhdr->asic_type_rev == ASIC_REV_B0) ? BE3R_UFI :
4479 BE3_UFI;
4480 case BLD_STR_UFI_TYPE_BE2:
4481 return BE2_UFI;
4482 default:
4483 return -1;
4484 }
4485 }
4486
4487 /* Check if the flash image file is compatible with the adapter that
4488 * is being flashed.
4489 * BE3 chips with asic-rev B0 must be flashed only with BE3R_UFI type.
4490 * Skyhawk chips with asic-rev P2 must be flashed only with SH_P2_UFI type.
4491 */
4492 static bool be_check_ufi_compatibility(struct be_adapter *adapter,
4493 struct flash_file_hdr_g3 *fhdr)
4494 {
4495 int ufi_type = be_get_ufi_type(adapter, fhdr);
4496
4497 switch (ufi_type) {
4498 case SH_P2_UFI:
4499 return skyhawk_chip(adapter);
4500 case SH_UFI:
4501 return (skyhawk_chip(adapter) &&
4502 adapter->asic_rev < ASIC_REV_P2);
4503 case BE3R_UFI:
4504 return BE3_chip(adapter);
4505 case BE3_UFI:
4506 return (BE3_chip(adapter) && adapter->asic_rev < ASIC_REV_B0);
4507 case BE2_UFI:
4508 return BE2_chip(adapter);
4509 default:
4510 return false;
4511 }
4512 }
4513
4514 static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
4515 {
4516 struct device *dev = &adapter->pdev->dev;
4517 struct flash_file_hdr_g3 *fhdr3;
4518 struct image_hdr *img_hdr_ptr;
4519 int status = 0, i, num_imgs;
4520 struct be_dma_mem flash_cmd;
4521
4522 fhdr3 = (struct flash_file_hdr_g3 *)fw->data;
4523 if (!be_check_ufi_compatibility(adapter, fhdr3)) {
4524 dev_err(dev, "Flash image is not compatible with adapter\n");
4525 return -EINVAL;
4526 }
4527
4528 flash_cmd.size = sizeof(struct be_cmd_write_flashrom);
4529 flash_cmd.va = dma_alloc_coherent(dev, flash_cmd.size, &flash_cmd.dma,
4530 GFP_KERNEL);
4531 if (!flash_cmd.va)
4532 return -ENOMEM;
4533
4534 num_imgs = le32_to_cpu(fhdr3->num_imgs);
4535 for (i = 0; i < num_imgs; i++) {
4536 img_hdr_ptr = (struct image_hdr *)(fw->data +
4537 (sizeof(struct flash_file_hdr_g3) +
4538 i * sizeof(struct image_hdr)));
4539 if (!BE2_chip(adapter) &&
4540 le32_to_cpu(img_hdr_ptr->imageid) != 1)
4541 continue;
4542
4543 if (skyhawk_chip(adapter))
4544 status = be_flash_skyhawk(adapter, fw, &flash_cmd,
4545 num_imgs);
4546 else
4547 status = be_flash_BEx(adapter, fw, &flash_cmd,
4548 num_imgs);
4549 }
4550
4551 dma_free_coherent(dev, flash_cmd.size, flash_cmd.va, flash_cmd.dma);
4552 if (!status)
4553 dev_info(dev, "Firmware flashed successfully\n");
4554
4555 return status;
4556 }
4557
4558 int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
4559 {
4560 const struct firmware *fw;
4561 int status;
4562
4563 if (!netif_running(adapter->netdev)) {
4564 dev_err(&adapter->pdev->dev,
4565 "Firmware load not allowed (interface is down)\n");
4566 return -ENETDOWN;
4567 }
4568
4569 status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
4570 if (status)
4571 goto fw_exit;
4572
4573 dev_info(&adapter->pdev->dev, "Flashing firmware file %s\n", fw_file);
4574
4575 if (lancer_chip(adapter))
4576 status = lancer_fw_download(adapter, fw);
4577 else
4578 status = be_fw_download(adapter, fw);
4579
4580 if (!status)
4581 be_cmd_get_fw_ver(adapter);
4582
4583 fw_exit:
4584 release_firmware(fw);
4585 return status;
4586 }
4587
4588 static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
4589 u16 flags)
4590 {
4591 struct be_adapter *adapter = netdev_priv(dev);
4592 struct nlattr *attr, *br_spec;
4593 int rem;
4594 int status = 0;
4595 u16 mode = 0;
4596
4597 if (!sriov_enabled(adapter))
4598 return -EOPNOTSUPP;
4599
4600 br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
4601 if (!br_spec)
4602 return -EINVAL;
4603
4604 nla_for_each_nested(attr, br_spec, rem) {
4605 if (nla_type(attr) != IFLA_BRIDGE_MODE)
4606 continue;
4607
4608 if (nla_len(attr) < sizeof(mode))
4609 return -EINVAL;
4610
4611 mode = nla_get_u16(attr);
4612 if (mode != BRIDGE_MODE_VEPA && mode != BRIDGE_MODE_VEB)
4613 return -EINVAL;
4614
4615 status = be_cmd_set_hsw_config(adapter, 0, 0,
4616 adapter->if_handle,
4617 mode == BRIDGE_MODE_VEPA ?
4618 PORT_FWD_TYPE_VEPA :
4619 PORT_FWD_TYPE_VEB);
4620 if (status)
4621 goto err;
4622
4623 dev_info(&adapter->pdev->dev, "enabled switch mode: %s\n",
4624 mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4625
4626 return status;
4627 }
4628 err:
4629 dev_err(&adapter->pdev->dev, "Failed to set switch mode %s\n",
4630 mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4631
4632 return status;
4633 }
4634
4635 static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
4636 struct net_device *dev, u32 filter_mask)
4637 {
4638 struct be_adapter *adapter = netdev_priv(dev);
4639 int status = 0;
4640 u8 hsw_mode;
4641
4642 if (!sriov_enabled(adapter))
4643 return 0;
4644
4645 /* BE and Lancer chips support VEB mode only */
4646 if (BEx_chip(adapter) || lancer_chip(adapter)) {
4647 hsw_mode = PORT_FWD_TYPE_VEB;
4648 } else {
4649 status = be_cmd_get_hsw_config(adapter, NULL, 0,
4650 adapter->if_handle, &hsw_mode);
4651 if (status)
4652 return 0;
4653 }
4654
4655 return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
4656 hsw_mode == PORT_FWD_TYPE_VEPA ?
4657 BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB,
4658 0, 0);
4659 }
4660
4661 #ifdef CONFIG_BE2NET_VXLAN
4662 /* VxLAN offload Notes:
4663 *
4664 * The stack defines tunnel offload flags (hw_enc_features) for IP and doesn't
4665 * distinguish various types of transports (VxLAN, GRE, NVGRE ..). So, offload
4666 * is expected to work across all types of IP tunnels once exported. Skyhawk
4667 * supports offloads for either VxLAN or NVGRE, exclusively. So we export VxLAN
4668 * offloads in hw_enc_features only when a VxLAN port is added. If other (non
4669 * VxLAN) tunnels are configured while VxLAN offloads are enabled, offloads for
4670 * those other tunnels are unexported on the fly through ndo_features_check().
4671 *
4672 * Skyhawk supports VxLAN offloads only for one UDP dport. So, if the stack
4673 * adds more than one port, disable offloads and don't re-enable them again
4674 * until after all the tunnels are removed.
4675 */
4676 static void be_add_vxlan_port(struct net_device *netdev, sa_family_t sa_family,
4677 __be16 port)
4678 {
4679 struct be_adapter *adapter = netdev_priv(netdev);
4680 struct device *dev = &adapter->pdev->dev;
4681 int status;
4682
4683 if (lancer_chip(adapter) || BEx_chip(adapter))
4684 return;
4685
4686 if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS) {
4687 dev_info(dev,
4688 "Only one UDP port supported for VxLAN offloads\n");
4689 dev_info(dev, "Disabling VxLAN offloads\n");
4690 adapter->vxlan_port_count++;
4691 goto err;
4692 }
4693
4694 if (adapter->vxlan_port_count++ >= 1)
4695 return;
4696
4697 status = be_cmd_manage_iface(adapter, adapter->if_handle,
4698 OP_CONVERT_NORMAL_TO_TUNNEL);
4699 if (status) {
4700 dev_warn(dev, "Failed to convert normal interface to tunnel\n");
4701 goto err;
4702 }
4703
4704 status = be_cmd_set_vxlan_port(adapter, port);
4705 if (status) {
4706 dev_warn(dev, "Failed to add VxLAN port\n");
4707 goto err;
4708 }
4709 adapter->flags |= BE_FLAGS_VXLAN_OFFLOADS;
4710 adapter->vxlan_port = port;
4711
4712 netdev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
4713 NETIF_F_TSO | NETIF_F_TSO6 |
4714 NETIF_F_GSO_UDP_TUNNEL;
4715 netdev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
4716 netdev->features |= NETIF_F_GSO_UDP_TUNNEL;
4717
4718 dev_info(dev, "Enabled VxLAN offloads for UDP port %d\n",
4719 be16_to_cpu(port));
4720 return;
4721 err:
4722 be_disable_vxlan_offloads(adapter);
4723 }
4724
4725 static void be_del_vxlan_port(struct net_device *netdev, sa_family_t sa_family,
4726 __be16 port)
4727 {
4728 struct be_adapter *adapter = netdev_priv(netdev);
4729
4730 if (lancer_chip(adapter) || BEx_chip(adapter))
4731 return;
4732
4733 if (adapter->vxlan_port != port)
4734 goto done;
4735
4736 be_disable_vxlan_offloads(adapter);
4737
4738 dev_info(&adapter->pdev->dev,
4739 "Disabled VxLAN offloads for UDP port %d\n",
4740 be16_to_cpu(port));
4741 done:
4742 adapter->vxlan_port_count--;
4743 }
4744
4745 static netdev_features_t be_features_check(struct sk_buff *skb,
4746 struct net_device *dev,
4747 netdev_features_t features)
4748 {
4749 struct be_adapter *adapter = netdev_priv(dev);
4750 u8 l4_hdr = 0;
4751
4752 /* The code below restricts offload features for some tunneled packets.
4753 * Offload features for normal (non tunnel) packets are unchanged.
4754 */
4755 if (!skb->encapsulation ||
4756 !(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS))
4757 return features;
4758
4759 /* It's an encapsulated packet and VxLAN offloads are enabled. We
4760 * should disable tunnel offload features if it's not a VxLAN packet,
4761 * as tunnel offloads have been enabled only for VxLAN. This is done to
4762 * allow other tunneled traffic like GRE work fine while VxLAN
4763 * offloads are configured in Skyhawk-R.
4764 */
4765 switch (vlan_get_protocol(skb)) {
4766 case htons(ETH_P_IP):
4767 l4_hdr = ip_hdr(skb)->protocol;
4768 break;
4769 case htons(ETH_P_IPV6):
4770 l4_hdr = ipv6_hdr(skb)->nexthdr;
4771 break;
4772 default:
4773 return features;
4774 }
4775
4776 if (l4_hdr != IPPROTO_UDP ||
4777 skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
4778 skb->inner_protocol != htons(ETH_P_TEB) ||
4779 skb_inner_mac_header(skb) - skb_transport_header(skb) !=
4780 sizeof(struct udphdr) + sizeof(struct vxlanhdr))
4781 return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
4782
4783 return features;
4784 }
4785 #endif
4786
4787 static const struct net_device_ops be_netdev_ops = {
4788 .ndo_open = be_open,
4789 .ndo_stop = be_close,
4790 .ndo_start_xmit = be_xmit,
4791 .ndo_set_rx_mode = be_set_rx_mode,
4792 .ndo_set_mac_address = be_mac_addr_set,
4793 .ndo_change_mtu = be_change_mtu,
4794 .ndo_get_stats64 = be_get_stats64,
4795 .ndo_validate_addr = eth_validate_addr,
4796 .ndo_vlan_rx_add_vid = be_vlan_add_vid,
4797 .ndo_vlan_rx_kill_vid = be_vlan_rem_vid,
4798 .ndo_set_vf_mac = be_set_vf_mac,
4799 .ndo_set_vf_vlan = be_set_vf_vlan,
4800 .ndo_set_vf_rate = be_set_vf_tx_rate,
4801 .ndo_get_vf_config = be_get_vf_config,
4802 .ndo_set_vf_link_state = be_set_vf_link_state,
4803 #ifdef CONFIG_NET_POLL_CONTROLLER
4804 .ndo_poll_controller = be_netpoll,
4805 #endif
4806 .ndo_bridge_setlink = be_ndo_bridge_setlink,
4807 .ndo_bridge_getlink = be_ndo_bridge_getlink,
4808 #ifdef CONFIG_NET_RX_BUSY_POLL
4809 .ndo_busy_poll = be_busy_poll,
4810 #endif
4811 #ifdef CONFIG_BE2NET_VXLAN
4812 .ndo_add_vxlan_port = be_add_vxlan_port,
4813 .ndo_del_vxlan_port = be_del_vxlan_port,
4814 .ndo_features_check = be_features_check,
4815 #endif
4816 };
4817
4818 static void be_netdev_init(struct net_device *netdev)
4819 {
4820 struct be_adapter *adapter = netdev_priv(netdev);
4821
4822 netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
4823 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
4824 NETIF_F_HW_VLAN_CTAG_TX;
4825 if (be_multi_rxq(adapter))
4826 netdev->hw_features |= NETIF_F_RXHASH;
4827
4828 netdev->features |= netdev->hw_features |
4829 NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_FILTER;
4830
4831 netdev->vlan_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
4832 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
4833
4834 netdev->priv_flags |= IFF_UNICAST_FLT;
4835
4836 netdev->flags |= IFF_MULTICAST;
4837
4838 netif_set_gso_max_size(netdev, 65535 - ETH_HLEN);
4839
4840 netdev->netdev_ops = &be_netdev_ops;
4841
4842 netdev->ethtool_ops = &be_ethtool_ops;
4843 }
4844
4845 static void be_unmap_pci_bars(struct be_adapter *adapter)
4846 {
4847 if (adapter->csr)
4848 pci_iounmap(adapter->pdev, adapter->csr);
4849 if (adapter->db)
4850 pci_iounmap(adapter->pdev, adapter->db);
4851 }
4852
4853 static int db_bar(struct be_adapter *adapter)
4854 {
4855 if (lancer_chip(adapter) || !be_physfn(adapter))
4856 return 0;
4857 else
4858 return 4;
4859 }
4860
4861 static int be_roce_map_pci_bars(struct be_adapter *adapter)
4862 {
4863 if (skyhawk_chip(adapter)) {
4864 adapter->roce_db.size = 4096;
4865 adapter->roce_db.io_addr = pci_resource_start(adapter->pdev,
4866 db_bar(adapter));
4867 adapter->roce_db.total_size = pci_resource_len(adapter->pdev,
4868 db_bar(adapter));
4869 }
4870 return 0;
4871 }
4872
4873 static int be_map_pci_bars(struct be_adapter *adapter)
4874 {
4875 struct pci_dev *pdev = adapter->pdev;
4876 u8 __iomem *addr;
4877
4878 if (BEx_chip(adapter) && be_physfn(adapter)) {
4879 adapter->csr = pci_iomap(pdev, 2, 0);
4880 if (!adapter->csr)
4881 return -ENOMEM;
4882 }
4883
4884 addr = pci_iomap(pdev, db_bar(adapter), 0);
4885 if (!addr)
4886 goto pci_map_err;
4887 adapter->db = addr;
4888
4889 if (skyhawk_chip(adapter) || BEx_chip(adapter)) {
4890 if (be_physfn(adapter)) {
4891 /* PCICFG is the 2nd BAR in BE2 */
4892 addr = pci_iomap(pdev, BE2_chip(adapter) ? 1 : 0, 0);
4893 if (!addr)
4894 goto pci_map_err;
4895 adapter->pcicfg = addr;
4896 } else {
4897 adapter->pcicfg = adapter->db + SRIOV_VF_PCICFG_OFFSET;
4898 }
4899 }
4900
4901 be_roce_map_pci_bars(adapter);
4902 return 0;
4903
4904 pci_map_err:
4905 dev_err(&pdev->dev, "Error in mapping PCI BARs\n");
4906 be_unmap_pci_bars(adapter);
4907 return -ENOMEM;
4908 }
4909
4910 static void be_ctrl_cleanup(struct be_adapter *adapter)
4911 {
4912 struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
4913
4914 be_unmap_pci_bars(adapter);
4915
4916 if (mem->va)
4917 dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
4918 mem->dma);
4919
4920 mem = &adapter->rx_filter;
4921 if (mem->va)
4922 dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
4923 mem->dma);
4924 }
4925
4926 static int be_ctrl_init(struct be_adapter *adapter)
4927 {
4928 struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
4929 struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
4930 struct be_dma_mem *rx_filter = &adapter->rx_filter;
4931 u32 sli_intf;
4932 int status;
4933
4934 pci_read_config_dword(adapter->pdev, SLI_INTF_REG_OFFSET, &sli_intf);
4935 adapter->sli_family = (sli_intf & SLI_INTF_FAMILY_MASK) >>
4936 SLI_INTF_FAMILY_SHIFT;
4937 adapter->virtfn = (sli_intf & SLI_INTF_FT_MASK) ? 1 : 0;
4938
4939 status = be_map_pci_bars(adapter);
4940 if (status)
4941 goto done;
4942
4943 mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
4944 mbox_mem_alloc->va = dma_alloc_coherent(&adapter->pdev->dev,
4945 mbox_mem_alloc->size,
4946 &mbox_mem_alloc->dma,
4947 GFP_KERNEL);
4948 if (!mbox_mem_alloc->va) {
4949 status = -ENOMEM;
4950 goto unmap_pci_bars;
4951 }
4952 mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
4953 mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
4954 mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
4955 memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox));
4956
4957 rx_filter->size = sizeof(struct be_cmd_req_rx_filter);
4958 rx_filter->va = dma_zalloc_coherent(&adapter->pdev->dev,
4959 rx_filter->size, &rx_filter->dma,
4960 GFP_KERNEL);
4961 if (!rx_filter->va) {
4962 status = -ENOMEM;
4963 goto free_mbox;
4964 }
4965
4966 mutex_init(&adapter->mbox_lock);
4967 spin_lock_init(&adapter->mcc_lock);
4968 spin_lock_init(&adapter->mcc_cq_lock);
4969
4970 init_completion(&adapter->et_cmd_compl);
4971 pci_save_state(adapter->pdev);
4972 return 0;
4973
4974 free_mbox:
4975 dma_free_coherent(&adapter->pdev->dev, mbox_mem_alloc->size,
4976 mbox_mem_alloc->va, mbox_mem_alloc->dma);
4977
4978 unmap_pci_bars:
4979 be_unmap_pci_bars(adapter);
4980
4981 done:
4982 return status;
4983 }
4984
4985 static void be_stats_cleanup(struct be_adapter *adapter)
4986 {
4987 struct be_dma_mem *cmd = &adapter->stats_cmd;
4988
4989 if (cmd->va)
4990 dma_free_coherent(&adapter->pdev->dev, cmd->size,
4991 cmd->va, cmd->dma);
4992 }
4993
4994 static int be_stats_init(struct be_adapter *adapter)
4995 {
4996 struct be_dma_mem *cmd = &adapter->stats_cmd;
4997
4998 if (lancer_chip(adapter))
4999 cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
5000 else if (BE2_chip(adapter))
5001 cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
5002 else if (BE3_chip(adapter))
5003 cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
5004 else
5005 /* ALL non-BE ASICs */
5006 cmd->size = sizeof(struct be_cmd_req_get_stats_v2);
5007
5008 cmd->va = dma_zalloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
5009 GFP_KERNEL);
5010 if (!cmd->va)
5011 return -ENOMEM;
5012 return 0;
5013 }
5014
5015 static void be_remove(struct pci_dev *pdev)
5016 {
5017 struct be_adapter *adapter = pci_get_drvdata(pdev);
5018
5019 if (!adapter)
5020 return;
5021
5022 be_roce_dev_remove(adapter);
5023 be_intr_set(adapter, false);
5024
5025 cancel_delayed_work_sync(&adapter->func_recovery_work);
5026
5027 unregister_netdev(adapter->netdev);
5028
5029 be_clear(adapter);
5030
5031 /* tell fw we're done with firing cmds */
5032 be_cmd_fw_clean(adapter);
5033
5034 be_stats_cleanup(adapter);
5035
5036 be_ctrl_cleanup(adapter);
5037
5038 pci_disable_pcie_error_reporting(pdev);
5039
5040 pci_release_regions(pdev);
5041 pci_disable_device(pdev);
5042
5043 free_netdev(adapter->netdev);
5044 }
5045
5046 static int be_get_initial_config(struct be_adapter *adapter)
5047 {
5048 int status, level;
5049
5050 status = be_cmd_get_cntl_attributes(adapter);
5051 if (status)
5052 return status;
5053
5054 /* Must be a power of 2 or else MODULO will BUG_ON */
5055 adapter->be_get_temp_freq = 64;
5056
5057 if (BEx_chip(adapter)) {
5058 level = be_cmd_get_fw_log_level(adapter);
5059 adapter->msg_enable =
5060 level <= FW_LOG_LEVEL_DEFAULT ? NETIF_MSG_HW : 0;
5061 }
5062
5063 adapter->cfg_num_qs = netif_get_num_default_rss_queues();
5064 return 0;
5065 }
5066
5067 static int lancer_recover_func(struct be_adapter *adapter)
5068 {
5069 struct device *dev = &adapter->pdev->dev;
5070 int status;
5071
5072 status = lancer_test_and_set_rdy_state(adapter);
5073 if (status)
5074 goto err;
5075
5076 if (netif_running(adapter->netdev))
5077 be_close(adapter->netdev);
5078
5079 be_clear(adapter);
5080
5081 be_clear_all_error(adapter);
5082
5083 status = be_setup(adapter);
5084 if (status)
5085 goto err;
5086
5087 if (netif_running(adapter->netdev)) {
5088 status = be_open(adapter->netdev);
5089 if (status)
5090 goto err;
5091 }
5092
5093 dev_err(dev, "Adapter recovery successful\n");
5094 return 0;
5095 err:
5096 if (status == -EAGAIN)
5097 dev_err(dev, "Waiting for resource provisioning\n");
5098 else
5099 dev_err(dev, "Adapter recovery failed\n");
5100
5101 return status;
5102 }
5103
5104 static void be_func_recovery_task(struct work_struct *work)
5105 {
5106 struct be_adapter *adapter =
5107 container_of(work, struct be_adapter, func_recovery_work.work);
5108 int status = 0;
5109
5110 be_detect_error(adapter);
5111
5112 if (adapter->hw_error && lancer_chip(adapter)) {
5113 rtnl_lock();
5114 netif_device_detach(adapter->netdev);
5115 rtnl_unlock();
5116
5117 status = lancer_recover_func(adapter);
5118 if (!status)
5119 netif_device_attach(adapter->netdev);
5120 }
5121
5122 /* In Lancer, for all errors other than provisioning error (-EAGAIN),
5123 * no need to attempt further recovery.
5124 */
5125 if (!status || status == -EAGAIN)
5126 schedule_delayed_work(&adapter->func_recovery_work,
5127 msecs_to_jiffies(1000));
5128 }
5129
5130 static void be_log_sfp_info(struct be_adapter *adapter)
5131 {
5132 int status;
5133
5134 status = be_cmd_query_sfp_info(adapter);
5135 if (!status) {
5136 dev_err(&adapter->pdev->dev,
5137 "Unqualified SFP+ detected on %c from %s part no: %s",
5138 adapter->port_name, adapter->phy.vendor_name,
5139 adapter->phy.vendor_pn);
5140 }
5141 adapter->flags &= ~BE_FLAGS_EVT_INCOMPATIBLE_SFP;
5142 }
5143
5144 static void be_worker(struct work_struct *work)
5145 {
5146 struct be_adapter *adapter =
5147 container_of(work, struct be_adapter, work.work);
5148 struct be_rx_obj *rxo;
5149 int i;
5150
5151 /* when interrupts are not yet enabled, just reap any pending
5152 * mcc completions */
5153 if (!netif_running(adapter->netdev)) {
5154 local_bh_disable();
5155 be_process_mcc(adapter);
5156 local_bh_enable();
5157 goto reschedule;
5158 }
5159
5160 if (!adapter->stats_cmd_sent) {
5161 if (lancer_chip(adapter))
5162 lancer_cmd_get_pport_stats(adapter,
5163 &adapter->stats_cmd);
5164 else
5165 be_cmd_get_stats(adapter, &adapter->stats_cmd);
5166 }
5167
5168 if (be_physfn(adapter) &&
5169 MODULO(adapter->work_counter, adapter->be_get_temp_freq) == 0)
5170 be_cmd_get_die_temperature(adapter);
5171
5172 for_all_rx_queues(adapter, rxo, i) {
5173 /* Replenish RX-queues starved due to memory
5174 * allocation failures.
5175 */
5176 if (rxo->rx_post_starved)
5177 be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
5178 }
5179
5180 be_eqd_update(adapter);
5181
5182 if (adapter->flags & BE_FLAGS_EVT_INCOMPATIBLE_SFP)
5183 be_log_sfp_info(adapter);
5184
5185 reschedule:
5186 adapter->work_counter++;
5187 schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
5188 }
5189
5190 /* If any VFs are already enabled don't FLR the PF */
5191 static bool be_reset_required(struct be_adapter *adapter)
5192 {
5193 return pci_num_vf(adapter->pdev) ? false : true;
5194 }
5195
5196 static char *mc_name(struct be_adapter *adapter)
5197 {
5198 char *str = ""; /* default */
5199
5200 switch (adapter->mc_type) {
5201 case UMC:
5202 str = "UMC";
5203 break;
5204 case FLEX10:
5205 str = "FLEX10";
5206 break;
5207 case vNIC1:
5208 str = "vNIC-1";
5209 break;
5210 case nPAR:
5211 str = "nPAR";
5212 break;
5213 case UFP:
5214 str = "UFP";
5215 break;
5216 case vNIC2:
5217 str = "vNIC-2";
5218 break;
5219 default:
5220 str = "";
5221 }
5222
5223 return str;
5224 }
5225
5226 static inline char *func_name(struct be_adapter *adapter)
5227 {
5228 return be_physfn(adapter) ? "PF" : "VF";
5229 }
5230
5231 static inline char *nic_name(struct pci_dev *pdev)
5232 {
5233 switch (pdev->device) {
5234 case OC_DEVICE_ID1:
5235 return OC_NAME;
5236 case OC_DEVICE_ID2:
5237 return OC_NAME_BE;
5238 case OC_DEVICE_ID3:
5239 case OC_DEVICE_ID4:
5240 return OC_NAME_LANCER;
5241 case BE_DEVICE_ID2:
5242 return BE3_NAME;
5243 case OC_DEVICE_ID5:
5244 case OC_DEVICE_ID6:
5245 return OC_NAME_SH;
5246 default:
5247 return BE_NAME;
5248 }
5249 }
5250
5251 static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id)
5252 {
5253 struct be_adapter *adapter;
5254 struct net_device *netdev;
5255 int status = 0;
5256
5257 dev_info(&pdev->dev, "%s version is %s\n", DRV_NAME, DRV_VER);
5258
5259 status = pci_enable_device(pdev);
5260 if (status)
5261 goto do_none;
5262
5263 status = pci_request_regions(pdev, DRV_NAME);
5264 if (status)
5265 goto disable_dev;
5266 pci_set_master(pdev);
5267
5268 netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS);
5269 if (!netdev) {
5270 status = -ENOMEM;
5271 goto rel_reg;
5272 }
5273 adapter = netdev_priv(netdev);
5274 adapter->pdev = pdev;
5275 pci_set_drvdata(pdev, adapter);
5276 adapter->netdev = netdev;
5277 SET_NETDEV_DEV(netdev, &pdev->dev);
5278
5279 status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
5280 if (!status) {
5281 netdev->features |= NETIF_F_HIGHDMA;
5282 } else {
5283 status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
5284 if (status) {
5285 dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
5286 goto free_netdev;
5287 }
5288 }
5289
5290 status = pci_enable_pcie_error_reporting(pdev);
5291 if (!status)
5292 dev_info(&pdev->dev, "PCIe error reporting enabled\n");
5293
5294 status = be_ctrl_init(adapter);
5295 if (status)
5296 goto free_netdev;
5297
5298 /* sync up with fw's ready state */
5299 if (be_physfn(adapter)) {
5300 status = be_fw_wait_ready(adapter);
5301 if (status)
5302 goto ctrl_clean;
5303 }
5304
5305 if (be_reset_required(adapter)) {
5306 status = be_cmd_reset_function(adapter);
5307 if (status)
5308 goto ctrl_clean;
5309
5310 /* Wait for interrupts to quiesce after an FLR */
5311 msleep(100);
5312 }
5313
5314 /* Allow interrupts for other ULPs running on NIC function */
5315 be_intr_set(adapter, true);
5316
5317 /* tell fw we're ready to fire cmds */
5318 status = be_cmd_fw_init(adapter);
5319 if (status)
5320 goto ctrl_clean;
5321
5322 status = be_stats_init(adapter);
5323 if (status)
5324 goto ctrl_clean;
5325
5326 status = be_get_initial_config(adapter);
5327 if (status)
5328 goto stats_clean;
5329
5330 INIT_DELAYED_WORK(&adapter->work, be_worker);
5331 INIT_DELAYED_WORK(&adapter->func_recovery_work, be_func_recovery_task);
5332 adapter->rx_fc = true;
5333 adapter->tx_fc = true;
5334
5335 status = be_setup(adapter);
5336 if (status)
5337 goto stats_clean;
5338
5339 be_netdev_init(netdev);
5340 status = register_netdev(netdev);
5341 if (status != 0)
5342 goto unsetup;
5343
5344 be_roce_dev_add(adapter);
5345
5346 schedule_delayed_work(&adapter->func_recovery_work,
5347 msecs_to_jiffies(1000));
5348
5349 dev_info(&pdev->dev, "%s: %s %s port %c\n", nic_name(pdev),
5350 func_name(adapter), mc_name(adapter), adapter->port_name);
5351
5352 return 0;
5353
5354 unsetup:
5355 be_clear(adapter);
5356 stats_clean:
5357 be_stats_cleanup(adapter);
5358 ctrl_clean:
5359 be_ctrl_cleanup(adapter);
5360 free_netdev:
5361 free_netdev(netdev);
5362 rel_reg:
5363 pci_release_regions(pdev);
5364 disable_dev:
5365 pci_disable_device(pdev);
5366 do_none:
5367 dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
5368 return status;
5369 }
5370
5371 static int be_suspend(struct pci_dev *pdev, pm_message_t state)
5372 {
5373 struct be_adapter *adapter = pci_get_drvdata(pdev);
5374 struct net_device *netdev = adapter->netdev;
5375
5376 if (adapter->wol_en)
5377 be_setup_wol(adapter, true);
5378
5379 be_intr_set(adapter, false);
5380 cancel_delayed_work_sync(&adapter->func_recovery_work);
5381
5382 netif_device_detach(netdev);
5383 if (netif_running(netdev)) {
5384 rtnl_lock();
5385 be_close(netdev);
5386 rtnl_unlock();
5387 }
5388 be_clear(adapter);
5389
5390 pci_save_state(pdev);
5391 pci_disable_device(pdev);
5392 pci_set_power_state(pdev, pci_choose_state(pdev, state));
5393 return 0;
5394 }
5395
5396 static int be_resume(struct pci_dev *pdev)
5397 {
5398 int status = 0;
5399 struct be_adapter *adapter = pci_get_drvdata(pdev);
5400 struct net_device *netdev = adapter->netdev;
5401
5402 netif_device_detach(netdev);
5403
5404 status = pci_enable_device(pdev);
5405 if (status)
5406 return status;
5407
5408 pci_set_power_state(pdev, PCI_D0);
5409 pci_restore_state(pdev);
5410
5411 status = be_fw_wait_ready(adapter);
5412 if (status)
5413 return status;
5414
5415 status = be_cmd_reset_function(adapter);
5416 if (status)
5417 return status;
5418
5419 be_intr_set(adapter, true);
5420 /* tell fw we're ready to fire cmds */
5421 status = be_cmd_fw_init(adapter);
5422 if (status)
5423 return status;
5424
5425 be_setup(adapter);
5426 if (netif_running(netdev)) {
5427 rtnl_lock();
5428 be_open(netdev);
5429 rtnl_unlock();
5430 }
5431
5432 schedule_delayed_work(&adapter->func_recovery_work,
5433 msecs_to_jiffies(1000));
5434 netif_device_attach(netdev);
5435
5436 if (adapter->wol_en)
5437 be_setup_wol(adapter, false);
5438
5439 return 0;
5440 }
5441
5442 /*
5443 * An FLR will stop BE from DMAing any data.
5444 */
5445 static void be_shutdown(struct pci_dev *pdev)
5446 {
5447 struct be_adapter *adapter = pci_get_drvdata(pdev);
5448
5449 if (!adapter)
5450 return;
5451
5452 be_roce_dev_shutdown(adapter);
5453 cancel_delayed_work_sync(&adapter->work);
5454 cancel_delayed_work_sync(&adapter->func_recovery_work);
5455
5456 netif_device_detach(adapter->netdev);
5457
5458 be_cmd_reset_function(adapter);
5459
5460 pci_disable_device(pdev);
5461 }
5462
5463 static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
5464 pci_channel_state_t state)
5465 {
5466 struct be_adapter *adapter = pci_get_drvdata(pdev);
5467 struct net_device *netdev = adapter->netdev;
5468
5469 dev_err(&adapter->pdev->dev, "EEH error detected\n");
5470
5471 if (!adapter->eeh_error) {
5472 adapter->eeh_error = true;
5473
5474 cancel_delayed_work_sync(&adapter->func_recovery_work);
5475
5476 rtnl_lock();
5477 netif_device_detach(netdev);
5478 if (netif_running(netdev))
5479 be_close(netdev);
5480 rtnl_unlock();
5481
5482 be_clear(adapter);
5483 }
5484
5485 if (state == pci_channel_io_perm_failure)
5486 return PCI_ERS_RESULT_DISCONNECT;
5487
5488 pci_disable_device(pdev);
5489
5490 /* The error could cause the FW to trigger a flash debug dump.
5491 * Resetting the card while flash dump is in progress
5492 * can cause it not to recover; wait for it to finish.
5493 * Wait only for first function as it is needed only once per
5494 * adapter.
5495 */
5496 if (pdev->devfn == 0)
5497 ssleep(30);
5498
5499 return PCI_ERS_RESULT_NEED_RESET;
5500 }
5501
5502 static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
5503 {
5504 struct be_adapter *adapter = pci_get_drvdata(pdev);
5505 int status;
5506
5507 dev_info(&adapter->pdev->dev, "EEH reset\n");
5508
5509 status = pci_enable_device(pdev);
5510 if (status)
5511 return PCI_ERS_RESULT_DISCONNECT;
5512
5513 pci_set_master(pdev);
5514 pci_set_power_state(pdev, PCI_D0);
5515 pci_restore_state(pdev);
5516
5517 /* Check if card is ok and fw is ready */
5518 dev_info(&adapter->pdev->dev,
5519 "Waiting for FW to be ready after EEH reset\n");
5520 status = be_fw_wait_ready(adapter);
5521 if (status)
5522 return PCI_ERS_RESULT_DISCONNECT;
5523
5524 pci_cleanup_aer_uncorrect_error_status(pdev);
5525 be_clear_all_error(adapter);
5526 return PCI_ERS_RESULT_RECOVERED;
5527 }
5528
5529 static void be_eeh_resume(struct pci_dev *pdev)
5530 {
5531 int status = 0;
5532 struct be_adapter *adapter = pci_get_drvdata(pdev);
5533 struct net_device *netdev = adapter->netdev;
5534
5535 dev_info(&adapter->pdev->dev, "EEH resume\n");
5536
5537 pci_save_state(pdev);
5538
5539 status = be_cmd_reset_function(adapter);
5540 if (status)
5541 goto err;
5542
5543 /* On some BE3 FW versions, after a HW reset,
5544 * interrupts will remain disabled for each function.
5545 * So, explicitly enable interrupts
5546 */
5547 be_intr_set(adapter, true);
5548
5549 /* tell fw we're ready to fire cmds */
5550 status = be_cmd_fw_init(adapter);
5551 if (status)
5552 goto err;
5553
5554 status = be_setup(adapter);
5555 if (status)
5556 goto err;
5557
5558 if (netif_running(netdev)) {
5559 status = be_open(netdev);
5560 if (status)
5561 goto err;
5562 }
5563
5564 schedule_delayed_work(&adapter->func_recovery_work,
5565 msecs_to_jiffies(1000));
5566 netif_device_attach(netdev);
5567 return;
5568 err:
5569 dev_err(&adapter->pdev->dev, "EEH resume failed\n");
5570 }
5571
5572 static const struct pci_error_handlers be_eeh_handlers = {
5573 .error_detected = be_eeh_err_detected,
5574 .slot_reset = be_eeh_reset,
5575 .resume = be_eeh_resume,
5576 };
5577
5578 static struct pci_driver be_driver = {
5579 .name = DRV_NAME,
5580 .id_table = be_dev_ids,
5581 .probe = be_probe,
5582 .remove = be_remove,
5583 .suspend = be_suspend,
5584 .resume = be_resume,
5585 .shutdown = be_shutdown,
5586 .err_handler = &be_eeh_handlers
5587 };
5588
5589 static int __init be_init_module(void)
5590 {
5591 if (rx_frag_size != 8192 && rx_frag_size != 4096 &&
5592 rx_frag_size != 2048) {
5593 printk(KERN_WARNING DRV_NAME
5594 " : Module param rx_frag_size must be 2048/4096/8192."
5595 " Using 2048\n");
5596 rx_frag_size = 2048;
5597 }
5598
5599 return pci_register_driver(&be_driver);
5600 }
5601 module_init(be_init_module);
5602
5603 static void __exit be_exit_module(void)
5604 {
5605 pci_unregister_driver(&be_driver);
5606 }
5607 module_exit(be_exit_module);
This page took 0.145435 seconds and 6 git commands to generate.