diff options
Diffstat (limited to 'drivers/net/netxen/netxen_nic.h')
-rw-r--r-- | drivers/net/netxen/netxen_nic.h | 575 |
1 files changed, 504 insertions, 71 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h index da4c4fb97064..8e736614407d 100644 --- a/drivers/net/netxen/netxen_nic.h +++ b/drivers/net/netxen/netxen_nic.h | |||
@@ -54,6 +54,7 @@ | |||
54 | 54 | ||
55 | #include <linux/mm.h> | 55 | #include <linux/mm.h> |
56 | #include <linux/mman.h> | 56 | #include <linux/mman.h> |
57 | #include <linux/vmalloc.h> | ||
57 | 58 | ||
58 | #include <asm/system.h> | 59 | #include <asm/system.h> |
59 | #include <asm/io.h> | 60 | #include <asm/io.h> |
@@ -63,10 +64,12 @@ | |||
63 | 64 | ||
64 | #include "netxen_nic_hw.h" | 65 | #include "netxen_nic_hw.h" |
65 | 66 | ||
66 | #define _NETXEN_NIC_LINUX_MAJOR 3 | 67 | #define _NETXEN_NIC_LINUX_MAJOR 4 |
67 | #define _NETXEN_NIC_LINUX_MINOR 4 | 68 | #define _NETXEN_NIC_LINUX_MINOR 0 |
68 | #define _NETXEN_NIC_LINUX_SUBVERSION 18 | 69 | #define _NETXEN_NIC_LINUX_SUBVERSION 0 |
69 | #define NETXEN_NIC_LINUX_VERSIONID "3.4.18" | 70 | #define NETXEN_NIC_LINUX_VERSIONID "4.0.0" |
71 | |||
72 | #define NETXEN_VERSION_CODE(a, b, c) (((a) << 16) + ((b) << 8) + (c)) | ||
70 | 73 | ||
71 | #define NETXEN_NUM_FLASH_SECTORS (64) | 74 | #define NETXEN_NUM_FLASH_SECTORS (64) |
72 | #define NETXEN_FLASH_SECTOR_SIZE (64 * 1024) | 75 | #define NETXEN_FLASH_SECTOR_SIZE (64 * 1024) |
@@ -84,7 +87,7 @@ | |||
84 | #define TX_RINGSIZE \ | 87 | #define TX_RINGSIZE \ |
85 | (sizeof(struct netxen_cmd_buffer) * adapter->max_tx_desc_count) | 88 | (sizeof(struct netxen_cmd_buffer) * adapter->max_tx_desc_count) |
86 | #define RCV_BUFFSIZE \ | 89 | #define RCV_BUFFSIZE \ |
87 | (sizeof(struct netxen_rx_buffer) * rcv_desc->max_rx_desc_count) | 90 | (sizeof(struct netxen_rx_buffer) * rds_ring->max_rx_desc_count) |
88 | #define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a))) | 91 | #define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a))) |
89 | 92 | ||
90 | #define NETXEN_NETDEV_STATUS 0x1 | 93 | #define NETXEN_NETDEV_STATUS 0x1 |
@@ -111,6 +114,13 @@ | |||
111 | 114 | ||
112 | #define NX_P2_C0 0x24 | 115 | #define NX_P2_C0 0x24 |
113 | #define NX_P2_C1 0x25 | 116 | #define NX_P2_C1 0x25 |
117 | #define NX_P3_A0 0x30 | ||
118 | #define NX_P3_A2 0x30 | ||
119 | #define NX_P3_B0 0x40 | ||
120 | #define NX_P3_B1 0x41 | ||
121 | |||
122 | #define NX_IS_REVISION_P2(REVISION) (REVISION <= NX_P2_C1) | ||
123 | #define NX_IS_REVISION_P3(REVISION) (REVISION >= NX_P3_A0) | ||
114 | 124 | ||
115 | #define FIRST_PAGE_GROUP_START 0 | 125 | #define FIRST_PAGE_GROUP_START 0 |
116 | #define FIRST_PAGE_GROUP_END 0x100000 | 126 | #define FIRST_PAGE_GROUP_END 0x100000 |
@@ -125,6 +135,16 @@ | |||
125 | #define SECOND_PAGE_GROUP_SIZE SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START | 135 | #define SECOND_PAGE_GROUP_SIZE SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START |
126 | #define THIRD_PAGE_GROUP_SIZE THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START | 136 | #define THIRD_PAGE_GROUP_SIZE THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START |
127 | 137 | ||
138 | #define P2_MAX_MTU (8000) | ||
139 | #define P3_MAX_MTU (9600) | ||
140 | #define NX_ETHERMTU 1500 | ||
141 | #define NX_MAX_ETHERHDR 32 /* This contains some padding */ | ||
142 | |||
143 | #define NX_RX_NORMAL_BUF_MAX_LEN (NX_MAX_ETHERHDR + NX_ETHERMTU) | ||
144 | #define NX_P2_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P2_MAX_MTU) | ||
145 | #define NX_P3_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P3_MAX_MTU) | ||
146 | #define NX_CT_DEFAULT_RX_BUF_LEN 2048 | ||
147 | |||
128 | #define MAX_RX_BUFFER_LENGTH 1760 | 148 | #define MAX_RX_BUFFER_LENGTH 1760 |
129 | #define MAX_RX_JUMBO_BUFFER_LENGTH 8062 | 149 | #define MAX_RX_JUMBO_BUFFER_LENGTH 8062 |
130 | #define MAX_RX_LRO_BUFFER_LENGTH ((48*1024)-512) | 150 | #define MAX_RX_LRO_BUFFER_LENGTH ((48*1024)-512) |
@@ -132,7 +152,6 @@ | |||
132 | #define RX_JUMBO_DMA_MAP_LEN \ | 152 | #define RX_JUMBO_DMA_MAP_LEN \ |
133 | (MAX_RX_JUMBO_BUFFER_LENGTH - 2) | 153 | (MAX_RX_JUMBO_BUFFER_LENGTH - 2) |
134 | #define RX_LRO_DMA_MAP_LEN (MAX_RX_LRO_BUFFER_LENGTH - 2) | 154 | #define RX_LRO_DMA_MAP_LEN (MAX_RX_LRO_BUFFER_LENGTH - 2) |
135 | #define NETXEN_ROM_ROUNDUP 0x80000000ULL | ||
136 | 155 | ||
137 | /* | 156 | /* |
138 | * Maximum number of ring contexts | 157 | * Maximum number of ring contexts |
@@ -140,16 +159,16 @@ | |||
140 | #define MAX_RING_CTX 1 | 159 | #define MAX_RING_CTX 1 |
141 | 160 | ||
142 | /* Opcodes to be used with the commands */ | 161 | /* Opcodes to be used with the commands */ |
143 | enum { | 162 | #define TX_ETHER_PKT 0x01 |
144 | TX_ETHER_PKT = 0x01, | 163 | #define TX_TCP_PKT 0x02 |
145 | /* The following opcodes are for IP checksum */ | 164 | #define TX_UDP_PKT 0x03 |
146 | TX_TCP_PKT, | 165 | #define TX_IP_PKT 0x04 |
147 | TX_UDP_PKT, | 166 | #define TX_TCP_LSO 0x05 |
148 | TX_IP_PKT, | 167 | #define TX_TCP_LSO6 0x06 |
149 | TX_TCP_LSO, | 168 | #define TX_IPSEC 0x07 |
150 | TX_IPSEC, | 169 | #define TX_IPSEC_CMD 0x0a |
151 | TX_IPSEC_CMD | 170 | #define TX_TCPV6_PKT 0x0b |
152 | }; | 171 | #define TX_UDPV6_PKT 0x0c |
153 | 172 | ||
154 | /* The following opcodes are for internal consumption. */ | 173 | /* The following opcodes are for internal consumption. */ |
155 | #define NETXEN_CONTROL_OP 0x10 | 174 | #define NETXEN_CONTROL_OP 0x10 |
@@ -191,6 +210,7 @@ enum { | |||
191 | #define MAX_RCV_DESCRIPTORS 16384 | 210 | #define MAX_RCV_DESCRIPTORS 16384 |
192 | #define MAX_CMD_DESCRIPTORS_HOST (MAX_CMD_DESCRIPTORS / 4) | 211 | #define MAX_CMD_DESCRIPTORS_HOST (MAX_CMD_DESCRIPTORS / 4) |
193 | #define MAX_RCV_DESCRIPTORS_1G (MAX_RCV_DESCRIPTORS / 4) | 212 | #define MAX_RCV_DESCRIPTORS_1G (MAX_RCV_DESCRIPTORS / 4) |
213 | #define MAX_RCV_DESCRIPTORS_10G 8192 | ||
194 | #define MAX_JUMBO_RCV_DESCRIPTORS 1024 | 214 | #define MAX_JUMBO_RCV_DESCRIPTORS 1024 |
195 | #define MAX_LRO_RCV_DESCRIPTORS 64 | 215 | #define MAX_LRO_RCV_DESCRIPTORS 64 |
196 | #define MAX_RCVSTATUS_DESCRIPTORS MAX_RCV_DESCRIPTORS | 216 | #define MAX_RCVSTATUS_DESCRIPTORS MAX_RCV_DESCRIPTORS |
@@ -219,8 +239,6 @@ enum { | |||
219 | #define MPORT_MULTI_FUNCTION_MODE 0x2222 | 239 | #define MPORT_MULTI_FUNCTION_MODE 0x2222 |
220 | 240 | ||
221 | #include "netxen_nic_phan_reg.h" | 241 | #include "netxen_nic_phan_reg.h" |
222 | extern unsigned long long netxen_dma_mask; | ||
223 | extern unsigned long last_schedule_time; | ||
224 | 242 | ||
225 | /* | 243 | /* |
226 | * NetXen host-peg signal message structure | 244 | * NetXen host-peg signal message structure |
@@ -289,7 +307,7 @@ struct netxen_ring_ctx { | |||
289 | #define netxen_set_cmd_desc_port(cmd_desc, var) \ | 307 | #define netxen_set_cmd_desc_port(cmd_desc, var) \ |
290 | ((cmd_desc)->port_ctxid |= ((var) & 0x0F)) | 308 | ((cmd_desc)->port_ctxid |= ((var) & 0x0F)) |
291 | #define netxen_set_cmd_desc_ctxid(cmd_desc, var) \ | 309 | #define netxen_set_cmd_desc_ctxid(cmd_desc, var) \ |
292 | ((cmd_desc)->port_ctxid |= ((var) & 0xF0)) | 310 | ((cmd_desc)->port_ctxid |= ((var) << 4 & 0xF0)) |
293 | 311 | ||
294 | #define netxen_set_cmd_desc_flags(cmd_desc, val) \ | 312 | #define netxen_set_cmd_desc_flags(cmd_desc, val) \ |
295 | (cmd_desc)->flags_opcode = ((cmd_desc)->flags_opcode & \ | 313 | (cmd_desc)->flags_opcode = ((cmd_desc)->flags_opcode & \ |
@@ -377,8 +395,8 @@ struct rcv_desc { | |||
377 | }; | 395 | }; |
378 | 396 | ||
379 | /* opcode field in status_desc */ | 397 | /* opcode field in status_desc */ |
380 | #define RCV_NIC_PKT (0xA) | 398 | #define NETXEN_NIC_RXPKT_DESC 0x04 |
381 | #define STATUS_NIC_PKT ((RCV_NIC_PKT) << 12) | 399 | #define NETXEN_OLD_RXPKT_DESC 0x3f |
382 | 400 | ||
383 | /* for status field in status_desc */ | 401 | /* for status field in status_desc */ |
384 | #define STATUS_NEED_CKSUM (1) | 402 | #define STATUS_NEED_CKSUM (1) |
@@ -410,6 +428,8 @@ struct rcv_desc { | |||
410 | (((sts_data) >> 28) & 0xFFFF) | 428 | (((sts_data) >> 28) & 0xFFFF) |
411 | #define netxen_get_sts_prot(sts_data) \ | 429 | #define netxen_get_sts_prot(sts_data) \ |
412 | (((sts_data) >> 44) & 0x0F) | 430 | (((sts_data) >> 44) & 0x0F) |
431 | #define netxen_get_sts_pkt_offset(sts_data) \ | ||
432 | (((sts_data) >> 48) & 0x1F) | ||
413 | #define netxen_get_sts_opcode(sts_data) \ | 433 | #define netxen_get_sts_opcode(sts_data) \ |
414 | (((sts_data) >> 58) & 0x03F) | 434 | (((sts_data) >> 58) & 0x03F) |
415 | 435 | ||
@@ -424,17 +444,30 @@ struct rcv_desc { | |||
424 | 444 | ||
425 | struct status_desc { | 445 | struct status_desc { |
426 | /* Bit pattern: 0-3 port, 4-7 status, 8-11 type, 12-27 total_length | 446 | /* Bit pattern: 0-3 port, 4-7 status, 8-11 type, 12-27 total_length |
427 | 28-43 reference_handle, 44-47 protocol, 48-52 unused | 447 | 28-43 reference_handle, 44-47 protocol, 48-52 pkt_offset |
428 | 53-55 desc_cnt, 56-57 owner, 58-63 opcode | 448 | 53-55 desc_cnt, 56-57 owner, 58-63 opcode |
429 | */ | 449 | */ |
430 | __le64 status_desc_data; | 450 | __le64 status_desc_data; |
431 | __le32 hash_value; | 451 | union { |
432 | u8 hash_type; | 452 | struct { |
433 | u8 msg_type; | 453 | __le32 hash_value; |
434 | u8 unused; | 454 | u8 hash_type; |
435 | /* Bit pattern: 0-6 lro_count indicates frag sequence, | 455 | u8 msg_type; |
436 | 7 last_frag indicates last frag */ | 456 | u8 unused; |
437 | u8 lro; | 457 | union { |
458 | /* Bit pattern: 0-6 lro_count indicates frag | ||
459 | * sequence, 7 last_frag indicates last frag | ||
460 | */ | ||
461 | u8 lro; | ||
462 | |||
463 | /* chained buffers */ | ||
464 | u8 nr_frags; | ||
465 | }; | ||
466 | }; | ||
467 | struct { | ||
468 | __le16 frag_handles[4]; | ||
469 | }; | ||
470 | }; | ||
438 | } __attribute__ ((aligned(16))); | 471 | } __attribute__ ((aligned(16))); |
439 | 472 | ||
440 | enum { | 473 | enum { |
@@ -464,7 +497,20 @@ typedef enum { | |||
464 | 497 | ||
465 | NETXEN_BRDTYPE_P2_SB31_10G_IMEZ = 0x000d, | 498 | NETXEN_BRDTYPE_P2_SB31_10G_IMEZ = 0x000d, |
466 | NETXEN_BRDTYPE_P2_SB31_10G_HMEZ = 0x000e, | 499 | NETXEN_BRDTYPE_P2_SB31_10G_HMEZ = 0x000e, |
467 | NETXEN_BRDTYPE_P2_SB31_10G_CX4 = 0x000f | 500 | NETXEN_BRDTYPE_P2_SB31_10G_CX4 = 0x000f, |
501 | |||
502 | NETXEN_BRDTYPE_P3_REF_QG = 0x0021, | ||
503 | NETXEN_BRDTYPE_P3_HMEZ = 0x0022, | ||
504 | NETXEN_BRDTYPE_P3_10G_CX4_LP = 0x0023, | ||
505 | NETXEN_BRDTYPE_P3_4_GB = 0x0024, | ||
506 | NETXEN_BRDTYPE_P3_IMEZ = 0x0025, | ||
507 | NETXEN_BRDTYPE_P3_10G_SFP_PLUS = 0x0026, | ||
508 | NETXEN_BRDTYPE_P3_10000_BASE_T = 0x0027, | ||
509 | NETXEN_BRDTYPE_P3_XG_LOM = 0x0028, | ||
510 | NETXEN_BRDTYPE_P3_4_GB_MM = 0x0029, | ||
511 | NETXEN_BRDTYPE_P3_10G_CX4 = 0x0031, | ||
512 | NETXEN_BRDTYPE_P3_10G_XFP = 0x0032 | ||
513 | |||
468 | } netxen_brdtype_t; | 514 | } netxen_brdtype_t; |
469 | 515 | ||
470 | typedef enum { | 516 | typedef enum { |
@@ -747,6 +793,7 @@ struct netxen_cmd_buffer { | |||
747 | 793 | ||
748 | /* In rx_buffer, we do not need multiple fragments as is a single buffer */ | 794 | /* In rx_buffer, we do not need multiple fragments as is a single buffer */ |
749 | struct netxen_rx_buffer { | 795 | struct netxen_rx_buffer { |
796 | struct list_head list; | ||
750 | struct sk_buff *skb; | 797 | struct sk_buff *skb; |
751 | u64 dma; | 798 | u64 dma; |
752 | u16 ref_handle; | 799 | u16 ref_handle; |
@@ -765,7 +812,6 @@ struct netxen_rx_buffer { | |||
765 | * contains interrupt info as well shared hardware info. | 812 | * contains interrupt info as well shared hardware info. |
766 | */ | 813 | */ |
767 | struct netxen_hardware_context { | 814 | struct netxen_hardware_context { |
768 | struct pci_dev *pdev; | ||
769 | void __iomem *pci_base0; | 815 | void __iomem *pci_base0; |
770 | void __iomem *pci_base1; | 816 | void __iomem *pci_base1; |
771 | void __iomem *pci_base2; | 817 | void __iomem *pci_base2; |
@@ -773,15 +819,20 @@ struct netxen_hardware_context { | |||
773 | unsigned long first_page_group_start; | 819 | unsigned long first_page_group_start; |
774 | void __iomem *db_base; | 820 | void __iomem *db_base; |
775 | unsigned long db_len; | 821 | unsigned long db_len; |
822 | unsigned long pci_len0; | ||
823 | |||
824 | u8 cut_through; | ||
825 | int qdr_sn_window; | ||
826 | int ddr_mn_window; | ||
827 | unsigned long mn_win_crb; | ||
828 | unsigned long ms_win_crb; | ||
776 | 829 | ||
777 | u8 revision_id; | 830 | u8 revision_id; |
778 | u16 board_type; | 831 | u16 board_type; |
779 | struct netxen_board_info boardcfg; | 832 | struct netxen_board_info boardcfg; |
780 | u32 xg_linkup; | 833 | u32 linkup; |
781 | u32 qg_linksup; | ||
782 | /* Address of cmd ring in Phantom */ | 834 | /* Address of cmd ring in Phantom */ |
783 | struct cmd_desc_type0 *cmd_desc_head; | 835 | struct cmd_desc_type0 *cmd_desc_head; |
784 | struct pci_dev *cmd_desc_pdev; | ||
785 | dma_addr_t cmd_desc_phys_addr; | 836 | dma_addr_t cmd_desc_phys_addr; |
786 | struct netxen_adapter *adapter; | 837 | struct netxen_adapter *adapter; |
787 | int pci_func; | 838 | int pci_func; |
@@ -813,17 +864,17 @@ struct netxen_adapter_stats { | |||
813 | * Rcv Descriptor Context. One such per Rcv Descriptor. There may | 864 | * Rcv Descriptor Context. One such per Rcv Descriptor. There may |
814 | * be one Rcv Descriptor for normal packets, one for jumbo and may be others. | 865 | * be one Rcv Descriptor for normal packets, one for jumbo and may be others. |
815 | */ | 866 | */ |
816 | struct netxen_rcv_desc_ctx { | 867 | struct nx_host_rds_ring { |
817 | u32 flags; | 868 | u32 flags; |
818 | u32 producer; | 869 | u32 producer; |
819 | u32 rcv_pending; /* Num of bufs posted in phantom */ | ||
820 | dma_addr_t phys_addr; | 870 | dma_addr_t phys_addr; |
821 | struct pci_dev *phys_pdev; | 871 | u32 crb_rcv_producer; /* reg offset */ |
822 | struct rcv_desc *desc_head; /* address of rx ring in Phantom */ | 872 | struct rcv_desc *desc_head; /* address of rx ring in Phantom */ |
823 | u32 max_rx_desc_count; | 873 | u32 max_rx_desc_count; |
824 | u32 dma_size; | 874 | u32 dma_size; |
825 | u32 skb_size; | 875 | u32 skb_size; |
826 | struct netxen_rx_buffer *rx_buf_arr; /* rx buffers for receive */ | 876 | struct netxen_rx_buffer *rx_buf_arr; /* rx buffers for receive */ |
877 | struct list_head free_list; | ||
827 | int begin_alloc; | 878 | int begin_alloc; |
828 | }; | 879 | }; |
829 | 880 | ||
@@ -834,17 +885,319 @@ struct netxen_rcv_desc_ctx { | |||
834 | * present elsewhere. | 885 | * present elsewhere. |
835 | */ | 886 | */ |
836 | struct netxen_recv_context { | 887 | struct netxen_recv_context { |
837 | struct netxen_rcv_desc_ctx rcv_desc[NUM_RCV_DESC_RINGS]; | 888 | u32 state; |
838 | u32 status_rx_producer; | 889 | u16 context_id; |
890 | u16 virt_port; | ||
891 | |||
892 | struct nx_host_rds_ring rds_rings[NUM_RCV_DESC_RINGS]; | ||
839 | u32 status_rx_consumer; | 893 | u32 status_rx_consumer; |
894 | u32 crb_sts_consumer; /* reg offset */ | ||
840 | dma_addr_t rcv_status_desc_phys_addr; | 895 | dma_addr_t rcv_status_desc_phys_addr; |
841 | struct pci_dev *rcv_status_desc_pdev; | ||
842 | struct status_desc *rcv_status_desc_head; | 896 | struct status_desc *rcv_status_desc_head; |
843 | }; | 897 | }; |
844 | 898 | ||
845 | #define NETXEN_NIC_MSI_ENABLED 0x02 | 899 | /* New HW context creation */ |
846 | #define NETXEN_DMA_MASK 0xfffffffe | 900 | |
847 | #define NETXEN_DB_MAPSIZE_BYTES 0x1000 | 901 | #define NX_OS_CRB_RETRY_COUNT 4000 |
902 | #define NX_CDRP_SIGNATURE_MAKE(pcifn, version) \ | ||
903 | (((pcifn) & 0xff) | (((version) & 0xff) << 8) | (0xcafe << 16)) | ||
904 | |||
905 | #define NX_CDRP_CLEAR 0x00000000 | ||
906 | #define NX_CDRP_CMD_BIT 0x80000000 | ||
907 | |||
908 | /* | ||
909 | * All responses must have the NX_CDRP_CMD_BIT cleared | ||
910 | * in the crb NX_CDRP_CRB_OFFSET. | ||
911 | */ | ||
912 | #define NX_CDRP_FORM_RSP(rsp) (rsp) | ||
913 | #define NX_CDRP_IS_RSP(rsp) (((rsp) & NX_CDRP_CMD_BIT) == 0) | ||
914 | |||
915 | #define NX_CDRP_RSP_OK 0x00000001 | ||
916 | #define NX_CDRP_RSP_FAIL 0x00000002 | ||
917 | #define NX_CDRP_RSP_TIMEOUT 0x00000003 | ||
918 | |||
919 | /* | ||
920 | * All commands must have the NX_CDRP_CMD_BIT set in | ||
921 | * the crb NX_CDRP_CRB_OFFSET. | ||
922 | */ | ||
923 | #define NX_CDRP_FORM_CMD(cmd) (NX_CDRP_CMD_BIT | (cmd)) | ||
924 | #define NX_CDRP_IS_CMD(cmd) (((cmd) & NX_CDRP_CMD_BIT) != 0) | ||
925 | |||
926 | #define NX_CDRP_CMD_SUBMIT_CAPABILITIES 0x00000001 | ||
927 | #define NX_CDRP_CMD_READ_MAX_RDS_PER_CTX 0x00000002 | ||
928 | #define NX_CDRP_CMD_READ_MAX_SDS_PER_CTX 0x00000003 | ||
929 | #define NX_CDRP_CMD_READ_MAX_RULES_PER_CTX 0x00000004 | ||
930 | #define NX_CDRP_CMD_READ_MAX_RX_CTX 0x00000005 | ||
931 | #define NX_CDRP_CMD_READ_MAX_TX_CTX 0x00000006 | ||
932 | #define NX_CDRP_CMD_CREATE_RX_CTX 0x00000007 | ||
933 | #define NX_CDRP_CMD_DESTROY_RX_CTX 0x00000008 | ||
934 | #define NX_CDRP_CMD_CREATE_TX_CTX 0x00000009 | ||
935 | #define NX_CDRP_CMD_DESTROY_TX_CTX 0x0000000a | ||
936 | #define NX_CDRP_CMD_SETUP_STATISTICS 0x0000000e | ||
937 | #define NX_CDRP_CMD_GET_STATISTICS 0x0000000f | ||
938 | #define NX_CDRP_CMD_DELETE_STATISTICS 0x00000010 | ||
939 | #define NX_CDRP_CMD_SET_MTU 0x00000012 | ||
940 | #define NX_CDRP_CMD_MAX 0x00000013 | ||
941 | |||
942 | #define NX_RCODE_SUCCESS 0 | ||
943 | #define NX_RCODE_NO_HOST_MEM 1 | ||
944 | #define NX_RCODE_NO_HOST_RESOURCE 2 | ||
945 | #define NX_RCODE_NO_CARD_CRB 3 | ||
946 | #define NX_RCODE_NO_CARD_MEM 4 | ||
947 | #define NX_RCODE_NO_CARD_RESOURCE 5 | ||
948 | #define NX_RCODE_INVALID_ARGS 6 | ||
949 | #define NX_RCODE_INVALID_ACTION 7 | ||
950 | #define NX_RCODE_INVALID_STATE 8 | ||
951 | #define NX_RCODE_NOT_SUPPORTED 9 | ||
952 | #define NX_RCODE_NOT_PERMITTED 10 | ||
953 | #define NX_RCODE_NOT_READY 11 | ||
954 | #define NX_RCODE_DOES_NOT_EXIST 12 | ||
955 | #define NX_RCODE_ALREADY_EXISTS 13 | ||
956 | #define NX_RCODE_BAD_SIGNATURE 14 | ||
957 | #define NX_RCODE_CMD_NOT_IMPL 15 | ||
958 | #define NX_RCODE_CMD_INVALID 16 | ||
959 | #define NX_RCODE_TIMEOUT 17 | ||
960 | #define NX_RCODE_CMD_FAILED 18 | ||
961 | #define NX_RCODE_MAX_EXCEEDED 19 | ||
962 | #define NX_RCODE_MAX 20 | ||
963 | |||
964 | #define NX_DESTROY_CTX_RESET 0 | ||
965 | #define NX_DESTROY_CTX_D3_RESET 1 | ||
966 | #define NX_DESTROY_CTX_MAX 2 | ||
967 | |||
968 | /* | ||
969 | * Capabilities | ||
970 | */ | ||
971 | #define NX_CAP_BIT(class, bit) (1 << bit) | ||
972 | #define NX_CAP0_LEGACY_CONTEXT NX_CAP_BIT(0, 0) | ||
973 | #define NX_CAP0_MULTI_CONTEXT NX_CAP_BIT(0, 1) | ||
974 | #define NX_CAP0_LEGACY_MN NX_CAP_BIT(0, 2) | ||
975 | #define NX_CAP0_LEGACY_MS NX_CAP_BIT(0, 3) | ||
976 | #define NX_CAP0_CUT_THROUGH NX_CAP_BIT(0, 4) | ||
977 | #define NX_CAP0_LRO NX_CAP_BIT(0, 5) | ||
978 | #define NX_CAP0_LSO NX_CAP_BIT(0, 6) | ||
979 | #define NX_CAP0_JUMBO_CONTIGUOUS NX_CAP_BIT(0, 7) | ||
980 | #define NX_CAP0_LRO_CONTIGUOUS NX_CAP_BIT(0, 8) | ||
981 | |||
982 | /* | ||
983 | * Context state | ||
984 | */ | ||
985 | #define NX_HOST_CTX_STATE_FREED 0 | ||
986 | #define NX_HOST_CTX_STATE_ALLOCATED 1 | ||
987 | #define NX_HOST_CTX_STATE_ACTIVE 2 | ||
988 | #define NX_HOST_CTX_STATE_DISABLED 3 | ||
989 | #define NX_HOST_CTX_STATE_QUIESCED 4 | ||
990 | #define NX_HOST_CTX_STATE_MAX 5 | ||
991 | |||
992 | /* | ||
993 | * Rx context | ||
994 | */ | ||
995 | |||
996 | typedef struct { | ||
997 | u64 host_phys_addr; /* Ring base addr */ | ||
998 | u32 ring_size; /* Ring entries */ | ||
999 | u16 msi_index; | ||
1000 | u16 rsvd; /* Padding */ | ||
1001 | } nx_hostrq_sds_ring_t; | ||
1002 | |||
1003 | typedef struct { | ||
1004 | u64 host_phys_addr; /* Ring base addr */ | ||
1005 | u64 buff_size; /* Packet buffer size */ | ||
1006 | u32 ring_size; /* Ring entries */ | ||
1007 | u32 ring_kind; /* Class of ring */ | ||
1008 | } nx_hostrq_rds_ring_t; | ||
1009 | |||
1010 | typedef struct { | ||
1011 | u64 host_rsp_dma_addr; /* Response dma'd here */ | ||
1012 | u32 capabilities[4]; /* Flag bit vector */ | ||
1013 | u32 host_int_crb_mode; /* Interrupt crb usage */ | ||
1014 | u32 host_rds_crb_mode; /* RDS crb usage */ | ||
1015 | /* These ring offsets are relative to data[0] below */ | ||
1016 | u32 rds_ring_offset; /* Offset to RDS config */ | ||
1017 | u32 sds_ring_offset; /* Offset to SDS config */ | ||
1018 | u16 num_rds_rings; /* Count of RDS rings */ | ||
1019 | u16 num_sds_rings; /* Count of SDS rings */ | ||
1020 | u16 rsvd1; /* Padding */ | ||
1021 | u16 rsvd2; /* Padding */ | ||
1022 | u8 reserved[128]; /* reserve space for future expansion*/ | ||
1023 | /* MUST BE 64-bit aligned. | ||
1024 | The following is packed: | ||
1025 | - N hostrq_rds_rings | ||
1026 | - N hostrq_sds_rings */ | ||
1027 | char data[0]; | ||
1028 | } nx_hostrq_rx_ctx_t; | ||
1029 | |||
1030 | typedef struct { | ||
1031 | u32 host_producer_crb; /* Crb to use */ | ||
1032 | u32 rsvd1; /* Padding */ | ||
1033 | } nx_cardrsp_rds_ring_t; | ||
1034 | |||
1035 | typedef struct { | ||
1036 | u32 host_consumer_crb; /* Crb to use */ | ||
1037 | u32 interrupt_crb; /* Crb to use */ | ||
1038 | } nx_cardrsp_sds_ring_t; | ||
1039 | |||
1040 | typedef struct { | ||
1041 | /* These ring offsets are relative to data[0] below */ | ||
1042 | u32 rds_ring_offset; /* Offset to RDS config */ | ||
1043 | u32 sds_ring_offset; /* Offset to SDS config */ | ||
1044 | u32 host_ctx_state; /* Starting State */ | ||
1045 | u32 num_fn_per_port; /* How many PCI fn share the port */ | ||
1046 | u16 num_rds_rings; /* Count of RDS rings */ | ||
1047 | u16 num_sds_rings; /* Count of SDS rings */ | ||
1048 | u16 context_id; /* Handle for context */ | ||
1049 | u8 phys_port; /* Physical id of port */ | ||
1050 | u8 virt_port; /* Virtual/Logical id of port */ | ||
1051 | u8 reserved[128]; /* save space for future expansion */ | ||
1052 | /* MUST BE 64-bit aligned. | ||
1053 | The following is packed: | ||
1054 | - N cardrsp_rds_rings | ||
1055 | - N cardrs_sds_rings */ | ||
1056 | char data[0]; | ||
1057 | } nx_cardrsp_rx_ctx_t; | ||
1058 | |||
1059 | #define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \ | ||
1060 | (sizeof(HOSTRQ_RX) + \ | ||
1061 | (rds_rings)*(sizeof(nx_hostrq_rds_ring_t)) + \ | ||
1062 | (sds_rings)*(sizeof(nx_hostrq_sds_ring_t))) | ||
1063 | |||
1064 | #define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) \ | ||
1065 | (sizeof(CARDRSP_RX) + \ | ||
1066 | (rds_rings)*(sizeof(nx_cardrsp_rds_ring_t)) + \ | ||
1067 | (sds_rings)*(sizeof(nx_cardrsp_sds_ring_t))) | ||
1068 | |||
1069 | /* | ||
1070 | * Tx context | ||
1071 | */ | ||
1072 | |||
1073 | typedef struct { | ||
1074 | u64 host_phys_addr; /* Ring base addr */ | ||
1075 | u32 ring_size; /* Ring entries */ | ||
1076 | u32 rsvd; /* Padding */ | ||
1077 | } nx_hostrq_cds_ring_t; | ||
1078 | |||
1079 | typedef struct { | ||
1080 | u64 host_rsp_dma_addr; /* Response dma'd here */ | ||
1081 | u64 cmd_cons_dma_addr; /* */ | ||
1082 | u64 dummy_dma_addr; /* */ | ||
1083 | u32 capabilities[4]; /* Flag bit vector */ | ||
1084 | u32 host_int_crb_mode; /* Interrupt crb usage */ | ||
1085 | u32 rsvd1; /* Padding */ | ||
1086 | u16 rsvd2; /* Padding */ | ||
1087 | u16 interrupt_ctl; | ||
1088 | u16 msi_index; | ||
1089 | u16 rsvd3; /* Padding */ | ||
1090 | nx_hostrq_cds_ring_t cds_ring; /* Desc of cds ring */ | ||
1091 | u8 reserved[128]; /* future expansion */ | ||
1092 | } nx_hostrq_tx_ctx_t; | ||
1093 | |||
1094 | typedef struct { | ||
1095 | u32 host_producer_crb; /* Crb to use */ | ||
1096 | u32 interrupt_crb; /* Crb to use */ | ||
1097 | } nx_cardrsp_cds_ring_t; | ||
1098 | |||
1099 | typedef struct { | ||
1100 | u32 host_ctx_state; /* Starting state */ | ||
1101 | u16 context_id; /* Handle for context */ | ||
1102 | u8 phys_port; /* Physical id of port */ | ||
1103 | u8 virt_port; /* Virtual/Logical id of port */ | ||
1104 | nx_cardrsp_cds_ring_t cds_ring; /* Card cds settings */ | ||
1105 | u8 reserved[128]; /* future expansion */ | ||
1106 | } nx_cardrsp_tx_ctx_t; | ||
1107 | |||
1108 | #define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) (sizeof(HOSTRQ_TX)) | ||
1109 | #define SIZEOF_CARDRSP_TX(CARDRSP_TX) (sizeof(CARDRSP_TX)) | ||
1110 | |||
1111 | /* CRB */ | ||
1112 | |||
1113 | #define NX_HOST_RDS_CRB_MODE_UNIQUE 0 | ||
1114 | #define NX_HOST_RDS_CRB_MODE_SHARED 1 | ||
1115 | #define NX_HOST_RDS_CRB_MODE_CUSTOM 2 | ||
1116 | #define NX_HOST_RDS_CRB_MODE_MAX 3 | ||
1117 | |||
1118 | #define NX_HOST_INT_CRB_MODE_UNIQUE 0 | ||
1119 | #define NX_HOST_INT_CRB_MODE_SHARED 1 | ||
1120 | #define NX_HOST_INT_CRB_MODE_NORX 2 | ||
1121 | #define NX_HOST_INT_CRB_MODE_NOTX 3 | ||
1122 | #define NX_HOST_INT_CRB_MODE_NORXTX 4 | ||
1123 | |||
1124 | |||
1125 | /* MAC */ | ||
1126 | |||
1127 | #define MC_COUNT_P2 16 | ||
1128 | #define MC_COUNT_P3 38 | ||
1129 | |||
1130 | #define NETXEN_MAC_NOOP 0 | ||
1131 | #define NETXEN_MAC_ADD 1 | ||
1132 | #define NETXEN_MAC_DEL 2 | ||
1133 | |||
1134 | typedef struct nx_mac_list_s { | ||
1135 | struct nx_mac_list_s *next; | ||
1136 | uint8_t mac_addr[MAX_ADDR_LEN]; | ||
1137 | } nx_mac_list_t; | ||
1138 | |||
1139 | /* | ||
1140 | * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is | ||
1141 | * adjusted based on configured MTU. | ||
1142 | */ | ||
1143 | #define NETXEN_DEFAULT_INTR_COALESCE_RX_TIME_US 3 | ||
1144 | #define NETXEN_DEFAULT_INTR_COALESCE_RX_PACKETS 256 | ||
1145 | #define NETXEN_DEFAULT_INTR_COALESCE_TX_PACKETS 64 | ||
1146 | #define NETXEN_DEFAULT_INTR_COALESCE_TX_TIME_US 4 | ||
1147 | |||
1148 | #define NETXEN_NIC_INTR_DEFAULT 0x04 | ||
1149 | |||
1150 | typedef union { | ||
1151 | struct { | ||
1152 | uint16_t rx_packets; | ||
1153 | uint16_t rx_time_us; | ||
1154 | uint16_t tx_packets; | ||
1155 | uint16_t tx_time_us; | ||
1156 | } data; | ||
1157 | uint64_t word; | ||
1158 | } nx_nic_intr_coalesce_data_t; | ||
1159 | |||
1160 | typedef struct { | ||
1161 | uint16_t stats_time_us; | ||
1162 | uint16_t rate_sample_time; | ||
1163 | uint16_t flags; | ||
1164 | uint16_t rsvd_1; | ||
1165 | uint32_t low_threshold; | ||
1166 | uint32_t high_threshold; | ||
1167 | nx_nic_intr_coalesce_data_t normal; | ||
1168 | nx_nic_intr_coalesce_data_t low; | ||
1169 | nx_nic_intr_coalesce_data_t high; | ||
1170 | nx_nic_intr_coalesce_data_t irq; | ||
1171 | } nx_nic_intr_coalesce_t; | ||
1172 | |||
1173 | typedef struct { | ||
1174 | u64 qhdr; | ||
1175 | u64 req_hdr; | ||
1176 | u64 words[6]; | ||
1177 | } nx_nic_req_t; | ||
1178 | |||
1179 | typedef struct { | ||
1180 | u8 op; | ||
1181 | u8 tag; | ||
1182 | u8 mac_addr[6]; | ||
1183 | } nx_mac_req_t; | ||
1184 | |||
1185 | #define MAX_PENDING_DESC_BLOCK_SIZE 64 | ||
1186 | |||
1187 | #define NETXEN_NIC_MSI_ENABLED 0x02 | ||
1188 | #define NETXEN_NIC_MSIX_ENABLED 0x04 | ||
1189 | #define NETXEN_IS_MSI_FAMILY(adapter) \ | ||
1190 | ((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED)) | ||
1191 | |||
1192 | #define MSIX_ENTRIES_PER_ADAPTER 8 | ||
1193 | #define NETXEN_MSIX_TBL_SPACE 8192 | ||
1194 | #define NETXEN_PCI_REG_MSIX_TBL 0x44 | ||
1195 | |||
1196 | #define NETXEN_DB_MAPSIZE_BYTES 0x1000 | ||
1197 | |||
1198 | #define NETXEN_NETDEV_WEIGHT 120 | ||
1199 | #define NETXEN_ADAPTER_UP_MAGIC 777 | ||
1200 | #define NETXEN_NIC_PEG_TUNE 0 | ||
848 | 1201 | ||
849 | struct netxen_dummy_dma { | 1202 | struct netxen_dummy_dma { |
850 | void *addr; | 1203 | void *addr; |
@@ -854,46 +1207,65 @@ struct netxen_dummy_dma { | |||
854 | struct netxen_adapter { | 1207 | struct netxen_adapter { |
855 | struct netxen_hardware_context ahw; | 1208 | struct netxen_hardware_context ahw; |
856 | 1209 | ||
857 | struct netxen_adapter *master; | ||
858 | struct net_device *netdev; | 1210 | struct net_device *netdev; |
859 | struct pci_dev *pdev; | 1211 | struct pci_dev *pdev; |
1212 | int pci_using_dac; | ||
860 | struct napi_struct napi; | 1213 | struct napi_struct napi; |
861 | struct net_device_stats net_stats; | 1214 | struct net_device_stats net_stats; |
862 | unsigned char mac_addr[ETH_ALEN]; | ||
863 | int mtu; | 1215 | int mtu; |
864 | int portnum; | 1216 | int portnum; |
865 | u8 physical_port; | 1217 | u8 physical_port; |
1218 | u16 tx_context_id; | ||
1219 | |||
1220 | uint8_t mc_enabled; | ||
1221 | uint8_t max_mc_count; | ||
1222 | nx_mac_list_t *mac_list; | ||
1223 | |||
1224 | struct netxen_legacy_intr_set legacy_intr; | ||
1225 | u32 crb_intr_mask; | ||
866 | 1226 | ||
867 | struct work_struct watchdog_task; | 1227 | struct work_struct watchdog_task; |
868 | struct timer_list watchdog_timer; | 1228 | struct timer_list watchdog_timer; |
869 | struct work_struct tx_timeout_task; | 1229 | struct work_struct tx_timeout_task; |
870 | 1230 | ||
871 | u32 curr_window; | 1231 | u32 curr_window; |
1232 | u32 crb_win; | ||
1233 | rwlock_t adapter_lock; | ||
1234 | |||
1235 | uint64_t dma_mask; | ||
872 | 1236 | ||
873 | u32 cmd_producer; | 1237 | u32 cmd_producer; |
874 | __le32 *cmd_consumer; | 1238 | __le32 *cmd_consumer; |
875 | u32 last_cmd_consumer; | 1239 | u32 last_cmd_consumer; |
1240 | u32 crb_addr_cmd_producer; | ||
1241 | u32 crb_addr_cmd_consumer; | ||
876 | 1242 | ||
877 | u32 max_tx_desc_count; | 1243 | u32 max_tx_desc_count; |
878 | u32 max_rx_desc_count; | 1244 | u32 max_rx_desc_count; |
879 | u32 max_jumbo_rx_desc_count; | 1245 | u32 max_jumbo_rx_desc_count; |
880 | u32 max_lro_rx_desc_count; | 1246 | u32 max_lro_rx_desc_count; |
881 | 1247 | ||
1248 | int max_rds_rings; | ||
1249 | |||
882 | u32 flags; | 1250 | u32 flags; |
883 | u32 irq; | 1251 | u32 irq; |
884 | int driver_mismatch; | 1252 | int driver_mismatch; |
885 | u32 temp; | 1253 | u32 temp; |
886 | 1254 | ||
1255 | u32 fw_major; | ||
1256 | |||
1257 | u8 msix_supported; | ||
1258 | u8 max_possible_rss_rings; | ||
1259 | struct msix_entry msix_entries[MSIX_ENTRIES_PER_ADAPTER]; | ||
1260 | |||
887 | struct netxen_adapter_stats stats; | 1261 | struct netxen_adapter_stats stats; |
888 | 1262 | ||
889 | u16 portno; | ||
890 | u16 link_speed; | 1263 | u16 link_speed; |
891 | u16 link_duplex; | 1264 | u16 link_duplex; |
892 | u16 state; | 1265 | u16 state; |
893 | u16 link_autoneg; | 1266 | u16 link_autoneg; |
894 | int rx_csum; | 1267 | int rx_csum; |
895 | int status; | 1268 | int status; |
896 | spinlock_t stats_lock; | ||
897 | 1269 | ||
898 | struct netxen_cmd_buffer *cmd_buf_arr; /* Command buffers for xmit */ | 1270 | struct netxen_cmd_buffer *cmd_buf_arr; /* Command buffers for xmit */ |
899 | 1271 | ||
@@ -905,25 +1277,33 @@ struct netxen_adapter { | |||
905 | 1277 | ||
906 | int is_up; | 1278 | int is_up; |
907 | struct netxen_dummy_dma dummy_dma; | 1279 | struct netxen_dummy_dma dummy_dma; |
1280 | nx_nic_intr_coalesce_t coal; | ||
908 | 1281 | ||
909 | /* Context interface shared between card and host */ | 1282 | /* Context interface shared between card and host */ |
910 | struct netxen_ring_ctx *ctx_desc; | 1283 | struct netxen_ring_ctx *ctx_desc; |
911 | struct pci_dev *ctx_desc_pdev; | ||
912 | dma_addr_t ctx_desc_phys_addr; | 1284 | dma_addr_t ctx_desc_phys_addr; |
913 | int intr_scheme; | 1285 | int intr_scheme; |
914 | int msi_mode; | 1286 | int msi_mode; |
915 | int (*enable_phy_interrupts) (struct netxen_adapter *); | 1287 | int (*enable_phy_interrupts) (struct netxen_adapter *); |
916 | int (*disable_phy_interrupts) (struct netxen_adapter *); | 1288 | int (*disable_phy_interrupts) (struct netxen_adapter *); |
917 | void (*handle_phy_intr) (struct netxen_adapter *); | ||
918 | int (*macaddr_set) (struct netxen_adapter *, netxen_ethernet_macaddr_t); | 1289 | int (*macaddr_set) (struct netxen_adapter *, netxen_ethernet_macaddr_t); |
919 | int (*set_mtu) (struct netxen_adapter *, int); | 1290 | int (*set_mtu) (struct netxen_adapter *, int); |
920 | int (*set_promisc) (struct netxen_adapter *, netxen_niu_prom_mode_t); | 1291 | int (*set_promisc) (struct netxen_adapter *, netxen_niu_prom_mode_t); |
921 | int (*unset_promisc) (struct netxen_adapter *, netxen_niu_prom_mode_t); | ||
922 | int (*phy_read) (struct netxen_adapter *, long reg, u32 *); | 1292 | int (*phy_read) (struct netxen_adapter *, long reg, u32 *); |
923 | int (*phy_write) (struct netxen_adapter *, long reg, u32 val); | 1293 | int (*phy_write) (struct netxen_adapter *, long reg, u32 val); |
924 | int (*init_port) (struct netxen_adapter *, int); | 1294 | int (*init_port) (struct netxen_adapter *, int); |
925 | void (*init_niu) (struct netxen_adapter *); | ||
926 | int (*stop_port) (struct netxen_adapter *); | 1295 | int (*stop_port) (struct netxen_adapter *); |
1296 | |||
1297 | int (*hw_read_wx)(struct netxen_adapter *, ulong, void *, int); | ||
1298 | int (*hw_write_wx)(struct netxen_adapter *, ulong, void *, int); | ||
1299 | int (*pci_mem_read)(struct netxen_adapter *, u64, void *, int); | ||
1300 | int (*pci_mem_write)(struct netxen_adapter *, u64, void *, int); | ||
1301 | int (*pci_write_immediate)(struct netxen_adapter *, u64, u32); | ||
1302 | u32 (*pci_read_immediate)(struct netxen_adapter *, u64); | ||
1303 | void (*pci_write_normalize)(struct netxen_adapter *, u64, u32); | ||
1304 | u32 (*pci_read_normalize)(struct netxen_adapter *, u64); | ||
1305 | unsigned long (*pci_set_window)(struct netxen_adapter *, | ||
1306 | unsigned long long); | ||
927 | }; /* netxen_adapter structure */ | 1307 | }; /* netxen_adapter structure */ |
928 | 1308 | ||
929 | /* | 1309 | /* |
@@ -988,8 +1368,6 @@ int netxen_niu_xgbe_enable_phy_interrupts(struct netxen_adapter *adapter); | |||
988 | int netxen_niu_gbe_enable_phy_interrupts(struct netxen_adapter *adapter); | 1368 | int netxen_niu_gbe_enable_phy_interrupts(struct netxen_adapter *adapter); |
989 | int netxen_niu_xgbe_disable_phy_interrupts(struct netxen_adapter *adapter); | 1369 | int netxen_niu_xgbe_disable_phy_interrupts(struct netxen_adapter *adapter); |
990 | int netxen_niu_gbe_disable_phy_interrupts(struct netxen_adapter *adapter); | 1370 | int netxen_niu_gbe_disable_phy_interrupts(struct netxen_adapter *adapter); |
991 | void netxen_nic_xgbe_handle_phy_intr(struct netxen_adapter *adapter); | ||
992 | void netxen_nic_gbe_handle_phy_intr(struct netxen_adapter *adapter); | ||
993 | int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | 1371 | int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, |
994 | __u32 * readval); | 1372 | __u32 * readval); |
995 | int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, | 1373 | int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, |
@@ -998,27 +1376,61 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, | |||
998 | /* Functions available from netxen_nic_hw.c */ | 1376 | /* Functions available from netxen_nic_hw.c */ |
999 | int netxen_nic_set_mtu_xgb(struct netxen_adapter *adapter, int new_mtu); | 1377 | int netxen_nic_set_mtu_xgb(struct netxen_adapter *adapter, int new_mtu); |
1000 | int netxen_nic_set_mtu_gb(struct netxen_adapter *adapter, int new_mtu); | 1378 | int netxen_nic_set_mtu_gb(struct netxen_adapter *adapter, int new_mtu); |
1001 | void netxen_nic_init_niu_gb(struct netxen_adapter *adapter); | ||
1002 | void netxen_nic_pci_change_crbwindow(struct netxen_adapter *adapter, u32 wndw); | ||
1003 | void netxen_nic_reg_write(struct netxen_adapter *adapter, u64 off, u32 val); | 1379 | void netxen_nic_reg_write(struct netxen_adapter *adapter, u64 off, u32 val); |
1004 | int netxen_nic_reg_read(struct netxen_adapter *adapter, u64 off); | 1380 | int netxen_nic_reg_read(struct netxen_adapter *adapter, u64 off); |
1005 | void netxen_nic_write_w0(struct netxen_adapter *adapter, u32 index, u32 value); | 1381 | void netxen_nic_write_w0(struct netxen_adapter *adapter, u32 index, u32 value); |
1006 | void netxen_nic_read_w0(struct netxen_adapter *adapter, u32 index, u32 * value); | 1382 | void netxen_nic_read_w0(struct netxen_adapter *adapter, u32 index, u32 *value); |
1383 | void netxen_nic_write_w1(struct netxen_adapter *adapter, u32 index, u32 value); | ||
1384 | void netxen_nic_read_w1(struct netxen_adapter *adapter, u32 index, u32 *value); | ||
1007 | 1385 | ||
1008 | int netxen_nic_get_board_info(struct netxen_adapter *adapter); | 1386 | int netxen_nic_get_board_info(struct netxen_adapter *adapter); |
1009 | int netxen_nic_hw_read_wx(struct netxen_adapter *adapter, u64 off, void *data, | 1387 | |
1010 | int len); | 1388 | int netxen_nic_hw_read_wx_128M(struct netxen_adapter *adapter, |
1011 | int netxen_nic_hw_write_wx(struct netxen_adapter *adapter, u64 off, void *data, | 1389 | ulong off, void *data, int len); |
1012 | int len); | 1390 | int netxen_nic_hw_write_wx_128M(struct netxen_adapter *adapter, |
1391 | ulong off, void *data, int len); | ||
1392 | int netxen_nic_pci_mem_read_128M(struct netxen_adapter *adapter, | ||
1393 | u64 off, void *data, int size); | ||
1394 | int netxen_nic_pci_mem_write_128M(struct netxen_adapter *adapter, | ||
1395 | u64 off, void *data, int size); | ||
1396 | int netxen_nic_pci_write_immediate_128M(struct netxen_adapter *adapter, | ||
1397 | u64 off, u32 data); | ||
1398 | u32 netxen_nic_pci_read_immediate_128M(struct netxen_adapter *adapter, u64 off); | ||
1399 | void netxen_nic_pci_write_normalize_128M(struct netxen_adapter *adapter, | ||
1400 | u64 off, u32 data); | ||
1401 | u32 netxen_nic_pci_read_normalize_128M(struct netxen_adapter *adapter, u64 off); | ||
1402 | unsigned long netxen_nic_pci_set_window_128M(struct netxen_adapter *adapter, | ||
1403 | unsigned long long addr); | ||
1404 | void netxen_nic_pci_change_crbwindow_128M(struct netxen_adapter *adapter, | ||
1405 | u32 wndw); | ||
1406 | |||
1407 | int netxen_nic_hw_read_wx_2M(struct netxen_adapter *adapter, | ||
1408 | ulong off, void *data, int len); | ||
1409 | int netxen_nic_hw_write_wx_2M(struct netxen_adapter *adapter, | ||
1410 | ulong off, void *data, int len); | ||
1411 | int netxen_nic_pci_mem_read_2M(struct netxen_adapter *adapter, | ||
1412 | u64 off, void *data, int size); | ||
1413 | int netxen_nic_pci_mem_write_2M(struct netxen_adapter *adapter, | ||
1414 | u64 off, void *data, int size); | ||
1013 | void netxen_crb_writelit_adapter(struct netxen_adapter *adapter, | 1415 | void netxen_crb_writelit_adapter(struct netxen_adapter *adapter, |
1014 | unsigned long off, int data); | 1416 | unsigned long off, int data); |
1417 | int netxen_nic_pci_write_immediate_2M(struct netxen_adapter *adapter, | ||
1418 | u64 off, u32 data); | ||
1419 | u32 netxen_nic_pci_read_immediate_2M(struct netxen_adapter *adapter, u64 off); | ||
1420 | void netxen_nic_pci_write_normalize_2M(struct netxen_adapter *adapter, | ||
1421 | u64 off, u32 data); | ||
1422 | u32 netxen_nic_pci_read_normalize_2M(struct netxen_adapter *adapter, u64 off); | ||
1423 | unsigned long netxen_nic_pci_set_window_2M(struct netxen_adapter *adapter, | ||
1424 | unsigned long long addr); | ||
1015 | 1425 | ||
1016 | /* Functions from netxen_nic_init.c */ | 1426 | /* Functions from netxen_nic_init.c */ |
1017 | void netxen_free_adapter_offload(struct netxen_adapter *adapter); | 1427 | void netxen_free_adapter_offload(struct netxen_adapter *adapter); |
1018 | int netxen_initialize_adapter_offload(struct netxen_adapter *adapter); | 1428 | int netxen_initialize_adapter_offload(struct netxen_adapter *adapter); |
1019 | int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val); | 1429 | int netxen_phantom_init(struct netxen_adapter *adapter, int pegtune_val); |
1430 | int netxen_receive_peg_ready(struct netxen_adapter *adapter); | ||
1020 | int netxen_load_firmware(struct netxen_adapter *adapter); | 1431 | int netxen_load_firmware(struct netxen_adapter *adapter); |
1021 | int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose); | 1432 | int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose); |
1433 | |||
1022 | int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp); | 1434 | int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr, int *valp); |
1023 | int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr, | 1435 | int netxen_rom_fast_read_words(struct netxen_adapter *adapter, int addr, |
1024 | u8 *bytes, size_t size); | 1436 | u8 *bytes, size_t size); |
@@ -1032,33 +1444,43 @@ void netxen_halt_pegs(struct netxen_adapter *adapter); | |||
1032 | 1444 | ||
1033 | int netxen_rom_se(struct netxen_adapter *adapter, int addr); | 1445 | int netxen_rom_se(struct netxen_adapter *adapter, int addr); |
1034 | 1446 | ||
1035 | /* Functions from netxen_nic_isr.c */ | 1447 | int netxen_alloc_sw_resources(struct netxen_adapter *adapter); |
1036 | void netxen_initialize_adapter_sw(struct netxen_adapter *adapter); | 1448 | void netxen_free_sw_resources(struct netxen_adapter *adapter); |
1037 | void *netxen_alloc(struct pci_dev *pdev, size_t sz, dma_addr_t * ptr, | 1449 | |
1038 | struct pci_dev **used_dev); | 1450 | int netxen_alloc_hw_resources(struct netxen_adapter *adapter); |
1451 | void netxen_free_hw_resources(struct netxen_adapter *adapter); | ||
1452 | |||
1453 | void netxen_release_rx_buffers(struct netxen_adapter *adapter); | ||
1454 | void netxen_release_tx_buffers(struct netxen_adapter *adapter); | ||
1455 | |||
1039 | void netxen_initialize_adapter_ops(struct netxen_adapter *adapter); | 1456 | void netxen_initialize_adapter_ops(struct netxen_adapter *adapter); |
1040 | int netxen_init_firmware(struct netxen_adapter *adapter); | 1457 | int netxen_init_firmware(struct netxen_adapter *adapter); |
1041 | void netxen_free_hw_resources(struct netxen_adapter *adapter); | ||
1042 | void netxen_tso_check(struct netxen_adapter *adapter, | 1458 | void netxen_tso_check(struct netxen_adapter *adapter, |
1043 | struct cmd_desc_type0 *desc, struct sk_buff *skb); | 1459 | struct cmd_desc_type0 *desc, struct sk_buff *skb); |
1044 | int netxen_nic_hw_resources(struct netxen_adapter *adapter); | ||
1045 | void netxen_nic_clear_stats(struct netxen_adapter *adapter); | 1460 | void netxen_nic_clear_stats(struct netxen_adapter *adapter); |
1046 | void netxen_watchdog_task(struct work_struct *work); | 1461 | void netxen_watchdog_task(struct work_struct *work); |
1047 | void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx, | 1462 | void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx, |
1048 | u32 ringid); | 1463 | u32 ringid); |
1049 | int netxen_process_cmd_ring(struct netxen_adapter *adapter); | 1464 | int netxen_process_cmd_ring(struct netxen_adapter *adapter); |
1050 | u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctx, int max); | 1465 | u32 netxen_process_rcv_ring(struct netxen_adapter *adapter, int ctx, int max); |
1051 | void netxen_nic_set_multi(struct net_device *netdev); | 1466 | void netxen_p2_nic_set_multi(struct net_device *netdev); |
1467 | void netxen_p3_nic_set_multi(struct net_device *netdev); | ||
1468 | int netxen_config_intr_coalesce(struct netxen_adapter *adapter); | ||
1469 | |||
1470 | u32 nx_fw_cmd_set_mtu(struct netxen_adapter *adapter, u32 mtu); | ||
1052 | int netxen_nic_change_mtu(struct net_device *netdev, int new_mtu); | 1471 | int netxen_nic_change_mtu(struct net_device *netdev, int new_mtu); |
1472 | |||
1053 | int netxen_nic_set_mac(struct net_device *netdev, void *p); | 1473 | int netxen_nic_set_mac(struct net_device *netdev, void *p); |
1054 | struct net_device_stats *netxen_nic_get_stats(struct net_device *netdev); | 1474 | struct net_device_stats *netxen_nic_get_stats(struct net_device *netdev); |
1055 | 1475 | ||
1476 | void netxen_nic_update_cmd_producer(struct netxen_adapter *adapter, | ||
1477 | uint32_t crb_producer); | ||
1056 | 1478 | ||
1057 | /* | 1479 | /* |
1058 | * NetXen Board information | 1480 | * NetXen Board information |
1059 | */ | 1481 | */ |
1060 | 1482 | ||
1061 | #define NETXEN_MAX_SHORT_NAME 16 | 1483 | #define NETXEN_MAX_SHORT_NAME 32 |
1062 | struct netxen_brdinfo { | 1484 | struct netxen_brdinfo { |
1063 | netxen_brdtype_t brdtype; /* type of board */ | 1485 | netxen_brdtype_t brdtype; /* type of board */ |
1064 | long ports; /* max no of physical ports */ | 1486 | long ports; /* max no of physical ports */ |
@@ -1072,6 +1494,17 @@ static const struct netxen_brdinfo netxen_boards[] = { | |||
1072 | {NETXEN_BRDTYPE_P2_SB31_10G, 1, "XGb XFP"}, | 1494 | {NETXEN_BRDTYPE_P2_SB31_10G, 1, "XGb XFP"}, |
1073 | {NETXEN_BRDTYPE_P2_SB35_4G, 4, "Quad Gb"}, | 1495 | {NETXEN_BRDTYPE_P2_SB35_4G, 4, "Quad Gb"}, |
1074 | {NETXEN_BRDTYPE_P2_SB31_2G, 2, "Dual Gb"}, | 1496 | {NETXEN_BRDTYPE_P2_SB31_2G, 2, "Dual Gb"}, |
1497 | {NETXEN_BRDTYPE_P3_REF_QG, 4, "Reference Quad Gig "}, | ||
1498 | {NETXEN_BRDTYPE_P3_HMEZ, 2, "Dual XGb HMEZ"}, | ||
1499 | {NETXEN_BRDTYPE_P3_10G_CX4_LP, 2, "Dual XGb CX4 LP"}, | ||
1500 | {NETXEN_BRDTYPE_P3_4_GB, 4, "Quad Gig LP"}, | ||
1501 | {NETXEN_BRDTYPE_P3_IMEZ, 2, "Dual XGb IMEZ"}, | ||
1502 | {NETXEN_BRDTYPE_P3_10G_SFP_PLUS, 2, "Dual XGb SFP+ LP"}, | ||
1503 | {NETXEN_BRDTYPE_P3_10000_BASE_T, 1, "XGB 10G BaseT LP"}, | ||
1504 | {NETXEN_BRDTYPE_P3_XG_LOM, 2, "Dual XGb LOM"}, | ||
1505 | {NETXEN_BRDTYPE_P3_4_GB_MM, 4, "Quad GB - March Madness"}, | ||
1506 | {NETXEN_BRDTYPE_P3_10G_CX4, 2, "Reference Dual CX4 Option"}, | ||
1507 | {NETXEN_BRDTYPE_P3_10G_XFP, 1, "Reference Single XFP Option"} | ||
1075 | }; | 1508 | }; |
1076 | 1509 | ||
1077 | #define NUM_SUPPORTED_BOARDS ARRAY_SIZE(netxen_boards) | 1510 | #define NUM_SUPPORTED_BOARDS ARRAY_SIZE(netxen_boards) |
@@ -1097,7 +1530,7 @@ dma_watchdog_shutdown_request(struct netxen_adapter *adapter) | |||
1097 | u32 ctrl; | 1530 | u32 ctrl; |
1098 | 1531 | ||
1099 | /* check if already inactive */ | 1532 | /* check if already inactive */ |
1100 | if (netxen_nic_hw_read_wx(adapter, | 1533 | if (adapter->hw_read_wx(adapter, |
1101 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) | 1534 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) |
1102 | printk(KERN_ERR "failed to read dma watchdog status\n"); | 1535 | printk(KERN_ERR "failed to read dma watchdog status\n"); |
1103 | 1536 | ||
@@ -1117,7 +1550,7 @@ dma_watchdog_shutdown_poll_result(struct netxen_adapter *adapter) | |||
1117 | { | 1550 | { |
1118 | u32 ctrl; | 1551 | u32 ctrl; |
1119 | 1552 | ||
1120 | if (netxen_nic_hw_read_wx(adapter, | 1553 | if (adapter->hw_read_wx(adapter, |
1121 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) | 1554 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) |
1122 | printk(KERN_ERR "failed to read dma watchdog status\n"); | 1555 | printk(KERN_ERR "failed to read dma watchdog status\n"); |
1123 | 1556 | ||
@@ -1129,7 +1562,7 @@ dma_watchdog_wakeup(struct netxen_adapter *adapter) | |||
1129 | { | 1562 | { |
1130 | u32 ctrl; | 1563 | u32 ctrl; |
1131 | 1564 | ||
1132 | if (netxen_nic_hw_read_wx(adapter, | 1565 | if (adapter->hw_read_wx(adapter, |
1133 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) | 1566 | NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4)) |
1134 | printk(KERN_ERR "failed to read dma watchdog status\n"); | 1567 | printk(KERN_ERR "failed to read dma watchdog status\n"); |
1135 | 1568 | ||