11 #include <linux/module.h>
12 #include <linux/kernel.h>
13 #include <linux/types.h>
15 #include <linux/pci.h>
16 #include <linux/netdevice.h>
20 #include <linux/tcp.h>
24 #include <linux/ethtool.h>
25 #include <linux/mii.h>
31 #include <asm/byteorder.h>
32 #include <linux/bitops.h>
33 #include <linux/if_vlan.h>
37 #define _QLCNIC_LINUX_MAJOR 5
38 #define _QLCNIC_LINUX_MINOR 0
39 #define _QLCNIC_LINUX_SUBVERSION 29
40 #define QLCNIC_LINUX_VERSIONID "5.0.29"
41 #define QLCNIC_DRV_IDC_VER 0x01
42 #define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\
43 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
45 #define QLCNIC_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c))
46 #define _major(v) (((v) >> 24) & 0xff)
47 #define _minor(v) (((v) >> 16) & 0xff)
48 #define _build(v) ((v) & 0xffff)
55 #define QLCNIC_DECODE_VERSION(v) \
56 QLCNIC_VERSION_CODE(((v) & 0xff), (((v) >> 8) & 0xff), ((v) >> 16))
58 #define QLCNIC_MIN_FW_VERSION QLCNIC_VERSION_CODE(4, 4, 2)
59 #define QLCNIC_NUM_FLASH_SECTORS (64)
60 #define QLCNIC_FLASH_SECTOR_SIZE (64 * 1024)
61 #define QLCNIC_FLASH_TOTAL_SIZE (QLCNIC_NUM_FLASH_SECTORS \
62 * QLCNIC_FLASH_SECTOR_SIZE)
64 #define RCV_DESC_RINGSIZE(rds_ring) \
65 (sizeof(struct rcv_desc) * (rds_ring)->num_desc)
66 #define RCV_BUFF_RINGSIZE(rds_ring) \
67 (sizeof(struct qlcnic_rx_buffer) * rds_ring->num_desc)
68 #define STATUS_DESC_RINGSIZE(sds_ring) \
69 (sizeof(struct status_desc) * (sds_ring)->num_desc)
70 #define TX_BUFF_RINGSIZE(tx_ring) \
71 (sizeof(struct qlcnic_cmd_buffer) * tx_ring->num_desc)
72 #define TX_DESC_RINGSIZE(tx_ring) \
73 (sizeof(struct cmd_desc_type0) * tx_ring->num_desc)
75 #define QLCNIC_P3P_A0 0x50
76 #define QLCNIC_P3P_C0 0x58
78 #define QLCNIC_IS_REVISION_P3P(REVISION) (REVISION >= QLCNIC_P3P_A0)
80 #define FIRST_PAGE_GROUP_START 0
81 #define FIRST_PAGE_GROUP_END 0x100000
83 #define P3P_MAX_MTU (9600)
84 #define P3P_MIN_MTU (68)
85 #define QLCNIC_MAX_ETHERHDR 32
87 #define QLCNIC_P3P_RX_BUF_MAX_LEN (QLCNIC_MAX_ETHERHDR + ETH_DATA_LEN)
88 #define QLCNIC_P3P_RX_JUMBO_BUF_MAX_LEN (QLCNIC_MAX_ETHERHDR + P3P_MAX_MTU)
89 #define QLCNIC_CT_DEFAULT_RX_BUF_LEN 2048
90 #define QLCNIC_LRO_BUFFER_EXTRA 2048
93 #define TX_ETHER_PKT 0x01
94 #define TX_TCP_PKT 0x02
95 #define TX_UDP_PKT 0x03
96 #define TX_IP_PKT 0x04
97 #define TX_TCP_LSO 0x05
98 #define TX_TCP_LSO6 0x06
99 #define TX_TCPV6_PKT 0x0b
100 #define TX_UDPV6_PKT 0x0c
103 #define QLCNIC_MAX_FRAGS_PER_TX 14
104 #define MAX_TSO_HEADER_DESC 2
105 #define MGMT_CMD_DESC_RESV 4
106 #define TX_STOP_THRESH ((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \
107 + MGMT_CMD_DESC_RESV)
108 #define QLCNIC_MAX_TX_TIMEOUTS 2
114 #define PHAN_INITIALIZE_FAILED 0xffff
115 #define PHAN_INITIALIZE_COMPLETE 0xff01
118 #define PHAN_INITIALIZE_ACK 0xf00f
119 #define PHAN_PEG_RCV_INITIALIZED 0xff01
121 #define NUM_RCV_DESC_RINGS 3
123 #define RCV_RING_NORMAL 0
124 #define RCV_RING_JUMBO 1
126 #define MIN_CMD_DESCRIPTORS 64
127 #define MIN_RCV_DESCRIPTORS 64
128 #define MIN_JUMBO_DESCRIPTORS 32
130 #define MAX_CMD_DESCRIPTORS 1024
131 #define MAX_RCV_DESCRIPTORS_1G 4096
132 #define MAX_RCV_DESCRIPTORS_10G 8192
133 #define MAX_RCV_DESCRIPTORS_VF 2048
134 #define MAX_JUMBO_RCV_DESCRIPTORS_1G 512
135 #define MAX_JUMBO_RCV_DESCRIPTORS_10G 1024
137 #define DEFAULT_RCV_DESCRIPTORS_1G 2048
138 #define DEFAULT_RCV_DESCRIPTORS_10G 4096
139 #define DEFAULT_RCV_DESCRIPTORS_VF 1024
140 #define MAX_RDS_RINGS 2
142 #define get_next_index(index, length) \
143 (((index) + 1) & ((length) - 1))
151 #define FLAGS_VLAN_TAGGED 0x10
152 #define FLAGS_VLAN_OOB 0x40
154 #define qlcnic_set_tx_vlan_tci(cmd_desc, v) \
155 (cmd_desc)->vlan_TCI = cpu_to_le16(v);
156 #define qlcnic_set_cmd_desc_port(cmd_desc, var) \
157 ((cmd_desc)->port_ctxid |= ((var) & 0x0F))
158 #define qlcnic_set_cmd_desc_ctxid(cmd_desc, var) \
159 ((cmd_desc)->port_ctxid |= ((var) << 4 & 0xF0))
161 #define qlcnic_set_tx_port(_desc, _port) \
162 ((_desc)->port_ctxid = ((_port) & 0xf) | (((_port) << 4) & 0xf0))
164 #define qlcnic_set_tx_flags_opcode(_desc, _flags, _opcode) \
165 ((_desc)->flags_opcode |= \
166 cpu_to_le16(((_flags) & 0x7f) | (((_opcode) & 0x3f) << 7)))
168 #define qlcnic_set_tx_frags_len(_desc, _frags, _len) \
169 ((_desc)->nfrags__length = \
170 cpu_to_le32(((_frags) & 0xff) | (((_len) & 0xffffff) << 8)))
207 #define QLCNIC_SYN_OFFLOAD 0x03
208 #define QLCNIC_RXPKT_DESC 0x04
209 #define QLCNIC_OLD_RXPKT_DESC 0x3f
210 #define QLCNIC_RESPONSE_DESC 0x05
211 #define QLCNIC_LRO_DESC 0x12
214 #define STATUS_CKSUM_LOOP 0
215 #define STATUS_CKSUM_OK 2
218 #define STATUS_OWNER_HOST (0x1ULL << 56)
219 #define STATUS_OWNER_PHANTOM (0x2ULL << 56)
226 #define qlcnic_get_sts_port(sts_data) \
228 #define qlcnic_get_sts_status(sts_data) \
229 (((sts_data) >> 4) & 0x0F)
230 #define qlcnic_get_sts_type(sts_data) \
231 (((sts_data) >> 8) & 0x0F)
232 #define qlcnic_get_sts_totallength(sts_data) \
233 (((sts_data) >> 12) & 0xFFFF)
234 #define qlcnic_get_sts_refhandle(sts_data) \
235 (((sts_data) >> 28) & 0xFFFF)
236 #define qlcnic_get_sts_prot(sts_data) \
237 (((sts_data) >> 44) & 0x0F)
238 #define qlcnic_get_sts_pkt_offset(sts_data) \
239 (((sts_data) >> 48) & 0x1F)
240 #define qlcnic_get_sts_desc_cnt(sts_data) \
241 (((sts_data) >> 53) & 0x7)
242 #define qlcnic_get_sts_opcode(sts_data) \
243 (((sts_data) >> 58) & 0x03F)
245 #define qlcnic_get_lro_sts_refhandle(sts_data) \
246 ((sts_data) & 0x0FFFF)
247 #define qlcnic_get_lro_sts_length(sts_data) \
248 (((sts_data) >> 16) & 0x0FFFF)
249 #define qlcnic_get_lro_sts_l2_hdr_offset(sts_data) \
250 (((sts_data) >> 32) & 0x0FF)
251 #define qlcnic_get_lro_sts_l4_hdr_offset(sts_data) \
252 (((sts_data) >> 40) & 0x0FF)
253 #define qlcnic_get_lro_sts_timestamp(sts_data) \
254 (((sts_data) >> 48) & 0x1)
255 #define qlcnic_get_lro_sts_type(sts_data) \
256 (((sts_data) >> 49) & 0x7)
257 #define qlcnic_get_lro_sts_push_flag(sts_data) \
258 (((sts_data) >> 52) & 0x1)
259 #define qlcnic_get_lro_sts_seq_number(sts_data) \
260 ((sts_data) & 0x0FFFFFFFF)
261 #define qlcnic_get_lro_sts_mss(sts_data1) \
262 ((sts_data1 >> 32) & 0x0FFFF)
270 #define QLCNIC_UNI_FW_MIN_SIZE 0xc8000
271 #define QLCNIC_UNI_DIR_SECT_PRODUCT_TBL 0x0
272 #define QLCNIC_UNI_DIR_SECT_BOOTLD 0x6
273 #define QLCNIC_UNI_DIR_SECT_FW 0x7
276 #define QLCNIC_UNI_CHIP_REV_OFF 10
277 #define QLCNIC_UNI_FLAGS_OFF 11
278 #define QLCNIC_UNI_BIOS_VERSION_OFF 12
279 #define QLCNIC_UNI_BOOTLD_IDX_OFF 27
280 #define QLCNIC_UNI_FIRMWARE_IDX_OFF 29
296 #define QLCNIC_FLT_LOCATION 0x3F1000
297 #define QLCNIC_B0_FW_IMAGE_REGION 0x74
298 #define QLCNIC_C0_FW_IMAGE_REGION 0x97
299 #define QLCNIC_BOOTLD_REGION 0X72
318 #define QLCNIC_BDINFO_MAGIC 0x12345678
320 #define QLCNIC_BRDTYPE_P3P_REF_QG 0x0021
321 #define QLCNIC_BRDTYPE_P3P_HMEZ 0x0022
322 #define QLCNIC_BRDTYPE_P3P_10G_CX4_LP 0x0023
323 #define QLCNIC_BRDTYPE_P3P_4_GB 0x0024
324 #define QLCNIC_BRDTYPE_P3P_IMEZ 0x0025
325 #define QLCNIC_BRDTYPE_P3P_10G_SFP_PLUS 0x0026
326 #define QLCNIC_BRDTYPE_P3P_10000_BASE_T 0x0027
327 #define QLCNIC_BRDTYPE_P3P_XG_LOM 0x0028
328 #define QLCNIC_BRDTYPE_P3P_4_GB_MM 0x0029
329 #define QLCNIC_BRDTYPE_P3P_10G_SFP_CT 0x002a
330 #define QLCNIC_BRDTYPE_P3P_10G_SFP_QT 0x002b
331 #define QLCNIC_BRDTYPE_P3P_10G_CX4 0x0031
332 #define QLCNIC_BRDTYPE_P3P_10G_XFP 0x0032
333 #define QLCNIC_BRDTYPE_P3P_10G_TP 0x0080
335 #define QLCNIC_MSIX_TABLE_OFFSET 0x44
338 #define QLCNIC_BRDCFG_START 0x4000
339 #define QLCNIC_BOOTLD_START 0x10000
340 #define QLCNIC_IMAGE_START 0x43000
341 #define QLCNIC_USER_START 0x3E8000
343 #define QLCNIC_FW_VERSION_OFFSET (QLCNIC_USER_START+0x408)
344 #define QLCNIC_FW_SIZE_OFFSET (QLCNIC_USER_START+0x40c)
345 #define QLCNIC_FW_SERIAL_NUM_OFFSET (QLCNIC_USER_START+0x81c)
346 #define QLCNIC_BIOS_VERSION_OFFSET (QLCNIC_USER_START+0x83c)
348 #define QLCNIC_BRDTYPE_OFFSET (QLCNIC_BRDCFG_START+0x8)
349 #define QLCNIC_FW_MAGIC_OFFSET (QLCNIC_BRDCFG_START+0x128)
351 #define QLCNIC_FW_MIN_SIZE (0x3fffff)
352 #define QLCNIC_UNIFIED_ROMIMAGE 0
353 #define QLCNIC_FLASH_ROMIMAGE 1
354 #define QLCNIC_UNKNOWN_ROMIMAGE 0xff
356 #define QLCNIC_UNIFIED_ROMIMAGE_NAME "phanfw.bin"
357 #define QLCNIC_FLASH_ROMIMAGE_NAME "flash"
362 #define MAX_STATUS_HANDLE (64)
374 #define QLCNIC_BUFFER_FREE 0
375 #define QLCNIC_BUFFER_BUSY 1
396 #define QLCNIC_GBE 0x01
397 #define QLCNIC_XGBE 0x02
403 #define QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US 3
404 #define QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS 256
406 #define QLCNIC_INTR_DEFAULT 0x04
407 #define QLCNIC_CONFIG_INTR_COALESCE 3
554 #define QLCNIC_OS_CRB_RETRY_COUNT 4000
555 #define QLCNIC_CDRP_SIGNATURE_MAKE(pcifn, version) \
556 (((pcifn) & 0xff) | (((version) & 0xff) << 8) | (0xcafe << 16))
558 #define QLCNIC_CDRP_CMD_BIT 0x80000000
564 #define QLCNIC_CDRP_FORM_RSP(rsp) (rsp)
565 #define QLCNIC_CDRP_IS_RSP(rsp) (((rsp) & QLCNIC_CDRP_CMD_BIT) == 0)
567 #define QLCNIC_CDRP_RSP_OK 0x00000001
568 #define QLCNIC_CDRP_RSP_FAIL 0x00000002
569 #define QLCNIC_CDRP_RSP_TIMEOUT 0x00000003
575 #define QLCNIC_CDRP_FORM_CMD(cmd) (QLCNIC_CDRP_CMD_BIT | (cmd))
576 #define QLCNIC_CDRP_IS_CMD(cmd) (((cmd) & QLCNIC_CDRP_CMD_BIT) != 0)
578 #define QLCNIC_CDRP_CMD_SUBMIT_CAPABILITIES 0x00000001
579 #define QLCNIC_CDRP_CMD_READ_MAX_RDS_PER_CTX 0x00000002
580 #define QLCNIC_CDRP_CMD_READ_MAX_SDS_PER_CTX 0x00000003
581 #define QLCNIC_CDRP_CMD_READ_MAX_RULES_PER_CTX 0x00000004
582 #define QLCNIC_CDRP_CMD_READ_MAX_RX_CTX 0x00000005
583 #define QLCNIC_CDRP_CMD_READ_MAX_TX_CTX 0x00000006
584 #define QLCNIC_CDRP_CMD_CREATE_RX_CTX 0x00000007
585 #define QLCNIC_CDRP_CMD_DESTROY_RX_CTX 0x00000008
586 #define QLCNIC_CDRP_CMD_CREATE_TX_CTX 0x00000009
587 #define QLCNIC_CDRP_CMD_DESTROY_TX_CTX 0x0000000a
588 #define QLCNIC_CDRP_CMD_INTRPT_TEST 0x00000011
589 #define QLCNIC_CDRP_CMD_SET_MTU 0x00000012
590 #define QLCNIC_CDRP_CMD_READ_PHY 0x00000013
591 #define QLCNIC_CDRP_CMD_WRITE_PHY 0x00000014
592 #define QLCNIC_CDRP_CMD_READ_HW_REG 0x00000015
593 #define QLCNIC_CDRP_CMD_GET_FLOW_CTL 0x00000016
594 #define QLCNIC_CDRP_CMD_SET_FLOW_CTL 0x00000017
595 #define QLCNIC_CDRP_CMD_READ_MAX_MTU 0x00000018
596 #define QLCNIC_CDRP_CMD_READ_MAX_LRO 0x00000019
597 #define QLCNIC_CDRP_CMD_MAC_ADDRESS 0x0000001f
599 #define QLCNIC_CDRP_CMD_GET_PCI_INFO 0x00000020
600 #define QLCNIC_CDRP_CMD_GET_NIC_INFO 0x00000021
601 #define QLCNIC_CDRP_CMD_SET_NIC_INFO 0x00000022
602 #define QLCNIC_CDRP_CMD_GET_ESWITCH_CAPABILITY 0x00000024
603 #define QLCNIC_CDRP_CMD_TOGGLE_ESWITCH 0x00000025
604 #define QLCNIC_CDRP_CMD_GET_ESWITCH_STATUS 0x00000026
605 #define QLCNIC_CDRP_CMD_SET_PORTMIRRORING 0x00000027
606 #define QLCNIC_CDRP_CMD_CONFIGURE_ESWITCH 0x00000028
607 #define QLCNIC_CDRP_CMD_GET_ESWITCH_PORT_CONFIG 0x00000029
608 #define QLCNIC_CDRP_CMD_GET_ESWITCH_STATS 0x0000002a
609 #define QLCNIC_CDRP_CMD_CONFIG_PORT 0x0000002E
610 #define QLCNIC_CDRP_CMD_TEMP_SIZE 0x0000002f
611 #define QLCNIC_CDRP_CMD_GET_TEMP_HDR 0x00000030
612 #define QLCNIC_CDRP_CMD_GET_MAC_STATS 0x00000037
614 #define QLCNIC_RCODE_SUCCESS 0
615 #define QLCNIC_RCODE_INVALID_ARGS 6
616 #define QLCNIC_RCODE_NOT_SUPPORTED 9
617 #define QLCNIC_RCODE_NOT_PERMITTED 10
618 #define QLCNIC_RCODE_NOT_IMPL 15
619 #define QLCNIC_RCODE_INVALID 16
620 #define QLCNIC_RCODE_TIMEOUT 17
621 #define QLCNIC_DESTROY_CTX_RESET 0
626 #define QLCNIC_CAP0_LEGACY_CONTEXT (1)
627 #define QLCNIC_CAP0_LEGACY_MN (1 << 2)
628 #define QLCNIC_CAP0_LSO (1 << 6)
629 #define QLCNIC_CAP0_JUMBO_CONTIGUOUS (1 << 7)
630 #define QLCNIC_CAP0_LRO_CONTIGUOUS (1 << 8)
631 #define QLCNIC_CAP0_VALIDOFF (1 << 11)
632 #define QLCNIC_CAP0_LRO_MSS (1 << 21)
637 #define QLCNIC_HOST_CTX_STATE_FREED 0
638 #define QLCNIC_HOST_CTX_STATE_ACTIVE 2
708 #define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \
709 (sizeof(HOSTRQ_RX) + \
710 (rds_rings)*(sizeof(struct qlcnic_hostrq_rds_ring)) + \
711 (sds_rings)*(sizeof(struct qlcnic_hostrq_sds_ring)))
713 #define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) \
714 (sizeof(CARDRSP_RX) + \
715 (rds_rings)*(sizeof(struct qlcnic_cardrsp_rds_ring)) + \
716 (sds_rings)*(sizeof(struct qlcnic_cardrsp_sds_ring)))
757 #define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) (sizeof(HOSTRQ_TX))
758 #define SIZEOF_CARDRSP_TX(CARDRSP_TX) (sizeof(CARDRSP_TX))
762 #define QLCNIC_HOST_RDS_CRB_MODE_UNIQUE 0
763 #define QLCNIC_HOST_RDS_CRB_MODE_SHARED 1
764 #define QLCNIC_HOST_RDS_CRB_MODE_CUSTOM 2
765 #define QLCNIC_HOST_RDS_CRB_MODE_MAX 3
767 #define QLCNIC_HOST_INT_CRB_MODE_UNIQUE 0
768 #define QLCNIC_HOST_INT_CRB_MODE_SHARED 1
769 #define QLCNIC_HOST_INT_CRB_MODE_NORX 2
770 #define QLCNIC_HOST_INT_CRB_MODE_NOTX 3
771 #define QLCNIC_HOST_INT_CRB_MODE_NORXTX 4
776 #define MC_COUNT_P3P 38
778 #define QLCNIC_MAC_NOOP 0
779 #define QLCNIC_MAC_ADD 1
780 #define QLCNIC_MAC_DEL 2
781 #define QLCNIC_MAC_VLAN_ADD 3
782 #define QLCNIC_MAC_VLAN_DEL 4
789 #define QLCNIC_HOST_REQUEST 0x13
790 #define QLCNIC_REQUEST 0x14
792 #define QLCNIC_MAC_EVENT 0x1
794 #define QLCNIC_IP_UP 2
795 #define QLCNIC_IP_DOWN 3
797 #define QLCNIC_ILB_MODE 0x1
798 #define QLCNIC_ELB_MODE 0x2
800 #define QLCNIC_LINKEVENT 0x1
801 #define QLCNIC_LB_RESPONSE 0x2
802 #define QLCNIC_IS_LB_CONFIGURED(VAL) \
803 (VAL == (QLCNIC_LINKEVENT | QLCNIC_LB_RESPONSE))
808 #define QLCNIC_H2C_OPCODE_CONFIG_RSS 0x1
809 #define QLCNIC_H2C_OPCODE_CONFIG_INTR_COALESCE 0x3
810 #define QLCNIC_H2C_OPCODE_CONFIG_LED 0x4
811 #define QLCNIC_H2C_OPCODE_LRO_REQUEST 0x7
812 #define QLCNIC_H2C_OPCODE_SET_MAC_RECEIVE_MODE 0xc
813 #define QLCNIC_H2C_OPCODE_CONFIG_IPADDR 0x12
815 #define QLCNIC_H2C_OPCODE_GET_LINKEVENT 0x15
816 #define QLCNIC_H2C_OPCODE_CONFIG_BRIDGING 0x17
817 #define QLCNIC_H2C_OPCODE_CONFIG_HW_LRO 0x18
818 #define QLCNIC_H2C_OPCODE_CONFIG_LOOPBACK 0x13
824 #define QLCNIC_C2H_OPCODE_CONFIG_LOOPBACK 0x8f
825 #define QLCNIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE 141
827 #define VPORT_MISS_MODE_DROP 0
828 #define VPORT_MISS_MODE_ACCEPT_ALL 1
829 #define VPORT_MISS_MODE_ACCEPT_MULTI 2
831 #define QLCNIC_LRO_REQUEST_CLEANUP 4
834 #define QLCNIC_FW_CAPABILITY_TSO BIT_1
835 #define QLCNIC_FW_CAPABILITY_BDG BIT_8
836 #define QLCNIC_FW_CAPABILITY_FVLANTX BIT_9
837 #define QLCNIC_FW_CAPABILITY_HW_LRO BIT_10
838 #define QLCNIC_FW_CAPABILITY_MULTI_LOOPBACK BIT_27
839 #define QLCNIC_FW_CAPABILITY_MORE_CAPS BIT_31
841 #define QLCNIC_FW_CAPABILITY_2_LRO_MAX_TCP_SEG BIT_2
844 #define LINKEVENT_MODULE_NOT_PRESENT 1
845 #define LINKEVENT_MODULE_OPTICAL_UNKNOWN 2
846 #define LINKEVENT_MODULE_OPTICAL_SRLR 3
847 #define LINKEVENT_MODULE_OPTICAL_LRM 4
848 #define LINKEVENT_MODULE_OPTICAL_SFP_1G 5
849 #define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE 6
850 #define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN 7
851 #define LINKEVENT_MODULE_TWINAX 8
853 #define LINKSPEED_10GBPS 10000
854 #define LINKSPEED_1GBPS 1000
855 #define LINKSPEED_100MBPS 100
856 #define LINKSPEED_10MBPS 10
858 #define LINKSPEED_ENCODED_10MBPS 0
859 #define LINKSPEED_ENCODED_100MBPS 1
860 #define LINKSPEED_ENCODED_1GBPS 2
862 #define LINKEVENT_AUTONEG_DISABLED 0
863 #define LINKEVENT_AUTONEG_ENABLED 1
865 #define LINKEVENT_HALF_DUPLEX 0
866 #define LINKEVENT_FULL_DUPLEX 1
868 #define LINKEVENT_LINKSPEED_MBPS 0
869 #define LINKEVENT_LINKSPEED_ENCODED 1
881 #define qlcnic_get_nic_msg_opcode(msg_hdr) \
882 ((msg_hdr >> 32) & 0xFF)
916 #define QLCNIC_MSI_ENABLED 0x02
917 #define QLCNIC_MSIX_ENABLED 0x04
918 #define QLCNIC_LRO_ENABLED 0x08
919 #define QLCNIC_LRO_DISABLED 0x00
920 #define QLCNIC_BRIDGE_ENABLED 0X10
921 #define QLCNIC_DIAG_ENABLED 0x20
922 #define QLCNIC_ESWITCH_ENABLED 0x40
923 #define QLCNIC_ADAPTER_INITIALIZED 0x80
924 #define QLCNIC_TAGGING_ENABLED 0x100
925 #define QLCNIC_MACSPOOF 0x200
926 #define QLCNIC_MAC_OVERRIDE_DISABLED 0x400
927 #define QLCNIC_PROMISC_DISABLED 0x800
928 #define QLCNIC_NEED_FLR 0x1000
929 #define QLCNIC_FW_RESET_OWNER 0x2000
930 #define QLCNIC_FW_HANG 0x4000
931 #define QLCNIC_FW_LRO_MSS_CAP 0x8000
932 #define QLCNIC_IS_MSI_FAMILY(adapter) \
933 ((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))
935 #define QLCNIC_DEF_NUM_STS_DESC_RINGS 4
936 #define QLCNIC_MSIX_TBL_SPACE 8192
937 #define QLCNIC_PCI_REG_MSIX_TBL 0x44
938 #define QLCNIC_MSIX_TBL_PGSIZE 4096
940 #define QLCNIC_NETDEV_WEIGHT 128
941 #define QLCNIC_ADAPTER_UP_MAGIC 777
943 #define __QLCNIC_FW_ATTACHED 0
944 #define __QLCNIC_DEV_UP 1
945 #define __QLCNIC_RESETTING 2
946 #define __QLCNIC_START_FW 4
947 #define __QLCNIC_AER 5
948 #define __QLCNIC_DIAG_RES_ALLOC 6
949 #define __QLCNIC_LED_ENABLE 7
951 #define QLCNIC_INTERRUPT_TEST 1
952 #define QLCNIC_LOOPBACK_TEST 2
953 #define QLCNIC_LED_TEST 3
955 #define QLCNIC_FILTER_AGE 80
956 #define QLCNIC_READD_AGE 20
957 #define QLCNIC_LB_MAX_FILTERS 64
960 #define QLCNIC_FW_NOT_RESPOND 51
961 #define QLCNIC_TEST_IN_PROGRESS 52
962 #define QLCNIC_UNDEFINED_ERROR 53
963 #define QLCNIC_LB_CABLE_NOT_CONN 54
1130 #define QLCNIC_SWITCH_ENABLE BIT_1
1131 #define QLCNIC_SWITCH_VLAN_FILTERING BIT_2
1132 #define QLCNIC_SWITCH_PROMISC_MODE BIT_3
1133 #define QLCNIC_SWITCH_PORT_MIRRORING BIT_4
1138 #define QL_STATUS_INVALID_PARAM -1
1141 #define MAX_VLAN_ID 4095
1142 #define MIN_VLAN_ID 2
1143 #define DEFAULT_MAC_LEARN 1
1145 #define IS_VALID_VLAN(vlan) (vlan >= MIN_VLAN_ID && vlan < MAX_VLAN_ID)
1146 #define IS_VALID_BW(bw) (bw <= MAX_BW)
1190 #define QLCNIC_STATS_VERSION 1
1191 #define QLCNIC_STATS_PORT 1
1192 #define QLCNIC_STATS_ESWITCH 2
1193 #define QLCNIC_QUERY_RX_COUNTER 0
1194 #define QLCNIC_QUERY_TX_COUNTER 1
1195 #define QLCNIC_STATS_NOT_AVAIL 0xffffffffffffffffULL
1196 #define QLCNIC_FILL_STATS(VAL1) \
1197 (((VAL1) == QLCNIC_STATS_NOT_AVAIL) ? 0 : VAL1)
1198 #define QLCNIC_MAC_STATS 1
1199 #define QLCNIC_ESW_STATS 2
1201 #define QLCNIC_ADD_ESW_STATS(VAL1, VAL2)\
1203 if (((VAL1) == QLCNIC_STATS_NOT_AVAIL) && \
1204 ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1206 else if (((VAL1) != QLCNIC_STATS_NOT_AVAIL) && \
1207 ((VAL2) != QLCNIC_STATS_NOT_AVAIL)) \
1394 #define QLCNIC_DUMP_WCRB BIT_0
1395 #define QLCNIC_DUMP_RWCRB BIT_1
1396 #define QLCNIC_DUMP_ANDCRB BIT_2
1397 #define QLCNIC_DUMP_ORCRB BIT_3
1398 #define QLCNIC_DUMP_POLLCRB BIT_4
1399 #define QLCNIC_DUMP_RD_SAVE BIT_5
1400 #define QLCNIC_DUMP_WRT_SAVED BIT_6
1401 #define QLCNIC_DUMP_MOD_SAVE_ST BIT_7
1402 #define QLCNIC_DUMP_SKIP BIT_7
1404 #define QLCNIC_DUMP_MASK_MIN 3
1405 #define QLCNIC_DUMP_MASK_DEF 0x1f
1406 #define QLCNIC_DUMP_MASK_MAX 0xff
1407 #define QLCNIC_FORCE_FW_DUMP_KEY 0xdeadfeed
1408 #define QLCNIC_ENABLE_FW_DUMP 0xaddfeed
1409 #define QLCNIC_DISABLE_FW_DUMP 0xbadfeed
1410 #define QLCNIC_FORCE_FW_RESET 0xdeaddead
1411 #define QLCNIC_SET_QUIESCENT 0xadd00010
1412 #define QLCNIC_RESET_QUIESCENT 0xadd00020
1442 #define ADDR_IN_RANGE(addr, low, high) \
1443 (((addr) < (high)) && ((addr) >= (low)))
1445 #define QLCRD32(adapter, off) \
1446 (qlcnic_hw_read_wx_2M(adapter, off))
1447 #define QLCWR32(adapter, off, val) \
1448 (qlcnic_hw_write_wx_2M(adapter, off, val))
1453 #define qlcnic_rom_lock(a) \
1454 qlcnic_pcie_sem_lock((a), 2, QLCNIC_ROM_LOCK_ID)
1455 #define qlcnic_rom_unlock(a) \
1456 qlcnic_pcie_sem_unlock((a), 2)
1457 #define qlcnic_phy_lock(a) \
1458 qlcnic_pcie_sem_lock((a), 3, QLCNIC_PHY_LOCK_ID)
1459 #define qlcnic_phy_unlock(a) \
1460 qlcnic_pcie_sem_unlock((a), 3)
1461 #define qlcnic_api_lock(a) \
1462 qlcnic_pcie_sem_lock((a), 5, 0)
1463 #define qlcnic_api_unlock(a) \
1464 qlcnic_pcie_sem_unlock((a), 5)
1465 #define qlcnic_sw_lock(a) \
1466 qlcnic_pcie_sem_lock((a), 6, 0)
1467 #define qlcnic_sw_unlock(a) \
1468 qlcnic_pcie_sem_unlock((a), 6)
1469 #define crb_win_lock(a) \
1470 qlcnic_pcie_sem_lock((a), 7, QLCNIC_CRB_WIN_LOCK_ID)
1471 #define crb_win_unlock(a) \
1472 qlcnic_pcie_sem_unlock((a), 7)
1474 #define __QLCNIC_MAX_LED_RATE 0xf
1475 #define __QLCNIC_MAX_LED_STATE 0x2
1578 #define QLCNIC_MAX_BOARD_NAME_LEN 100
1588 {0x1077, 0x8020, 0x1077, 0x203,
1589 "8200 Series Single Port 10GbE Converged Network Adapter "
1590 "(TCP/IP Networking)"},
1591 {0x1077, 0x8020, 0x1077, 0x207,
1592 "8200 Series Dual Port 10GbE Converged Network Adapter "
1593 "(TCP/IP Networking)"},
1594 {0x1077, 0x8020, 0x1077, 0x20b,
1595 "3200 Series Dual Port 10Gb Intelligent Ethernet Adapter"},
1596 {0x1077, 0x8020, 0x1077, 0x20c,
1597 "3200 Series Quad Port 1Gb Intelligent Ethernet Adapter"},
1598 {0x1077, 0x8020, 0x1077, 0x20f,
1599 "3200 Series Single Port 10Gb Intelligent Ethernet Adapter"},
1600 {0x1077, 0x8020, 0x103c, 0x3733,
1601 "NC523SFP 10Gb 2-port Server Adapter"},
1602 {0x1077, 0x8020, 0x103c, 0x3346,
1603 "CN1000Q Dual Port Converged Network Adapter"},
1604 {0x1077, 0x8020, 0x1077, 0x210,
1605 "QME8242-k 10GbE Dual Port Mezzanine Card"},
1606 {0x1077, 0x8020, 0x0, 0x0,
"cLOM8214 1/10GbE Controller"},
1609 #define NUM_SUPPORTED_BOARDS ARRAY_SIZE(qlcnic_boards)
1629 #define QLCDB(adapter, lvl, _fmt, _args...) do { \
1630 if (NETIF_MSG_##lvl & adapter->msg_enable) \
1631 printk(KERN_INFO "%s: %s: " _fmt, \
1632 dev_name(&adapter->pdev->dev), \
1633 __func__, ##_args); \