aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/qlcnic/qlcnic.h126
-rw-r--r--drivers/net/qlcnic/qlcnic_ctx.c135
-rw-r--r--drivers/net/qlcnic/qlcnic_ethtool.c40
-rw-r--r--drivers/net/qlcnic/qlcnic_hw.c56
-rw-r--r--drivers/net/qlcnic/qlcnic_init.c26
-rw-r--r--drivers/net/qlcnic/qlcnic_main.c158
6 files changed, 268 insertions, 273 deletions
diff --git a/drivers/net/qlcnic/qlcnic.h b/drivers/net/qlcnic/qlcnic.h
index dc44564ef6f..15d950a4f46 100644
--- a/drivers/net/qlcnic/qlcnic.h
+++ b/drivers/net/qlcnic/qlcnic.h
@@ -93,8 +93,6 @@
93#define TX_IP_PKT 0x04 93#define TX_IP_PKT 0x04
94#define TX_TCP_LSO 0x05 94#define TX_TCP_LSO 0x05
95#define TX_TCP_LSO6 0x06 95#define TX_TCP_LSO6 0x06
96#define TX_IPSEC 0x07
97#define TX_IPSEC_CMD 0x0a
98#define TX_TCPV6_PKT 0x0b 96#define TX_TCPV6_PKT 0x0b
99#define TX_UDPV6_PKT 0x0c 97#define TX_UDPV6_PKT 0x0c
100 98
@@ -200,7 +198,7 @@ struct rcv_desc {
200 __le16 reserved; 198 __le16 reserved;
201 __le32 buffer_length; /* allocated buffer length (usually 2K) */ 199 __le32 buffer_length; /* allocated buffer length (usually 2K) */
202 __le64 addr_buffer; 200 __le64 addr_buffer;
203}; 201} __packed;
204 202
205/* opcode field in status_desc */ 203/* opcode field in status_desc */
206#define QLCNIC_SYN_OFFLOAD 0x03 204#define QLCNIC_SYN_OFFLOAD 0x03
@@ -365,12 +363,6 @@ struct qlcnic_skb_frag {
365 u64 length; 363 u64 length;
366}; 364};
367 365
368struct qlcnic_recv_crb {
369 u32 crb_rcv_producer[NUM_RCV_DESC_RINGS];
370 u32 crb_sts_consumer[NUM_STS_DESC_RINGS];
371 u32 sw_int_mask[NUM_STS_DESC_RINGS];
372};
373
374/* Following defines are for the state of the buffers */ 366/* Following defines are for the state of the buffers */
375#define QLCNIC_BUFFER_FREE 0 367#define QLCNIC_BUFFER_FREE 0
376#define QLCNIC_BUFFER_BUSY 1 368#define QLCNIC_BUFFER_BUSY 1
@@ -387,10 +379,10 @@ struct qlcnic_cmd_buffer {
387 379
388/* In rx_buffer, we do not need multiple fragments as is a single buffer */ 380/* In rx_buffer, we do not need multiple fragments as is a single buffer */
389struct qlcnic_rx_buffer { 381struct qlcnic_rx_buffer {
390 struct list_head list; 382 u16 ref_handle;
391 struct sk_buff *skb; 383 struct sk_buff *skb;
384 struct list_head list;
392 u64 dma; 385 u64 dma;
393 u16 ref_handle;
394}; 386};
395 387
396/* Board types */ 388/* Board types */
@@ -494,12 +486,12 @@ struct qlcnic_host_tx_ring {
494 * present elsewhere. 486 * present elsewhere.
495 */ 487 */
496struct qlcnic_recv_context { 488struct qlcnic_recv_context {
489 struct qlcnic_host_rds_ring *rds_rings;
490 struct qlcnic_host_sds_ring *sds_rings;
497 u32 state; 491 u32 state;
498 u16 context_id; 492 u16 context_id;
499 u16 virt_port; 493 u16 virt_port;
500 494
501 struct qlcnic_host_rds_ring *rds_rings;
502 struct qlcnic_host_sds_ring *sds_rings;
503}; 495};
504 496
505/* HW context creation */ 497/* HW context creation */
@@ -538,9 +530,6 @@ struct qlcnic_recv_context {
538#define QLCNIC_CDRP_CMD_DESTROY_RX_CTX 0x00000008 530#define QLCNIC_CDRP_CMD_DESTROY_RX_CTX 0x00000008
539#define QLCNIC_CDRP_CMD_CREATE_TX_CTX 0x00000009 531#define QLCNIC_CDRP_CMD_CREATE_TX_CTX 0x00000009
540#define QLCNIC_CDRP_CMD_DESTROY_TX_CTX 0x0000000a 532#define QLCNIC_CDRP_CMD_DESTROY_TX_CTX 0x0000000a
541#define QLCNIC_CDRP_CMD_SETUP_STATISTICS 0x0000000e
542#define QLCNIC_CDRP_CMD_GET_STATISTICS 0x0000000f
543#define QLCNIC_CDRP_CMD_DELETE_STATISTICS 0x00000010
544#define QLCNIC_CDRP_CMD_SET_MTU 0x00000012 533#define QLCNIC_CDRP_CMD_SET_MTU 0x00000012
545#define QLCNIC_CDRP_CMD_READ_PHY 0x00000013 534#define QLCNIC_CDRP_CMD_READ_PHY 0x00000013
546#define QLCNIC_CDRP_CMD_WRITE_PHY 0x00000014 535#define QLCNIC_CDRP_CMD_WRITE_PHY 0x00000014
@@ -549,17 +538,11 @@ struct qlcnic_recv_context {
549#define QLCNIC_CDRP_CMD_SET_FLOW_CTL 0x00000017 538#define QLCNIC_CDRP_CMD_SET_FLOW_CTL 0x00000017
550#define QLCNIC_CDRP_CMD_READ_MAX_MTU 0x00000018 539#define QLCNIC_CDRP_CMD_READ_MAX_MTU 0x00000018
551#define QLCNIC_CDRP_CMD_READ_MAX_LRO 0x00000019 540#define QLCNIC_CDRP_CMD_READ_MAX_LRO 0x00000019
552#define QLCNIC_CDRP_CMD_CONFIGURE_TOE 0x0000001a
553#define QLCNIC_CDRP_CMD_FUNC_ATTRIB 0x0000001b
554#define QLCNIC_CDRP_CMD_READ_PEXQ_PARAMETERS 0x0000001c
555#define QLCNIC_CDRP_CMD_GET_LIC_CAPABILITIES 0x0000001d
556#define QLCNIC_CDRP_CMD_READ_MAX_LRO_PER_BOARD 0x0000001e
557#define QLCNIC_CDRP_CMD_MAC_ADDRESS 0x0000001f 541#define QLCNIC_CDRP_CMD_MAC_ADDRESS 0x0000001f
558 542
559#define QLCNIC_CDRP_CMD_GET_PCI_INFO 0x00000020 543#define QLCNIC_CDRP_CMD_GET_PCI_INFO 0x00000020
560#define QLCNIC_CDRP_CMD_GET_NIC_INFO 0x00000021 544#define QLCNIC_CDRP_CMD_GET_NIC_INFO 0x00000021
561#define QLCNIC_CDRP_CMD_SET_NIC_INFO 0x00000022 545#define QLCNIC_CDRP_CMD_SET_NIC_INFO 0x00000022
562#define QLCNIC_CDRP_CMD_RESET_NPAR 0x00000023
563#define QLCNIC_CDRP_CMD_GET_ESWITCH_CAPABILITY 0x00000024 546#define QLCNIC_CDRP_CMD_GET_ESWITCH_CAPABILITY 0x00000024
564#define QLCNIC_CDRP_CMD_TOGGLE_ESWITCH 0x00000025 547#define QLCNIC_CDRP_CMD_TOGGLE_ESWITCH 0x00000025
565#define QLCNIC_CDRP_CMD_GET_ESWITCH_STATUS 0x00000026 548#define QLCNIC_CDRP_CMD_GET_ESWITCH_STATUS 0x00000026
@@ -597,14 +580,14 @@ struct qlcnic_hostrq_sds_ring {
597 __le32 ring_size; /* Ring entries */ 580 __le32 ring_size; /* Ring entries */
598 __le16 msi_index; 581 __le16 msi_index;
599 __le16 rsvd; /* Padding */ 582 __le16 rsvd; /* Padding */
600}; 583} __packed;
601 584
602struct qlcnic_hostrq_rds_ring { 585struct qlcnic_hostrq_rds_ring {
603 __le64 host_phys_addr; /* Ring base addr */ 586 __le64 host_phys_addr; /* Ring base addr */
604 __le64 buff_size; /* Packet buffer size */ 587 __le64 buff_size; /* Packet buffer size */
605 __le32 ring_size; /* Ring entries */ 588 __le32 ring_size; /* Ring entries */
606 __le32 ring_kind; /* Class of ring */ 589 __le32 ring_kind; /* Class of ring */
607}; 590} __packed;
608 591
609struct qlcnic_hostrq_rx_ctx { 592struct qlcnic_hostrq_rx_ctx {
610 __le64 host_rsp_dma_addr; /* Response dma'd here */ 593 __le64 host_rsp_dma_addr; /* Response dma'd here */
@@ -625,17 +608,17 @@ struct qlcnic_hostrq_rx_ctx {
625 - N hostrq_rds_rings 608 - N hostrq_rds_rings
626 - N hostrq_sds_rings */ 609 - N hostrq_sds_rings */
627 char data[0]; 610 char data[0];
628}; 611} __packed;
629 612
630struct qlcnic_cardrsp_rds_ring{ 613struct qlcnic_cardrsp_rds_ring{
631 __le32 host_producer_crb; /* Crb to use */ 614 __le32 host_producer_crb; /* Crb to use */
632 __le32 rsvd1; /* Padding */ 615 __le32 rsvd1; /* Padding */
633}; 616} __packed;
634 617
635struct qlcnic_cardrsp_sds_ring { 618struct qlcnic_cardrsp_sds_ring {
636 __le32 host_consumer_crb; /* Crb to use */ 619 __le32 host_consumer_crb; /* Crb to use */
637 __le32 interrupt_crb; /* Crb to use */ 620 __le32 interrupt_crb; /* Crb to use */
638}; 621} __packed;
639 622
640struct qlcnic_cardrsp_rx_ctx { 623struct qlcnic_cardrsp_rx_ctx {
641 /* These ring offsets are relative to data[0] below */ 624 /* These ring offsets are relative to data[0] below */
@@ -654,7 +637,7 @@ struct qlcnic_cardrsp_rx_ctx {
654 - N cardrsp_rds_rings 637 - N cardrsp_rds_rings
655 - N cardrs_sds_rings */ 638 - N cardrs_sds_rings */
656 char data[0]; 639 char data[0];
657}; 640} __packed;
658 641
659#define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \ 642#define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \
660 (sizeof(HOSTRQ_RX) + \ 643 (sizeof(HOSTRQ_RX) + \
@@ -674,7 +657,7 @@ struct qlcnic_hostrq_cds_ring {
674 __le64 host_phys_addr; /* Ring base addr */ 657 __le64 host_phys_addr; /* Ring base addr */
675 __le32 ring_size; /* Ring entries */ 658 __le32 ring_size; /* Ring entries */
676 __le32 rsvd; /* Padding */ 659 __le32 rsvd; /* Padding */
677}; 660} __packed;
678 661
679struct qlcnic_hostrq_tx_ctx { 662struct qlcnic_hostrq_tx_ctx {
680 __le64 host_rsp_dma_addr; /* Response dma'd here */ 663 __le64 host_rsp_dma_addr; /* Response dma'd here */
@@ -689,12 +672,12 @@ struct qlcnic_hostrq_tx_ctx {
689 __le16 rsvd3; /* Padding */ 672 __le16 rsvd3; /* Padding */
690 struct qlcnic_hostrq_cds_ring cds_ring; /* Desc of cds ring */ 673 struct qlcnic_hostrq_cds_ring cds_ring; /* Desc of cds ring */
691 u8 reserved[128]; /* future expansion */ 674 u8 reserved[128]; /* future expansion */
692}; 675} __packed;
693 676
694struct qlcnic_cardrsp_cds_ring { 677struct qlcnic_cardrsp_cds_ring {
695 __le32 host_producer_crb; /* Crb to use */ 678 __le32 host_producer_crb; /* Crb to use */
696 __le32 interrupt_crb; /* Crb to use */ 679 __le32 interrupt_crb; /* Crb to use */
697}; 680} __packed;
698 681
699struct qlcnic_cardrsp_tx_ctx { 682struct qlcnic_cardrsp_tx_ctx {
700 __le32 host_ctx_state; /* Starting state */ 683 __le32 host_ctx_state; /* Starting state */
@@ -703,7 +686,7 @@ struct qlcnic_cardrsp_tx_ctx {
703 u8 virt_port; /* Virtual/Logical id of port */ 686 u8 virt_port; /* Virtual/Logical id of port */
704 struct qlcnic_cardrsp_cds_ring cds_ring; /* Card cds settings */ 687 struct qlcnic_cardrsp_cds_ring cds_ring; /* Card cds settings */
705 u8 reserved[128]; /* future expansion */ 688 u8 reserved[128]; /* future expansion */
706}; 689} __packed;
707 690
708#define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) (sizeof(HOSTRQ_TX)) 691#define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) (sizeof(HOSTRQ_TX))
709#define SIZEOF_CARDRSP_TX(CARDRSP_TX) (sizeof(CARDRSP_TX)) 692#define SIZEOF_CARDRSP_TX(CARDRSP_TX) (sizeof(CARDRSP_TX))
@@ -782,50 +765,20 @@ struct qlcnic_nic_intr_coalesce {
782/* 765/*
783 * Driver --> Firmware 766 * Driver --> Firmware
784 */ 767 */
785#define QLCNIC_H2C_OPCODE_START 0 768#define QLCNIC_H2C_OPCODE_CONFIG_RSS 0x1
786#define QLCNIC_H2C_OPCODE_CONFIG_RSS 1 769#define QLCNIC_H2C_OPCODE_CONFIG_INTR_COALESCE 0x3
787#define QLCNIC_H2C_OPCODE_CONFIG_RSS_TBL 2 770#define QLCNIC_H2C_OPCODE_CONFIG_LED 0x4
788#define QLCNIC_H2C_OPCODE_CONFIG_INTR_COALESCE 3 771#define QLCNIC_H2C_OPCODE_LRO_REQUEST 0x7
789#define QLCNIC_H2C_OPCODE_CONFIG_LED 4 772#define QLCNIC_H2C_OPCODE_SET_MAC_RECEIVE_MODE 0xc
790#define QLCNIC_H2C_OPCODE_CONFIG_PROMISCUOUS 5 773#define QLCNIC_H2C_OPCODE_CONFIG_IPADDR 0x12
791#define QLCNIC_H2C_OPCODE_CONFIG_L2_MAC 6 774#define QLCNIC_H2C_OPCODE_GET_LINKEVENT 0x15
792#define QLCNIC_H2C_OPCODE_LRO_REQUEST 7 775#define QLCNIC_H2C_OPCODE_CONFIG_BRIDGING 0x17
793#define QLCNIC_H2C_OPCODE_GET_SNMP_STATS 8 776#define QLCNIC_H2C_OPCODE_CONFIG_HW_LRO 0x18
794#define QLCNIC_H2C_OPCODE_PROXY_START_REQUEST 9
795#define QLCNIC_H2C_OPCODE_PROXY_STOP_REQUEST 10
796#define QLCNIC_H2C_OPCODE_PROXY_SET_MTU 11
797#define QLCNIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE 12
798#define QLCNIC_H2C_OPCODE_GET_FINGER_PRINT_REQUEST 13
799#define QLCNIC_H2C_OPCODE_INSTALL_LICENSE_REQUEST 14
800#define QLCNIC_H2C_OPCODE_GET_LICENSE_CAPABILITY_REQUEST 15
801#define QLCNIC_H2C_OPCODE_GET_NET_STATS 16
802#define QLCNIC_H2C_OPCODE_PROXY_UPDATE_P2V 17
803#define QLCNIC_H2C_OPCODE_CONFIG_IPADDR 18
804#define QLCNIC_H2C_OPCODE_PROXY_STOP_DONE 20
805#define QLCNIC_H2C_OPCODE_GET_LINKEVENT 21
806#define QLCNIC_C2C_OPCODE 22
807#define QLCNIC_H2C_OPCODE_CONFIG_BRIDGING 23
808#define QLCNIC_H2C_OPCODE_CONFIG_HW_LRO 24
809#define QLCNIC_H2C_OPCODE_LAST 25
810/* 777/*
811 * Firmware --> Driver 778 * Firmware --> Driver
812 */ 779 */
813 780
814#define QLCNIC_C2H_OPCODE_START 128
815#define QLCNIC_C2H_OPCODE_CONFIG_RSS_RESPONSE 129
816#define QLCNIC_C2H_OPCODE_CONFIG_RSS_TBL_RESPONSE 130
817#define QLCNIC_C2H_OPCODE_CONFIG_MAC_RESPONSE 131
818#define QLCNIC_C2H_OPCODE_CONFIG_PROMISCUOUS_RESPONSE 132
819#define QLCNIC_C2H_OPCODE_CONFIG_L2_MAC_RESPONSE 133
820#define QLCNIC_C2H_OPCODE_LRO_DELETE_RESPONSE 134
821#define QLCNIC_C2H_OPCODE_LRO_ADD_FAILURE_RESPONSE 135
822#define QLCNIC_C2H_OPCODE_GET_SNMP_STATS 136
823#define QLCNIC_C2H_OPCODE_GET_FINGER_PRINT_REPLY 137
824#define QLCNIC_C2H_OPCODE_INSTALL_LICENSE_REPLY 138
825#define QLCNIC_C2H_OPCODE_GET_LICENSE_CAPABILITIES_REPLY 139
826#define QLCNIC_C2H_OPCODE_GET_NET_STATS_RESPONSE 140
827#define QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE 141 781#define QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE 141
828#define QLCNIC_C2H_OPCODE_LAST 142
829 782
830#define VPORT_MISS_MODE_DROP 0 /* drop all unmatched */ 783#define VPORT_MISS_MODE_DROP 0 /* drop all unmatched */
831#define VPORT_MISS_MODE_ACCEPT_ALL 1 /* accept all packets */ 784#define VPORT_MISS_MODE_ACCEPT_ALL 1 /* accept all packets */
@@ -894,7 +847,7 @@ struct qlcnic_nic_req {
894 __le64 qhdr; 847 __le64 qhdr;
895 __le64 req_hdr; 848 __le64 req_hdr;
896 __le64 words[6]; 849 __le64 words[6];
897}; 850} __packed;
898 851
899struct qlcnic_mac_req { 852struct qlcnic_mac_req {
900 u8 op; 853 u8 op;
@@ -905,7 +858,7 @@ struct qlcnic_mac_req {
905struct qlcnic_vlan_req { 858struct qlcnic_vlan_req {
906 __le16 vlan_id; 859 __le16 vlan_id;
907 __le16 rsvd[3]; 860 __le16 rsvd[3];
908}; 861} __packed;
909 862
910struct qlcnic_ipaddr { 863struct qlcnic_ipaddr {
911 __be32 ipv4; 864 __be32 ipv4;
@@ -964,14 +917,14 @@ struct qlcnic_filter_hash {
964}; 917};
965 918
966struct qlcnic_adapter { 919struct qlcnic_adapter {
967 struct qlcnic_hardware_context ahw; 920 struct qlcnic_hardware_context *ahw;
968 921 struct qlcnic_recv_context *recv_ctx;
922 struct qlcnic_host_tx_ring *tx_ring;
969 struct net_device *netdev; 923 struct net_device *netdev;
970 struct pci_dev *pdev; 924 struct pci_dev *pdev;
971 struct list_head mac_list;
972 925
973 spinlock_t tx_clean_lock; 926 unsigned long state;
974 spinlock_t mac_learn_lock; 927 u32 flags;
975 928
976 u16 num_txd; 929 u16 num_txd;
977 u16 num_rxd; 930 u16 num_rxd;
@@ -989,7 +942,6 @@ struct qlcnic_adapter {
989 942
990 u8 mc_enabled; 943 u8 mc_enabled;
991 u8 max_mc_count; 944 u8 max_mc_count;
992 u8 rss_supported;
993 u8 fw_wait_cnt; 945 u8 fw_wait_cnt;
994 u8 fw_fail_cnt; 946 u8 fw_fail_cnt;
995 u8 tx_timeo_cnt; 947 u8 tx_timeo_cnt;
@@ -1014,7 +966,6 @@ struct qlcnic_adapter {
1014 966
1015 u32 fw_hal_version; 967 u32 fw_hal_version;
1016 u32 capabilities; 968 u32 capabilities;
1017 u32 flags;
1018 u32 irq; 969 u32 irq;
1019 u32 temp; 970 u32 temp;
1020 971
@@ -1039,9 +990,7 @@ struct qlcnic_adapter {
1039 struct qlcnic_nic_template *nic_ops; 990 struct qlcnic_nic_template *nic_ops;
1040 991
1041 struct qlcnic_adapter_stats stats; 992 struct qlcnic_adapter_stats stats;
1042 993 struct list_head mac_list;
1043 struct qlcnic_recv_context recv_ctx;
1044 struct qlcnic_host_tx_ring *tx_ring;
1045 994
1046 void __iomem *tgt_mask_reg; 995 void __iomem *tgt_mask_reg;
1047 void __iomem *tgt_status_reg; 996 void __iomem *tgt_status_reg;
@@ -1056,7 +1005,8 @@ struct qlcnic_adapter {
1056 1005
1057 struct qlcnic_filter_hash fhash; 1006 struct qlcnic_filter_hash fhash;
1058 1007
1059 unsigned long state; 1008 spinlock_t tx_clean_lock;
1009 spinlock_t mac_learn_lock;
1060 __le32 file_prd_off; /*File fw product offset*/ 1010 __le32 file_prd_off; /*File fw product offset*/
1061 u32 fw_version; 1011 u32 fw_version;
1062 const struct firmware *fw; 1012 const struct firmware *fw;
@@ -1078,7 +1028,7 @@ struct qlcnic_info {
1078 __le16 min_tx_bw; 1028 __le16 min_tx_bw;
1079 __le16 max_tx_bw; 1029 __le16 max_tx_bw;
1080 u8 reserved2[104]; 1030 u8 reserved2[104];
1081}; 1031} __packed;
1082 1032
1083struct qlcnic_pci_info { 1033struct qlcnic_pci_info {
1084 __le16 id; /* pci function id */ 1034 __le16 id; /* pci function id */
@@ -1092,7 +1042,7 @@ struct qlcnic_pci_info {
1092 1042
1093 u8 mac[ETH_ALEN]; 1043 u8 mac[ETH_ALEN];
1094 u8 reserved2[106]; 1044 u8 reserved2[106];
1095}; 1045} __packed;
1096 1046
1097struct qlcnic_npar_info { 1047struct qlcnic_npar_info {
1098 u16 pvid; 1048 u16 pvid;
@@ -1209,7 +1159,7 @@ struct __qlcnic_esw_statistics {
1209 __le64 local_frames; 1159 __le64 local_frames;
1210 __le64 numbytes; 1160 __le64 numbytes;
1211 __le64 rsvd[3]; 1161 __le64 rsvd[3];
1212}; 1162} __packed;
1213 1163
1214struct qlcnic_esw_statistics { 1164struct qlcnic_esw_statistics {
1215 struct __qlcnic_esw_statistics rx; 1165 struct __qlcnic_esw_statistics rx;
@@ -1293,7 +1243,7 @@ void qlcnic_release_tx_buffers(struct qlcnic_adapter *adapter);
1293 1243
1294int qlcnic_check_fw_status(struct qlcnic_adapter *adapter); 1244int qlcnic_check_fw_status(struct qlcnic_adapter *adapter);
1295void qlcnic_watchdog_task(struct work_struct *work); 1245void qlcnic_watchdog_task(struct work_struct *work);
1296void qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter, u32 ringid, 1246void qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter,
1297 struct qlcnic_host_rds_ring *rds_ring); 1247 struct qlcnic_host_rds_ring *rds_ring);
1298int qlcnic_process_rcv_ring(struct qlcnic_host_sds_ring *sds_ring, int max); 1248int qlcnic_process_rcv_ring(struct qlcnic_host_sds_ring *sds_ring, int max);
1299void qlcnic_set_multi(struct net_device *netdev); 1249void qlcnic_set_multi(struct net_device *netdev);
diff --git a/drivers/net/qlcnic/qlcnic_ctx.c b/drivers/net/qlcnic/qlcnic_ctx.c
index 27631f23b3f..050fa5a99ff 100644
--- a/drivers/net/qlcnic/qlcnic_ctx.c
+++ b/drivers/net/qlcnic/qlcnic_ctx.c
@@ -67,11 +67,11 @@ qlcnic_issue_cmd(struct qlcnic_adapter *adapter,
67int 67int
68qlcnic_fw_cmd_set_mtu(struct qlcnic_adapter *adapter, int mtu) 68qlcnic_fw_cmd_set_mtu(struct qlcnic_adapter *adapter, int mtu)
69{ 69{
70 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 70 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
71 71
72 if (recv_ctx->state == QLCNIC_HOST_CTX_STATE_ACTIVE) { 72 if (recv_ctx->state == QLCNIC_HOST_CTX_STATE_ACTIVE) {
73 if (qlcnic_issue_cmd(adapter, 73 if (qlcnic_issue_cmd(adapter,
74 adapter->ahw.pci_func, 74 adapter->ahw->pci_func,
75 adapter->fw_hal_version, 75 adapter->fw_hal_version,
76 recv_ctx->context_id, 76 recv_ctx->context_id,
77 mtu, 77 mtu,
@@ -102,12 +102,12 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
102 dma_addr_t hostrq_phys_addr, cardrsp_phys_addr; 102 dma_addr_t hostrq_phys_addr, cardrsp_phys_addr;
103 u64 phys_addr; 103 u64 phys_addr;
104 104
105 int i, nrds_rings, nsds_rings; 105 u8 i, nrds_rings, nsds_rings;
106 size_t rq_size, rsp_size; 106 size_t rq_size, rsp_size;
107 u32 cap, reg, val, reg2; 107 u32 cap, reg, val, reg2;
108 int err; 108 int err;
109 109
110 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 110 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
111 111
112 nrds_rings = adapter->max_rds_rings; 112 nrds_rings = adapter->max_rds_rings;
113 nsds_rings = adapter->max_sds_rings; 113 nsds_rings = adapter->max_sds_rings;
@@ -119,14 +119,14 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
119 SIZEOF_CARDRSP_RX(struct qlcnic_cardrsp_rx_ctx, nrds_rings, 119 SIZEOF_CARDRSP_RX(struct qlcnic_cardrsp_rx_ctx, nrds_rings,
120 nsds_rings); 120 nsds_rings);
121 121
122 addr = pci_alloc_consistent(adapter->pdev, 122 addr = dma_alloc_coherent(&adapter->pdev->dev, rq_size,
123 rq_size, &hostrq_phys_addr); 123 &hostrq_phys_addr, GFP_KERNEL);
124 if (addr == NULL) 124 if (addr == NULL)
125 return -ENOMEM; 125 return -ENOMEM;
126 prq = (struct qlcnic_hostrq_rx_ctx *)addr; 126 prq = (struct qlcnic_hostrq_rx_ctx *)addr;
127 127
128 addr = pci_alloc_consistent(adapter->pdev, 128 addr = dma_alloc_coherent(&adapter->pdev->dev, rsp_size,
129 rsp_size, &cardrsp_phys_addr); 129 &cardrsp_phys_addr, GFP_KERNEL);
130 if (addr == NULL) { 130 if (addr == NULL) {
131 err = -ENOMEM; 131 err = -ENOMEM;
132 goto out_free_rq; 132 goto out_free_rq;
@@ -151,7 +151,7 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
151 151
152 prq->num_rds_rings = cpu_to_le16(nrds_rings); 152 prq->num_rds_rings = cpu_to_le16(nrds_rings);
153 prq->num_sds_rings = cpu_to_le16(nsds_rings); 153 prq->num_sds_rings = cpu_to_le16(nsds_rings);
154 prq->rds_ring_offset = cpu_to_le32(0); 154 prq->rds_ring_offset = 0;
155 155
156 val = le32_to_cpu(prq->rds_ring_offset) + 156 val = le32_to_cpu(prq->rds_ring_offset) +
157 (sizeof(struct qlcnic_hostrq_rds_ring) * nrds_rings); 157 (sizeof(struct qlcnic_hostrq_rds_ring) * nrds_rings);
@@ -187,7 +187,7 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
187 187
188 phys_addr = hostrq_phys_addr; 188 phys_addr = hostrq_phys_addr;
189 err = qlcnic_issue_cmd(adapter, 189 err = qlcnic_issue_cmd(adapter,
190 adapter->ahw.pci_func, 190 adapter->ahw->pci_func,
191 adapter->fw_hal_version, 191 adapter->fw_hal_version,
192 (u32)(phys_addr >> 32), 192 (u32)(phys_addr >> 32),
193 (u32)(phys_addr & 0xffffffff), 193 (u32)(phys_addr & 0xffffffff),
@@ -207,7 +207,7 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
207 rds_ring = &recv_ctx->rds_rings[i]; 207 rds_ring = &recv_ctx->rds_rings[i];
208 208
209 reg = le32_to_cpu(prsp_rds[i].host_producer_crb); 209 reg = le32_to_cpu(prsp_rds[i].host_producer_crb);
210 rds_ring->crb_rcv_producer = adapter->ahw.pci_base0 + reg; 210 rds_ring->crb_rcv_producer = adapter->ahw->pci_base0 + reg;
211 } 211 }
212 212
213 prsp_sds = ((struct qlcnic_cardrsp_sds_ring *) 213 prsp_sds = ((struct qlcnic_cardrsp_sds_ring *)
@@ -219,8 +219,8 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
219 reg = le32_to_cpu(prsp_sds[i].host_consumer_crb); 219 reg = le32_to_cpu(prsp_sds[i].host_consumer_crb);
220 reg2 = le32_to_cpu(prsp_sds[i].interrupt_crb); 220 reg2 = le32_to_cpu(prsp_sds[i].interrupt_crb);
221 221
222 sds_ring->crb_sts_consumer = adapter->ahw.pci_base0 + reg; 222 sds_ring->crb_sts_consumer = adapter->ahw->pci_base0 + reg;
223 sds_ring->crb_intr_mask = adapter->ahw.pci_base0 + reg2; 223 sds_ring->crb_intr_mask = adapter->ahw->pci_base0 + reg2;
224 } 224 }
225 225
226 recv_ctx->state = le32_to_cpu(prsp->host_ctx_state); 226 recv_ctx->state = le32_to_cpu(prsp->host_ctx_state);
@@ -228,19 +228,20 @@ qlcnic_fw_cmd_create_rx_ctx(struct qlcnic_adapter *adapter)
228 recv_ctx->virt_port = prsp->virt_port; 228 recv_ctx->virt_port = prsp->virt_port;
229 229
230out_free_rsp: 230out_free_rsp:
231 pci_free_consistent(adapter->pdev, rsp_size, prsp, cardrsp_phys_addr); 231 dma_free_coherent(&adapter->pdev->dev, rsp_size, prsp,
232 cardrsp_phys_addr);
232out_free_rq: 233out_free_rq:
233 pci_free_consistent(adapter->pdev, rq_size, prq, hostrq_phys_addr); 234 dma_free_coherent(&adapter->pdev->dev, rq_size, prq, hostrq_phys_addr);
234 return err; 235 return err;
235} 236}
236 237
237static void 238static void
238qlcnic_fw_cmd_destroy_rx_ctx(struct qlcnic_adapter *adapter) 239qlcnic_fw_cmd_destroy_rx_ctx(struct qlcnic_adapter *adapter)
239{ 240{
240 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 241 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
241 242
242 if (qlcnic_issue_cmd(adapter, 243 if (qlcnic_issue_cmd(adapter,
243 adapter->ahw.pci_func, 244 adapter->ahw->pci_func,
244 adapter->fw_hal_version, 245 adapter->fw_hal_version,
245 recv_ctx->context_id, 246 recv_ctx->context_id,
246 QLCNIC_DESTROY_CTX_RESET, 247 QLCNIC_DESTROY_CTX_RESET,
@@ -274,14 +275,14 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
274 *(tx_ring->hw_consumer) = 0; 275 *(tx_ring->hw_consumer) = 0;
275 276
276 rq_size = SIZEOF_HOSTRQ_TX(struct qlcnic_hostrq_tx_ctx); 277 rq_size = SIZEOF_HOSTRQ_TX(struct qlcnic_hostrq_tx_ctx);
277 rq_addr = pci_alloc_consistent(adapter->pdev, 278 rq_addr = dma_alloc_coherent(&adapter->pdev->dev, rq_size,
278 rq_size, &rq_phys_addr); 279 &rq_phys_addr, GFP_KERNEL);
279 if (!rq_addr) 280 if (!rq_addr)
280 return -ENOMEM; 281 return -ENOMEM;
281 282
282 rsp_size = SIZEOF_CARDRSP_TX(struct qlcnic_cardrsp_tx_ctx); 283 rsp_size = SIZEOF_CARDRSP_TX(struct qlcnic_cardrsp_tx_ctx);
283 rsp_addr = pci_alloc_consistent(adapter->pdev, 284 rsp_addr = dma_alloc_coherent(&adapter->pdev->dev, rsp_size,
284 rsp_size, &rsp_phys_addr); 285 &rsp_phys_addr, GFP_KERNEL);
285 if (!rsp_addr) { 286 if (!rsp_addr) {
286 err = -ENOMEM; 287 err = -ENOMEM;
287 goto out_free_rq; 288 goto out_free_rq;
@@ -313,7 +314,7 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
313 314
314 phys_addr = rq_phys_addr; 315 phys_addr = rq_phys_addr;
315 err = qlcnic_issue_cmd(adapter, 316 err = qlcnic_issue_cmd(adapter,
316 adapter->ahw.pci_func, 317 adapter->ahw->pci_func,
317 adapter->fw_hal_version, 318 adapter->fw_hal_version,
318 (u32)(phys_addr >> 32), 319 (u32)(phys_addr >> 32),
319 ((u32)phys_addr & 0xffffffff), 320 ((u32)phys_addr & 0xffffffff),
@@ -322,7 +323,7 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
322 323
323 if (err == QLCNIC_RCODE_SUCCESS) { 324 if (err == QLCNIC_RCODE_SUCCESS) {
324 temp = le32_to_cpu(prsp->cds_ring.host_producer_crb); 325 temp = le32_to_cpu(prsp->cds_ring.host_producer_crb);
325 tx_ring->crb_cmd_producer = adapter->ahw.pci_base0 + temp; 326 tx_ring->crb_cmd_producer = adapter->ahw->pci_base0 + temp;
326 327
327 adapter->tx_context_id = 328 adapter->tx_context_id =
328 le16_to_cpu(prsp->context_id); 329 le16_to_cpu(prsp->context_id);
@@ -332,10 +333,11 @@ qlcnic_fw_cmd_create_tx_ctx(struct qlcnic_adapter *adapter)
332 err = -EIO; 333 err = -EIO;
333 } 334 }
334 335
335 pci_free_consistent(adapter->pdev, rsp_size, rsp_addr, rsp_phys_addr); 336 dma_free_coherent(&adapter->pdev->dev, rsp_size, rsp_addr,
337 rsp_phys_addr);
336 338
337out_free_rq: 339out_free_rq:
338 pci_free_consistent(adapter->pdev, rq_size, rq_addr, rq_phys_addr); 340 dma_free_coherent(&adapter->pdev->dev, rq_size, rq_addr, rq_phys_addr);
339 341
340 return err; 342 return err;
341} 343}
@@ -344,7 +346,7 @@ static void
344qlcnic_fw_cmd_destroy_tx_ctx(struct qlcnic_adapter *adapter) 346qlcnic_fw_cmd_destroy_tx_ctx(struct qlcnic_adapter *adapter)
345{ 347{
346 if (qlcnic_issue_cmd(adapter, 348 if (qlcnic_issue_cmd(adapter,
347 adapter->ahw.pci_func, 349 adapter->ahw->pci_func,
348 adapter->fw_hal_version, 350 adapter->fw_hal_version,
349 adapter->tx_context_id, 351 adapter->tx_context_id,
350 QLCNIC_DESTROY_CTX_RESET, 352 QLCNIC_DESTROY_CTX_RESET,
@@ -361,7 +363,7 @@ qlcnic_fw_cmd_query_phy(struct qlcnic_adapter *adapter, u32 reg, u32 *val)
361{ 363{
362 364
363 if (qlcnic_issue_cmd(adapter, 365 if (qlcnic_issue_cmd(adapter,
364 adapter->ahw.pci_func, 366 adapter->ahw->pci_func,
365 adapter->fw_hal_version, 367 adapter->fw_hal_version,
366 reg, 368 reg,
367 0, 369 0,
@@ -378,7 +380,7 @@ int
378qlcnic_fw_cmd_set_phy(struct qlcnic_adapter *adapter, u32 reg, u32 val) 380qlcnic_fw_cmd_set_phy(struct qlcnic_adapter *adapter, u32 reg, u32 val)
379{ 381{
380 return qlcnic_issue_cmd(adapter, 382 return qlcnic_issue_cmd(adapter,
381 adapter->ahw.pci_func, 383 adapter->ahw->pci_func,
382 adapter->fw_hal_version, 384 adapter->fw_hal_version,
383 reg, 385 reg,
384 val, 386 val,
@@ -398,20 +400,19 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter)
398 400
399 struct pci_dev *pdev = adapter->pdev; 401 struct pci_dev *pdev = adapter->pdev;
400 402
401 recv_ctx = &adapter->recv_ctx; 403 recv_ctx = adapter->recv_ctx;
402 tx_ring = adapter->tx_ring; 404 tx_ring = adapter->tx_ring;
403 405
404 tx_ring->hw_consumer = (__le32 *)pci_alloc_consistent(pdev, sizeof(u32), 406 tx_ring->hw_consumer = (__le32 *) dma_alloc_coherent(&pdev->dev,
405 &tx_ring->hw_cons_phys_addr); 407 sizeof(u32), &tx_ring->hw_cons_phys_addr, GFP_KERNEL);
406 if (tx_ring->hw_consumer == NULL) { 408 if (tx_ring->hw_consumer == NULL) {
407 dev_err(&pdev->dev, "failed to allocate tx consumer\n"); 409 dev_err(&pdev->dev, "failed to allocate tx consumer\n");
408 return -ENOMEM; 410 return -ENOMEM;
409 } 411 }
410 *(tx_ring->hw_consumer) = 0;
411 412
412 /* cmd desc ring */ 413 /* cmd desc ring */
413 addr = pci_alloc_consistent(pdev, TX_DESC_RINGSIZE(tx_ring), 414 addr = dma_alloc_coherent(&pdev->dev, TX_DESC_RINGSIZE(tx_ring),
414 &tx_ring->phys_addr); 415 &tx_ring->phys_addr, GFP_KERNEL);
415 416
416 if (addr == NULL) { 417 if (addr == NULL) {
417 dev_err(&pdev->dev, "failed to allocate tx desc ring\n"); 418 dev_err(&pdev->dev, "failed to allocate tx desc ring\n");
@@ -423,9 +424,9 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter)
423 424
424 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 425 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
425 rds_ring = &recv_ctx->rds_rings[ring]; 426 rds_ring = &recv_ctx->rds_rings[ring];
426 addr = pci_alloc_consistent(adapter->pdev, 427 addr = dma_alloc_coherent(&adapter->pdev->dev,
427 RCV_DESC_RINGSIZE(rds_ring), 428 RCV_DESC_RINGSIZE(rds_ring),
428 &rds_ring->phys_addr); 429 &rds_ring->phys_addr, GFP_KERNEL);
429 if (addr == NULL) { 430 if (addr == NULL) {
430 dev_err(&pdev->dev, 431 dev_err(&pdev->dev,
431 "failed to allocate rds ring [%d]\n", ring); 432 "failed to allocate rds ring [%d]\n", ring);
@@ -439,9 +440,9 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter)
439 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 440 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
440 sds_ring = &recv_ctx->sds_rings[ring]; 441 sds_ring = &recv_ctx->sds_rings[ring];
441 442
442 addr = pci_alloc_consistent(adapter->pdev, 443 addr = dma_alloc_coherent(&adapter->pdev->dev,
443 STATUS_DESC_RINGSIZE(sds_ring), 444 STATUS_DESC_RINGSIZE(sds_ring),
444 &sds_ring->phys_addr); 445 &sds_ring->phys_addr, GFP_KERNEL);
445 if (addr == NULL) { 446 if (addr == NULL) {
446 dev_err(&pdev->dev, 447 dev_err(&pdev->dev,
447 "failed to allocate sds ring [%d]\n", ring); 448 "failed to allocate sds ring [%d]\n", ring);
@@ -501,11 +502,11 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
501 struct qlcnic_host_tx_ring *tx_ring; 502 struct qlcnic_host_tx_ring *tx_ring;
502 int ring; 503 int ring;
503 504
504 recv_ctx = &adapter->recv_ctx; 505 recv_ctx = adapter->recv_ctx;
505 506
506 tx_ring = adapter->tx_ring; 507 tx_ring = adapter->tx_ring;
507 if (tx_ring->hw_consumer != NULL) { 508 if (tx_ring->hw_consumer != NULL) {
508 pci_free_consistent(adapter->pdev, 509 dma_free_coherent(&adapter->pdev->dev,
509 sizeof(u32), 510 sizeof(u32),
510 tx_ring->hw_consumer, 511 tx_ring->hw_consumer,
511 tx_ring->hw_cons_phys_addr); 512 tx_ring->hw_cons_phys_addr);
@@ -513,7 +514,7 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
513 } 514 }
514 515
515 if (tx_ring->desc_head != NULL) { 516 if (tx_ring->desc_head != NULL) {
516 pci_free_consistent(adapter->pdev, 517 dma_free_coherent(&adapter->pdev->dev,
517 TX_DESC_RINGSIZE(tx_ring), 518 TX_DESC_RINGSIZE(tx_ring),
518 tx_ring->desc_head, tx_ring->phys_addr); 519 tx_ring->desc_head, tx_ring->phys_addr);
519 tx_ring->desc_head = NULL; 520 tx_ring->desc_head = NULL;
@@ -523,7 +524,7 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
523 rds_ring = &recv_ctx->rds_rings[ring]; 524 rds_ring = &recv_ctx->rds_rings[ring];
524 525
525 if (rds_ring->desc_head != NULL) { 526 if (rds_ring->desc_head != NULL) {
526 pci_free_consistent(adapter->pdev, 527 dma_free_coherent(&adapter->pdev->dev,
527 RCV_DESC_RINGSIZE(rds_ring), 528 RCV_DESC_RINGSIZE(rds_ring),
528 rds_ring->desc_head, 529 rds_ring->desc_head,
529 rds_ring->phys_addr); 530 rds_ring->phys_addr);
@@ -535,7 +536,7 @@ void qlcnic_free_hw_resources(struct qlcnic_adapter *adapter)
535 sds_ring = &recv_ctx->sds_rings[ring]; 536 sds_ring = &recv_ctx->sds_rings[ring];
536 537
537 if (sds_ring->desc_head != NULL) { 538 if (sds_ring->desc_head != NULL) {
538 pci_free_consistent(adapter->pdev, 539 dma_free_coherent(&adapter->pdev->dev,
539 STATUS_DESC_RINGSIZE(sds_ring), 540 STATUS_DESC_RINGSIZE(sds_ring),
540 sds_ring->desc_head, 541 sds_ring->desc_head,
541 sds_ring->phys_addr); 542 sds_ring->phys_addr);
@@ -551,9 +552,9 @@ int qlcnic_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac)
551 int err; 552 int err;
552 u32 arg1; 553 u32 arg1;
553 554
554 arg1 = adapter->ahw.pci_func | BIT_8; 555 arg1 = adapter->ahw->pci_func | BIT_8;
555 err = qlcnic_issue_cmd(adapter, 556 err = qlcnic_issue_cmd(adapter,
556 adapter->ahw.pci_func, 557 adapter->ahw->pci_func,
557 adapter->fw_hal_version, 558 adapter->fw_hal_version,
558 arg1, 559 arg1,
559 0, 560 0,
@@ -582,15 +583,15 @@ int qlcnic_get_nic_info(struct qlcnic_adapter *adapter,
582 void *nic_info_addr; 583 void *nic_info_addr;
583 size_t nic_size = sizeof(struct qlcnic_info); 584 size_t nic_size = sizeof(struct qlcnic_info);
584 585
585 nic_info_addr = pci_alloc_consistent(adapter->pdev, 586 nic_info_addr = dma_alloc_coherent(&adapter->pdev->dev, nic_size,
586 nic_size, &nic_dma_t); 587 &nic_dma_t, GFP_KERNEL);
587 if (!nic_info_addr) 588 if (!nic_info_addr)
588 return -ENOMEM; 589 return -ENOMEM;
589 memset(nic_info_addr, 0, nic_size); 590 memset(nic_info_addr, 0, nic_size);
590 591
591 nic_info = (struct qlcnic_info *) nic_info_addr; 592 nic_info = (struct qlcnic_info *) nic_info_addr;
592 err = qlcnic_issue_cmd(adapter, 593 err = qlcnic_issue_cmd(adapter,
593 adapter->ahw.pci_func, 594 adapter->ahw->pci_func,
594 adapter->fw_hal_version, 595 adapter->fw_hal_version,
595 MSD(nic_dma_t), 596 MSD(nic_dma_t),
596 LSD(nic_dma_t), 597 LSD(nic_dma_t),
@@ -623,7 +624,8 @@ int qlcnic_get_nic_info(struct qlcnic_adapter *adapter,
623 err = -EIO; 624 err = -EIO;
624 } 625 }
625 626
626 pci_free_consistent(adapter->pdev, nic_size, nic_info_addr, nic_dma_t); 627 dma_free_coherent(&adapter->pdev->dev, nic_size, nic_info_addr,
628 nic_dma_t);
627 return err; 629 return err;
628} 630}
629 631
@@ -639,8 +641,8 @@ int qlcnic_set_nic_info(struct qlcnic_adapter *adapter, struct qlcnic_info *nic)
639 if (adapter->op_mode != QLCNIC_MGMT_FUNC) 641 if (adapter->op_mode != QLCNIC_MGMT_FUNC)
640 return err; 642 return err;
641 643
642 nic_info_addr = pci_alloc_consistent(adapter->pdev, nic_size, 644 nic_info_addr = dma_alloc_coherent(&adapter->pdev->dev, nic_size,
643 &nic_dma_t); 645 &nic_dma_t, GFP_KERNEL);
644 if (!nic_info_addr) 646 if (!nic_info_addr)
645 return -ENOMEM; 647 return -ENOMEM;
646 648
@@ -659,7 +661,7 @@ int qlcnic_set_nic_info(struct qlcnic_adapter *adapter, struct qlcnic_info *nic)
659 nic_info->max_tx_bw = cpu_to_le16(nic->max_tx_bw); 661 nic_info->max_tx_bw = cpu_to_le16(nic->max_tx_bw);
660 662
661 err = qlcnic_issue_cmd(adapter, 663 err = qlcnic_issue_cmd(adapter,
662 adapter->ahw.pci_func, 664 adapter->ahw->pci_func,
663 adapter->fw_hal_version, 665 adapter->fw_hal_version,
664 MSD(nic_dma_t), 666 MSD(nic_dma_t),
665 LSD(nic_dma_t), 667 LSD(nic_dma_t),
@@ -672,7 +674,8 @@ int qlcnic_set_nic_info(struct qlcnic_adapter *adapter, struct qlcnic_info *nic)
672 err = -EIO; 674 err = -EIO;
673 } 675 }
674 676
675 pci_free_consistent(adapter->pdev, nic_size, nic_info_addr, nic_dma_t); 677 dma_free_coherent(&adapter->pdev->dev, nic_size, nic_info_addr,
678 nic_dma_t);
676 return err; 679 return err;
677} 680}
678 681
@@ -687,15 +690,15 @@ int qlcnic_get_pci_info(struct qlcnic_adapter *adapter,
687 size_t npar_size = sizeof(struct qlcnic_pci_info); 690 size_t npar_size = sizeof(struct qlcnic_pci_info);
688 size_t pci_size = npar_size * QLCNIC_MAX_PCI_FUNC; 691 size_t pci_size = npar_size * QLCNIC_MAX_PCI_FUNC;
689 692
690 pci_info_addr = pci_alloc_consistent(adapter->pdev, pci_size, 693 pci_info_addr = dma_alloc_coherent(&adapter->pdev->dev, pci_size,
691 &pci_info_dma_t); 694 &pci_info_dma_t, GFP_KERNEL);
692 if (!pci_info_addr) 695 if (!pci_info_addr)
693 return -ENOMEM; 696 return -ENOMEM;
694 memset(pci_info_addr, 0, pci_size); 697 memset(pci_info_addr, 0, pci_size);
695 698
696 npar = (struct qlcnic_pci_info *) pci_info_addr; 699 npar = (struct qlcnic_pci_info *) pci_info_addr;
697 err = qlcnic_issue_cmd(adapter, 700 err = qlcnic_issue_cmd(adapter,
698 adapter->ahw.pci_func, 701 adapter->ahw->pci_func,
699 adapter->fw_hal_version, 702 adapter->fw_hal_version,
700 MSD(pci_info_dma_t), 703 MSD(pci_info_dma_t),
701 LSD(pci_info_dma_t), 704 LSD(pci_info_dma_t),
@@ -721,7 +724,7 @@ int qlcnic_get_pci_info(struct qlcnic_adapter *adapter,
721 err = -EIO; 724 err = -EIO;
722 } 725 }
723 726
724 pci_free_consistent(adapter->pdev, pci_size, pci_info_addr, 727 dma_free_coherent(&adapter->pdev->dev, pci_size, pci_info_addr,
725 pci_info_dma_t); 728 pci_info_dma_t);
726 return err; 729 return err;
727} 730}
@@ -741,7 +744,7 @@ int qlcnic_config_port_mirroring(struct qlcnic_adapter *adapter, u8 id,
741 arg1 |= pci_func << 8; 744 arg1 |= pci_func << 8;
742 745
743 err = qlcnic_issue_cmd(adapter, 746 err = qlcnic_issue_cmd(adapter,
744 adapter->ahw.pci_func, 747 adapter->ahw->pci_func,
745 adapter->fw_hal_version, 748 adapter->fw_hal_version,
746 arg1, 749 arg1,
747 0, 750 0,
@@ -775,14 +778,14 @@ int qlcnic_get_port_stats(struct qlcnic_adapter *adapter, const u8 func,
775 return -ENOMEM; 778 return -ENOMEM;
776 779
777 if (adapter->op_mode != QLCNIC_MGMT_FUNC && 780 if (adapter->op_mode != QLCNIC_MGMT_FUNC &&
778 func != adapter->ahw.pci_func) { 781 func != adapter->ahw->pci_func) {
779 dev_err(&adapter->pdev->dev, 782 dev_err(&adapter->pdev->dev,
780 "Not privilege to query stats for func=%d", func); 783 "Not privilege to query stats for func=%d", func);
781 return -EIO; 784 return -EIO;
782 } 785 }
783 786
784 stats_addr = pci_alloc_consistent(adapter->pdev, stats_size, 787 stats_addr = dma_alloc_coherent(&adapter->pdev->dev, stats_size,
785 &stats_dma_t); 788 &stats_dma_t, GFP_KERNEL);
786 if (!stats_addr) { 789 if (!stats_addr) {
787 dev_err(&adapter->pdev->dev, "Unable to allocate memory\n"); 790 dev_err(&adapter->pdev->dev, "Unable to allocate memory\n");
788 return -ENOMEM; 791 return -ENOMEM;
@@ -793,7 +796,7 @@ int qlcnic_get_port_stats(struct qlcnic_adapter *adapter, const u8 func,
793 arg1 |= rx_tx << 15 | stats_size << 16; 796 arg1 |= rx_tx << 15 | stats_size << 16;
794 797
795 err = qlcnic_issue_cmd(adapter, 798 err = qlcnic_issue_cmd(adapter,
796 adapter->ahw.pci_func, 799 adapter->ahw->pci_func,
797 adapter->fw_hal_version, 800 adapter->fw_hal_version,
798 arg1, 801 arg1,
799 MSD(stats_dma_t), 802 MSD(stats_dma_t),
@@ -816,7 +819,7 @@ int qlcnic_get_port_stats(struct qlcnic_adapter *adapter, const u8 func,
816 esw_stats->numbytes = le64_to_cpu(stats->numbytes); 819 esw_stats->numbytes = le64_to_cpu(stats->numbytes);
817 } 820 }
818 821
819 pci_free_consistent(adapter->pdev, stats_size, stats_addr, 822 dma_free_coherent(&adapter->pdev->dev, stats_size, stats_addr,
820 stats_dma_t); 823 stats_dma_t);
821 return err; 824 return err;
822} 825}
@@ -900,7 +903,7 @@ int qlcnic_clear_esw_stats(struct qlcnic_adapter *adapter, const u8 func_esw,
900 arg1 |= BIT_14 | rx_tx << 15; 903 arg1 |= BIT_14 | rx_tx << 15;
901 904
902 return qlcnic_issue_cmd(adapter, 905 return qlcnic_issue_cmd(adapter,
903 adapter->ahw.pci_func, 906 adapter->ahw->pci_func,
904 adapter->fw_hal_version, 907 adapter->fw_hal_version,
905 arg1, 908 arg1,
906 0, 909 0,
@@ -921,7 +924,7 @@ __qlcnic_get_eswitch_port_config(struct qlcnic_adapter *adapter,
921 u8 pci_func; 924 u8 pci_func;
922 pci_func = (*arg1 >> 8); 925 pci_func = (*arg1 >> 8);
923 err = qlcnic_issue_cmd(adapter, 926 err = qlcnic_issue_cmd(adapter,
924 adapter->ahw.pci_func, 927 adapter->ahw->pci_func,
925 adapter->fw_hal_version, 928 adapter->fw_hal_version,
926 *arg1, 929 *arg1,
927 0, 930 0,
@@ -999,7 +1002,7 @@ int qlcnic_config_switch_port(struct qlcnic_adapter *adapter,
999 } 1002 }
1000 1003
1001 err = qlcnic_issue_cmd(adapter, 1004 err = qlcnic_issue_cmd(adapter,
1002 adapter->ahw.pci_func, 1005 adapter->ahw->pci_func,
1003 adapter->fw_hal_version, 1006 adapter->fw_hal_version,
1004 arg1, 1007 arg1,
1005 arg2, 1008 arg2,
diff --git a/drivers/net/qlcnic/qlcnic_ethtool.c b/drivers/net/qlcnic/qlcnic_ethtool.c
index 45b2755d6cb..7e53cad6be1 100644
--- a/drivers/net/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/qlcnic/qlcnic_ethtool.c
@@ -150,10 +150,10 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
150{ 150{
151 struct qlcnic_adapter *adapter = netdev_priv(dev); 151 struct qlcnic_adapter *adapter = netdev_priv(dev);
152 int check_sfp_module = 0; 152 int check_sfp_module = 0;
153 u16 pcifn = adapter->ahw.pci_func; 153 u16 pcifn = adapter->ahw->pci_func;
154 154
155 /* read which mode */ 155 /* read which mode */
156 if (adapter->ahw.port_type == QLCNIC_GBE) { 156 if (adapter->ahw->port_type == QLCNIC_GBE) {
157 ecmd->supported = (SUPPORTED_10baseT_Half | 157 ecmd->supported = (SUPPORTED_10baseT_Half |
158 SUPPORTED_10baseT_Full | 158 SUPPORTED_10baseT_Full |
159 SUPPORTED_100baseT_Half | 159 SUPPORTED_100baseT_Half |
@@ -170,7 +170,7 @@ qlcnic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
170 ecmd->duplex = adapter->link_duplex; 170 ecmd->duplex = adapter->link_duplex;
171 ecmd->autoneg = adapter->link_autoneg; 171 ecmd->autoneg = adapter->link_autoneg;
172 172
173 } else if (adapter->ahw.port_type == QLCNIC_XGBE) { 173 } else if (adapter->ahw->port_type == QLCNIC_XGBE) {
174 u32 val; 174 u32 val;
175 175
176 val = QLCRD32(adapter, QLCNIC_PORT_MODE_ADDR); 176 val = QLCRD32(adapter, QLCNIC_PORT_MODE_ADDR);
@@ -201,7 +201,7 @@ skip:
201 ecmd->phy_address = adapter->physical_port; 201 ecmd->phy_address = adapter->physical_port;
202 ecmd->transceiver = XCVR_EXTERNAL; 202 ecmd->transceiver = XCVR_EXTERNAL;
203 203
204 switch (adapter->ahw.board_type) { 204 switch (adapter->ahw->board_type) {
205 case QLCNIC_BRDTYPE_P3P_REF_QG: 205 case QLCNIC_BRDTYPE_P3P_REF_QG:
206 case QLCNIC_BRDTYPE_P3P_4_GB: 206 case QLCNIC_BRDTYPE_P3P_4_GB:
207 case QLCNIC_BRDTYPE_P3P_4_GB_MM: 207 case QLCNIC_BRDTYPE_P3P_4_GB_MM:
@@ -238,7 +238,7 @@ skip:
238 ecmd->autoneg = AUTONEG_DISABLE; 238 ecmd->autoneg = AUTONEG_DISABLE;
239 break; 239 break;
240 case QLCNIC_BRDTYPE_P3P_10G_TP: 240 case QLCNIC_BRDTYPE_P3P_10G_TP:
241 if (adapter->ahw.port_type == QLCNIC_XGBE) { 241 if (adapter->ahw->port_type == QLCNIC_XGBE) {
242 ecmd->autoneg = AUTONEG_DISABLE; 242 ecmd->autoneg = AUTONEG_DISABLE;
243 ecmd->supported |= (SUPPORTED_FIBRE | SUPPORTED_TP); 243 ecmd->supported |= (SUPPORTED_FIBRE | SUPPORTED_TP);
244 ecmd->advertising |= 244 ecmd->advertising |=
@@ -256,7 +256,7 @@ skip:
256 break; 256 break;
257 default: 257 default:
258 dev_err(&adapter->pdev->dev, "Unsupported board model %d\n", 258 dev_err(&adapter->pdev->dev, "Unsupported board model %d\n",
259 adapter->ahw.board_type); 259 adapter->ahw->board_type);
260 return -EIO; 260 return -EIO;
261 } 261 }
262 262
@@ -288,7 +288,7 @@ qlcnic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
288 __u32 status; 288 __u32 status;
289 289
290 /* read which mode */ 290 /* read which mode */
291 if (adapter->ahw.port_type == QLCNIC_GBE) { 291 if (adapter->ahw->port_type == QLCNIC_GBE) {
292 /* autonegotiation */ 292 /* autonegotiation */
293 if (qlcnic_fw_cmd_set_phy(adapter, 293 if (qlcnic_fw_cmd_set_phy(adapter,
294 QLCNIC_NIU_GB_MII_MGMT_ADDR_AUTONEG, 294 QLCNIC_NIU_GB_MII_MGMT_ADDR_AUTONEG,
@@ -340,14 +340,14 @@ static void
340qlcnic_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) 340qlcnic_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
341{ 341{
342 struct qlcnic_adapter *adapter = netdev_priv(dev); 342 struct qlcnic_adapter *adapter = netdev_priv(dev);
343 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 343 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
344 struct qlcnic_host_sds_ring *sds_ring; 344 struct qlcnic_host_sds_ring *sds_ring;
345 u32 *regs_buff = p; 345 u32 *regs_buff = p;
346 int ring, i = 0, j = 0; 346 int ring, i = 0, j = 0;
347 347
348 memset(p, 0, qlcnic_get_regs_len(dev)); 348 memset(p, 0, qlcnic_get_regs_len(dev));
349 regs->version = (QLCNIC_ETHTOOL_REGS_VER << 24) | 349 regs->version = (QLCNIC_ETHTOOL_REGS_VER << 24) |
350 (adapter->ahw.revision_id << 16) | (adapter->pdev)->device; 350 (adapter->ahw->revision_id << 16) | (adapter->pdev)->device;
351 351
352 regs_buff[0] = (0xcafe0000 | (QLCNIC_DEV_INFO_SIZE & 0xffff)); 352 regs_buff[0] = (0xcafe0000 | (QLCNIC_DEV_INFO_SIZE & 0xffff));
353 regs_buff[1] = QLCNIC_MGMT_API_VERSION; 353 regs_buff[1] = QLCNIC_MGMT_API_VERSION;
@@ -382,7 +382,7 @@ static u32 qlcnic_test_link(struct net_device *dev)
382 u32 val; 382 u32 val;
383 383
384 val = QLCRD32(adapter, CRB_XG_STATE_P3P); 384 val = QLCRD32(adapter, CRB_XG_STATE_P3P);
385 val = XG_LINK_STATE_P3P(adapter->ahw.pci_func, val); 385 val = XG_LINK_STATE_P3P(adapter->ahw->pci_func, val);
386 return (val == XG_LINK_UP_P3P) ? 0 : 1; 386 return (val == XG_LINK_UP_P3P) ? 0 : 1;
387} 387}
388 388
@@ -482,7 +482,7 @@ qlcnic_get_pauseparam(struct net_device *netdev,
482 int port = adapter->physical_port; 482 int port = adapter->physical_port;
483 __u32 val; 483 __u32 val;
484 484
485 if (adapter->ahw.port_type == QLCNIC_GBE) { 485 if (adapter->ahw->port_type == QLCNIC_GBE) {
486 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS)) 486 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS))
487 return; 487 return;
488 /* get flow control settings */ 488 /* get flow control settings */
@@ -504,7 +504,7 @@ qlcnic_get_pauseparam(struct net_device *netdev,
504 pause->tx_pause = !(qlcnic_gb_get_gb3_mask(val)); 504 pause->tx_pause = !(qlcnic_gb_get_gb3_mask(val));
505 break; 505 break;
506 } 506 }
507 } else if (adapter->ahw.port_type == QLCNIC_XGBE) { 507 } else if (adapter->ahw->port_type == QLCNIC_XGBE) {
508 if ((port < 0) || (port > QLCNIC_NIU_MAX_XG_PORTS)) 508 if ((port < 0) || (port > QLCNIC_NIU_MAX_XG_PORTS))
509 return; 509 return;
510 pause->rx_pause = 1; 510 pause->rx_pause = 1;
@@ -515,7 +515,7 @@ qlcnic_get_pauseparam(struct net_device *netdev,
515 pause->tx_pause = !(qlcnic_xg_get_xg1_mask(val)); 515 pause->tx_pause = !(qlcnic_xg_get_xg1_mask(val));
516 } else { 516 } else {
517 dev_err(&netdev->dev, "Unknown board type: %x\n", 517 dev_err(&netdev->dev, "Unknown board type: %x\n",
518 adapter->ahw.port_type); 518 adapter->ahw->port_type);
519 } 519 }
520} 520}
521 521
@@ -528,7 +528,7 @@ qlcnic_set_pauseparam(struct net_device *netdev,
528 __u32 val; 528 __u32 val;
529 529
530 /* read mode */ 530 /* read mode */
531 if (adapter->ahw.port_type == QLCNIC_GBE) { 531 if (adapter->ahw->port_type == QLCNIC_GBE) {
532 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS)) 532 if ((port < 0) || (port > QLCNIC_NIU_MAX_GBE_PORTS))
533 return -EIO; 533 return -EIO;
534 /* set flow control */ 534 /* set flow control */
@@ -571,7 +571,7 @@ qlcnic_set_pauseparam(struct net_device *netdev,
571 break; 571 break;
572 } 572 }
573 QLCWR32(adapter, QLCNIC_NIU_GB_PAUSE_CTL, val); 573 QLCWR32(adapter, QLCNIC_NIU_GB_PAUSE_CTL, val);
574 } else if (adapter->ahw.port_type == QLCNIC_XGBE) { 574 } else if (adapter->ahw->port_type == QLCNIC_XGBE) {
575 if (!pause->rx_pause || pause->autoneg) 575 if (!pause->rx_pause || pause->autoneg)
576 return -EOPNOTSUPP; 576 return -EOPNOTSUPP;
577 577
@@ -593,7 +593,7 @@ qlcnic_set_pauseparam(struct net_device *netdev,
593 QLCWR32(adapter, QLCNIC_NIU_XG_PAUSE_CTL, val); 593 QLCWR32(adapter, QLCNIC_NIU_XG_PAUSE_CTL, val);
594 } else { 594 } else {
595 dev_err(&netdev->dev, "Unknown board type: %x\n", 595 dev_err(&netdev->dev, "Unknown board type: %x\n",
596 adapter->ahw.port_type); 596 adapter->ahw->port_type);
597 } 597 }
598 return 0; 598 return 0;
599} 599}
@@ -639,8 +639,8 @@ static int qlcnic_irq_test(struct net_device *netdev)
639 goto clear_it; 639 goto clear_it;
640 640
641 adapter->diag_cnt = 0; 641 adapter->diag_cnt = 0;
642 ret = qlcnic_issue_cmd(adapter, adapter->ahw.pci_func, 642 ret = qlcnic_issue_cmd(adapter, adapter->ahw->pci_func,
643 adapter->fw_hal_version, adapter->portnum, 643 adapter->fw_hal_version, adapter->ahw->pci_func,
644 0, 0, 0x00000011); 644 0, 0, 0x00000011);
645 if (ret) 645 if (ret)
646 goto done; 646 goto done;
@@ -749,14 +749,14 @@ qlcnic_get_ethtool_stats(struct net_device *dev,
749 return; 749 return;
750 750
751 memset(&port_stats, 0, sizeof(struct qlcnic_esw_statistics)); 751 memset(&port_stats, 0, sizeof(struct qlcnic_esw_statistics));
752 ret = qlcnic_get_port_stats(adapter, adapter->ahw.pci_func, 752 ret = qlcnic_get_port_stats(adapter, adapter->ahw->pci_func,
753 QLCNIC_QUERY_RX_COUNTER, &port_stats.rx); 753 QLCNIC_QUERY_RX_COUNTER, &port_stats.rx);
754 if (ret) 754 if (ret)
755 return; 755 return;
756 756
757 qlcnic_fill_device_stats(&index, data, &port_stats.rx); 757 qlcnic_fill_device_stats(&index, data, &port_stats.rx);
758 758
759 ret = qlcnic_get_port_stats(adapter, adapter->ahw.pci_func, 759 ret = qlcnic_get_port_stats(adapter, adapter->ahw->pci_func,
760 QLCNIC_QUERY_TX_COUNTER, &port_stats.tx); 760 QLCNIC_QUERY_TX_COUNTER, &port_stats.tx);
761 if (ret) 761 if (ret)
762 return; 762 return;
diff --git a/drivers/net/qlcnic/qlcnic_hw.c b/drivers/net/qlcnic/qlcnic_hw.c
index 616940f0a8d..7e3f52690e3 100644
--- a/drivers/net/qlcnic/qlcnic_hw.c
+++ b/drivers/net/qlcnic/qlcnic_hw.c
@@ -457,7 +457,7 @@ int qlcnic_nic_set_promisc(struct qlcnic_adapter *adapter, u32 mode)
457 457
458 req.qhdr = cpu_to_le64(QLCNIC_HOST_REQUEST << 23); 458 req.qhdr = cpu_to_le64(QLCNIC_HOST_REQUEST << 23);
459 459
460 word = QLCNIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE | 460 word = QLCNIC_H2C_OPCODE_SET_MAC_RECEIVE_MODE |
461 ((u64)adapter->portnum << 16); 461 ((u64)adapter->portnum << 16);
462 req.req_hdr = cpu_to_le64(word); 462 req.req_hdr = cpu_to_le64(word);
463 463
@@ -780,7 +780,7 @@ qlcnic_pci_get_crb_addr_2M(struct qlcnic_adapter *adapter,
780 m = &crb_128M_2M_map[CRB_BLK(off)].sub_block[CRB_SUBBLK(off)]; 780 m = &crb_128M_2M_map[CRB_BLK(off)].sub_block[CRB_SUBBLK(off)];
781 781
782 if (m->valid && (m->start_128M <= off) && (m->end_128M > off)) { 782 if (m->valid && (m->start_128M <= off) && (m->end_128M > off)) {
783 *addr = adapter->ahw.pci_base0 + m->start_2M + 783 *addr = adapter->ahw->pci_base0 + m->start_2M +
784 (off - m->start_128M); 784 (off - m->start_128M);
785 return 0; 785 return 0;
786 } 786 }
@@ -788,7 +788,7 @@ qlcnic_pci_get_crb_addr_2M(struct qlcnic_adapter *adapter,
788 /* 788 /*
789 * Not in direct map, use crb window 789 * Not in direct map, use crb window
790 */ 790 */
791 *addr = adapter->ahw.pci_base0 + CRB_INDIRECT_2M + (off & MASK(16)); 791 *addr = adapter->ahw->pci_base0 + CRB_INDIRECT_2M + (off & MASK(16));
792 return 1; 792 return 1;
793} 793}
794 794
@@ -801,7 +801,7 @@ static int
801qlcnic_pci_set_crbwindow_2M(struct qlcnic_adapter *adapter, ulong off) 801qlcnic_pci_set_crbwindow_2M(struct qlcnic_adapter *adapter, ulong off)
802{ 802{
803 u32 window; 803 u32 window;
804 void __iomem *addr = adapter->ahw.pci_base0 + CRB_WINDOW_2M; 804 void __iomem *addr = adapter->ahw->pci_base0 + CRB_WINDOW_2M;
805 805
806 off -= QLCNIC_PCI_CRBSPACE; 806 off -= QLCNIC_PCI_CRBSPACE;
807 807
@@ -838,13 +838,13 @@ qlcnic_hw_write_wx_2M(struct qlcnic_adapter *adapter, ulong off, u32 data)
838 838
839 if (rv > 0) { 839 if (rv > 0) {
840 /* indirect access */ 840 /* indirect access */
841 write_lock_irqsave(&adapter->ahw.crb_lock, flags); 841 write_lock_irqsave(&adapter->ahw->crb_lock, flags);
842 crb_win_lock(adapter); 842 crb_win_lock(adapter);
843 rv = qlcnic_pci_set_crbwindow_2M(adapter, off); 843 rv = qlcnic_pci_set_crbwindow_2M(adapter, off);
844 if (!rv) 844 if (!rv)
845 writel(data, addr); 845 writel(data, addr);
846 crb_win_unlock(adapter); 846 crb_win_unlock(adapter);
847 write_unlock_irqrestore(&adapter->ahw.crb_lock, flags); 847 write_unlock_irqrestore(&adapter->ahw->crb_lock, flags);
848 return rv; 848 return rv;
849 } 849 }
850 850
@@ -869,12 +869,12 @@ qlcnic_hw_read_wx_2M(struct qlcnic_adapter *adapter, ulong off)
869 869
870 if (rv > 0) { 870 if (rv > 0) {
871 /* indirect access */ 871 /* indirect access */
872 write_lock_irqsave(&adapter->ahw.crb_lock, flags); 872 write_lock_irqsave(&adapter->ahw->crb_lock, flags);
873 crb_win_lock(adapter); 873 crb_win_lock(adapter);
874 if (!qlcnic_pci_set_crbwindow_2M(adapter, off)) 874 if (!qlcnic_pci_set_crbwindow_2M(adapter, off))
875 data = readl(addr); 875 data = readl(addr);
876 crb_win_unlock(adapter); 876 crb_win_unlock(adapter);
877 write_unlock_irqrestore(&adapter->ahw.crb_lock, flags); 877 write_unlock_irqrestore(&adapter->ahw->crb_lock, flags);
878 return data; 878 return data;
879 } 879 }
880 880
@@ -904,9 +904,9 @@ qlcnic_pci_set_window_2M(struct qlcnic_adapter *adapter,
904 904
905 window = OCM_WIN_P3P(addr); 905 window = OCM_WIN_P3P(addr);
906 906
907 writel(window, adapter->ahw.ocm_win_crb); 907 writel(window, adapter->ahw->ocm_win_crb);
908 /* read back to flush */ 908 /* read back to flush */
909 readl(adapter->ahw.ocm_win_crb); 909 readl(adapter->ahw->ocm_win_crb);
910 910
911 *start = QLCNIC_PCI_OCM0_2M + GET_MEM_OFFS_2M(addr); 911 *start = QLCNIC_PCI_OCM0_2M + GET_MEM_OFFS_2M(addr);
912 return 0; 912 return 0;
@@ -920,13 +920,13 @@ qlcnic_pci_mem_access_direct(struct qlcnic_adapter *adapter, u64 off,
920 int ret; 920 int ret;
921 u32 start; 921 u32 start;
922 922
923 mutex_lock(&adapter->ahw.mem_lock); 923 mutex_lock(&adapter->ahw->mem_lock);
924 924
925 ret = qlcnic_pci_set_window_2M(adapter, off, &start); 925 ret = qlcnic_pci_set_window_2M(adapter, off, &start);
926 if (ret != 0) 926 if (ret != 0)
927 goto unlock; 927 goto unlock;
928 928
929 addr = adapter->ahw.pci_base0 + start; 929 addr = adapter->ahw->pci_base0 + start;
930 930
931 if (op == 0) /* read */ 931 if (op == 0) /* read */
932 *data = readq(addr); 932 *data = readq(addr);
@@ -934,7 +934,7 @@ qlcnic_pci_mem_access_direct(struct qlcnic_adapter *adapter, u64 off,
934 writeq(*data, addr); 934 writeq(*data, addr);
935 935
936unlock: 936unlock:
937 mutex_unlock(&adapter->ahw.mem_lock); 937 mutex_unlock(&adapter->ahw->mem_lock);
938 938
939 return ret; 939 return ret;
940} 940}
@@ -942,23 +942,23 @@ unlock:
942void 942void
943qlcnic_pci_camqm_read_2M(struct qlcnic_adapter *adapter, u64 off, u64 *data) 943qlcnic_pci_camqm_read_2M(struct qlcnic_adapter *adapter, u64 off, u64 *data)
944{ 944{
945 void __iomem *addr = adapter->ahw.pci_base0 + 945 void __iomem *addr = adapter->ahw->pci_base0 +
946 QLCNIC_PCI_CAMQM_2M_BASE + (off - QLCNIC_PCI_CAMQM); 946 QLCNIC_PCI_CAMQM_2M_BASE + (off - QLCNIC_PCI_CAMQM);
947 947
948 mutex_lock(&adapter->ahw.mem_lock); 948 mutex_lock(&adapter->ahw->mem_lock);
949 *data = readq(addr); 949 *data = readq(addr);
950 mutex_unlock(&adapter->ahw.mem_lock); 950 mutex_unlock(&adapter->ahw->mem_lock);
951} 951}
952 952
953void 953void
954qlcnic_pci_camqm_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data) 954qlcnic_pci_camqm_write_2M(struct qlcnic_adapter *adapter, u64 off, u64 data)
955{ 955{
956 void __iomem *addr = adapter->ahw.pci_base0 + 956 void __iomem *addr = adapter->ahw->pci_base0 +
957 QLCNIC_PCI_CAMQM_2M_BASE + (off - QLCNIC_PCI_CAMQM); 957 QLCNIC_PCI_CAMQM_2M_BASE + (off - QLCNIC_PCI_CAMQM);
958 958
959 mutex_lock(&adapter->ahw.mem_lock); 959 mutex_lock(&adapter->ahw->mem_lock);
960 writeq(data, addr); 960 writeq(data, addr);
961 mutex_unlock(&adapter->ahw.mem_lock); 961 mutex_unlock(&adapter->ahw->mem_lock);
962} 962}
963 963
964#define MAX_CTL_CHECK 1000 964#define MAX_CTL_CHECK 1000
@@ -997,7 +997,7 @@ qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter,
997correct: 997correct:
998 off8 = off & ~0xf; 998 off8 = off & ~0xf;
999 999
1000 mutex_lock(&adapter->ahw.mem_lock); 1000 mutex_lock(&adapter->ahw->mem_lock);
1001 1001
1002 writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO)); 1002 writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO));
1003 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI)); 1003 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI));
@@ -1049,7 +1049,7 @@ correct:
1049 ret = 0; 1049 ret = 0;
1050 1050
1051done: 1051done:
1052 mutex_unlock(&adapter->ahw.mem_lock); 1052 mutex_unlock(&adapter->ahw->mem_lock);
1053 1053
1054 return ret; 1054 return ret;
1055} 1055}
@@ -1091,7 +1091,7 @@ qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter,
1091correct: 1091correct:
1092 off8 = off & ~0xf; 1092 off8 = off & ~0xf;
1093 1093
1094 mutex_lock(&adapter->ahw.mem_lock); 1094 mutex_lock(&adapter->ahw->mem_lock);
1095 1095
1096 writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO)); 1096 writel(off8, (mem_crb + MIU_TEST_AGT_ADDR_LO));
1097 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI)); 1097 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI));
@@ -1121,7 +1121,7 @@ correct:
1121 ret = 0; 1121 ret = 0;
1122 } 1122 }
1123 1123
1124 mutex_unlock(&adapter->ahw.mem_lock); 1124 mutex_unlock(&adapter->ahw->mem_lock);
1125 1125
1126 return ret; 1126 return ret;
1127} 1127}
@@ -1145,7 +1145,7 @@ int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
1145 if (qlcnic_rom_fast_read(adapter, offset, &board_type)) 1145 if (qlcnic_rom_fast_read(adapter, offset, &board_type))
1146 return -EIO; 1146 return -EIO;
1147 1147
1148 adapter->ahw.board_type = board_type; 1148 adapter->ahw->board_type = board_type;
1149 1149
1150 if (board_type == QLCNIC_BRDTYPE_P3P_4_GB_MM) { 1150 if (board_type == QLCNIC_BRDTYPE_P3P_4_GB_MM) {
1151 u32 gpio = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_PAD_GPIO_I); 1151 u32 gpio = QLCRD32(adapter, QLCNIC_ROMUSB_GLB_PAD_GPIO_I);
@@ -1164,20 +1164,20 @@ int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
1164 case QLCNIC_BRDTYPE_P3P_10G_SFP_QT: 1164 case QLCNIC_BRDTYPE_P3P_10G_SFP_QT:
1165 case QLCNIC_BRDTYPE_P3P_10G_XFP: 1165 case QLCNIC_BRDTYPE_P3P_10G_XFP:
1166 case QLCNIC_BRDTYPE_P3P_10000_BASE_T: 1166 case QLCNIC_BRDTYPE_P3P_10000_BASE_T:
1167 adapter->ahw.port_type = QLCNIC_XGBE; 1167 adapter->ahw->port_type = QLCNIC_XGBE;
1168 break; 1168 break;
1169 case QLCNIC_BRDTYPE_P3P_REF_QG: 1169 case QLCNIC_BRDTYPE_P3P_REF_QG:
1170 case QLCNIC_BRDTYPE_P3P_4_GB: 1170 case QLCNIC_BRDTYPE_P3P_4_GB:
1171 case QLCNIC_BRDTYPE_P3P_4_GB_MM: 1171 case QLCNIC_BRDTYPE_P3P_4_GB_MM:
1172 adapter->ahw.port_type = QLCNIC_GBE; 1172 adapter->ahw->port_type = QLCNIC_GBE;
1173 break; 1173 break;
1174 case QLCNIC_BRDTYPE_P3P_10G_TP: 1174 case QLCNIC_BRDTYPE_P3P_10G_TP:
1175 adapter->ahw.port_type = (adapter->portnum < 2) ? 1175 adapter->ahw->port_type = (adapter->portnum < 2) ?
1176 QLCNIC_XGBE : QLCNIC_GBE; 1176 QLCNIC_XGBE : QLCNIC_GBE;
1177 break; 1177 break;
1178 default: 1178 default:
1179 dev_err(&pdev->dev, "unknown board type %x\n", board_type); 1179 dev_err(&pdev->dev, "unknown board type %x\n", board_type);
1180 adapter->ahw.port_type = QLCNIC_XGBE; 1180 adapter->ahw->port_type = QLCNIC_XGBE;
1181 break; 1181 break;
1182 } 1182 }
1183 1183
diff --git a/drivers/net/qlcnic/qlcnic_init.c b/drivers/net/qlcnic/qlcnic_init.c
index a7f1d5b7e81..476ea14c0ff 100644
--- a/drivers/net/qlcnic/qlcnic_init.c
+++ b/drivers/net/qlcnic/qlcnic_init.c
@@ -94,7 +94,7 @@ void qlcnic_release_rx_buffers(struct qlcnic_adapter *adapter)
94 struct qlcnic_rx_buffer *rx_buf; 94 struct qlcnic_rx_buffer *rx_buf;
95 int i, ring; 95 int i, ring;
96 96
97 recv_ctx = &adapter->recv_ctx; 97 recv_ctx = adapter->recv_ctx;
98 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 98 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
99 rds_ring = &recv_ctx->rds_rings[ring]; 99 rds_ring = &recv_ctx->rds_rings[ring];
100 for (i = 0; i < rds_ring->num_desc; ++i) { 100 for (i = 0; i < rds_ring->num_desc; ++i) {
@@ -119,7 +119,7 @@ void qlcnic_reset_rx_buffers_list(struct qlcnic_adapter *adapter)
119 struct qlcnic_rx_buffer *rx_buf; 119 struct qlcnic_rx_buffer *rx_buf;
120 int i, ring; 120 int i, ring;
121 121
122 recv_ctx = &adapter->recv_ctx; 122 recv_ctx = adapter->recv_ctx;
123 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 123 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
124 rds_ring = &recv_ctx->rds_rings[ring]; 124 rds_ring = &recv_ctx->rds_rings[ring];
125 125
@@ -173,7 +173,7 @@ void qlcnic_free_sw_resources(struct qlcnic_adapter *adapter)
173 struct qlcnic_host_tx_ring *tx_ring; 173 struct qlcnic_host_tx_ring *tx_ring;
174 int ring; 174 int ring;
175 175
176 recv_ctx = &adapter->recv_ctx; 176 recv_ctx = adapter->recv_ctx;
177 177
178 if (recv_ctx->rds_rings == NULL) 178 if (recv_ctx->rds_rings == NULL)
179 goto skip_rds; 179 goto skip_rds;
@@ -226,7 +226,7 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter)
226 } 226 }
227 tx_ring->cmd_buf_arr = cmd_buf_arr; 227 tx_ring->cmd_buf_arr = cmd_buf_arr;
228 228
229 recv_ctx = &adapter->recv_ctx; 229 recv_ctx = adapter->recv_ctx;
230 230
231 size = adapter->max_rds_rings * sizeof(struct qlcnic_host_rds_ring); 231 size = adapter->max_rds_rings * sizeof(struct qlcnic_host_rds_ring);
232 rds_ring = kzalloc(size, GFP_KERNEL); 232 rds_ring = kzalloc(size, GFP_KERNEL);
@@ -864,7 +864,7 @@ nomn:
864 for (i = 0; i < entries; i++) { 864 for (i = 0; i < entries; i++) {
865 865
866 __le32 flags, file_chiprev, offs; 866 __le32 flags, file_chiprev, offs;
867 u8 chiprev = adapter->ahw.revision_id; 867 u8 chiprev = adapter->ahw->revision_id;
868 u32 flagbit; 868 u32 flagbit;
869 869
870 offs = cpu_to_le32(ptab_descr->findex) + 870 offs = cpu_to_le32(ptab_descr->findex) +
@@ -1394,7 +1394,7 @@ static struct sk_buff *qlcnic_process_rxbuf(struct qlcnic_adapter *adapter,
1394 return skb; 1394 return skb;
1395} 1395}
1396 1396
1397static int 1397static inline int
1398qlcnic_check_rx_tagging(struct qlcnic_adapter *adapter, struct sk_buff *skb, 1398qlcnic_check_rx_tagging(struct qlcnic_adapter *adapter, struct sk_buff *skb,
1399 u16 *vlan_tag) 1399 u16 *vlan_tag)
1400{ 1400{
@@ -1425,7 +1425,7 @@ qlcnic_process_rcv(struct qlcnic_adapter *adapter,
1425 int ring, u64 sts_data0) 1425 int ring, u64 sts_data0)
1426{ 1426{
1427 struct net_device *netdev = adapter->netdev; 1427 struct net_device *netdev = adapter->netdev;
1428 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 1428 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1429 struct qlcnic_rx_buffer *buffer; 1429 struct qlcnic_rx_buffer *buffer;
1430 struct sk_buff *skb; 1430 struct sk_buff *skb;
1431 struct qlcnic_host_rds_ring *rds_ring; 1431 struct qlcnic_host_rds_ring *rds_ring;
@@ -1488,7 +1488,7 @@ qlcnic_process_lro(struct qlcnic_adapter *adapter,
1488 int ring, u64 sts_data0, u64 sts_data1) 1488 int ring, u64 sts_data0, u64 sts_data1)
1489{ 1489{
1490 struct net_device *netdev = adapter->netdev; 1490 struct net_device *netdev = adapter->netdev;
1491 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 1491 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1492 struct qlcnic_rx_buffer *buffer; 1492 struct qlcnic_rx_buffer *buffer;
1493 struct sk_buff *skb; 1493 struct sk_buff *skb;
1494 struct qlcnic_host_rds_ring *rds_ring; 1494 struct qlcnic_host_rds_ring *rds_ring;
@@ -1625,7 +1625,7 @@ skip:
1625 1625
1626 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 1626 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1627 struct qlcnic_host_rds_ring *rds_ring = 1627 struct qlcnic_host_rds_ring *rds_ring =
1628 &adapter->recv_ctx.rds_rings[ring]; 1628 &adapter->recv_ctx->rds_rings[ring];
1629 1629
1630 if (!list_empty(&sds_ring->free_list[ring])) { 1630 if (!list_empty(&sds_ring->free_list[ring])) {
1631 list_for_each(cur, &sds_ring->free_list[ring]) { 1631 list_for_each(cur, &sds_ring->free_list[ring]) {
@@ -1651,12 +1651,13 @@ skip:
1651} 1651}
1652 1652
1653void 1653void
1654qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter, u32 ringid, 1654qlcnic_post_rx_buffers(struct qlcnic_adapter *adapter,
1655 struct qlcnic_host_rds_ring *rds_ring) 1655 struct qlcnic_host_rds_ring *rds_ring)
1656{ 1656{
1657 struct rcv_desc *pdesc; 1657 struct rcv_desc *pdesc;
1658 struct qlcnic_rx_buffer *buffer; 1658 struct qlcnic_rx_buffer *buffer;
1659 int producer, count = 0; 1659 int count = 0;
1660 u32 producer;
1660 struct list_head *head; 1661 struct list_head *head;
1661 1662
1662 producer = rds_ring->producer; 1663 producer = rds_ring->producer;
@@ -1696,7 +1697,8 @@ qlcnic_post_rx_buffers_nodb(struct qlcnic_adapter *adapter,
1696{ 1697{
1697 struct rcv_desc *pdesc; 1698 struct rcv_desc *pdesc;
1698 struct qlcnic_rx_buffer *buffer; 1699 struct qlcnic_rx_buffer *buffer;
1699 int producer, count = 0; 1700 int count = 0;
1701 uint32_t producer;
1700 struct list_head *head; 1702 struct list_head *head;
1701 1703
1702 if (!spin_trylock(&rds_ring->lock)) 1704 if (!spin_trylock(&rds_ring->lock))
diff --git a/drivers/net/qlcnic/qlcnic_main.c b/drivers/net/qlcnic/qlcnic_main.c
index de6f86681a3..dde7e440383 100644
--- a/drivers/net/qlcnic/qlcnic_main.c
+++ b/drivers/net/qlcnic/qlcnic_main.c
@@ -113,7 +113,7 @@ static DEFINE_PCI_DEVICE_TABLE(qlcnic_pci_tbl) = {
113MODULE_DEVICE_TABLE(pci, qlcnic_pci_tbl); 113MODULE_DEVICE_TABLE(pci, qlcnic_pci_tbl);
114 114
115 115
116void 116inline void
117qlcnic_update_cmd_producer(struct qlcnic_adapter *adapter, 117qlcnic_update_cmd_producer(struct qlcnic_adapter *adapter,
118 struct qlcnic_host_tx_ring *tx_ring) 118 struct qlcnic_host_tx_ring *tx_ring)
119{ 119{
@@ -169,7 +169,7 @@ qlcnic_napi_add(struct qlcnic_adapter *adapter, struct net_device *netdev)
169{ 169{
170 int ring; 170 int ring;
171 struct qlcnic_host_sds_ring *sds_ring; 171 struct qlcnic_host_sds_ring *sds_ring;
172 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 172 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
173 173
174 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->max_sds_rings)) 174 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->max_sds_rings))
175 return -ENOMEM; 175 return -ENOMEM;
@@ -193,14 +193,14 @@ qlcnic_napi_del(struct qlcnic_adapter *adapter)
193{ 193{
194 int ring; 194 int ring;
195 struct qlcnic_host_sds_ring *sds_ring; 195 struct qlcnic_host_sds_ring *sds_ring;
196 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 196 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
197 197
198 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 198 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
199 sds_ring = &recv_ctx->sds_rings[ring]; 199 sds_ring = &recv_ctx->sds_rings[ring];
200 netif_napi_del(&sds_ring->napi); 200 netif_napi_del(&sds_ring->napi);
201 } 201 }
202 202
203 qlcnic_free_sds_rings(&adapter->recv_ctx); 203 qlcnic_free_sds_rings(adapter->recv_ctx);
204} 204}
205 205
206static void 206static void
@@ -208,7 +208,7 @@ qlcnic_napi_enable(struct qlcnic_adapter *adapter)
208{ 208{
209 int ring; 209 int ring;
210 struct qlcnic_host_sds_ring *sds_ring; 210 struct qlcnic_host_sds_ring *sds_ring;
211 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 211 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
212 212
213 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) 213 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
214 return; 214 return;
@@ -225,7 +225,7 @@ qlcnic_napi_disable(struct qlcnic_adapter *adapter)
225{ 225{
226 int ring; 226 int ring;
227 struct qlcnic_host_sds_ring *sds_ring; 227 struct qlcnic_host_sds_ring *sds_ring;
228 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 228 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
229 229
230 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) 230 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
231 return; 231 return;
@@ -359,7 +359,7 @@ qlcnic_setup_intr(struct qlcnic_adapter *adapter)
359 struct pci_dev *pdev = adapter->pdev; 359 struct pci_dev *pdev = adapter->pdev;
360 int err, num_msix; 360 int err, num_msix;
361 361
362 if (adapter->rss_supported) { 362 if (adapter->msix_supported) {
363 num_msix = (num_online_cpus() >= MSIX_ENTRIES_PER_ADAPTER) ? 363 num_msix = (num_online_cpus() >= MSIX_ENTRIES_PER_ADAPTER) ?
364 MSIX_ENTRIES_PER_ADAPTER : 2; 364 MSIX_ENTRIES_PER_ADAPTER : 2;
365 } else 365 } else
@@ -369,7 +369,7 @@ qlcnic_setup_intr(struct qlcnic_adapter *adapter)
369 369
370 adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED); 370 adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED);
371 371
372 legacy_intrp = &legacy_intr[adapter->ahw.pci_func]; 372 legacy_intrp = &legacy_intr[adapter->ahw->pci_func];
373 373
374 adapter->int_vec_bit = legacy_intrp->int_vec_bit; 374 adapter->int_vec_bit = legacy_intrp->int_vec_bit;
375 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, 375 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
@@ -391,8 +391,7 @@ qlcnic_setup_intr(struct qlcnic_adapter *adapter)
391 adapter->flags |= QLCNIC_MSIX_ENABLED; 391 adapter->flags |= QLCNIC_MSIX_ENABLED;
392 qlcnic_set_msix_bit(pdev, 1); 392 qlcnic_set_msix_bit(pdev, 1);
393 393
394 if (adapter->rss_supported) 394 adapter->max_sds_rings = num_msix;
395 adapter->max_sds_rings = num_msix;
396 395
397 dev_info(&pdev->dev, "using msi-x interrupts\n"); 396 dev_info(&pdev->dev, "using msi-x interrupts\n");
398 return; 397 return;
@@ -407,7 +406,7 @@ qlcnic_setup_intr(struct qlcnic_adapter *adapter)
407 if (use_msi && !pci_enable_msi(pdev)) { 406 if (use_msi && !pci_enable_msi(pdev)) {
408 adapter->flags |= QLCNIC_MSI_ENABLED; 407 adapter->flags |= QLCNIC_MSI_ENABLED;
409 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, 408 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
410 msi_tgt_status[adapter->ahw.pci_func]); 409 msi_tgt_status[adapter->ahw->pci_func]);
411 dev_info(&pdev->dev, "using msi interrupts\n"); 410 dev_info(&pdev->dev, "using msi interrupts\n");
412 adapter->msix_entries[0].vector = pdev->irq; 411 adapter->msix_entries[0].vector = pdev->irq;
413 return; 412 return;
@@ -429,8 +428,8 @@ qlcnic_teardown_intr(struct qlcnic_adapter *adapter)
429static void 428static void
430qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter) 429qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter)
431{ 430{
432 if (adapter->ahw.pci_base0 != NULL) 431 if (adapter->ahw->pci_base0 != NULL)
433 iounmap(adapter->ahw.pci_base0); 432 iounmap(adapter->ahw->pci_base0);
434} 433}
435 434
436static int 435static int
@@ -500,7 +499,7 @@ qlcnic_set_function_modes(struct qlcnic_adapter *adapter)
500 u32 ref_count; 499 u32 ref_count;
501 int i, ret = 1; 500 int i, ret = 1;
502 u32 data = QLCNIC_MGMT_FUNC; 501 u32 data = QLCNIC_MGMT_FUNC;
503 void __iomem *priv_op = adapter->ahw.pci_base0 + QLCNIC_DRV_OP_MODE; 502 void __iomem *priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
504 503
505 /* If other drivers are not in use set their privilege level */ 504 /* If other drivers are not in use set their privilege level */
506 ref_count = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); 505 ref_count = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
@@ -512,16 +511,16 @@ qlcnic_set_function_modes(struct qlcnic_adapter *adapter)
512 for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { 511 for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
513 id = i; 512 id = i;
514 if (adapter->npars[i].type != QLCNIC_TYPE_NIC || 513 if (adapter->npars[i].type != QLCNIC_TYPE_NIC ||
515 id == adapter->ahw.pci_func) 514 id == adapter->ahw->pci_func)
516 continue; 515 continue;
517 data |= (qlcnic_config_npars & 516 data |= (qlcnic_config_npars &
518 QLC_DEV_SET_DRV(0xf, id)); 517 QLC_DEV_SET_DRV(0xf, id));
519 } 518 }
520 } else { 519 } else {
521 data = readl(priv_op); 520 data = readl(priv_op);
522 data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw.pci_func)) | 521 data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw->pci_func)) |
523 (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC, 522 (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC,
524 adapter->ahw.pci_func)); 523 adapter->ahw->pci_func));
525 } 524 }
526 writel(data, priv_op); 525 writel(data, priv_op);
527 qlcnic_api_unlock(adapter); 526 qlcnic_api_unlock(adapter);
@@ -539,22 +538,23 @@ qlcnic_check_vf(struct qlcnic_adapter *adapter)
539 u32 op_mode, priv_level; 538 u32 op_mode, priv_level;
540 539
541 /* Determine FW API version */ 540 /* Determine FW API version */
542 adapter->fw_hal_version = readl(adapter->ahw.pci_base0 + QLCNIC_FW_API); 541 adapter->fw_hal_version = readl(adapter->ahw->pci_base0 +
542 QLCNIC_FW_API);
543 543
544 /* Find PCI function number */ 544 /* Find PCI function number */
545 pci_read_config_dword(adapter->pdev, QLCNIC_MSIX_TABLE_OFFSET, &func); 545 pci_read_config_dword(adapter->pdev, QLCNIC_MSIX_TABLE_OFFSET, &func);
546 msix_base_addr = adapter->ahw.pci_base0 + QLCNIC_MSIX_BASE; 546 msix_base_addr = adapter->ahw->pci_base0 + QLCNIC_MSIX_BASE;
547 msix_base = readl(msix_base_addr); 547 msix_base = readl(msix_base_addr);
548 func = (func - msix_base)/QLCNIC_MSIX_TBL_PGSIZE; 548 func = (func - msix_base)/QLCNIC_MSIX_TBL_PGSIZE;
549 adapter->ahw.pci_func = func; 549 adapter->ahw->pci_func = func;
550 550
551 /* Determine function privilege level */ 551 /* Determine function privilege level */
552 priv_op = adapter->ahw.pci_base0 + QLCNIC_DRV_OP_MODE; 552 priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
553 op_mode = readl(priv_op); 553 op_mode = readl(priv_op);
554 if (op_mode == QLC_DEV_DRV_DEFAULT) 554 if (op_mode == QLC_DEV_DRV_DEFAULT)
555 priv_level = QLCNIC_MGMT_FUNC; 555 priv_level = QLCNIC_MGMT_FUNC;
556 else 556 else
557 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw.pci_func); 557 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
558 558
559 if (priv_level == QLCNIC_NON_PRIV_FUNC) { 559 if (priv_level == QLCNIC_NON_PRIV_FUNC) {
560 adapter->op_mode = QLCNIC_NON_PRIV_FUNC; 560 adapter->op_mode = QLCNIC_NON_PRIV_FUNC;
@@ -593,13 +593,14 @@ qlcnic_setup_pci_map(struct qlcnic_adapter *adapter)
593 593
594 dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20)); 594 dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20));
595 595
596 adapter->ahw.pci_base0 = mem_ptr0; 596 adapter->ahw->pci_base0 = mem_ptr0;
597 adapter->ahw.pci_len0 = pci_len0; 597 adapter->ahw->pci_len0 = pci_len0;
598 598
599 qlcnic_check_vf(adapter); 599 qlcnic_check_vf(adapter);
600 600
601 adapter->ahw.ocm_win_crb = qlcnic_get_ioaddr(adapter, 601 adapter->ahw->ocm_win_crb = qlcnic_get_ioaddr(adapter,
602 QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG(adapter->ahw.pci_func))); 602 QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG(
603 adapter->ahw->pci_func)));
603 604
604 return 0; 605 return 0;
605} 606}
@@ -641,7 +642,7 @@ qlcnic_check_options(struct qlcnic_adapter *adapter)
641 642
642 dev_info(&pdev->dev, "firmware v%d.%d.%d\n", 643 dev_info(&pdev->dev, "firmware v%d.%d.%d\n",
643 fw_major, fw_minor, fw_build); 644 fw_major, fw_minor, fw_build);
644 if (adapter->ahw.port_type == QLCNIC_XGBE) { 645 if (adapter->ahw->port_type == QLCNIC_XGBE) {
645 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { 646 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) {
646 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF; 647 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF;
647 adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF; 648 adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF;
@@ -653,7 +654,7 @@ qlcnic_check_options(struct qlcnic_adapter *adapter)
653 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; 654 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
654 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; 655 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
655 656
656 } else if (adapter->ahw.port_type == QLCNIC_GBE) { 657 } else if (adapter->ahw->port_type == QLCNIC_GBE) {
657 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; 658 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G;
658 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; 659 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
659 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; 660 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
@@ -661,7 +662,6 @@ qlcnic_check_options(struct qlcnic_adapter *adapter)
661 } 662 }
662 663
663 adapter->msix_supported = !!use_msi_x; 664 adapter->msix_supported = !!use_msi_x;
664 adapter->rss_supported = !!use_msi_x;
665 665
666 adapter->num_txd = MAX_CMD_DESCRIPTORS; 666 adapter->num_txd = MAX_CMD_DESCRIPTORS;
667 667
@@ -674,7 +674,7 @@ qlcnic_initialize_nic(struct qlcnic_adapter *adapter)
674 int err; 674 int err;
675 struct qlcnic_info nic_info; 675 struct qlcnic_info nic_info;
676 676
677 err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw.pci_func); 677 err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func);
678 if (err) 678 if (err)
679 return err; 679 return err;
680 680
@@ -736,7 +736,7 @@ qlcnic_set_eswitch_port_config(struct qlcnic_adapter *adapter)
736 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) 736 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
737 return 0; 737 return 0;
738 738
739 esw_cfg.pci_func = adapter->ahw.pci_func; 739 esw_cfg.pci_func = adapter->ahw->pci_func;
740 if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg)) 740 if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg))
741 return -EIO; 741 return -EIO;
742 qlcnic_set_vlan_config(adapter, &esw_cfg); 742 qlcnic_set_vlan_config(adapter, &esw_cfg);
@@ -793,14 +793,14 @@ qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter)
793 if (adapter->flags & QLCNIC_ADAPTER_INITIALIZED) 793 if (adapter->flags & QLCNIC_ADAPTER_INITIALIZED)
794 return 0; 794 return 0;
795 795
796 priv_op = adapter->ahw.pci_base0 + QLCNIC_DRV_OP_MODE; 796 priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
797 op_mode = readl(priv_op); 797 op_mode = readl(priv_op);
798 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw.pci_func); 798 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
799 799
800 if (op_mode == QLC_DEV_DRV_DEFAULT) 800 if (op_mode == QLC_DEV_DRV_DEFAULT)
801 priv_level = QLCNIC_MGMT_FUNC; 801 priv_level = QLCNIC_MGMT_FUNC;
802 else 802 else
803 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw.pci_func); 803 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
804 804
805 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { 805 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) {
806 if (priv_level == QLCNIC_MGMT_FUNC) { 806 if (priv_level == QLCNIC_MGMT_FUNC) {
@@ -1040,7 +1040,7 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter)
1040 1040
1041 unsigned long flags = 0; 1041 unsigned long flags = 0;
1042 struct net_device *netdev = adapter->netdev; 1042 struct net_device *netdev = adapter->netdev;
1043 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 1043 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1044 1044
1045 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { 1045 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1046 handler = qlcnic_tmp_intr; 1046 handler = qlcnic_tmp_intr;
@@ -1077,7 +1077,7 @@ qlcnic_free_irq(struct qlcnic_adapter *adapter)
1077 int ring; 1077 int ring;
1078 struct qlcnic_host_sds_ring *sds_ring; 1078 struct qlcnic_host_sds_ring *sds_ring;
1079 1079
1080 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 1080 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1081 1081
1082 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 1082 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1083 sds_ring = &recv_ctx->sds_rings[ring]; 1083 sds_ring = &recv_ctx->sds_rings[ring];
@@ -1117,14 +1117,14 @@ __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev)
1117 return -EIO; 1117 return -EIO;
1118 1118
1119 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 1119 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1120 rds_ring = &adapter->recv_ctx.rds_rings[ring]; 1120 rds_ring = &adapter->recv_ctx->rds_rings[ring];
1121 qlcnic_post_rx_buffers(adapter, ring, rds_ring); 1121 qlcnic_post_rx_buffers(adapter, rds_ring);
1122 } 1122 }
1123 1123
1124 qlcnic_set_multi(netdev); 1124 qlcnic_set_multi(netdev);
1125 qlcnic_fw_cmd_set_mtu(adapter, netdev->mtu); 1125 qlcnic_fw_cmd_set_mtu(adapter, netdev->mtu);
1126 1126
1127 adapter->ahw.linkup = 0; 1127 adapter->ahw->linkup = 0;
1128 1128
1129 if (adapter->max_sds_rings > 1) 1129 if (adapter->max_sds_rings > 1)
1130 qlcnic_config_rss(adapter, 1); 1130 qlcnic_config_rss(adapter, 1);
@@ -1274,7 +1274,7 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings)
1274 clear_bit(__QLCNIC_DEV_UP, &adapter->state); 1274 clear_bit(__QLCNIC_DEV_UP, &adapter->state);
1275 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { 1275 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1276 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 1276 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1277 sds_ring = &adapter->recv_ctx.sds_rings[ring]; 1277 sds_ring = &adapter->recv_ctx->sds_rings[ring];
1278 qlcnic_disable_int(sds_ring); 1278 qlcnic_disable_int(sds_ring);
1279 } 1279 }
1280 } 1280 }
@@ -1295,6 +1295,39 @@ out:
1295 netif_device_attach(netdev); 1295 netif_device_attach(netdev);
1296} 1296}
1297 1297
1298static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
1299{
1300 int err = 0;
1301 adapter->ahw = kzalloc(sizeof(struct qlcnic_hardware_context),
1302 GFP_KERNEL);
1303 if (!adapter->ahw) {
1304 dev_err(&adapter->pdev->dev,
1305 "Failed to allocate recv ctx resources for adapter\n");
1306 err = -ENOMEM;
1307 goto err_out;
1308 }
1309 adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context),
1310 GFP_KERNEL);
1311 if (!adapter->recv_ctx) {
1312 dev_err(&adapter->pdev->dev,
1313 "Failed to allocate recv ctx resources for adapter\n");
1314 kfree(adapter->ahw);
1315 adapter->ahw = NULL;
1316 err = -ENOMEM;
1317 }
1318err_out:
1319 return err;
1320}
1321
1322static void qlcnic_free_adapter_resources(struct qlcnic_adapter *adapter)
1323{
1324 kfree(adapter->recv_ctx);
1325 adapter->recv_ctx = NULL;
1326
1327 kfree(adapter->ahw);
1328 adapter->ahw = NULL;
1329}
1330
1298int qlcnic_diag_alloc_res(struct net_device *netdev, int test) 1331int qlcnic_diag_alloc_res(struct net_device *netdev, int test)
1299{ 1332{
1300 struct qlcnic_adapter *adapter = netdev_priv(netdev); 1333 struct qlcnic_adapter *adapter = netdev_priv(netdev);
@@ -1327,13 +1360,13 @@ int qlcnic_diag_alloc_res(struct net_device *netdev, int test)
1327 } 1360 }
1328 1361
1329 for (ring = 0; ring < adapter->max_rds_rings; ring++) { 1362 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1330 rds_ring = &adapter->recv_ctx.rds_rings[ring]; 1363 rds_ring = &adapter->recv_ctx->rds_rings[ring];
1331 qlcnic_post_rx_buffers(adapter, ring, rds_ring); 1364 qlcnic_post_rx_buffers(adapter, rds_ring);
1332 } 1365 }
1333 1366
1334 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { 1367 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1335 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 1368 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1336 sds_ring = &adapter->recv_ctx.sds_rings[ring]; 1369 sds_ring = &adapter->recv_ctx->sds_rings[ring];
1337 qlcnic_enable_int(sds_ring); 1370 qlcnic_enable_int(sds_ring);
1338 } 1371 }
1339 } 1372 }
@@ -1503,23 +1536,26 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1503 adapter = netdev_priv(netdev); 1536 adapter = netdev_priv(netdev);
1504 adapter->netdev = netdev; 1537 adapter->netdev = netdev;
1505 adapter->pdev = pdev; 1538 adapter->pdev = pdev;
1506 adapter->dev_rst_time = jiffies;
1507 1539
1540 if (qlcnic_alloc_adapter_resources(adapter))
1541 goto err_out_free_netdev;
1542
1543 adapter->dev_rst_time = jiffies;
1508 revision_id = pdev->revision; 1544 revision_id = pdev->revision;
1509 adapter->ahw.revision_id = revision_id; 1545 adapter->ahw->revision_id = revision_id;
1510 1546
1511 rwlock_init(&adapter->ahw.crb_lock); 1547 rwlock_init(&adapter->ahw->crb_lock);
1512 mutex_init(&adapter->ahw.mem_lock); 1548 mutex_init(&adapter->ahw->mem_lock);
1513 1549
1514 spin_lock_init(&adapter->tx_clean_lock); 1550 spin_lock_init(&adapter->tx_clean_lock);
1515 INIT_LIST_HEAD(&adapter->mac_list); 1551 INIT_LIST_HEAD(&adapter->mac_list);
1516 1552
1517 err = qlcnic_setup_pci_map(adapter); 1553 err = qlcnic_setup_pci_map(adapter);
1518 if (err) 1554 if (err)
1519 goto err_out_free_netdev; 1555 goto err_out_free_hw;
1520 1556
1521 /* This will be reset for mezz cards */ 1557 /* This will be reset for mezz cards */
1522 adapter->portnum = adapter->ahw.pci_func; 1558 adapter->portnum = adapter->ahw->pci_func;
1523 1559
1524 err = qlcnic_get_board_info(adapter); 1560 err = qlcnic_get_board_info(adapter);
1525 if (err) { 1561 if (err) {
@@ -1547,7 +1583,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1547 1583
1548 pr_info("%s: %s Board Chip rev 0x%x\n", 1584 pr_info("%s: %s Board Chip rev 0x%x\n",
1549 module_name(THIS_MODULE), 1585 module_name(THIS_MODULE),
1550 brd_name, adapter->ahw.revision_id); 1586 brd_name, adapter->ahw->revision_id);
1551 } 1587 }
1552 1588
1553 qlcnic_clear_stats(adapter); 1589 qlcnic_clear_stats(adapter);
@@ -1562,7 +1598,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1562 1598
1563 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY); 1599 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
1564 1600
1565 switch (adapter->ahw.port_type) { 1601 switch (adapter->ahw->port_type) {
1566 case QLCNIC_GBE: 1602 case QLCNIC_GBE:
1567 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", 1603 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n",
1568 adapter->netdev->name); 1604 adapter->netdev->name);
@@ -1587,6 +1623,9 @@ err_out_decr_ref:
1587err_out_iounmap: 1623err_out_iounmap:
1588 qlcnic_cleanup_pci_map(adapter); 1624 qlcnic_cleanup_pci_map(adapter);
1589 1625
1626err_out_free_hw:
1627 qlcnic_free_adapter_resources(adapter);
1628
1590err_out_free_netdev: 1629err_out_free_netdev:
1591 free_netdev(netdev); 1630 free_netdev(netdev);
1592 1631
@@ -1640,6 +1679,7 @@ static void __devexit qlcnic_remove(struct pci_dev *pdev)
1640 pci_disable_device(pdev); 1679 pci_disable_device(pdev);
1641 pci_set_drvdata(pdev, NULL); 1680 pci_set_drvdata(pdev, NULL);
1642 1681
1682 qlcnic_free_adapter_resources(adapter);
1643 free_netdev(netdev); 1683 free_netdev(netdev);
1644} 1684}
1645static int __qlcnic_shutdown(struct pci_dev *pdev) 1685static int __qlcnic_shutdown(struct pci_dev *pdev)
@@ -2248,16 +2288,16 @@ void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup)
2248{ 2288{
2249 struct net_device *netdev = adapter->netdev; 2289 struct net_device *netdev = adapter->netdev;
2250 2290
2251 if (adapter->ahw.linkup && !linkup) { 2291 if (adapter->ahw->linkup && !linkup) {
2252 netdev_info(netdev, "NIC Link is down\n"); 2292 netdev_info(netdev, "NIC Link is down\n");
2253 adapter->ahw.linkup = 0; 2293 adapter->ahw->linkup = 0;
2254 if (netif_running(netdev)) { 2294 if (netif_running(netdev)) {
2255 netif_carrier_off(netdev); 2295 netif_carrier_off(netdev);
2256 netif_stop_queue(netdev); 2296 netif_stop_queue(netdev);
2257 } 2297 }
2258 } else if (!adapter->ahw.linkup && linkup) { 2298 } else if (!adapter->ahw->linkup && linkup) {
2259 netdev_info(netdev, "NIC Link is up\n"); 2299 netdev_info(netdev, "NIC Link is up\n");
2260 adapter->ahw.linkup = 1; 2300 adapter->ahw->linkup = 1;
2261 if (netif_running(netdev)) { 2301 if (netif_running(netdev)) {
2262 netif_carrier_on(netdev); 2302 netif_carrier_on(netdev);
2263 netif_wake_queue(netdev); 2303 netif_wake_queue(netdev);
@@ -2493,7 +2533,7 @@ static void qlcnic_poll_controller(struct net_device *netdev)
2493 int ring; 2533 int ring;
2494 struct qlcnic_host_sds_ring *sds_ring; 2534 struct qlcnic_host_sds_ring *sds_ring;
2495 struct qlcnic_adapter *adapter = netdev_priv(netdev); 2535 struct qlcnic_adapter *adapter = netdev_priv(netdev);
2496 struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx; 2536 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
2497 2537
2498 disable_irq(adapter->irq); 2538 disable_irq(adapter->irq);
2499 for (ring = 0; ring < adapter->max_sds_rings; ring++) { 2539 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
@@ -3503,7 +3543,7 @@ validate_esw_config(struct qlcnic_adapter *adapter,
3503 u8 pci_func; 3543 u8 pci_func;
3504 int i; 3544 int i;
3505 3545
3506 op_mode = readl(adapter->ahw.pci_base0 + QLCNIC_DRV_OP_MODE); 3546 op_mode = readl(adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE);
3507 3547
3508 for (i = 0; i < count; i++) { 3548 for (i = 0; i < count; i++) {
3509 pci_func = esw_cfg[i].pci_func; 3549 pci_func = esw_cfg[i].pci_func;
@@ -3569,13 +3609,13 @@ qlcnic_sysfs_write_esw_config(struct file *file, struct kobject *kobj,
3569 if (qlcnic_config_switch_port(adapter, &esw_cfg[i])) 3609 if (qlcnic_config_switch_port(adapter, &esw_cfg[i]))
3570 return QL_STATUS_INVALID_PARAM; 3610 return QL_STATUS_INVALID_PARAM;
3571 3611
3572 if (adapter->ahw.pci_func != esw_cfg[i].pci_func) 3612 if (adapter->ahw->pci_func != esw_cfg[i].pci_func)
3573 continue; 3613 continue;
3574 3614
3575 op_mode = esw_cfg[i].op_mode; 3615 op_mode = esw_cfg[i].op_mode;
3576 qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i]); 3616 qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i]);
3577 esw_cfg[i].op_mode = op_mode; 3617 esw_cfg[i].op_mode = op_mode;
3578 esw_cfg[i].pci_func = adapter->ahw.pci_func; 3618 esw_cfg[i].pci_func = adapter->ahw->pci_func;
3579 3619
3580 switch (esw_cfg[i].op_mode) { 3620 switch (esw_cfg[i].op_mode) {
3581 case QLCNIC_PORT_DEFAULTS: 3621 case QLCNIC_PORT_DEFAULTS: