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