Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
ethernet
qlogic
netxen
netxen_nic.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2003 - 2009 NetXen, Inc.
3
* Copyright (C) 2009 - QLogic Corporation.
4
* All rights reserved.
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful, but
12
* WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place - Suite 330, Boston,
19
* MA 02111-1307, USA.
20
*
21
* The full GNU General Public License is included in this distribution
22
* in the file called "COPYING".
23
*
24
*/
25
26
#ifndef _NETXEN_NIC_H_
27
#define _NETXEN_NIC_H_
28
29
#include <linux/module.h>
30
#include <linux/kernel.h>
31
#include <linux/types.h>
32
#include <
linux/ioport.h
>
33
#include <linux/pci.h>
34
#include <linux/netdevice.h>
35
#include <
linux/etherdevice.h
>
36
#include <linux/ip.h>
37
#include <linux/in.h>
38
#include <linux/tcp.h>
39
#include <
linux/skbuff.h
>
40
#include <
linux/firmware.h
>
41
42
#include <linux/ethtool.h>
43
#include <linux/mii.h>
44
#include <
linux/timer.h
>
45
46
#include <
linux/vmalloc.h
>
47
48
#include <asm/io.h>
49
#include <asm/byteorder.h>
50
51
#include "
netxen_nic_hdr.h
"
52
#include "
netxen_nic_hw.h
"
53
54
#define _NETXEN_NIC_LINUX_MAJOR 4
55
#define _NETXEN_NIC_LINUX_MINOR 0
56
#define _NETXEN_NIC_LINUX_SUBVERSION 80
57
#define NETXEN_NIC_LINUX_VERSIONID "4.0.80"
58
59
#define NETXEN_VERSION_CODE(a, b, c) (((a) << 24) + ((b) << 16) + (c))
60
#define _major(v) (((v) >> 24) & 0xff)
61
#define _minor(v) (((v) >> 16) & 0xff)
62
#define _build(v) ((v) & 0xffff)
63
64
/* version in image has weird encoding:
65
* 7:0 - major
66
* 15:8 - minor
67
* 31:16 - build (little endian)
68
*/
69
#define NETXEN_DECODE_VERSION(v) \
70
NETXEN_VERSION_CODE(((v) & 0xff), (((v) >> 8) & 0xff), ((v) >> 16))
71
72
#define NETXEN_NUM_FLASH_SECTORS (64)
73
#define NETXEN_FLASH_SECTOR_SIZE (64 * 1024)
74
#define NETXEN_FLASH_TOTAL_SIZE (NETXEN_NUM_FLASH_SECTORS \
75
* NETXEN_FLASH_SECTOR_SIZE)
76
77
#define RCV_DESC_RINGSIZE(rds_ring) \
78
(sizeof(struct rcv_desc) * (rds_ring)->num_desc)
79
#define RCV_BUFF_RINGSIZE(rds_ring) \
80
(sizeof(struct netxen_rx_buffer) * rds_ring->num_desc)
81
#define STATUS_DESC_RINGSIZE(sds_ring) \
82
(sizeof(struct status_desc) * (sds_ring)->num_desc)
83
#define TX_BUFF_RINGSIZE(tx_ring) \
84
(sizeof(struct netxen_cmd_buffer) * tx_ring->num_desc)
85
#define TX_DESC_RINGSIZE(tx_ring) \
86
(sizeof(struct cmd_desc_type0) * tx_ring->num_desc)
87
88
#define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a)))
89
90
#define NETXEN_RCV_PRODUCER_OFFSET 0
91
#define NETXEN_RCV_PEG_DB_ID 2
92
#define NETXEN_HOST_DUMMY_DMA_SIZE 1024
93
#define FLASH_SUCCESS 0
94
95
#define ADDR_IN_WINDOW1(off) \
96
((off > NETXEN_CRB_PCIX_HOST2) && (off < NETXEN_CRB_MAX)) ? 1 : 0
97
98
#define ADDR_IN_RANGE(addr, low, high) \
99
(((addr) < (high)) && ((addr) >= (low)))
100
101
/*
102
* normalize a 64MB crb address to 32MB PCI window
103
* To use NETXEN_CRB_NORMALIZE, window _must_ be set to 1
104
*/
105
#define NETXEN_CRB_NORMAL(reg) \
106
((reg) - NETXEN_CRB_PCIX_HOST2 + NETXEN_CRB_PCIX_HOST)
107
108
#define NETXEN_CRB_NORMALIZE(adapter, reg) \
109
pci_base_offset(adapter, NETXEN_CRB_NORMAL(reg))
110
111
#define DB_NORMALIZE(adapter, off) \
112
(adapter->ahw.db_base + (off))
113
114
#define NX_P2_C0 0x24
115
#define NX_P2_C1 0x25
116
#define NX_P3_A0 0x30
117
#define NX_P3_A2 0x30
118
#define NX_P3_B0 0x40
119
#define NX_P3_B1 0x41
120
#define NX_P3_B2 0x42
121
#define NX_P3P_A0 0x50
122
123
#define NX_IS_REVISION_P2(REVISION) (REVISION <= NX_P2_C1)
124
#define NX_IS_REVISION_P3(REVISION) (REVISION >= NX_P3_A0)
125
#define NX_IS_REVISION_P3P(REVISION) (REVISION >= NX_P3P_A0)
126
127
#define FIRST_PAGE_GROUP_START 0
128
#define FIRST_PAGE_GROUP_END 0x100000
129
130
#define SECOND_PAGE_GROUP_START 0x6000000
131
#define SECOND_PAGE_GROUP_END 0x68BC000
132
133
#define THIRD_PAGE_GROUP_START 0x70E4000
134
#define THIRD_PAGE_GROUP_END 0x8000000
135
136
#define FIRST_PAGE_GROUP_SIZE FIRST_PAGE_GROUP_END - FIRST_PAGE_GROUP_START
137
#define SECOND_PAGE_GROUP_SIZE SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START
138
#define THIRD_PAGE_GROUP_SIZE THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START
139
140
#define P2_MAX_MTU (8000)
141
#define P3_MAX_MTU (9600)
142
#define NX_ETHERMTU 1500
143
#define NX_MAX_ETHERHDR 32
/* This contains some padding */
144
145
#define NX_P2_RX_BUF_MAX_LEN 1760
146
#define NX_P3_RX_BUF_MAX_LEN (NX_MAX_ETHERHDR + NX_ETHERMTU)
147
#define NX_P2_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P2_MAX_MTU)
148
#define NX_P3_RX_JUMBO_BUF_MAX_LEN (NX_MAX_ETHERHDR + P3_MAX_MTU)
149
#define NX_CT_DEFAULT_RX_BUF_LEN 2048
150
#define NX_LRO_BUFFER_EXTRA 2048
151
152
#define NX_RX_LRO_BUFFER_LENGTH (8060)
153
154
/*
155
* Maximum number of ring contexts
156
*/
157
#define MAX_RING_CTX 1
158
159
/* Opcodes to be used with the commands */
160
#define TX_ETHER_PKT 0x01
161
#define TX_TCP_PKT 0x02
162
#define TX_UDP_PKT 0x03
163
#define TX_IP_PKT 0x04
164
#define TX_TCP_LSO 0x05
165
#define TX_TCP_LSO6 0x06
166
#define TX_IPSEC 0x07
167
#define TX_IPSEC_CMD 0x0a
168
#define TX_TCPV6_PKT 0x0b
169
#define TX_UDPV6_PKT 0x0c
170
171
/* The following opcodes are for internal consumption. */
172
#define NETXEN_CONTROL_OP 0x10
173
#define PEGNET_REQUEST 0x11
174
175
#define MAX_NUM_CARDS 4
176
177
#define NETXEN_MAX_FRAGS_PER_TX 14
178
#define MAX_TSO_HEADER_DESC 2
179
#define MGMT_CMD_DESC_RESV 4
180
#define TX_STOP_THRESH ((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \
181
+ MGMT_CMD_DESC_RESV)
182
#define NX_MAX_TX_TIMEOUTS 2
183
184
/*
185
* Following are the states of the Phantom. Phantom will set them and
186
* Host will read to check if the fields are correct.
187
*/
188
#define PHAN_INITIALIZE_START 0xff00
189
#define PHAN_INITIALIZE_FAILED 0xffff
190
#define PHAN_INITIALIZE_COMPLETE 0xff01
191
192
/* Host writes the following to notify that it has done the init-handshake */
193
#define PHAN_INITIALIZE_ACK 0xf00f
194
195
#define NUM_RCV_DESC_RINGS 3
196
#define NUM_STS_DESC_RINGS 4
197
198
#define RCV_RING_NORMAL 0
199
#define RCV_RING_JUMBO 1
200
#define RCV_RING_LRO 2
201
202
#define MIN_CMD_DESCRIPTORS 64
203
#define MIN_RCV_DESCRIPTORS 64
204
#define MIN_JUMBO_DESCRIPTORS 32
205
206
#define MAX_CMD_DESCRIPTORS 1024
207
#define MAX_RCV_DESCRIPTORS_1G 4096
208
#define MAX_RCV_DESCRIPTORS_10G 8192
209
#define MAX_JUMBO_RCV_DESCRIPTORS_1G 512
210
#define MAX_JUMBO_RCV_DESCRIPTORS_10G 1024
211
#define MAX_LRO_RCV_DESCRIPTORS 8
212
213
#define DEFAULT_RCV_DESCRIPTORS_1G 2048
214
#define DEFAULT_RCV_DESCRIPTORS_10G 4096
215
216
#define NETXEN_CTX_SIGNATURE 0xdee0
217
#define NETXEN_CTX_SIGNATURE_V2 0x0002dee0
218
#define NETXEN_CTX_RESET 0xbad0
219
#define NETXEN_CTX_D3_RESET 0xacc0
220
#define NETXEN_RCV_PRODUCER(ringid) (ringid)
221
222
#define PHAN_PEG_RCV_INITIALIZED 0xff01
223
#define PHAN_PEG_RCV_START_INITIALIZE 0xff00
224
225
#define get_next_index(index, length) \
226
(((index) + 1) & ((length) - 1))
227
228
#define get_index_range(index,length,count) \
229
(((index) + (count)) & ((length) - 1))
230
231
#define MPORT_SINGLE_FUNCTION_MODE 0x1111
232
#define MPORT_MULTI_FUNCTION_MODE 0x2222
233
234
#define NX_MAX_PCI_FUNC 8
235
236
/*
237
* NetXen host-peg signal message structure
238
*
239
* Bit 0-1 : peg_id => 0x2 for tx and 01 for rx
240
* Bit 2 : priv_id => must be 1
241
* Bit 3-17 : count => for doorbell
242
* Bit 18-27 : ctx_id => Context id
243
* Bit 28-31 : opcode
244
*/
245
246
typedef
u32
netxen_ctx_msg
;
247
248
#define netxen_set_msg_peg_id(config_word, val) \
249
((config_word) &= ~3, (config_word) |= val & 3)
250
#define netxen_set_msg_privid(config_word) \
251
((config_word) |= 1 << 2)
252
#define netxen_set_msg_count(config_word, val) \
253
((config_word) &= ~(0x7fff<<3), (config_word) |= (val & 0x7fff) << 3)
254
#define netxen_set_msg_ctxid(config_word, val) \
255
((config_word) &= ~(0x3ff<<18), (config_word) |= (val & 0x3ff) << 18)
256
#define netxen_set_msg_opcode(config_word, val) \
257
((config_word) &= ~(0xf<<28), (config_word) |= (val & 0xf) << 28)
258
259
struct
netxen_rcv_ring
{
260
__le64
addr
;
261
__le32
size
;
262
__le32
rsrvd
;
263
};
264
265
struct
netxen_sts_ring
{
266
__le64
addr
;
267
__le32
size
;
268
__le16
msi_index
;
269
__le16
rsvd
;
270
} ;
271
272
struct
netxen_ring_ctx
{
273
274
/* one command ring */
275
__le64
cmd_consumer_offset
;
276
__le64
cmd_ring_addr
;
277
__le32
cmd_ring_size
;
278
__le32
rsrvd
;
279
280
/* three receive rings */
281
struct
netxen_rcv_ring
rcv_rings
[
NUM_RCV_DESC_RINGS
];
282
283
__le64
sts_ring_addr
;
284
__le32
sts_ring_size
;
285
286
__le32
ctx_id
;
287
288
__le64
rsrvd_2
[3];
289
__le32
sts_ring_count
;
290
__le32
rsrvd_3
;
291
struct
netxen_sts_ring
sts_rings
[
NUM_STS_DESC_RINGS
];
292
293
}
__attribute__
((
aligned
(64)));
294
295
/*
296
* Following data structures describe the descriptors that will be used.
297
* Added fileds of tcpHdrSize and ipHdrSize, The driver needs to do it only when
298
* we are doing LSO (above the 1500 size packet) only.
299
*/
300
301
/*
302
* The size of reference handle been changed to 16 bits to pass the MSS fields
303
* for the LSO packet
304
*/
305
306
#define FLAGS_CHECKSUM_ENABLED 0x01
307
#define FLAGS_LSO_ENABLED 0x02
308
#define FLAGS_IPSEC_SA_ADD 0x04
309
#define FLAGS_IPSEC_SA_DELETE 0x08
310
#define FLAGS_VLAN_TAGGED 0x10
311
#define FLAGS_VLAN_OOB 0x40
312
313
#define netxen_set_tx_vlan_tci(cmd_desc, v) \
314
(cmd_desc)->vlan_TCI = cpu_to_le16(v);
315
316
#define netxen_set_cmd_desc_port(cmd_desc, var) \
317
((cmd_desc)->port_ctxid |= ((var) & 0x0F))
318
#define netxen_set_cmd_desc_ctxid(cmd_desc, var) \
319
((cmd_desc)->port_ctxid |= ((var) << 4 & 0xF0))
320
321
#define netxen_set_tx_port(_desc, _port) \
322
(_desc)->port_ctxid = ((_port) & 0xf) | (((_port) << 4) & 0xf0)
323
324
#define netxen_set_tx_flags_opcode(_desc, _flags, _opcode) \
325
(_desc)->flags_opcode = \
326
cpu_to_le16(((_flags) & 0x7f) | (((_opcode) & 0x3f) << 7))
327
328
#define netxen_set_tx_frags_len(_desc, _frags, _len) \
329
(_desc)->nfrags__length = \
330
cpu_to_le32(((_frags) & 0xff) | (((_len) & 0xffffff) << 8))
331
332
struct
cmd_desc_type0
{
333
u8
tcp_hdr_offset
;
/* For LSO only */
334
u8
ip_hdr_offset
;
/* For LSO only */
335
__le16
flags_opcode
;
/* 15:13 unused, 12:7 opcode, 6:0 flags */
336
__le32
nfrags__length
;
/* 31:8 total len, 7:0 frag count */
337
338
__le64
addr_buffer2
;
339
340
__le16
reference_handle
;
341
__le16
mss
;
342
u8
port_ctxid
;
/* 7:4 ctxid 3:0 port */
343
u8
total_hdr_length
;
/* LSO only : MAC+IP+TCP Hdr size */
344
__le16
conn_id
;
/* IPSec offoad only */
345
346
__le64
addr_buffer3
;
347
__le64
addr_buffer1
;
348
349
__le16
buffer_length
[4];
350
351
__le64
addr_buffer4
;
352
353
__le32
reserved2
;
354
__le16
reserved
;
355
__le16
vlan_TCI
;
356
357
}
__attribute__
((
aligned
(64)));
358
359
/* Note: sizeof(rcv_desc) should always be a mutliple of 2 */
360
struct
rcv_desc
{
361
__le16
reference_handle
;
362
__le16
reserved
;
363
__le32
buffer_length
;
/* allocated buffer length (usually 2K) */
364
__le64
addr_buffer
;
365
};
366
367
/* opcode field in status_desc */
368
#define NETXEN_NIC_SYN_OFFLOAD 0x03
369
#define NETXEN_NIC_RXPKT_DESC 0x04
370
#define NETXEN_OLD_RXPKT_DESC 0x3f
371
#define NETXEN_NIC_RESPONSE_DESC 0x05
372
#define NETXEN_NIC_LRO_DESC 0x12
373
374
/* for status field in status_desc */
375
#define STATUS_NEED_CKSUM (1)
376
#define STATUS_CKSUM_OK (2)
377
378
/* owner bits of status_desc */
379
#define STATUS_OWNER_HOST (0x1ULL << 56)
380
#define STATUS_OWNER_PHANTOM (0x2ULL << 56)
381
382
/* Status descriptor:
383
0-3 port, 4-7 status, 8-11 type, 12-27 total_length
384
28-43 reference_handle, 44-47 protocol, 48-52 pkt_offset
385
53-55 desc_cnt, 56-57 owner, 58-63 opcode
386
*/
387
#define netxen_get_sts_port(sts_data) \
388
((sts_data) & 0x0F)
389
#define netxen_get_sts_status(sts_data) \
390
(((sts_data) >> 4) & 0x0F)
391
#define netxen_get_sts_type(sts_data) \
392
(((sts_data) >> 8) & 0x0F)
393
#define netxen_get_sts_totallength(sts_data) \
394
(((sts_data) >> 12) & 0xFFFF)
395
#define netxen_get_sts_refhandle(sts_data) \
396
(((sts_data) >> 28) & 0xFFFF)
397
#define netxen_get_sts_prot(sts_data) \
398
(((sts_data) >> 44) & 0x0F)
399
#define netxen_get_sts_pkt_offset(sts_data) \
400
(((sts_data) >> 48) & 0x1F)
401
#define netxen_get_sts_desc_cnt(sts_data) \
402
(((sts_data) >> 53) & 0x7)
403
#define netxen_get_sts_opcode(sts_data) \
404
(((sts_data) >> 58) & 0x03F)
405
406
#define netxen_get_lro_sts_refhandle(sts_data) \
407
((sts_data) & 0x0FFFF)
408
#define netxen_get_lro_sts_length(sts_data) \
409
(((sts_data) >> 16) & 0x0FFFF)
410
#define netxen_get_lro_sts_l2_hdr_offset(sts_data) \
411
(((sts_data) >> 32) & 0x0FF)
412
#define netxen_get_lro_sts_l4_hdr_offset(sts_data) \
413
(((sts_data) >> 40) & 0x0FF)
414
#define netxen_get_lro_sts_timestamp(sts_data) \
415
(((sts_data) >> 48) & 0x1)
416
#define netxen_get_lro_sts_type(sts_data) \
417
(((sts_data) >> 49) & 0x7)
418
#define netxen_get_lro_sts_push_flag(sts_data) \
419
(((sts_data) >> 52) & 0x1)
420
#define netxen_get_lro_sts_seq_number(sts_data) \
421
((sts_data) & 0x0FFFFFFFF)
422
#define netxen_get_lro_sts_mss(sts_data1) \
423
((sts_data1 >> 32) & 0x0FFFF)
424
425
426
struct
status_desc
{
427
__le64
status_desc_data
[2];
428
}
__attribute__
((
aligned
(16)));
429
430
/* UNIFIED ROMIMAGE *************************/
431
#define NX_UNI_DIR_SECT_PRODUCT_TBL 0x0
432
#define NX_UNI_DIR_SECT_BOOTLD 0x6
433
#define NX_UNI_DIR_SECT_FW 0x7
434
435
/*Offsets */
436
#define NX_UNI_CHIP_REV_OFF 10
437
#define NX_UNI_FLAGS_OFF 11
438
#define NX_UNI_BIOS_VERSION_OFF 12
439
#define NX_UNI_BOOTLD_IDX_OFF 27
440
#define NX_UNI_FIRMWARE_IDX_OFF 29
441
442
struct
uni_table_desc
{
443
uint32_t
findex
;
444
uint32_t
num_entries
;
445
uint32_t
entry_size
;
446
uint32_t
reserved
[5];
447
};
448
449
struct
uni_data_desc
{
450
uint32_t
findex
;
451
uint32_t
size
;
452
uint32_t
reserved
[5];
453
};
454
455
/* UNIFIED ROMIMAGE *************************/
456
457
/* The version of the main data structure */
458
#define NETXEN_BDINFO_VERSION 1
459
460
/* Magic number to let user know flash is programmed */
461
#define NETXEN_BDINFO_MAGIC 0x12345678
462
463
/* Max number of Gig ports on a Phantom board */
464
#define NETXEN_MAX_PORTS 4
465
466
#define NETXEN_BRDTYPE_P1_BD 0x0000
467
#define NETXEN_BRDTYPE_P1_SB 0x0001
468
#define NETXEN_BRDTYPE_P1_SMAX 0x0002
469
#define NETXEN_BRDTYPE_P1_SOCK 0x0003
470
471
#define NETXEN_BRDTYPE_P2_SOCK_31 0x0008
472
#define NETXEN_BRDTYPE_P2_SOCK_35 0x0009
473
#define NETXEN_BRDTYPE_P2_SB35_4G 0x000a
474
#define NETXEN_BRDTYPE_P2_SB31_10G 0x000b
475
#define NETXEN_BRDTYPE_P2_SB31_2G 0x000c
476
477
#define NETXEN_BRDTYPE_P2_SB31_10G_IMEZ 0x000d
478
#define NETXEN_BRDTYPE_P2_SB31_10G_HMEZ 0x000e
479
#define NETXEN_BRDTYPE_P2_SB31_10G_CX4 0x000f
480
481
#define NETXEN_BRDTYPE_P3_REF_QG 0x0021
482
#define NETXEN_BRDTYPE_P3_HMEZ 0x0022
483
#define NETXEN_BRDTYPE_P3_10G_CX4_LP 0x0023
484
#define NETXEN_BRDTYPE_P3_4_GB 0x0024
485
#define NETXEN_BRDTYPE_P3_IMEZ 0x0025
486
#define NETXEN_BRDTYPE_P3_10G_SFP_PLUS 0x0026
487
#define NETXEN_BRDTYPE_P3_10000_BASE_T 0x0027
488
#define NETXEN_BRDTYPE_P3_XG_LOM 0x0028
489
#define NETXEN_BRDTYPE_P3_4_GB_MM 0x0029
490
#define NETXEN_BRDTYPE_P3_10G_SFP_CT 0x002a
491
#define NETXEN_BRDTYPE_P3_10G_SFP_QT 0x002b
492
#define NETXEN_BRDTYPE_P3_10G_CX4 0x0031
493
#define NETXEN_BRDTYPE_P3_10G_XFP 0x0032
494
#define NETXEN_BRDTYPE_P3_10G_TP 0x0080
495
496
/* Flash memory map */
497
#define NETXEN_CRBINIT_START 0
/* crbinit section */
498
#define NETXEN_BRDCFG_START 0x4000
/* board config */
499
#define NETXEN_INITCODE_START 0x6000
/* pegtune code */
500
#define NETXEN_BOOTLD_START 0x10000
/* bootld */
501
#define NETXEN_IMAGE_START 0x43000
/* compressed image */
502
#define NETXEN_SECONDARY_START 0x200000
/* backup images */
503
#define NETXEN_PXE_START 0x3E0000
/* PXE boot rom */
504
#define NETXEN_USER_START 0x3E8000
/* Firmare info */
505
#define NETXEN_FIXED_START 0x3F0000
/* backup of crbinit */
506
#define NETXEN_USER_START_OLD NETXEN_PXE_START
/* very old flash */
507
508
#define NX_OLD_MAC_ADDR_OFFSET (NETXEN_USER_START)
509
#define NX_FW_VERSION_OFFSET (NETXEN_USER_START+0x408)
510
#define NX_FW_SIZE_OFFSET (NETXEN_USER_START+0x40c)
511
#define NX_FW_MAC_ADDR_OFFSET (NETXEN_USER_START+0x418)
512
#define NX_FW_SERIAL_NUM_OFFSET (NETXEN_USER_START+0x81c)
513
#define NX_BIOS_VERSION_OFFSET (NETXEN_USER_START+0x83c)
514
515
#define NX_HDR_VERSION_OFFSET (NETXEN_BRDCFG_START)
516
#define NX_BRDTYPE_OFFSET (NETXEN_BRDCFG_START+0x8)
517
#define NX_FW_MAGIC_OFFSET (NETXEN_BRDCFG_START+0x128)
518
519
#define NX_FW_MIN_SIZE (0x3fffff)
520
#define NX_P2_MN_ROMIMAGE 0
521
#define NX_P3_CT_ROMIMAGE 1
522
#define NX_P3_MN_ROMIMAGE 2
523
#define NX_UNIFIED_ROMIMAGE 3
524
#define NX_FLASH_ROMIMAGE 4
525
#define NX_UNKNOWN_ROMIMAGE 0xff
526
527
#define NX_P2_MN_ROMIMAGE_NAME "nxromimg.bin"
528
#define NX_P3_CT_ROMIMAGE_NAME "nx3fwct.bin"
529
#define NX_P3_MN_ROMIMAGE_NAME "nx3fwmn.bin"
530
#define NX_UNIFIED_ROMIMAGE_NAME "phanfw.bin"
531
#define NX_FLASH_ROMIMAGE_NAME "flash"
532
533
extern
char
netxen_nic_driver_name
[];
534
535
/* Number of status descriptors to handle per interrupt */
536
#define MAX_STATUS_HANDLE (64)
537
538
/*
539
* netxen_skb_frag{} is to contain mapping info for each SG list. This
540
* has to be freed when DMA is complete. This is part of netxen_tx_buffer{}.
541
*/
542
struct
netxen_skb_frag
{
543
u64
dma
;
544
u64
length
;
545
};
546
547
struct
netxen_recv_crb
{
548
u32
crb_rcv_producer
[
NUM_RCV_DESC_RINGS
];
549
u32
crb_sts_consumer
[
NUM_STS_DESC_RINGS
];
550
u32
sw_int_mask
[
NUM_STS_DESC_RINGS
];
551
};
552
553
/* Following defines are for the state of the buffers */
554
#define NETXEN_BUFFER_FREE 0
555
#define NETXEN_BUFFER_BUSY 1
556
557
/*
558
* There will be one netxen_buffer per skb packet. These will be
559
* used to save the dma info for pci_unmap_page()
560
*/
561
struct
netxen_cmd_buffer
{
562
struct
sk_buff
*
skb
;
563
struct
netxen_skb_frag
frag_array
[
MAX_SKB_FRAGS
+ 1];
564
u32
frag_count
;
565
};
566
567
/* In rx_buffer, we do not need multiple fragments as is a single buffer */
568
struct
netxen_rx_buffer
{
569
struct
list_head
list
;
570
struct
sk_buff
*
skb
;
571
u64
dma
;
572
u16
ref_handle
;
573
u16
state
;
574
};
575
576
/* Board types */
577
#define NETXEN_NIC_GBE 0x01
578
#define NETXEN_NIC_XGBE 0x02
579
580
/*
581
* One hardware_context{} per adapter
582
* contains interrupt info as well shared hardware info.
583
*/
584
struct
netxen_hardware_context
{
585
void
__iomem
*
pci_base0
;
586
void
__iomem
*
pci_base1
;
587
void
__iomem
*
pci_base2
;
588
void
__iomem
*
db_base
;
589
void
__iomem
*
ocm_win_crb
;
590
591
unsigned
long
db_len
;
592
unsigned
long
pci_len0
;
593
594
u32
ocm_win
;
595
u32
crb_win
;
596
597
rwlock_t
crb_lock
;
598
spinlock_t
mem_lock
;
599
600
u8
cut_through
;
601
u8
revision_id
;
602
u8
pci_func
;
603
u8
linkup
;
604
u16
port_type
;
605
u16
board_type
;
606
};
607
608
#define MINIMUM_ETHERNET_FRAME_SIZE 64
/* With FCS */
609
#define ETHERNET_FCS_SIZE 4
610
611
struct
netxen_adapter_stats
{
612
u64
xmitcalled
;
613
u64
xmitfinished
;
614
u64
rxdropped
;
615
u64
txdropped
;
616
u64
csummed
;
617
u64
rx_pkts
;
618
u64
lro_pkts
;
619
u64
rxbytes
;
620
u64
txbytes
;
621
};
622
623
/*
624
* Rcv Descriptor Context. One such per Rcv Descriptor. There may
625
* be one Rcv Descriptor for normal packets, one for jumbo and may be others.
626
*/
627
struct
nx_host_rds_ring
{
628
u32
producer
;
629
u32
num_desc
;
630
u32
dma_size
;
631
u32
skb_size
;
632
u32
flags
;
633
void
__iomem
*
crb_rcv_producer
;
634
struct
rcv_desc
*
desc_head
;
635
struct
netxen_rx_buffer
*
rx_buf_arr
;
636
struct
list_head
free_list
;
637
spinlock_t
lock
;
638
dma_addr_t
phys_addr
;
639
};
640
641
struct
nx_host_sds_ring
{
642
u32
consumer
;
643
u32
num_desc
;
644
void
__iomem
*
crb_sts_consumer
;
645
void
__iomem
*
crb_intr_mask
;
646
647
struct
status_desc
*
desc_head
;
648
struct
netxen_adapter
*
adapter
;
649
struct
napi_struct
napi
;
650
struct
list_head
free_list
[
NUM_RCV_DESC_RINGS
];
651
652
int
irq
;
653
654
dma_addr_t
phys_addr
;
655
char
name
[
IFNAMSIZ
+4];
656
};
657
658
struct
nx_host_tx_ring
{
659
u32
producer
;
660
__le32
*
hw_consumer
;
661
u32
sw_consumer
;
662
void
__iomem
*
crb_cmd_producer
;
663
void
__iomem
*
crb_cmd_consumer
;
664
u32
num_desc
;
665
666
struct
netdev_queue
*
txq
;
667
668
struct
netxen_cmd_buffer
*
cmd_buf_arr
;
669
struct
cmd_desc_type0
*
desc_head
;
670
dma_addr_t
phys_addr
;
671
};
672
673
/*
674
* Receive context. There is one such structure per instance of the
675
* receive processing. Any state information that is relevant to
676
* the receive, and is must be in this structure. The global data may be
677
* present elsewhere.
678
*/
679
struct
netxen_recv_context
{
680
u32
state
;
681
u16
context_id
;
682
u16
virt_port
;
683
684
struct
nx_host_rds_ring
*
rds_rings
;
685
struct
nx_host_sds_ring
*
sds_rings
;
686
687
struct
netxen_ring_ctx
*
hwctx
;
688
dma_addr_t
phys_addr
;
689
};
690
691
struct
_cdrp_cmd
{
692
u32
cmd
;
693
u32
arg1
;
694
u32
arg2
;
695
u32
arg3
;
696
};
697
698
struct
netxen_cmd_args
{
699
struct
_cdrp_cmd
req
;
700
struct
_cdrp_cmd
rsp
;
701
};
702
703
/* New HW context creation */
704
705
#define NX_OS_CRB_RETRY_COUNT 4000
706
#define NX_CDRP_SIGNATURE_MAKE(pcifn, version) \
707
(((pcifn) & 0xff) | (((version) & 0xff) << 8) | (0xcafe << 16))
708
709
#define NX_CDRP_CLEAR 0x00000000
710
#define NX_CDRP_CMD_BIT 0x80000000
711
712
/*
713
* All responses must have the NX_CDRP_CMD_BIT cleared
714
* in the crb NX_CDRP_CRB_OFFSET.
715
*/
716
#define NX_CDRP_FORM_RSP(rsp) (rsp)
717
#define NX_CDRP_IS_RSP(rsp) (((rsp) & NX_CDRP_CMD_BIT) == 0)
718
719
#define NX_CDRP_RSP_OK 0x00000001
720
#define NX_CDRP_RSP_FAIL 0x00000002
721
#define NX_CDRP_RSP_TIMEOUT 0x00000003
722
723
/*
724
* All commands must have the NX_CDRP_CMD_BIT set in
725
* the crb NX_CDRP_CRB_OFFSET.
726
*/
727
#define NX_CDRP_FORM_CMD(cmd) (NX_CDRP_CMD_BIT | (cmd))
728
#define NX_CDRP_IS_CMD(cmd) (((cmd) & NX_CDRP_CMD_BIT) != 0)
729
730
#define NX_CDRP_CMD_SUBMIT_CAPABILITIES 0x00000001
731
#define NX_CDRP_CMD_READ_MAX_RDS_PER_CTX 0x00000002
732
#define NX_CDRP_CMD_READ_MAX_SDS_PER_CTX 0x00000003
733
#define NX_CDRP_CMD_READ_MAX_RULES_PER_CTX 0x00000004
734
#define NX_CDRP_CMD_READ_MAX_RX_CTX 0x00000005
735
#define NX_CDRP_CMD_READ_MAX_TX_CTX 0x00000006
736
#define NX_CDRP_CMD_CREATE_RX_CTX 0x00000007
737
#define NX_CDRP_CMD_DESTROY_RX_CTX 0x00000008
738
#define NX_CDRP_CMD_CREATE_TX_CTX 0x00000009
739
#define NX_CDRP_CMD_DESTROY_TX_CTX 0x0000000a
740
#define NX_CDRP_CMD_SETUP_STATISTICS 0x0000000e
741
#define NX_CDRP_CMD_GET_STATISTICS 0x0000000f
742
#define NX_CDRP_CMD_DELETE_STATISTICS 0x00000010
743
#define NX_CDRP_CMD_SET_MTU 0x00000012
744
#define NX_CDRP_CMD_READ_PHY 0x00000013
745
#define NX_CDRP_CMD_WRITE_PHY 0x00000014
746
#define NX_CDRP_CMD_READ_HW_REG 0x00000015
747
#define NX_CDRP_CMD_GET_FLOW_CTL 0x00000016
748
#define NX_CDRP_CMD_SET_FLOW_CTL 0x00000017
749
#define NX_CDRP_CMD_READ_MAX_MTU 0x00000018
750
#define NX_CDRP_CMD_READ_MAX_LRO 0x00000019
751
#define NX_CDRP_CMD_CONFIGURE_TOE 0x0000001a
752
#define NX_CDRP_CMD_FUNC_ATTRIB 0x0000001b
753
#define NX_CDRP_CMD_READ_PEXQ_PARAMETERS 0x0000001c
754
#define NX_CDRP_CMD_GET_LIC_CAPABILITIES 0x0000001d
755
#define NX_CDRP_CMD_READ_MAX_LRO_PER_BOARD 0x0000001e
756
#define NX_CDRP_CMD_CONFIG_GBE_PORT 0x0000001f
757
#define NX_CDRP_CMD_MAX 0x00000020
758
759
#define NX_RCODE_SUCCESS 0
760
#define NX_RCODE_NO_HOST_MEM 1
761
#define NX_RCODE_NO_HOST_RESOURCE 2
762
#define NX_RCODE_NO_CARD_CRB 3
763
#define NX_RCODE_NO_CARD_MEM 4
764
#define NX_RCODE_NO_CARD_RESOURCE 5
765
#define NX_RCODE_INVALID_ARGS 6
766
#define NX_RCODE_INVALID_ACTION 7
767
#define NX_RCODE_INVALID_STATE 8
768
#define NX_RCODE_NOT_SUPPORTED 9
769
#define NX_RCODE_NOT_PERMITTED 10
770
#define NX_RCODE_NOT_READY 11
771
#define NX_RCODE_DOES_NOT_EXIST 12
772
#define NX_RCODE_ALREADY_EXISTS 13
773
#define NX_RCODE_BAD_SIGNATURE 14
774
#define NX_RCODE_CMD_NOT_IMPL 15
775
#define NX_RCODE_CMD_INVALID 16
776
#define NX_RCODE_TIMEOUT 17
777
#define NX_RCODE_CMD_FAILED 18
778
#define NX_RCODE_MAX_EXCEEDED 19
779
#define NX_RCODE_MAX 20
780
781
#define NX_DESTROY_CTX_RESET 0
782
#define NX_DESTROY_CTX_D3_RESET 1
783
#define NX_DESTROY_CTX_MAX 2
784
785
/*
786
* Capabilities
787
*/
788
#define NX_CAP_BIT(class, bit) (1 << bit)
789
#define NX_CAP0_LEGACY_CONTEXT NX_CAP_BIT(0, 0)
790
#define NX_CAP0_MULTI_CONTEXT NX_CAP_BIT(0, 1)
791
#define NX_CAP0_LEGACY_MN NX_CAP_BIT(0, 2)
792
#define NX_CAP0_LEGACY_MS NX_CAP_BIT(0, 3)
793
#define NX_CAP0_CUT_THROUGH NX_CAP_BIT(0, 4)
794
#define NX_CAP0_LRO NX_CAP_BIT(0, 5)
795
#define NX_CAP0_LSO NX_CAP_BIT(0, 6)
796
#define NX_CAP0_JUMBO_CONTIGUOUS NX_CAP_BIT(0, 7)
797
#define NX_CAP0_LRO_CONTIGUOUS NX_CAP_BIT(0, 8)
798
#define NX_CAP0_HW_LRO NX_CAP_BIT(0, 10)
799
#define NX_CAP0_HW_LRO_MSS NX_CAP_BIT(0, 21)
800
801
/*
802
* Context state
803
*/
804
#define NX_HOST_CTX_STATE_FREED 0
805
#define NX_HOST_CTX_STATE_ALLOCATED 1
806
#define NX_HOST_CTX_STATE_ACTIVE 2
807
#define NX_HOST_CTX_STATE_DISABLED 3
808
#define NX_HOST_CTX_STATE_QUIESCED 4
809
#define NX_HOST_CTX_STATE_MAX 5
810
811
/*
812
* Rx context
813
*/
814
815
typedef
struct
{
816
__le64
host_phys_addr
;
/* Ring base addr */
817
__le32
ring_size
;
/* Ring entries */
818
__le16
msi_index
;
819
__le16
rsvd
;
/* Padding */
820
}
nx_hostrq_sds_ring_t
;
821
822
typedef
struct
{
823
__le64
host_phys_addr
;
/* Ring base addr */
824
__le64
buff_size
;
/* Packet buffer size */
825
__le32
ring_size
;
/* Ring entries */
826
__le32
ring_kind
;
/* Class of ring */
827
}
nx_hostrq_rds_ring_t
;
828
829
typedef
struct
{
830
__le64
host_rsp_dma_addr
;
/* Response dma'd here */
831
__le32
capabilities
[4];
/* Flag bit vector */
832
__le32
host_int_crb_mode
;
/* Interrupt crb usage */
833
__le32
host_rds_crb_mode
;
/* RDS crb usage */
834
/* These ring offsets are relative to data[0] below */
835
__le32
rds_ring_offset
;
/* Offset to RDS config */
836
__le32
sds_ring_offset
;
/* Offset to SDS config */
837
__le16
num_rds_rings
;
/* Count of RDS rings */
838
__le16
num_sds_rings
;
/* Count of SDS rings */
839
__le16
rsvd1
;
/* Padding */
840
__le16
rsvd2
;
/* Padding */
841
u8
reserved
[128];
/* reserve space for future expansion*/
842
/* MUST BE 64-bit aligned.
843
The following is packed:
844
- N hostrq_rds_rings
845
- N hostrq_sds_rings */
846
char
data
[0];
847
}
nx_hostrq_rx_ctx_t
;
848
849
typedef
struct
{
850
__le32
host_producer_crb
;
/* Crb to use */
851
__le32
rsvd1
;
/* Padding */
852
}
nx_cardrsp_rds_ring_t
;
853
854
typedef
struct
{
855
__le32
host_consumer_crb
;
/* Crb to use */
856
__le32
interrupt_crb
;
/* Crb to use */
857
}
nx_cardrsp_sds_ring_t
;
858
859
typedef
struct
{
860
/* These ring offsets are relative to data[0] below */
861
__le32
rds_ring_offset
;
/* Offset to RDS config */
862
__le32
sds_ring_offset
;
/* Offset to SDS config */
863
__le32
host_ctx_state
;
/* Starting State */
864
__le32
num_fn_per_port
;
/* How many PCI fn share the port */
865
__le16
num_rds_rings
;
/* Count of RDS rings */
866
__le16
num_sds_rings
;
/* Count of SDS rings */
867
__le16
context_id
;
/* Handle for context */
868
u8
phys_port
;
/* Physical id of port */
869
u8
virt_port
;
/* Virtual/Logical id of port */
870
u8
reserved
[128];
/* save space for future expansion */
871
/* MUST BE 64-bit aligned.
872
The following is packed:
873
- N cardrsp_rds_rings
874
- N cardrs_sds_rings */
875
char
data
[0];
876
}
nx_cardrsp_rx_ctx_t
;
877
878
#define SIZEOF_HOSTRQ_RX(HOSTRQ_RX, rds_rings, sds_rings) \
879
(sizeof(HOSTRQ_RX) + \
880
(rds_rings)*(sizeof(nx_hostrq_rds_ring_t)) + \
881
(sds_rings)*(sizeof(nx_hostrq_sds_ring_t)))
882
883
#define SIZEOF_CARDRSP_RX(CARDRSP_RX, rds_rings, sds_rings) \
884
(sizeof(CARDRSP_RX) + \
885
(rds_rings)*(sizeof(nx_cardrsp_rds_ring_t)) + \
886
(sds_rings)*(sizeof(nx_cardrsp_sds_ring_t)))
887
888
/*
889
* Tx context
890
*/
891
892
typedef
struct
{
893
__le64
host_phys_addr
;
/* Ring base addr */
894
__le32
ring_size
;
/* Ring entries */
895
__le32
rsvd
;
/* Padding */
896
}
nx_hostrq_cds_ring_t
;
897
898
typedef
struct
{
899
__le64
host_rsp_dma_addr
;
/* Response dma'd here */
900
__le64
cmd_cons_dma_addr
;
/* */
901
__le64
dummy_dma_addr
;
/* */
902
__le32
capabilities
[4];
/* Flag bit vector */
903
__le32
host_int_crb_mode
;
/* Interrupt crb usage */
904
__le32
rsvd1
;
/* Padding */
905
__le16
rsvd2
;
/* Padding */
906
__le16
interrupt_ctl
;
907
__le16
msi_index
;
908
__le16
rsvd3
;
/* Padding */
909
nx_hostrq_cds_ring_t
cds_ring
;
/* Desc of cds ring */
910
u8
reserved
[128];
/* future expansion */
911
}
nx_hostrq_tx_ctx_t
;
912
913
typedef
struct
{
914
__le32
host_producer_crb
;
/* Crb to use */
915
__le32
interrupt_crb
;
/* Crb to use */
916
}
nx_cardrsp_cds_ring_t
;
917
918
typedef
struct
{
919
__le32
host_ctx_state
;
/* Starting state */
920
__le16
context_id
;
/* Handle for context */
921
u8
phys_port
;
/* Physical id of port */
922
u8
virt_port
;
/* Virtual/Logical id of port */
923
nx_cardrsp_cds_ring_t
cds_ring
;
/* Card cds settings */
924
u8
reserved
[128];
/* future expansion */
925
}
nx_cardrsp_tx_ctx_t
;
926
927
#define SIZEOF_HOSTRQ_TX(HOSTRQ_TX) (sizeof(HOSTRQ_TX))
928
#define SIZEOF_CARDRSP_TX(CARDRSP_TX) (sizeof(CARDRSP_TX))
929
930
/* CRB */
931
932
#define NX_HOST_RDS_CRB_MODE_UNIQUE 0
933
#define NX_HOST_RDS_CRB_MODE_SHARED 1
934
#define NX_HOST_RDS_CRB_MODE_CUSTOM 2
935
#define NX_HOST_RDS_CRB_MODE_MAX 3
936
937
#define NX_HOST_INT_CRB_MODE_UNIQUE 0
938
#define NX_HOST_INT_CRB_MODE_SHARED 1
939
#define NX_HOST_INT_CRB_MODE_NORX 2
940
#define NX_HOST_INT_CRB_MODE_NOTX 3
941
#define NX_HOST_INT_CRB_MODE_NORXTX 4
942
943
944
/* MAC */
945
946
#define MC_COUNT_P2 16
947
#define MC_COUNT_P3 38
948
949
#define NETXEN_MAC_NOOP 0
950
#define NETXEN_MAC_ADD 1
951
#define NETXEN_MAC_DEL 2
952
953
typedef
struct
nx_mac_list_s
{
954
struct
list_head
list
;
955
uint8_t
mac_addr
[
ETH_ALEN
+2];
956
}
nx_mac_list_t
;
957
958
struct
nx_vlan_ip_list
{
959
struct
list_head
list
;
960
__be32
ip_addr
;
961
};
962
963
/*
964
* Interrupt coalescing defaults. The defaults are for 1500 MTU. It is
965
* adjusted based on configured MTU.
966
*/
967
#define NETXEN_DEFAULT_INTR_COALESCE_RX_TIME_US 3
968
#define NETXEN_DEFAULT_INTR_COALESCE_RX_PACKETS 256
969
#define NETXEN_DEFAULT_INTR_COALESCE_TX_PACKETS 64
970
#define NETXEN_DEFAULT_INTR_COALESCE_TX_TIME_US 4
971
972
#define NETXEN_NIC_INTR_DEFAULT 0x04
973
974
typedef
union
{
975
struct
{
976
uint16_t
rx_packets
;
977
uint16_t
rx_time_us
;
978
uint16_t
tx_packets
;
979
uint16_t
tx_time_us
;
980
}
data
;
981
uint64_t
word
;
982
}
nx_nic_intr_coalesce_data_t
;
983
984
typedef
struct
{
985
uint16_t
stats_time_us
;
986
uint16_t
rate_sample_time
;
987
uint16_t
flags
;
988
uint16_t
rsvd_1
;
989
uint32_t
low_threshold
;
990
uint32_t
high_threshold
;
991
nx_nic_intr_coalesce_data_t
normal
;
992
nx_nic_intr_coalesce_data_t
low
;
993
nx_nic_intr_coalesce_data_t
high
;
994
nx_nic_intr_coalesce_data_t
irq
;
995
}
nx_nic_intr_coalesce_t
;
996
997
#define NX_HOST_REQUEST 0x13
998
#define NX_NIC_REQUEST 0x14
999
1000
#define NX_MAC_EVENT 0x1
1001
1002
#define NX_IP_UP 2
1003
#define NX_IP_DOWN 3
1004
1005
/*
1006
* Driver --> Firmware
1007
*/
1008
#define NX_NIC_H2C_OPCODE_START 0
1009
#define NX_NIC_H2C_OPCODE_CONFIG_RSS 1
1010
#define NX_NIC_H2C_OPCODE_CONFIG_RSS_TBL 2
1011
#define NX_NIC_H2C_OPCODE_CONFIG_INTR_COALESCE 3
1012
#define NX_NIC_H2C_OPCODE_CONFIG_LED 4
1013
#define NX_NIC_H2C_OPCODE_CONFIG_PROMISCUOUS 5
1014
#define NX_NIC_H2C_OPCODE_CONFIG_L2_MAC 6
1015
#define NX_NIC_H2C_OPCODE_LRO_REQUEST 7
1016
#define NX_NIC_H2C_OPCODE_GET_SNMP_STATS 8
1017
#define NX_NIC_H2C_OPCODE_PROXY_START_REQUEST 9
1018
#define NX_NIC_H2C_OPCODE_PROXY_STOP_REQUEST 10
1019
#define NX_NIC_H2C_OPCODE_PROXY_SET_MTU 11
1020
#define NX_NIC_H2C_OPCODE_PROXY_SET_VPORT_MISS_MODE 12
1021
#define NX_NIC_H2C_OPCODE_GET_FINGER_PRINT_REQUEST 13
1022
#define NX_NIC_H2C_OPCODE_INSTALL_LICENSE_REQUEST 14
1023
#define NX_NIC_H2C_OPCODE_GET_LICENSE_CAPABILITY_REQUEST 15
1024
#define NX_NIC_H2C_OPCODE_GET_NET_STATS 16
1025
#define NX_NIC_H2C_OPCODE_PROXY_UPDATE_P2V 17
1026
#define NX_NIC_H2C_OPCODE_CONFIG_IPADDR 18
1027
#define NX_NIC_H2C_OPCODE_CONFIG_LOOPBACK 19
1028
#define NX_NIC_H2C_OPCODE_PROXY_STOP_DONE 20
1029
#define NX_NIC_H2C_OPCODE_GET_LINKEVENT 21
1030
#define NX_NIC_C2C_OPCODE 22
1031
#define NX_NIC_H2C_OPCODE_CONFIG_BRIDGING 23
1032
#define NX_NIC_H2C_OPCODE_CONFIG_HW_LRO 24
1033
#define NX_NIC_H2C_OPCODE_LAST 25
1034
1035
/*
1036
* Firmware --> Driver
1037
*/
1038
1039
#define NX_NIC_C2H_OPCODE_START 128
1040
#define NX_NIC_C2H_OPCODE_CONFIG_RSS_RESPONSE 129
1041
#define NX_NIC_C2H_OPCODE_CONFIG_RSS_TBL_RESPONSE 130
1042
#define NX_NIC_C2H_OPCODE_CONFIG_MAC_RESPONSE 131
1043
#define NX_NIC_C2H_OPCODE_CONFIG_PROMISCUOUS_RESPONSE 132
1044
#define NX_NIC_C2H_OPCODE_CONFIG_L2_MAC_RESPONSE 133
1045
#define NX_NIC_C2H_OPCODE_LRO_DELETE_RESPONSE 134
1046
#define NX_NIC_C2H_OPCODE_LRO_ADD_FAILURE_RESPONSE 135
1047
#define NX_NIC_C2H_OPCODE_GET_SNMP_STATS 136
1048
#define NX_NIC_C2H_OPCODE_GET_FINGER_PRINT_REPLY 137
1049
#define NX_NIC_C2H_OPCODE_INSTALL_LICENSE_REPLY 138
1050
#define NX_NIC_C2H_OPCODE_GET_LICENSE_CAPABILITIES_REPLY 139
1051
#define NX_NIC_C2H_OPCODE_GET_NET_STATS_RESPONSE 140
1052
#define NX_NIC_C2H_OPCODE_GET_LINKEVENT_RESPONSE 141
1053
#define NX_NIC_C2H_OPCODE_LAST 142
1054
1055
#define VPORT_MISS_MODE_DROP 0
/* drop all unmatched */
1056
#define VPORT_MISS_MODE_ACCEPT_ALL 1
/* accept all packets */
1057
#define VPORT_MISS_MODE_ACCEPT_MULTI 2
/* accept unmatched multicast */
1058
1059
#define NX_NIC_LRO_REQUEST_FIRST 0
1060
#define NX_NIC_LRO_REQUEST_ADD_FLOW 1
1061
#define NX_NIC_LRO_REQUEST_DELETE_FLOW 2
1062
#define NX_NIC_LRO_REQUEST_TIMER 3
1063
#define NX_NIC_LRO_REQUEST_CLEANUP 4
1064
#define NX_NIC_LRO_REQUEST_ADD_FLOW_SCHEDULED 5
1065
#define NX_TOE_LRO_REQUEST_ADD_FLOW 6
1066
#define NX_TOE_LRO_REQUEST_ADD_FLOW_RESPONSE 7
1067
#define NX_TOE_LRO_REQUEST_DELETE_FLOW 8
1068
#define NX_TOE_LRO_REQUEST_DELETE_FLOW_RESPONSE 9
1069
#define NX_TOE_LRO_REQUEST_TIMER 10
1070
#define NX_NIC_LRO_REQUEST_LAST 11
1071
1072
#define NX_FW_CAPABILITY_LINK_NOTIFICATION (1 << 5)
1073
#define NX_FW_CAPABILITY_SWITCHING (1 << 6)
1074
#define NX_FW_CAPABILITY_PEXQ (1 << 7)
1075
#define NX_FW_CAPABILITY_BDG (1 << 8)
1076
#define NX_FW_CAPABILITY_FVLANTX (1 << 9)
1077
#define NX_FW_CAPABILITY_HW_LRO (1 << 10)
1078
#define NX_FW_CAPABILITY_GBE_LINK_CFG (1 << 11)
1079
#define NX_FW_CAPABILITY_MORE_CAPS (1 << 31)
1080
#define NX_FW_CAPABILITY_2_LRO_MAX_TCP_SEG (1 << 2)
1081
1082
/* module types */
1083
#define LINKEVENT_MODULE_NOT_PRESENT 1
1084
#define LINKEVENT_MODULE_OPTICAL_UNKNOWN 2
1085
#define LINKEVENT_MODULE_OPTICAL_SRLR 3
1086
#define LINKEVENT_MODULE_OPTICAL_LRM 4
1087
#define LINKEVENT_MODULE_OPTICAL_SFP_1G 5
1088
#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE 6
1089
#define LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN 7
1090
#define LINKEVENT_MODULE_TWINAX 8
1091
1092
#define LINKSPEED_10GBPS 10000
1093
#define LINKSPEED_1GBPS 1000
1094
#define LINKSPEED_100MBPS 100
1095
#define LINKSPEED_10MBPS 10
1096
1097
#define LINKSPEED_ENCODED_10MBPS 0
1098
#define LINKSPEED_ENCODED_100MBPS 1
1099
#define LINKSPEED_ENCODED_1GBPS 2
1100
1101
#define LINKEVENT_AUTONEG_DISABLED 0
1102
#define LINKEVENT_AUTONEG_ENABLED 1
1103
1104
#define LINKEVENT_HALF_DUPLEX 0
1105
#define LINKEVENT_FULL_DUPLEX 1
1106
1107
#define LINKEVENT_LINKSPEED_MBPS 0
1108
#define LINKEVENT_LINKSPEED_ENCODED 1
1109
1110
#define AUTO_FW_RESET_ENABLED 0xEF10AF12
1111
#define AUTO_FW_RESET_DISABLED 0xDCBAAF12
1112
1113
/* firmware response header:
1114
* 63:58 - message type
1115
* 57:56 - owner
1116
* 55:53 - desc count
1117
* 52:48 - reserved
1118
* 47:40 - completion id
1119
* 39:32 - opcode
1120
* 31:16 - error code
1121
* 15:00 - reserved
1122
*/
1123
#define netxen_get_nic_msgtype(msg_hdr) \
1124
((msg_hdr >> 58) & 0x3F)
1125
#define netxen_get_nic_msg_compid(msg_hdr) \
1126
((msg_hdr >> 40) & 0xFF)
1127
#define netxen_get_nic_msg_opcode(msg_hdr) \
1128
((msg_hdr >> 32) & 0xFF)
1129
#define netxen_get_nic_msg_errcode(msg_hdr) \
1130
((msg_hdr >> 16) & 0xFFFF)
1131
1132
typedef
struct
{
1133
union
{
1134
struct
{
1135
u64
hdr
;
1136
u64
body
[7];
1137
};
1138
u64
words[8];
1139
};
1140
}
nx_fw_msg_t
;
1141
1142
typedef
struct
{
1143
__le64
qhdr
;
1144
__le64
req_hdr
;
1145
__le64
words[6];
1146
}
nx_nic_req_t
;
1147
1148
typedef
struct
{
1149
u8
op
;
1150
u8
tag
;
1151
u8
mac_addr
[6];
1152
}
nx_mac_req_t
;
1153
1154
#define MAX_PENDING_DESC_BLOCK_SIZE 64
1155
1156
#define NETXEN_NIC_MSI_ENABLED 0x02
1157
#define NETXEN_NIC_MSIX_ENABLED 0x04
1158
#define NETXEN_NIC_LRO_ENABLED 0x08
1159
#define NETXEN_NIC_LRO_DISABLED 0x00
1160
#define NETXEN_NIC_BRIDGE_ENABLED 0X10
1161
#define NETXEN_NIC_DIAG_ENABLED 0x20
1162
#define NETXEN_FW_RESET_OWNER 0x40
1163
#define NETXEN_FW_MSS_CAP 0x80
1164
#define NETXEN_IS_MSI_FAMILY(adapter) \
1165
((adapter)->flags & (NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED))
1166
1167
#define MSIX_ENTRIES_PER_ADAPTER NUM_STS_DESC_RINGS
1168
#define NETXEN_MSIX_TBL_SPACE 8192
1169
#define NETXEN_PCI_REG_MSIX_TBL 0x44
1170
1171
#define NETXEN_DB_MAPSIZE_BYTES 0x1000
1172
1173
#define NETXEN_NETDEV_WEIGHT 128
1174
#define NETXEN_ADAPTER_UP_MAGIC 777
1175
#define NETXEN_NIC_PEG_TUNE 0
1176
1177
#define __NX_FW_ATTACHED 0
1178
#define __NX_DEV_UP 1
1179
#define __NX_RESETTING 2
1180
1181
/* Mini Coredump FW supported version */
1182
#define NX_MD_SUPPORT_MAJOR 4
1183
#define NX_MD_SUPPORT_MINOR 0
1184
#define NX_MD_SUPPORT_SUBVERSION 579
1185
1186
#define LSW(x) ((uint16_t)(x))
1187
#define LSD(x) ((uint32_t)((uint64_t)(x)))
1188
#define MSD(x) ((uint32_t)((((uint64_t)(x)) >> 16) >> 16))
1189
1190
/* Mini Coredump mask level */
1191
#define NX_DUMP_MASK_MIN 0x03
1192
#define NX_DUMP_MASK_DEF 0x1f
1193
#define NX_DUMP_MASK_MAX 0xff
1194
1195
/* Mini Coredump CDRP commands */
1196
#define NX_CDRP_CMD_TEMP_SIZE 0x0000002f
1197
#define NX_CDRP_CMD_GET_TEMP_HDR 0x00000030
1198
1199
1200
#define NX_DUMP_STATE_ARRAY_LEN 16
1201
#define NX_DUMP_CAP_SIZE_ARRAY_LEN 8
1202
1203
/* Mini Coredump sysfs entries flags*/
1204
#define NX_FORCE_FW_DUMP_KEY 0xdeadfeed
1205
#define NX_ENABLE_FW_DUMP 0xaddfeed
1206
#define NX_DISABLE_FW_DUMP 0xbadfeed
1207
#define NX_FORCE_FW_RESET 0xdeaddead
1208
1209
1210
/* Fw dump levels */
1211
static
const
u32
FW_DUMP_LEVELS[] = { 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff };
1212
1213
/* Flash read/write address */
1214
#define NX_FW_DUMP_REG1 0x00130060
1215
#define NX_FW_DUMP_REG2 0x001e0000
1216
#define NX_FLASH_SEM2_LK 0x0013C010
1217
#define NX_FLASH_SEM2_ULK 0x0013C014
1218
#define NX_FLASH_LOCK_ID 0x001B2100
1219
#define FLASH_ROM_WINDOW 0x42110030
1220
#define FLASH_ROM_DATA 0x42150000
1221
1222
/* Mini Coredump register read/write routine */
1223
#define NX_RD_DUMP_REG(addr, bar0, data) do { \
1224
writel((addr & 0xFFFF0000), (void __iomem *) (bar0 + \
1225
NX_FW_DUMP_REG1)); \
1226
readl((void __iomem *) (bar0 + NX_FW_DUMP_REG1)); \
1227
*data = readl((void __iomem *) (bar0 + NX_FW_DUMP_REG2 + \
1228
LSW(addr))); \
1229
} while (0)
1230
1231
#define NX_WR_DUMP_REG(addr, bar0, data) do { \
1232
writel((addr & 0xFFFF0000), (void __iomem *) (bar0 + \
1233
NX_FW_DUMP_REG1)); \
1234
readl((void __iomem *) (bar0 + NX_FW_DUMP_REG1)); \
1235
writel(data, (void __iomem *) (bar0 + NX_FW_DUMP_REG2 + LSW(addr)));\
1236
readl((void __iomem *) (bar0 + NX_FW_DUMP_REG2 + LSW(addr))); \
1237
} while (0)
1238
1239
1240
/*
1241
Entry Type Defines
1242
*/
1243
1244
#define RDNOP 0
1245
#define RDCRB 1
1246
#define RDMUX 2
1247
#define QUEUE 3
1248
#define BOARD 4
1249
#define RDSRE 5
1250
#define RDOCM 6
1251
#define PREGS 7
1252
#define L1DTG 8
1253
#define L1ITG 9
1254
#define CACHE 10
1255
1256
#define L1DAT 11
1257
#define L1INS 12
1258
#define RDSTK 13
1259
#define RDCON 14
1260
1261
#define L2DTG 21
1262
#define L2ITG 22
1263
#define L2DAT 23
1264
#define L2INS 24
1265
#define RDOC3 25
1266
1267
#define MEMBK 32
1268
1269
#define RDROM 71
1270
#define RDMEM 72
1271
#define RDMN 73
1272
1273
#define INFOR 81
1274
#define CNTRL 98
1275
1276
#define TLHDR 99
1277
#define RDEND 255
1278
1279
#define PRIMQ 103
1280
#define SQG2Q 104
1281
#define SQG3Q 105
1282
1283
/*
1284
* Opcodes for Control Entries.
1285
* These Flags are bit fields.
1286
*/
1287
#define NX_DUMP_WCRB 0x01
1288
#define NX_DUMP_RWCRB 0x02
1289
#define NX_DUMP_ANDCRB 0x04
1290
#define NX_DUMP_ORCRB 0x08
1291
#define NX_DUMP_POLLCRB 0x10
1292
#define NX_DUMP_RD_SAVE 0x20
1293
#define NX_DUMP_WRT_SAVED 0x40
1294
#define NX_DUMP_MOD_SAVE_ST 0x80
1295
1296
/* Driver Flags */
1297
#define NX_DUMP_SKIP 0x80
/* driver skipped this entry */
1298
#define NX_DUMP_SIZE_ERR 0x40
/*entry size vs capture size mismatch*/
1299
1300
#define NX_PCI_READ_32(ADDR) readl((ADDR))
1301
#define NX_PCI_WRITE_32(DATA, ADDR) writel(DATA, (ADDR))
1302
1303
1304
1305
struct
netxen_minidump
{
1306
u32
pos
;
/* position in the dump buffer */
1307
u8
fw_supports_md
;
/* FW supports Mini cordump */
1308
u8
has_valid_dump
;
/* indicates valid dump */
1309
u8
md_capture_mask
;
/* driver capture mask */
1310
u8
md_enabled
;
/* Turn Mini Coredump on/off */
1311
u32
md_dump_size
;
/* Total FW Mini Coredump size */
1312
u32
md_capture_size
;
/* FW dump capture size */
1313
u32
md_template_size
;
/* FW template size */
1314
u32
md_template_ver
;
/* FW template version */
1315
u64
md_timestamp
;
/* FW Mini dump timestamp */
1316
void
*
md_template
;
/* FW template will be stored */
1317
void
*
md_capture_buff
;
/* FW dump will be stored */
1318
};
1319
1320
1321
1322
struct
netxen_minidump_template_hdr
{
1323
u32
entry_type
;
1324
u32
first_entry_offset
;
1325
u32
size_of_template
;
1326
u32
capture_mask
;
1327
u32
num_of_entries
;
1328
u32
version
;
1329
u32
driver_timestamp
;
1330
u32
checksum
;
1331
u32
driver_capture_mask
;
1332
u32
driver_info_word2
;
1333
u32
driver_info_word3
;
1334
u32
driver_info_word4
;
1335
u32
saved_state_array
[
NX_DUMP_STATE_ARRAY_LEN
];
1336
u32
capture_size_array
[
NX_DUMP_CAP_SIZE_ARRAY_LEN
];
1337
u32
rsvd
[0];
1338
};
1339
1340
/* Common Entry Header: Common to All Entry Types */
1341
/*
1342
* Driver Code is for driver to write some info about the entry.
1343
* Currently not used.
1344
*/
1345
1346
struct
netxen_common_entry_hdr
{
1347
u32
entry_type
;
1348
u32
entry_size
;
1349
u32
entry_capture_size
;
1350
union
{
1351
struct
{
1352
u8
entry_capture_mask
;
1353
u8
entry_code
;
1354
u8
driver_code
;
1355
u8
driver_flags
;
1356
};
1357
u32
entry_ctrl_word
;
1358
};
1359
};
1360
1361
1362
/* Generic Entry Including Header */
1363
struct
netxen_minidump_entry
{
1364
struct
netxen_common_entry_hdr
hdr
;
1365
u32
entry_data00
;
1366
u32
entry_data01
;
1367
u32
entry_data02
;
1368
u32
entry_data03
;
1369
u32
entry_data04
;
1370
u32
entry_data05
;
1371
u32
entry_data06
;
1372
u32
entry_data07
;
1373
};
1374
1375
/* Read ROM Header */
1376
struct
netxen_minidump_entry_rdrom
{
1377
struct
netxen_common_entry_hdr
h
;
1378
union
{
1379
struct
{
1380
u32
select_addr_reg
;
1381
};
1382
u32
rsvd_0
;
1383
};
1384
union
{
1385
struct
{
1386
u8
addr_stride
;
1387
u8
addr_cnt
;
1388
u16
data_size
;
1389
};
1390
u32
rsvd_1
;
1391
};
1392
union
{
1393
struct
{
1394
u32
op_count
;
1395
};
1396
u32
rsvd_2
;
1397
};
1398
union
{
1399
struct
{
1400
u32
read_addr_reg
;
1401
};
1402
u32
rsvd_3
;
1403
};
1404
union
{
1405
struct
{
1406
u32
write_mask
;
1407
};
1408
u32
rsvd_4
;
1409
};
1410
union
{
1411
struct
{
1412
u32
read_mask
;
1413
};
1414
u32
rsvd_5
;
1415
};
1416
u32
read_addr
;
1417
u32
read_data_size
;
1418
};
1419
1420
1421
/* Read CRB and Control Entry Header */
1422
struct
netxen_minidump_entry_crb
{
1423
struct
netxen_common_entry_hdr
h
;
1424
u32
addr
;
1425
union
{
1426
struct
{
1427
u8
addr_stride
;
1428
u8
state_index_a
;
1429
u16
poll_timeout
;
1430
};
1431
u32
addr_cntrl
;
1432
};
1433
u32
data_size
;
1434
u32
op_count
;
1435
union
{
1436
struct
{
1437
u8
opcode
;
1438
u8
state_index_v
;
1439
u8
shl
;
1440
u8
shr
;
1441
};
1442
u32
control_value
;
1443
};
1444
u32
value_1
;
1445
u32
value_2
;
1446
u32
value_3
;
1447
};
1448
1449
/* Read Memory and MN Header */
1450
struct
netxen_minidump_entry_rdmem
{
1451
struct
netxen_common_entry_hdr
h
;
1452
union
{
1453
struct
{
1454
u32
select_addr_reg
;
1455
};
1456
u32
rsvd_0
;
1457
};
1458
union
{
1459
struct
{
1460
u8
addr_stride
;
1461
u8
addr_cnt
;
1462
u16
data_size
;
1463
};
1464
u32
rsvd_1
;
1465
};
1466
union
{
1467
struct
{
1468
u32
op_count
;
1469
};
1470
u32
rsvd_2
;
1471
};
1472
union
{
1473
struct
{
1474
u32
read_addr_reg
;
1475
};
1476
u32
rsvd_3
;
1477
};
1478
union
{
1479
struct
{
1480
u32
cntrl_addr_reg
;
1481
};
1482
u32
rsvd_4
;
1483
};
1484
union
{
1485
struct
{
1486
u8
wr_byte0
;
1487
u8
wr_byte1
;
1488
u8
poll_mask
;
1489
u8
poll_cnt
;
1490
};
1491
u32
rsvd_5
;
1492
};
1493
u32
read_addr
;
1494
u32
read_data_size
;
1495
};
1496
1497
/* Read Cache L1 and L2 Header */
1498
struct
netxen_minidump_entry_cache
{
1499
struct
netxen_common_entry_hdr
h
;
1500
u32
tag_reg_addr
;
1501
union
{
1502
struct
{
1503
u16
tag_value_stride
;
1504
u16
init_tag_value
;
1505
};
1506
u32
select_addr_cntrl
;
1507
};
1508
u32
data_size
;
1509
u32
op_count
;
1510
u32
control_addr
;
1511
union
{
1512
struct
{
1513
u16
write_value
;
1514
u8
poll_mask
;
1515
u8
poll_wait
;
1516
};
1517
u32
control_value
;
1518
};
1519
u32
read_addr
;
1520
union
{
1521
struct
{
1522
u8
read_addr_stride
;
1523
u8
read_addr_cnt
;
1524
u16
rsvd_1
;
1525
};
1526
u32
read_addr_cntrl
;
1527
};
1528
};
1529
1530
/* Read OCM Header */
1531
struct
netxen_minidump_entry_rdocm
{
1532
struct
netxen_common_entry_hdr
h
;
1533
u32
rsvd_0
;
1534
union
{
1535
struct
{
1536
u32
rsvd_1
;
1537
};
1538
u32
select_addr_cntrl
;
1539
};
1540
u32
data_size
;
1541
u32
op_count
;
1542
u32
rsvd_2
;
1543
u32
rsvd_3
;
1544
u32
read_addr
;
1545
union
{
1546
struct
{
1547
u32
read_addr_stride
;
1548
};
1549
u32
read_addr_cntrl
;
1550
};
1551
};
1552
1553
/* Read MUX Header */
1554
struct
netxen_minidump_entry_mux
{
1555
struct
netxen_common_entry_hdr
h
;
1556
u32
select_addr
;
1557
union
{
1558
struct
{
1559
u32
rsvd_0
;
1560
};
1561
u32
select_addr_cntrl
;
1562
};
1563
u32
data_size
;
1564
u32
op_count
;
1565
u32
select_value
;
1566
u32
select_value_stride
;
1567
u32
read_addr
;
1568
u32
rsvd_1
;
1569
};
1570
1571
/* Read Queue Header */
1572
struct
netxen_minidump_entry_queue
{
1573
struct
netxen_common_entry_hdr
h
;
1574
u32
select_addr
;
1575
union
{
1576
struct
{
1577
u16
queue_id_stride
;
1578
u16
rsvd_0
;
1579
};
1580
u32
select_addr_cntrl
;
1581
};
1582
u32
data_size
;
1583
u32
op_count
;
1584
u32
rsvd_1
;
1585
u32
rsvd_2
;
1586
u32
read_addr
;
1587
union
{
1588
struct
{
1589
u8
read_addr_stride
;
1590
u8
read_addr_cnt
;
1591
u16
rsvd_3
;
1592
};
1593
u32
read_addr_cntrl
;
1594
};
1595
};
1596
1597
struct
netxen_dummy_dma
{
1598
void
*
addr
;
1599
dma_addr_t
phys_addr
;
1600
};
1601
1602
struct
netxen_adapter
{
1603
struct
netxen_hardware_context
ahw
;
1604
1605
struct
net_device
*
netdev
;
1606
struct
pci_dev
*
pdev
;
1607
struct
list_head
mac_list
;
1608
struct
list_head
vlan_ip_list
;
1609
1610
spinlock_t
tx_clean_lock
;
1611
1612
u16
num_txd
;
1613
u16
num_rxd
;
1614
u16
num_jumbo_rxd
;
1615
u16
num_lro_rxd
;
1616
1617
u8
max_rds_rings
;
1618
u8
max_sds_rings
;
1619
u8
driver_mismatch
;
1620
u8
msix_supported
;
1621
u8
__pad
;
1622
u8
pci_using_dac
;
1623
u8
portnum
;
1624
u8
physical_port
;
1625
1626
u8
mc_enabled
;
1627
u8
max_mc_count
;
1628
u8
rss_supported
;
1629
u8
link_changed
;
1630
u8
fw_wait_cnt
;
1631
u8
fw_fail_cnt
;
1632
u8
tx_timeo_cnt
;
1633
u8
need_fw_reset
;
1634
1635
u8
has_link_events
;
1636
u8
fw_type
;
1637
u16
tx_context_id
;
1638
u16
mtu
;
1639
u16
is_up
;
1640
1641
u16
link_speed
;
1642
u16
link_duplex
;
1643
u16
link_autoneg
;
1644
u16
module_type
;
1645
1646
u32
capabilities
;
1647
u32
flags
;
1648
u32
irq
;
1649
u32
temp
;
1650
1651
u32
int_vec_bit
;
1652
u32
heartbit
;
1653
1654
u8
mac_addr
[
ETH_ALEN
];
1655
1656
struct
netxen_adapter_stats
stats
;
1657
1658
struct
netxen_recv_context
recv_ctx
;
1659
struct
nx_host_tx_ring
*
tx_ring
;
1660
1661
int
(*
macaddr_set
) (
struct
netxen_adapter
*,
u8
*);
1662
int
(*
set_mtu
) (
struct
netxen_adapter
*,
int
);
1663
int
(*
set_promisc
) (
struct
netxen_adapter
*,
u32
);
1664
void
(*
set_multi
) (
struct
net_device
*);
1665
int
(*
phy_read
) (
struct
netxen_adapter
*,
u32
reg
,
u32
*);
1666
int
(*
phy_write
) (
struct
netxen_adapter
*,
u32
reg
,
u32
val
);
1667
int
(*
init_port
) (
struct
netxen_adapter
*,
int
);
1668
int
(*
stop_port
) (
struct
netxen_adapter
*);
1669
1670
u32
(*
crb_read
)(
struct
netxen_adapter
*,
ulong
);
1671
int
(*
crb_write
)(
struct
netxen_adapter
*,
ulong
,
u32
);
1672
1673
int
(*
pci_mem_read
)(
struct
netxen_adapter
*,
u64
,
u64
*);
1674
int
(*
pci_mem_write
)(
struct
netxen_adapter
*,
u64
,
u64
);
1675
1676
int
(*
pci_set_window
)(
struct
netxen_adapter
*,
u64
,
u32
*);
1677
1678
u32
(*
io_read
)(
struct
netxen_adapter
*,
void
__iomem
*);
1679
void
(*
io_write
)(
struct
netxen_adapter
*,
void
__iomem
*,
u32
);
1680
1681
void
__iomem
*
tgt_mask_reg
;
1682
void
__iomem
*
pci_int_reg
;
1683
void
__iomem
*
tgt_status_reg
;
1684
void
__iomem
*
crb_int_state_reg
;
1685
void
__iomem
*
isr_int_vec
;
1686
1687
struct
msix_entry
msix_entries
[
MSIX_ENTRIES_PER_ADAPTER
];
1688
1689
struct
netxen_dummy_dma
dummy_dma
;
1690
1691
struct
delayed_work
fw_work
;
1692
1693
struct
work_struct
tx_timeout_task
;
1694
1695
nx_nic_intr_coalesce_t
coal
;
1696
1697
unsigned
long
state
;
1698
__le32
file_prd_off
;
/*File fw product offset*/
1699
u32
fw_version
;
1700
const
struct
firmware
*
fw
;
1701
struct
netxen_minidump
mdump
;
/* mdump ptr */
1702
int
fw_mdump_rdy
;
/* for mdump ready */
1703
};
1704
1705
int
nx_fw_cmd_query_phy
(
struct
netxen_adapter
*
adapter
,
u32
reg
,
u32
*
val
);
1706
int
nx_fw_cmd_set_phy
(
struct
netxen_adapter
*
adapter
,
u32
reg
,
u32
val
);
1707
1708
#define NXRD32(adapter, off) \
1709
(adapter->crb_read(adapter, off))
1710
#define NXWR32(adapter, off, val) \
1711
(adapter->crb_write(adapter, off, val))
1712
#define NXRDIO(adapter, addr) \
1713
(adapter->io_read(adapter, addr))
1714
#define NXWRIO(adapter, addr, val) \
1715
(adapter->io_write(adapter, addr, val))
1716
1717
int
netxen_pcie_sem_lock
(
struct
netxen_adapter
*,
int
,
u32
);
1718
void
netxen_pcie_sem_unlock
(
struct
netxen_adapter
*,
int
);
1719
1720
#define netxen_rom_lock(a) \
1721
netxen_pcie_sem_lock((a), 2, NETXEN_ROM_LOCK_ID)
1722
#define netxen_rom_unlock(a) \
1723
netxen_pcie_sem_unlock((a), 2)
1724
#define netxen_phy_lock(a) \
1725
netxen_pcie_sem_lock((a), 3, NETXEN_PHY_LOCK_ID)
1726
#define netxen_phy_unlock(a) \
1727
netxen_pcie_sem_unlock((a), 3)
1728
#define netxen_api_lock(a) \
1729
netxen_pcie_sem_lock((a), 5, 0)
1730
#define netxen_api_unlock(a) \
1731
netxen_pcie_sem_unlock((a), 5)
1732
#define netxen_sw_lock(a) \
1733
netxen_pcie_sem_lock((a), 6, 0)
1734
#define netxen_sw_unlock(a) \
1735
netxen_pcie_sem_unlock((a), 6)
1736
#define crb_win_lock(a) \
1737
netxen_pcie_sem_lock((a), 7, NETXEN_CRB_WIN_LOCK_ID)
1738
#define crb_win_unlock(a) \
1739
netxen_pcie_sem_unlock((a), 7)
1740
1741
int
netxen_nic_get_board_info
(
struct
netxen_adapter
*
adapter
);
1742
int
netxen_nic_wol_supported
(
struct
netxen_adapter
*
adapter
);
1743
1744
/* Functions from netxen_nic_init.c */
1745
int
netxen_init_dummy_dma
(
struct
netxen_adapter
*
adapter
);
1746
void
netxen_free_dummy_dma
(
struct
netxen_adapter
*
adapter
);
1747
1748
int
netxen_check_flash_fw_compatibility
(
struct
netxen_adapter
*
adapter
);
1749
int
netxen_phantom_init
(
struct
netxen_adapter
*
adapter
,
int
pegtune_val);
1750
int
netxen_load_firmware
(
struct
netxen_adapter
*
adapter
);
1751
int
netxen_need_fw_reset
(
struct
netxen_adapter
*
adapter
);
1752
void
netxen_request_firmware
(
struct
netxen_adapter
*
adapter
);
1753
void
netxen_release_firmware
(
struct
netxen_adapter
*
adapter
);
1754
int
netxen_pinit_from_rom
(
struct
netxen_adapter
*
adapter
);
1755
1756
int
netxen_rom_fast_read
(
struct
netxen_adapter
*
adapter
,
int
addr
,
int
*valp);
1757
int
netxen_rom_fast_read_words
(
struct
netxen_adapter
*
adapter
,
int
addr
,
1758
u8
*
bytes
,
size_t
size
);
1759
int
netxen_rom_fast_write_words
(
struct
netxen_adapter
*
adapter
,
int
addr
,
1760
u8
*
bytes
,
size_t
size
);
1761
int
netxen_flash_unlock
(
struct
netxen_adapter
*
adapter
);
1762
int
netxen_backup_crbinit
(
struct
netxen_adapter
*
adapter
);
1763
int
netxen_flash_erase_secondary
(
struct
netxen_adapter
*
adapter
);
1764
int
netxen_flash_erase_primary
(
struct
netxen_adapter
*
adapter
);
1765
void
netxen_halt_pegs
(
struct
netxen_adapter
*
adapter
);
1766
1767
int
netxen_rom_se
(
struct
netxen_adapter
*
adapter
,
int
addr
);
1768
1769
int
netxen_alloc_sw_resources
(
struct
netxen_adapter
*
adapter
);
1770
void
netxen_free_sw_resources
(
struct
netxen_adapter
*
adapter
);
1771
1772
void
netxen_setup_hwops
(
struct
netxen_adapter
*
adapter
);
1773
void
__iomem
*
netxen_get_ioaddr
(
struct
netxen_adapter
*,
u32
);
1774
1775
int
netxen_alloc_hw_resources
(
struct
netxen_adapter
*
adapter
);
1776
void
netxen_free_hw_resources
(
struct
netxen_adapter
*
adapter
);
1777
1778
void
netxen_release_rx_buffers
(
struct
netxen_adapter
*
adapter
);
1779
void
netxen_release_tx_buffers
(
struct
netxen_adapter
*
adapter
);
1780
1781
int
netxen_init_firmware
(
struct
netxen_adapter
*
adapter
);
1782
void
netxen_nic_clear_stats
(
struct
netxen_adapter
*
adapter
);
1783
void
netxen_watchdog_task
(
struct
work_struct
*
work
);
1784
void
netxen_post_rx_buffers
(
struct
netxen_adapter
*
adapter
,
u32
ringid,
1785
struct
nx_host_rds_ring
*rds_ring);
1786
int
netxen_process_cmd_ring
(
struct
netxen_adapter
*
adapter
);
1787
int
netxen_process_rcv_ring
(
struct
nx_host_sds_ring
*sds_ring,
int
max
);
1788
1789
void
netxen_p3_free_mac_list
(
struct
netxen_adapter
*
adapter
);
1790
int
netxen_config_intr_coalesce
(
struct
netxen_adapter
*
adapter
);
1791
int
netxen_config_rss
(
struct
netxen_adapter
*
adapter
,
int
enable
);
1792
int
netxen_config_ipaddr
(
struct
netxen_adapter
*
adapter
,
__be32
ip
,
int
cmd
);
1793
int
netxen_linkevent_request
(
struct
netxen_adapter
*
adapter
,
int
enable
);
1794
void
netxen_advert_link_change
(
struct
netxen_adapter
*
adapter
,
int
linkup);
1795
void
netxen_pci_camqm_read_2M
(
struct
netxen_adapter
*,
u64
,
u64
*);
1796
void
netxen_pci_camqm_write_2M
(
struct
netxen_adapter
*,
u64
,
u64
);
1797
1798
int
nx_fw_cmd_set_gbe_port
(
struct
netxen_adapter
*
adapter
,
1799
u32
speed,
u32
duplex
,
u32
autoneg
);
1800
int
nx_fw_cmd_set_mtu
(
struct
netxen_adapter
*
adapter
,
int
mtu);
1801
int
netxen_nic_change_mtu
(
struct
net_device
*netdev,
int
new_mtu);
1802
int
netxen_config_hw_lro
(
struct
netxen_adapter
*
adapter
,
int
enable
);
1803
int
netxen_config_bridged_mode
(
struct
netxen_adapter
*
adapter
,
int
enable
);
1804
int
netxen_send_lro_cleanup
(
struct
netxen_adapter
*
adapter
);
1805
int
netxen_setup_minidump
(
struct
netxen_adapter
*
adapter
);
1806
void
netxen_dump_fw
(
struct
netxen_adapter
*
adapter
);
1807
void
netxen_nic_update_cmd_producer
(
struct
netxen_adapter
*
adapter
,
1808
struct
nx_host_tx_ring
*
tx_ring
);
1809
1810
/* Functions from netxen_nic_main.c */
1811
int
netxen_nic_reset_context
(
struct
netxen_adapter
*);
1812
1813
int
nx_dev_request_reset
(
struct
netxen_adapter
*
adapter
);
1814
1815
/*
1816
* NetXen Board information
1817
*/
1818
1819
#define NETXEN_MAX_SHORT_NAME 32
1820
struct
netxen_brdinfo
{
1821
int
brdtype
;
/* type of board */
1822
long
ports
;
/* max no of physical ports */
1823
char
short_name
[
NETXEN_MAX_SHORT_NAME
];
1824
};
1825
1826
struct
netxen_dimm_cfg
{
1827
u8
presence
;
1828
u8
mem_type
;
1829
u8
dimm_type
;
1830
u32
size
;
1831
};
1832
1833
static
const
struct
netxen_brdinfo
netxen_boards[] = {
1834
{
NETXEN_BRDTYPE_P2_SB31_10G_CX4
, 1,
"XGb CX4"
},
1835
{
NETXEN_BRDTYPE_P2_SB31_10G_HMEZ
, 1,
"XGb HMEZ"
},
1836
{
NETXEN_BRDTYPE_P2_SB31_10G_IMEZ
, 2,
"XGb IMEZ"
},
1837
{
NETXEN_BRDTYPE_P2_SB31_10G
, 1,
"XGb XFP"
},
1838
{
NETXEN_BRDTYPE_P2_SB35_4G
, 4,
"Quad Gb"
},
1839
{
NETXEN_BRDTYPE_P2_SB31_2G
, 2,
"Dual Gb"
},
1840
{
NETXEN_BRDTYPE_P3_REF_QG
, 4,
"Reference Quad Gig "
},
1841
{
NETXEN_BRDTYPE_P3_HMEZ
, 2,
"Dual XGb HMEZ"
},
1842
{
NETXEN_BRDTYPE_P3_10G_CX4_LP
, 2,
"Dual XGb CX4 LP"
},
1843
{
NETXEN_BRDTYPE_P3_4_GB
, 4,
"Quad Gig LP"
},
1844
{
NETXEN_BRDTYPE_P3_IMEZ
, 2,
"Dual XGb IMEZ"
},
1845
{
NETXEN_BRDTYPE_P3_10G_SFP_PLUS
, 2,
"Dual XGb SFP+ LP"
},
1846
{
NETXEN_BRDTYPE_P3_10000_BASE_T
, 1,
"XGB 10G BaseT LP"
},
1847
{
NETXEN_BRDTYPE_P3_XG_LOM
, 2,
"Dual XGb LOM"
},
1848
{
NETXEN_BRDTYPE_P3_4_GB_MM
, 4,
"NX3031 Gigabit Ethernet"
},
1849
{
NETXEN_BRDTYPE_P3_10G_SFP_CT
, 2,
"NX3031 10 Gigabit Ethernet"
},
1850
{
NETXEN_BRDTYPE_P3_10G_SFP_QT
, 2,
"Quanta Dual XGb SFP+"
},
1851
{
NETXEN_BRDTYPE_P3_10G_CX4
, 2,
"Reference Dual CX4 Option"
},
1852
{
NETXEN_BRDTYPE_P3_10G_XFP
, 1,
"Reference Single XFP Option"
}
1853
};
1854
1855
#define NUM_SUPPORTED_BOARDS ARRAY_SIZE(netxen_boards)
1856
1857
static
inline
void
get_brd_name_by_type(
u32
type
,
char
*
name
)
1858
{
1859
int
i
, found = 0;
1860
for
(i = 0; i <
NUM_SUPPORTED_BOARDS
; ++
i
) {
1861
if
(netxen_boards[i].
brdtype
== type) {
1862
strcpy
(name, netxen_boards[i].
short_name
);
1863
found = 1;
1864
break
;
1865
}
1866
1867
}
1868
if
(!found)
1869
name =
"Unknown"
;
1870
}
1871
1872
static
inline
u32
netxen_tx_avail(
struct
nx_host_tx_ring
*
tx_ring
)
1873
{
1874
smp_mb
();
1875
return
find_diff_among
(tx_ring->
producer
,
1876
tx_ring->
sw_consumer
, tx_ring->
num_desc
);
1877
1878
}
1879
1880
int
netxen_get_flash_mac_addr
(
struct
netxen_adapter
*
adapter
,
u64
*
mac
);
1881
int
netxen_p3_get_mac_addr
(
struct
netxen_adapter
*
adapter
,
u64
*
mac
);
1882
extern
void
netxen_change_ringparam
(
struct
netxen_adapter
*
adapter
);
1883
extern
int
netxen_rom_fast_read
(
struct
netxen_adapter
*
adapter
,
int
addr
,
1884
int
*valp);
1885
1886
extern
const
struct
ethtool_ops
netxen_nic_ethtool_ops
;
1887
1888
#endif
/* __NETXEN_NIC_H_ */
Generated on Thu Jan 10 2013 14:04:11 for Linux Kernel by
1.8.2