.. | .. |
---|
27 | 27 | #include <net/tcp.h> |
---|
28 | 28 | #include <net/ipv6.h> |
---|
29 | 29 | #include <net/ip6_checksum.h> |
---|
30 | | -#include <net/busy_poll.h> |
---|
31 | 30 | #include <linux/prefetch.h> |
---|
32 | 31 | #include "bnx2x_cmn.h" |
---|
33 | 32 | #include "bnx2x_init.h" |
---|
.. | .. |
---|
505 | 504 | * @len_on_bd: total length of the first packet for the |
---|
506 | 505 | * aggregation. |
---|
507 | 506 | * @pkt_len: length of all segments |
---|
| 507 | + * @num_of_coalesced_segs: count of segments |
---|
508 | 508 | * |
---|
509 | 509 | * Approximate value of the MSS for this aggregation calculated using |
---|
510 | 510 | * the first packet of it. |
---|
.. | .. |
---|
688 | 688 | if (unlikely(gfpflags_allow_blocking(gfp_mask))) |
---|
689 | 689 | return (void *)__get_free_page(gfp_mask); |
---|
690 | 690 | |
---|
691 | | - return netdev_alloc_frag(fp->rx_frag_size); |
---|
| 691 | + return napi_alloc_frag(fp->rx_frag_size); |
---|
692 | 692 | } |
---|
693 | 693 | |
---|
694 | 694 | return kmalloc(fp->rx_buf_size + NET_SKB_PAD, gfp_mask); |
---|
.. | .. |
---|
788 | 788 | BNX2X_ERR("skb_put is about to fail... pad %d len %d rx_buf_size %d\n", |
---|
789 | 789 | pad, len, fp->rx_buf_size); |
---|
790 | 790 | bnx2x_panic(); |
---|
| 791 | + bnx2x_frag_free(fp, new_data); |
---|
791 | 792 | return; |
---|
792 | 793 | } |
---|
793 | 794 | #endif |
---|
.. | .. |
---|
1913 | 1914 | } |
---|
1914 | 1915 | |
---|
1915 | 1916 | u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb, |
---|
1916 | | - struct net_device *sb_dev, |
---|
1917 | | - select_queue_fallback_t fallback) |
---|
| 1917 | + struct net_device *sb_dev) |
---|
1918 | 1918 | { |
---|
1919 | 1919 | struct bnx2x *bp = netdev_priv(dev); |
---|
1920 | 1920 | |
---|
.. | .. |
---|
1936 | 1936 | } |
---|
1937 | 1937 | |
---|
1938 | 1938 | /* select a non-FCoE queue */ |
---|
1939 | | - return fallback(dev, skb, NULL) % (BNX2X_NUM_ETH_QUEUES(bp)); |
---|
| 1939 | + return netdev_pick_tx(dev, skb, NULL) % |
---|
| 1940 | + (BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos); |
---|
1940 | 1941 | } |
---|
1941 | 1942 | |
---|
1942 | 1943 | void bnx2x_set_num_queues(struct bnx2x *bp) |
---|
.. | .. |
---|
1959 | 1960 | * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues |
---|
1960 | 1961 | * |
---|
1961 | 1962 | * @bp: Driver handle |
---|
| 1963 | + * @include_cnic: handle cnic case |
---|
1962 | 1964 | * |
---|
1963 | 1965 | * We currently support for at most 16 Tx queues for each CoS thus we will |
---|
1964 | 1966 | * allocate a multiple of 16 for ETH L2 rings according to the value of the |
---|
.. | .. |
---|
2362 | 2364 | /* is another pf loaded on this engine? */ |
---|
2363 | 2365 | if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP && |
---|
2364 | 2366 | load_code != FW_MSG_CODE_DRV_LOAD_COMMON) { |
---|
2365 | | - /* build my FW version dword */ |
---|
2366 | | - u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) + |
---|
2367 | | - (BCM_5710_FW_MINOR_VERSION << 8) + |
---|
2368 | | - (BCM_5710_FW_REVISION_VERSION << 16) + |
---|
2369 | | - (BCM_5710_FW_ENGINEERING_VERSION << 24); |
---|
| 2367 | + u8 loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng; |
---|
| 2368 | + u32 loaded_fw; |
---|
2370 | 2369 | |
---|
2371 | 2370 | /* read loaded FW from chip */ |
---|
2372 | | - u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM); |
---|
| 2371 | + loaded_fw = REG_RD(bp, XSEM_REG_PRAM); |
---|
2373 | 2372 | |
---|
2374 | | - DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x\n", |
---|
2375 | | - loaded_fw, my_fw); |
---|
| 2373 | + loaded_fw_major = loaded_fw & 0xff; |
---|
| 2374 | + loaded_fw_minor = (loaded_fw >> 8) & 0xff; |
---|
| 2375 | + loaded_fw_rev = (loaded_fw >> 16) & 0xff; |
---|
| 2376 | + loaded_fw_eng = (loaded_fw >> 24) & 0xff; |
---|
| 2377 | + |
---|
| 2378 | + DP(BNX2X_MSG_SP, "loaded fw 0x%x major 0x%x minor 0x%x rev 0x%x eng 0x%x\n", |
---|
| 2379 | + loaded_fw, loaded_fw_major, loaded_fw_minor, loaded_fw_rev, loaded_fw_eng); |
---|
2376 | 2380 | |
---|
2377 | 2381 | /* abort nic load if version mismatch */ |
---|
2378 | | - if (my_fw != loaded_fw) { |
---|
| 2382 | + if (loaded_fw_major != BCM_5710_FW_MAJOR_VERSION || |
---|
| 2383 | + loaded_fw_minor != BCM_5710_FW_MINOR_VERSION || |
---|
| 2384 | + loaded_fw_eng != BCM_5710_FW_ENGINEERING_VERSION || |
---|
| 2385 | + loaded_fw_rev < BCM_5710_FW_REVISION_VERSION_V15) { |
---|
2379 | 2386 | if (print_err) |
---|
2380 | | - BNX2X_ERR("bnx2x with FW %x was already loaded which mismatches my %x FW. Aborting\n", |
---|
2381 | | - loaded_fw, my_fw); |
---|
| 2387 | + BNX2X_ERR("loaded FW incompatible. Aborting\n"); |
---|
2382 | 2388 | else |
---|
2383 | | - BNX2X_DEV_INFO("bnx2x with FW %x was already loaded which mismatches my %x FW, possibly due to MF UNDI\n", |
---|
2384 | | - loaded_fw, my_fw); |
---|
| 2389 | + BNX2X_DEV_INFO("loaded FW incompatible, possibly due to MF UNDI\n"); |
---|
| 2390 | + |
---|
2385 | 2391 | return -EBUSY; |
---|
2386 | 2392 | } |
---|
2387 | 2393 | } |
---|
.. | .. |
---|
2846 | 2852 | bnx2x_set_rx_mode_inner(bp); |
---|
2847 | 2853 | |
---|
2848 | 2854 | if (bp->flags & PTP_SUPPORTED) { |
---|
| 2855 | + bnx2x_register_phc(bp); |
---|
2849 | 2856 | bnx2x_init_ptp(bp); |
---|
2850 | 2857 | bnx2x_configure_ptp_filters(bp); |
---|
2851 | 2858 | } |
---|
.. | .. |
---|
4173 | 4180 | |
---|
4174 | 4181 | DOORBELL_RELAXED(bp, txdata->cid, txdata->tx_db.raw); |
---|
4175 | 4182 | |
---|
4176 | | - mmiowb(); |
---|
4177 | | - |
---|
4178 | 4183 | txdata->tx_bd_prod += nbd; |
---|
4179 | 4184 | |
---|
4180 | 4185 | if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_DESC_PER_TX_PKT)) { |
---|
.. | .. |
---|
4232 | 4237 | /** |
---|
4233 | 4238 | * bnx2x_setup_tc - routine to configure net_device for multi tc |
---|
4234 | 4239 | * |
---|
4235 | | - * @netdev: net device to configure |
---|
4236 | | - * @tc: number of traffic classes to enable |
---|
| 4240 | + * @dev: net device to configure |
---|
| 4241 | + * @num_tc: number of traffic classes to enable |
---|
4237 | 4242 | * |
---|
4238 | 4243 | * callback connected to the ndo_setup_tc function pointer |
---|
4239 | 4244 | */ |
---|
.. | .. |
---|
4973 | 4978 | return 0; |
---|
4974 | 4979 | } |
---|
4975 | 4980 | |
---|
4976 | | -void bnx2x_tx_timeout(struct net_device *dev) |
---|
| 4981 | +void bnx2x_tx_timeout(struct net_device *dev, unsigned int txqueue) |
---|
4977 | 4982 | { |
---|
4978 | 4983 | struct bnx2x *bp = netdev_priv(dev); |
---|
4979 | 4984 | |
---|
.. | .. |
---|
4991 | 4996 | bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_TX_TIMEOUT, 0); |
---|
4992 | 4997 | } |
---|
4993 | 4998 | |
---|
4994 | | -int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state) |
---|
| 4999 | +static int __maybe_unused bnx2x_suspend(struct device *dev_d) |
---|
4995 | 5000 | { |
---|
| 5001 | + struct pci_dev *pdev = to_pci_dev(dev_d); |
---|
4996 | 5002 | struct net_device *dev = pci_get_drvdata(pdev); |
---|
4997 | 5003 | struct bnx2x *bp; |
---|
4998 | 5004 | |
---|
.. | .. |
---|
5004 | 5010 | |
---|
5005 | 5011 | rtnl_lock(); |
---|
5006 | 5012 | |
---|
5007 | | - pci_save_state(pdev); |
---|
5008 | | - |
---|
5009 | 5013 | if (!netif_running(dev)) { |
---|
5010 | 5014 | rtnl_unlock(); |
---|
5011 | 5015 | return 0; |
---|
.. | .. |
---|
5015 | 5019 | |
---|
5016 | 5020 | bnx2x_nic_unload(bp, UNLOAD_CLOSE, false); |
---|
5017 | 5021 | |
---|
5018 | | - bnx2x_set_power_state(bp, pci_choose_state(pdev, state)); |
---|
5019 | | - |
---|
5020 | 5022 | rtnl_unlock(); |
---|
5021 | 5023 | |
---|
5022 | 5024 | return 0; |
---|
5023 | 5025 | } |
---|
5024 | 5026 | |
---|
5025 | | -int bnx2x_resume(struct pci_dev *pdev) |
---|
| 5027 | +static int __maybe_unused bnx2x_resume(struct device *dev_d) |
---|
5026 | 5028 | { |
---|
| 5029 | + struct pci_dev *pdev = to_pci_dev(dev_d); |
---|
5027 | 5030 | struct net_device *dev = pci_get_drvdata(pdev); |
---|
5028 | 5031 | struct bnx2x *bp; |
---|
5029 | 5032 | int rc; |
---|
.. | .. |
---|
5041 | 5044 | |
---|
5042 | 5045 | rtnl_lock(); |
---|
5043 | 5046 | |
---|
5044 | | - pci_restore_state(pdev); |
---|
5045 | | - |
---|
5046 | 5047 | if (!netif_running(dev)) { |
---|
5047 | 5048 | rtnl_unlock(); |
---|
5048 | 5049 | return 0; |
---|
5049 | 5050 | } |
---|
5050 | 5051 | |
---|
5051 | | - bnx2x_set_power_state(bp, PCI_D0); |
---|
5052 | 5052 | netif_device_attach(dev); |
---|
5053 | 5053 | |
---|
5054 | 5054 | rc = bnx2x_nic_load(bp, LOAD_OPEN); |
---|
.. | .. |
---|
5058 | 5058 | return rc; |
---|
5059 | 5059 | } |
---|
5060 | 5060 | |
---|
| 5061 | +SIMPLE_DEV_PM_OPS(bnx2x_pm_ops, bnx2x_suspend, bnx2x_resume); |
---|
| 5062 | + |
---|
5061 | 5063 | void bnx2x_set_ctx_validation(struct bnx2x *bp, struct eth_context *cxt, |
---|
5062 | 5064 | u32 cid) |
---|
5063 | 5065 | { |
---|