qlcnic: Implement Multi Tx queues and ndo_get_phys_port support for 82xx.
Subsystems (3)
cover qlcnic: Implement Multi Tx queues and ndo_get_phys_port support for 82xx.
From: Himanshu Madhani <[email protected]>
This patch series contains following updates
o Patches for enabling multiple Tx queues for 82xx series adapter
o Patch to implement ndo_get_phys_port support for 82xx series adapter.
Please apply to net-next.
Thanks,
Himanshu
Himanshu Madhani (4):
qlcnic: Multi Tx queue support for 82xx Series adapter.
qlcnic: Enable Tx queue changes using ethtool for 82xx Series adapter.
qlcnic: Enable diagnostic test for multiple Tx queues.
qlcnic: Update version to 5.3.48
Shahed Shaikh (1):
qlcnic: Implement ndo_get_phys_port_id for 82xx adapter
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 107 +++++++- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 12 +- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 4 +- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 206 +++++++++++---- .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 65 ++++- drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 18 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 8 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 12 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 145 +++++++++-- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 284 ++++++++++++++++++--- .../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 +- 12 files changed, 711 insertions(+), 154 deletions(-)
Signature · 1 line
1.8.1.4
PATCH 1/5 qlcnic: Multi Tx queue support for 82xx Series adapter.
From: Himanshu Madhani <[email protected]>
o 82xx firmware allows support for multiple Tx queues. This patch will enable multi Tx queue support for 82xx series adapter. Max number of Tx queues supported will be 8.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 74 +++++++- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 6 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 196 +++++++++++++++------ drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 3 + drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 11 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 140 ++++++++++++--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 167 +++++++++++++++--- 8 files changed, 487 insertions(+), 112 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +69 -5
@@ -97,6 +97,9 @@#define TX_STOP_THRESH ((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \ + MGMT_CMD_DESC_RESV)#define QLCNIC_MAX_TX_TIMEOUTS 2 +#define QLCNIC_MAX_TX_RINGS 8 +#define QLCNIC_MAX_SDS_RINGS 8 +/* * Following are the states of the Phantom. Phantom will set them and * Host will read to check if the fields are correct.
@@ -515,6 +518,7 @@ struct qlcnic_host_sds_ring {u32 num_desc;void __iomem *crb_sts_consumer; +struct qlcnic_host_tx_ring *tx_ring;struct status_desc *desc_head;struct qlcnic_adapter *adapter;struct napi_struct napi;
@@ -532,9 +536,17 @@ struct qlcnic_host_tx_ring {void __iomem *crb_intr_mask;char name[IFNAMSIZ +12 ];u16 ctx_id; + +u32 state;u32 producer;u32 sw_consumer;u32 num_desc; + +u64 xmit_on; +u64 xmit_off; +u64 xmit_called; +u64 xmit_finished; +void __iomem *crb_cmd_producer;struct cmd_desc_type0 *desc_head;struct qlcnic_adapter *adapter;
@@ -559,7 +571,6 @@ struct qlcnic_recv_context {u32 state;u16 context_id;u16 virt_port; - };/* HW context creation */
@@ -604,6 +615,7 @@ struct qlcnic_recv_context {#define QLCNIC_CAP0_LRO_CONTIGUOUS (1 << 8)#define QLCNIC_CAP0_VALIDOFF (1 << 11)#define QLCNIC_CAP0_LRO_MSS (1 << 21) +#define QLCNIC_CAP0_TX_MULTI (1 << 22)/* * Context state
@@ -631,7 +643,7 @@ struct qlcnic_hostrq_rds_ring {struct qlcnic_hostrq_rx_ctx {__le64 host_rsp_dma_addr;/* Response dma'd here */ -__le32 capabilities[4 ];/* Flag bit vector */ +__le32 capabilities[4 ];/* Flag bit vector */ __le32 host_int_crb_mode;/* Interrupt crb usage */ __le32 host_rds_crb_mode;/* RDS crb usage */ /* These ring offsets are relative to data[0] below */
@@ -814,6 +826,7 @@ struct qlcnic_mac_list_s {#define QLCNIC_FW_CAPABILITY_BDG BIT_8#define QLCNIC_FW_CAPABILITY_FVLANTX BIT_9#define QLCNIC_FW_CAPABILITY_HW_LRO BIT_10 +#define QLCNIC_FW_CAPABILITY_2_MULTI_TX BIT_4#define QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK BIT_27#define QLCNIC_FW_CAPABILITY_MORE_CAPS BIT_31
@@ -922,6 +935,7 @@ struct qlcnic_ipaddr {#define QLCNIC_BEACON_DISABLE 0xD#define QLCNIC_DEF_NUM_STS_DESC_RINGS 4 +#define QLCNIC_DEF_NUM_TX_RINGS 4#define QLCNIC_MSIX_TBL_SPACE 8192#define QLCNIC_PCI_REG_MSIX_TBL 0x44#define QLCNIC_MSIX_TBL_PGSIZE 4096
@@ -937,6 +951,7 @@ struct qlcnic_ipaddr {#define __QLCNIC_DIAG_RES_ALLOC 6#define __QLCNIC_LED_ENABLE 7#define __QLCNIC_ELB_INPROGRESS 8 +#define __QLCNIC_MULTI_TX_UNIQUE 9#define __QLCNIC_SRIOV_ENABLE 10#define __QLCNIC_SRIOV_CAPABLE 11#define __QLCNIC_MBX_POLL_ENABLE 12
@@ -1482,7 +1497,8 @@ void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter);void qlcnic_reset_rx_buffers_list (struct qlcnic_adapter *adapter);void qlcnic_release_rx_buffers (struct qlcnic_adapter *adapter); -void qlcnic_release_tx_buffers (struct qlcnic_adapter *adapter); +void qlcnic_release_tx_buffers (struct qlcnic_adapter *, +struct qlcnic_host_tx_ring *);int qlcnic_check_fw_status (struct qlcnic_adapter *adapter);void qlcnic_watchdog_task (struct work_struct *work);
@@ -1543,6 +1559,7 @@ void qlcnic_free_sds_rings(struct qlcnic_recv_context *);void qlcnic_advert_link_change (struct qlcnic_adapter *,int );void qlcnic_free_tx_rings (struct qlcnic_adapter *);int qlcnic_alloc_tx_rings (struct qlcnic_adapter *,struct net_device *); +void qlcnic_dump_mbx (struct qlcnic_adapter *,struct qlcnic_cmd_args *);void qlcnic_create_sysfs_entries (struct qlcnic_adapter *adapter);void qlcnic_remove_sysfs_entries (struct qlcnic_adapter *adapter);
@@ -1605,6 +1622,26 @@ static inline u32 qlcnic_tx_avail(struct qlcnic_host_tx_ring *tx_ring) tx_ring->producer; } +static inline int qlcnic_set_real_num_queues (struct qlcnic_adapter *adapter, +struct net_device *netdev) +{ +int err, tx_q; + + tx_q = adapter->max_drv_tx_rings; + + netdev->num_tx_queues = tx_q; + netdev->real_num_tx_queues = tx_q; + + err =netif_set_real_num_tx_queues (netdev, tx_q); +if (err) +dev_err (&adapter->pdev->dev,"failed to set %d Tx queues\n" , + tx_q); +else +dev_info (&adapter->pdev->dev,"set %d Tx queues\n" , tx_q); + +return err; +} +struct qlcnic_nic_template {int (*config_bridged_mode) (struct qlcnic_adapter *,u32 );int (*config_led) (struct qlcnic_adapter *,u32 ,u32 );
@@ -1932,16 +1969,43 @@ static inline void qlcnic_config_ipaddr(struct qlcnic_adapter *adapter, adapter->nic_ops->config_ipaddr (adapter, ip, cmd); } +static inline bool qlcnic_check_multi_tx (struct qlcnic_adapter *adapter) +{ +return test_bit (__QLCNIC_MULTI_TX_UNIQUE, &adapter->state); +} + +static inline void qlcnic_disable_multi_tx (struct qlcnic_adapter *adapter) +{ +test_and_clear_bit (__QLCNIC_MULTI_TX_UNIQUE, &adapter->state); + adapter->max_drv_tx_rings =1 ; +} + +/* When operating in a muti tx mode, driver needs to write 0x1 +* to src register, instead of 0x0 to disable receiving interrupt. +*/ static inline void qlcnic_disable_int (struct qlcnic_host_sds_ring *sds_ring) { -writel (0 , sds_ring->crb_intr_mask); +struct qlcnic_adapter *adapter = sds_ring->adapter; + +if (qlcnic_check_multi_tx (adapter) && + (adapter->flags &QLCNIC_MSIX_ENABLED )) +writel (0x1 , sds_ring->crb_intr_mask); +else +writel (0 , sds_ring->crb_intr_mask); } +/* When operating in a muti tx mode, driver needs to write 0x0 +* to src register, instead of 0x1 to enable receiving interrupts. +*/ static inline void qlcnic_enable_int (struct qlcnic_host_sds_ring *sds_ring) {struct qlcnic_adapter *adapter = sds_ring->adapter; -writel (0x1 , sds_ring->crb_intr_mask); +if (qlcnic_check_multi_tx (adapter) && + (adapter->flags &QLCNIC_MSIX_ENABLED )) +writel (0 , sds_ring->crb_intr_mask); +else +writel (0x1 , sds_ring->crb_intr_mask);if (!QLCNIC_IS_MSI_FAMILY (adapter))writel (0xfbff , adapter->tgt_mask_reg);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +3 -3
@@ -695,8 +695,8 @@ static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,static void qlcnic_83xx_handle_idc_comp_aen (struct qlcnic_adapter *adapter,u32 data[]); -static void qlcnic_dump_mbx (struct qlcnic_adapter *adapter, -struct qlcnic_cmd_args *cmd) +void qlcnic_dump_mbx (struct qlcnic_adapter *adapter, +struct qlcnic_cmd_args *cmd) {int i;
@@ -1691,7 +1691,7 @@ int qlcnic_83xx_loopback_test(struct net_device *netdev, u8 mode)/* Make sure carrier is off and queue is stopped during loopback */ if (netif_running (netdev)) {netif_carrier_off (netdev); -netif_stop_queue (netdev); +netif_tx_stop_all_queues (netdev); } ret =qlcnic_do_lb_test (adapter, mode);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +144 -52
344 lines not on this page · raw message
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +1 -1
@@ -387,7 +387,7 @@ qlcnic_send_cmd_descs(struct qlcnic_adapter *adapter,if (!test_bit (__QLCNIC_FW_ATTACHED, &adapter->state))return -EIO ; - tx_ring = adapter->tx_ring; + tx_ring = &adapter->tx_ring[0 ];__netif_tx_lock_bh (tx_ring->txq); producer = tx_ring->producer;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h +3 -0
@@ -87,6 +87,7 @@ enum qlcnic_regs {#define QLCNIC_CMD_CONFIG_VPORT 0x32#define QLCNIC_CMD_GET_MAC_STATS 0x37#define QLCNIC_CMD_82XX_SET_DRV_VER 0x38 +#define QLCNIC_CMD_MQ_TX_CONFIG_INTR 0x39#define QLCNIC_CMD_GET_LED_STATUS 0x3C#define QLCNIC_CMD_CONFIGURE_RSS 0x41#define QLCNIC_CMD_CONFIG_INTR_COAL 0x43
@@ -177,6 +178,8 @@ int qlcnic_82xx_setup_intr(struct qlcnic_adapter *, u8);irqreturn_t qlcnic_82xx_clear_legacy_intr (struct qlcnic_adapter *);int qlcnic_82xx_issue_cmd (struct qlcnic_adapter *adapter,struct qlcnic_cmd_args *); +int qlcnic_82xx_mq_intrpt (struct qlcnic_adapter *,int ); +int qlcnic_82xx_config_intrpt (struct qlcnic_adapter *,u8 );int qlcnic_82xx_fw_cmd_create_rx_ctx (struct qlcnic_adapter *);int qlcnic_82xx_fw_cmd_create_tx_ctx (struct qlcnic_adapter *,struct qlcnic_host_tx_ring *tx_ring,int );
drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +8 -3
@@ -127,12 +127,12 @@ void qlcnic_reset_rx_buffers_list(struct qlcnic_adapter *adapter) } } -void qlcnic_release_tx_buffers (struct qlcnic_adapter *adapter) +void qlcnic_release_tx_buffers (struct qlcnic_adapter *adapter, +struct qlcnic_host_tx_ring *tx_ring) {struct qlcnic_cmd_buffer *cmd_buf;struct qlcnic_skb_frag *buffrag;int i, j; -struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; cmd_buf = tx_ring->cmd_buf_arr;for (i =0 ; i < tx_ring->num_desc; i++) {
@@ -241,7 +241,12 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter) sds_ring->irq = adapter->msix_entries[ring].vector; sds_ring->adapter = adapter; sds_ring->num_desc = adapter->num_rxd; - +if (qlcnic_82xx_check (adapter)) { +if (qlcnic_check_multi_tx (adapter)) + sds_ring->tx_ring = &adapter->tx_ring[ring]; +else + sds_ring->tx_ring = &adapter->tx_ring[0 ]; + }for (i =0 ; i <NUM_RCV_DESC_RINGS ; i++)INIT_LIST_HEAD (&sds_ring->free_list[i]); }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +117 -23
300 lines not on this page · raw message
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +142 -25
341 lines not on this page · raw message
Signature · 1 line
1.8.1.4
PATCH 2/5 qlcnic: Enable Tx queue changes using ethtool for 82xx Series adapter.
In reply to Himanshu MadhaniFrom: Himanshu Madhani <[email protected]>
o using ethtool {set|get}_channel option, user can change number of Tx queues for 82xx Series adapter.
o updated ethtool -S <ethX> option to display stats from each Tx queue.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 10 ++- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 2 +- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 2 +- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 2 +- .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 63 +++++++++++--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 3 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 96 +++++++++++++++++++--- .../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 +- 8 files changed, 145 insertions(+), 35 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +6 -4
@@ -1531,8 +1531,9 @@ int qlcnic_reset_context(struct qlcnic_adapter *);void qlcnic_diag_free_res (struct net_device *netdev,int max_sds_rings);int qlcnic_diag_alloc_res (struct net_device *netdev,int test);netdev_tx_t qlcnic_xmit_frame (struct sk_buff *skb,struct net_device *netdev); -int qlcnic_set_max_rss (struct qlcnic_adapter *,u8 ,size_t ); +int qlcnic_set_max_rss (struct qlcnic_adapter *,u8 ,int );int qlcnic_validate_max_rss (struct qlcnic_adapter *,__u32 ); +int qlcnic_validate_max_tx_rings (struct qlcnic_adapter *,int );void qlcnic_alloc_lb_filters_mem (struct qlcnic_adapter *adapter);void qlcnic_82xx_set_mac_filter_count (struct qlcnic_adapter *);int qlcnic_enable_msix (struct qlcnic_adapter *,u32 );
@@ -1679,7 +1680,7 @@ struct qlcnic_hardware_ops {int (*write_reg) (struct qlcnic_adapter *,ulong ,u32 );void (*get_ocm_win) (struct qlcnic_hardware_context *);int (*get_mac_address) (struct qlcnic_adapter *,u8 *); -int (*setup_intr) (struct qlcnic_adapter *,u8 ); +int (*setup_intr) (struct qlcnic_adapter *,u8 ,int );int (*alloc_mbx_args)(struct qlcnic_cmd_args *,struct qlcnic_adapter *,u32 );int (*mbx_cmd) (struct qlcnic_adapter *,struct qlcnic_cmd_args *);
@@ -1745,9 +1746,10 @@ static inline int qlcnic_get_mac_address(struct qlcnic_adapter *adapter,return adapter->ahw->hw_ops->get_mac_address (adapter, mac); } -static inline int qlcnic_setup_intr (struct qlcnic_adapter *adapter,u8 num_intr) +static inline int qlcnic_setup_intr (struct qlcnic_adapter *adapter, +u8 num_intr,int txq) { -return adapter->ahw->hw_ops->setup_intr (adapter, num_intr); +return adapter->ahw->hw_ops->setup_intr (adapter, num_intr, txq); } static inline int qlcnic_alloc_mbx_args(struct qlcnic_cmd_args *mbx,
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +1 -1
@@ -261,7 +261,7 @@ int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *adapter, ulong addr, } } -int qlcnic_83xx_setup_intr (struct qlcnic_adapter *adapter,u8 num_intr) +int qlcnic_83xx_setup_intr (struct qlcnic_adapter *adapter,u8 num_intr,int txq) {int err, i, num_msix;struct qlcnic_hardware_context *ahw = adapter->ahw;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +1 -1
@@ -523,7 +523,7 @@ enum qlc_83xx_ext_regs {/* 83xx funcitons */ int qlcnic_83xx_get_fw_version (struct qlcnic_adapter *);int qlcnic_83xx_issue_cmd (struct qlcnic_adapter *,struct qlcnic_cmd_args *); -int qlcnic_83xx_setup_intr (struct qlcnic_adapter *,u8 ); +int qlcnic_83xx_setup_intr (struct qlcnic_adapter *,u8 ,int );void qlcnic_83xx_get_func_no (struct qlcnic_adapter *);int qlcnic_83xx_cam_lock (struct qlcnic_adapter *);void qlcnic_83xx_cam_unlock (struct qlcnic_adapter *);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +1 -1
@@ -2201,7 +2201,7 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)if (err) goto detach_mbx; - err =qlcnic_setup_intr (adapter,0 ); + err =qlcnic_setup_intr (adapter,0 ,0 );if (err) {dev_err (&adapter->pdev->dev,"Failed to setup interrupt\n" ); goto disable_intr;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +51 -12
118 lines not on this page · raw message
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h +1 -2
@@ -150,7 +150,6 @@ struct ethtool_stats;struct pci_device_id ;struct qlcnic_host_sds_ring ;struct qlcnic_host_tx_ring ; -struct qlcnic_host_tx_ring ;struct qlcnic_hardware_context ;struct qlcnic_adapter ;
@@ -174,7 +173,7 @@ int qlcnic_82xx_set_lb_mode(struct qlcnic_adapter *, u8);void qlcnic_82xx_write_crb (struct qlcnic_adapter *,char *,loff_t ,size_t );void qlcnic_82xx_read_crb (struct qlcnic_adapter *,char *,loff_t ,size_t );void qlcnic_82xx_dev_request_reset (struct qlcnic_adapter *,u32 ); -int qlcnic_82xx_setup_intr (struct qlcnic_adapter *,u8 ); +int qlcnic_82xx_setup_intr (struct qlcnic_adapter *,u8 ,int );irqreturn_t qlcnic_82xx_clear_legacy_intr (struct qlcnic_adapter *);int qlcnic_82xx_issue_cmd (struct qlcnic_adapter *adapter,struct qlcnic_cmd_args *);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +83 -13
170 lines not on this page · raw message
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +1 -1
@@ -512,7 +512,7 @@ static int qlcnic_sriov_setup_vf(struct qlcnic_adapter *adapter,dev_warn (&adapter->pdev->dev,"Device does not support MSI interrupts\n" ); - err =qlcnic_setup_intr (adapter,1 ); + err =qlcnic_setup_intr (adapter,1 ,0 );if (err) {dev_err (&adapter->pdev->dev,"Failed to setup interrupt\n" ); goto err_out_disable_msi;
Signature · 1 line
1.8.1.4
PATCH 3/5 qlcnic: Enable diagnostic test for multiple Tx queues.
In reply to Himanshu MadhaniFrom: Himanshu Madhani <[email protected]>
o Enable diagnostic test via ethtool and QConvergeConsole application when Multiple Tx queues are enabled on 82xx series adapters.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 2 ++ drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 23 +++++++++++++--------- .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 2 ++ drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 3 ++- drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 13 ++++++++---- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 5 +++++ 6 files changed, 34 insertions(+), 14 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +2 -0
@@ -1990,6 +1990,7 @@ static inline void qlcnic_disable_int(struct qlcnic_host_sds_ring *sds_ring)struct qlcnic_adapter *adapter = sds_ring->adapter;if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test && (adapter->flags &QLCNIC_MSIX_ENABLED ))writel (0x1 , sds_ring->crb_intr_mask);else
@@ -2004,6 +2005,7 @@ static inline void qlcnic_enable_int(struct qlcnic_host_sds_ring *sds_ring)struct qlcnic_adapter *adapter = sds_ring->adapter;if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test && (adapter->flags &QLCNIC_MSIX_ENABLED ))writel (0 , sds_ring->crb_intr_mask);else
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +14 -9
@@ -295,7 +295,8 @@ int qlcnic_82xx_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter) | QLCNIC_CAP0_VALIDOFF); cap |= (QLCNIC_CAP0_JUMBO_CONTIGUOUS |QLCNIC_CAP0_LRO_CONTIGUOUS ); -if (qlcnic_check_multi_tx (adapter)) { +if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test) { cap |=QLCNIC_CAP0_TX_MULTI ; }else { temp_u16 = offsetof(struct qlcnic_hostrq_rx_ctx , msix_handler);
@@ -338,7 +339,8 @@ int qlcnic_82xx_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)memset (sds_ring->desc_head,0 ,STATUS_DESC_RINGSIZE (sds_ring)); prq_sds[i].host_phys_addr =cpu_to_le64 (sds_ring->phys_addr); prq_sds[i].ring_size =cpu_to_le32 (sds_ring->num_desc); -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test) prq_sds[i].msi_index =cpu_to_le16 (ahw->intr_tbl[i].id);else prq_sds[i].msi_index =cpu_to_le16 (i);
@@ -374,7 +376,7 @@ int qlcnic_82xx_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)for (i =0 ; i <le16_to_cpu (prsp->num_sds_rings); i++) { sds_ring = &recv_ctx->sds_rings[i]; reg =le32_to_cpu (prsp_sds[i].host_consumer_crb); -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && !adapter->ahw->diag_test) reg2 = ahw->intr_tbl[i].src;else reg2 =le32_to_cpu (prsp_sds[i].interrupt_crb);
@@ -464,13 +466,13 @@ int qlcnic_82xx_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter, temp = (QLCNIC_CAP0_LEGACY_CONTEXT |QLCNIC_CAP0_LEGACY_MN |QLCNIC_CAP0_LSO ); -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && !adapter->ahw->diag_test) temp |=QLCNIC_CAP0_TX_MULTI ; prq->capabilities[0 ] =cpu_to_le32 (temp);if (qlcnic_check_multi_tx (adapter) && - (adapter->max_drv_tx_rings >1 )) { + !adapter->ahw->diag_test) { temp_nsds_rings = adapter->max_sds_rings; index = temp_nsds_rings + ring; msix_id = ahw->intr_tbl[index].id;
@@ -506,6 +508,7 @@ int qlcnic_82xx_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter, tx_ring->crb_cmd_producer = adapter->ahw->pci_base0 + temp; tx_ring->ctx_id =le16_to_cpu (prsp->context_id);if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test && (adapter->flags &QLCNIC_MSIX_ENABLED )) { index = adapter->max_sds_rings + ring; intr_mask = ahw->intr_tbl[index].src;
@@ -681,13 +684,14 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *dev) err_out:if (qlcnic_82xx_check (dev) && (dev->flags &QLCNIC_MSIX_ENABLED ) && -qlcnic_check_multi_tx (dev)) -qlcnic_82xx_config_intrpt (dev,0 ); +qlcnic_check_multi_tx (dev) && !dev->ahw->diag_test) +qlcnic_82xx_config_intrpt (dev,0 );if (qlcnic_83xx_check (dev) && (dev->flags &QLCNIC_MSIX_ENABLED )) {if (dev->ahw->diag_test !=QLCNIC_LOOPBACK_TEST )qlcnic_83xx_config_intrpt (dev,0 ); } +return err; }
@@ -703,8 +707,9 @@ void qlcnic_fw_destroy_ctx(struct qlcnic_adapter *adapter)if (qlcnic_82xx_check (adapter) && (adapter->flags &QLCNIC_MSIX_ENABLED ) && -qlcnic_check_multi_tx (adapter)) -qlcnic_82xx_config_intrpt (adapter,0 ); +qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test) +qlcnic_82xx_config_intrpt (adapter,0 );if (qlcnic_83xx_check (adapter) && (adapter->flags &QLCNIC_MSIX_ENABLED )) {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c +2 -0
@@ -984,6 +984,7 @@ int qlcnic_do_lb_test(struct qlcnic_adapter *adapter, u8 mode)int qlcnic_loopback_test (struct net_device *netdev,u8 mode) {struct qlcnic_adapter *adapter =netdev_priv (netdev); +int max_drv_tx_rings = adapter->max_drv_tx_rings;int max_sds_rings = adapter->max_sds_rings;struct qlcnic_host_sds_ring *sds_ring;struct qlcnic_hardware_context *ahw = adapter->ahw;
@@ -1043,6 +1044,7 @@ int qlcnic_loopback_test(struct net_device *netdev, u8 mode) clear_it: adapter->max_sds_rings = max_sds_rings; + adapter->max_drv_tx_rings = max_drv_tx_rings;clear_bit (__QLCNIC_RESETTING, &adapter->state);return ret; }
drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +2 -1
@@ -242,7 +242,8 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter) sds_ring->adapter = adapter; sds_ring->num_desc = adapter->num_rxd;if (qlcnic_82xx_check (adapter)) { -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test) sds_ring->tx_ring = &adapter->tx_ring[ring];else sds_ring->tx_ring = &adapter->tx_ring[0 ];
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c +9 -4
@@ -130,7 +130,8 @@ struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *,inline void qlcnic_enable_tx_intr (struct qlcnic_adapter *adapter,struct qlcnic_host_tx_ring *tx_ring) { -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test)writel (0x0 , tx_ring->crb_intr_mask); }
@@ -138,7 +139,8 @@ inline void qlcnic_enable_tx_intr(struct qlcnic_adapter *adapter,static inline void qlcnic_disable_tx_int (struct qlcnic_adapter *adapter,struct qlcnic_host_tx_ring *tx_ring) { -if (qlcnic_check_multi_tx (adapter)) +if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test)writel (1 , tx_ring->crb_intr_mask); }
@@ -1466,6 +1468,7 @@ int qlcnic_82xx_napi_add(struct qlcnic_adapter *adapter,for (ring =0 ; ring < adapter->max_sds_rings; ring++) { sds_ring = &recv_ctx->sds_rings[ring];if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test && (adapter->max_drv_tx_rings >1 )) {netif_napi_add (netdev, &sds_ring->napi, qlcnic_rx_poll,QLCNIC_NETDEV_WEIGHT *2 );
@@ -1487,7 +1490,7 @@ int qlcnic_82xx_napi_add(struct qlcnic_adapter *adapter,return -ENOMEM ; } -if (qlcnic_check_multi_tx (adapter)) { +if (qlcnic_check_multi_tx (adapter) && !adapter->ahw->diag_test) {for (ring =0 ; ring < adapter->max_drv_tx_rings; ring++) { tx_ring = &adapter->tx_ring[ring]; netif_napi_add(netdev, &tx_ring->napi, qlcnic_tx_poll,
@@ -1512,7 +1515,7 @@ void qlcnic_82xx_napi_del(struct qlcnic_adapter *adapter)qlcnic_free_sds_rings (adapter->recv_ctx); -if (qlcnic_check_multi_tx (adapter)) { +if (qlcnic_check_multi_tx (adapter) && !adapter->ahw->diag_test) {for (ring =0 ; ring < adapter->max_drv_tx_rings; ring++) { tx_ring = &adapter->tx_ring[ring];netif_napi_del (&tx_ring->napi);
@@ -1540,6 +1543,7 @@ void qlcnic_82xx_napi_enable(struct qlcnic_adapter *adapter)if (qlcnic_check_multi_tx (adapter) && (adapter->flags &QLCNIC_MSIX_ENABLED ) && + !adapter->ahw->diag_test && (adapter->max_drv_tx_rings >1 )) {for (ring =0 ; ring < adapter->max_drv_tx_rings; ring++) { tx_ring = &adapter->tx_ring[ring];
@@ -1567,6 +1571,7 @@ void qlcnic_82xx_napi_disable(struct qlcnic_adapter *adapter) }if ((adapter->flags &QLCNIC_MSIX_ENABLED ) && + !adapter->ahw->diag_test &&qlcnic_check_multi_tx (adapter)) {for (ring =0 ; ring < adapter->max_drv_tx_rings; ring++) { tx_ring = &adapter->tx_ring[ring];
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +5 -0
@@ -581,6 +581,7 @@ int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) }else { adapter->ahw->num_msix = num_msix;if (qlcnic_check_multi_tx (adapter) && + !adapter->ahw->diag_test && (adapter->max_drv_tx_rings >1 )) max_sds_rings = num_msix - max_tx_rings;else
@@ -697,6 +698,7 @@ int qlcnic_82xx_mq_intrpt(struct qlcnic_adapter *adapter, int op_type)int err, i;if (qlcnic_check_multi_tx (adapter) && + !ahw->diag_test && (adapter->flags &QLCNIC_MSIX_ENABLED )) { ahw->intr_tbl =vzalloc (ahw->num_msix *sizeof (struct qlcnic_intrpt_config ));
@@ -1752,6 +1754,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings) {struct qlcnic_adapter *adapter =netdev_priv (netdev);struct qlcnic_host_sds_ring *sds_ring; +int max_tx_rings = adapter->max_drv_tx_rings;int ring;clear_bit (__QLCNIC_DEV_UP, &adapter->state);
@@ -1768,6 +1771,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings) adapter->ahw->diag_test =0 ; adapter->max_sds_rings = max_sds_rings; + adapter->max_drv_tx_rings = max_tx_rings;if (qlcnic_attach (adapter)) goto out;
@@ -1836,6 +1840,7 @@ int qlcnic_diag_alloc_res(struct net_device *netdev, int test) adapter->max_sds_rings =1 ; adapter->ahw->diag_test = test; adapter->ahw->linkup =0 ; + adapter->max_drv_tx_rings =1 ; ret =qlcnic_attach (adapter);if (ret) {
Signature · 1 line
1.8.1.4
PATCH 4/5 qlcnic: Implement ndo_get_phys_port_id for 82xx adapter
In reply to Himanshu MadhaniFrom: Shahed Shaikh <[email protected]>
Each function driver instance uses the MAC address of the lowest function belonging to that physical port as a unique port identifier. This port identifier is read and cached in driver during probe and provided to user space through ndo_get_phys_port_id()
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 17 ++++++++++--- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 4 +++- .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c | 5 ++-- drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 16 +++++++++++++ drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 2 +- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 28 +++++++++++++++++++--- 7 files changed, 63 insertions(+), 11 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +14 -3
@@ -471,6 +471,7 @@ struct qlcnic_hardware_context {u32 mbox_reg[4 ];struct qlcnic_mailbox *mailbox;u8 extend_lb_time; +u8 phys_port_id[ETH_ALEN ]; };struct qlcnic_adapter_stats {
@@ -926,6 +927,8 @@ struct qlcnic_ipaddr {#define QLCNIC_FW_LRO_MSS_CAP 0x8000#define QLCNIC_TX_INTR_SHARED 0x10000#define QLCNIC_APP_CHANGED_FLAGS 0x20000 +#define QLCNIC_HAS_PHYS_PORT_ID 0x40000 +#define QLCNIC_IS_MSI_FAMILY (adapter) \ ((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))#define QLCNIC_IS_TSO_CAPABLE (adapter) \
@@ -1510,6 +1513,7 @@ void __qlcnic_set_multi(struct net_device *, u16);int qlcnic_nic_add_mac (struct qlcnic_adapter *,const u8 *,u16 );int qlcnic_nic_del_mac (struct qlcnic_adapter *,const u8 *);void qlcnic_82xx_free_mac_list (struct qlcnic_adapter *adapter); +int qlcnic_82xx_read_phys_port_id (struct qlcnic_adapter *);int qlcnic_fw_cmd_set_mtu (struct qlcnic_adapter *adapter,int mtu);int qlcnic_fw_cmd_set_drv_version (struct qlcnic_adapter *,u32 );
@@ -1679,7 +1683,7 @@ struct qlcnic_hardware_ops {int (*read_reg) (struct qlcnic_adapter *,ulong ,int *);int (*write_reg) (struct qlcnic_adapter *,ulong ,u32 );void (*get_ocm_win) (struct qlcnic_hardware_context *); -int (*get_mac_address) (struct qlcnic_adapter *,u8 *); +int (*get_mac_address) (struct qlcnic_adapter *,u8 *,u8 );int (*setup_intr) (struct qlcnic_adapter *,u8 ,int );int (*alloc_mbx_args)(struct qlcnic_cmd_args *,struct qlcnic_adapter *,u32 );
@@ -1713,6 +1717,7 @@ struct qlcnic_hardware_ops {int (*get_board_info) (struct qlcnic_adapter *);void (*set_mac_filter_count) (struct qlcnic_adapter *);void (*free_mac_list) (struct qlcnic_adapter *); +int (*read_phys_port_id) (struct qlcnic_adapter *); };extern struct qlcnic_nic_template qlcnic_vf_ops;
@@ -1741,9 +1746,9 @@ static inline int qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter, }static inline int qlcnic_get_mac_address (struct qlcnic_adapter *adapter, -u8 *mac) +u8 *mac,u8 function) { -return adapter->ahw->hw_ops->get_mac_address (adapter, mac); +return adapter->ahw->hw_ops->get_mac_address (adapter, mac, function); } static inline int qlcnic_setup_intr(struct qlcnic_adapter *adapter,
@@ -1940,6 +1945,12 @@ static inline void qlcnic_set_mac_filter_count(struct qlcnic_adapter *adapter) adapter->ahw->hw_ops->set_mac_filter_count (adapter); } +static inline void qlcnic_read_phys_port_id (struct qlcnic_adapter *adapter) +{ +if (adapter->ahw->hw_ops->read_phys_port_id) + adapter->ahw->hw_ops->read_phys_port_id (adapter); +} +static inline void qlcnic_dev_request_reset (struct qlcnic_adapter *adapter,u32 key) {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +3 -1
@@ -2037,12 +2037,14 @@ void qlcnic_83xx_configure_mac(struct qlcnic_adapter *adapter, u8 *mac, cmd->req.arg[1 ] = type; } -int qlcnic_83xx_get_mac_address (struct qlcnic_adapter *adapter,u8 *mac) +int qlcnic_83xx_get_mac_address (struct qlcnic_adapter *adapter,u8 *mac, +u8 function) {int err, i;struct qlcnic_cmd_args cmd;u32 mac_low, mac_high; + function =0 ; err =qlcnic_alloc_mbx_args (&cmd, adapter,QLCNIC_CMD_MAC_ADDRESS );if (err)return err;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +1 -1
@@ -564,7 +564,7 @@ int qlcnic_83xx_setup_link_event(struct qlcnic_adapter *, int);void qlcnic_83xx_process_rcv_ring_diag (struct qlcnic_host_sds_ring *);int qlcnic_83xx_config_intrpt (struct qlcnic_adapter *,bool );int qlcnic_83xx_sre_macaddr_change (struct qlcnic_adapter *,u8 *,u16 ,u8 ); -int qlcnic_83xx_get_mac_address (struct qlcnic_adapter *,u8 *); +int qlcnic_83xx_get_mac_address (struct qlcnic_adapter *,u8 *,u8 );void qlcnic_83xx_configure_mac (struct qlcnic_adapter *,u8 *,u8 ,struct qlcnic_cmd_args *); int qlcnic_83xx_alloc_mbx_args(struct qlcnic_cmd_args *,
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c +3 -2
@@ -821,7 +821,8 @@ int qlcnic_82xx_config_intrpt(struct qlcnic_adapter *adapter, u8 op_type)return err; } -int qlcnic_82xx_get_mac_address (struct qlcnic_adapter *adapter,u8 *mac) +int qlcnic_82xx_get_mac_address (struct qlcnic_adapter *adapter,u8 *mac, +u8 function) {int err, i;struct qlcnic_cmd_args cmd;
@@ -831,7 +832,7 @@ int qlcnic_82xx_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac)if (err)return err; - cmd.req.arg[1 ] = adapter->ahw->pci_func |BIT_8 ; + cmd.req.arg[1 ] = function |BIT_8 ; err =qlcnic_issue_cmd (adapter, &cmd);if (err ==QLCNIC_RCODE_SUCCESS ) {
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +16 -0
@@ -740,6 +740,22 @@ int qlcnic_82xx_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode)return 0 ; } +int qlcnic_82xx_read_phys_port_id (struct qlcnic_adapter *adapter) +{ +u8 mac[ETH_ALEN ]; +int ret; + + ret =qlcnic_get_mac_address (adapter, mac, + adapter->ahw->physical_port); +if (ret) +return ret; + +memcpy (adapter->ahw->phys_port_id, mac,ETH_ALEN ); + adapter->flags |=QLCNIC_HAS_PHYS_PORT_ID ; + +return 0 ; +} +/* * Send the interrupt coalescing parameter set by ethtool to the card. */
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h +1 -1
@@ -186,7 +186,7 @@ void qlcnic_82xx_fw_cmd_del_rx_ctx(struct qlcnic_adapter *);void qlcnic_82xx_fw_cmd_del_tx_ctx (struct qlcnic_adapter *,struct qlcnic_host_tx_ring *);int qlcnic_82xx_sre_macaddr_change (struct qlcnic_adapter *,u8 *,u16 ,u8 ); -int qlcnic_82xx_get_mac_address (struct qlcnic_adapter *,u8 *); +int qlcnic_82xx_get_mac_address (struct qlcnic_adapter *,u8 *,u8 );int qlcnic_82xx_get_nic_info (struct qlcnic_adapter *,struct qlcnic_info *,u8 );int qlcnic_82xx_set_nic_info (struct qlcnic_adapter *,struct qlcnic_info *);int qlcnic_82xx_get_pci_info (struct qlcnic_adapter *,struct qlcnic_pci_info *);
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +25 -3
@@ -284,12 +284,15 @@ void qlcnic_free_sds_rings(struct qlcnic_recv_context *recv_ctx)int qlcnic_read_mac_addr (struct qlcnic_adapter *adapter) { -u8 mac_addr[ETH_ALEN ];struct net_device *netdev = adapter->netdev;struct pci_dev *pdev = adapter->pdev; +u8 mac_addr[ETH_ALEN ]; +int ret; -if (qlcnic_get_mac_address (adapter, mac_addr) !=0 ) -return -EIO ; + ret =qlcnic_get_mac_address (adapter, mac_addr, + adapter->ahw->pci_func); +if (ret) +return ret;memcpy (netdev->dev_addr, mac_addr,ETH_ALEN );memcpy (adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
@@ -431,6 +434,21 @@ static void qlcnic_82xx_cancel_idc_work(struct qlcnic_adapter *adapter)cancel_delayed_work_sync (&adapter->fw_work); } +static int qlcnic_get_phys_port_id (struct net_device *netdev, +struct netdev_phys_port_id *ppid) +{ +struct qlcnic_adapter *adapter =netdev_priv (netdev); +struct qlcnic_hardware_context *ahw = adapter->ahw; + +if (!(adapter->flags &QLCNIC_HAS_PHYS_PORT_ID )) +return -EOPNOTSUPP ; + + ppid->id_len =sizeof (ahw->phys_port_id); +memcpy (ppid->id, ahw->phys_port_id, ppid->id_len); + +return 0 ; +} +static const struct net_device_ops qlcnic_netdev_ops = { .ndo_open = qlcnic_open, .ndo_stop = qlcnic_close,
@@ -448,6 +466,7 @@ static const struct net_device_ops qlcnic_netdev_ops = { .ndo_fdb_add = qlcnic_fdb_add, .ndo_fdb_del = qlcnic_fdb_del, .ndo_fdb_dump = qlcnic_fdb_dump, + .ndo_get_phys_port_id = qlcnic_get_phys_port_id,#ifdef CONFIG_NET_POLL_CONTROLLER .ndo_poll_controller = qlcnic_poll_controller,#endif
@@ -520,6 +539,7 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = { .get_board_info = qlcnic_82xx_get_board_info, .set_mac_filter_count = qlcnic_82xx_set_mac_filter_count, .free_mac_list = qlcnic_82xx_free_mac_list, + .read_phys_port_id = qlcnic_82xx_read_phys_port_id, };static void qlcnic_get_multiq_capability (struct qlcnic_adapter *adapter)
@@ -2245,6 +2265,8 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)if (qlcnic_read_mac_addr (adapter))dev_warn (&pdev->dev,"failed to read mac addr\n" ); +qlcnic_read_phys_port_id (adapter); +if (adapter->portnum ==0 ) {qlcnic_get_board_name (adapter, board_name);
Signature · 1 line
1.8.1.4
PATCH 5/5 qlcnic: Update version to 5.3.48
In reply to Himanshu MadhaniFrom: Himanshu Madhani <[email protected]>
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +2 -2
@@ -37,8 +37,8 @@#define _QLCNIC_LINUX_MAJOR 5#define _QLCNIC_LINUX_MINOR 3 -#define _QLCNIC_LINUX_SUBVERSION 47 -#define QLCNIC_LINUX_VERSIONID "5.3.47" +#define _QLCNIC_LINUX_SUBVERSION 48 +#define QLCNIC_LINUX_VERSIONID "5.3.48"#define QLCNIC_DRV_IDC_VER 0x01#define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\ (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
Signature · 1 line
1.8.1.4
David Miller
maintainerFrom: Himanshu Madhani <[email protected]>
Date: Wed, 21 Aug 2013 11:24:09 -0400
Quoted 9 lines
From: Himanshu Madhani <[email protected]>
This patch series contains following updates
o Patches for enabling multiple Tx queues for 82xx series adapter
o Patch to implement
ndo_get_phys_portsupport for 82xx series adapter.Please apply to net-next.
Series applied, thanks.