xref: /linux/drivers/net/ethernet/neterion/s2io.c (revision 48dea9a700c8728cc31a1dd44588b97578de86ee)
1 /************************************************************************
2  * s2io.c: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
3  * Copyright(c) 2002-2010 Exar Corp.
4  *
5  * This software may be used and distributed according to the terms of
6  * the GNU General Public License (GPL), incorporated herein by reference.
7  * Drivers based on or derived from this code fall under the GPL and must
8  * retain the authorship, copyright and license notice.  This file is not
9  * a complete program and may only be used when the entire operating
10  * system is licensed under the GPL.
11  * See the file COPYING in this distribution for more information.
12  *
13  * Credits:
14  * Jeff Garzik		: For pointing out the improper error condition
15  *			  check in the s2io_xmit routine and also some
16  *			  issues in the Tx watch dog function. Also for
17  *			  patiently answering all those innumerable
18  *			  questions regaring the 2.6 porting issues.
19  * Stephen Hemminger	: Providing proper 2.6 porting mechanism for some
20  *			  macros available only in 2.6 Kernel.
21  * Francois Romieu	: For pointing out all code part that were
22  *			  deprecated and also styling related comments.
23  * Grant Grundler	: For helping me get rid of some Architecture
24  *			  dependent code.
25  * Christopher Hellwig	: Some more 2.6 specific issues in the driver.
26  *
27  * The module loadable parameters that are supported by the driver and a brief
28  * explanation of all the variables.
29  *
30  * rx_ring_num : This can be used to program the number of receive rings used
31  * in the driver.
32  * rx_ring_sz: This defines the number of receive blocks each ring can have.
33  *     This is also an array of size 8.
34  * rx_ring_mode: This defines the operation mode of all 8 rings. The valid
35  *		values are 1, 2.
36  * tx_fifo_num: This defines the number of Tx FIFOs thats used int the driver.
37  * tx_fifo_len: This too is an array of 8. Each element defines the number of
38  * Tx descriptors that can be associated with each corresponding FIFO.
39  * intr_type: This defines the type of interrupt. The values can be 0(INTA),
40  *     2(MSI_X). Default value is '2(MSI_X)'
41  * lro_max_pkts: This parameter defines maximum number of packets can be
42  *     aggregated as a single large packet
43  * napi: This parameter used to enable/disable NAPI (polling Rx)
44  *     Possible values '1' for enable and '0' for disable. Default is '1'
45  * vlan_tag_strip: This can be used to enable or disable vlan stripping.
46  *                 Possible values '1' for enable , '0' for disable.
47  *                 Default is '2' - which means disable in promisc mode
48  *                 and enable in non-promiscuous mode.
49  * multiq: This parameter used to enable/disable MULTIQUEUE support.
50  *      Possible values '1' for enable and '0' for disable. Default is '0'
51  ************************************************************************/
52 
53 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
54 
55 #include <linux/module.h>
56 #include <linux/types.h>
57 #include <linux/errno.h>
58 #include <linux/ioport.h>
59 #include <linux/pci.h>
60 #include <linux/dma-mapping.h>
61 #include <linux/kernel.h>
62 #include <linux/netdevice.h>
63 #include <linux/etherdevice.h>
64 #include <linux/mdio.h>
65 #include <linux/skbuff.h>
66 #include <linux/init.h>
67 #include <linux/delay.h>
68 #include <linux/stddef.h>
69 #include <linux/ioctl.h>
70 #include <linux/timex.h>
71 #include <linux/ethtool.h>
72 #include <linux/workqueue.h>
73 #include <linux/if_vlan.h>
74 #include <linux/ip.h>
75 #include <linux/tcp.h>
76 #include <linux/uaccess.h>
77 #include <linux/io.h>
78 #include <linux/io-64-nonatomic-lo-hi.h>
79 #include <linux/slab.h>
80 #include <linux/prefetch.h>
81 #include <net/tcp.h>
82 #include <net/checksum.h>
83 
84 #include <asm/div64.h>
85 #include <asm/irq.h>
86 
87 /* local include */
88 #include "s2io.h"
89 #include "s2io-regs.h"
90 
91 #define DRV_VERSION "2.0.26.28"
92 
93 /* S2io Driver name & version. */
94 static const char s2io_driver_name[] = "Neterion";
95 static const char s2io_driver_version[] = DRV_VERSION;
96 
97 static const int rxd_size[2] = {32, 48};
98 static const int rxd_count[2] = {127, 85};
99 
100 static inline int RXD_IS_UP2DT(struct RxD_t *rxdp)
101 {
102 	int ret;
103 
104 	ret = ((!(rxdp->Control_1 & RXD_OWN_XENA)) &&
105 	       (GET_RXD_MARKER(rxdp->Control_2) != THE_RXD_MARK));
106 
107 	return ret;
108 }
109 
110 /*
111  * Cards with following subsystem_id have a link state indication
112  * problem, 600B, 600C, 600D, 640B, 640C and 640D.
113  * macro below identifies these cards given the subsystem_id.
114  */
115 #define CARDS_WITH_FAULTY_LINK_INDICATORS(dev_type, subid)		\
116 	(dev_type == XFRAME_I_DEVICE) ?					\
117 	((((subid >= 0x600B) && (subid <= 0x600D)) ||			\
118 	  ((subid >= 0x640B) && (subid <= 0x640D))) ? 1 : 0) : 0
119 
120 #define LINK_IS_UP(val64) (!(val64 & (ADAPTER_STATUS_RMAC_REMOTE_FAULT | \
121 				      ADAPTER_STATUS_RMAC_LOCAL_FAULT)))
122 
123 static inline int is_s2io_card_up(const struct s2io_nic *sp)
124 {
125 	return test_bit(__S2IO_STATE_CARD_UP, &sp->state);
126 }
127 
128 /* Ethtool related variables and Macros. */
129 static const char s2io_gstrings[][ETH_GSTRING_LEN] = {
130 	"Register test\t(offline)",
131 	"Eeprom test\t(offline)",
132 	"Link test\t(online)",
133 	"RLDRAM test\t(offline)",
134 	"BIST Test\t(offline)"
135 };
136 
137 static const char ethtool_xena_stats_keys[][ETH_GSTRING_LEN] = {
138 	{"tmac_frms"},
139 	{"tmac_data_octets"},
140 	{"tmac_drop_frms"},
141 	{"tmac_mcst_frms"},
142 	{"tmac_bcst_frms"},
143 	{"tmac_pause_ctrl_frms"},
144 	{"tmac_ttl_octets"},
145 	{"tmac_ucst_frms"},
146 	{"tmac_nucst_frms"},
147 	{"tmac_any_err_frms"},
148 	{"tmac_ttl_less_fb_octets"},
149 	{"tmac_vld_ip_octets"},
150 	{"tmac_vld_ip"},
151 	{"tmac_drop_ip"},
152 	{"tmac_icmp"},
153 	{"tmac_rst_tcp"},
154 	{"tmac_tcp"},
155 	{"tmac_udp"},
156 	{"rmac_vld_frms"},
157 	{"rmac_data_octets"},
158 	{"rmac_fcs_err_frms"},
159 	{"rmac_drop_frms"},
160 	{"rmac_vld_mcst_frms"},
161 	{"rmac_vld_bcst_frms"},
162 	{"rmac_in_rng_len_err_frms"},
163 	{"rmac_out_rng_len_err_frms"},
164 	{"rmac_long_frms"},
165 	{"rmac_pause_ctrl_frms"},
166 	{"rmac_unsup_ctrl_frms"},
167 	{"rmac_ttl_octets"},
168 	{"rmac_accepted_ucst_frms"},
169 	{"rmac_accepted_nucst_frms"},
170 	{"rmac_discarded_frms"},
171 	{"rmac_drop_events"},
172 	{"rmac_ttl_less_fb_octets"},
173 	{"rmac_ttl_frms"},
174 	{"rmac_usized_frms"},
175 	{"rmac_osized_frms"},
176 	{"rmac_frag_frms"},
177 	{"rmac_jabber_frms"},
178 	{"rmac_ttl_64_frms"},
179 	{"rmac_ttl_65_127_frms"},
180 	{"rmac_ttl_128_255_frms"},
181 	{"rmac_ttl_256_511_frms"},
182 	{"rmac_ttl_512_1023_frms"},
183 	{"rmac_ttl_1024_1518_frms"},
184 	{"rmac_ip"},
185 	{"rmac_ip_octets"},
186 	{"rmac_hdr_err_ip"},
187 	{"rmac_drop_ip"},
188 	{"rmac_icmp"},
189 	{"rmac_tcp"},
190 	{"rmac_udp"},
191 	{"rmac_err_drp_udp"},
192 	{"rmac_xgmii_err_sym"},
193 	{"rmac_frms_q0"},
194 	{"rmac_frms_q1"},
195 	{"rmac_frms_q2"},
196 	{"rmac_frms_q3"},
197 	{"rmac_frms_q4"},
198 	{"rmac_frms_q5"},
199 	{"rmac_frms_q6"},
200 	{"rmac_frms_q7"},
201 	{"rmac_full_q0"},
202 	{"rmac_full_q1"},
203 	{"rmac_full_q2"},
204 	{"rmac_full_q3"},
205 	{"rmac_full_q4"},
206 	{"rmac_full_q5"},
207 	{"rmac_full_q6"},
208 	{"rmac_full_q7"},
209 	{"rmac_pause_cnt"},
210 	{"rmac_xgmii_data_err_cnt"},
211 	{"rmac_xgmii_ctrl_err_cnt"},
212 	{"rmac_accepted_ip"},
213 	{"rmac_err_tcp"},
214 	{"rd_req_cnt"},
215 	{"new_rd_req_cnt"},
216 	{"new_rd_req_rtry_cnt"},
217 	{"rd_rtry_cnt"},
218 	{"wr_rtry_rd_ack_cnt"},
219 	{"wr_req_cnt"},
220 	{"new_wr_req_cnt"},
221 	{"new_wr_req_rtry_cnt"},
222 	{"wr_rtry_cnt"},
223 	{"wr_disc_cnt"},
224 	{"rd_rtry_wr_ack_cnt"},
225 	{"txp_wr_cnt"},
226 	{"txd_rd_cnt"},
227 	{"txd_wr_cnt"},
228 	{"rxd_rd_cnt"},
229 	{"rxd_wr_cnt"},
230 	{"txf_rd_cnt"},
231 	{"rxf_wr_cnt"}
232 };
233 
234 static const char ethtool_enhanced_stats_keys[][ETH_GSTRING_LEN] = {
235 	{"rmac_ttl_1519_4095_frms"},
236 	{"rmac_ttl_4096_8191_frms"},
237 	{"rmac_ttl_8192_max_frms"},
238 	{"rmac_ttl_gt_max_frms"},
239 	{"rmac_osized_alt_frms"},
240 	{"rmac_jabber_alt_frms"},
241 	{"rmac_gt_max_alt_frms"},
242 	{"rmac_vlan_frms"},
243 	{"rmac_len_discard"},
244 	{"rmac_fcs_discard"},
245 	{"rmac_pf_discard"},
246 	{"rmac_da_discard"},
247 	{"rmac_red_discard"},
248 	{"rmac_rts_discard"},
249 	{"rmac_ingm_full_discard"},
250 	{"link_fault_cnt"}
251 };
252 
253 static const char ethtool_driver_stats_keys[][ETH_GSTRING_LEN] = {
254 	{"\n DRIVER STATISTICS"},
255 	{"single_bit_ecc_errs"},
256 	{"double_bit_ecc_errs"},
257 	{"parity_err_cnt"},
258 	{"serious_err_cnt"},
259 	{"soft_reset_cnt"},
260 	{"fifo_full_cnt"},
261 	{"ring_0_full_cnt"},
262 	{"ring_1_full_cnt"},
263 	{"ring_2_full_cnt"},
264 	{"ring_3_full_cnt"},
265 	{"ring_4_full_cnt"},
266 	{"ring_5_full_cnt"},
267 	{"ring_6_full_cnt"},
268 	{"ring_7_full_cnt"},
269 	{"alarm_transceiver_temp_high"},
270 	{"alarm_transceiver_temp_low"},
271 	{"alarm_laser_bias_current_high"},
272 	{"alarm_laser_bias_current_low"},
273 	{"alarm_laser_output_power_high"},
274 	{"alarm_laser_output_power_low"},
275 	{"warn_transceiver_temp_high"},
276 	{"warn_transceiver_temp_low"},
277 	{"warn_laser_bias_current_high"},
278 	{"warn_laser_bias_current_low"},
279 	{"warn_laser_output_power_high"},
280 	{"warn_laser_output_power_low"},
281 	{"lro_aggregated_pkts"},
282 	{"lro_flush_both_count"},
283 	{"lro_out_of_sequence_pkts"},
284 	{"lro_flush_due_to_max_pkts"},
285 	{"lro_avg_aggr_pkts"},
286 	{"mem_alloc_fail_cnt"},
287 	{"pci_map_fail_cnt"},
288 	{"watchdog_timer_cnt"},
289 	{"mem_allocated"},
290 	{"mem_freed"},
291 	{"link_up_cnt"},
292 	{"link_down_cnt"},
293 	{"link_up_time"},
294 	{"link_down_time"},
295 	{"tx_tcode_buf_abort_cnt"},
296 	{"tx_tcode_desc_abort_cnt"},
297 	{"tx_tcode_parity_err_cnt"},
298 	{"tx_tcode_link_loss_cnt"},
299 	{"tx_tcode_list_proc_err_cnt"},
300 	{"rx_tcode_parity_err_cnt"},
301 	{"rx_tcode_abort_cnt"},
302 	{"rx_tcode_parity_abort_cnt"},
303 	{"rx_tcode_rda_fail_cnt"},
304 	{"rx_tcode_unkn_prot_cnt"},
305 	{"rx_tcode_fcs_err_cnt"},
306 	{"rx_tcode_buf_size_err_cnt"},
307 	{"rx_tcode_rxd_corrupt_cnt"},
308 	{"rx_tcode_unkn_err_cnt"},
309 	{"tda_err_cnt"},
310 	{"pfc_err_cnt"},
311 	{"pcc_err_cnt"},
312 	{"tti_err_cnt"},
313 	{"tpa_err_cnt"},
314 	{"sm_err_cnt"},
315 	{"lso_err_cnt"},
316 	{"mac_tmac_err_cnt"},
317 	{"mac_rmac_err_cnt"},
318 	{"xgxs_txgxs_err_cnt"},
319 	{"xgxs_rxgxs_err_cnt"},
320 	{"rc_err_cnt"},
321 	{"prc_pcix_err_cnt"},
322 	{"rpa_err_cnt"},
323 	{"rda_err_cnt"},
324 	{"rti_err_cnt"},
325 	{"mc_err_cnt"}
326 };
327 
328 #define S2IO_XENA_STAT_LEN	ARRAY_SIZE(ethtool_xena_stats_keys)
329 #define S2IO_ENHANCED_STAT_LEN	ARRAY_SIZE(ethtool_enhanced_stats_keys)
330 #define S2IO_DRIVER_STAT_LEN	ARRAY_SIZE(ethtool_driver_stats_keys)
331 
332 #define XFRAME_I_STAT_LEN (S2IO_XENA_STAT_LEN + S2IO_DRIVER_STAT_LEN)
333 #define XFRAME_II_STAT_LEN (XFRAME_I_STAT_LEN + S2IO_ENHANCED_STAT_LEN)
334 
335 #define XFRAME_I_STAT_STRINGS_LEN (XFRAME_I_STAT_LEN * ETH_GSTRING_LEN)
336 #define XFRAME_II_STAT_STRINGS_LEN (XFRAME_II_STAT_LEN * ETH_GSTRING_LEN)
337 
338 #define S2IO_TEST_LEN	ARRAY_SIZE(s2io_gstrings)
339 #define S2IO_STRINGS_LEN	(S2IO_TEST_LEN * ETH_GSTRING_LEN)
340 
341 /* copy mac addr to def_mac_addr array */
342 static void do_s2io_copy_mac_addr(struct s2io_nic *sp, int offset, u64 mac_addr)
343 {
344 	sp->def_mac_addr[offset].mac_addr[5] = (u8) (mac_addr);
345 	sp->def_mac_addr[offset].mac_addr[4] = (u8) (mac_addr >> 8);
346 	sp->def_mac_addr[offset].mac_addr[3] = (u8) (mac_addr >> 16);
347 	sp->def_mac_addr[offset].mac_addr[2] = (u8) (mac_addr >> 24);
348 	sp->def_mac_addr[offset].mac_addr[1] = (u8) (mac_addr >> 32);
349 	sp->def_mac_addr[offset].mac_addr[0] = (u8) (mac_addr >> 40);
350 }
351 
352 /*
353  * Constants to be programmed into the Xena's registers, to configure
354  * the XAUI.
355  */
356 
357 #define	END_SIGN	0x0
358 static const u64 herc_act_dtx_cfg[] = {
359 	/* Set address */
360 	0x8000051536750000ULL, 0x80000515367500E0ULL,
361 	/* Write data */
362 	0x8000051536750004ULL, 0x80000515367500E4ULL,
363 	/* Set address */
364 	0x80010515003F0000ULL, 0x80010515003F00E0ULL,
365 	/* Write data */
366 	0x80010515003F0004ULL, 0x80010515003F00E4ULL,
367 	/* Set address */
368 	0x801205150D440000ULL, 0x801205150D4400E0ULL,
369 	/* Write data */
370 	0x801205150D440004ULL, 0x801205150D4400E4ULL,
371 	/* Set address */
372 	0x80020515F2100000ULL, 0x80020515F21000E0ULL,
373 	/* Write data */
374 	0x80020515F2100004ULL, 0x80020515F21000E4ULL,
375 	/* Done */
376 	END_SIGN
377 };
378 
379 static const u64 xena_dtx_cfg[] = {
380 	/* Set address */
381 	0x8000051500000000ULL, 0x80000515000000E0ULL,
382 	/* Write data */
383 	0x80000515D9350004ULL, 0x80000515D93500E4ULL,
384 	/* Set address */
385 	0x8001051500000000ULL, 0x80010515000000E0ULL,
386 	/* Write data */
387 	0x80010515001E0004ULL, 0x80010515001E00E4ULL,
388 	/* Set address */
389 	0x8002051500000000ULL, 0x80020515000000E0ULL,
390 	/* Write data */
391 	0x80020515F2100004ULL, 0x80020515F21000E4ULL,
392 	END_SIGN
393 };
394 
395 /*
396  * Constants for Fixing the MacAddress problem seen mostly on
397  * Alpha machines.
398  */
399 static const u64 fix_mac[] = {
400 	0x0060000000000000ULL, 0x0060600000000000ULL,
401 	0x0040600000000000ULL, 0x0000600000000000ULL,
402 	0x0020600000000000ULL, 0x0060600000000000ULL,
403 	0x0020600000000000ULL, 0x0060600000000000ULL,
404 	0x0020600000000000ULL, 0x0060600000000000ULL,
405 	0x0020600000000000ULL, 0x0060600000000000ULL,
406 	0x0020600000000000ULL, 0x0060600000000000ULL,
407 	0x0020600000000000ULL, 0x0060600000000000ULL,
408 	0x0020600000000000ULL, 0x0060600000000000ULL,
409 	0x0020600000000000ULL, 0x0060600000000000ULL,
410 	0x0020600000000000ULL, 0x0060600000000000ULL,
411 	0x0020600000000000ULL, 0x0060600000000000ULL,
412 	0x0020600000000000ULL, 0x0000600000000000ULL,
413 	0x0040600000000000ULL, 0x0060600000000000ULL,
414 	END_SIGN
415 };
416 
417 MODULE_LICENSE("GPL");
418 MODULE_VERSION(DRV_VERSION);
419 
420 
421 /* Module Loadable parameters. */
422 S2IO_PARM_INT(tx_fifo_num, FIFO_DEFAULT_NUM);
423 S2IO_PARM_INT(rx_ring_num, 1);
424 S2IO_PARM_INT(multiq, 0);
425 S2IO_PARM_INT(rx_ring_mode, 1);
426 S2IO_PARM_INT(use_continuous_tx_intrs, 1);
427 S2IO_PARM_INT(rmac_pause_time, 0x100);
428 S2IO_PARM_INT(mc_pause_threshold_q0q3, 187);
429 S2IO_PARM_INT(mc_pause_threshold_q4q7, 187);
430 S2IO_PARM_INT(shared_splits, 0);
431 S2IO_PARM_INT(tmac_util_period, 5);
432 S2IO_PARM_INT(rmac_util_period, 5);
433 S2IO_PARM_INT(l3l4hdr_size, 128);
434 /* 0 is no steering, 1 is Priority steering, 2 is Default steering */
435 S2IO_PARM_INT(tx_steering_type, TX_DEFAULT_STEERING);
436 /* Frequency of Rx desc syncs expressed as power of 2 */
437 S2IO_PARM_INT(rxsync_frequency, 3);
438 /* Interrupt type. Values can be 0(INTA), 2(MSI_X) */
439 S2IO_PARM_INT(intr_type, 2);
440 /* Large receive offload feature */
441 
442 /* Max pkts to be aggregated by LRO at one time. If not specified,
443  * aggregation happens until we hit max IP pkt size(64K)
444  */
445 S2IO_PARM_INT(lro_max_pkts, 0xFFFF);
446 S2IO_PARM_INT(indicate_max_pkts, 0);
447 
448 S2IO_PARM_INT(napi, 1);
449 S2IO_PARM_INT(vlan_tag_strip, NO_STRIP_IN_PROMISC);
450 
451 static unsigned int tx_fifo_len[MAX_TX_FIFOS] =
452 {DEFAULT_FIFO_0_LEN, [1 ...(MAX_TX_FIFOS - 1)] = DEFAULT_FIFO_1_7_LEN};
453 static unsigned int rx_ring_sz[MAX_RX_RINGS] =
454 {[0 ...(MAX_RX_RINGS - 1)] = SMALL_BLK_CNT};
455 static unsigned int rts_frm_len[MAX_RX_RINGS] =
456 {[0 ...(MAX_RX_RINGS - 1)] = 0 };
457 
458 module_param_array(tx_fifo_len, uint, NULL, 0);
459 module_param_array(rx_ring_sz, uint, NULL, 0);
460 module_param_array(rts_frm_len, uint, NULL, 0);
461 
462 /*
463  * S2IO device table.
464  * This table lists all the devices that this driver supports.
465  */
466 static const struct pci_device_id s2io_tbl[] = {
467 	{PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_S2IO_WIN,
468 	 PCI_ANY_ID, PCI_ANY_ID},
469 	{PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_S2IO_UNI,
470 	 PCI_ANY_ID, PCI_ANY_ID},
471 	{PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_HERC_WIN,
472 	 PCI_ANY_ID, PCI_ANY_ID},
473 	{PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_HERC_UNI,
474 	 PCI_ANY_ID, PCI_ANY_ID},
475 	{0,}
476 };
477 
478 MODULE_DEVICE_TABLE(pci, s2io_tbl);
479 
480 static const struct pci_error_handlers s2io_err_handler = {
481 	.error_detected = s2io_io_error_detected,
482 	.slot_reset = s2io_io_slot_reset,
483 	.resume = s2io_io_resume,
484 };
485 
486 static struct pci_driver s2io_driver = {
487 	.name = "S2IO",
488 	.id_table = s2io_tbl,
489 	.probe = s2io_init_nic,
490 	.remove = s2io_rem_nic,
491 	.err_handler = &s2io_err_handler,
492 };
493 
494 /* A simplifier macro used both by init and free shared_mem Fns(). */
495 #define TXD_MEM_PAGE_CNT(len, per_each) DIV_ROUND_UP(len, per_each)
496 
497 /* netqueue manipulation helper functions */
498 static inline void s2io_stop_all_tx_queue(struct s2io_nic *sp)
499 {
500 	if (!sp->config.multiq) {
501 		int i;
502 
503 		for (i = 0; i < sp->config.tx_fifo_num; i++)
504 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_STOP;
505 	}
506 	netif_tx_stop_all_queues(sp->dev);
507 }
508 
509 static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no)
510 {
511 	if (!sp->config.multiq)
512 		sp->mac_control.fifos[fifo_no].queue_state =
513 			FIFO_QUEUE_STOP;
514 
515 	netif_tx_stop_all_queues(sp->dev);
516 }
517 
518 static inline void s2io_start_all_tx_queue(struct s2io_nic *sp)
519 {
520 	if (!sp->config.multiq) {
521 		int i;
522 
523 		for (i = 0; i < sp->config.tx_fifo_num; i++)
524 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
525 	}
526 	netif_tx_start_all_queues(sp->dev);
527 }
528 
529 static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp)
530 {
531 	if (!sp->config.multiq) {
532 		int i;
533 
534 		for (i = 0; i < sp->config.tx_fifo_num; i++)
535 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
536 	}
537 	netif_tx_wake_all_queues(sp->dev);
538 }
539 
540 static inline void s2io_wake_tx_queue(
541 	struct fifo_info *fifo, int cnt, u8 multiq)
542 {
543 
544 	if (multiq) {
545 		if (cnt && __netif_subqueue_stopped(fifo->dev, fifo->fifo_no))
546 			netif_wake_subqueue(fifo->dev, fifo->fifo_no);
547 	} else if (cnt && (fifo->queue_state == FIFO_QUEUE_STOP)) {
548 		if (netif_queue_stopped(fifo->dev)) {
549 			fifo->queue_state = FIFO_QUEUE_START;
550 			netif_wake_queue(fifo->dev);
551 		}
552 	}
553 }
554 
555 /**
556  * init_shared_mem - Allocation and Initialization of Memory
557  * @nic: Device private variable.
558  * Description: The function allocates all the memory areas shared
559  * between the NIC and the driver. This includes Tx descriptors,
560  * Rx descriptors and the statistics block.
561  */
562 
563 static int init_shared_mem(struct s2io_nic *nic)
564 {
565 	u32 size;
566 	void *tmp_v_addr, *tmp_v_addr_next;
567 	dma_addr_t tmp_p_addr, tmp_p_addr_next;
568 	struct RxD_block *pre_rxd_blk = NULL;
569 	int i, j, blk_cnt;
570 	int lst_size, lst_per_page;
571 	struct net_device *dev = nic->dev;
572 	unsigned long tmp;
573 	struct buffAdd *ba;
574 	struct config_param *config = &nic->config;
575 	struct mac_info *mac_control = &nic->mac_control;
576 	unsigned long long mem_allocated = 0;
577 
578 	/* Allocation and initialization of TXDLs in FIFOs */
579 	size = 0;
580 	for (i = 0; i < config->tx_fifo_num; i++) {
581 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
582 
583 		size += tx_cfg->fifo_len;
584 	}
585 	if (size > MAX_AVAILABLE_TXDS) {
586 		DBG_PRINT(ERR_DBG,
587 			  "Too many TxDs requested: %d, max supported: %d\n",
588 			  size, MAX_AVAILABLE_TXDS);
589 		return -EINVAL;
590 	}
591 
592 	size = 0;
593 	for (i = 0; i < config->tx_fifo_num; i++) {
594 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
595 
596 		size = tx_cfg->fifo_len;
597 		/*
598 		 * Legal values are from 2 to 8192
599 		 */
600 		if (size < 2) {
601 			DBG_PRINT(ERR_DBG, "Fifo %d: Invalid length (%d) - "
602 				  "Valid lengths are 2 through 8192\n",
603 				  i, size);
604 			return -EINVAL;
605 		}
606 	}
607 
608 	lst_size = (sizeof(struct TxD) * config->max_txds);
609 	lst_per_page = PAGE_SIZE / lst_size;
610 
611 	for (i = 0; i < config->tx_fifo_num; i++) {
612 		struct fifo_info *fifo = &mac_control->fifos[i];
613 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
614 		int fifo_len = tx_cfg->fifo_len;
615 		int list_holder_size = fifo_len * sizeof(struct list_info_hold);
616 
617 		fifo->list_info = kzalloc(list_holder_size, GFP_KERNEL);
618 		if (!fifo->list_info) {
619 			DBG_PRINT(INFO_DBG, "Malloc failed for list_info\n");
620 			return -ENOMEM;
621 		}
622 		mem_allocated += list_holder_size;
623 	}
624 	for (i = 0; i < config->tx_fifo_num; i++) {
625 		int page_num = TXD_MEM_PAGE_CNT(config->tx_cfg[i].fifo_len,
626 						lst_per_page);
627 		struct fifo_info *fifo = &mac_control->fifos[i];
628 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
629 
630 		fifo->tx_curr_put_info.offset = 0;
631 		fifo->tx_curr_put_info.fifo_len = tx_cfg->fifo_len - 1;
632 		fifo->tx_curr_get_info.offset = 0;
633 		fifo->tx_curr_get_info.fifo_len = tx_cfg->fifo_len - 1;
634 		fifo->fifo_no = i;
635 		fifo->nic = nic;
636 		fifo->max_txds = MAX_SKB_FRAGS + 2;
637 		fifo->dev = dev;
638 
639 		for (j = 0; j < page_num; j++) {
640 			int k = 0;
641 			dma_addr_t tmp_p;
642 			void *tmp_v;
643 			tmp_v = dma_alloc_coherent(&nic->pdev->dev, PAGE_SIZE,
644 						   &tmp_p, GFP_KERNEL);
645 			if (!tmp_v) {
646 				DBG_PRINT(INFO_DBG,
647 					  "dma_alloc_coherent failed for TxDL\n");
648 				return -ENOMEM;
649 			}
650 			/* If we got a zero DMA address(can happen on
651 			 * certain platforms like PPC), reallocate.
652 			 * Store virtual address of page we don't want,
653 			 * to be freed later.
654 			 */
655 			if (!tmp_p) {
656 				mac_control->zerodma_virt_addr = tmp_v;
657 				DBG_PRINT(INIT_DBG,
658 					  "%s: Zero DMA address for TxDL. "
659 					  "Virtual address %p\n",
660 					  dev->name, tmp_v);
661 				tmp_v = dma_alloc_coherent(&nic->pdev->dev,
662 							   PAGE_SIZE, &tmp_p,
663 							   GFP_KERNEL);
664 				if (!tmp_v) {
665 					DBG_PRINT(INFO_DBG,
666 						  "dma_alloc_coherent failed for TxDL\n");
667 					return -ENOMEM;
668 				}
669 				mem_allocated += PAGE_SIZE;
670 			}
671 			while (k < lst_per_page) {
672 				int l = (j * lst_per_page) + k;
673 				if (l == tx_cfg->fifo_len)
674 					break;
675 				fifo->list_info[l].list_virt_addr =
676 					tmp_v + (k * lst_size);
677 				fifo->list_info[l].list_phy_addr =
678 					tmp_p + (k * lst_size);
679 				k++;
680 			}
681 		}
682 	}
683 
684 	for (i = 0; i < config->tx_fifo_num; i++) {
685 		struct fifo_info *fifo = &mac_control->fifos[i];
686 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
687 
688 		size = tx_cfg->fifo_len;
689 		fifo->ufo_in_band_v = kcalloc(size, sizeof(u64), GFP_KERNEL);
690 		if (!fifo->ufo_in_band_v)
691 			return -ENOMEM;
692 		mem_allocated += (size * sizeof(u64));
693 	}
694 
695 	/* Allocation and initialization of RXDs in Rings */
696 	size = 0;
697 	for (i = 0; i < config->rx_ring_num; i++) {
698 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
699 		struct ring_info *ring = &mac_control->rings[i];
700 
701 		if (rx_cfg->num_rxd % (rxd_count[nic->rxd_mode] + 1)) {
702 			DBG_PRINT(ERR_DBG, "%s: Ring%d RxD count is not a "
703 				  "multiple of RxDs per Block\n",
704 				  dev->name, i);
705 			return FAILURE;
706 		}
707 		size += rx_cfg->num_rxd;
708 		ring->block_count = rx_cfg->num_rxd /
709 			(rxd_count[nic->rxd_mode] + 1);
710 		ring->pkt_cnt = rx_cfg->num_rxd - ring->block_count;
711 	}
712 	if (nic->rxd_mode == RXD_MODE_1)
713 		size = (size * (sizeof(struct RxD1)));
714 	else
715 		size = (size * (sizeof(struct RxD3)));
716 
717 	for (i = 0; i < config->rx_ring_num; i++) {
718 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
719 		struct ring_info *ring = &mac_control->rings[i];
720 
721 		ring->rx_curr_get_info.block_index = 0;
722 		ring->rx_curr_get_info.offset = 0;
723 		ring->rx_curr_get_info.ring_len = rx_cfg->num_rxd - 1;
724 		ring->rx_curr_put_info.block_index = 0;
725 		ring->rx_curr_put_info.offset = 0;
726 		ring->rx_curr_put_info.ring_len = rx_cfg->num_rxd - 1;
727 		ring->nic = nic;
728 		ring->ring_no = i;
729 
730 		blk_cnt = rx_cfg->num_rxd / (rxd_count[nic->rxd_mode] + 1);
731 		/*  Allocating all the Rx blocks */
732 		for (j = 0; j < blk_cnt; j++) {
733 			struct rx_block_info *rx_blocks;
734 			int l;
735 
736 			rx_blocks = &ring->rx_blocks[j];
737 			size = SIZE_OF_BLOCK;	/* size is always page size */
738 			tmp_v_addr = dma_alloc_coherent(&nic->pdev->dev, size,
739 							&tmp_p_addr, GFP_KERNEL);
740 			if (tmp_v_addr == NULL) {
741 				/*
742 				 * In case of failure, free_shared_mem()
743 				 * is called, which should free any
744 				 * memory that was alloced till the
745 				 * failure happened.
746 				 */
747 				rx_blocks->block_virt_addr = tmp_v_addr;
748 				return -ENOMEM;
749 			}
750 			mem_allocated += size;
751 
752 			size = sizeof(struct rxd_info) *
753 				rxd_count[nic->rxd_mode];
754 			rx_blocks->block_virt_addr = tmp_v_addr;
755 			rx_blocks->block_dma_addr = tmp_p_addr;
756 			rx_blocks->rxds = kmalloc(size,  GFP_KERNEL);
757 			if (!rx_blocks->rxds)
758 				return -ENOMEM;
759 			mem_allocated += size;
760 			for (l = 0; l < rxd_count[nic->rxd_mode]; l++) {
761 				rx_blocks->rxds[l].virt_addr =
762 					rx_blocks->block_virt_addr +
763 					(rxd_size[nic->rxd_mode] * l);
764 				rx_blocks->rxds[l].dma_addr =
765 					rx_blocks->block_dma_addr +
766 					(rxd_size[nic->rxd_mode] * l);
767 			}
768 		}
769 		/* Interlinking all Rx Blocks */
770 		for (j = 0; j < blk_cnt; j++) {
771 			int next = (j + 1) % blk_cnt;
772 			tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
773 			tmp_v_addr_next = ring->rx_blocks[next].block_virt_addr;
774 			tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
775 			tmp_p_addr_next = ring->rx_blocks[next].block_dma_addr;
776 
777 			pre_rxd_blk = tmp_v_addr;
778 			pre_rxd_blk->reserved_2_pNext_RxD_block =
779 				(unsigned long)tmp_v_addr_next;
780 			pre_rxd_blk->pNext_RxD_Blk_physical =
781 				(u64)tmp_p_addr_next;
782 		}
783 	}
784 	if (nic->rxd_mode == RXD_MODE_3B) {
785 		/*
786 		 * Allocation of Storages for buffer addresses in 2BUFF mode
787 		 * and the buffers as well.
788 		 */
789 		for (i = 0; i < config->rx_ring_num; i++) {
790 			struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
791 			struct ring_info *ring = &mac_control->rings[i];
792 
793 			blk_cnt = rx_cfg->num_rxd /
794 				(rxd_count[nic->rxd_mode] + 1);
795 			size = sizeof(struct buffAdd *) * blk_cnt;
796 			ring->ba = kmalloc(size, GFP_KERNEL);
797 			if (!ring->ba)
798 				return -ENOMEM;
799 			mem_allocated += size;
800 			for (j = 0; j < blk_cnt; j++) {
801 				int k = 0;
802 
803 				size = sizeof(struct buffAdd) *
804 					(rxd_count[nic->rxd_mode] + 1);
805 				ring->ba[j] = kmalloc(size, GFP_KERNEL);
806 				if (!ring->ba[j])
807 					return -ENOMEM;
808 				mem_allocated += size;
809 				while (k != rxd_count[nic->rxd_mode]) {
810 					ba = &ring->ba[j][k];
811 					size = BUF0_LEN + ALIGN_SIZE;
812 					ba->ba_0_org = kmalloc(size, GFP_KERNEL);
813 					if (!ba->ba_0_org)
814 						return -ENOMEM;
815 					mem_allocated += size;
816 					tmp = (unsigned long)ba->ba_0_org;
817 					tmp += ALIGN_SIZE;
818 					tmp &= ~((unsigned long)ALIGN_SIZE);
819 					ba->ba_0 = (void *)tmp;
820 
821 					size = BUF1_LEN + ALIGN_SIZE;
822 					ba->ba_1_org = kmalloc(size, GFP_KERNEL);
823 					if (!ba->ba_1_org)
824 						return -ENOMEM;
825 					mem_allocated += size;
826 					tmp = (unsigned long)ba->ba_1_org;
827 					tmp += ALIGN_SIZE;
828 					tmp &= ~((unsigned long)ALIGN_SIZE);
829 					ba->ba_1 = (void *)tmp;
830 					k++;
831 				}
832 			}
833 		}
834 	}
835 
836 	/* Allocation and initialization of Statistics block */
837 	size = sizeof(struct stat_block);
838 	mac_control->stats_mem =
839 		dma_alloc_coherent(&nic->pdev->dev, size,
840 				   &mac_control->stats_mem_phy, GFP_KERNEL);
841 
842 	if (!mac_control->stats_mem) {
843 		/*
844 		 * In case of failure, free_shared_mem() is called, which
845 		 * should free any memory that was alloced till the
846 		 * failure happened.
847 		 */
848 		return -ENOMEM;
849 	}
850 	mem_allocated += size;
851 	mac_control->stats_mem_sz = size;
852 
853 	tmp_v_addr = mac_control->stats_mem;
854 	mac_control->stats_info = tmp_v_addr;
855 	memset(tmp_v_addr, 0, size);
856 	DBG_PRINT(INIT_DBG, "%s: Ring Mem PHY: 0x%llx\n",
857 		dev_name(&nic->pdev->dev), (unsigned long long)tmp_p_addr);
858 	mac_control->stats_info->sw_stat.mem_allocated += mem_allocated;
859 	return SUCCESS;
860 }
861 
862 /**
863  * free_shared_mem - Free the allocated Memory
864  * @nic:  Device private variable.
865  * Description: This function is to free all memory locations allocated by
866  * the init_shared_mem() function and return it to the kernel.
867  */
868 
869 static void free_shared_mem(struct s2io_nic *nic)
870 {
871 	int i, j, blk_cnt, size;
872 	void *tmp_v_addr;
873 	dma_addr_t tmp_p_addr;
874 	int lst_size, lst_per_page;
875 	struct net_device *dev;
876 	int page_num = 0;
877 	struct config_param *config;
878 	struct mac_info *mac_control;
879 	struct stat_block *stats;
880 	struct swStat *swstats;
881 
882 	if (!nic)
883 		return;
884 
885 	dev = nic->dev;
886 
887 	config = &nic->config;
888 	mac_control = &nic->mac_control;
889 	stats = mac_control->stats_info;
890 	swstats = &stats->sw_stat;
891 
892 	lst_size = sizeof(struct TxD) * config->max_txds;
893 	lst_per_page = PAGE_SIZE / lst_size;
894 
895 	for (i = 0; i < config->tx_fifo_num; i++) {
896 		struct fifo_info *fifo = &mac_control->fifos[i];
897 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
898 
899 		page_num = TXD_MEM_PAGE_CNT(tx_cfg->fifo_len, lst_per_page);
900 		for (j = 0; j < page_num; j++) {
901 			int mem_blks = (j * lst_per_page);
902 			struct list_info_hold *fli;
903 
904 			if (!fifo->list_info)
905 				return;
906 
907 			fli = &fifo->list_info[mem_blks];
908 			if (!fli->list_virt_addr)
909 				break;
910 			dma_free_coherent(&nic->pdev->dev, PAGE_SIZE,
911 					  fli->list_virt_addr,
912 					  fli->list_phy_addr);
913 			swstats->mem_freed += PAGE_SIZE;
914 		}
915 		/* If we got a zero DMA address during allocation,
916 		 * free the page now
917 		 */
918 		if (mac_control->zerodma_virt_addr) {
919 			dma_free_coherent(&nic->pdev->dev, PAGE_SIZE,
920 					  mac_control->zerodma_virt_addr,
921 					  (dma_addr_t)0);
922 			DBG_PRINT(INIT_DBG,
923 				  "%s: Freeing TxDL with zero DMA address. "
924 				  "Virtual address %p\n",
925 				  dev->name, mac_control->zerodma_virt_addr);
926 			swstats->mem_freed += PAGE_SIZE;
927 		}
928 		kfree(fifo->list_info);
929 		swstats->mem_freed += tx_cfg->fifo_len *
930 			sizeof(struct list_info_hold);
931 	}
932 
933 	size = SIZE_OF_BLOCK;
934 	for (i = 0; i < config->rx_ring_num; i++) {
935 		struct ring_info *ring = &mac_control->rings[i];
936 
937 		blk_cnt = ring->block_count;
938 		for (j = 0; j < blk_cnt; j++) {
939 			tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
940 			tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
941 			if (tmp_v_addr == NULL)
942 				break;
943 			dma_free_coherent(&nic->pdev->dev, size, tmp_v_addr,
944 					  tmp_p_addr);
945 			swstats->mem_freed += size;
946 			kfree(ring->rx_blocks[j].rxds);
947 			swstats->mem_freed += sizeof(struct rxd_info) *
948 				rxd_count[nic->rxd_mode];
949 		}
950 	}
951 
952 	if (nic->rxd_mode == RXD_MODE_3B) {
953 		/* Freeing buffer storage addresses in 2BUFF mode. */
954 		for (i = 0; i < config->rx_ring_num; i++) {
955 			struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
956 			struct ring_info *ring = &mac_control->rings[i];
957 
958 			blk_cnt = rx_cfg->num_rxd /
959 				(rxd_count[nic->rxd_mode] + 1);
960 			for (j = 0; j < blk_cnt; j++) {
961 				int k = 0;
962 				if (!ring->ba[j])
963 					continue;
964 				while (k != rxd_count[nic->rxd_mode]) {
965 					struct buffAdd *ba = &ring->ba[j][k];
966 					kfree(ba->ba_0_org);
967 					swstats->mem_freed +=
968 						BUF0_LEN + ALIGN_SIZE;
969 					kfree(ba->ba_1_org);
970 					swstats->mem_freed +=
971 						BUF1_LEN + ALIGN_SIZE;
972 					k++;
973 				}
974 				kfree(ring->ba[j]);
975 				swstats->mem_freed += sizeof(struct buffAdd) *
976 					(rxd_count[nic->rxd_mode] + 1);
977 			}
978 			kfree(ring->ba);
979 			swstats->mem_freed += sizeof(struct buffAdd *) *
980 				blk_cnt;
981 		}
982 	}
983 
984 	for (i = 0; i < nic->config.tx_fifo_num; i++) {
985 		struct fifo_info *fifo = &mac_control->fifos[i];
986 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
987 
988 		if (fifo->ufo_in_band_v) {
989 			swstats->mem_freed += tx_cfg->fifo_len *
990 				sizeof(u64);
991 			kfree(fifo->ufo_in_band_v);
992 		}
993 	}
994 
995 	if (mac_control->stats_mem) {
996 		swstats->mem_freed += mac_control->stats_mem_sz;
997 		dma_free_coherent(&nic->pdev->dev, mac_control->stats_mem_sz,
998 				  mac_control->stats_mem,
999 				  mac_control->stats_mem_phy);
1000 	}
1001 }
1002 
1003 /**
1004  * s2io_verify_pci_mode -
1005  */
1006 
1007 static int s2io_verify_pci_mode(struct s2io_nic *nic)
1008 {
1009 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1010 	register u64 val64 = 0;
1011 	int     mode;
1012 
1013 	val64 = readq(&bar0->pci_mode);
1014 	mode = (u8)GET_PCI_MODE(val64);
1015 
1016 	if (val64 & PCI_MODE_UNKNOWN_MODE)
1017 		return -1;      /* Unknown PCI mode */
1018 	return mode;
1019 }
1020 
1021 #define NEC_VENID   0x1033
1022 #define NEC_DEVID   0x0125
1023 static int s2io_on_nec_bridge(struct pci_dev *s2io_pdev)
1024 {
1025 	struct pci_dev *tdev = NULL;
1026 	for_each_pci_dev(tdev) {
1027 		if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) {
1028 			if (tdev->bus == s2io_pdev->bus->parent) {
1029 				pci_dev_put(tdev);
1030 				return 1;
1031 			}
1032 		}
1033 	}
1034 	return 0;
1035 }
1036 
1037 static int bus_speed[8] = {33, 133, 133, 200, 266, 133, 200, 266};
1038 /**
1039  * s2io_print_pci_mode -
1040  */
1041 static int s2io_print_pci_mode(struct s2io_nic *nic)
1042 {
1043 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1044 	register u64 val64 = 0;
1045 	int	mode;
1046 	struct config_param *config = &nic->config;
1047 	const char *pcimode;
1048 
1049 	val64 = readq(&bar0->pci_mode);
1050 	mode = (u8)GET_PCI_MODE(val64);
1051 
1052 	if (val64 & PCI_MODE_UNKNOWN_MODE)
1053 		return -1;	/* Unknown PCI mode */
1054 
1055 	config->bus_speed = bus_speed[mode];
1056 
1057 	if (s2io_on_nec_bridge(nic->pdev)) {
1058 		DBG_PRINT(ERR_DBG, "%s: Device is on PCI-E bus\n",
1059 			  nic->dev->name);
1060 		return mode;
1061 	}
1062 
1063 	switch (mode) {
1064 	case PCI_MODE_PCI_33:
1065 		pcimode = "33MHz PCI bus";
1066 		break;
1067 	case PCI_MODE_PCI_66:
1068 		pcimode = "66MHz PCI bus";
1069 		break;
1070 	case PCI_MODE_PCIX_M1_66:
1071 		pcimode = "66MHz PCIX(M1) bus";
1072 		break;
1073 	case PCI_MODE_PCIX_M1_100:
1074 		pcimode = "100MHz PCIX(M1) bus";
1075 		break;
1076 	case PCI_MODE_PCIX_M1_133:
1077 		pcimode = "133MHz PCIX(M1) bus";
1078 		break;
1079 	case PCI_MODE_PCIX_M2_66:
1080 		pcimode = "133MHz PCIX(M2) bus";
1081 		break;
1082 	case PCI_MODE_PCIX_M2_100:
1083 		pcimode = "200MHz PCIX(M2) bus";
1084 		break;
1085 	case PCI_MODE_PCIX_M2_133:
1086 		pcimode = "266MHz PCIX(M2) bus";
1087 		break;
1088 	default:
1089 		pcimode = "unsupported bus!";
1090 		mode = -1;
1091 	}
1092 
1093 	DBG_PRINT(ERR_DBG, "%s: Device is on %d bit %s\n",
1094 		  nic->dev->name, val64 & PCI_MODE_32_BITS ? 32 : 64, pcimode);
1095 
1096 	return mode;
1097 }
1098 
1099 /**
1100  *  init_tti - Initialization transmit traffic interrupt scheme
1101  *  @nic: device private variable
1102  *  @link: link status (UP/DOWN) used to enable/disable continuous
1103  *  transmit interrupts
1104  *  Description: The function configures transmit traffic interrupts
1105  *  Return Value:  SUCCESS on success and
1106  *  '-1' on failure
1107  */
1108 
1109 static int init_tti(struct s2io_nic *nic, int link)
1110 {
1111 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1112 	register u64 val64 = 0;
1113 	int i;
1114 	struct config_param *config = &nic->config;
1115 
1116 	for (i = 0; i < config->tx_fifo_num; i++) {
1117 		/*
1118 		 * TTI Initialization. Default Tx timer gets us about
1119 		 * 250 interrupts per sec. Continuous interrupts are enabled
1120 		 * by default.
1121 		 */
1122 		if (nic->device_type == XFRAME_II_DEVICE) {
1123 			int count = (nic->config.bus_speed * 125)/2;
1124 			val64 = TTI_DATA1_MEM_TX_TIMER_VAL(count);
1125 		} else
1126 			val64 = TTI_DATA1_MEM_TX_TIMER_VAL(0x2078);
1127 
1128 		val64 |= TTI_DATA1_MEM_TX_URNG_A(0xA) |
1129 			TTI_DATA1_MEM_TX_URNG_B(0x10) |
1130 			TTI_DATA1_MEM_TX_URNG_C(0x30) |
1131 			TTI_DATA1_MEM_TX_TIMER_AC_EN;
1132 		if (i == 0)
1133 			if (use_continuous_tx_intrs && (link == LINK_UP))
1134 				val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN;
1135 		writeq(val64, &bar0->tti_data1_mem);
1136 
1137 		if (nic->config.intr_type == MSI_X) {
1138 			val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) |
1139 				TTI_DATA2_MEM_TX_UFC_B(0x100) |
1140 				TTI_DATA2_MEM_TX_UFC_C(0x200) |
1141 				TTI_DATA2_MEM_TX_UFC_D(0x300);
1142 		} else {
1143 			if ((nic->config.tx_steering_type ==
1144 			     TX_DEFAULT_STEERING) &&
1145 			    (config->tx_fifo_num > 1) &&
1146 			    (i >= nic->udp_fifo_idx) &&
1147 			    (i < (nic->udp_fifo_idx +
1148 				  nic->total_udp_fifos)))
1149 				val64 = TTI_DATA2_MEM_TX_UFC_A(0x50) |
1150 					TTI_DATA2_MEM_TX_UFC_B(0x80) |
1151 					TTI_DATA2_MEM_TX_UFC_C(0x100) |
1152 					TTI_DATA2_MEM_TX_UFC_D(0x120);
1153 			else
1154 				val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) |
1155 					TTI_DATA2_MEM_TX_UFC_B(0x20) |
1156 					TTI_DATA2_MEM_TX_UFC_C(0x40) |
1157 					TTI_DATA2_MEM_TX_UFC_D(0x80);
1158 		}
1159 
1160 		writeq(val64, &bar0->tti_data2_mem);
1161 
1162 		val64 = TTI_CMD_MEM_WE |
1163 			TTI_CMD_MEM_STROBE_NEW_CMD |
1164 			TTI_CMD_MEM_OFFSET(i);
1165 		writeq(val64, &bar0->tti_command_mem);
1166 
1167 		if (wait_for_cmd_complete(&bar0->tti_command_mem,
1168 					  TTI_CMD_MEM_STROBE_NEW_CMD,
1169 					  S2IO_BIT_RESET) != SUCCESS)
1170 			return FAILURE;
1171 	}
1172 
1173 	return SUCCESS;
1174 }
1175 
1176 /**
1177  *  init_nic - Initialization of hardware
1178  *  @nic: device private variable
1179  *  Description: The function sequentially configures every block
1180  *  of the H/W from their reset values.
1181  *  Return Value:  SUCCESS on success and
1182  *  '-1' on failure (endian settings incorrect).
1183  */
1184 
1185 static int init_nic(struct s2io_nic *nic)
1186 {
1187 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1188 	struct net_device *dev = nic->dev;
1189 	register u64 val64 = 0;
1190 	void __iomem *add;
1191 	u32 time;
1192 	int i, j;
1193 	int dtx_cnt = 0;
1194 	unsigned long long mem_share;
1195 	int mem_size;
1196 	struct config_param *config = &nic->config;
1197 	struct mac_info *mac_control = &nic->mac_control;
1198 
1199 	/* to set the swapper controle on the card */
1200 	if (s2io_set_swapper(nic)) {
1201 		DBG_PRINT(ERR_DBG, "ERROR: Setting Swapper failed\n");
1202 		return -EIO;
1203 	}
1204 
1205 	/*
1206 	 * Herc requires EOI to be removed from reset before XGXS, so..
1207 	 */
1208 	if (nic->device_type & XFRAME_II_DEVICE) {
1209 		val64 = 0xA500000000ULL;
1210 		writeq(val64, &bar0->sw_reset);
1211 		msleep(500);
1212 		val64 = readq(&bar0->sw_reset);
1213 	}
1214 
1215 	/* Remove XGXS from reset state */
1216 	val64 = 0;
1217 	writeq(val64, &bar0->sw_reset);
1218 	msleep(500);
1219 	val64 = readq(&bar0->sw_reset);
1220 
1221 	/* Ensure that it's safe to access registers by checking
1222 	 * RIC_RUNNING bit is reset. Check is valid only for XframeII.
1223 	 */
1224 	if (nic->device_type == XFRAME_II_DEVICE) {
1225 		for (i = 0; i < 50; i++) {
1226 			val64 = readq(&bar0->adapter_status);
1227 			if (!(val64 & ADAPTER_STATUS_RIC_RUNNING))
1228 				break;
1229 			msleep(10);
1230 		}
1231 		if (i == 50)
1232 			return -ENODEV;
1233 	}
1234 
1235 	/*  Enable Receiving broadcasts */
1236 	add = &bar0->mac_cfg;
1237 	val64 = readq(&bar0->mac_cfg);
1238 	val64 |= MAC_RMAC_BCAST_ENABLE;
1239 	writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1240 	writel((u32)val64, add);
1241 	writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1242 	writel((u32) (val64 >> 32), (add + 4));
1243 
1244 	/* Read registers in all blocks */
1245 	val64 = readq(&bar0->mac_int_mask);
1246 	val64 = readq(&bar0->mc_int_mask);
1247 	val64 = readq(&bar0->xgxs_int_mask);
1248 
1249 	/*  Set MTU */
1250 	val64 = dev->mtu;
1251 	writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
1252 
1253 	if (nic->device_type & XFRAME_II_DEVICE) {
1254 		while (herc_act_dtx_cfg[dtx_cnt] != END_SIGN) {
1255 			SPECIAL_REG_WRITE(herc_act_dtx_cfg[dtx_cnt],
1256 					  &bar0->dtx_control, UF);
1257 			if (dtx_cnt & 0x1)
1258 				msleep(1); /* Necessary!! */
1259 			dtx_cnt++;
1260 		}
1261 	} else {
1262 		while (xena_dtx_cfg[dtx_cnt] != END_SIGN) {
1263 			SPECIAL_REG_WRITE(xena_dtx_cfg[dtx_cnt],
1264 					  &bar0->dtx_control, UF);
1265 			val64 = readq(&bar0->dtx_control);
1266 			dtx_cnt++;
1267 		}
1268 	}
1269 
1270 	/*  Tx DMA Initialization */
1271 	val64 = 0;
1272 	writeq(val64, &bar0->tx_fifo_partition_0);
1273 	writeq(val64, &bar0->tx_fifo_partition_1);
1274 	writeq(val64, &bar0->tx_fifo_partition_2);
1275 	writeq(val64, &bar0->tx_fifo_partition_3);
1276 
1277 	for (i = 0, j = 0; i < config->tx_fifo_num; i++) {
1278 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
1279 
1280 		val64 |= vBIT(tx_cfg->fifo_len - 1, ((j * 32) + 19), 13) |
1281 			vBIT(tx_cfg->fifo_priority, ((j * 32) + 5), 3);
1282 
1283 		if (i == (config->tx_fifo_num - 1)) {
1284 			if (i % 2 == 0)
1285 				i++;
1286 		}
1287 
1288 		switch (i) {
1289 		case 1:
1290 			writeq(val64, &bar0->tx_fifo_partition_0);
1291 			val64 = 0;
1292 			j = 0;
1293 			break;
1294 		case 3:
1295 			writeq(val64, &bar0->tx_fifo_partition_1);
1296 			val64 = 0;
1297 			j = 0;
1298 			break;
1299 		case 5:
1300 			writeq(val64, &bar0->tx_fifo_partition_2);
1301 			val64 = 0;
1302 			j = 0;
1303 			break;
1304 		case 7:
1305 			writeq(val64, &bar0->tx_fifo_partition_3);
1306 			val64 = 0;
1307 			j = 0;
1308 			break;
1309 		default:
1310 			j++;
1311 			break;
1312 		}
1313 	}
1314 
1315 	/*
1316 	 * Disable 4 PCCs for Xena1, 2 and 3 as per H/W bug
1317 	 * SXE-008 TRANSMIT DMA ARBITRATION ISSUE.
1318 	 */
1319 	if ((nic->device_type == XFRAME_I_DEVICE) && (nic->pdev->revision < 4))
1320 		writeq(PCC_ENABLE_FOUR, &bar0->pcc_enable);
1321 
1322 	val64 = readq(&bar0->tx_fifo_partition_0);
1323 	DBG_PRINT(INIT_DBG, "Fifo partition at: 0x%p is: 0x%llx\n",
1324 		  &bar0->tx_fifo_partition_0, (unsigned long long)val64);
1325 
1326 	/*
1327 	 * Initialization of Tx_PA_CONFIG register to ignore packet
1328 	 * integrity checking.
1329 	 */
1330 	val64 = readq(&bar0->tx_pa_cfg);
1331 	val64 |= TX_PA_CFG_IGNORE_FRM_ERR |
1332 		TX_PA_CFG_IGNORE_SNAP_OUI |
1333 		TX_PA_CFG_IGNORE_LLC_CTRL |
1334 		TX_PA_CFG_IGNORE_L2_ERR;
1335 	writeq(val64, &bar0->tx_pa_cfg);
1336 
1337 	/* Rx DMA initialization. */
1338 	val64 = 0;
1339 	for (i = 0; i < config->rx_ring_num; i++) {
1340 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
1341 
1342 		val64 |= vBIT(rx_cfg->ring_priority, (5 + (i * 8)), 3);
1343 	}
1344 	writeq(val64, &bar0->rx_queue_priority);
1345 
1346 	/*
1347 	 * Allocating equal share of memory to all the
1348 	 * configured Rings.
1349 	 */
1350 	val64 = 0;
1351 	if (nic->device_type & XFRAME_II_DEVICE)
1352 		mem_size = 32;
1353 	else
1354 		mem_size = 64;
1355 
1356 	for (i = 0; i < config->rx_ring_num; i++) {
1357 		switch (i) {
1358 		case 0:
1359 			mem_share = (mem_size / config->rx_ring_num +
1360 				     mem_size % config->rx_ring_num);
1361 			val64 |= RX_QUEUE_CFG_Q0_SZ(mem_share);
1362 			continue;
1363 		case 1:
1364 			mem_share = (mem_size / config->rx_ring_num);
1365 			val64 |= RX_QUEUE_CFG_Q1_SZ(mem_share);
1366 			continue;
1367 		case 2:
1368 			mem_share = (mem_size / config->rx_ring_num);
1369 			val64 |= RX_QUEUE_CFG_Q2_SZ(mem_share);
1370 			continue;
1371 		case 3:
1372 			mem_share = (mem_size / config->rx_ring_num);
1373 			val64 |= RX_QUEUE_CFG_Q3_SZ(mem_share);
1374 			continue;
1375 		case 4:
1376 			mem_share = (mem_size / config->rx_ring_num);
1377 			val64 |= RX_QUEUE_CFG_Q4_SZ(mem_share);
1378 			continue;
1379 		case 5:
1380 			mem_share = (mem_size / config->rx_ring_num);
1381 			val64 |= RX_QUEUE_CFG_Q5_SZ(mem_share);
1382 			continue;
1383 		case 6:
1384 			mem_share = (mem_size / config->rx_ring_num);
1385 			val64 |= RX_QUEUE_CFG_Q6_SZ(mem_share);
1386 			continue;
1387 		case 7:
1388 			mem_share = (mem_size / config->rx_ring_num);
1389 			val64 |= RX_QUEUE_CFG_Q7_SZ(mem_share);
1390 			continue;
1391 		}
1392 	}
1393 	writeq(val64, &bar0->rx_queue_cfg);
1394 
1395 	/*
1396 	 * Filling Tx round robin registers
1397 	 * as per the number of FIFOs for equal scheduling priority
1398 	 */
1399 	switch (config->tx_fifo_num) {
1400 	case 1:
1401 		val64 = 0x0;
1402 		writeq(val64, &bar0->tx_w_round_robin_0);
1403 		writeq(val64, &bar0->tx_w_round_robin_1);
1404 		writeq(val64, &bar0->tx_w_round_robin_2);
1405 		writeq(val64, &bar0->tx_w_round_robin_3);
1406 		writeq(val64, &bar0->tx_w_round_robin_4);
1407 		break;
1408 	case 2:
1409 		val64 = 0x0001000100010001ULL;
1410 		writeq(val64, &bar0->tx_w_round_robin_0);
1411 		writeq(val64, &bar0->tx_w_round_robin_1);
1412 		writeq(val64, &bar0->tx_w_round_robin_2);
1413 		writeq(val64, &bar0->tx_w_round_robin_3);
1414 		val64 = 0x0001000100000000ULL;
1415 		writeq(val64, &bar0->tx_w_round_robin_4);
1416 		break;
1417 	case 3:
1418 		val64 = 0x0001020001020001ULL;
1419 		writeq(val64, &bar0->tx_w_round_robin_0);
1420 		val64 = 0x0200010200010200ULL;
1421 		writeq(val64, &bar0->tx_w_round_robin_1);
1422 		val64 = 0x0102000102000102ULL;
1423 		writeq(val64, &bar0->tx_w_round_robin_2);
1424 		val64 = 0x0001020001020001ULL;
1425 		writeq(val64, &bar0->tx_w_round_robin_3);
1426 		val64 = 0x0200010200000000ULL;
1427 		writeq(val64, &bar0->tx_w_round_robin_4);
1428 		break;
1429 	case 4:
1430 		val64 = 0x0001020300010203ULL;
1431 		writeq(val64, &bar0->tx_w_round_robin_0);
1432 		writeq(val64, &bar0->tx_w_round_robin_1);
1433 		writeq(val64, &bar0->tx_w_round_robin_2);
1434 		writeq(val64, &bar0->tx_w_round_robin_3);
1435 		val64 = 0x0001020300000000ULL;
1436 		writeq(val64, &bar0->tx_w_round_robin_4);
1437 		break;
1438 	case 5:
1439 		val64 = 0x0001020304000102ULL;
1440 		writeq(val64, &bar0->tx_w_round_robin_0);
1441 		val64 = 0x0304000102030400ULL;
1442 		writeq(val64, &bar0->tx_w_round_robin_1);
1443 		val64 = 0x0102030400010203ULL;
1444 		writeq(val64, &bar0->tx_w_round_robin_2);
1445 		val64 = 0x0400010203040001ULL;
1446 		writeq(val64, &bar0->tx_w_round_robin_3);
1447 		val64 = 0x0203040000000000ULL;
1448 		writeq(val64, &bar0->tx_w_round_robin_4);
1449 		break;
1450 	case 6:
1451 		val64 = 0x0001020304050001ULL;
1452 		writeq(val64, &bar0->tx_w_round_robin_0);
1453 		val64 = 0x0203040500010203ULL;
1454 		writeq(val64, &bar0->tx_w_round_robin_1);
1455 		val64 = 0x0405000102030405ULL;
1456 		writeq(val64, &bar0->tx_w_round_robin_2);
1457 		val64 = 0x0001020304050001ULL;
1458 		writeq(val64, &bar0->tx_w_round_robin_3);
1459 		val64 = 0x0203040500000000ULL;
1460 		writeq(val64, &bar0->tx_w_round_robin_4);
1461 		break;
1462 	case 7:
1463 		val64 = 0x0001020304050600ULL;
1464 		writeq(val64, &bar0->tx_w_round_robin_0);
1465 		val64 = 0x0102030405060001ULL;
1466 		writeq(val64, &bar0->tx_w_round_robin_1);
1467 		val64 = 0x0203040506000102ULL;
1468 		writeq(val64, &bar0->tx_w_round_robin_2);
1469 		val64 = 0x0304050600010203ULL;
1470 		writeq(val64, &bar0->tx_w_round_robin_3);
1471 		val64 = 0x0405060000000000ULL;
1472 		writeq(val64, &bar0->tx_w_round_robin_4);
1473 		break;
1474 	case 8:
1475 		val64 = 0x0001020304050607ULL;
1476 		writeq(val64, &bar0->tx_w_round_robin_0);
1477 		writeq(val64, &bar0->tx_w_round_robin_1);
1478 		writeq(val64, &bar0->tx_w_round_robin_2);
1479 		writeq(val64, &bar0->tx_w_round_robin_3);
1480 		val64 = 0x0001020300000000ULL;
1481 		writeq(val64, &bar0->tx_w_round_robin_4);
1482 		break;
1483 	}
1484 
1485 	/* Enable all configured Tx FIFO partitions */
1486 	val64 = readq(&bar0->tx_fifo_partition_0);
1487 	val64 |= (TX_FIFO_PARTITION_EN);
1488 	writeq(val64, &bar0->tx_fifo_partition_0);
1489 
1490 	/* Filling the Rx round robin registers as per the
1491 	 * number of Rings and steering based on QoS with
1492 	 * equal priority.
1493 	 */
1494 	switch (config->rx_ring_num) {
1495 	case 1:
1496 		val64 = 0x0;
1497 		writeq(val64, &bar0->rx_w_round_robin_0);
1498 		writeq(val64, &bar0->rx_w_round_robin_1);
1499 		writeq(val64, &bar0->rx_w_round_robin_2);
1500 		writeq(val64, &bar0->rx_w_round_robin_3);
1501 		writeq(val64, &bar0->rx_w_round_robin_4);
1502 
1503 		val64 = 0x8080808080808080ULL;
1504 		writeq(val64, &bar0->rts_qos_steering);
1505 		break;
1506 	case 2:
1507 		val64 = 0x0001000100010001ULL;
1508 		writeq(val64, &bar0->rx_w_round_robin_0);
1509 		writeq(val64, &bar0->rx_w_round_robin_1);
1510 		writeq(val64, &bar0->rx_w_round_robin_2);
1511 		writeq(val64, &bar0->rx_w_round_robin_3);
1512 		val64 = 0x0001000100000000ULL;
1513 		writeq(val64, &bar0->rx_w_round_robin_4);
1514 
1515 		val64 = 0x8080808040404040ULL;
1516 		writeq(val64, &bar0->rts_qos_steering);
1517 		break;
1518 	case 3:
1519 		val64 = 0x0001020001020001ULL;
1520 		writeq(val64, &bar0->rx_w_round_robin_0);
1521 		val64 = 0x0200010200010200ULL;
1522 		writeq(val64, &bar0->rx_w_round_robin_1);
1523 		val64 = 0x0102000102000102ULL;
1524 		writeq(val64, &bar0->rx_w_round_robin_2);
1525 		val64 = 0x0001020001020001ULL;
1526 		writeq(val64, &bar0->rx_w_round_robin_3);
1527 		val64 = 0x0200010200000000ULL;
1528 		writeq(val64, &bar0->rx_w_round_robin_4);
1529 
1530 		val64 = 0x8080804040402020ULL;
1531 		writeq(val64, &bar0->rts_qos_steering);
1532 		break;
1533 	case 4:
1534 		val64 = 0x0001020300010203ULL;
1535 		writeq(val64, &bar0->rx_w_round_robin_0);
1536 		writeq(val64, &bar0->rx_w_round_robin_1);
1537 		writeq(val64, &bar0->rx_w_round_robin_2);
1538 		writeq(val64, &bar0->rx_w_round_robin_3);
1539 		val64 = 0x0001020300000000ULL;
1540 		writeq(val64, &bar0->rx_w_round_robin_4);
1541 
1542 		val64 = 0x8080404020201010ULL;
1543 		writeq(val64, &bar0->rts_qos_steering);
1544 		break;
1545 	case 5:
1546 		val64 = 0x0001020304000102ULL;
1547 		writeq(val64, &bar0->rx_w_round_robin_0);
1548 		val64 = 0x0304000102030400ULL;
1549 		writeq(val64, &bar0->rx_w_round_robin_1);
1550 		val64 = 0x0102030400010203ULL;
1551 		writeq(val64, &bar0->rx_w_round_robin_2);
1552 		val64 = 0x0400010203040001ULL;
1553 		writeq(val64, &bar0->rx_w_round_robin_3);
1554 		val64 = 0x0203040000000000ULL;
1555 		writeq(val64, &bar0->rx_w_round_robin_4);
1556 
1557 		val64 = 0x8080404020201008ULL;
1558 		writeq(val64, &bar0->rts_qos_steering);
1559 		break;
1560 	case 6:
1561 		val64 = 0x0001020304050001ULL;
1562 		writeq(val64, &bar0->rx_w_round_robin_0);
1563 		val64 = 0x0203040500010203ULL;
1564 		writeq(val64, &bar0->rx_w_round_robin_1);
1565 		val64 = 0x0405000102030405ULL;
1566 		writeq(val64, &bar0->rx_w_round_robin_2);
1567 		val64 = 0x0001020304050001ULL;
1568 		writeq(val64, &bar0->rx_w_round_robin_3);
1569 		val64 = 0x0203040500000000ULL;
1570 		writeq(val64, &bar0->rx_w_round_robin_4);
1571 
1572 		val64 = 0x8080404020100804ULL;
1573 		writeq(val64, &bar0->rts_qos_steering);
1574 		break;
1575 	case 7:
1576 		val64 = 0x0001020304050600ULL;
1577 		writeq(val64, &bar0->rx_w_round_robin_0);
1578 		val64 = 0x0102030405060001ULL;
1579 		writeq(val64, &bar0->rx_w_round_robin_1);
1580 		val64 = 0x0203040506000102ULL;
1581 		writeq(val64, &bar0->rx_w_round_robin_2);
1582 		val64 = 0x0304050600010203ULL;
1583 		writeq(val64, &bar0->rx_w_round_robin_3);
1584 		val64 = 0x0405060000000000ULL;
1585 		writeq(val64, &bar0->rx_w_round_robin_4);
1586 
1587 		val64 = 0x8080402010080402ULL;
1588 		writeq(val64, &bar0->rts_qos_steering);
1589 		break;
1590 	case 8:
1591 		val64 = 0x0001020304050607ULL;
1592 		writeq(val64, &bar0->rx_w_round_robin_0);
1593 		writeq(val64, &bar0->rx_w_round_robin_1);
1594 		writeq(val64, &bar0->rx_w_round_robin_2);
1595 		writeq(val64, &bar0->rx_w_round_robin_3);
1596 		val64 = 0x0001020300000000ULL;
1597 		writeq(val64, &bar0->rx_w_round_robin_4);
1598 
1599 		val64 = 0x8040201008040201ULL;
1600 		writeq(val64, &bar0->rts_qos_steering);
1601 		break;
1602 	}
1603 
1604 	/* UDP Fix */
1605 	val64 = 0;
1606 	for (i = 0; i < 8; i++)
1607 		writeq(val64, &bar0->rts_frm_len_n[i]);
1608 
1609 	/* Set the default rts frame length for the rings configured */
1610 	val64 = MAC_RTS_FRM_LEN_SET(dev->mtu+22);
1611 	for (i = 0 ; i < config->rx_ring_num ; i++)
1612 		writeq(val64, &bar0->rts_frm_len_n[i]);
1613 
1614 	/* Set the frame length for the configured rings
1615 	 * desired by the user
1616 	 */
1617 	for (i = 0; i < config->rx_ring_num; i++) {
1618 		/* If rts_frm_len[i] == 0 then it is assumed that user not
1619 		 * specified frame length steering.
1620 		 * If the user provides the frame length then program
1621 		 * the rts_frm_len register for those values or else
1622 		 * leave it as it is.
1623 		 */
1624 		if (rts_frm_len[i] != 0) {
1625 			writeq(MAC_RTS_FRM_LEN_SET(rts_frm_len[i]),
1626 			       &bar0->rts_frm_len_n[i]);
1627 		}
1628 	}
1629 
1630 	/* Disable differentiated services steering logic */
1631 	for (i = 0; i < 64; i++) {
1632 		if (rts_ds_steer(nic, i, 0) == FAILURE) {
1633 			DBG_PRINT(ERR_DBG,
1634 				  "%s: rts_ds_steer failed on codepoint %d\n",
1635 				  dev->name, i);
1636 			return -ENODEV;
1637 		}
1638 	}
1639 
1640 	/* Program statistics memory */
1641 	writeq(mac_control->stats_mem_phy, &bar0->stat_addr);
1642 
1643 	if (nic->device_type == XFRAME_II_DEVICE) {
1644 		val64 = STAT_BC(0x320);
1645 		writeq(val64, &bar0->stat_byte_cnt);
1646 	}
1647 
1648 	/*
1649 	 * Initializing the sampling rate for the device to calculate the
1650 	 * bandwidth utilization.
1651 	 */
1652 	val64 = MAC_TX_LINK_UTIL_VAL(tmac_util_period) |
1653 		MAC_RX_LINK_UTIL_VAL(rmac_util_period);
1654 	writeq(val64, &bar0->mac_link_util);
1655 
1656 	/*
1657 	 * Initializing the Transmit and Receive Traffic Interrupt
1658 	 * Scheme.
1659 	 */
1660 
1661 	/* Initialize TTI */
1662 	if (SUCCESS != init_tti(nic, nic->last_link_state))
1663 		return -ENODEV;
1664 
1665 	/* RTI Initialization */
1666 	if (nic->device_type == XFRAME_II_DEVICE) {
1667 		/*
1668 		 * Programmed to generate Apprx 500 Intrs per
1669 		 * second
1670 		 */
1671 		int count = (nic->config.bus_speed * 125)/4;
1672 		val64 = RTI_DATA1_MEM_RX_TIMER_VAL(count);
1673 	} else
1674 		val64 = RTI_DATA1_MEM_RX_TIMER_VAL(0xFFF);
1675 	val64 |= RTI_DATA1_MEM_RX_URNG_A(0xA) |
1676 		RTI_DATA1_MEM_RX_URNG_B(0x10) |
1677 		RTI_DATA1_MEM_RX_URNG_C(0x30) |
1678 		RTI_DATA1_MEM_RX_TIMER_AC_EN;
1679 
1680 	writeq(val64, &bar0->rti_data1_mem);
1681 
1682 	val64 = RTI_DATA2_MEM_RX_UFC_A(0x1) |
1683 		RTI_DATA2_MEM_RX_UFC_B(0x2) ;
1684 	if (nic->config.intr_type == MSI_X)
1685 		val64 |= (RTI_DATA2_MEM_RX_UFC_C(0x20) |
1686 			  RTI_DATA2_MEM_RX_UFC_D(0x40));
1687 	else
1688 		val64 |= (RTI_DATA2_MEM_RX_UFC_C(0x40) |
1689 			  RTI_DATA2_MEM_RX_UFC_D(0x80));
1690 	writeq(val64, &bar0->rti_data2_mem);
1691 
1692 	for (i = 0; i < config->rx_ring_num; i++) {
1693 		val64 = RTI_CMD_MEM_WE |
1694 			RTI_CMD_MEM_STROBE_NEW_CMD |
1695 			RTI_CMD_MEM_OFFSET(i);
1696 		writeq(val64, &bar0->rti_command_mem);
1697 
1698 		/*
1699 		 * Once the operation completes, the Strobe bit of the
1700 		 * command register will be reset. We poll for this
1701 		 * particular condition. We wait for a maximum of 500ms
1702 		 * for the operation to complete, if it's not complete
1703 		 * by then we return error.
1704 		 */
1705 		time = 0;
1706 		while (true) {
1707 			val64 = readq(&bar0->rti_command_mem);
1708 			if (!(val64 & RTI_CMD_MEM_STROBE_NEW_CMD))
1709 				break;
1710 
1711 			if (time > 10) {
1712 				DBG_PRINT(ERR_DBG, "%s: RTI init failed\n",
1713 					  dev->name);
1714 				return -ENODEV;
1715 			}
1716 			time++;
1717 			msleep(50);
1718 		}
1719 	}
1720 
1721 	/*
1722 	 * Initializing proper values as Pause threshold into all
1723 	 * the 8 Queues on Rx side.
1724 	 */
1725 	writeq(0xffbbffbbffbbffbbULL, &bar0->mc_pause_thresh_q0q3);
1726 	writeq(0xffbbffbbffbbffbbULL, &bar0->mc_pause_thresh_q4q7);
1727 
1728 	/* Disable RMAC PAD STRIPPING */
1729 	add = &bar0->mac_cfg;
1730 	val64 = readq(&bar0->mac_cfg);
1731 	val64 &= ~(MAC_CFG_RMAC_STRIP_PAD);
1732 	writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1733 	writel((u32) (val64), add);
1734 	writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1735 	writel((u32) (val64 >> 32), (add + 4));
1736 	val64 = readq(&bar0->mac_cfg);
1737 
1738 	/* Enable FCS stripping by adapter */
1739 	add = &bar0->mac_cfg;
1740 	val64 = readq(&bar0->mac_cfg);
1741 	val64 |= MAC_CFG_RMAC_STRIP_FCS;
1742 	if (nic->device_type == XFRAME_II_DEVICE)
1743 		writeq(val64, &bar0->mac_cfg);
1744 	else {
1745 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1746 		writel((u32) (val64), add);
1747 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1748 		writel((u32) (val64 >> 32), (add + 4));
1749 	}
1750 
1751 	/*
1752 	 * Set the time value to be inserted in the pause frame
1753 	 * generated by xena.
1754 	 */
1755 	val64 = readq(&bar0->rmac_pause_cfg);
1756 	val64 &= ~(RMAC_PAUSE_HG_PTIME(0xffff));
1757 	val64 |= RMAC_PAUSE_HG_PTIME(nic->mac_control.rmac_pause_time);
1758 	writeq(val64, &bar0->rmac_pause_cfg);
1759 
1760 	/*
1761 	 * Set the Threshold Limit for Generating the pause frame
1762 	 * If the amount of data in any Queue exceeds ratio of
1763 	 * (mac_control.mc_pause_threshold_q0q3 or q4q7)/256
1764 	 * pause frame is generated
1765 	 */
1766 	val64 = 0;
1767 	for (i = 0; i < 4; i++) {
1768 		val64 |= (((u64)0xFF00 |
1769 			   nic->mac_control.mc_pause_threshold_q0q3)
1770 			  << (i * 2 * 8));
1771 	}
1772 	writeq(val64, &bar0->mc_pause_thresh_q0q3);
1773 
1774 	val64 = 0;
1775 	for (i = 0; i < 4; i++) {
1776 		val64 |= (((u64)0xFF00 |
1777 			   nic->mac_control.mc_pause_threshold_q4q7)
1778 			  << (i * 2 * 8));
1779 	}
1780 	writeq(val64, &bar0->mc_pause_thresh_q4q7);
1781 
1782 	/*
1783 	 * TxDMA will stop Read request if the number of read split has
1784 	 * exceeded the limit pointed by shared_splits
1785 	 */
1786 	val64 = readq(&bar0->pic_control);
1787 	val64 |= PIC_CNTL_SHARED_SPLITS(shared_splits);
1788 	writeq(val64, &bar0->pic_control);
1789 
1790 	if (nic->config.bus_speed == 266) {
1791 		writeq(TXREQTO_VAL(0x7f) | TXREQTO_EN, &bar0->txreqtimeout);
1792 		writeq(0x0, &bar0->read_retry_delay);
1793 		writeq(0x0, &bar0->write_retry_delay);
1794 	}
1795 
1796 	/*
1797 	 * Programming the Herc to split every write transaction
1798 	 * that does not start on an ADB to reduce disconnects.
1799 	 */
1800 	if (nic->device_type == XFRAME_II_DEVICE) {
1801 		val64 = FAULT_BEHAVIOUR | EXT_REQ_EN |
1802 			MISC_LINK_STABILITY_PRD(3);
1803 		writeq(val64, &bar0->misc_control);
1804 		val64 = readq(&bar0->pic_control2);
1805 		val64 &= ~(s2BIT(13)|s2BIT(14)|s2BIT(15));
1806 		writeq(val64, &bar0->pic_control2);
1807 	}
1808 	if (strstr(nic->product_name, "CX4")) {
1809 		val64 = TMAC_AVG_IPG(0x17);
1810 		writeq(val64, &bar0->tmac_avg_ipg);
1811 	}
1812 
1813 	return SUCCESS;
1814 }
1815 #define LINK_UP_DOWN_INTERRUPT		1
1816 #define MAC_RMAC_ERR_TIMER		2
1817 
1818 static int s2io_link_fault_indication(struct s2io_nic *nic)
1819 {
1820 	if (nic->device_type == XFRAME_II_DEVICE)
1821 		return LINK_UP_DOWN_INTERRUPT;
1822 	else
1823 		return MAC_RMAC_ERR_TIMER;
1824 }
1825 
1826 /**
1827  *  do_s2io_write_bits -  update alarm bits in alarm register
1828  *  @value: alarm bits
1829  *  @flag: interrupt status
1830  *  @addr: address value
1831  *  Description: update alarm bits in alarm register
1832  *  Return Value:
1833  *  NONE.
1834  */
1835 static void do_s2io_write_bits(u64 value, int flag, void __iomem *addr)
1836 {
1837 	u64 temp64;
1838 
1839 	temp64 = readq(addr);
1840 
1841 	if (flag == ENABLE_INTRS)
1842 		temp64 &= ~((u64)value);
1843 	else
1844 		temp64 |= ((u64)value);
1845 	writeq(temp64, addr);
1846 }
1847 
1848 static void en_dis_err_alarms(struct s2io_nic *nic, u16 mask, int flag)
1849 {
1850 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1851 	register u64 gen_int_mask = 0;
1852 	u64 interruptible;
1853 
1854 	writeq(DISABLE_ALL_INTRS, &bar0->general_int_mask);
1855 	if (mask & TX_DMA_INTR) {
1856 		gen_int_mask |= TXDMA_INT_M;
1857 
1858 		do_s2io_write_bits(TXDMA_TDA_INT | TXDMA_PFC_INT |
1859 				   TXDMA_PCC_INT | TXDMA_TTI_INT |
1860 				   TXDMA_LSO_INT | TXDMA_TPA_INT |
1861 				   TXDMA_SM_INT, flag, &bar0->txdma_int_mask);
1862 
1863 		do_s2io_write_bits(PFC_ECC_DB_ERR | PFC_SM_ERR_ALARM |
1864 				   PFC_MISC_0_ERR | PFC_MISC_1_ERR |
1865 				   PFC_PCIX_ERR | PFC_ECC_SG_ERR, flag,
1866 				   &bar0->pfc_err_mask);
1867 
1868 		do_s2io_write_bits(TDA_Fn_ECC_DB_ERR | TDA_SM0_ERR_ALARM |
1869 				   TDA_SM1_ERR_ALARM | TDA_Fn_ECC_SG_ERR |
1870 				   TDA_PCIX_ERR, flag, &bar0->tda_err_mask);
1871 
1872 		do_s2io_write_bits(PCC_FB_ECC_DB_ERR | PCC_TXB_ECC_DB_ERR |
1873 				   PCC_SM_ERR_ALARM | PCC_WR_ERR_ALARM |
1874 				   PCC_N_SERR | PCC_6_COF_OV_ERR |
1875 				   PCC_7_COF_OV_ERR | PCC_6_LSO_OV_ERR |
1876 				   PCC_7_LSO_OV_ERR | PCC_FB_ECC_SG_ERR |
1877 				   PCC_TXB_ECC_SG_ERR,
1878 				   flag, &bar0->pcc_err_mask);
1879 
1880 		do_s2io_write_bits(TTI_SM_ERR_ALARM | TTI_ECC_SG_ERR |
1881 				   TTI_ECC_DB_ERR, flag, &bar0->tti_err_mask);
1882 
1883 		do_s2io_write_bits(LSO6_ABORT | LSO7_ABORT |
1884 				   LSO6_SM_ERR_ALARM | LSO7_SM_ERR_ALARM |
1885 				   LSO6_SEND_OFLOW | LSO7_SEND_OFLOW,
1886 				   flag, &bar0->lso_err_mask);
1887 
1888 		do_s2io_write_bits(TPA_SM_ERR_ALARM | TPA_TX_FRM_DROP,
1889 				   flag, &bar0->tpa_err_mask);
1890 
1891 		do_s2io_write_bits(SM_SM_ERR_ALARM, flag, &bar0->sm_err_mask);
1892 	}
1893 
1894 	if (mask & TX_MAC_INTR) {
1895 		gen_int_mask |= TXMAC_INT_M;
1896 		do_s2io_write_bits(MAC_INT_STATUS_TMAC_INT, flag,
1897 				   &bar0->mac_int_mask);
1898 		do_s2io_write_bits(TMAC_TX_BUF_OVRN | TMAC_TX_SM_ERR |
1899 				   TMAC_ECC_SG_ERR | TMAC_ECC_DB_ERR |
1900 				   TMAC_DESC_ECC_SG_ERR | TMAC_DESC_ECC_DB_ERR,
1901 				   flag, &bar0->mac_tmac_err_mask);
1902 	}
1903 
1904 	if (mask & TX_XGXS_INTR) {
1905 		gen_int_mask |= TXXGXS_INT_M;
1906 		do_s2io_write_bits(XGXS_INT_STATUS_TXGXS, flag,
1907 				   &bar0->xgxs_int_mask);
1908 		do_s2io_write_bits(TXGXS_ESTORE_UFLOW | TXGXS_TX_SM_ERR |
1909 				   TXGXS_ECC_SG_ERR | TXGXS_ECC_DB_ERR,
1910 				   flag, &bar0->xgxs_txgxs_err_mask);
1911 	}
1912 
1913 	if (mask & RX_DMA_INTR) {
1914 		gen_int_mask |= RXDMA_INT_M;
1915 		do_s2io_write_bits(RXDMA_INT_RC_INT_M | RXDMA_INT_RPA_INT_M |
1916 				   RXDMA_INT_RDA_INT_M | RXDMA_INT_RTI_INT_M,
1917 				   flag, &bar0->rxdma_int_mask);
1918 		do_s2io_write_bits(RC_PRCn_ECC_DB_ERR | RC_FTC_ECC_DB_ERR |
1919 				   RC_PRCn_SM_ERR_ALARM | RC_FTC_SM_ERR_ALARM |
1920 				   RC_PRCn_ECC_SG_ERR | RC_FTC_ECC_SG_ERR |
1921 				   RC_RDA_FAIL_WR_Rn, flag, &bar0->rc_err_mask);
1922 		do_s2io_write_bits(PRC_PCI_AB_RD_Rn | PRC_PCI_AB_WR_Rn |
1923 				   PRC_PCI_AB_F_WR_Rn | PRC_PCI_DP_RD_Rn |
1924 				   PRC_PCI_DP_WR_Rn | PRC_PCI_DP_F_WR_Rn, flag,
1925 				   &bar0->prc_pcix_err_mask);
1926 		do_s2io_write_bits(RPA_SM_ERR_ALARM | RPA_CREDIT_ERR |
1927 				   RPA_ECC_SG_ERR | RPA_ECC_DB_ERR, flag,
1928 				   &bar0->rpa_err_mask);
1929 		do_s2io_write_bits(RDA_RXDn_ECC_DB_ERR | RDA_FRM_ECC_DB_N_AERR |
1930 				   RDA_SM1_ERR_ALARM | RDA_SM0_ERR_ALARM |
1931 				   RDA_RXD_ECC_DB_SERR | RDA_RXDn_ECC_SG_ERR |
1932 				   RDA_FRM_ECC_SG_ERR |
1933 				   RDA_MISC_ERR|RDA_PCIX_ERR,
1934 				   flag, &bar0->rda_err_mask);
1935 		do_s2io_write_bits(RTI_SM_ERR_ALARM |
1936 				   RTI_ECC_SG_ERR | RTI_ECC_DB_ERR,
1937 				   flag, &bar0->rti_err_mask);
1938 	}
1939 
1940 	if (mask & RX_MAC_INTR) {
1941 		gen_int_mask |= RXMAC_INT_M;
1942 		do_s2io_write_bits(MAC_INT_STATUS_RMAC_INT, flag,
1943 				   &bar0->mac_int_mask);
1944 		interruptible = (RMAC_RX_BUFF_OVRN | RMAC_RX_SM_ERR |
1945 				 RMAC_UNUSED_INT | RMAC_SINGLE_ECC_ERR |
1946 				 RMAC_DOUBLE_ECC_ERR);
1947 		if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER)
1948 			interruptible |= RMAC_LINK_STATE_CHANGE_INT;
1949 		do_s2io_write_bits(interruptible,
1950 				   flag, &bar0->mac_rmac_err_mask);
1951 	}
1952 
1953 	if (mask & RX_XGXS_INTR) {
1954 		gen_int_mask |= RXXGXS_INT_M;
1955 		do_s2io_write_bits(XGXS_INT_STATUS_RXGXS, flag,
1956 				   &bar0->xgxs_int_mask);
1957 		do_s2io_write_bits(RXGXS_ESTORE_OFLOW | RXGXS_RX_SM_ERR, flag,
1958 				   &bar0->xgxs_rxgxs_err_mask);
1959 	}
1960 
1961 	if (mask & MC_INTR) {
1962 		gen_int_mask |= MC_INT_M;
1963 		do_s2io_write_bits(MC_INT_MASK_MC_INT,
1964 				   flag, &bar0->mc_int_mask);
1965 		do_s2io_write_bits(MC_ERR_REG_SM_ERR | MC_ERR_REG_ECC_ALL_SNG |
1966 				   MC_ERR_REG_ECC_ALL_DBL | PLL_LOCK_N, flag,
1967 				   &bar0->mc_err_mask);
1968 	}
1969 	nic->general_int_mask = gen_int_mask;
1970 
1971 	/* Remove this line when alarm interrupts are enabled */
1972 	nic->general_int_mask = 0;
1973 }
1974 
1975 /**
1976  *  en_dis_able_nic_intrs - Enable or Disable the interrupts
1977  *  @nic: device private variable,
1978  *  @mask: A mask indicating which Intr block must be modified and,
1979  *  @flag: A flag indicating whether to enable or disable the Intrs.
1980  *  Description: This function will either disable or enable the interrupts
1981  *  depending on the flag argument. The mask argument can be used to
1982  *  enable/disable any Intr block.
1983  *  Return Value: NONE.
1984  */
1985 
1986 static void en_dis_able_nic_intrs(struct s2io_nic *nic, u16 mask, int flag)
1987 {
1988 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
1989 	register u64 temp64 = 0, intr_mask = 0;
1990 
1991 	intr_mask = nic->general_int_mask;
1992 
1993 	/*  Top level interrupt classification */
1994 	/*  PIC Interrupts */
1995 	if (mask & TX_PIC_INTR) {
1996 		/*  Enable PIC Intrs in the general intr mask register */
1997 		intr_mask |= TXPIC_INT_M;
1998 		if (flag == ENABLE_INTRS) {
1999 			/*
2000 			 * If Hercules adapter enable GPIO otherwise
2001 			 * disable all PCIX, Flash, MDIO, IIC and GPIO
2002 			 * interrupts for now.
2003 			 * TODO
2004 			 */
2005 			if (s2io_link_fault_indication(nic) ==
2006 			    LINK_UP_DOWN_INTERRUPT) {
2007 				do_s2io_write_bits(PIC_INT_GPIO, flag,
2008 						   &bar0->pic_int_mask);
2009 				do_s2io_write_bits(GPIO_INT_MASK_LINK_UP, flag,
2010 						   &bar0->gpio_int_mask);
2011 			} else
2012 				writeq(DISABLE_ALL_INTRS, &bar0->pic_int_mask);
2013 		} else if (flag == DISABLE_INTRS) {
2014 			/*
2015 			 * Disable PIC Intrs in the general
2016 			 * intr mask register
2017 			 */
2018 			writeq(DISABLE_ALL_INTRS, &bar0->pic_int_mask);
2019 		}
2020 	}
2021 
2022 	/*  Tx traffic interrupts */
2023 	if (mask & TX_TRAFFIC_INTR) {
2024 		intr_mask |= TXTRAFFIC_INT_M;
2025 		if (flag == ENABLE_INTRS) {
2026 			/*
2027 			 * Enable all the Tx side interrupts
2028 			 * writing 0 Enables all 64 TX interrupt levels
2029 			 */
2030 			writeq(0x0, &bar0->tx_traffic_mask);
2031 		} else if (flag == DISABLE_INTRS) {
2032 			/*
2033 			 * Disable Tx Traffic Intrs in the general intr mask
2034 			 * register.
2035 			 */
2036 			writeq(DISABLE_ALL_INTRS, &bar0->tx_traffic_mask);
2037 		}
2038 	}
2039 
2040 	/*  Rx traffic interrupts */
2041 	if (mask & RX_TRAFFIC_INTR) {
2042 		intr_mask |= RXTRAFFIC_INT_M;
2043 		if (flag == ENABLE_INTRS) {
2044 			/* writing 0 Enables all 8 RX interrupt levels */
2045 			writeq(0x0, &bar0->rx_traffic_mask);
2046 		} else if (flag == DISABLE_INTRS) {
2047 			/*
2048 			 * Disable Rx Traffic Intrs in the general intr mask
2049 			 * register.
2050 			 */
2051 			writeq(DISABLE_ALL_INTRS, &bar0->rx_traffic_mask);
2052 		}
2053 	}
2054 
2055 	temp64 = readq(&bar0->general_int_mask);
2056 	if (flag == ENABLE_INTRS)
2057 		temp64 &= ~((u64)intr_mask);
2058 	else
2059 		temp64 = DISABLE_ALL_INTRS;
2060 	writeq(temp64, &bar0->general_int_mask);
2061 
2062 	nic->general_int_mask = readq(&bar0->general_int_mask);
2063 }
2064 
2065 /**
2066  *  verify_pcc_quiescent- Checks for PCC quiescent state
2067  *  Return: 1 If PCC is quiescence
2068  *          0 If PCC is not quiescence
2069  */
2070 static int verify_pcc_quiescent(struct s2io_nic *sp, int flag)
2071 {
2072 	int ret = 0, herc;
2073 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
2074 	u64 val64 = readq(&bar0->adapter_status);
2075 
2076 	herc = (sp->device_type == XFRAME_II_DEVICE);
2077 
2078 	if (flag == false) {
2079 		if ((!herc && (sp->pdev->revision >= 4)) || herc) {
2080 			if (!(val64 & ADAPTER_STATUS_RMAC_PCC_IDLE))
2081 				ret = 1;
2082 		} else {
2083 			if (!(val64 & ADAPTER_STATUS_RMAC_PCC_FOUR_IDLE))
2084 				ret = 1;
2085 		}
2086 	} else {
2087 		if ((!herc && (sp->pdev->revision >= 4)) || herc) {
2088 			if (((val64 & ADAPTER_STATUS_RMAC_PCC_IDLE) ==
2089 			     ADAPTER_STATUS_RMAC_PCC_IDLE))
2090 				ret = 1;
2091 		} else {
2092 			if (((val64 & ADAPTER_STATUS_RMAC_PCC_FOUR_IDLE) ==
2093 			     ADAPTER_STATUS_RMAC_PCC_FOUR_IDLE))
2094 				ret = 1;
2095 		}
2096 	}
2097 
2098 	return ret;
2099 }
2100 /**
2101  *  verify_xena_quiescence - Checks whether the H/W is ready
2102  *  Description: Returns whether the H/W is ready to go or not. Depending
2103  *  on whether adapter enable bit was written or not the comparison
2104  *  differs and the calling function passes the input argument flag to
2105  *  indicate this.
2106  *  Return: 1 If xena is quiescence
2107  *          0 If Xena is not quiescence
2108  */
2109 
2110 static int verify_xena_quiescence(struct s2io_nic *sp)
2111 {
2112 	int  mode;
2113 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
2114 	u64 val64 = readq(&bar0->adapter_status);
2115 	mode = s2io_verify_pci_mode(sp);
2116 
2117 	if (!(val64 & ADAPTER_STATUS_TDMA_READY)) {
2118 		DBG_PRINT(ERR_DBG, "TDMA is not ready!\n");
2119 		return 0;
2120 	}
2121 	if (!(val64 & ADAPTER_STATUS_RDMA_READY)) {
2122 		DBG_PRINT(ERR_DBG, "RDMA is not ready!\n");
2123 		return 0;
2124 	}
2125 	if (!(val64 & ADAPTER_STATUS_PFC_READY)) {
2126 		DBG_PRINT(ERR_DBG, "PFC is not ready!\n");
2127 		return 0;
2128 	}
2129 	if (!(val64 & ADAPTER_STATUS_TMAC_BUF_EMPTY)) {
2130 		DBG_PRINT(ERR_DBG, "TMAC BUF is not empty!\n");
2131 		return 0;
2132 	}
2133 	if (!(val64 & ADAPTER_STATUS_PIC_QUIESCENT)) {
2134 		DBG_PRINT(ERR_DBG, "PIC is not QUIESCENT!\n");
2135 		return 0;
2136 	}
2137 	if (!(val64 & ADAPTER_STATUS_MC_DRAM_READY)) {
2138 		DBG_PRINT(ERR_DBG, "MC_DRAM is not ready!\n");
2139 		return 0;
2140 	}
2141 	if (!(val64 & ADAPTER_STATUS_MC_QUEUES_READY)) {
2142 		DBG_PRINT(ERR_DBG, "MC_QUEUES is not ready!\n");
2143 		return 0;
2144 	}
2145 	if (!(val64 & ADAPTER_STATUS_M_PLL_LOCK)) {
2146 		DBG_PRINT(ERR_DBG, "M_PLL is not locked!\n");
2147 		return 0;
2148 	}
2149 
2150 	/*
2151 	 * In PCI 33 mode, the P_PLL is not used, and therefore,
2152 	 * the the P_PLL_LOCK bit in the adapter_status register will
2153 	 * not be asserted.
2154 	 */
2155 	if (!(val64 & ADAPTER_STATUS_P_PLL_LOCK) &&
2156 	    sp->device_type == XFRAME_II_DEVICE &&
2157 	    mode != PCI_MODE_PCI_33) {
2158 		DBG_PRINT(ERR_DBG, "P_PLL is not locked!\n");
2159 		return 0;
2160 	}
2161 	if (!((val64 & ADAPTER_STATUS_RC_PRC_QUIESCENT) ==
2162 	      ADAPTER_STATUS_RC_PRC_QUIESCENT)) {
2163 		DBG_PRINT(ERR_DBG, "RC_PRC is not QUIESCENT!\n");
2164 		return 0;
2165 	}
2166 	return 1;
2167 }
2168 
2169 /**
2170  * fix_mac_address -  Fix for Mac addr problem on Alpha platforms
2171  * @sp: Pointer to device specifc structure
2172  * Description :
2173  * New procedure to clear mac address reading  problems on Alpha platforms
2174  *
2175  */
2176 
2177 static void fix_mac_address(struct s2io_nic *sp)
2178 {
2179 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
2180 	int i = 0;
2181 
2182 	while (fix_mac[i] != END_SIGN) {
2183 		writeq(fix_mac[i++], &bar0->gpio_control);
2184 		udelay(10);
2185 		(void) readq(&bar0->gpio_control);
2186 	}
2187 }
2188 
2189 /**
2190  *  start_nic - Turns the device on
2191  *  @nic : device private variable.
2192  *  Description:
2193  *  This function actually turns the device on. Before this  function is
2194  *  called,all Registers are configured from their reset states
2195  *  and shared memory is allocated but the NIC is still quiescent. On
2196  *  calling this function, the device interrupts are cleared and the NIC is
2197  *  literally switched on by writing into the adapter control register.
2198  *  Return Value:
2199  *  SUCCESS on success and -1 on failure.
2200  */
2201 
2202 static int start_nic(struct s2io_nic *nic)
2203 {
2204 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2205 	struct net_device *dev = nic->dev;
2206 	register u64 val64 = 0;
2207 	u16 subid, i;
2208 	struct config_param *config = &nic->config;
2209 	struct mac_info *mac_control = &nic->mac_control;
2210 
2211 	/*  PRC Initialization and configuration */
2212 	for (i = 0; i < config->rx_ring_num; i++) {
2213 		struct ring_info *ring = &mac_control->rings[i];
2214 
2215 		writeq((u64)ring->rx_blocks[0].block_dma_addr,
2216 		       &bar0->prc_rxd0_n[i]);
2217 
2218 		val64 = readq(&bar0->prc_ctrl_n[i]);
2219 		if (nic->rxd_mode == RXD_MODE_1)
2220 			val64 |= PRC_CTRL_RC_ENABLED;
2221 		else
2222 			val64 |= PRC_CTRL_RC_ENABLED | PRC_CTRL_RING_MODE_3;
2223 		if (nic->device_type == XFRAME_II_DEVICE)
2224 			val64 |= PRC_CTRL_GROUP_READS;
2225 		val64 &= ~PRC_CTRL_RXD_BACKOFF_INTERVAL(0xFFFFFF);
2226 		val64 |= PRC_CTRL_RXD_BACKOFF_INTERVAL(0x1000);
2227 		writeq(val64, &bar0->prc_ctrl_n[i]);
2228 	}
2229 
2230 	if (nic->rxd_mode == RXD_MODE_3B) {
2231 		/* Enabling 2 buffer mode by writing into Rx_pa_cfg reg. */
2232 		val64 = readq(&bar0->rx_pa_cfg);
2233 		val64 |= RX_PA_CFG_IGNORE_L2_ERR;
2234 		writeq(val64, &bar0->rx_pa_cfg);
2235 	}
2236 
2237 	if (vlan_tag_strip == 0) {
2238 		val64 = readq(&bar0->rx_pa_cfg);
2239 		val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
2240 		writeq(val64, &bar0->rx_pa_cfg);
2241 		nic->vlan_strip_flag = 0;
2242 	}
2243 
2244 	/*
2245 	 * Enabling MC-RLDRAM. After enabling the device, we timeout
2246 	 * for around 100ms, which is approximately the time required
2247 	 * for the device to be ready for operation.
2248 	 */
2249 	val64 = readq(&bar0->mc_rldram_mrs);
2250 	val64 |= MC_RLDRAM_QUEUE_SIZE_ENABLE | MC_RLDRAM_MRS_ENABLE;
2251 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
2252 	val64 = readq(&bar0->mc_rldram_mrs);
2253 
2254 	msleep(100);	/* Delay by around 100 ms. */
2255 
2256 	/* Enabling ECC Protection. */
2257 	val64 = readq(&bar0->adapter_control);
2258 	val64 &= ~ADAPTER_ECC_EN;
2259 	writeq(val64, &bar0->adapter_control);
2260 
2261 	/*
2262 	 * Verify if the device is ready to be enabled, if so enable
2263 	 * it.
2264 	 */
2265 	val64 = readq(&bar0->adapter_status);
2266 	if (!verify_xena_quiescence(nic)) {
2267 		DBG_PRINT(ERR_DBG, "%s: device is not ready, "
2268 			  "Adapter status reads: 0x%llx\n",
2269 			  dev->name, (unsigned long long)val64);
2270 		return FAILURE;
2271 	}
2272 
2273 	/*
2274 	 * With some switches, link might be already up at this point.
2275 	 * Because of this weird behavior, when we enable laser,
2276 	 * we may not get link. We need to handle this. We cannot
2277 	 * figure out which switch is misbehaving. So we are forced to
2278 	 * make a global change.
2279 	 */
2280 
2281 	/* Enabling Laser. */
2282 	val64 = readq(&bar0->adapter_control);
2283 	val64 |= ADAPTER_EOI_TX_ON;
2284 	writeq(val64, &bar0->adapter_control);
2285 
2286 	if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER) {
2287 		/*
2288 		 * Dont see link state interrupts initially on some switches,
2289 		 * so directly scheduling the link state task here.
2290 		 */
2291 		schedule_work(&nic->set_link_task);
2292 	}
2293 	/* SXE-002: Initialize link and activity LED */
2294 	subid = nic->pdev->subsystem_device;
2295 	if (((subid & 0xFF) >= 0x07) &&
2296 	    (nic->device_type == XFRAME_I_DEVICE)) {
2297 		val64 = readq(&bar0->gpio_control);
2298 		val64 |= 0x0000800000000000ULL;
2299 		writeq(val64, &bar0->gpio_control);
2300 		val64 = 0x0411040400000000ULL;
2301 		writeq(val64, (void __iomem *)bar0 + 0x2700);
2302 	}
2303 
2304 	return SUCCESS;
2305 }
2306 /**
2307  * s2io_txdl_getskb - Get the skb from txdl, unmap and return skb
2308  */
2309 static struct sk_buff *s2io_txdl_getskb(struct fifo_info *fifo_data,
2310 					struct TxD *txdlp, int get_off)
2311 {
2312 	struct s2io_nic *nic = fifo_data->nic;
2313 	struct sk_buff *skb;
2314 	struct TxD *txds;
2315 	u16 j, frg_cnt;
2316 
2317 	txds = txdlp;
2318 	if (txds->Host_Control == (u64)(long)fifo_data->ufo_in_band_v) {
2319 		dma_unmap_single(&nic->pdev->dev,
2320 				 (dma_addr_t)txds->Buffer_Pointer,
2321 				 sizeof(u64), DMA_TO_DEVICE);
2322 		txds++;
2323 	}
2324 
2325 	skb = (struct sk_buff *)((unsigned long)txds->Host_Control);
2326 	if (!skb) {
2327 		memset(txdlp, 0, (sizeof(struct TxD) * fifo_data->max_txds));
2328 		return NULL;
2329 	}
2330 	dma_unmap_single(&nic->pdev->dev, (dma_addr_t)txds->Buffer_Pointer,
2331 			 skb_headlen(skb), DMA_TO_DEVICE);
2332 	frg_cnt = skb_shinfo(skb)->nr_frags;
2333 	if (frg_cnt) {
2334 		txds++;
2335 		for (j = 0; j < frg_cnt; j++, txds++) {
2336 			const skb_frag_t *frag = &skb_shinfo(skb)->frags[j];
2337 			if (!txds->Buffer_Pointer)
2338 				break;
2339 			dma_unmap_page(&nic->pdev->dev,
2340 				       (dma_addr_t)txds->Buffer_Pointer,
2341 				       skb_frag_size(frag), DMA_TO_DEVICE);
2342 		}
2343 	}
2344 	memset(txdlp, 0, (sizeof(struct TxD) * fifo_data->max_txds));
2345 	return skb;
2346 }
2347 
2348 /**
2349  *  free_tx_buffers - Free all queued Tx buffers
2350  *  @nic : device private variable.
2351  *  Description:
2352  *  Free all queued Tx buffers.
2353  *  Return Value: void
2354  */
2355 
2356 static void free_tx_buffers(struct s2io_nic *nic)
2357 {
2358 	struct net_device *dev = nic->dev;
2359 	struct sk_buff *skb;
2360 	struct TxD *txdp;
2361 	int i, j;
2362 	int cnt = 0;
2363 	struct config_param *config = &nic->config;
2364 	struct mac_info *mac_control = &nic->mac_control;
2365 	struct stat_block *stats = mac_control->stats_info;
2366 	struct swStat *swstats = &stats->sw_stat;
2367 
2368 	for (i = 0; i < config->tx_fifo_num; i++) {
2369 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
2370 		struct fifo_info *fifo = &mac_control->fifos[i];
2371 		unsigned long flags;
2372 
2373 		spin_lock_irqsave(&fifo->tx_lock, flags);
2374 		for (j = 0; j < tx_cfg->fifo_len; j++) {
2375 			txdp = fifo->list_info[j].list_virt_addr;
2376 			skb = s2io_txdl_getskb(&mac_control->fifos[i], txdp, j);
2377 			if (skb) {
2378 				swstats->mem_freed += skb->truesize;
2379 				dev_kfree_skb(skb);
2380 				cnt++;
2381 			}
2382 		}
2383 		DBG_PRINT(INTR_DBG,
2384 			  "%s: forcibly freeing %d skbs on FIFO%d\n",
2385 			  dev->name, cnt, i);
2386 		fifo->tx_curr_get_info.offset = 0;
2387 		fifo->tx_curr_put_info.offset = 0;
2388 		spin_unlock_irqrestore(&fifo->tx_lock, flags);
2389 	}
2390 }
2391 
2392 /**
2393  *   stop_nic -  To stop the nic
2394  *   @nic ; device private variable.
2395  *   Description:
2396  *   This function does exactly the opposite of what the start_nic()
2397  *   function does. This function is called to stop the device.
2398  *   Return Value:
2399  *   void.
2400  */
2401 
2402 static void stop_nic(struct s2io_nic *nic)
2403 {
2404 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2405 	register u64 val64 = 0;
2406 	u16 interruptible;
2407 
2408 	/*  Disable all interrupts */
2409 	en_dis_err_alarms(nic, ENA_ALL_INTRS, DISABLE_INTRS);
2410 	interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR;
2411 	interruptible |= TX_PIC_INTR;
2412 	en_dis_able_nic_intrs(nic, interruptible, DISABLE_INTRS);
2413 
2414 	/* Clearing Adapter_En bit of ADAPTER_CONTROL Register */
2415 	val64 = readq(&bar0->adapter_control);
2416 	val64 &= ~(ADAPTER_CNTL_EN);
2417 	writeq(val64, &bar0->adapter_control);
2418 }
2419 
2420 /**
2421  *  fill_rx_buffers - Allocates the Rx side skbs
2422  *  @ring_info: per ring structure
2423  *  @from_card_up: If this is true, we will map the buffer to get
2424  *     the dma address for buf0 and buf1 to give it to the card.
2425  *     Else we will sync the already mapped buffer to give it to the card.
2426  *  Description:
2427  *  The function allocates Rx side skbs and puts the physical
2428  *  address of these buffers into the RxD buffer pointers, so that the NIC
2429  *  can DMA the received frame into these locations.
2430  *  The NIC supports 3 receive modes, viz
2431  *  1. single buffer,
2432  *  2. three buffer and
2433  *  3. Five buffer modes.
2434  *  Each mode defines how many fragments the received frame will be split
2435  *  up into by the NIC. The frame is split into L3 header, L4 Header,
2436  *  L4 payload in three buffer mode and in 5 buffer mode, L4 payload itself
2437  *  is split into 3 fragments. As of now only single buffer mode is
2438  *  supported.
2439  *   Return Value:
2440  *  SUCCESS on success or an appropriate -ve value on failure.
2441  */
2442 static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
2443 			   int from_card_up)
2444 {
2445 	struct sk_buff *skb;
2446 	struct RxD_t *rxdp;
2447 	int off, size, block_no, block_no1;
2448 	u32 alloc_tab = 0;
2449 	u32 alloc_cnt;
2450 	u64 tmp;
2451 	struct buffAdd *ba;
2452 	struct RxD_t *first_rxdp = NULL;
2453 	u64 Buffer0_ptr = 0, Buffer1_ptr = 0;
2454 	struct RxD1 *rxdp1;
2455 	struct RxD3 *rxdp3;
2456 	struct swStat *swstats = &ring->nic->mac_control.stats_info->sw_stat;
2457 
2458 	alloc_cnt = ring->pkt_cnt - ring->rx_bufs_left;
2459 
2460 	block_no1 = ring->rx_curr_get_info.block_index;
2461 	while (alloc_tab < alloc_cnt) {
2462 		block_no = ring->rx_curr_put_info.block_index;
2463 
2464 		off = ring->rx_curr_put_info.offset;
2465 
2466 		rxdp = ring->rx_blocks[block_no].rxds[off].virt_addr;
2467 
2468 		if ((block_no == block_no1) &&
2469 		    (off == ring->rx_curr_get_info.offset) &&
2470 		    (rxdp->Host_Control)) {
2471 			DBG_PRINT(INTR_DBG, "%s: Get and Put info equated\n",
2472 				  ring->dev->name);
2473 			goto end;
2474 		}
2475 		if (off && (off == ring->rxd_count)) {
2476 			ring->rx_curr_put_info.block_index++;
2477 			if (ring->rx_curr_put_info.block_index ==
2478 			    ring->block_count)
2479 				ring->rx_curr_put_info.block_index = 0;
2480 			block_no = ring->rx_curr_put_info.block_index;
2481 			off = 0;
2482 			ring->rx_curr_put_info.offset = off;
2483 			rxdp = ring->rx_blocks[block_no].block_virt_addr;
2484 			DBG_PRINT(INTR_DBG, "%s: Next block at: %p\n",
2485 				  ring->dev->name, rxdp);
2486 
2487 		}
2488 
2489 		if ((rxdp->Control_1 & RXD_OWN_XENA) &&
2490 		    ((ring->rxd_mode == RXD_MODE_3B) &&
2491 		     (rxdp->Control_2 & s2BIT(0)))) {
2492 			ring->rx_curr_put_info.offset = off;
2493 			goto end;
2494 		}
2495 		/* calculate size of skb based on ring mode */
2496 		size = ring->mtu +
2497 			HEADER_ETHERNET_II_802_3_SIZE +
2498 			HEADER_802_2_SIZE + HEADER_SNAP_SIZE;
2499 		if (ring->rxd_mode == RXD_MODE_1)
2500 			size += NET_IP_ALIGN;
2501 		else
2502 			size = ring->mtu + ALIGN_SIZE + BUF0_LEN + 4;
2503 
2504 		/* allocate skb */
2505 		skb = netdev_alloc_skb(nic->dev, size);
2506 		if (!skb) {
2507 			DBG_PRINT(INFO_DBG, "%s: Could not allocate skb\n",
2508 				  ring->dev->name);
2509 			if (first_rxdp) {
2510 				dma_wmb();
2511 				first_rxdp->Control_1 |= RXD_OWN_XENA;
2512 			}
2513 			swstats->mem_alloc_fail_cnt++;
2514 
2515 			return -ENOMEM ;
2516 		}
2517 		swstats->mem_allocated += skb->truesize;
2518 
2519 		if (ring->rxd_mode == RXD_MODE_1) {
2520 			/* 1 buffer mode - normal operation mode */
2521 			rxdp1 = (struct RxD1 *)rxdp;
2522 			memset(rxdp, 0, sizeof(struct RxD1));
2523 			skb_reserve(skb, NET_IP_ALIGN);
2524 			rxdp1->Buffer0_ptr =
2525 				dma_map_single(&ring->pdev->dev, skb->data,
2526 					       size - NET_IP_ALIGN,
2527 					       DMA_FROM_DEVICE);
2528 			if (dma_mapping_error(&nic->pdev->dev, rxdp1->Buffer0_ptr))
2529 				goto pci_map_failed;
2530 
2531 			rxdp->Control_2 =
2532 				SET_BUFFER0_SIZE_1(size - NET_IP_ALIGN);
2533 			rxdp->Host_Control = (unsigned long)skb;
2534 		} else if (ring->rxd_mode == RXD_MODE_3B) {
2535 			/*
2536 			 * 2 buffer mode -
2537 			 * 2 buffer mode provides 128
2538 			 * byte aligned receive buffers.
2539 			 */
2540 
2541 			rxdp3 = (struct RxD3 *)rxdp;
2542 			/* save buffer pointers to avoid frequent dma mapping */
2543 			Buffer0_ptr = rxdp3->Buffer0_ptr;
2544 			Buffer1_ptr = rxdp3->Buffer1_ptr;
2545 			memset(rxdp, 0, sizeof(struct RxD3));
2546 			/* restore the buffer pointers for dma sync*/
2547 			rxdp3->Buffer0_ptr = Buffer0_ptr;
2548 			rxdp3->Buffer1_ptr = Buffer1_ptr;
2549 
2550 			ba = &ring->ba[block_no][off];
2551 			skb_reserve(skb, BUF0_LEN);
2552 			tmp = (u64)(unsigned long)skb->data;
2553 			tmp += ALIGN_SIZE;
2554 			tmp &= ~ALIGN_SIZE;
2555 			skb->data = (void *) (unsigned long)tmp;
2556 			skb_reset_tail_pointer(skb);
2557 
2558 			if (from_card_up) {
2559 				rxdp3->Buffer0_ptr =
2560 					dma_map_single(&ring->pdev->dev,
2561 						       ba->ba_0, BUF0_LEN,
2562 						       DMA_FROM_DEVICE);
2563 				if (dma_mapping_error(&nic->pdev->dev, rxdp3->Buffer0_ptr))
2564 					goto pci_map_failed;
2565 			} else
2566 				dma_sync_single_for_device(&ring->pdev->dev,
2567 							   (dma_addr_t)rxdp3->Buffer0_ptr,
2568 							   BUF0_LEN,
2569 							   DMA_FROM_DEVICE);
2570 
2571 			rxdp->Control_2 = SET_BUFFER0_SIZE_3(BUF0_LEN);
2572 			if (ring->rxd_mode == RXD_MODE_3B) {
2573 				/* Two buffer mode */
2574 
2575 				/*
2576 				 * Buffer2 will have L3/L4 header plus
2577 				 * L4 payload
2578 				 */
2579 				rxdp3->Buffer2_ptr = dma_map_single(&ring->pdev->dev,
2580 								    skb->data,
2581 								    ring->mtu + 4,
2582 								    DMA_FROM_DEVICE);
2583 
2584 				if (dma_mapping_error(&nic->pdev->dev, rxdp3->Buffer2_ptr))
2585 					goto pci_map_failed;
2586 
2587 				if (from_card_up) {
2588 					rxdp3->Buffer1_ptr =
2589 						dma_map_single(&ring->pdev->dev,
2590 							       ba->ba_1,
2591 							       BUF1_LEN,
2592 							       DMA_FROM_DEVICE);
2593 
2594 					if (dma_mapping_error(&nic->pdev->dev,
2595 							      rxdp3->Buffer1_ptr)) {
2596 						dma_unmap_single(&ring->pdev->dev,
2597 								 (dma_addr_t)(unsigned long)
2598 								 skb->data,
2599 								 ring->mtu + 4,
2600 								 DMA_FROM_DEVICE);
2601 						goto pci_map_failed;
2602 					}
2603 				}
2604 				rxdp->Control_2 |= SET_BUFFER1_SIZE_3(1);
2605 				rxdp->Control_2 |= SET_BUFFER2_SIZE_3
2606 					(ring->mtu + 4);
2607 			}
2608 			rxdp->Control_2 |= s2BIT(0);
2609 			rxdp->Host_Control = (unsigned long) (skb);
2610 		}
2611 		if (alloc_tab & ((1 << rxsync_frequency) - 1))
2612 			rxdp->Control_1 |= RXD_OWN_XENA;
2613 		off++;
2614 		if (off == (ring->rxd_count + 1))
2615 			off = 0;
2616 		ring->rx_curr_put_info.offset = off;
2617 
2618 		rxdp->Control_2 |= SET_RXD_MARKER;
2619 		if (!(alloc_tab & ((1 << rxsync_frequency) - 1))) {
2620 			if (first_rxdp) {
2621 				dma_wmb();
2622 				first_rxdp->Control_1 |= RXD_OWN_XENA;
2623 			}
2624 			first_rxdp = rxdp;
2625 		}
2626 		ring->rx_bufs_left += 1;
2627 		alloc_tab++;
2628 	}
2629 
2630 end:
2631 	/* Transfer ownership of first descriptor to adapter just before
2632 	 * exiting. Before that, use memory barrier so that ownership
2633 	 * and other fields are seen by adapter correctly.
2634 	 */
2635 	if (first_rxdp) {
2636 		dma_wmb();
2637 		first_rxdp->Control_1 |= RXD_OWN_XENA;
2638 	}
2639 
2640 	return SUCCESS;
2641 
2642 pci_map_failed:
2643 	swstats->pci_map_fail_cnt++;
2644 	swstats->mem_freed += skb->truesize;
2645 	dev_kfree_skb_irq(skb);
2646 	return -ENOMEM;
2647 }
2648 
2649 static void free_rxd_blk(struct s2io_nic *sp, int ring_no, int blk)
2650 {
2651 	struct net_device *dev = sp->dev;
2652 	int j;
2653 	struct sk_buff *skb;
2654 	struct RxD_t *rxdp;
2655 	struct RxD1 *rxdp1;
2656 	struct RxD3 *rxdp3;
2657 	struct mac_info *mac_control = &sp->mac_control;
2658 	struct stat_block *stats = mac_control->stats_info;
2659 	struct swStat *swstats = &stats->sw_stat;
2660 
2661 	for (j = 0 ; j < rxd_count[sp->rxd_mode]; j++) {
2662 		rxdp = mac_control->rings[ring_no].
2663 			rx_blocks[blk].rxds[j].virt_addr;
2664 		skb = (struct sk_buff *)((unsigned long)rxdp->Host_Control);
2665 		if (!skb)
2666 			continue;
2667 		if (sp->rxd_mode == RXD_MODE_1) {
2668 			rxdp1 = (struct RxD1 *)rxdp;
2669 			dma_unmap_single(&sp->pdev->dev,
2670 					 (dma_addr_t)rxdp1->Buffer0_ptr,
2671 					 dev->mtu +
2672 					 HEADER_ETHERNET_II_802_3_SIZE +
2673 					 HEADER_802_2_SIZE + HEADER_SNAP_SIZE,
2674 					 DMA_FROM_DEVICE);
2675 			memset(rxdp, 0, sizeof(struct RxD1));
2676 		} else if (sp->rxd_mode == RXD_MODE_3B) {
2677 			rxdp3 = (struct RxD3 *)rxdp;
2678 			dma_unmap_single(&sp->pdev->dev,
2679 					 (dma_addr_t)rxdp3->Buffer0_ptr,
2680 					 BUF0_LEN, DMA_FROM_DEVICE);
2681 			dma_unmap_single(&sp->pdev->dev,
2682 					 (dma_addr_t)rxdp3->Buffer1_ptr,
2683 					 BUF1_LEN, DMA_FROM_DEVICE);
2684 			dma_unmap_single(&sp->pdev->dev,
2685 					 (dma_addr_t)rxdp3->Buffer2_ptr,
2686 					 dev->mtu + 4, DMA_FROM_DEVICE);
2687 			memset(rxdp, 0, sizeof(struct RxD3));
2688 		}
2689 		swstats->mem_freed += skb->truesize;
2690 		dev_kfree_skb(skb);
2691 		mac_control->rings[ring_no].rx_bufs_left -= 1;
2692 	}
2693 }
2694 
2695 /**
2696  *  free_rx_buffers - Frees all Rx buffers
2697  *  @sp: device private variable.
2698  *  Description:
2699  *  This function will free all Rx buffers allocated by host.
2700  *  Return Value:
2701  *  NONE.
2702  */
2703 
2704 static void free_rx_buffers(struct s2io_nic *sp)
2705 {
2706 	struct net_device *dev = sp->dev;
2707 	int i, blk = 0, buf_cnt = 0;
2708 	struct config_param *config = &sp->config;
2709 	struct mac_info *mac_control = &sp->mac_control;
2710 
2711 	for (i = 0; i < config->rx_ring_num; i++) {
2712 		struct ring_info *ring = &mac_control->rings[i];
2713 
2714 		for (blk = 0; blk < rx_ring_sz[i]; blk++)
2715 			free_rxd_blk(sp, i, blk);
2716 
2717 		ring->rx_curr_put_info.block_index = 0;
2718 		ring->rx_curr_get_info.block_index = 0;
2719 		ring->rx_curr_put_info.offset = 0;
2720 		ring->rx_curr_get_info.offset = 0;
2721 		ring->rx_bufs_left = 0;
2722 		DBG_PRINT(INIT_DBG, "%s: Freed 0x%x Rx Buffers on ring%d\n",
2723 			  dev->name, buf_cnt, i);
2724 	}
2725 }
2726 
2727 static int s2io_chk_rx_buffers(struct s2io_nic *nic, struct ring_info *ring)
2728 {
2729 	if (fill_rx_buffers(nic, ring, 0) == -ENOMEM) {
2730 		DBG_PRINT(INFO_DBG, "%s: Out of memory in Rx Intr!!\n",
2731 			  ring->dev->name);
2732 	}
2733 	return 0;
2734 }
2735 
2736 /**
2737  * s2io_poll - Rx interrupt handler for NAPI support
2738  * @napi : pointer to the napi structure.
2739  * @budget : The number of packets that were budgeted to be processed
2740  * during  one pass through the 'Poll" function.
2741  * Description:
2742  * Comes into picture only if NAPI support has been incorporated. It does
2743  * the same thing that rx_intr_handler does, but not in a interrupt context
2744  * also It will process only a given number of packets.
2745  * Return value:
2746  * 0 on success and 1 if there are No Rx packets to be processed.
2747  */
2748 
2749 static int s2io_poll_msix(struct napi_struct *napi, int budget)
2750 {
2751 	struct ring_info *ring = container_of(napi, struct ring_info, napi);
2752 	struct net_device *dev = ring->dev;
2753 	int pkts_processed = 0;
2754 	u8 __iomem *addr = NULL;
2755 	u8 val8 = 0;
2756 	struct s2io_nic *nic = netdev_priv(dev);
2757 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2758 	int budget_org = budget;
2759 
2760 	if (unlikely(!is_s2io_card_up(nic)))
2761 		return 0;
2762 
2763 	pkts_processed = rx_intr_handler(ring, budget);
2764 	s2io_chk_rx_buffers(nic, ring);
2765 
2766 	if (pkts_processed < budget_org) {
2767 		napi_complete_done(napi, pkts_processed);
2768 		/*Re Enable MSI-Rx Vector*/
2769 		addr = (u8 __iomem *)&bar0->xmsi_mask_reg;
2770 		addr += 7 - ring->ring_no;
2771 		val8 = (ring->ring_no == 0) ? 0x3f : 0xbf;
2772 		writeb(val8, addr);
2773 		val8 = readb(addr);
2774 	}
2775 	return pkts_processed;
2776 }
2777 
2778 static int s2io_poll_inta(struct napi_struct *napi, int budget)
2779 {
2780 	struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi);
2781 	int pkts_processed = 0;
2782 	int ring_pkts_processed, i;
2783 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2784 	int budget_org = budget;
2785 	struct config_param *config = &nic->config;
2786 	struct mac_info *mac_control = &nic->mac_control;
2787 
2788 	if (unlikely(!is_s2io_card_up(nic)))
2789 		return 0;
2790 
2791 	for (i = 0; i < config->rx_ring_num; i++) {
2792 		struct ring_info *ring = &mac_control->rings[i];
2793 		ring_pkts_processed = rx_intr_handler(ring, budget);
2794 		s2io_chk_rx_buffers(nic, ring);
2795 		pkts_processed += ring_pkts_processed;
2796 		budget -= ring_pkts_processed;
2797 		if (budget <= 0)
2798 			break;
2799 	}
2800 	if (pkts_processed < budget_org) {
2801 		napi_complete_done(napi, pkts_processed);
2802 		/* Re enable the Rx interrupts for the ring */
2803 		writeq(0, &bar0->rx_traffic_mask);
2804 		readl(&bar0->rx_traffic_mask);
2805 	}
2806 	return pkts_processed;
2807 }
2808 
2809 #ifdef CONFIG_NET_POLL_CONTROLLER
2810 /**
2811  * s2io_netpoll - netpoll event handler entry point
2812  * @dev : pointer to the device structure.
2813  * Description:
2814  * 	This function will be called by upper layer to check for events on the
2815  * interface in situations where interrupts are disabled. It is used for
2816  * specific in-kernel networking tasks, such as remote consoles and kernel
2817  * debugging over the network (example netdump in RedHat).
2818  */
2819 static void s2io_netpoll(struct net_device *dev)
2820 {
2821 	struct s2io_nic *nic = netdev_priv(dev);
2822 	const int irq = nic->pdev->irq;
2823 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2824 	u64 val64 = 0xFFFFFFFFFFFFFFFFULL;
2825 	int i;
2826 	struct config_param *config = &nic->config;
2827 	struct mac_info *mac_control = &nic->mac_control;
2828 
2829 	if (pci_channel_offline(nic->pdev))
2830 		return;
2831 
2832 	disable_irq(irq);
2833 
2834 	writeq(val64, &bar0->rx_traffic_int);
2835 	writeq(val64, &bar0->tx_traffic_int);
2836 
2837 	/* we need to free up the transmitted skbufs or else netpoll will
2838 	 * run out of skbs and will fail and eventually netpoll application such
2839 	 * as netdump will fail.
2840 	 */
2841 	for (i = 0; i < config->tx_fifo_num; i++)
2842 		tx_intr_handler(&mac_control->fifos[i]);
2843 
2844 	/* check for received packet and indicate up to network */
2845 	for (i = 0; i < config->rx_ring_num; i++) {
2846 		struct ring_info *ring = &mac_control->rings[i];
2847 
2848 		rx_intr_handler(ring, 0);
2849 	}
2850 
2851 	for (i = 0; i < config->rx_ring_num; i++) {
2852 		struct ring_info *ring = &mac_control->rings[i];
2853 
2854 		if (fill_rx_buffers(nic, ring, 0) == -ENOMEM) {
2855 			DBG_PRINT(INFO_DBG,
2856 				  "%s: Out of memory in Rx Netpoll!!\n",
2857 				  dev->name);
2858 			break;
2859 		}
2860 	}
2861 	enable_irq(irq);
2862 }
2863 #endif
2864 
2865 /**
2866  *  rx_intr_handler - Rx interrupt handler
2867  *  @ring_info: per ring structure.
2868  *  @budget: budget for napi processing.
2869  *  Description:
2870  *  If the interrupt is because of a received frame or if the
2871  *  receive ring contains fresh as yet un-processed frames,this function is
2872  *  called. It picks out the RxD at which place the last Rx processing had
2873  *  stopped and sends the skb to the OSM's Rx handler and then increments
2874  *  the offset.
2875  *  Return Value:
2876  *  No. of napi packets processed.
2877  */
2878 static int rx_intr_handler(struct ring_info *ring_data, int budget)
2879 {
2880 	int get_block, put_block;
2881 	struct rx_curr_get_info get_info, put_info;
2882 	struct RxD_t *rxdp;
2883 	struct sk_buff *skb;
2884 	int pkt_cnt = 0, napi_pkts = 0;
2885 	int i;
2886 	struct RxD1 *rxdp1;
2887 	struct RxD3 *rxdp3;
2888 
2889 	if (budget <= 0)
2890 		return napi_pkts;
2891 
2892 	get_info = ring_data->rx_curr_get_info;
2893 	get_block = get_info.block_index;
2894 	memcpy(&put_info, &ring_data->rx_curr_put_info, sizeof(put_info));
2895 	put_block = put_info.block_index;
2896 	rxdp = ring_data->rx_blocks[get_block].rxds[get_info.offset].virt_addr;
2897 
2898 	while (RXD_IS_UP2DT(rxdp)) {
2899 		/*
2900 		 * If your are next to put index then it's
2901 		 * FIFO full condition
2902 		 */
2903 		if ((get_block == put_block) &&
2904 		    (get_info.offset + 1) == put_info.offset) {
2905 			DBG_PRINT(INTR_DBG, "%s: Ring Full\n",
2906 				  ring_data->dev->name);
2907 			break;
2908 		}
2909 		skb = (struct sk_buff *)((unsigned long)rxdp->Host_Control);
2910 		if (skb == NULL) {
2911 			DBG_PRINT(ERR_DBG, "%s: NULL skb in Rx Intr\n",
2912 				  ring_data->dev->name);
2913 			return 0;
2914 		}
2915 		if (ring_data->rxd_mode == RXD_MODE_1) {
2916 			rxdp1 = (struct RxD1 *)rxdp;
2917 			dma_unmap_single(&ring_data->pdev->dev,
2918 					 (dma_addr_t)rxdp1->Buffer0_ptr,
2919 					 ring_data->mtu +
2920 					 HEADER_ETHERNET_II_802_3_SIZE +
2921 					 HEADER_802_2_SIZE +
2922 					 HEADER_SNAP_SIZE,
2923 					 DMA_FROM_DEVICE);
2924 		} else if (ring_data->rxd_mode == RXD_MODE_3B) {
2925 			rxdp3 = (struct RxD3 *)rxdp;
2926 			dma_sync_single_for_cpu(&ring_data->pdev->dev,
2927 						(dma_addr_t)rxdp3->Buffer0_ptr,
2928 						BUF0_LEN, DMA_FROM_DEVICE);
2929 			dma_unmap_single(&ring_data->pdev->dev,
2930 					 (dma_addr_t)rxdp3->Buffer2_ptr,
2931 					 ring_data->mtu + 4, DMA_FROM_DEVICE);
2932 		}
2933 		prefetch(skb->data);
2934 		rx_osm_handler(ring_data, rxdp);
2935 		get_info.offset++;
2936 		ring_data->rx_curr_get_info.offset = get_info.offset;
2937 		rxdp = ring_data->rx_blocks[get_block].
2938 			rxds[get_info.offset].virt_addr;
2939 		if (get_info.offset == rxd_count[ring_data->rxd_mode]) {
2940 			get_info.offset = 0;
2941 			ring_data->rx_curr_get_info.offset = get_info.offset;
2942 			get_block++;
2943 			if (get_block == ring_data->block_count)
2944 				get_block = 0;
2945 			ring_data->rx_curr_get_info.block_index = get_block;
2946 			rxdp = ring_data->rx_blocks[get_block].block_virt_addr;
2947 		}
2948 
2949 		if (ring_data->nic->config.napi) {
2950 			budget--;
2951 			napi_pkts++;
2952 			if (!budget)
2953 				break;
2954 		}
2955 		pkt_cnt++;
2956 		if ((indicate_max_pkts) && (pkt_cnt > indicate_max_pkts))
2957 			break;
2958 	}
2959 	if (ring_data->lro) {
2960 		/* Clear all LRO sessions before exiting */
2961 		for (i = 0; i < MAX_LRO_SESSIONS; i++) {
2962 			struct lro *lro = &ring_data->lro0_n[i];
2963 			if (lro->in_use) {
2964 				update_L3L4_header(ring_data->nic, lro);
2965 				queue_rx_frame(lro->parent, lro->vlan_tag);
2966 				clear_lro_session(lro);
2967 			}
2968 		}
2969 	}
2970 	return napi_pkts;
2971 }
2972 
2973 /**
2974  *  tx_intr_handler - Transmit interrupt handler
2975  *  @nic : device private variable
2976  *  Description:
2977  *  If an interrupt was raised to indicate DMA complete of the
2978  *  Tx packet, this function is called. It identifies the last TxD
2979  *  whose buffer was freed and frees all skbs whose data have already
2980  *  DMA'ed into the NICs internal memory.
2981  *  Return Value:
2982  *  NONE
2983  */
2984 
2985 static void tx_intr_handler(struct fifo_info *fifo_data)
2986 {
2987 	struct s2io_nic *nic = fifo_data->nic;
2988 	struct tx_curr_get_info get_info, put_info;
2989 	struct sk_buff *skb = NULL;
2990 	struct TxD *txdlp;
2991 	int pkt_cnt = 0;
2992 	unsigned long flags = 0;
2993 	u8 err_mask;
2994 	struct stat_block *stats = nic->mac_control.stats_info;
2995 	struct swStat *swstats = &stats->sw_stat;
2996 
2997 	if (!spin_trylock_irqsave(&fifo_data->tx_lock, flags))
2998 		return;
2999 
3000 	get_info = fifo_data->tx_curr_get_info;
3001 	memcpy(&put_info, &fifo_data->tx_curr_put_info, sizeof(put_info));
3002 	txdlp = fifo_data->list_info[get_info.offset].list_virt_addr;
3003 	while ((!(txdlp->Control_1 & TXD_LIST_OWN_XENA)) &&
3004 	       (get_info.offset != put_info.offset) &&
3005 	       (txdlp->Host_Control)) {
3006 		/* Check for TxD errors */
3007 		if (txdlp->Control_1 & TXD_T_CODE) {
3008 			unsigned long long err;
3009 			err = txdlp->Control_1 & TXD_T_CODE;
3010 			if (err & 0x1) {
3011 				swstats->parity_err_cnt++;
3012 			}
3013 
3014 			/* update t_code statistics */
3015 			err_mask = err >> 48;
3016 			switch (err_mask) {
3017 			case 2:
3018 				swstats->tx_buf_abort_cnt++;
3019 				break;
3020 
3021 			case 3:
3022 				swstats->tx_desc_abort_cnt++;
3023 				break;
3024 
3025 			case 7:
3026 				swstats->tx_parity_err_cnt++;
3027 				break;
3028 
3029 			case 10:
3030 				swstats->tx_link_loss_cnt++;
3031 				break;
3032 
3033 			case 15:
3034 				swstats->tx_list_proc_err_cnt++;
3035 				break;
3036 			}
3037 		}
3038 
3039 		skb = s2io_txdl_getskb(fifo_data, txdlp, get_info.offset);
3040 		if (skb == NULL) {
3041 			spin_unlock_irqrestore(&fifo_data->tx_lock, flags);
3042 			DBG_PRINT(ERR_DBG, "%s: NULL skb in Tx Free Intr\n",
3043 				  __func__);
3044 			return;
3045 		}
3046 		pkt_cnt++;
3047 
3048 		/* Updating the statistics block */
3049 		swstats->mem_freed += skb->truesize;
3050 		dev_consume_skb_irq(skb);
3051 
3052 		get_info.offset++;
3053 		if (get_info.offset == get_info.fifo_len + 1)
3054 			get_info.offset = 0;
3055 		txdlp = fifo_data->list_info[get_info.offset].list_virt_addr;
3056 		fifo_data->tx_curr_get_info.offset = get_info.offset;
3057 	}
3058 
3059 	s2io_wake_tx_queue(fifo_data, pkt_cnt, nic->config.multiq);
3060 
3061 	spin_unlock_irqrestore(&fifo_data->tx_lock, flags);
3062 }
3063 
3064 /**
3065  *  s2io_mdio_write - Function to write in to MDIO registers
3066  *  @mmd_type : MMD type value (PMA/PMD/WIS/PCS/PHYXS)
3067  *  @addr     : address value
3068  *  @value    : data value
3069  *  @dev      : pointer to net_device structure
3070  *  Description:
3071  *  This function is used to write values to the MDIO registers
3072  *  NONE
3073  */
3074 static void s2io_mdio_write(u32 mmd_type, u64 addr, u16 value,
3075 			    struct net_device *dev)
3076 {
3077 	u64 val64;
3078 	struct s2io_nic *sp = netdev_priv(dev);
3079 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3080 
3081 	/* address transaction */
3082 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3083 		MDIO_MMD_DEV_ADDR(mmd_type) |
3084 		MDIO_MMS_PRT_ADDR(0x0);
3085 	writeq(val64, &bar0->mdio_control);
3086 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3087 	writeq(val64, &bar0->mdio_control);
3088 	udelay(100);
3089 
3090 	/* Data transaction */
3091 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3092 		MDIO_MMD_DEV_ADDR(mmd_type) |
3093 		MDIO_MMS_PRT_ADDR(0x0) |
3094 		MDIO_MDIO_DATA(value) |
3095 		MDIO_OP(MDIO_OP_WRITE_TRANS);
3096 	writeq(val64, &bar0->mdio_control);
3097 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3098 	writeq(val64, &bar0->mdio_control);
3099 	udelay(100);
3100 
3101 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3102 		MDIO_MMD_DEV_ADDR(mmd_type) |
3103 		MDIO_MMS_PRT_ADDR(0x0) |
3104 		MDIO_OP(MDIO_OP_READ_TRANS);
3105 	writeq(val64, &bar0->mdio_control);
3106 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3107 	writeq(val64, &bar0->mdio_control);
3108 	udelay(100);
3109 }
3110 
3111 /**
3112  *  s2io_mdio_read - Function to write in to MDIO registers
3113  *  @mmd_type : MMD type value (PMA/PMD/WIS/PCS/PHYXS)
3114  *  @addr     : address value
3115  *  @dev      : pointer to net_device structure
3116  *  Description:
3117  *  This function is used to read values to the MDIO registers
3118  *  NONE
3119  */
3120 static u64 s2io_mdio_read(u32 mmd_type, u64 addr, struct net_device *dev)
3121 {
3122 	u64 val64 = 0x0;
3123 	u64 rval64 = 0x0;
3124 	struct s2io_nic *sp = netdev_priv(dev);
3125 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3126 
3127 	/* address transaction */
3128 	val64 = val64 | (MDIO_MMD_INDX_ADDR(addr)
3129 			 | MDIO_MMD_DEV_ADDR(mmd_type)
3130 			 | MDIO_MMS_PRT_ADDR(0x0));
3131 	writeq(val64, &bar0->mdio_control);
3132 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3133 	writeq(val64, &bar0->mdio_control);
3134 	udelay(100);
3135 
3136 	/* Data transaction */
3137 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3138 		MDIO_MMD_DEV_ADDR(mmd_type) |
3139 		MDIO_MMS_PRT_ADDR(0x0) |
3140 		MDIO_OP(MDIO_OP_READ_TRANS);
3141 	writeq(val64, &bar0->mdio_control);
3142 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3143 	writeq(val64, &bar0->mdio_control);
3144 	udelay(100);
3145 
3146 	/* Read the value from regs */
3147 	rval64 = readq(&bar0->mdio_control);
3148 	rval64 = rval64 & 0xFFFF0000;
3149 	rval64 = rval64 >> 16;
3150 	return rval64;
3151 }
3152 
3153 /**
3154  *  s2io_chk_xpak_counter - Function to check the status of the xpak counters
3155  *  @counter      : counter value to be updated
3156  *  @flag         : flag to indicate the status
3157  *  @type         : counter type
3158  *  Description:
3159  *  This function is to check the status of the xpak counters value
3160  *  NONE
3161  */
3162 
3163 static void s2io_chk_xpak_counter(u64 *counter, u64 * regs_stat, u32 index,
3164 				  u16 flag, u16 type)
3165 {
3166 	u64 mask = 0x3;
3167 	u64 val64;
3168 	int i;
3169 	for (i = 0; i < index; i++)
3170 		mask = mask << 0x2;
3171 
3172 	if (flag > 0) {
3173 		*counter = *counter + 1;
3174 		val64 = *regs_stat & mask;
3175 		val64 = val64 >> (index * 0x2);
3176 		val64 = val64 + 1;
3177 		if (val64 == 3) {
3178 			switch (type) {
3179 			case 1:
3180 				DBG_PRINT(ERR_DBG,
3181 					  "Take Xframe NIC out of service.\n");
3182 				DBG_PRINT(ERR_DBG,
3183 "Excessive temperatures may result in premature transceiver failure.\n");
3184 				break;
3185 			case 2:
3186 				DBG_PRINT(ERR_DBG,
3187 					  "Take Xframe NIC out of service.\n");
3188 				DBG_PRINT(ERR_DBG,
3189 "Excessive bias currents may indicate imminent laser diode failure.\n");
3190 				break;
3191 			case 3:
3192 				DBG_PRINT(ERR_DBG,
3193 					  "Take Xframe NIC out of service.\n");
3194 				DBG_PRINT(ERR_DBG,
3195 "Excessive laser output power may saturate far-end receiver.\n");
3196 				break;
3197 			default:
3198 				DBG_PRINT(ERR_DBG,
3199 					  "Incorrect XPAK Alarm type\n");
3200 			}
3201 			val64 = 0x0;
3202 		}
3203 		val64 = val64 << (index * 0x2);
3204 		*regs_stat = (*regs_stat & (~mask)) | (val64);
3205 
3206 	} else {
3207 		*regs_stat = *regs_stat & (~mask);
3208 	}
3209 }
3210 
3211 /**
3212  *  s2io_updt_xpak_counter - Function to update the xpak counters
3213  *  @dev         : pointer to net_device struct
3214  *  Description:
3215  *  This function is to upate the status of the xpak counters value
3216  *  NONE
3217  */
3218 static void s2io_updt_xpak_counter(struct net_device *dev)
3219 {
3220 	u16 flag  = 0x0;
3221 	u16 type  = 0x0;
3222 	u16 val16 = 0x0;
3223 	u64 val64 = 0x0;
3224 	u64 addr  = 0x0;
3225 
3226 	struct s2io_nic *sp = netdev_priv(dev);
3227 	struct stat_block *stats = sp->mac_control.stats_info;
3228 	struct xpakStat *xstats = &stats->xpak_stat;
3229 
3230 	/* Check the communication with the MDIO slave */
3231 	addr = MDIO_CTRL1;
3232 	val64 = 0x0;
3233 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3234 	if ((val64 == 0xFFFF) || (val64 == 0x0000)) {
3235 		DBG_PRINT(ERR_DBG,
3236 			  "ERR: MDIO slave access failed - Returned %llx\n",
3237 			  (unsigned long long)val64);
3238 		return;
3239 	}
3240 
3241 	/* Check for the expected value of control reg 1 */
3242 	if (val64 != MDIO_CTRL1_SPEED10G) {
3243 		DBG_PRINT(ERR_DBG, "Incorrect value at PMA address 0x0000 - "
3244 			  "Returned: %llx- Expected: 0x%x\n",
3245 			  (unsigned long long)val64, MDIO_CTRL1_SPEED10G);
3246 		return;
3247 	}
3248 
3249 	/* Loading the DOM register to MDIO register */
3250 	addr = 0xA100;
3251 	s2io_mdio_write(MDIO_MMD_PMAPMD, addr, val16, dev);
3252 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3253 
3254 	/* Reading the Alarm flags */
3255 	addr = 0xA070;
3256 	val64 = 0x0;
3257 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3258 
3259 	flag = CHECKBIT(val64, 0x7);
3260 	type = 1;
3261 	s2io_chk_xpak_counter(&xstats->alarm_transceiver_temp_high,
3262 			      &xstats->xpak_regs_stat,
3263 			      0x0, flag, type);
3264 
3265 	if (CHECKBIT(val64, 0x6))
3266 		xstats->alarm_transceiver_temp_low++;
3267 
3268 	flag = CHECKBIT(val64, 0x3);
3269 	type = 2;
3270 	s2io_chk_xpak_counter(&xstats->alarm_laser_bias_current_high,
3271 			      &xstats->xpak_regs_stat,
3272 			      0x2, flag, type);
3273 
3274 	if (CHECKBIT(val64, 0x2))
3275 		xstats->alarm_laser_bias_current_low++;
3276 
3277 	flag = CHECKBIT(val64, 0x1);
3278 	type = 3;
3279 	s2io_chk_xpak_counter(&xstats->alarm_laser_output_power_high,
3280 			      &xstats->xpak_regs_stat,
3281 			      0x4, flag, type);
3282 
3283 	if (CHECKBIT(val64, 0x0))
3284 		xstats->alarm_laser_output_power_low++;
3285 
3286 	/* Reading the Warning flags */
3287 	addr = 0xA074;
3288 	val64 = 0x0;
3289 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3290 
3291 	if (CHECKBIT(val64, 0x7))
3292 		xstats->warn_transceiver_temp_high++;
3293 
3294 	if (CHECKBIT(val64, 0x6))
3295 		xstats->warn_transceiver_temp_low++;
3296 
3297 	if (CHECKBIT(val64, 0x3))
3298 		xstats->warn_laser_bias_current_high++;
3299 
3300 	if (CHECKBIT(val64, 0x2))
3301 		xstats->warn_laser_bias_current_low++;
3302 
3303 	if (CHECKBIT(val64, 0x1))
3304 		xstats->warn_laser_output_power_high++;
3305 
3306 	if (CHECKBIT(val64, 0x0))
3307 		xstats->warn_laser_output_power_low++;
3308 }
3309 
3310 /**
3311  *  wait_for_cmd_complete - waits for a command to complete.
3312  *  @sp : private member of the device structure, which is a pointer to the
3313  *  s2io_nic structure.
3314  *  Description: Function that waits for a command to Write into RMAC
3315  *  ADDR DATA registers to be completed and returns either success or
3316  *  error depending on whether the command was complete or not.
3317  *  Return value:
3318  *   SUCCESS on success and FAILURE on failure.
3319  */
3320 
3321 static int wait_for_cmd_complete(void __iomem *addr, u64 busy_bit,
3322 				 int bit_state)
3323 {
3324 	int ret = FAILURE, cnt = 0, delay = 1;
3325 	u64 val64;
3326 
3327 	if ((bit_state != S2IO_BIT_RESET) && (bit_state != S2IO_BIT_SET))
3328 		return FAILURE;
3329 
3330 	do {
3331 		val64 = readq(addr);
3332 		if (bit_state == S2IO_BIT_RESET) {
3333 			if (!(val64 & busy_bit)) {
3334 				ret = SUCCESS;
3335 				break;
3336 			}
3337 		} else {
3338 			if (val64 & busy_bit) {
3339 				ret = SUCCESS;
3340 				break;
3341 			}
3342 		}
3343 
3344 		if (in_interrupt())
3345 			mdelay(delay);
3346 		else
3347 			msleep(delay);
3348 
3349 		if (++cnt >= 10)
3350 			delay = 50;
3351 	} while (cnt < 20);
3352 	return ret;
3353 }
3354 /**
3355  * check_pci_device_id - Checks if the device id is supported
3356  * @id : device id
3357  * Description: Function to check if the pci device id is supported by driver.
3358  * Return value: Actual device id if supported else PCI_ANY_ID
3359  */
3360 static u16 check_pci_device_id(u16 id)
3361 {
3362 	switch (id) {
3363 	case PCI_DEVICE_ID_HERC_WIN:
3364 	case PCI_DEVICE_ID_HERC_UNI:
3365 		return XFRAME_II_DEVICE;
3366 	case PCI_DEVICE_ID_S2IO_UNI:
3367 	case PCI_DEVICE_ID_S2IO_WIN:
3368 		return XFRAME_I_DEVICE;
3369 	default:
3370 		return PCI_ANY_ID;
3371 	}
3372 }
3373 
3374 /**
3375  *  s2io_reset - Resets the card.
3376  *  @sp : private member of the device structure.
3377  *  Description: Function to Reset the card. This function then also
3378  *  restores the previously saved PCI configuration space registers as
3379  *  the card reset also resets the configuration space.
3380  *  Return value:
3381  *  void.
3382  */
3383 
3384 static void s2io_reset(struct s2io_nic *sp)
3385 {
3386 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3387 	u64 val64;
3388 	u16 subid, pci_cmd;
3389 	int i;
3390 	u16 val16;
3391 	unsigned long long up_cnt, down_cnt, up_time, down_time, reset_cnt;
3392 	unsigned long long mem_alloc_cnt, mem_free_cnt, watchdog_cnt;
3393 	struct stat_block *stats;
3394 	struct swStat *swstats;
3395 
3396 	DBG_PRINT(INIT_DBG, "%s: Resetting XFrame card %s\n",
3397 		  __func__, pci_name(sp->pdev));
3398 
3399 	/* Back up  the PCI-X CMD reg, dont want to lose MMRBC, OST settings */
3400 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd));
3401 
3402 	val64 = SW_RESET_ALL;
3403 	writeq(val64, &bar0->sw_reset);
3404 	if (strstr(sp->product_name, "CX4"))
3405 		msleep(750);
3406 	msleep(250);
3407 	for (i = 0; i < S2IO_MAX_PCI_CONFIG_SPACE_REINIT; i++) {
3408 
3409 		/* Restore the PCI state saved during initialization. */
3410 		pci_restore_state(sp->pdev);
3411 		pci_save_state(sp->pdev);
3412 		pci_read_config_word(sp->pdev, 0x2, &val16);
3413 		if (check_pci_device_id(val16) != (u16)PCI_ANY_ID)
3414 			break;
3415 		msleep(200);
3416 	}
3417 
3418 	if (check_pci_device_id(val16) == (u16)PCI_ANY_ID)
3419 		DBG_PRINT(ERR_DBG, "%s SW_Reset failed!\n", __func__);
3420 
3421 	pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd);
3422 
3423 	s2io_init_pci(sp);
3424 
3425 	/* Set swapper to enable I/O register access */
3426 	s2io_set_swapper(sp);
3427 
3428 	/* restore mac_addr entries */
3429 	do_s2io_restore_unicast_mc(sp);
3430 
3431 	/* Restore the MSIX table entries from local variables */
3432 	restore_xmsi_data(sp);
3433 
3434 	/* Clear certain PCI/PCI-X fields after reset */
3435 	if (sp->device_type == XFRAME_II_DEVICE) {
3436 		/* Clear "detected parity error" bit */
3437 		pci_write_config_word(sp->pdev, PCI_STATUS, 0x8000);
3438 
3439 		/* Clearing PCIX Ecc status register */
3440 		pci_write_config_dword(sp->pdev, 0x68, 0x7C);
3441 
3442 		/* Clearing PCI_STATUS error reflected here */
3443 		writeq(s2BIT(62), &bar0->txpic_int_reg);
3444 	}
3445 
3446 	/* Reset device statistics maintained by OS */
3447 	memset(&sp->stats, 0, sizeof(struct net_device_stats));
3448 
3449 	stats = sp->mac_control.stats_info;
3450 	swstats = &stats->sw_stat;
3451 
3452 	/* save link up/down time/cnt, reset/memory/watchdog cnt */
3453 	up_cnt = swstats->link_up_cnt;
3454 	down_cnt = swstats->link_down_cnt;
3455 	up_time = swstats->link_up_time;
3456 	down_time = swstats->link_down_time;
3457 	reset_cnt = swstats->soft_reset_cnt;
3458 	mem_alloc_cnt = swstats->mem_allocated;
3459 	mem_free_cnt = swstats->mem_freed;
3460 	watchdog_cnt = swstats->watchdog_timer_cnt;
3461 
3462 	memset(stats, 0, sizeof(struct stat_block));
3463 
3464 	/* restore link up/down time/cnt, reset/memory/watchdog cnt */
3465 	swstats->link_up_cnt = up_cnt;
3466 	swstats->link_down_cnt = down_cnt;
3467 	swstats->link_up_time = up_time;
3468 	swstats->link_down_time = down_time;
3469 	swstats->soft_reset_cnt = reset_cnt;
3470 	swstats->mem_allocated = mem_alloc_cnt;
3471 	swstats->mem_freed = mem_free_cnt;
3472 	swstats->watchdog_timer_cnt = watchdog_cnt;
3473 
3474 	/* SXE-002: Configure link and activity LED to turn it off */
3475 	subid = sp->pdev->subsystem_device;
3476 	if (((subid & 0xFF) >= 0x07) &&
3477 	    (sp->device_type == XFRAME_I_DEVICE)) {
3478 		val64 = readq(&bar0->gpio_control);
3479 		val64 |= 0x0000800000000000ULL;
3480 		writeq(val64, &bar0->gpio_control);
3481 		val64 = 0x0411040400000000ULL;
3482 		writeq(val64, (void __iomem *)bar0 + 0x2700);
3483 	}
3484 
3485 	/*
3486 	 * Clear spurious ECC interrupts that would have occurred on
3487 	 * XFRAME II cards after reset.
3488 	 */
3489 	if (sp->device_type == XFRAME_II_DEVICE) {
3490 		val64 = readq(&bar0->pcc_err_reg);
3491 		writeq(val64, &bar0->pcc_err_reg);
3492 	}
3493 
3494 	sp->device_enabled_once = false;
3495 }
3496 
3497 /**
3498  *  s2io_set_swapper - to set the swapper controle on the card
3499  *  @sp : private member of the device structure,
3500  *  pointer to the s2io_nic structure.
3501  *  Description: Function to set the swapper control on the card
3502  *  correctly depending on the 'endianness' of the system.
3503  *  Return value:
3504  *  SUCCESS on success and FAILURE on failure.
3505  */
3506 
3507 static int s2io_set_swapper(struct s2io_nic *sp)
3508 {
3509 	struct net_device *dev = sp->dev;
3510 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3511 	u64 val64, valt, valr;
3512 
3513 	/*
3514 	 * Set proper endian settings and verify the same by reading
3515 	 * the PIF Feed-back register.
3516 	 */
3517 
3518 	val64 = readq(&bar0->pif_rd_swapper_fb);
3519 	if (val64 != 0x0123456789ABCDEFULL) {
3520 		int i = 0;
3521 		static const u64 value[] = {
3522 			0xC30000C3C30000C3ULL,	/* FE=1, SE=1 */
3523 			0x8100008181000081ULL,	/* FE=1, SE=0 */
3524 			0x4200004242000042ULL,	/* FE=0, SE=1 */
3525 			0			/* FE=0, SE=0 */
3526 		};
3527 
3528 		while (i < 4) {
3529 			writeq(value[i], &bar0->swapper_ctrl);
3530 			val64 = readq(&bar0->pif_rd_swapper_fb);
3531 			if (val64 == 0x0123456789ABCDEFULL)
3532 				break;
3533 			i++;
3534 		}
3535 		if (i == 4) {
3536 			DBG_PRINT(ERR_DBG, "%s: Endian settings are wrong, "
3537 				  "feedback read %llx\n",
3538 				  dev->name, (unsigned long long)val64);
3539 			return FAILURE;
3540 		}
3541 		valr = value[i];
3542 	} else {
3543 		valr = readq(&bar0->swapper_ctrl);
3544 	}
3545 
3546 	valt = 0x0123456789ABCDEFULL;
3547 	writeq(valt, &bar0->xmsi_address);
3548 	val64 = readq(&bar0->xmsi_address);
3549 
3550 	if (val64 != valt) {
3551 		int i = 0;
3552 		static const u64 value[] = {
3553 			0x00C3C30000C3C300ULL,	/* FE=1, SE=1 */
3554 			0x0081810000818100ULL,	/* FE=1, SE=0 */
3555 			0x0042420000424200ULL,	/* FE=0, SE=1 */
3556 			0			/* FE=0, SE=0 */
3557 		};
3558 
3559 		while (i < 4) {
3560 			writeq((value[i] | valr), &bar0->swapper_ctrl);
3561 			writeq(valt, &bar0->xmsi_address);
3562 			val64 = readq(&bar0->xmsi_address);
3563 			if (val64 == valt)
3564 				break;
3565 			i++;
3566 		}
3567 		if (i == 4) {
3568 			unsigned long long x = val64;
3569 			DBG_PRINT(ERR_DBG,
3570 				  "Write failed, Xmsi_addr reads:0x%llx\n", x);
3571 			return FAILURE;
3572 		}
3573 	}
3574 	val64 = readq(&bar0->swapper_ctrl);
3575 	val64 &= 0xFFFF000000000000ULL;
3576 
3577 #ifdef __BIG_ENDIAN
3578 	/*
3579 	 * The device by default set to a big endian format, so a
3580 	 * big endian driver need not set anything.
3581 	 */
3582 	val64 |= (SWAPPER_CTRL_TXP_FE |
3583 		  SWAPPER_CTRL_TXP_SE |
3584 		  SWAPPER_CTRL_TXD_R_FE |
3585 		  SWAPPER_CTRL_TXD_W_FE |
3586 		  SWAPPER_CTRL_TXF_R_FE |
3587 		  SWAPPER_CTRL_RXD_R_FE |
3588 		  SWAPPER_CTRL_RXD_W_FE |
3589 		  SWAPPER_CTRL_RXF_W_FE |
3590 		  SWAPPER_CTRL_XMSI_FE |
3591 		  SWAPPER_CTRL_STATS_FE |
3592 		  SWAPPER_CTRL_STATS_SE);
3593 	if (sp->config.intr_type == INTA)
3594 		val64 |= SWAPPER_CTRL_XMSI_SE;
3595 	writeq(val64, &bar0->swapper_ctrl);
3596 #else
3597 	/*
3598 	 * Initially we enable all bits to make it accessible by the
3599 	 * driver, then we selectively enable only those bits that
3600 	 * we want to set.
3601 	 */
3602 	val64 |= (SWAPPER_CTRL_TXP_FE |
3603 		  SWAPPER_CTRL_TXP_SE |
3604 		  SWAPPER_CTRL_TXD_R_FE |
3605 		  SWAPPER_CTRL_TXD_R_SE |
3606 		  SWAPPER_CTRL_TXD_W_FE |
3607 		  SWAPPER_CTRL_TXD_W_SE |
3608 		  SWAPPER_CTRL_TXF_R_FE |
3609 		  SWAPPER_CTRL_RXD_R_FE |
3610 		  SWAPPER_CTRL_RXD_R_SE |
3611 		  SWAPPER_CTRL_RXD_W_FE |
3612 		  SWAPPER_CTRL_RXD_W_SE |
3613 		  SWAPPER_CTRL_RXF_W_FE |
3614 		  SWAPPER_CTRL_XMSI_FE |
3615 		  SWAPPER_CTRL_STATS_FE |
3616 		  SWAPPER_CTRL_STATS_SE);
3617 	if (sp->config.intr_type == INTA)
3618 		val64 |= SWAPPER_CTRL_XMSI_SE;
3619 	writeq(val64, &bar0->swapper_ctrl);
3620 #endif
3621 	val64 = readq(&bar0->swapper_ctrl);
3622 
3623 	/*
3624 	 * Verifying if endian settings are accurate by reading a
3625 	 * feedback register.
3626 	 */
3627 	val64 = readq(&bar0->pif_rd_swapper_fb);
3628 	if (val64 != 0x0123456789ABCDEFULL) {
3629 		/* Endian settings are incorrect, calls for another dekko. */
3630 		DBG_PRINT(ERR_DBG,
3631 			  "%s: Endian settings are wrong, feedback read %llx\n",
3632 			  dev->name, (unsigned long long)val64);
3633 		return FAILURE;
3634 	}
3635 
3636 	return SUCCESS;
3637 }
3638 
3639 static int wait_for_msix_trans(struct s2io_nic *nic, int i)
3640 {
3641 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3642 	u64 val64;
3643 	int ret = 0, cnt = 0;
3644 
3645 	do {
3646 		val64 = readq(&bar0->xmsi_access);
3647 		if (!(val64 & s2BIT(15)))
3648 			break;
3649 		mdelay(1);
3650 		cnt++;
3651 	} while (cnt < 5);
3652 	if (cnt == 5) {
3653 		DBG_PRINT(ERR_DBG, "XMSI # %d Access failed\n", i);
3654 		ret = 1;
3655 	}
3656 
3657 	return ret;
3658 }
3659 
3660 static void restore_xmsi_data(struct s2io_nic *nic)
3661 {
3662 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3663 	u64 val64;
3664 	int i, msix_index;
3665 
3666 	if (nic->device_type == XFRAME_I_DEVICE)
3667 		return;
3668 
3669 	for (i = 0; i < MAX_REQUESTED_MSI_X; i++) {
3670 		msix_index = (i) ? ((i-1) * 8 + 1) : 0;
3671 		writeq(nic->msix_info[i].addr, &bar0->xmsi_address);
3672 		writeq(nic->msix_info[i].data, &bar0->xmsi_data);
3673 		val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6));
3674 		writeq(val64, &bar0->xmsi_access);
3675 		if (wait_for_msix_trans(nic, msix_index))
3676 			DBG_PRINT(ERR_DBG, "%s: index: %d failed\n",
3677 				  __func__, msix_index);
3678 	}
3679 }
3680 
3681 static void store_xmsi_data(struct s2io_nic *nic)
3682 {
3683 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3684 	u64 val64, addr, data;
3685 	int i, msix_index;
3686 
3687 	if (nic->device_type == XFRAME_I_DEVICE)
3688 		return;
3689 
3690 	/* Store and display */
3691 	for (i = 0; i < MAX_REQUESTED_MSI_X; i++) {
3692 		msix_index = (i) ? ((i-1) * 8 + 1) : 0;
3693 		val64 = (s2BIT(15) | vBIT(msix_index, 26, 6));
3694 		writeq(val64, &bar0->xmsi_access);
3695 		if (wait_for_msix_trans(nic, msix_index)) {
3696 			DBG_PRINT(ERR_DBG, "%s: index: %d failed\n",
3697 				  __func__, msix_index);
3698 			continue;
3699 		}
3700 		addr = readq(&bar0->xmsi_address);
3701 		data = readq(&bar0->xmsi_data);
3702 		if (addr && data) {
3703 			nic->msix_info[i].addr = addr;
3704 			nic->msix_info[i].data = data;
3705 		}
3706 	}
3707 }
3708 
3709 static int s2io_enable_msi_x(struct s2io_nic *nic)
3710 {
3711 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3712 	u64 rx_mat;
3713 	u16 msi_control; /* Temp variable */
3714 	int ret, i, j, msix_indx = 1;
3715 	int size;
3716 	struct stat_block *stats = nic->mac_control.stats_info;
3717 	struct swStat *swstats = &stats->sw_stat;
3718 
3719 	size = nic->num_entries * sizeof(struct msix_entry);
3720 	nic->entries = kzalloc(size, GFP_KERNEL);
3721 	if (!nic->entries) {
3722 		DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n",
3723 			  __func__);
3724 		swstats->mem_alloc_fail_cnt++;
3725 		return -ENOMEM;
3726 	}
3727 	swstats->mem_allocated += size;
3728 
3729 	size = nic->num_entries * sizeof(struct s2io_msix_entry);
3730 	nic->s2io_entries = kzalloc(size, GFP_KERNEL);
3731 	if (!nic->s2io_entries) {
3732 		DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n",
3733 			  __func__);
3734 		swstats->mem_alloc_fail_cnt++;
3735 		kfree(nic->entries);
3736 		swstats->mem_freed
3737 			+= (nic->num_entries * sizeof(struct msix_entry));
3738 		return -ENOMEM;
3739 	}
3740 	swstats->mem_allocated += size;
3741 
3742 	nic->entries[0].entry = 0;
3743 	nic->s2io_entries[0].entry = 0;
3744 	nic->s2io_entries[0].in_use = MSIX_FLG;
3745 	nic->s2io_entries[0].type = MSIX_ALARM_TYPE;
3746 	nic->s2io_entries[0].arg = &nic->mac_control.fifos;
3747 
3748 	for (i = 1; i < nic->num_entries; i++) {
3749 		nic->entries[i].entry = ((i - 1) * 8) + 1;
3750 		nic->s2io_entries[i].entry = ((i - 1) * 8) + 1;
3751 		nic->s2io_entries[i].arg = NULL;
3752 		nic->s2io_entries[i].in_use = 0;
3753 	}
3754 
3755 	rx_mat = readq(&bar0->rx_mat);
3756 	for (j = 0; j < nic->config.rx_ring_num; j++) {
3757 		rx_mat |= RX_MAT_SET(j, msix_indx);
3758 		nic->s2io_entries[j+1].arg = &nic->mac_control.rings[j];
3759 		nic->s2io_entries[j+1].type = MSIX_RING_TYPE;
3760 		nic->s2io_entries[j+1].in_use = MSIX_FLG;
3761 		msix_indx += 8;
3762 	}
3763 	writeq(rx_mat, &bar0->rx_mat);
3764 	readq(&bar0->rx_mat);
3765 
3766 	ret = pci_enable_msix_range(nic->pdev, nic->entries,
3767 				    nic->num_entries, nic->num_entries);
3768 	/* We fail init if error or we get less vectors than min required */
3769 	if (ret < 0) {
3770 		DBG_PRINT(ERR_DBG, "Enabling MSI-X failed\n");
3771 		kfree(nic->entries);
3772 		swstats->mem_freed += nic->num_entries *
3773 			sizeof(struct msix_entry);
3774 		kfree(nic->s2io_entries);
3775 		swstats->mem_freed += nic->num_entries *
3776 			sizeof(struct s2io_msix_entry);
3777 		nic->entries = NULL;
3778 		nic->s2io_entries = NULL;
3779 		return -ENOMEM;
3780 	}
3781 
3782 	/*
3783 	 * To enable MSI-X, MSI also needs to be enabled, due to a bug
3784 	 * in the herc NIC. (Temp change, needs to be removed later)
3785 	 */
3786 	pci_read_config_word(nic->pdev, 0x42, &msi_control);
3787 	msi_control |= 0x1; /* Enable MSI */
3788 	pci_write_config_word(nic->pdev, 0x42, msi_control);
3789 
3790 	return 0;
3791 }
3792 
3793 /* Handle software interrupt used during MSI(X) test */
3794 static irqreturn_t s2io_test_intr(int irq, void *dev_id)
3795 {
3796 	struct s2io_nic *sp = dev_id;
3797 
3798 	sp->msi_detected = 1;
3799 	wake_up(&sp->msi_wait);
3800 
3801 	return IRQ_HANDLED;
3802 }
3803 
3804 /* Test interrupt path by forcing a a software IRQ */
3805 static int s2io_test_msi(struct s2io_nic *sp)
3806 {
3807 	struct pci_dev *pdev = sp->pdev;
3808 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3809 	int err;
3810 	u64 val64, saved64;
3811 
3812 	err = request_irq(sp->entries[1].vector, s2io_test_intr, 0,
3813 			  sp->name, sp);
3814 	if (err) {
3815 		DBG_PRINT(ERR_DBG, "%s: PCI %s: cannot assign irq %d\n",
3816 			  sp->dev->name, pci_name(pdev), pdev->irq);
3817 		return err;
3818 	}
3819 
3820 	init_waitqueue_head(&sp->msi_wait);
3821 	sp->msi_detected = 0;
3822 
3823 	saved64 = val64 = readq(&bar0->scheduled_int_ctrl);
3824 	val64 |= SCHED_INT_CTRL_ONE_SHOT;
3825 	val64 |= SCHED_INT_CTRL_TIMER_EN;
3826 	val64 |= SCHED_INT_CTRL_INT2MSI(1);
3827 	writeq(val64, &bar0->scheduled_int_ctrl);
3828 
3829 	wait_event_timeout(sp->msi_wait, sp->msi_detected, HZ/10);
3830 
3831 	if (!sp->msi_detected) {
3832 		/* MSI(X) test failed, go back to INTx mode */
3833 		DBG_PRINT(ERR_DBG, "%s: PCI %s: No interrupt was generated "
3834 			  "using MSI(X) during test\n",
3835 			  sp->dev->name, pci_name(pdev));
3836 
3837 		err = -EOPNOTSUPP;
3838 	}
3839 
3840 	free_irq(sp->entries[1].vector, sp);
3841 
3842 	writeq(saved64, &bar0->scheduled_int_ctrl);
3843 
3844 	return err;
3845 }
3846 
3847 static void remove_msix_isr(struct s2io_nic *sp)
3848 {
3849 	int i;
3850 	u16 msi_control;
3851 
3852 	for (i = 0; i < sp->num_entries; i++) {
3853 		if (sp->s2io_entries[i].in_use == MSIX_REGISTERED_SUCCESS) {
3854 			int vector = sp->entries[i].vector;
3855 			void *arg = sp->s2io_entries[i].arg;
3856 			free_irq(vector, arg);
3857 		}
3858 	}
3859 
3860 	kfree(sp->entries);
3861 	kfree(sp->s2io_entries);
3862 	sp->entries = NULL;
3863 	sp->s2io_entries = NULL;
3864 
3865 	pci_read_config_word(sp->pdev, 0x42, &msi_control);
3866 	msi_control &= 0xFFFE; /* Disable MSI */
3867 	pci_write_config_word(sp->pdev, 0x42, msi_control);
3868 
3869 	pci_disable_msix(sp->pdev);
3870 }
3871 
3872 static void remove_inta_isr(struct s2io_nic *sp)
3873 {
3874 	free_irq(sp->pdev->irq, sp->dev);
3875 }
3876 
3877 /* ********************************************************* *
3878  * Functions defined below concern the OS part of the driver *
3879  * ********************************************************* */
3880 
3881 /**
3882  *  s2io_open - open entry point of the driver
3883  *  @dev : pointer to the device structure.
3884  *  Description:
3885  *  This function is the open entry point of the driver. It mainly calls a
3886  *  function to allocate Rx buffers and inserts them into the buffer
3887  *  descriptors and then enables the Rx part of the NIC.
3888  *  Return value:
3889  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3890  *   file on failure.
3891  */
3892 
3893 static int s2io_open(struct net_device *dev)
3894 {
3895 	struct s2io_nic *sp = netdev_priv(dev);
3896 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
3897 	int err = 0;
3898 
3899 	/*
3900 	 * Make sure you have link off by default every time
3901 	 * Nic is initialized
3902 	 */
3903 	netif_carrier_off(dev);
3904 	sp->last_link_state = 0;
3905 
3906 	/* Initialize H/W and enable interrupts */
3907 	err = s2io_card_up(sp);
3908 	if (err) {
3909 		DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
3910 			  dev->name);
3911 		goto hw_init_failed;
3912 	}
3913 
3914 	if (do_s2io_prog_unicast(dev, dev->dev_addr) == FAILURE) {
3915 		DBG_PRINT(ERR_DBG, "Set Mac Address Failed\n");
3916 		s2io_card_down(sp);
3917 		err = -ENODEV;
3918 		goto hw_init_failed;
3919 	}
3920 	s2io_start_all_tx_queue(sp);
3921 	return 0;
3922 
3923 hw_init_failed:
3924 	if (sp->config.intr_type == MSI_X) {
3925 		if (sp->entries) {
3926 			kfree(sp->entries);
3927 			swstats->mem_freed += sp->num_entries *
3928 				sizeof(struct msix_entry);
3929 		}
3930 		if (sp->s2io_entries) {
3931 			kfree(sp->s2io_entries);
3932 			swstats->mem_freed += sp->num_entries *
3933 				sizeof(struct s2io_msix_entry);
3934 		}
3935 	}
3936 	return err;
3937 }
3938 
3939 /**
3940  *  s2io_close -close entry point of the driver
3941  *  @dev : device pointer.
3942  *  Description:
3943  *  This is the stop entry point of the driver. It needs to undo exactly
3944  *  whatever was done by the open entry point,thus it's usually referred to
3945  *  as the close function.Among other things this function mainly stops the
3946  *  Rx side of the NIC and frees all the Rx buffers in the Rx rings.
3947  *  Return value:
3948  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3949  *  file on failure.
3950  */
3951 
3952 static int s2io_close(struct net_device *dev)
3953 {
3954 	struct s2io_nic *sp = netdev_priv(dev);
3955 	struct config_param *config = &sp->config;
3956 	u64 tmp64;
3957 	int offset;
3958 
3959 	/* Return if the device is already closed               *
3960 	 *  Can happen when s2io_card_up failed in change_mtu    *
3961 	 */
3962 	if (!is_s2io_card_up(sp))
3963 		return 0;
3964 
3965 	s2io_stop_all_tx_queue(sp);
3966 	/* delete all populated mac entries */
3967 	for (offset = 1; offset < config->max_mc_addr; offset++) {
3968 		tmp64 = do_s2io_read_unicast_mc(sp, offset);
3969 		if (tmp64 != S2IO_DISABLE_MAC_ENTRY)
3970 			do_s2io_delete_unicast_mc(sp, tmp64);
3971 	}
3972 
3973 	s2io_card_down(sp);
3974 
3975 	return 0;
3976 }
3977 
3978 /**
3979  *  s2io_xmit - Tx entry point of te driver
3980  *  @skb : the socket buffer containing the Tx data.
3981  *  @dev : device pointer.
3982  *  Description :
3983  *  This function is the Tx entry point of the driver. S2IO NIC supports
3984  *  certain protocol assist features on Tx side, namely  CSO, S/G, LSO.
3985  *  NOTE: when device can't queue the pkt,just the trans_start variable will
3986  *  not be upadted.
3987  *  Return value:
3988  *  0 on success & 1 on failure.
3989  */
3990 
3991 static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3992 {
3993 	struct s2io_nic *sp = netdev_priv(dev);
3994 	u16 frg_cnt, frg_len, i, queue, queue_len, put_off, get_off;
3995 	register u64 val64;
3996 	struct TxD *txdp;
3997 	struct TxFIFO_element __iomem *tx_fifo;
3998 	unsigned long flags = 0;
3999 	u16 vlan_tag = 0;
4000 	struct fifo_info *fifo = NULL;
4001 	int offload_type;
4002 	int enable_per_list_interrupt = 0;
4003 	struct config_param *config = &sp->config;
4004 	struct mac_info *mac_control = &sp->mac_control;
4005 	struct stat_block *stats = mac_control->stats_info;
4006 	struct swStat *swstats = &stats->sw_stat;
4007 
4008 	DBG_PRINT(TX_DBG, "%s: In Neterion Tx routine\n", dev->name);
4009 
4010 	if (unlikely(skb->len <= 0)) {
4011 		DBG_PRINT(TX_DBG, "%s: Buffer has no data..\n", dev->name);
4012 		dev_kfree_skb_any(skb);
4013 		return NETDEV_TX_OK;
4014 	}
4015 
4016 	if (!is_s2io_card_up(sp)) {
4017 		DBG_PRINT(TX_DBG, "%s: Card going down for reset\n",
4018 			  dev->name);
4019 		dev_kfree_skb_any(skb);
4020 		return NETDEV_TX_OK;
4021 	}
4022 
4023 	queue = 0;
4024 	if (skb_vlan_tag_present(skb))
4025 		vlan_tag = skb_vlan_tag_get(skb);
4026 	if (sp->config.tx_steering_type == TX_DEFAULT_STEERING) {
4027 		if (skb->protocol == htons(ETH_P_IP)) {
4028 			struct iphdr *ip;
4029 			struct tcphdr *th;
4030 			ip = ip_hdr(skb);
4031 
4032 			if (!ip_is_fragment(ip)) {
4033 				th = (struct tcphdr *)(((unsigned char *)ip) +
4034 						       ip->ihl*4);
4035 
4036 				if (ip->protocol == IPPROTO_TCP) {
4037 					queue_len = sp->total_tcp_fifos;
4038 					queue = (ntohs(th->source) +
4039 						 ntohs(th->dest)) &
4040 						sp->fifo_selector[queue_len - 1];
4041 					if (queue >= queue_len)
4042 						queue = queue_len - 1;
4043 				} else if (ip->protocol == IPPROTO_UDP) {
4044 					queue_len = sp->total_udp_fifos;
4045 					queue = (ntohs(th->source) +
4046 						 ntohs(th->dest)) &
4047 						sp->fifo_selector[queue_len - 1];
4048 					if (queue >= queue_len)
4049 						queue = queue_len - 1;
4050 					queue += sp->udp_fifo_idx;
4051 					if (skb->len > 1024)
4052 						enable_per_list_interrupt = 1;
4053 				}
4054 			}
4055 		}
4056 	} else if (sp->config.tx_steering_type == TX_PRIORITY_STEERING)
4057 		/* get fifo number based on skb->priority value */
4058 		queue = config->fifo_mapping
4059 			[skb->priority & (MAX_TX_FIFOS - 1)];
4060 	fifo = &mac_control->fifos[queue];
4061 
4062 	spin_lock_irqsave(&fifo->tx_lock, flags);
4063 
4064 	if (sp->config.multiq) {
4065 		if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
4066 			spin_unlock_irqrestore(&fifo->tx_lock, flags);
4067 			return NETDEV_TX_BUSY;
4068 		}
4069 	} else if (unlikely(fifo->queue_state == FIFO_QUEUE_STOP)) {
4070 		if (netif_queue_stopped(dev)) {
4071 			spin_unlock_irqrestore(&fifo->tx_lock, flags);
4072 			return NETDEV_TX_BUSY;
4073 		}
4074 	}
4075 
4076 	put_off = (u16)fifo->tx_curr_put_info.offset;
4077 	get_off = (u16)fifo->tx_curr_get_info.offset;
4078 	txdp = fifo->list_info[put_off].list_virt_addr;
4079 
4080 	queue_len = fifo->tx_curr_put_info.fifo_len + 1;
4081 	/* Avoid "put" pointer going beyond "get" pointer */
4082 	if (txdp->Host_Control ||
4083 	    ((put_off+1) == queue_len ? 0 : (put_off+1)) == get_off) {
4084 		DBG_PRINT(TX_DBG, "Error in xmit, No free TXDs.\n");
4085 		s2io_stop_tx_queue(sp, fifo->fifo_no);
4086 		dev_kfree_skb_any(skb);
4087 		spin_unlock_irqrestore(&fifo->tx_lock, flags);
4088 		return NETDEV_TX_OK;
4089 	}
4090 
4091 	offload_type = s2io_offload_type(skb);
4092 	if (offload_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) {
4093 		txdp->Control_1 |= TXD_TCP_LSO_EN;
4094 		txdp->Control_1 |= TXD_TCP_LSO_MSS(s2io_tcp_mss(skb));
4095 	}
4096 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
4097 		txdp->Control_2 |= (TXD_TX_CKO_IPV4_EN |
4098 				    TXD_TX_CKO_TCP_EN |
4099 				    TXD_TX_CKO_UDP_EN);
4100 	}
4101 	txdp->Control_1 |= TXD_GATHER_CODE_FIRST;
4102 	txdp->Control_1 |= TXD_LIST_OWN_XENA;
4103 	txdp->Control_2 |= TXD_INT_NUMBER(fifo->fifo_no);
4104 	if (enable_per_list_interrupt)
4105 		if (put_off & (queue_len >> 5))
4106 			txdp->Control_2 |= TXD_INT_TYPE_PER_LIST;
4107 	if (vlan_tag) {
4108 		txdp->Control_2 |= TXD_VLAN_ENABLE;
4109 		txdp->Control_2 |= TXD_VLAN_TAG(vlan_tag);
4110 	}
4111 
4112 	frg_len = skb_headlen(skb);
4113 	txdp->Buffer_Pointer = dma_map_single(&sp->pdev->dev, skb->data,
4114 					      frg_len, DMA_TO_DEVICE);
4115 	if (dma_mapping_error(&sp->pdev->dev, txdp->Buffer_Pointer))
4116 		goto pci_map_failed;
4117 
4118 	txdp->Host_Control = (unsigned long)skb;
4119 	txdp->Control_1 |= TXD_BUFFER0_SIZE(frg_len);
4120 
4121 	frg_cnt = skb_shinfo(skb)->nr_frags;
4122 	/* For fragmented SKB. */
4123 	for (i = 0; i < frg_cnt; i++) {
4124 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4125 		/* A '0' length fragment will be ignored */
4126 		if (!skb_frag_size(frag))
4127 			continue;
4128 		txdp++;
4129 		txdp->Buffer_Pointer = (u64)skb_frag_dma_map(&sp->pdev->dev,
4130 							     frag, 0,
4131 							     skb_frag_size(frag),
4132 							     DMA_TO_DEVICE);
4133 		txdp->Control_1 = TXD_BUFFER0_SIZE(skb_frag_size(frag));
4134 	}
4135 	txdp->Control_1 |= TXD_GATHER_CODE_LAST;
4136 
4137 	tx_fifo = mac_control->tx_FIFO_start[queue];
4138 	val64 = fifo->list_info[put_off].list_phy_addr;
4139 	writeq(val64, &tx_fifo->TxDL_Pointer);
4140 
4141 	val64 = (TX_FIFO_LAST_TXD_NUM(frg_cnt) | TX_FIFO_FIRST_LIST |
4142 		 TX_FIFO_LAST_LIST);
4143 	if (offload_type)
4144 		val64 |= TX_FIFO_SPECIAL_FUNC;
4145 
4146 	writeq(val64, &tx_fifo->List_Control);
4147 
4148 	put_off++;
4149 	if (put_off == fifo->tx_curr_put_info.fifo_len + 1)
4150 		put_off = 0;
4151 	fifo->tx_curr_put_info.offset = put_off;
4152 
4153 	/* Avoid "put" pointer going beyond "get" pointer */
4154 	if (((put_off+1) == queue_len ? 0 : (put_off+1)) == get_off) {
4155 		swstats->fifo_full_cnt++;
4156 		DBG_PRINT(TX_DBG,
4157 			  "No free TxDs for xmit, Put: 0x%x Get:0x%x\n",
4158 			  put_off, get_off);
4159 		s2io_stop_tx_queue(sp, fifo->fifo_no);
4160 	}
4161 	swstats->mem_allocated += skb->truesize;
4162 	spin_unlock_irqrestore(&fifo->tx_lock, flags);
4163 
4164 	if (sp->config.intr_type == MSI_X)
4165 		tx_intr_handler(fifo);
4166 
4167 	return NETDEV_TX_OK;
4168 
4169 pci_map_failed:
4170 	swstats->pci_map_fail_cnt++;
4171 	s2io_stop_tx_queue(sp, fifo->fifo_no);
4172 	swstats->mem_freed += skb->truesize;
4173 	dev_kfree_skb_any(skb);
4174 	spin_unlock_irqrestore(&fifo->tx_lock, flags);
4175 	return NETDEV_TX_OK;
4176 }
4177 
4178 static void
4179 s2io_alarm_handle(struct timer_list *t)
4180 {
4181 	struct s2io_nic *sp = from_timer(sp, t, alarm_timer);
4182 	struct net_device *dev = sp->dev;
4183 
4184 	s2io_handle_errors(dev);
4185 	mod_timer(&sp->alarm_timer, jiffies + HZ / 2);
4186 }
4187 
4188 static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id)
4189 {
4190 	struct ring_info *ring = (struct ring_info *)dev_id;
4191 	struct s2io_nic *sp = ring->nic;
4192 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4193 
4194 	if (unlikely(!is_s2io_card_up(sp)))
4195 		return IRQ_HANDLED;
4196 
4197 	if (sp->config.napi) {
4198 		u8 __iomem *addr = NULL;
4199 		u8 val8 = 0;
4200 
4201 		addr = (u8 __iomem *)&bar0->xmsi_mask_reg;
4202 		addr += (7 - ring->ring_no);
4203 		val8 = (ring->ring_no == 0) ? 0x7f : 0xff;
4204 		writeb(val8, addr);
4205 		val8 = readb(addr);
4206 		napi_schedule(&ring->napi);
4207 	} else {
4208 		rx_intr_handler(ring, 0);
4209 		s2io_chk_rx_buffers(sp, ring);
4210 	}
4211 
4212 	return IRQ_HANDLED;
4213 }
4214 
4215 static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id)
4216 {
4217 	int i;
4218 	struct fifo_info *fifos = (struct fifo_info *)dev_id;
4219 	struct s2io_nic *sp = fifos->nic;
4220 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4221 	struct config_param *config  = &sp->config;
4222 	u64 reason;
4223 
4224 	if (unlikely(!is_s2io_card_up(sp)))
4225 		return IRQ_NONE;
4226 
4227 	reason = readq(&bar0->general_int_status);
4228 	if (unlikely(reason == S2IO_MINUS_ONE))
4229 		/* Nothing much can be done. Get out */
4230 		return IRQ_HANDLED;
4231 
4232 	if (reason & (GEN_INTR_TXPIC | GEN_INTR_TXTRAFFIC)) {
4233 		writeq(S2IO_MINUS_ONE, &bar0->general_int_mask);
4234 
4235 		if (reason & GEN_INTR_TXPIC)
4236 			s2io_txpic_intr_handle(sp);
4237 
4238 		if (reason & GEN_INTR_TXTRAFFIC)
4239 			writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int);
4240 
4241 		for (i = 0; i < config->tx_fifo_num; i++)
4242 			tx_intr_handler(&fifos[i]);
4243 
4244 		writeq(sp->general_int_mask, &bar0->general_int_mask);
4245 		readl(&bar0->general_int_status);
4246 		return IRQ_HANDLED;
4247 	}
4248 	/* The interrupt was not raised by us */
4249 	return IRQ_NONE;
4250 }
4251 
4252 static void s2io_txpic_intr_handle(struct s2io_nic *sp)
4253 {
4254 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4255 	u64 val64;
4256 
4257 	val64 = readq(&bar0->pic_int_status);
4258 	if (val64 & PIC_INT_GPIO) {
4259 		val64 = readq(&bar0->gpio_int_reg);
4260 		if ((val64 & GPIO_INT_REG_LINK_DOWN) &&
4261 		    (val64 & GPIO_INT_REG_LINK_UP)) {
4262 			/*
4263 			 * This is unstable state so clear both up/down
4264 			 * interrupt and adapter to re-evaluate the link state.
4265 			 */
4266 			val64 |= GPIO_INT_REG_LINK_DOWN;
4267 			val64 |= GPIO_INT_REG_LINK_UP;
4268 			writeq(val64, &bar0->gpio_int_reg);
4269 			val64 = readq(&bar0->gpio_int_mask);
4270 			val64 &= ~(GPIO_INT_MASK_LINK_UP |
4271 				   GPIO_INT_MASK_LINK_DOWN);
4272 			writeq(val64, &bar0->gpio_int_mask);
4273 		} else if (val64 & GPIO_INT_REG_LINK_UP) {
4274 			val64 = readq(&bar0->adapter_status);
4275 			/* Enable Adapter */
4276 			val64 = readq(&bar0->adapter_control);
4277 			val64 |= ADAPTER_CNTL_EN;
4278 			writeq(val64, &bar0->adapter_control);
4279 			val64 |= ADAPTER_LED_ON;
4280 			writeq(val64, &bar0->adapter_control);
4281 			if (!sp->device_enabled_once)
4282 				sp->device_enabled_once = 1;
4283 
4284 			s2io_link(sp, LINK_UP);
4285 			/*
4286 			 * unmask link down interrupt and mask link-up
4287 			 * intr
4288 			 */
4289 			val64 = readq(&bar0->gpio_int_mask);
4290 			val64 &= ~GPIO_INT_MASK_LINK_DOWN;
4291 			val64 |= GPIO_INT_MASK_LINK_UP;
4292 			writeq(val64, &bar0->gpio_int_mask);
4293 
4294 		} else if (val64 & GPIO_INT_REG_LINK_DOWN) {
4295 			val64 = readq(&bar0->adapter_status);
4296 			s2io_link(sp, LINK_DOWN);
4297 			/* Link is down so unmaks link up interrupt */
4298 			val64 = readq(&bar0->gpio_int_mask);
4299 			val64 &= ~GPIO_INT_MASK_LINK_UP;
4300 			val64 |= GPIO_INT_MASK_LINK_DOWN;
4301 			writeq(val64, &bar0->gpio_int_mask);
4302 
4303 			/* turn off LED */
4304 			val64 = readq(&bar0->adapter_control);
4305 			val64 = val64 & (~ADAPTER_LED_ON);
4306 			writeq(val64, &bar0->adapter_control);
4307 		}
4308 	}
4309 	val64 = readq(&bar0->gpio_int_mask);
4310 }
4311 
4312 /**
4313  *  do_s2io_chk_alarm_bit - Check for alarm and incrment the counter
4314  *  @value: alarm bits
4315  *  @addr: address value
4316  *  @cnt: counter variable
4317  *  Description: Check for alarm and increment the counter
4318  *  Return Value:
4319  *  1 - if alarm bit set
4320  *  0 - if alarm bit is not set
4321  */
4322 static int do_s2io_chk_alarm_bit(u64 value, void __iomem *addr,
4323 				 unsigned long long *cnt)
4324 {
4325 	u64 val64;
4326 	val64 = readq(addr);
4327 	if (val64 & value) {
4328 		writeq(val64, addr);
4329 		(*cnt)++;
4330 		return 1;
4331 	}
4332 	return 0;
4333 
4334 }
4335 
4336 /**
4337  *  s2io_handle_errors - Xframe error indication handler
4338  *  @nic: device private variable
4339  *  Description: Handle alarms such as loss of link, single or
4340  *  double ECC errors, critical and serious errors.
4341  *  Return Value:
4342  *  NONE
4343  */
4344 static void s2io_handle_errors(void *dev_id)
4345 {
4346 	struct net_device *dev = (struct net_device *)dev_id;
4347 	struct s2io_nic *sp = netdev_priv(dev);
4348 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4349 	u64 temp64 = 0, val64 = 0;
4350 	int i = 0;
4351 
4352 	struct swStat *sw_stat = &sp->mac_control.stats_info->sw_stat;
4353 	struct xpakStat *stats = &sp->mac_control.stats_info->xpak_stat;
4354 
4355 	if (!is_s2io_card_up(sp))
4356 		return;
4357 
4358 	if (pci_channel_offline(sp->pdev))
4359 		return;
4360 
4361 	memset(&sw_stat->ring_full_cnt, 0,
4362 	       sizeof(sw_stat->ring_full_cnt));
4363 
4364 	/* Handling the XPAK counters update */
4365 	if (stats->xpak_timer_count < 72000) {
4366 		/* waiting for an hour */
4367 		stats->xpak_timer_count++;
4368 	} else {
4369 		s2io_updt_xpak_counter(dev);
4370 		/* reset the count to zero */
4371 		stats->xpak_timer_count = 0;
4372 	}
4373 
4374 	/* Handling link status change error Intr */
4375 	if (s2io_link_fault_indication(sp) == MAC_RMAC_ERR_TIMER) {
4376 		val64 = readq(&bar0->mac_rmac_err_reg);
4377 		writeq(val64, &bar0->mac_rmac_err_reg);
4378 		if (val64 & RMAC_LINK_STATE_CHANGE_INT)
4379 			schedule_work(&sp->set_link_task);
4380 	}
4381 
4382 	/* In case of a serious error, the device will be Reset. */
4383 	if (do_s2io_chk_alarm_bit(SERR_SOURCE_ANY, &bar0->serr_source,
4384 				  &sw_stat->serious_err_cnt))
4385 		goto reset;
4386 
4387 	/* Check for data parity error */
4388 	if (do_s2io_chk_alarm_bit(GPIO_INT_REG_DP_ERR_INT, &bar0->gpio_int_reg,
4389 				  &sw_stat->parity_err_cnt))
4390 		goto reset;
4391 
4392 	/* Check for ring full counter */
4393 	if (sp->device_type == XFRAME_II_DEVICE) {
4394 		val64 = readq(&bar0->ring_bump_counter1);
4395 		for (i = 0; i < 4; i++) {
4396 			temp64 = (val64 & vBIT(0xFFFF, (i*16), 16));
4397 			temp64 >>= 64 - ((i+1)*16);
4398 			sw_stat->ring_full_cnt[i] += temp64;
4399 		}
4400 
4401 		val64 = readq(&bar0->ring_bump_counter2);
4402 		for (i = 0; i < 4; i++) {
4403 			temp64 = (val64 & vBIT(0xFFFF, (i*16), 16));
4404 			temp64 >>= 64 - ((i+1)*16);
4405 			sw_stat->ring_full_cnt[i+4] += temp64;
4406 		}
4407 	}
4408 
4409 	val64 = readq(&bar0->txdma_int_status);
4410 	/*check for pfc_err*/
4411 	if (val64 & TXDMA_PFC_INT) {
4412 		if (do_s2io_chk_alarm_bit(PFC_ECC_DB_ERR | PFC_SM_ERR_ALARM |
4413 					  PFC_MISC_0_ERR | PFC_MISC_1_ERR |
4414 					  PFC_PCIX_ERR,
4415 					  &bar0->pfc_err_reg,
4416 					  &sw_stat->pfc_err_cnt))
4417 			goto reset;
4418 		do_s2io_chk_alarm_bit(PFC_ECC_SG_ERR,
4419 				      &bar0->pfc_err_reg,
4420 				      &sw_stat->pfc_err_cnt);
4421 	}
4422 
4423 	/*check for tda_err*/
4424 	if (val64 & TXDMA_TDA_INT) {
4425 		if (do_s2io_chk_alarm_bit(TDA_Fn_ECC_DB_ERR |
4426 					  TDA_SM0_ERR_ALARM |
4427 					  TDA_SM1_ERR_ALARM,
4428 					  &bar0->tda_err_reg,
4429 					  &sw_stat->tda_err_cnt))
4430 			goto reset;
4431 		do_s2io_chk_alarm_bit(TDA_Fn_ECC_SG_ERR | TDA_PCIX_ERR,
4432 				      &bar0->tda_err_reg,
4433 				      &sw_stat->tda_err_cnt);
4434 	}
4435 	/*check for pcc_err*/
4436 	if (val64 & TXDMA_PCC_INT) {
4437 		if (do_s2io_chk_alarm_bit(PCC_SM_ERR_ALARM | PCC_WR_ERR_ALARM |
4438 					  PCC_N_SERR | PCC_6_COF_OV_ERR |
4439 					  PCC_7_COF_OV_ERR | PCC_6_LSO_OV_ERR |
4440 					  PCC_7_LSO_OV_ERR | PCC_FB_ECC_DB_ERR |
4441 					  PCC_TXB_ECC_DB_ERR,
4442 					  &bar0->pcc_err_reg,
4443 					  &sw_stat->pcc_err_cnt))
4444 			goto reset;
4445 		do_s2io_chk_alarm_bit(PCC_FB_ECC_SG_ERR | PCC_TXB_ECC_SG_ERR,
4446 				      &bar0->pcc_err_reg,
4447 				      &sw_stat->pcc_err_cnt);
4448 	}
4449 
4450 	/*check for tti_err*/
4451 	if (val64 & TXDMA_TTI_INT) {
4452 		if (do_s2io_chk_alarm_bit(TTI_SM_ERR_ALARM,
4453 					  &bar0->tti_err_reg,
4454 					  &sw_stat->tti_err_cnt))
4455 			goto reset;
4456 		do_s2io_chk_alarm_bit(TTI_ECC_SG_ERR | TTI_ECC_DB_ERR,
4457 				      &bar0->tti_err_reg,
4458 				      &sw_stat->tti_err_cnt);
4459 	}
4460 
4461 	/*check for lso_err*/
4462 	if (val64 & TXDMA_LSO_INT) {
4463 		if (do_s2io_chk_alarm_bit(LSO6_ABORT | LSO7_ABORT |
4464 					  LSO6_SM_ERR_ALARM | LSO7_SM_ERR_ALARM,
4465 					  &bar0->lso_err_reg,
4466 					  &sw_stat->lso_err_cnt))
4467 			goto reset;
4468 		do_s2io_chk_alarm_bit(LSO6_SEND_OFLOW | LSO7_SEND_OFLOW,
4469 				      &bar0->lso_err_reg,
4470 				      &sw_stat->lso_err_cnt);
4471 	}
4472 
4473 	/*check for tpa_err*/
4474 	if (val64 & TXDMA_TPA_INT) {
4475 		if (do_s2io_chk_alarm_bit(TPA_SM_ERR_ALARM,
4476 					  &bar0->tpa_err_reg,
4477 					  &sw_stat->tpa_err_cnt))
4478 			goto reset;
4479 		do_s2io_chk_alarm_bit(TPA_TX_FRM_DROP,
4480 				      &bar0->tpa_err_reg,
4481 				      &sw_stat->tpa_err_cnt);
4482 	}
4483 
4484 	/*check for sm_err*/
4485 	if (val64 & TXDMA_SM_INT) {
4486 		if (do_s2io_chk_alarm_bit(SM_SM_ERR_ALARM,
4487 					  &bar0->sm_err_reg,
4488 					  &sw_stat->sm_err_cnt))
4489 			goto reset;
4490 	}
4491 
4492 	val64 = readq(&bar0->mac_int_status);
4493 	if (val64 & MAC_INT_STATUS_TMAC_INT) {
4494 		if (do_s2io_chk_alarm_bit(TMAC_TX_BUF_OVRN | TMAC_TX_SM_ERR,
4495 					  &bar0->mac_tmac_err_reg,
4496 					  &sw_stat->mac_tmac_err_cnt))
4497 			goto reset;
4498 		do_s2io_chk_alarm_bit(TMAC_ECC_SG_ERR | TMAC_ECC_DB_ERR |
4499 				      TMAC_DESC_ECC_SG_ERR |
4500 				      TMAC_DESC_ECC_DB_ERR,
4501 				      &bar0->mac_tmac_err_reg,
4502 				      &sw_stat->mac_tmac_err_cnt);
4503 	}
4504 
4505 	val64 = readq(&bar0->xgxs_int_status);
4506 	if (val64 & XGXS_INT_STATUS_TXGXS) {
4507 		if (do_s2io_chk_alarm_bit(TXGXS_ESTORE_UFLOW | TXGXS_TX_SM_ERR,
4508 					  &bar0->xgxs_txgxs_err_reg,
4509 					  &sw_stat->xgxs_txgxs_err_cnt))
4510 			goto reset;
4511 		do_s2io_chk_alarm_bit(TXGXS_ECC_SG_ERR | TXGXS_ECC_DB_ERR,
4512 				      &bar0->xgxs_txgxs_err_reg,
4513 				      &sw_stat->xgxs_txgxs_err_cnt);
4514 	}
4515 
4516 	val64 = readq(&bar0->rxdma_int_status);
4517 	if (val64 & RXDMA_INT_RC_INT_M) {
4518 		if (do_s2io_chk_alarm_bit(RC_PRCn_ECC_DB_ERR |
4519 					  RC_FTC_ECC_DB_ERR |
4520 					  RC_PRCn_SM_ERR_ALARM |
4521 					  RC_FTC_SM_ERR_ALARM,
4522 					  &bar0->rc_err_reg,
4523 					  &sw_stat->rc_err_cnt))
4524 			goto reset;
4525 		do_s2io_chk_alarm_bit(RC_PRCn_ECC_SG_ERR |
4526 				      RC_FTC_ECC_SG_ERR |
4527 				      RC_RDA_FAIL_WR_Rn, &bar0->rc_err_reg,
4528 				      &sw_stat->rc_err_cnt);
4529 		if (do_s2io_chk_alarm_bit(PRC_PCI_AB_RD_Rn |
4530 					  PRC_PCI_AB_WR_Rn |
4531 					  PRC_PCI_AB_F_WR_Rn,
4532 					  &bar0->prc_pcix_err_reg,
4533 					  &sw_stat->prc_pcix_err_cnt))
4534 			goto reset;
4535 		do_s2io_chk_alarm_bit(PRC_PCI_DP_RD_Rn |
4536 				      PRC_PCI_DP_WR_Rn |
4537 				      PRC_PCI_DP_F_WR_Rn,
4538 				      &bar0->prc_pcix_err_reg,
4539 				      &sw_stat->prc_pcix_err_cnt);
4540 	}
4541 
4542 	if (val64 & RXDMA_INT_RPA_INT_M) {
4543 		if (do_s2io_chk_alarm_bit(RPA_SM_ERR_ALARM | RPA_CREDIT_ERR,
4544 					  &bar0->rpa_err_reg,
4545 					  &sw_stat->rpa_err_cnt))
4546 			goto reset;
4547 		do_s2io_chk_alarm_bit(RPA_ECC_SG_ERR | RPA_ECC_DB_ERR,
4548 				      &bar0->rpa_err_reg,
4549 				      &sw_stat->rpa_err_cnt);
4550 	}
4551 
4552 	if (val64 & RXDMA_INT_RDA_INT_M) {
4553 		if (do_s2io_chk_alarm_bit(RDA_RXDn_ECC_DB_ERR |
4554 					  RDA_FRM_ECC_DB_N_AERR |
4555 					  RDA_SM1_ERR_ALARM |
4556 					  RDA_SM0_ERR_ALARM |
4557 					  RDA_RXD_ECC_DB_SERR,
4558 					  &bar0->rda_err_reg,
4559 					  &sw_stat->rda_err_cnt))
4560 			goto reset;
4561 		do_s2io_chk_alarm_bit(RDA_RXDn_ECC_SG_ERR |
4562 				      RDA_FRM_ECC_SG_ERR |
4563 				      RDA_MISC_ERR |
4564 				      RDA_PCIX_ERR,
4565 				      &bar0->rda_err_reg,
4566 				      &sw_stat->rda_err_cnt);
4567 	}
4568 
4569 	if (val64 & RXDMA_INT_RTI_INT_M) {
4570 		if (do_s2io_chk_alarm_bit(RTI_SM_ERR_ALARM,
4571 					  &bar0->rti_err_reg,
4572 					  &sw_stat->rti_err_cnt))
4573 			goto reset;
4574 		do_s2io_chk_alarm_bit(RTI_ECC_SG_ERR | RTI_ECC_DB_ERR,
4575 				      &bar0->rti_err_reg,
4576 				      &sw_stat->rti_err_cnt);
4577 	}
4578 
4579 	val64 = readq(&bar0->mac_int_status);
4580 	if (val64 & MAC_INT_STATUS_RMAC_INT) {
4581 		if (do_s2io_chk_alarm_bit(RMAC_RX_BUFF_OVRN | RMAC_RX_SM_ERR,
4582 					  &bar0->mac_rmac_err_reg,
4583 					  &sw_stat->mac_rmac_err_cnt))
4584 			goto reset;
4585 		do_s2io_chk_alarm_bit(RMAC_UNUSED_INT |
4586 				      RMAC_SINGLE_ECC_ERR |
4587 				      RMAC_DOUBLE_ECC_ERR,
4588 				      &bar0->mac_rmac_err_reg,
4589 				      &sw_stat->mac_rmac_err_cnt);
4590 	}
4591 
4592 	val64 = readq(&bar0->xgxs_int_status);
4593 	if (val64 & XGXS_INT_STATUS_RXGXS) {
4594 		if (do_s2io_chk_alarm_bit(RXGXS_ESTORE_OFLOW | RXGXS_RX_SM_ERR,
4595 					  &bar0->xgxs_rxgxs_err_reg,
4596 					  &sw_stat->xgxs_rxgxs_err_cnt))
4597 			goto reset;
4598 	}
4599 
4600 	val64 = readq(&bar0->mc_int_status);
4601 	if (val64 & MC_INT_STATUS_MC_INT) {
4602 		if (do_s2io_chk_alarm_bit(MC_ERR_REG_SM_ERR,
4603 					  &bar0->mc_err_reg,
4604 					  &sw_stat->mc_err_cnt))
4605 			goto reset;
4606 
4607 		/* Handling Ecc errors */
4608 		if (val64 & (MC_ERR_REG_ECC_ALL_SNG | MC_ERR_REG_ECC_ALL_DBL)) {
4609 			writeq(val64, &bar0->mc_err_reg);
4610 			if (val64 & MC_ERR_REG_ECC_ALL_DBL) {
4611 				sw_stat->double_ecc_errs++;
4612 				if (sp->device_type != XFRAME_II_DEVICE) {
4613 					/*
4614 					 * Reset XframeI only if critical error
4615 					 */
4616 					if (val64 &
4617 					    (MC_ERR_REG_MIRI_ECC_DB_ERR_0 |
4618 					     MC_ERR_REG_MIRI_ECC_DB_ERR_1))
4619 						goto reset;
4620 				}
4621 			} else
4622 				sw_stat->single_ecc_errs++;
4623 		}
4624 	}
4625 	return;
4626 
4627 reset:
4628 	s2io_stop_all_tx_queue(sp);
4629 	schedule_work(&sp->rst_timer_task);
4630 	sw_stat->soft_reset_cnt++;
4631 }
4632 
4633 /**
4634  *  s2io_isr - ISR handler of the device .
4635  *  @irq: the irq of the device.
4636  *  @dev_id: a void pointer to the dev structure of the NIC.
4637  *  Description:  This function is the ISR handler of the device. It
4638  *  identifies the reason for the interrupt and calls the relevant
4639  *  service routines. As a contongency measure, this ISR allocates the
4640  *  recv buffers, if their numbers are below the panic value which is
4641  *  presently set to 25% of the original number of rcv buffers allocated.
4642  *  Return value:
4643  *   IRQ_HANDLED: will be returned if IRQ was handled by this routine
4644  *   IRQ_NONE: will be returned if interrupt is not from our device
4645  */
4646 static irqreturn_t s2io_isr(int irq, void *dev_id)
4647 {
4648 	struct net_device *dev = (struct net_device *)dev_id;
4649 	struct s2io_nic *sp = netdev_priv(dev);
4650 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4651 	int i;
4652 	u64 reason = 0;
4653 	struct mac_info *mac_control;
4654 	struct config_param *config;
4655 
4656 	/* Pretend we handled any irq's from a disconnected card */
4657 	if (pci_channel_offline(sp->pdev))
4658 		return IRQ_NONE;
4659 
4660 	if (!is_s2io_card_up(sp))
4661 		return IRQ_NONE;
4662 
4663 	config = &sp->config;
4664 	mac_control = &sp->mac_control;
4665 
4666 	/*
4667 	 * Identify the cause for interrupt and call the appropriate
4668 	 * interrupt handler. Causes for the interrupt could be;
4669 	 * 1. Rx of packet.
4670 	 * 2. Tx complete.
4671 	 * 3. Link down.
4672 	 */
4673 	reason = readq(&bar0->general_int_status);
4674 
4675 	if (unlikely(reason == S2IO_MINUS_ONE))
4676 		return IRQ_HANDLED;	/* Nothing much can be done. Get out */
4677 
4678 	if (reason &
4679 	    (GEN_INTR_RXTRAFFIC | GEN_INTR_TXTRAFFIC | GEN_INTR_TXPIC)) {
4680 		writeq(S2IO_MINUS_ONE, &bar0->general_int_mask);
4681 
4682 		if (config->napi) {
4683 			if (reason & GEN_INTR_RXTRAFFIC) {
4684 				napi_schedule(&sp->napi);
4685 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_mask);
4686 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int);
4687 				readl(&bar0->rx_traffic_int);
4688 			}
4689 		} else {
4690 			/*
4691 			 * rx_traffic_int reg is an R1 register, writing all 1's
4692 			 * will ensure that the actual interrupt causing bit
4693 			 * get's cleared and hence a read can be avoided.
4694 			 */
4695 			if (reason & GEN_INTR_RXTRAFFIC)
4696 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int);
4697 
4698 			for (i = 0; i < config->rx_ring_num; i++) {
4699 				struct ring_info *ring = &mac_control->rings[i];
4700 
4701 				rx_intr_handler(ring, 0);
4702 			}
4703 		}
4704 
4705 		/*
4706 		 * tx_traffic_int reg is an R1 register, writing all 1's
4707 		 * will ensure that the actual interrupt causing bit get's
4708 		 * cleared and hence a read can be avoided.
4709 		 */
4710 		if (reason & GEN_INTR_TXTRAFFIC)
4711 			writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int);
4712 
4713 		for (i = 0; i < config->tx_fifo_num; i++)
4714 			tx_intr_handler(&mac_control->fifos[i]);
4715 
4716 		if (reason & GEN_INTR_TXPIC)
4717 			s2io_txpic_intr_handle(sp);
4718 
4719 		/*
4720 		 * Reallocate the buffers from the interrupt handler itself.
4721 		 */
4722 		if (!config->napi) {
4723 			for (i = 0; i < config->rx_ring_num; i++) {
4724 				struct ring_info *ring = &mac_control->rings[i];
4725 
4726 				s2io_chk_rx_buffers(sp, ring);
4727 			}
4728 		}
4729 		writeq(sp->general_int_mask, &bar0->general_int_mask);
4730 		readl(&bar0->general_int_status);
4731 
4732 		return IRQ_HANDLED;
4733 
4734 	} else if (!reason) {
4735 		/* The interrupt was not raised by us */
4736 		return IRQ_NONE;
4737 	}
4738 
4739 	return IRQ_HANDLED;
4740 }
4741 
4742 /**
4743  * s2io_updt_stats -
4744  */
4745 static void s2io_updt_stats(struct s2io_nic *sp)
4746 {
4747 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4748 	u64 val64;
4749 	int cnt = 0;
4750 
4751 	if (is_s2io_card_up(sp)) {
4752 		/* Apprx 30us on a 133 MHz bus */
4753 		val64 = SET_UPDT_CLICKS(10) |
4754 			STAT_CFG_ONE_SHOT_EN | STAT_CFG_STAT_EN;
4755 		writeq(val64, &bar0->stat_cfg);
4756 		do {
4757 			udelay(100);
4758 			val64 = readq(&bar0->stat_cfg);
4759 			if (!(val64 & s2BIT(0)))
4760 				break;
4761 			cnt++;
4762 			if (cnt == 5)
4763 				break; /* Updt failed */
4764 		} while (1);
4765 	}
4766 }
4767 
4768 /**
4769  *  s2io_get_stats - Updates the device statistics structure.
4770  *  @dev : pointer to the device structure.
4771  *  Description:
4772  *  This function updates the device statistics structure in the s2io_nic
4773  *  structure and returns a pointer to the same.
4774  *  Return value:
4775  *  pointer to the updated net_device_stats structure.
4776  */
4777 static struct net_device_stats *s2io_get_stats(struct net_device *dev)
4778 {
4779 	struct s2io_nic *sp = netdev_priv(dev);
4780 	struct mac_info *mac_control = &sp->mac_control;
4781 	struct stat_block *stats = mac_control->stats_info;
4782 	u64 delta;
4783 
4784 	/* Configure Stats for immediate updt */
4785 	s2io_updt_stats(sp);
4786 
4787 	/* A device reset will cause the on-adapter statistics to be zero'ed.
4788 	 * This can be done while running by changing the MTU.  To prevent the
4789 	 * system from having the stats zero'ed, the driver keeps a copy of the
4790 	 * last update to the system (which is also zero'ed on reset).  This
4791 	 * enables the driver to accurately know the delta between the last
4792 	 * update and the current update.
4793 	 */
4794 	delta = ((u64) le32_to_cpu(stats->rmac_vld_frms_oflow) << 32 |
4795 		le32_to_cpu(stats->rmac_vld_frms)) - sp->stats.rx_packets;
4796 	sp->stats.rx_packets += delta;
4797 	dev->stats.rx_packets += delta;
4798 
4799 	delta = ((u64) le32_to_cpu(stats->tmac_frms_oflow) << 32 |
4800 		le32_to_cpu(stats->tmac_frms)) - sp->stats.tx_packets;
4801 	sp->stats.tx_packets += delta;
4802 	dev->stats.tx_packets += delta;
4803 
4804 	delta = ((u64) le32_to_cpu(stats->rmac_data_octets_oflow) << 32 |
4805 		le32_to_cpu(stats->rmac_data_octets)) - sp->stats.rx_bytes;
4806 	sp->stats.rx_bytes += delta;
4807 	dev->stats.rx_bytes += delta;
4808 
4809 	delta = ((u64) le32_to_cpu(stats->tmac_data_octets_oflow) << 32 |
4810 		le32_to_cpu(stats->tmac_data_octets)) - sp->stats.tx_bytes;
4811 	sp->stats.tx_bytes += delta;
4812 	dev->stats.tx_bytes += delta;
4813 
4814 	delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_errors;
4815 	sp->stats.rx_errors += delta;
4816 	dev->stats.rx_errors += delta;
4817 
4818 	delta = ((u64) le32_to_cpu(stats->tmac_any_err_frms_oflow) << 32 |
4819 		le32_to_cpu(stats->tmac_any_err_frms)) - sp->stats.tx_errors;
4820 	sp->stats.tx_errors += delta;
4821 	dev->stats.tx_errors += delta;
4822 
4823 	delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_dropped;
4824 	sp->stats.rx_dropped += delta;
4825 	dev->stats.rx_dropped += delta;
4826 
4827 	delta = le64_to_cpu(stats->tmac_drop_frms) - sp->stats.tx_dropped;
4828 	sp->stats.tx_dropped += delta;
4829 	dev->stats.tx_dropped += delta;
4830 
4831 	/* The adapter MAC interprets pause frames as multicast packets, but
4832 	 * does not pass them up.  This erroneously increases the multicast
4833 	 * packet count and needs to be deducted when the multicast frame count
4834 	 * is queried.
4835 	 */
4836 	delta = (u64) le32_to_cpu(stats->rmac_vld_mcst_frms_oflow) << 32 |
4837 		le32_to_cpu(stats->rmac_vld_mcst_frms);
4838 	delta -= le64_to_cpu(stats->rmac_pause_ctrl_frms);
4839 	delta -= sp->stats.multicast;
4840 	sp->stats.multicast += delta;
4841 	dev->stats.multicast += delta;
4842 
4843 	delta = ((u64) le32_to_cpu(stats->rmac_usized_frms_oflow) << 32 |
4844 		le32_to_cpu(stats->rmac_usized_frms)) +
4845 		le64_to_cpu(stats->rmac_long_frms) - sp->stats.rx_length_errors;
4846 	sp->stats.rx_length_errors += delta;
4847 	dev->stats.rx_length_errors += delta;
4848 
4849 	delta = le64_to_cpu(stats->rmac_fcs_err_frms) - sp->stats.rx_crc_errors;
4850 	sp->stats.rx_crc_errors += delta;
4851 	dev->stats.rx_crc_errors += delta;
4852 
4853 	return &dev->stats;
4854 }
4855 
4856 /**
4857  *  s2io_set_multicast - entry point for multicast address enable/disable.
4858  *  @dev : pointer to the device structure
4859  *  Description:
4860  *  This function is a driver entry point which gets called by the kernel
4861  *  whenever multicast addresses must be enabled/disabled. This also gets
4862  *  called to set/reset promiscuous mode. Depending on the deivce flag, we
4863  *  determine, if multicast address must be enabled or if promiscuous mode
4864  *  is to be disabled etc.
4865  *  Return value:
4866  *  void.
4867  */
4868 
4869 static void s2io_set_multicast(struct net_device *dev)
4870 {
4871 	int i, j, prev_cnt;
4872 	struct netdev_hw_addr *ha;
4873 	struct s2io_nic *sp = netdev_priv(dev);
4874 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4875 	u64 val64 = 0, multi_mac = 0x010203040506ULL, mask =
4876 		0xfeffffffffffULL;
4877 	u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, mac_addr = 0;
4878 	void __iomem *add;
4879 	struct config_param *config = &sp->config;
4880 
4881 	if ((dev->flags & IFF_ALLMULTI) && (!sp->m_cast_flg)) {
4882 		/*  Enable all Multicast addresses */
4883 		writeq(RMAC_ADDR_DATA0_MEM_ADDR(multi_mac),
4884 		       &bar0->rmac_addr_data0_mem);
4885 		writeq(RMAC_ADDR_DATA1_MEM_MASK(mask),
4886 		       &bar0->rmac_addr_data1_mem);
4887 		val64 = RMAC_ADDR_CMD_MEM_WE |
4888 			RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4889 			RMAC_ADDR_CMD_MEM_OFFSET(config->max_mc_addr - 1);
4890 		writeq(val64, &bar0->rmac_addr_cmd_mem);
4891 		/* Wait till command completes */
4892 		wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4893 				      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4894 				      S2IO_BIT_RESET);
4895 
4896 		sp->m_cast_flg = 1;
4897 		sp->all_multi_pos = config->max_mc_addr - 1;
4898 	} else if ((dev->flags & IFF_ALLMULTI) && (sp->m_cast_flg)) {
4899 		/*  Disable all Multicast addresses */
4900 		writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4901 		       &bar0->rmac_addr_data0_mem);
4902 		writeq(RMAC_ADDR_DATA1_MEM_MASK(0x0),
4903 		       &bar0->rmac_addr_data1_mem);
4904 		val64 = RMAC_ADDR_CMD_MEM_WE |
4905 			RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4906 			RMAC_ADDR_CMD_MEM_OFFSET(sp->all_multi_pos);
4907 		writeq(val64, &bar0->rmac_addr_cmd_mem);
4908 		/* Wait till command completes */
4909 		wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4910 				      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4911 				      S2IO_BIT_RESET);
4912 
4913 		sp->m_cast_flg = 0;
4914 		sp->all_multi_pos = 0;
4915 	}
4916 
4917 	if ((dev->flags & IFF_PROMISC) && (!sp->promisc_flg)) {
4918 		/*  Put the NIC into promiscuous mode */
4919 		add = &bar0->mac_cfg;
4920 		val64 = readq(&bar0->mac_cfg);
4921 		val64 |= MAC_CFG_RMAC_PROM_ENABLE;
4922 
4923 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4924 		writel((u32)val64, add);
4925 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4926 		writel((u32) (val64 >> 32), (add + 4));
4927 
4928 		if (vlan_tag_strip != 1) {
4929 			val64 = readq(&bar0->rx_pa_cfg);
4930 			val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
4931 			writeq(val64, &bar0->rx_pa_cfg);
4932 			sp->vlan_strip_flag = 0;
4933 		}
4934 
4935 		val64 = readq(&bar0->mac_cfg);
4936 		sp->promisc_flg = 1;
4937 		DBG_PRINT(INFO_DBG, "%s: entered promiscuous mode\n",
4938 			  dev->name);
4939 	} else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) {
4940 		/*  Remove the NIC from promiscuous mode */
4941 		add = &bar0->mac_cfg;
4942 		val64 = readq(&bar0->mac_cfg);
4943 		val64 &= ~MAC_CFG_RMAC_PROM_ENABLE;
4944 
4945 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4946 		writel((u32)val64, add);
4947 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4948 		writel((u32) (val64 >> 32), (add + 4));
4949 
4950 		if (vlan_tag_strip != 0) {
4951 			val64 = readq(&bar0->rx_pa_cfg);
4952 			val64 |= RX_PA_CFG_STRIP_VLAN_TAG;
4953 			writeq(val64, &bar0->rx_pa_cfg);
4954 			sp->vlan_strip_flag = 1;
4955 		}
4956 
4957 		val64 = readq(&bar0->mac_cfg);
4958 		sp->promisc_flg = 0;
4959 		DBG_PRINT(INFO_DBG, "%s: left promiscuous mode\n", dev->name);
4960 	}
4961 
4962 	/*  Update individual M_CAST address list */
4963 	if ((!sp->m_cast_flg) && netdev_mc_count(dev)) {
4964 		if (netdev_mc_count(dev) >
4965 		    (config->max_mc_addr - config->max_mac_addr)) {
4966 			DBG_PRINT(ERR_DBG,
4967 				  "%s: No more Rx filters can be added - "
4968 				  "please enable ALL_MULTI instead\n",
4969 				  dev->name);
4970 			return;
4971 		}
4972 
4973 		prev_cnt = sp->mc_addr_count;
4974 		sp->mc_addr_count = netdev_mc_count(dev);
4975 
4976 		/* Clear out the previous list of Mc in the H/W. */
4977 		for (i = 0; i < prev_cnt; i++) {
4978 			writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4979 			       &bar0->rmac_addr_data0_mem);
4980 			writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
4981 			       &bar0->rmac_addr_data1_mem);
4982 			val64 = RMAC_ADDR_CMD_MEM_WE |
4983 				RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4984 				RMAC_ADDR_CMD_MEM_OFFSET
4985 				(config->mc_start_offset + i);
4986 			writeq(val64, &bar0->rmac_addr_cmd_mem);
4987 
4988 			/* Wait for command completes */
4989 			if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4990 						  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4991 						  S2IO_BIT_RESET)) {
4992 				DBG_PRINT(ERR_DBG,
4993 					  "%s: Adding Multicasts failed\n",
4994 					  dev->name);
4995 				return;
4996 			}
4997 		}
4998 
4999 		/* Create the new Rx filter list and update the same in H/W. */
5000 		i = 0;
5001 		netdev_for_each_mc_addr(ha, dev) {
5002 			mac_addr = 0;
5003 			for (j = 0; j < ETH_ALEN; j++) {
5004 				mac_addr |= ha->addr[j];
5005 				mac_addr <<= 8;
5006 			}
5007 			mac_addr >>= 8;
5008 			writeq(RMAC_ADDR_DATA0_MEM_ADDR(mac_addr),
5009 			       &bar0->rmac_addr_data0_mem);
5010 			writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
5011 			       &bar0->rmac_addr_data1_mem);
5012 			val64 = RMAC_ADDR_CMD_MEM_WE |
5013 				RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5014 				RMAC_ADDR_CMD_MEM_OFFSET
5015 				(i + config->mc_start_offset);
5016 			writeq(val64, &bar0->rmac_addr_cmd_mem);
5017 
5018 			/* Wait for command completes */
5019 			if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5020 						  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5021 						  S2IO_BIT_RESET)) {
5022 				DBG_PRINT(ERR_DBG,
5023 					  "%s: Adding Multicasts failed\n",
5024 					  dev->name);
5025 				return;
5026 			}
5027 			i++;
5028 		}
5029 	}
5030 }
5031 
5032 /* read from CAM unicast & multicast addresses and store it in
5033  * def_mac_addr structure
5034  */
5035 static void do_s2io_store_unicast_mc(struct s2io_nic *sp)
5036 {
5037 	int offset;
5038 	u64 mac_addr = 0x0;
5039 	struct config_param *config = &sp->config;
5040 
5041 	/* store unicast & multicast mac addresses */
5042 	for (offset = 0; offset < config->max_mc_addr; offset++) {
5043 		mac_addr = do_s2io_read_unicast_mc(sp, offset);
5044 		/* if read fails disable the entry */
5045 		if (mac_addr == FAILURE)
5046 			mac_addr = S2IO_DISABLE_MAC_ENTRY;
5047 		do_s2io_copy_mac_addr(sp, offset, mac_addr);
5048 	}
5049 }
5050 
5051 /* restore unicast & multicast MAC to CAM from def_mac_addr structure */
5052 static void do_s2io_restore_unicast_mc(struct s2io_nic *sp)
5053 {
5054 	int offset;
5055 	struct config_param *config = &sp->config;
5056 	/* restore unicast mac address */
5057 	for (offset = 0; offset < config->max_mac_addr; offset++)
5058 		do_s2io_prog_unicast(sp->dev,
5059 				     sp->def_mac_addr[offset].mac_addr);
5060 
5061 	/* restore multicast mac address */
5062 	for (offset = config->mc_start_offset;
5063 	     offset < config->max_mc_addr; offset++)
5064 		do_s2io_add_mc(sp, sp->def_mac_addr[offset].mac_addr);
5065 }
5066 
5067 /* add a multicast MAC address to CAM */
5068 static int do_s2io_add_mc(struct s2io_nic *sp, u8 *addr)
5069 {
5070 	int i;
5071 	u64 mac_addr = 0;
5072 	struct config_param *config = &sp->config;
5073 
5074 	for (i = 0; i < ETH_ALEN; i++) {
5075 		mac_addr <<= 8;
5076 		mac_addr |= addr[i];
5077 	}
5078 	if ((0ULL == mac_addr) || (mac_addr == S2IO_DISABLE_MAC_ENTRY))
5079 		return SUCCESS;
5080 
5081 	/* check if the multicast mac already preset in CAM */
5082 	for (i = config->mc_start_offset; i < config->max_mc_addr; i++) {
5083 		u64 tmp64;
5084 		tmp64 = do_s2io_read_unicast_mc(sp, i);
5085 		if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5086 			break;
5087 
5088 		if (tmp64 == mac_addr)
5089 			return SUCCESS;
5090 	}
5091 	if (i == config->max_mc_addr) {
5092 		DBG_PRINT(ERR_DBG,
5093 			  "CAM full no space left for multicast MAC\n");
5094 		return FAILURE;
5095 	}
5096 	/* Update the internal structure with this new mac address */
5097 	do_s2io_copy_mac_addr(sp, i, mac_addr);
5098 
5099 	return do_s2io_add_mac(sp, mac_addr, i);
5100 }
5101 
5102 /* add MAC address to CAM */
5103 static int do_s2io_add_mac(struct s2io_nic *sp, u64 addr, int off)
5104 {
5105 	u64 val64;
5106 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5107 
5108 	writeq(RMAC_ADDR_DATA0_MEM_ADDR(addr),
5109 	       &bar0->rmac_addr_data0_mem);
5110 
5111 	val64 =	RMAC_ADDR_CMD_MEM_WE | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5112 		RMAC_ADDR_CMD_MEM_OFFSET(off);
5113 	writeq(val64, &bar0->rmac_addr_cmd_mem);
5114 
5115 	/* Wait till command completes */
5116 	if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5117 				  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5118 				  S2IO_BIT_RESET)) {
5119 		DBG_PRINT(INFO_DBG, "do_s2io_add_mac failed\n");
5120 		return FAILURE;
5121 	}
5122 	return SUCCESS;
5123 }
5124 /* deletes a specified unicast/multicast mac entry from CAM */
5125 static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr)
5126 {
5127 	int offset;
5128 	u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, tmp64;
5129 	struct config_param *config = &sp->config;
5130 
5131 	for (offset = 1;
5132 	     offset < config->max_mc_addr; offset++) {
5133 		tmp64 = do_s2io_read_unicast_mc(sp, offset);
5134 		if (tmp64 == addr) {
5135 			/* disable the entry by writing  0xffffffffffffULL */
5136 			if (do_s2io_add_mac(sp, dis_addr, offset) ==  FAILURE)
5137 				return FAILURE;
5138 			/* store the new mac list from CAM */
5139 			do_s2io_store_unicast_mc(sp);
5140 			return SUCCESS;
5141 		}
5142 	}
5143 	DBG_PRINT(ERR_DBG, "MAC address 0x%llx not found in CAM\n",
5144 		  (unsigned long long)addr);
5145 	return FAILURE;
5146 }
5147 
5148 /* read mac entries from CAM */
5149 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset)
5150 {
5151 	u64 tmp64, val64;
5152 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5153 
5154 	/* read mac addr */
5155 	val64 =	RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5156 		RMAC_ADDR_CMD_MEM_OFFSET(offset);
5157 	writeq(val64, &bar0->rmac_addr_cmd_mem);
5158 
5159 	/* Wait till command completes */
5160 	if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5161 				  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5162 				  S2IO_BIT_RESET)) {
5163 		DBG_PRINT(INFO_DBG, "do_s2io_read_unicast_mc failed\n");
5164 		return FAILURE;
5165 	}
5166 	tmp64 = readq(&bar0->rmac_addr_data0_mem);
5167 
5168 	return tmp64 >> 16;
5169 }
5170 
5171 /**
5172  * s2io_set_mac_addr - driver entry point
5173  */
5174 
5175 static int s2io_set_mac_addr(struct net_device *dev, void *p)
5176 {
5177 	struct sockaddr *addr = p;
5178 
5179 	if (!is_valid_ether_addr(addr->sa_data))
5180 		return -EADDRNOTAVAIL;
5181 
5182 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5183 
5184 	/* store the MAC address in CAM */
5185 	return do_s2io_prog_unicast(dev, dev->dev_addr);
5186 }
5187 /**
5188  *  do_s2io_prog_unicast - Programs the Xframe mac address
5189  *  @dev : pointer to the device structure.
5190  *  @addr: a uchar pointer to the new mac address which is to be set.
5191  *  Description : This procedure will program the Xframe to receive
5192  *  frames with new Mac Address
5193  *  Return value: SUCCESS on success and an appropriate (-)ve integer
5194  *  as defined in errno.h file on failure.
5195  */
5196 
5197 static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr)
5198 {
5199 	struct s2io_nic *sp = netdev_priv(dev);
5200 	register u64 mac_addr = 0, perm_addr = 0;
5201 	int i;
5202 	u64 tmp64;
5203 	struct config_param *config = &sp->config;
5204 
5205 	/*
5206 	 * Set the new MAC address as the new unicast filter and reflect this
5207 	 * change on the device address registered with the OS. It will be
5208 	 * at offset 0.
5209 	 */
5210 	for (i = 0; i < ETH_ALEN; i++) {
5211 		mac_addr <<= 8;
5212 		mac_addr |= addr[i];
5213 		perm_addr <<= 8;
5214 		perm_addr |= sp->def_mac_addr[0].mac_addr[i];
5215 	}
5216 
5217 	/* check if the dev_addr is different than perm_addr */
5218 	if (mac_addr == perm_addr)
5219 		return SUCCESS;
5220 
5221 	/* check if the mac already preset in CAM */
5222 	for (i = 1; i < config->max_mac_addr; i++) {
5223 		tmp64 = do_s2io_read_unicast_mc(sp, i);
5224 		if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5225 			break;
5226 
5227 		if (tmp64 == mac_addr) {
5228 			DBG_PRINT(INFO_DBG,
5229 				  "MAC addr:0x%llx already present in CAM\n",
5230 				  (unsigned long long)mac_addr);
5231 			return SUCCESS;
5232 		}
5233 	}
5234 	if (i == config->max_mac_addr) {
5235 		DBG_PRINT(ERR_DBG, "CAM full no space left for Unicast MAC\n");
5236 		return FAILURE;
5237 	}
5238 	/* Update the internal structure with this new mac address */
5239 	do_s2io_copy_mac_addr(sp, i, mac_addr);
5240 
5241 	return do_s2io_add_mac(sp, mac_addr, i);
5242 }
5243 
5244 /**
5245  * s2io_ethtool_set_link_ksettings - Sets different link parameters.
5246  * @sp : private member of the device structure, which is a pointer to the
5247  * s2io_nic structure.
5248  * @cmd: pointer to the structure with parameters given by ethtool to set
5249  * link information.
5250  * Description:
5251  * The function sets different link parameters provided by the user onto
5252  * the NIC.
5253  * Return value:
5254  * 0 on success.
5255  */
5256 
5257 static int
5258 s2io_ethtool_set_link_ksettings(struct net_device *dev,
5259 				const struct ethtool_link_ksettings *cmd)
5260 {
5261 	struct s2io_nic *sp = netdev_priv(dev);
5262 	if ((cmd->base.autoneg == AUTONEG_ENABLE) ||
5263 	    (cmd->base.speed != SPEED_10000) ||
5264 	    (cmd->base.duplex != DUPLEX_FULL))
5265 		return -EINVAL;
5266 	else {
5267 		s2io_close(sp->dev);
5268 		s2io_open(sp->dev);
5269 	}
5270 
5271 	return 0;
5272 }
5273 
5274 /**
5275  * s2io_ethtol_get_link_ksettings - Return link specific information.
5276  * @sp : private member of the device structure, pointer to the
5277  *      s2io_nic structure.
5278  * @cmd : pointer to the structure with parameters given by ethtool
5279  * to return link information.
5280  * Description:
5281  * Returns link specific information like speed, duplex etc.. to ethtool.
5282  * Return value :
5283  * return 0 on success.
5284  */
5285 
5286 static int
5287 s2io_ethtool_get_link_ksettings(struct net_device *dev,
5288 				struct ethtool_link_ksettings *cmd)
5289 {
5290 	struct s2io_nic *sp = netdev_priv(dev);
5291 
5292 	ethtool_link_ksettings_zero_link_mode(cmd, supported);
5293 	ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
5294 	ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
5295 
5296 	ethtool_link_ksettings_zero_link_mode(cmd, advertising);
5297 	ethtool_link_ksettings_add_link_mode(cmd, advertising, 10000baseT_Full);
5298 	ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
5299 
5300 	cmd->base.port = PORT_FIBRE;
5301 
5302 	if (netif_carrier_ok(sp->dev)) {
5303 		cmd->base.speed = SPEED_10000;
5304 		cmd->base.duplex = DUPLEX_FULL;
5305 	} else {
5306 		cmd->base.speed = SPEED_UNKNOWN;
5307 		cmd->base.duplex = DUPLEX_UNKNOWN;
5308 	}
5309 
5310 	cmd->base.autoneg = AUTONEG_DISABLE;
5311 	return 0;
5312 }
5313 
5314 /**
5315  * s2io_ethtool_gdrvinfo - Returns driver specific information.
5316  * @sp : private member of the device structure, which is a pointer to the
5317  * s2io_nic structure.
5318  * @info : pointer to the structure with parameters given by ethtool to
5319  * return driver information.
5320  * Description:
5321  * Returns driver specefic information like name, version etc.. to ethtool.
5322  * Return value:
5323  *  void
5324  */
5325 
5326 static void s2io_ethtool_gdrvinfo(struct net_device *dev,
5327 				  struct ethtool_drvinfo *info)
5328 {
5329 	struct s2io_nic *sp = netdev_priv(dev);
5330 
5331 	strlcpy(info->driver, s2io_driver_name, sizeof(info->driver));
5332 	strlcpy(info->version, s2io_driver_version, sizeof(info->version));
5333 	strlcpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info));
5334 }
5335 
5336 /**
5337  *  s2io_ethtool_gregs - dumps the entire space of Xfame into the buffer.
5338  *  @sp: private member of the device structure, which is a pointer to the
5339  *  s2io_nic structure.
5340  *  @regs : pointer to the structure with parameters given by ethtool for
5341  *  dumping the registers.
5342  *  @reg_space: The input argument into which all the registers are dumped.
5343  *  Description:
5344  *  Dumps the entire register space of xFrame NIC into the user given
5345  *  buffer area.
5346  * Return value :
5347  * void .
5348  */
5349 
5350 static void s2io_ethtool_gregs(struct net_device *dev,
5351 			       struct ethtool_regs *regs, void *space)
5352 {
5353 	int i;
5354 	u64 reg;
5355 	u8 *reg_space = (u8 *)space;
5356 	struct s2io_nic *sp = netdev_priv(dev);
5357 
5358 	regs->len = XENA_REG_SPACE;
5359 	regs->version = sp->pdev->subsystem_device;
5360 
5361 	for (i = 0; i < regs->len; i += 8) {
5362 		reg = readq(sp->bar0 + i);
5363 		memcpy((reg_space + i), &reg, 8);
5364 	}
5365 }
5366 
5367 /*
5368  *  s2io_set_led - control NIC led
5369  */
5370 static void s2io_set_led(struct s2io_nic *sp, bool on)
5371 {
5372 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5373 	u16 subid = sp->pdev->subsystem_device;
5374 	u64 val64;
5375 
5376 	if ((sp->device_type == XFRAME_II_DEVICE) ||
5377 	    ((subid & 0xFF) >= 0x07)) {
5378 		val64 = readq(&bar0->gpio_control);
5379 		if (on)
5380 			val64 |= GPIO_CTRL_GPIO_0;
5381 		else
5382 			val64 &= ~GPIO_CTRL_GPIO_0;
5383 
5384 		writeq(val64, &bar0->gpio_control);
5385 	} else {
5386 		val64 = readq(&bar0->adapter_control);
5387 		if (on)
5388 			val64 |= ADAPTER_LED_ON;
5389 		else
5390 			val64 &= ~ADAPTER_LED_ON;
5391 
5392 		writeq(val64, &bar0->adapter_control);
5393 	}
5394 
5395 }
5396 
5397 /**
5398  * s2io_ethtool_set_led - To physically identify the nic on the system.
5399  * @dev : network device
5400  * @state: led setting
5401  *
5402  * Description: Used to physically identify the NIC on the system.
5403  * The Link LED will blink for a time specified by the user for
5404  * identification.
5405  * NOTE: The Link has to be Up to be able to blink the LED. Hence
5406  * identification is possible only if it's link is up.
5407  */
5408 
5409 static int s2io_ethtool_set_led(struct net_device *dev,
5410 				enum ethtool_phys_id_state state)
5411 {
5412 	struct s2io_nic *sp = netdev_priv(dev);
5413 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5414 	u16 subid = sp->pdev->subsystem_device;
5415 
5416 	if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) {
5417 		u64 val64 = readq(&bar0->adapter_control);
5418 		if (!(val64 & ADAPTER_CNTL_EN)) {
5419 			pr_err("Adapter Link down, cannot blink LED\n");
5420 			return -EAGAIN;
5421 		}
5422 	}
5423 
5424 	switch (state) {
5425 	case ETHTOOL_ID_ACTIVE:
5426 		sp->adapt_ctrl_org = readq(&bar0->gpio_control);
5427 		return 1;	/* cycle on/off once per second */
5428 
5429 	case ETHTOOL_ID_ON:
5430 		s2io_set_led(sp, true);
5431 		break;
5432 
5433 	case ETHTOOL_ID_OFF:
5434 		s2io_set_led(sp, false);
5435 		break;
5436 
5437 	case ETHTOOL_ID_INACTIVE:
5438 		if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid))
5439 			writeq(sp->adapt_ctrl_org, &bar0->gpio_control);
5440 	}
5441 
5442 	return 0;
5443 }
5444 
5445 static void s2io_ethtool_gringparam(struct net_device *dev,
5446 				    struct ethtool_ringparam *ering)
5447 {
5448 	struct s2io_nic *sp = netdev_priv(dev);
5449 	int i, tx_desc_count = 0, rx_desc_count = 0;
5450 
5451 	if (sp->rxd_mode == RXD_MODE_1) {
5452 		ering->rx_max_pending = MAX_RX_DESC_1;
5453 		ering->rx_jumbo_max_pending = MAX_RX_DESC_1;
5454 	} else {
5455 		ering->rx_max_pending = MAX_RX_DESC_2;
5456 		ering->rx_jumbo_max_pending = MAX_RX_DESC_2;
5457 	}
5458 
5459 	ering->tx_max_pending = MAX_TX_DESC;
5460 
5461 	for (i = 0; i < sp->config.rx_ring_num; i++)
5462 		rx_desc_count += sp->config.rx_cfg[i].num_rxd;
5463 	ering->rx_pending = rx_desc_count;
5464 	ering->rx_jumbo_pending = rx_desc_count;
5465 
5466 	for (i = 0; i < sp->config.tx_fifo_num; i++)
5467 		tx_desc_count += sp->config.tx_cfg[i].fifo_len;
5468 	ering->tx_pending = tx_desc_count;
5469 	DBG_PRINT(INFO_DBG, "max txds: %d\n", sp->config.max_txds);
5470 }
5471 
5472 /**
5473  * s2io_ethtool_getpause_data -Pause frame frame generation and reception.
5474  * @sp : private member of the device structure, which is a pointer to the
5475  *	s2io_nic structure.
5476  * @ep : pointer to the structure with pause parameters given by ethtool.
5477  * Description:
5478  * Returns the Pause frame generation and reception capability of the NIC.
5479  * Return value:
5480  *  void
5481  */
5482 static void s2io_ethtool_getpause_data(struct net_device *dev,
5483 				       struct ethtool_pauseparam *ep)
5484 {
5485 	u64 val64;
5486 	struct s2io_nic *sp = netdev_priv(dev);
5487 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5488 
5489 	val64 = readq(&bar0->rmac_pause_cfg);
5490 	if (val64 & RMAC_PAUSE_GEN_ENABLE)
5491 		ep->tx_pause = true;
5492 	if (val64 & RMAC_PAUSE_RX_ENABLE)
5493 		ep->rx_pause = true;
5494 	ep->autoneg = false;
5495 }
5496 
5497 /**
5498  * s2io_ethtool_setpause_data -  set/reset pause frame generation.
5499  * @sp : private member of the device structure, which is a pointer to the
5500  *      s2io_nic structure.
5501  * @ep : pointer to the structure with pause parameters given by ethtool.
5502  * Description:
5503  * It can be used to set or reset Pause frame generation or reception
5504  * support of the NIC.
5505  * Return value:
5506  * int, returns 0 on Success
5507  */
5508 
5509 static int s2io_ethtool_setpause_data(struct net_device *dev,
5510 				      struct ethtool_pauseparam *ep)
5511 {
5512 	u64 val64;
5513 	struct s2io_nic *sp = netdev_priv(dev);
5514 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5515 
5516 	val64 = readq(&bar0->rmac_pause_cfg);
5517 	if (ep->tx_pause)
5518 		val64 |= RMAC_PAUSE_GEN_ENABLE;
5519 	else
5520 		val64 &= ~RMAC_PAUSE_GEN_ENABLE;
5521 	if (ep->rx_pause)
5522 		val64 |= RMAC_PAUSE_RX_ENABLE;
5523 	else
5524 		val64 &= ~RMAC_PAUSE_RX_ENABLE;
5525 	writeq(val64, &bar0->rmac_pause_cfg);
5526 	return 0;
5527 }
5528 
5529 /**
5530  * read_eeprom - reads 4 bytes of data from user given offset.
5531  * @sp : private member of the device structure, which is a pointer to the
5532  *      s2io_nic structure.
5533  * @off : offset at which the data must be written
5534  * @data : Its an output parameter where the data read at the given
5535  *	offset is stored.
5536  * Description:
5537  * Will read 4 bytes of data from the user given offset and return the
5538  * read data.
5539  * NOTE: Will allow to read only part of the EEPROM visible through the
5540  *   I2C bus.
5541  * Return value:
5542  *  -1 on failure and 0 on success.
5543  */
5544 
5545 #define S2IO_DEV_ID		5
5546 static int read_eeprom(struct s2io_nic *sp, int off, u64 *data)
5547 {
5548 	int ret = -1;
5549 	u32 exit_cnt = 0;
5550 	u64 val64;
5551 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5552 
5553 	if (sp->device_type == XFRAME_I_DEVICE) {
5554 		val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5555 			I2C_CONTROL_ADDR(off) |
5556 			I2C_CONTROL_BYTE_CNT(0x3) |
5557 			I2C_CONTROL_READ |
5558 			I2C_CONTROL_CNTL_START;
5559 		SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5560 
5561 		while (exit_cnt < 5) {
5562 			val64 = readq(&bar0->i2c_control);
5563 			if (I2C_CONTROL_CNTL_END(val64)) {
5564 				*data = I2C_CONTROL_GET_DATA(val64);
5565 				ret = 0;
5566 				break;
5567 			}
5568 			msleep(50);
5569 			exit_cnt++;
5570 		}
5571 	}
5572 
5573 	if (sp->device_type == XFRAME_II_DEVICE) {
5574 		val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5575 			SPI_CONTROL_BYTECNT(0x3) |
5576 			SPI_CONTROL_CMD(0x3) | SPI_CONTROL_ADDR(off);
5577 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5578 		val64 |= SPI_CONTROL_REQ;
5579 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5580 		while (exit_cnt < 5) {
5581 			val64 = readq(&bar0->spi_control);
5582 			if (val64 & SPI_CONTROL_NACK) {
5583 				ret = 1;
5584 				break;
5585 			} else if (val64 & SPI_CONTROL_DONE) {
5586 				*data = readq(&bar0->spi_data);
5587 				*data &= 0xffffff;
5588 				ret = 0;
5589 				break;
5590 			}
5591 			msleep(50);
5592 			exit_cnt++;
5593 		}
5594 	}
5595 	return ret;
5596 }
5597 
5598 /**
5599  *  write_eeprom - actually writes the relevant part of the data value.
5600  *  @sp : private member of the device structure, which is a pointer to the
5601  *       s2io_nic structure.
5602  *  @off : offset at which the data must be written
5603  *  @data : The data that is to be written
5604  *  @cnt : Number of bytes of the data that are actually to be written into
5605  *  the Eeprom. (max of 3)
5606  * Description:
5607  *  Actually writes the relevant part of the data value into the Eeprom
5608  *  through the I2C bus.
5609  * Return value:
5610  *  0 on success, -1 on failure.
5611  */
5612 
5613 static int write_eeprom(struct s2io_nic *sp, int off, u64 data, int cnt)
5614 {
5615 	int exit_cnt = 0, ret = -1;
5616 	u64 val64;
5617 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5618 
5619 	if (sp->device_type == XFRAME_I_DEVICE) {
5620 		val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5621 			I2C_CONTROL_ADDR(off) |
5622 			I2C_CONTROL_BYTE_CNT(cnt) |
5623 			I2C_CONTROL_SET_DATA((u32)data) |
5624 			I2C_CONTROL_CNTL_START;
5625 		SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5626 
5627 		while (exit_cnt < 5) {
5628 			val64 = readq(&bar0->i2c_control);
5629 			if (I2C_CONTROL_CNTL_END(val64)) {
5630 				if (!(val64 & I2C_CONTROL_NACK))
5631 					ret = 0;
5632 				break;
5633 			}
5634 			msleep(50);
5635 			exit_cnt++;
5636 		}
5637 	}
5638 
5639 	if (sp->device_type == XFRAME_II_DEVICE) {
5640 		int write_cnt = (cnt == 8) ? 0 : cnt;
5641 		writeq(SPI_DATA_WRITE(data, (cnt << 3)), &bar0->spi_data);
5642 
5643 		val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5644 			SPI_CONTROL_BYTECNT(write_cnt) |
5645 			SPI_CONTROL_CMD(0x2) | SPI_CONTROL_ADDR(off);
5646 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5647 		val64 |= SPI_CONTROL_REQ;
5648 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5649 		while (exit_cnt < 5) {
5650 			val64 = readq(&bar0->spi_control);
5651 			if (val64 & SPI_CONTROL_NACK) {
5652 				ret = 1;
5653 				break;
5654 			} else if (val64 & SPI_CONTROL_DONE) {
5655 				ret = 0;
5656 				break;
5657 			}
5658 			msleep(50);
5659 			exit_cnt++;
5660 		}
5661 	}
5662 	return ret;
5663 }
5664 static void s2io_vpd_read(struct s2io_nic *nic)
5665 {
5666 	u8 *vpd_data;
5667 	u8 data;
5668 	int i = 0, cnt, len, fail = 0;
5669 	int vpd_addr = 0x80;
5670 	struct swStat *swstats = &nic->mac_control.stats_info->sw_stat;
5671 
5672 	if (nic->device_type == XFRAME_II_DEVICE) {
5673 		strcpy(nic->product_name, "Xframe II 10GbE network adapter");
5674 		vpd_addr = 0x80;
5675 	} else {
5676 		strcpy(nic->product_name, "Xframe I 10GbE network adapter");
5677 		vpd_addr = 0x50;
5678 	}
5679 	strcpy(nic->serial_num, "NOT AVAILABLE");
5680 
5681 	vpd_data = kmalloc(256, GFP_KERNEL);
5682 	if (!vpd_data) {
5683 		swstats->mem_alloc_fail_cnt++;
5684 		return;
5685 	}
5686 	swstats->mem_allocated += 256;
5687 
5688 	for (i = 0; i < 256; i += 4) {
5689 		pci_write_config_byte(nic->pdev, (vpd_addr + 2), i);
5690 		pci_read_config_byte(nic->pdev,  (vpd_addr + 2), &data);
5691 		pci_write_config_byte(nic->pdev, (vpd_addr + 3), 0);
5692 		for (cnt = 0; cnt < 5; cnt++) {
5693 			msleep(2);
5694 			pci_read_config_byte(nic->pdev, (vpd_addr + 3), &data);
5695 			if (data == 0x80)
5696 				break;
5697 		}
5698 		if (cnt >= 5) {
5699 			DBG_PRINT(ERR_DBG, "Read of VPD data failed\n");
5700 			fail = 1;
5701 			break;
5702 		}
5703 		pci_read_config_dword(nic->pdev,  (vpd_addr + 4),
5704 				      (u32 *)&vpd_data[i]);
5705 	}
5706 
5707 	if (!fail) {
5708 		/* read serial number of adapter */
5709 		for (cnt = 0; cnt < 252; cnt++) {
5710 			if ((vpd_data[cnt] == 'S') &&
5711 			    (vpd_data[cnt+1] == 'N')) {
5712 				len = vpd_data[cnt+2];
5713 				if (len < min(VPD_STRING_LEN, 256-cnt-2)) {
5714 					memcpy(nic->serial_num,
5715 					       &vpd_data[cnt + 3],
5716 					       len);
5717 					memset(nic->serial_num+len,
5718 					       0,
5719 					       VPD_STRING_LEN-len);
5720 					break;
5721 				}
5722 			}
5723 		}
5724 	}
5725 
5726 	if ((!fail) && (vpd_data[1] < VPD_STRING_LEN)) {
5727 		len = vpd_data[1];
5728 		memcpy(nic->product_name, &vpd_data[3], len);
5729 		nic->product_name[len] = 0;
5730 	}
5731 	kfree(vpd_data);
5732 	swstats->mem_freed += 256;
5733 }
5734 
5735 /**
5736  *  s2io_ethtool_geeprom  - reads the value stored in the Eeprom.
5737  *  @sp : private member of the device structure, which is a pointer to the
5738  *  s2io_nic structure.
5739  *  @eeprom : pointer to the user level structure provided by ethtool,
5740  *  containing all relevant information.
5741  *  @data_buf : user defined value to be written into Eeprom.
5742  *  Description: Reads the values stored in the Eeprom at given offset
5743  *  for a given length. Stores these values int the input argument data
5744  *  buffer 'data_buf' and returns these to the caller (ethtool.)
5745  *  Return value:
5746  *  int  0 on success
5747  */
5748 
5749 static int s2io_ethtool_geeprom(struct net_device *dev,
5750 				struct ethtool_eeprom *eeprom, u8 * data_buf)
5751 {
5752 	u32 i, valid;
5753 	u64 data;
5754 	struct s2io_nic *sp = netdev_priv(dev);
5755 
5756 	eeprom->magic = sp->pdev->vendor | (sp->pdev->device << 16);
5757 
5758 	if ((eeprom->offset + eeprom->len) > (XENA_EEPROM_SPACE))
5759 		eeprom->len = XENA_EEPROM_SPACE - eeprom->offset;
5760 
5761 	for (i = 0; i < eeprom->len; i += 4) {
5762 		if (read_eeprom(sp, (eeprom->offset + i), &data)) {
5763 			DBG_PRINT(ERR_DBG, "Read of EEPROM failed\n");
5764 			return -EFAULT;
5765 		}
5766 		valid = INV(data);
5767 		memcpy((data_buf + i), &valid, 4);
5768 	}
5769 	return 0;
5770 }
5771 
5772 /**
5773  *  s2io_ethtool_seeprom - tries to write the user provided value in Eeprom
5774  *  @sp : private member of the device structure, which is a pointer to the
5775  *  s2io_nic structure.
5776  *  @eeprom : pointer to the user level structure provided by ethtool,
5777  *  containing all relevant information.
5778  *  @data_buf ; user defined value to be written into Eeprom.
5779  *  Description:
5780  *  Tries to write the user provided value in the Eeprom, at the offset
5781  *  given by the user.
5782  *  Return value:
5783  *  0 on success, -EFAULT on failure.
5784  */
5785 
5786 static int s2io_ethtool_seeprom(struct net_device *dev,
5787 				struct ethtool_eeprom *eeprom,
5788 				u8 *data_buf)
5789 {
5790 	int len = eeprom->len, cnt = 0;
5791 	u64 valid = 0, data;
5792 	struct s2io_nic *sp = netdev_priv(dev);
5793 
5794 	if (eeprom->magic != (sp->pdev->vendor | (sp->pdev->device << 16))) {
5795 		DBG_PRINT(ERR_DBG,
5796 			  "ETHTOOL_WRITE_EEPROM Err: "
5797 			  "Magic value is wrong, it is 0x%x should be 0x%x\n",
5798 			  (sp->pdev->vendor | (sp->pdev->device << 16)),
5799 			  eeprom->magic);
5800 		return -EFAULT;
5801 	}
5802 
5803 	while (len) {
5804 		data = (u32)data_buf[cnt] & 0x000000FF;
5805 		if (data)
5806 			valid = (u32)(data << 24);
5807 		else
5808 			valid = data;
5809 
5810 		if (write_eeprom(sp, (eeprom->offset + cnt), valid, 0)) {
5811 			DBG_PRINT(ERR_DBG,
5812 				  "ETHTOOL_WRITE_EEPROM Err: "
5813 				  "Cannot write into the specified offset\n");
5814 			return -EFAULT;
5815 		}
5816 		cnt++;
5817 		len--;
5818 	}
5819 
5820 	return 0;
5821 }
5822 
5823 /**
5824  * s2io_register_test - reads and writes into all clock domains.
5825  * @sp : private member of the device structure, which is a pointer to the
5826  * s2io_nic structure.
5827  * @data : variable that returns the result of each of the test conducted b
5828  * by the driver.
5829  * Description:
5830  * Read and write into all clock domains. The NIC has 3 clock domains,
5831  * see that registers in all the three regions are accessible.
5832  * Return value:
5833  * 0 on success.
5834  */
5835 
5836 static int s2io_register_test(struct s2io_nic *sp, uint64_t *data)
5837 {
5838 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5839 	u64 val64 = 0, exp_val;
5840 	int fail = 0;
5841 
5842 	val64 = readq(&bar0->pif_rd_swapper_fb);
5843 	if (val64 != 0x123456789abcdefULL) {
5844 		fail = 1;
5845 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 1);
5846 	}
5847 
5848 	val64 = readq(&bar0->rmac_pause_cfg);
5849 	if (val64 != 0xc000ffff00000000ULL) {
5850 		fail = 1;
5851 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 2);
5852 	}
5853 
5854 	val64 = readq(&bar0->rx_queue_cfg);
5855 	if (sp->device_type == XFRAME_II_DEVICE)
5856 		exp_val = 0x0404040404040404ULL;
5857 	else
5858 		exp_val = 0x0808080808080808ULL;
5859 	if (val64 != exp_val) {
5860 		fail = 1;
5861 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 3);
5862 	}
5863 
5864 	val64 = readq(&bar0->xgxs_efifo_cfg);
5865 	if (val64 != 0x000000001923141EULL) {
5866 		fail = 1;
5867 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 4);
5868 	}
5869 
5870 	val64 = 0x5A5A5A5A5A5A5A5AULL;
5871 	writeq(val64, &bar0->xmsi_data);
5872 	val64 = readq(&bar0->xmsi_data);
5873 	if (val64 != 0x5A5A5A5A5A5A5A5AULL) {
5874 		fail = 1;
5875 		DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 1);
5876 	}
5877 
5878 	val64 = 0xA5A5A5A5A5A5A5A5ULL;
5879 	writeq(val64, &bar0->xmsi_data);
5880 	val64 = readq(&bar0->xmsi_data);
5881 	if (val64 != 0xA5A5A5A5A5A5A5A5ULL) {
5882 		fail = 1;
5883 		DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 2);
5884 	}
5885 
5886 	*data = fail;
5887 	return fail;
5888 }
5889 
5890 /**
5891  * s2io_eeprom_test - to verify that EEprom in the xena can be programmed.
5892  * @sp : private member of the device structure, which is a pointer to the
5893  * s2io_nic structure.
5894  * @data:variable that returns the result of each of the test conducted by
5895  * the driver.
5896  * Description:
5897  * Verify that EEPROM in the xena can be programmed using I2C_CONTROL
5898  * register.
5899  * Return value:
5900  * 0 on success.
5901  */
5902 
5903 static int s2io_eeprom_test(struct s2io_nic *sp, uint64_t *data)
5904 {
5905 	int fail = 0;
5906 	u64 ret_data, org_4F0, org_7F0;
5907 	u8 saved_4F0 = 0, saved_7F0 = 0;
5908 	struct net_device *dev = sp->dev;
5909 
5910 	/* Test Write Error at offset 0 */
5911 	/* Note that SPI interface allows write access to all areas
5912 	 * of EEPROM. Hence doing all negative testing only for Xframe I.
5913 	 */
5914 	if (sp->device_type == XFRAME_I_DEVICE)
5915 		if (!write_eeprom(sp, 0, 0, 3))
5916 			fail = 1;
5917 
5918 	/* Save current values at offsets 0x4F0 and 0x7F0 */
5919 	if (!read_eeprom(sp, 0x4F0, &org_4F0))
5920 		saved_4F0 = 1;
5921 	if (!read_eeprom(sp, 0x7F0, &org_7F0))
5922 		saved_7F0 = 1;
5923 
5924 	/* Test Write at offset 4f0 */
5925 	if (write_eeprom(sp, 0x4F0, 0x012345, 3))
5926 		fail = 1;
5927 	if (read_eeprom(sp, 0x4F0, &ret_data))
5928 		fail = 1;
5929 
5930 	if (ret_data != 0x012345) {
5931 		DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x4F0. "
5932 			  "Data written %llx Data read %llx\n",
5933 			  dev->name, (unsigned long long)0x12345,
5934 			  (unsigned long long)ret_data);
5935 		fail = 1;
5936 	}
5937 
5938 	/* Reset the EEPROM data go FFFF */
5939 	write_eeprom(sp, 0x4F0, 0xFFFFFF, 3);
5940 
5941 	/* Test Write Request Error at offset 0x7c */
5942 	if (sp->device_type == XFRAME_I_DEVICE)
5943 		if (!write_eeprom(sp, 0x07C, 0, 3))
5944 			fail = 1;
5945 
5946 	/* Test Write Request at offset 0x7f0 */
5947 	if (write_eeprom(sp, 0x7F0, 0x012345, 3))
5948 		fail = 1;
5949 	if (read_eeprom(sp, 0x7F0, &ret_data))
5950 		fail = 1;
5951 
5952 	if (ret_data != 0x012345) {
5953 		DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x7F0. "
5954 			  "Data written %llx Data read %llx\n",
5955 			  dev->name, (unsigned long long)0x12345,
5956 			  (unsigned long long)ret_data);
5957 		fail = 1;
5958 	}
5959 
5960 	/* Reset the EEPROM data go FFFF */
5961 	write_eeprom(sp, 0x7F0, 0xFFFFFF, 3);
5962 
5963 	if (sp->device_type == XFRAME_I_DEVICE) {
5964 		/* Test Write Error at offset 0x80 */
5965 		if (!write_eeprom(sp, 0x080, 0, 3))
5966 			fail = 1;
5967 
5968 		/* Test Write Error at offset 0xfc */
5969 		if (!write_eeprom(sp, 0x0FC, 0, 3))
5970 			fail = 1;
5971 
5972 		/* Test Write Error at offset 0x100 */
5973 		if (!write_eeprom(sp, 0x100, 0, 3))
5974 			fail = 1;
5975 
5976 		/* Test Write Error at offset 4ec */
5977 		if (!write_eeprom(sp, 0x4EC, 0, 3))
5978 			fail = 1;
5979 	}
5980 
5981 	/* Restore values at offsets 0x4F0 and 0x7F0 */
5982 	if (saved_4F0)
5983 		write_eeprom(sp, 0x4F0, org_4F0, 3);
5984 	if (saved_7F0)
5985 		write_eeprom(sp, 0x7F0, org_7F0, 3);
5986 
5987 	*data = fail;
5988 	return fail;
5989 }
5990 
5991 /**
5992  * s2io_bist_test - invokes the MemBist test of the card .
5993  * @sp : private member of the device structure, which is a pointer to the
5994  * s2io_nic structure.
5995  * @data:variable that returns the result of each of the test conducted by
5996  * the driver.
5997  * Description:
5998  * This invokes the MemBist test of the card. We give around
5999  * 2 secs time for the Test to complete. If it's still not complete
6000  * within this peiod, we consider that the test failed.
6001  * Return value:
6002  * 0 on success and -1 on failure.
6003  */
6004 
6005 static int s2io_bist_test(struct s2io_nic *sp, uint64_t *data)
6006 {
6007 	u8 bist = 0;
6008 	int cnt = 0, ret = -1;
6009 
6010 	pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6011 	bist |= PCI_BIST_START;
6012 	pci_write_config_word(sp->pdev, PCI_BIST, bist);
6013 
6014 	while (cnt < 20) {
6015 		pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6016 		if (!(bist & PCI_BIST_START)) {
6017 			*data = (bist & PCI_BIST_CODE_MASK);
6018 			ret = 0;
6019 			break;
6020 		}
6021 		msleep(100);
6022 		cnt++;
6023 	}
6024 
6025 	return ret;
6026 }
6027 
6028 /**
6029  * s2io_link_test - verifies the link state of the nic
6030  * @sp ; private member of the device structure, which is a pointer to the
6031  * s2io_nic structure.
6032  * @data: variable that returns the result of each of the test conducted by
6033  * the driver.
6034  * Description:
6035  * The function verifies the link state of the NIC and updates the input
6036  * argument 'data' appropriately.
6037  * Return value:
6038  * 0 on success.
6039  */
6040 
6041 static int s2io_link_test(struct s2io_nic *sp, uint64_t *data)
6042 {
6043 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
6044 	u64 val64;
6045 
6046 	val64 = readq(&bar0->adapter_status);
6047 	if (!(LINK_IS_UP(val64)))
6048 		*data = 1;
6049 	else
6050 		*data = 0;
6051 
6052 	return *data;
6053 }
6054 
6055 /**
6056  * s2io_rldram_test - offline test for access to the RldRam chip on the NIC
6057  * @sp: private member of the device structure, which is a pointer to the
6058  * s2io_nic structure.
6059  * @data: variable that returns the result of each of the test
6060  * conducted by the driver.
6061  * Description:
6062  *  This is one of the offline test that tests the read and write
6063  *  access to the RldRam chip on the NIC.
6064  * Return value:
6065  *  0 on success.
6066  */
6067 
6068 static int s2io_rldram_test(struct s2io_nic *sp, uint64_t *data)
6069 {
6070 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
6071 	u64 val64;
6072 	int cnt, iteration = 0, test_fail = 0;
6073 
6074 	val64 = readq(&bar0->adapter_control);
6075 	val64 &= ~ADAPTER_ECC_EN;
6076 	writeq(val64, &bar0->adapter_control);
6077 
6078 	val64 = readq(&bar0->mc_rldram_test_ctrl);
6079 	val64 |= MC_RLDRAM_TEST_MODE;
6080 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6081 
6082 	val64 = readq(&bar0->mc_rldram_mrs);
6083 	val64 |= MC_RLDRAM_QUEUE_SIZE_ENABLE;
6084 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6085 
6086 	val64 |= MC_RLDRAM_MRS_ENABLE;
6087 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6088 
6089 	while (iteration < 2) {
6090 		val64 = 0x55555555aaaa0000ULL;
6091 		if (iteration == 1)
6092 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6093 		writeq(val64, &bar0->mc_rldram_test_d0);
6094 
6095 		val64 = 0xaaaa5a5555550000ULL;
6096 		if (iteration == 1)
6097 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6098 		writeq(val64, &bar0->mc_rldram_test_d1);
6099 
6100 		val64 = 0x55aaaaaaaa5a0000ULL;
6101 		if (iteration == 1)
6102 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6103 		writeq(val64, &bar0->mc_rldram_test_d2);
6104 
6105 		val64 = (u64) (0x0000003ffffe0100ULL);
6106 		writeq(val64, &bar0->mc_rldram_test_add);
6107 
6108 		val64 = MC_RLDRAM_TEST_MODE |
6109 			MC_RLDRAM_TEST_WRITE |
6110 			MC_RLDRAM_TEST_GO;
6111 		SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6112 
6113 		for (cnt = 0; cnt < 5; cnt++) {
6114 			val64 = readq(&bar0->mc_rldram_test_ctrl);
6115 			if (val64 & MC_RLDRAM_TEST_DONE)
6116 				break;
6117 			msleep(200);
6118 		}
6119 
6120 		if (cnt == 5)
6121 			break;
6122 
6123 		val64 = MC_RLDRAM_TEST_MODE | MC_RLDRAM_TEST_GO;
6124 		SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6125 
6126 		for (cnt = 0; cnt < 5; cnt++) {
6127 			val64 = readq(&bar0->mc_rldram_test_ctrl);
6128 			if (val64 & MC_RLDRAM_TEST_DONE)
6129 				break;
6130 			msleep(500);
6131 		}
6132 
6133 		if (cnt == 5)
6134 			break;
6135 
6136 		val64 = readq(&bar0->mc_rldram_test_ctrl);
6137 		if (!(val64 & MC_RLDRAM_TEST_PASS))
6138 			test_fail = 1;
6139 
6140 		iteration++;
6141 	}
6142 
6143 	*data = test_fail;
6144 
6145 	/* Bring the adapter out of test mode */
6146 	SPECIAL_REG_WRITE(0, &bar0->mc_rldram_test_ctrl, LF);
6147 
6148 	return test_fail;
6149 }
6150 
6151 /**
6152  *  s2io_ethtool_test - conducts 6 tsets to determine the health of card.
6153  *  @sp : private member of the device structure, which is a pointer to the
6154  *  s2io_nic structure.
6155  *  @ethtest : pointer to a ethtool command specific structure that will be
6156  *  returned to the user.
6157  *  @data : variable that returns the result of each of the test
6158  * conducted by the driver.
6159  * Description:
6160  *  This function conducts 6 tests ( 4 offline and 2 online) to determine
6161  *  the health of the card.
6162  * Return value:
6163  *  void
6164  */
6165 
6166 static void s2io_ethtool_test(struct net_device *dev,
6167 			      struct ethtool_test *ethtest,
6168 			      uint64_t *data)
6169 {
6170 	struct s2io_nic *sp = netdev_priv(dev);
6171 	int orig_state = netif_running(sp->dev);
6172 
6173 	if (ethtest->flags == ETH_TEST_FL_OFFLINE) {
6174 		/* Offline Tests. */
6175 		if (orig_state)
6176 			s2io_close(sp->dev);
6177 
6178 		if (s2io_register_test(sp, &data[0]))
6179 			ethtest->flags |= ETH_TEST_FL_FAILED;
6180 
6181 		s2io_reset(sp);
6182 
6183 		if (s2io_rldram_test(sp, &data[3]))
6184 			ethtest->flags |= ETH_TEST_FL_FAILED;
6185 
6186 		s2io_reset(sp);
6187 
6188 		if (s2io_eeprom_test(sp, &data[1]))
6189 			ethtest->flags |= ETH_TEST_FL_FAILED;
6190 
6191 		if (s2io_bist_test(sp, &data[4]))
6192 			ethtest->flags |= ETH_TEST_FL_FAILED;
6193 
6194 		if (orig_state)
6195 			s2io_open(sp->dev);
6196 
6197 		data[2] = 0;
6198 	} else {
6199 		/* Online Tests. */
6200 		if (!orig_state) {
6201 			DBG_PRINT(ERR_DBG, "%s: is not up, cannot run test\n",
6202 				  dev->name);
6203 			data[0] = -1;
6204 			data[1] = -1;
6205 			data[2] = -1;
6206 			data[3] = -1;
6207 			data[4] = -1;
6208 		}
6209 
6210 		if (s2io_link_test(sp, &data[2]))
6211 			ethtest->flags |= ETH_TEST_FL_FAILED;
6212 
6213 		data[0] = 0;
6214 		data[1] = 0;
6215 		data[3] = 0;
6216 		data[4] = 0;
6217 	}
6218 }
6219 
6220 static void s2io_get_ethtool_stats(struct net_device *dev,
6221 				   struct ethtool_stats *estats,
6222 				   u64 *tmp_stats)
6223 {
6224 	int i = 0, k;
6225 	struct s2io_nic *sp = netdev_priv(dev);
6226 	struct stat_block *stats = sp->mac_control.stats_info;
6227 	struct swStat *swstats = &stats->sw_stat;
6228 	struct xpakStat *xstats = &stats->xpak_stat;
6229 
6230 	s2io_updt_stats(sp);
6231 	tmp_stats[i++] =
6232 		(u64)le32_to_cpu(stats->tmac_frms_oflow) << 32  |
6233 		le32_to_cpu(stats->tmac_frms);
6234 	tmp_stats[i++] =
6235 		(u64)le32_to_cpu(stats->tmac_data_octets_oflow) << 32 |
6236 		le32_to_cpu(stats->tmac_data_octets);
6237 	tmp_stats[i++] = le64_to_cpu(stats->tmac_drop_frms);
6238 	tmp_stats[i++] =
6239 		(u64)le32_to_cpu(stats->tmac_mcst_frms_oflow) << 32 |
6240 		le32_to_cpu(stats->tmac_mcst_frms);
6241 	tmp_stats[i++] =
6242 		(u64)le32_to_cpu(stats->tmac_bcst_frms_oflow) << 32 |
6243 		le32_to_cpu(stats->tmac_bcst_frms);
6244 	tmp_stats[i++] = le64_to_cpu(stats->tmac_pause_ctrl_frms);
6245 	tmp_stats[i++] =
6246 		(u64)le32_to_cpu(stats->tmac_ttl_octets_oflow) << 32 |
6247 		le32_to_cpu(stats->tmac_ttl_octets);
6248 	tmp_stats[i++] =
6249 		(u64)le32_to_cpu(stats->tmac_ucst_frms_oflow) << 32 |
6250 		le32_to_cpu(stats->tmac_ucst_frms);
6251 	tmp_stats[i++] =
6252 		(u64)le32_to_cpu(stats->tmac_nucst_frms_oflow) << 32 |
6253 		le32_to_cpu(stats->tmac_nucst_frms);
6254 	tmp_stats[i++] =
6255 		(u64)le32_to_cpu(stats->tmac_any_err_frms_oflow) << 32 |
6256 		le32_to_cpu(stats->tmac_any_err_frms);
6257 	tmp_stats[i++] = le64_to_cpu(stats->tmac_ttl_less_fb_octets);
6258 	tmp_stats[i++] = le64_to_cpu(stats->tmac_vld_ip_octets);
6259 	tmp_stats[i++] =
6260 		(u64)le32_to_cpu(stats->tmac_vld_ip_oflow) << 32 |
6261 		le32_to_cpu(stats->tmac_vld_ip);
6262 	tmp_stats[i++] =
6263 		(u64)le32_to_cpu(stats->tmac_drop_ip_oflow) << 32 |
6264 		le32_to_cpu(stats->tmac_drop_ip);
6265 	tmp_stats[i++] =
6266 		(u64)le32_to_cpu(stats->tmac_icmp_oflow) << 32 |
6267 		le32_to_cpu(stats->tmac_icmp);
6268 	tmp_stats[i++] =
6269 		(u64)le32_to_cpu(stats->tmac_rst_tcp_oflow) << 32 |
6270 		le32_to_cpu(stats->tmac_rst_tcp);
6271 	tmp_stats[i++] = le64_to_cpu(stats->tmac_tcp);
6272 	tmp_stats[i++] = (u64)le32_to_cpu(stats->tmac_udp_oflow) << 32 |
6273 		le32_to_cpu(stats->tmac_udp);
6274 	tmp_stats[i++] =
6275 		(u64)le32_to_cpu(stats->rmac_vld_frms_oflow) << 32 |
6276 		le32_to_cpu(stats->rmac_vld_frms);
6277 	tmp_stats[i++] =
6278 		(u64)le32_to_cpu(stats->rmac_data_octets_oflow) << 32 |
6279 		le32_to_cpu(stats->rmac_data_octets);
6280 	tmp_stats[i++] = le64_to_cpu(stats->rmac_fcs_err_frms);
6281 	tmp_stats[i++] = le64_to_cpu(stats->rmac_drop_frms);
6282 	tmp_stats[i++] =
6283 		(u64)le32_to_cpu(stats->rmac_vld_mcst_frms_oflow) << 32 |
6284 		le32_to_cpu(stats->rmac_vld_mcst_frms);
6285 	tmp_stats[i++] =
6286 		(u64)le32_to_cpu(stats->rmac_vld_bcst_frms_oflow) << 32 |
6287 		le32_to_cpu(stats->rmac_vld_bcst_frms);
6288 	tmp_stats[i++] = le32_to_cpu(stats->rmac_in_rng_len_err_frms);
6289 	tmp_stats[i++] = le32_to_cpu(stats->rmac_out_rng_len_err_frms);
6290 	tmp_stats[i++] = le64_to_cpu(stats->rmac_long_frms);
6291 	tmp_stats[i++] = le64_to_cpu(stats->rmac_pause_ctrl_frms);
6292 	tmp_stats[i++] = le64_to_cpu(stats->rmac_unsup_ctrl_frms);
6293 	tmp_stats[i++] =
6294 		(u64)le32_to_cpu(stats->rmac_ttl_octets_oflow) << 32 |
6295 		le32_to_cpu(stats->rmac_ttl_octets);
6296 	tmp_stats[i++] =
6297 		(u64)le32_to_cpu(stats->rmac_accepted_ucst_frms_oflow) << 32
6298 		| le32_to_cpu(stats->rmac_accepted_ucst_frms);
6299 	tmp_stats[i++] =
6300 		(u64)le32_to_cpu(stats->rmac_accepted_nucst_frms_oflow)
6301 		<< 32 | le32_to_cpu(stats->rmac_accepted_nucst_frms);
6302 	tmp_stats[i++] =
6303 		(u64)le32_to_cpu(stats->rmac_discarded_frms_oflow) << 32 |
6304 		le32_to_cpu(stats->rmac_discarded_frms);
6305 	tmp_stats[i++] =
6306 		(u64)le32_to_cpu(stats->rmac_drop_events_oflow)
6307 		<< 32 | le32_to_cpu(stats->rmac_drop_events);
6308 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_less_fb_octets);
6309 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_frms);
6310 	tmp_stats[i++] =
6311 		(u64)le32_to_cpu(stats->rmac_usized_frms_oflow) << 32 |
6312 		le32_to_cpu(stats->rmac_usized_frms);
6313 	tmp_stats[i++] =
6314 		(u64)le32_to_cpu(stats->rmac_osized_frms_oflow) << 32 |
6315 		le32_to_cpu(stats->rmac_osized_frms);
6316 	tmp_stats[i++] =
6317 		(u64)le32_to_cpu(stats->rmac_frag_frms_oflow) << 32 |
6318 		le32_to_cpu(stats->rmac_frag_frms);
6319 	tmp_stats[i++] =
6320 		(u64)le32_to_cpu(stats->rmac_jabber_frms_oflow) << 32 |
6321 		le32_to_cpu(stats->rmac_jabber_frms);
6322 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_64_frms);
6323 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_65_127_frms);
6324 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_128_255_frms);
6325 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_256_511_frms);
6326 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_512_1023_frms);
6327 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_1024_1518_frms);
6328 	tmp_stats[i++] =
6329 		(u64)le32_to_cpu(stats->rmac_ip_oflow) << 32 |
6330 		le32_to_cpu(stats->rmac_ip);
6331 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ip_octets);
6332 	tmp_stats[i++] = le32_to_cpu(stats->rmac_hdr_err_ip);
6333 	tmp_stats[i++] =
6334 		(u64)le32_to_cpu(stats->rmac_drop_ip_oflow) << 32 |
6335 		le32_to_cpu(stats->rmac_drop_ip);
6336 	tmp_stats[i++] =
6337 		(u64)le32_to_cpu(stats->rmac_icmp_oflow) << 32 |
6338 		le32_to_cpu(stats->rmac_icmp);
6339 	tmp_stats[i++] = le64_to_cpu(stats->rmac_tcp);
6340 	tmp_stats[i++] =
6341 		(u64)le32_to_cpu(stats->rmac_udp_oflow) << 32 |
6342 		le32_to_cpu(stats->rmac_udp);
6343 	tmp_stats[i++] =
6344 		(u64)le32_to_cpu(stats->rmac_err_drp_udp_oflow) << 32 |
6345 		le32_to_cpu(stats->rmac_err_drp_udp);
6346 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_err_sym);
6347 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q0);
6348 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q1);
6349 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q2);
6350 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q3);
6351 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q4);
6352 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q5);
6353 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q6);
6354 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q7);
6355 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q0);
6356 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q1);
6357 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q2);
6358 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q3);
6359 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q4);
6360 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q5);
6361 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q6);
6362 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q7);
6363 	tmp_stats[i++] =
6364 		(u64)le32_to_cpu(stats->rmac_pause_cnt_oflow) << 32 |
6365 		le32_to_cpu(stats->rmac_pause_cnt);
6366 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_data_err_cnt);
6367 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_ctrl_err_cnt);
6368 	tmp_stats[i++] =
6369 		(u64)le32_to_cpu(stats->rmac_accepted_ip_oflow) << 32 |
6370 		le32_to_cpu(stats->rmac_accepted_ip);
6371 	tmp_stats[i++] = le32_to_cpu(stats->rmac_err_tcp);
6372 	tmp_stats[i++] = le32_to_cpu(stats->rd_req_cnt);
6373 	tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_cnt);
6374 	tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_rtry_cnt);
6375 	tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_cnt);
6376 	tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_rd_ack_cnt);
6377 	tmp_stats[i++] = le32_to_cpu(stats->wr_req_cnt);
6378 	tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_cnt);
6379 	tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_rtry_cnt);
6380 	tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_cnt);
6381 	tmp_stats[i++] = le32_to_cpu(stats->wr_disc_cnt);
6382 	tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_wr_ack_cnt);
6383 	tmp_stats[i++] = le32_to_cpu(stats->txp_wr_cnt);
6384 	tmp_stats[i++] = le32_to_cpu(stats->txd_rd_cnt);
6385 	tmp_stats[i++] = le32_to_cpu(stats->txd_wr_cnt);
6386 	tmp_stats[i++] = le32_to_cpu(stats->rxd_rd_cnt);
6387 	tmp_stats[i++] = le32_to_cpu(stats->rxd_wr_cnt);
6388 	tmp_stats[i++] = le32_to_cpu(stats->txf_rd_cnt);
6389 	tmp_stats[i++] = le32_to_cpu(stats->rxf_wr_cnt);
6390 
6391 	/* Enhanced statistics exist only for Hercules */
6392 	if (sp->device_type == XFRAME_II_DEVICE) {
6393 		tmp_stats[i++] =
6394 			le64_to_cpu(stats->rmac_ttl_1519_4095_frms);
6395 		tmp_stats[i++] =
6396 			le64_to_cpu(stats->rmac_ttl_4096_8191_frms);
6397 		tmp_stats[i++] =
6398 			le64_to_cpu(stats->rmac_ttl_8192_max_frms);
6399 		tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_gt_max_frms);
6400 		tmp_stats[i++] = le64_to_cpu(stats->rmac_osized_alt_frms);
6401 		tmp_stats[i++] = le64_to_cpu(stats->rmac_jabber_alt_frms);
6402 		tmp_stats[i++] = le64_to_cpu(stats->rmac_gt_max_alt_frms);
6403 		tmp_stats[i++] = le64_to_cpu(stats->rmac_vlan_frms);
6404 		tmp_stats[i++] = le32_to_cpu(stats->rmac_len_discard);
6405 		tmp_stats[i++] = le32_to_cpu(stats->rmac_fcs_discard);
6406 		tmp_stats[i++] = le32_to_cpu(stats->rmac_pf_discard);
6407 		tmp_stats[i++] = le32_to_cpu(stats->rmac_da_discard);
6408 		tmp_stats[i++] = le32_to_cpu(stats->rmac_red_discard);
6409 		tmp_stats[i++] = le32_to_cpu(stats->rmac_rts_discard);
6410 		tmp_stats[i++] = le32_to_cpu(stats->rmac_ingm_full_discard);
6411 		tmp_stats[i++] = le32_to_cpu(stats->link_fault_cnt);
6412 	}
6413 
6414 	tmp_stats[i++] = 0;
6415 	tmp_stats[i++] = swstats->single_ecc_errs;
6416 	tmp_stats[i++] = swstats->double_ecc_errs;
6417 	tmp_stats[i++] = swstats->parity_err_cnt;
6418 	tmp_stats[i++] = swstats->serious_err_cnt;
6419 	tmp_stats[i++] = swstats->soft_reset_cnt;
6420 	tmp_stats[i++] = swstats->fifo_full_cnt;
6421 	for (k = 0; k < MAX_RX_RINGS; k++)
6422 		tmp_stats[i++] = swstats->ring_full_cnt[k];
6423 	tmp_stats[i++] = xstats->alarm_transceiver_temp_high;
6424 	tmp_stats[i++] = xstats->alarm_transceiver_temp_low;
6425 	tmp_stats[i++] = xstats->alarm_laser_bias_current_high;
6426 	tmp_stats[i++] = xstats->alarm_laser_bias_current_low;
6427 	tmp_stats[i++] = xstats->alarm_laser_output_power_high;
6428 	tmp_stats[i++] = xstats->alarm_laser_output_power_low;
6429 	tmp_stats[i++] = xstats->warn_transceiver_temp_high;
6430 	tmp_stats[i++] = xstats->warn_transceiver_temp_low;
6431 	tmp_stats[i++] = xstats->warn_laser_bias_current_high;
6432 	tmp_stats[i++] = xstats->warn_laser_bias_current_low;
6433 	tmp_stats[i++] = xstats->warn_laser_output_power_high;
6434 	tmp_stats[i++] = xstats->warn_laser_output_power_low;
6435 	tmp_stats[i++] = swstats->clubbed_frms_cnt;
6436 	tmp_stats[i++] = swstats->sending_both;
6437 	tmp_stats[i++] = swstats->outof_sequence_pkts;
6438 	tmp_stats[i++] = swstats->flush_max_pkts;
6439 	if (swstats->num_aggregations) {
6440 		u64 tmp = swstats->sum_avg_pkts_aggregated;
6441 		int count = 0;
6442 		/*
6443 		 * Since 64-bit divide does not work on all platforms,
6444 		 * do repeated subtraction.
6445 		 */
6446 		while (tmp >= swstats->num_aggregations) {
6447 			tmp -= swstats->num_aggregations;
6448 			count++;
6449 		}
6450 		tmp_stats[i++] = count;
6451 	} else
6452 		tmp_stats[i++] = 0;
6453 	tmp_stats[i++] = swstats->mem_alloc_fail_cnt;
6454 	tmp_stats[i++] = swstats->pci_map_fail_cnt;
6455 	tmp_stats[i++] = swstats->watchdog_timer_cnt;
6456 	tmp_stats[i++] = swstats->mem_allocated;
6457 	tmp_stats[i++] = swstats->mem_freed;
6458 	tmp_stats[i++] = swstats->link_up_cnt;
6459 	tmp_stats[i++] = swstats->link_down_cnt;
6460 	tmp_stats[i++] = swstats->link_up_time;
6461 	tmp_stats[i++] = swstats->link_down_time;
6462 
6463 	tmp_stats[i++] = swstats->tx_buf_abort_cnt;
6464 	tmp_stats[i++] = swstats->tx_desc_abort_cnt;
6465 	tmp_stats[i++] = swstats->tx_parity_err_cnt;
6466 	tmp_stats[i++] = swstats->tx_link_loss_cnt;
6467 	tmp_stats[i++] = swstats->tx_list_proc_err_cnt;
6468 
6469 	tmp_stats[i++] = swstats->rx_parity_err_cnt;
6470 	tmp_stats[i++] = swstats->rx_abort_cnt;
6471 	tmp_stats[i++] = swstats->rx_parity_abort_cnt;
6472 	tmp_stats[i++] = swstats->rx_rda_fail_cnt;
6473 	tmp_stats[i++] = swstats->rx_unkn_prot_cnt;
6474 	tmp_stats[i++] = swstats->rx_fcs_err_cnt;
6475 	tmp_stats[i++] = swstats->rx_buf_size_err_cnt;
6476 	tmp_stats[i++] = swstats->rx_rxd_corrupt_cnt;
6477 	tmp_stats[i++] = swstats->rx_unkn_err_cnt;
6478 	tmp_stats[i++] = swstats->tda_err_cnt;
6479 	tmp_stats[i++] = swstats->pfc_err_cnt;
6480 	tmp_stats[i++] = swstats->pcc_err_cnt;
6481 	tmp_stats[i++] = swstats->tti_err_cnt;
6482 	tmp_stats[i++] = swstats->tpa_err_cnt;
6483 	tmp_stats[i++] = swstats->sm_err_cnt;
6484 	tmp_stats[i++] = swstats->lso_err_cnt;
6485 	tmp_stats[i++] = swstats->mac_tmac_err_cnt;
6486 	tmp_stats[i++] = swstats->mac_rmac_err_cnt;
6487 	tmp_stats[i++] = swstats->xgxs_txgxs_err_cnt;
6488 	tmp_stats[i++] = swstats->xgxs_rxgxs_err_cnt;
6489 	tmp_stats[i++] = swstats->rc_err_cnt;
6490 	tmp_stats[i++] = swstats->prc_pcix_err_cnt;
6491 	tmp_stats[i++] = swstats->rpa_err_cnt;
6492 	tmp_stats[i++] = swstats->rda_err_cnt;
6493 	tmp_stats[i++] = swstats->rti_err_cnt;
6494 	tmp_stats[i++] = swstats->mc_err_cnt;
6495 }
6496 
6497 static int s2io_ethtool_get_regs_len(struct net_device *dev)
6498 {
6499 	return XENA_REG_SPACE;
6500 }
6501 
6502 
6503 static int s2io_get_eeprom_len(struct net_device *dev)
6504 {
6505 	return XENA_EEPROM_SPACE;
6506 }
6507 
6508 static int s2io_get_sset_count(struct net_device *dev, int sset)
6509 {
6510 	struct s2io_nic *sp = netdev_priv(dev);
6511 
6512 	switch (sset) {
6513 	case ETH_SS_TEST:
6514 		return S2IO_TEST_LEN;
6515 	case ETH_SS_STATS:
6516 		switch (sp->device_type) {
6517 		case XFRAME_I_DEVICE:
6518 			return XFRAME_I_STAT_LEN;
6519 		case XFRAME_II_DEVICE:
6520 			return XFRAME_II_STAT_LEN;
6521 		default:
6522 			return 0;
6523 		}
6524 	default:
6525 		return -EOPNOTSUPP;
6526 	}
6527 }
6528 
6529 static void s2io_ethtool_get_strings(struct net_device *dev,
6530 				     u32 stringset, u8 *data)
6531 {
6532 	int stat_size = 0;
6533 	struct s2io_nic *sp = netdev_priv(dev);
6534 
6535 	switch (stringset) {
6536 	case ETH_SS_TEST:
6537 		memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN);
6538 		break;
6539 	case ETH_SS_STATS:
6540 		stat_size = sizeof(ethtool_xena_stats_keys);
6541 		memcpy(data, &ethtool_xena_stats_keys, stat_size);
6542 		if (sp->device_type == XFRAME_II_DEVICE) {
6543 			memcpy(data + stat_size,
6544 			       &ethtool_enhanced_stats_keys,
6545 			       sizeof(ethtool_enhanced_stats_keys));
6546 			stat_size += sizeof(ethtool_enhanced_stats_keys);
6547 		}
6548 
6549 		memcpy(data + stat_size, &ethtool_driver_stats_keys,
6550 		       sizeof(ethtool_driver_stats_keys));
6551 	}
6552 }
6553 
6554 static int s2io_set_features(struct net_device *dev, netdev_features_t features)
6555 {
6556 	struct s2io_nic *sp = netdev_priv(dev);
6557 	netdev_features_t changed = (features ^ dev->features) & NETIF_F_LRO;
6558 
6559 	if (changed && netif_running(dev)) {
6560 		int rc;
6561 
6562 		s2io_stop_all_tx_queue(sp);
6563 		s2io_card_down(sp);
6564 		dev->features = features;
6565 		rc = s2io_card_up(sp);
6566 		if (rc)
6567 			s2io_reset(sp);
6568 		else
6569 			s2io_start_all_tx_queue(sp);
6570 
6571 		return rc ? rc : 1;
6572 	}
6573 
6574 	return 0;
6575 }
6576 
6577 static const struct ethtool_ops netdev_ethtool_ops = {
6578 	.get_drvinfo = s2io_ethtool_gdrvinfo,
6579 	.get_regs_len = s2io_ethtool_get_regs_len,
6580 	.get_regs = s2io_ethtool_gregs,
6581 	.get_link = ethtool_op_get_link,
6582 	.get_eeprom_len = s2io_get_eeprom_len,
6583 	.get_eeprom = s2io_ethtool_geeprom,
6584 	.set_eeprom = s2io_ethtool_seeprom,
6585 	.get_ringparam = s2io_ethtool_gringparam,
6586 	.get_pauseparam = s2io_ethtool_getpause_data,
6587 	.set_pauseparam = s2io_ethtool_setpause_data,
6588 	.self_test = s2io_ethtool_test,
6589 	.get_strings = s2io_ethtool_get_strings,
6590 	.set_phys_id = s2io_ethtool_set_led,
6591 	.get_ethtool_stats = s2io_get_ethtool_stats,
6592 	.get_sset_count = s2io_get_sset_count,
6593 	.get_link_ksettings = s2io_ethtool_get_link_ksettings,
6594 	.set_link_ksettings = s2io_ethtool_set_link_ksettings,
6595 };
6596 
6597 /**
6598  *  s2io_ioctl - Entry point for the Ioctl
6599  *  @dev :  Device pointer.
6600  *  @ifr :  An IOCTL specefic structure, that can contain a pointer to
6601  *  a proprietary structure used to pass information to the driver.
6602  *  @cmd :  This is used to distinguish between the different commands that
6603  *  can be passed to the IOCTL functions.
6604  *  Description:
6605  *  Currently there are no special functionality supported in IOCTL, hence
6606  *  function always return EOPNOTSUPPORTED
6607  */
6608 
6609 static int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
6610 {
6611 	return -EOPNOTSUPP;
6612 }
6613 
6614 /**
6615  *  s2io_change_mtu - entry point to change MTU size for the device.
6616  *   @dev : device pointer.
6617  *   @new_mtu : the new MTU size for the device.
6618  *   Description: A driver entry point to change MTU size for the device.
6619  *   Before changing the MTU the device must be stopped.
6620  *  Return value:
6621  *   0 on success and an appropriate (-)ve integer as defined in errno.h
6622  *   file on failure.
6623  */
6624 
6625 static int s2io_change_mtu(struct net_device *dev, int new_mtu)
6626 {
6627 	struct s2io_nic *sp = netdev_priv(dev);
6628 	int ret = 0;
6629 
6630 	dev->mtu = new_mtu;
6631 	if (netif_running(dev)) {
6632 		s2io_stop_all_tx_queue(sp);
6633 		s2io_card_down(sp);
6634 		ret = s2io_card_up(sp);
6635 		if (ret) {
6636 			DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n",
6637 				  __func__);
6638 			return ret;
6639 		}
6640 		s2io_wake_all_tx_queue(sp);
6641 	} else { /* Device is down */
6642 		struct XENA_dev_config __iomem *bar0 = sp->bar0;
6643 		u64 val64 = new_mtu;
6644 
6645 		writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
6646 	}
6647 
6648 	return ret;
6649 }
6650 
6651 /**
6652  * s2io_set_link - Set the LInk status
6653  * @data: long pointer to device private structue
6654  * Description: Sets the link status for the adapter
6655  */
6656 
6657 static void s2io_set_link(struct work_struct *work)
6658 {
6659 	struct s2io_nic *nic = container_of(work, struct s2io_nic,
6660 					    set_link_task);
6661 	struct net_device *dev = nic->dev;
6662 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
6663 	register u64 val64;
6664 	u16 subid;
6665 
6666 	rtnl_lock();
6667 
6668 	if (!netif_running(dev))
6669 		goto out_unlock;
6670 
6671 	if (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(nic->state))) {
6672 		/* The card is being reset, no point doing anything */
6673 		goto out_unlock;
6674 	}
6675 
6676 	subid = nic->pdev->subsystem_device;
6677 	if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER) {
6678 		/*
6679 		 * Allow a small delay for the NICs self initiated
6680 		 * cleanup to complete.
6681 		 */
6682 		msleep(100);
6683 	}
6684 
6685 	val64 = readq(&bar0->adapter_status);
6686 	if (LINK_IS_UP(val64)) {
6687 		if (!(readq(&bar0->adapter_control) & ADAPTER_CNTL_EN)) {
6688 			if (verify_xena_quiescence(nic)) {
6689 				val64 = readq(&bar0->adapter_control);
6690 				val64 |= ADAPTER_CNTL_EN;
6691 				writeq(val64, &bar0->adapter_control);
6692 				if (CARDS_WITH_FAULTY_LINK_INDICATORS(
6693 					    nic->device_type, subid)) {
6694 					val64 = readq(&bar0->gpio_control);
6695 					val64 |= GPIO_CTRL_GPIO_0;
6696 					writeq(val64, &bar0->gpio_control);
6697 					val64 = readq(&bar0->gpio_control);
6698 				} else {
6699 					val64 |= ADAPTER_LED_ON;
6700 					writeq(val64, &bar0->adapter_control);
6701 				}
6702 				nic->device_enabled_once = true;
6703 			} else {
6704 				DBG_PRINT(ERR_DBG,
6705 					  "%s: Error: device is not Quiescent\n",
6706 					  dev->name);
6707 				s2io_stop_all_tx_queue(nic);
6708 			}
6709 		}
6710 		val64 = readq(&bar0->adapter_control);
6711 		val64 |= ADAPTER_LED_ON;
6712 		writeq(val64, &bar0->adapter_control);
6713 		s2io_link(nic, LINK_UP);
6714 	} else {
6715 		if (CARDS_WITH_FAULTY_LINK_INDICATORS(nic->device_type,
6716 						      subid)) {
6717 			val64 = readq(&bar0->gpio_control);
6718 			val64 &= ~GPIO_CTRL_GPIO_0;
6719 			writeq(val64, &bar0->gpio_control);
6720 			val64 = readq(&bar0->gpio_control);
6721 		}
6722 		/* turn off LED */
6723 		val64 = readq(&bar0->adapter_control);
6724 		val64 = val64 & (~ADAPTER_LED_ON);
6725 		writeq(val64, &bar0->adapter_control);
6726 		s2io_link(nic, LINK_DOWN);
6727 	}
6728 	clear_bit(__S2IO_STATE_LINK_TASK, &(nic->state));
6729 
6730 out_unlock:
6731 	rtnl_unlock();
6732 }
6733 
6734 static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6735 				  struct buffAdd *ba,
6736 				  struct sk_buff **skb, u64 *temp0, u64 *temp1,
6737 				  u64 *temp2, int size)
6738 {
6739 	struct net_device *dev = sp->dev;
6740 	struct swStat *stats = &sp->mac_control.stats_info->sw_stat;
6741 
6742 	if ((sp->rxd_mode == RXD_MODE_1) && (rxdp->Host_Control == 0)) {
6743 		struct RxD1 *rxdp1 = (struct RxD1 *)rxdp;
6744 		/* allocate skb */
6745 		if (*skb) {
6746 			DBG_PRINT(INFO_DBG, "SKB is not NULL\n");
6747 			/*
6748 			 * As Rx frame are not going to be processed,
6749 			 * using same mapped address for the Rxd
6750 			 * buffer pointer
6751 			 */
6752 			rxdp1->Buffer0_ptr = *temp0;
6753 		} else {
6754 			*skb = netdev_alloc_skb(dev, size);
6755 			if (!(*skb)) {
6756 				DBG_PRINT(INFO_DBG,
6757 					  "%s: Out of memory to allocate %s\n",
6758 					  dev->name, "1 buf mode SKBs");
6759 				stats->mem_alloc_fail_cnt++;
6760 				return -ENOMEM ;
6761 			}
6762 			stats->mem_allocated += (*skb)->truesize;
6763 			/* storing the mapped addr in a temp variable
6764 			 * such it will be used for next rxd whose
6765 			 * Host Control is NULL
6766 			 */
6767 			rxdp1->Buffer0_ptr = *temp0 =
6768 				dma_map_single(&sp->pdev->dev, (*skb)->data,
6769 					       size - NET_IP_ALIGN,
6770 					       DMA_FROM_DEVICE);
6771 			if (dma_mapping_error(&sp->pdev->dev, rxdp1->Buffer0_ptr))
6772 				goto memalloc_failed;
6773 			rxdp->Host_Control = (unsigned long) (*skb);
6774 		}
6775 	} else if ((sp->rxd_mode == RXD_MODE_3B) && (rxdp->Host_Control == 0)) {
6776 		struct RxD3 *rxdp3 = (struct RxD3 *)rxdp;
6777 		/* Two buffer Mode */
6778 		if (*skb) {
6779 			rxdp3->Buffer2_ptr = *temp2;
6780 			rxdp3->Buffer0_ptr = *temp0;
6781 			rxdp3->Buffer1_ptr = *temp1;
6782 		} else {
6783 			*skb = netdev_alloc_skb(dev, size);
6784 			if (!(*skb)) {
6785 				DBG_PRINT(INFO_DBG,
6786 					  "%s: Out of memory to allocate %s\n",
6787 					  dev->name,
6788 					  "2 buf mode SKBs");
6789 				stats->mem_alloc_fail_cnt++;
6790 				return -ENOMEM;
6791 			}
6792 			stats->mem_allocated += (*skb)->truesize;
6793 			rxdp3->Buffer2_ptr = *temp2 =
6794 				dma_map_single(&sp->pdev->dev, (*skb)->data,
6795 					       dev->mtu + 4, DMA_FROM_DEVICE);
6796 			if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer2_ptr))
6797 				goto memalloc_failed;
6798 			rxdp3->Buffer0_ptr = *temp0 =
6799 				dma_map_single(&sp->pdev->dev, ba->ba_0,
6800 					       BUF0_LEN, DMA_FROM_DEVICE);
6801 			if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer0_ptr)) {
6802 				dma_unmap_single(&sp->pdev->dev,
6803 						 (dma_addr_t)rxdp3->Buffer2_ptr,
6804 						 dev->mtu + 4,
6805 						 DMA_FROM_DEVICE);
6806 				goto memalloc_failed;
6807 			}
6808 			rxdp->Host_Control = (unsigned long) (*skb);
6809 
6810 			/* Buffer-1 will be dummy buffer not used */
6811 			rxdp3->Buffer1_ptr = *temp1 =
6812 				dma_map_single(&sp->pdev->dev, ba->ba_1,
6813 					       BUF1_LEN, DMA_FROM_DEVICE);
6814 			if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer1_ptr)) {
6815 				dma_unmap_single(&sp->pdev->dev,
6816 						 (dma_addr_t)rxdp3->Buffer0_ptr,
6817 						 BUF0_LEN, DMA_FROM_DEVICE);
6818 				dma_unmap_single(&sp->pdev->dev,
6819 						 (dma_addr_t)rxdp3->Buffer2_ptr,
6820 						 dev->mtu + 4,
6821 						 DMA_FROM_DEVICE);
6822 				goto memalloc_failed;
6823 			}
6824 		}
6825 	}
6826 	return 0;
6827 
6828 memalloc_failed:
6829 	stats->pci_map_fail_cnt++;
6830 	stats->mem_freed += (*skb)->truesize;
6831 	dev_kfree_skb(*skb);
6832 	return -ENOMEM;
6833 }
6834 
6835 static void set_rxd_buffer_size(struct s2io_nic *sp, struct RxD_t *rxdp,
6836 				int size)
6837 {
6838 	struct net_device *dev = sp->dev;
6839 	if (sp->rxd_mode == RXD_MODE_1) {
6840 		rxdp->Control_2 = SET_BUFFER0_SIZE_1(size - NET_IP_ALIGN);
6841 	} else if (sp->rxd_mode == RXD_MODE_3B) {
6842 		rxdp->Control_2 = SET_BUFFER0_SIZE_3(BUF0_LEN);
6843 		rxdp->Control_2 |= SET_BUFFER1_SIZE_3(1);
6844 		rxdp->Control_2 |= SET_BUFFER2_SIZE_3(dev->mtu + 4);
6845 	}
6846 }
6847 
6848 static  int rxd_owner_bit_reset(struct s2io_nic *sp)
6849 {
6850 	int i, j, k, blk_cnt = 0, size;
6851 	struct config_param *config = &sp->config;
6852 	struct mac_info *mac_control = &sp->mac_control;
6853 	struct net_device *dev = sp->dev;
6854 	struct RxD_t *rxdp = NULL;
6855 	struct sk_buff *skb = NULL;
6856 	struct buffAdd *ba = NULL;
6857 	u64 temp0_64 = 0, temp1_64 = 0, temp2_64 = 0;
6858 
6859 	/* Calculate the size based on ring mode */
6860 	size = dev->mtu + HEADER_ETHERNET_II_802_3_SIZE +
6861 		HEADER_802_2_SIZE + HEADER_SNAP_SIZE;
6862 	if (sp->rxd_mode == RXD_MODE_1)
6863 		size += NET_IP_ALIGN;
6864 	else if (sp->rxd_mode == RXD_MODE_3B)
6865 		size = dev->mtu + ALIGN_SIZE + BUF0_LEN + 4;
6866 
6867 	for (i = 0; i < config->rx_ring_num; i++) {
6868 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
6869 		struct ring_info *ring = &mac_control->rings[i];
6870 
6871 		blk_cnt = rx_cfg->num_rxd / (rxd_count[sp->rxd_mode] + 1);
6872 
6873 		for (j = 0; j < blk_cnt; j++) {
6874 			for (k = 0; k < rxd_count[sp->rxd_mode]; k++) {
6875 				rxdp = ring->rx_blocks[j].rxds[k].virt_addr;
6876 				if (sp->rxd_mode == RXD_MODE_3B)
6877 					ba = &ring->ba[j][k];
6878 				if (set_rxd_buffer_pointer(sp, rxdp, ba, &skb,
6879 							   &temp0_64,
6880 							   &temp1_64,
6881 							   &temp2_64,
6882 							   size) == -ENOMEM) {
6883 					return 0;
6884 				}
6885 
6886 				set_rxd_buffer_size(sp, rxdp, size);
6887 				dma_wmb();
6888 				/* flip the Ownership bit to Hardware */
6889 				rxdp->Control_1 |= RXD_OWN_XENA;
6890 			}
6891 		}
6892 	}
6893 	return 0;
6894 
6895 }
6896 
6897 static int s2io_add_isr(struct s2io_nic *sp)
6898 {
6899 	int ret = 0;
6900 	struct net_device *dev = sp->dev;
6901 	int err = 0;
6902 
6903 	if (sp->config.intr_type == MSI_X)
6904 		ret = s2io_enable_msi_x(sp);
6905 	if (ret) {
6906 		DBG_PRINT(ERR_DBG, "%s: Defaulting to INTA\n", dev->name);
6907 		sp->config.intr_type = INTA;
6908 	}
6909 
6910 	/*
6911 	 * Store the values of the MSIX table in
6912 	 * the struct s2io_nic structure
6913 	 */
6914 	store_xmsi_data(sp);
6915 
6916 	/* After proper initialization of H/W, register ISR */
6917 	if (sp->config.intr_type == MSI_X) {
6918 		int i, msix_rx_cnt = 0;
6919 
6920 		for (i = 0; i < sp->num_entries; i++) {
6921 			if (sp->s2io_entries[i].in_use == MSIX_FLG) {
6922 				if (sp->s2io_entries[i].type ==
6923 				    MSIX_RING_TYPE) {
6924 					snprintf(sp->desc[i],
6925 						sizeof(sp->desc[i]),
6926 						"%s:MSI-X-%d-RX",
6927 						dev->name, i);
6928 					err = request_irq(sp->entries[i].vector,
6929 							  s2io_msix_ring_handle,
6930 							  0,
6931 							  sp->desc[i],
6932 							  sp->s2io_entries[i].arg);
6933 				} else if (sp->s2io_entries[i].type ==
6934 					   MSIX_ALARM_TYPE) {
6935 					snprintf(sp->desc[i],
6936 						sizeof(sp->desc[i]),
6937 						"%s:MSI-X-%d-TX",
6938 						dev->name, i);
6939 					err = request_irq(sp->entries[i].vector,
6940 							  s2io_msix_fifo_handle,
6941 							  0,
6942 							  sp->desc[i],
6943 							  sp->s2io_entries[i].arg);
6944 
6945 				}
6946 				/* if either data or addr is zero print it. */
6947 				if (!(sp->msix_info[i].addr &&
6948 				      sp->msix_info[i].data)) {
6949 					DBG_PRINT(ERR_DBG,
6950 						  "%s @Addr:0x%llx Data:0x%llx\n",
6951 						  sp->desc[i],
6952 						  (unsigned long long)
6953 						  sp->msix_info[i].addr,
6954 						  (unsigned long long)
6955 						  ntohl(sp->msix_info[i].data));
6956 				} else
6957 					msix_rx_cnt++;
6958 				if (err) {
6959 					remove_msix_isr(sp);
6960 
6961 					DBG_PRINT(ERR_DBG,
6962 						  "%s:MSI-X-%d registration "
6963 						  "failed\n", dev->name, i);
6964 
6965 					DBG_PRINT(ERR_DBG,
6966 						  "%s: Defaulting to INTA\n",
6967 						  dev->name);
6968 					sp->config.intr_type = INTA;
6969 					break;
6970 				}
6971 				sp->s2io_entries[i].in_use =
6972 					MSIX_REGISTERED_SUCCESS;
6973 			}
6974 		}
6975 		if (!err) {
6976 			pr_info("MSI-X-RX %d entries enabled\n", --msix_rx_cnt);
6977 			DBG_PRINT(INFO_DBG,
6978 				  "MSI-X-TX entries enabled through alarm vector\n");
6979 		}
6980 	}
6981 	if (sp->config.intr_type == INTA) {
6982 		err = request_irq(sp->pdev->irq, s2io_isr, IRQF_SHARED,
6983 				  sp->name, dev);
6984 		if (err) {
6985 			DBG_PRINT(ERR_DBG, "%s: ISR registration failed\n",
6986 				  dev->name);
6987 			return -1;
6988 		}
6989 	}
6990 	return 0;
6991 }
6992 
6993 static void s2io_rem_isr(struct s2io_nic *sp)
6994 {
6995 	if (sp->config.intr_type == MSI_X)
6996 		remove_msix_isr(sp);
6997 	else
6998 		remove_inta_isr(sp);
6999 }
7000 
7001 static void do_s2io_card_down(struct s2io_nic *sp, int do_io)
7002 {
7003 	int cnt = 0;
7004 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
7005 	register u64 val64 = 0;
7006 	struct config_param *config;
7007 	config = &sp->config;
7008 
7009 	if (!is_s2io_card_up(sp))
7010 		return;
7011 
7012 	del_timer_sync(&sp->alarm_timer);
7013 	/* If s2io_set_link task is executing, wait till it completes. */
7014 	while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state)))
7015 		msleep(50);
7016 	clear_bit(__S2IO_STATE_CARD_UP, &sp->state);
7017 
7018 	/* Disable napi */
7019 	if (sp->config.napi) {
7020 		int off = 0;
7021 		if (config->intr_type ==  MSI_X) {
7022 			for (; off < sp->config.rx_ring_num; off++)
7023 				napi_disable(&sp->mac_control.rings[off].napi);
7024 		}
7025 		else
7026 			napi_disable(&sp->napi);
7027 	}
7028 
7029 	/* disable Tx and Rx traffic on the NIC */
7030 	if (do_io)
7031 		stop_nic(sp);
7032 
7033 	s2io_rem_isr(sp);
7034 
7035 	/* stop the tx queue, indicate link down */
7036 	s2io_link(sp, LINK_DOWN);
7037 
7038 	/* Check if the device is Quiescent and then Reset the NIC */
7039 	while (do_io) {
7040 		/* As per the HW requirement we need to replenish the
7041 		 * receive buffer to avoid the ring bump. Since there is
7042 		 * no intention of processing the Rx frame at this pointwe are
7043 		 * just setting the ownership bit of rxd in Each Rx
7044 		 * ring to HW and set the appropriate buffer size
7045 		 * based on the ring mode
7046 		 */
7047 		rxd_owner_bit_reset(sp);
7048 
7049 		val64 = readq(&bar0->adapter_status);
7050 		if (verify_xena_quiescence(sp)) {
7051 			if (verify_pcc_quiescent(sp, sp->device_enabled_once))
7052 				break;
7053 		}
7054 
7055 		msleep(50);
7056 		cnt++;
7057 		if (cnt == 10) {
7058 			DBG_PRINT(ERR_DBG, "Device not Quiescent - "
7059 				  "adapter status reads 0x%llx\n",
7060 				  (unsigned long long)val64);
7061 			break;
7062 		}
7063 	}
7064 	if (do_io)
7065 		s2io_reset(sp);
7066 
7067 	/* Free all Tx buffers */
7068 	free_tx_buffers(sp);
7069 
7070 	/* Free all Rx buffers */
7071 	free_rx_buffers(sp);
7072 
7073 	clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state));
7074 }
7075 
7076 static void s2io_card_down(struct s2io_nic *sp)
7077 {
7078 	do_s2io_card_down(sp, 1);
7079 }
7080 
7081 static int s2io_card_up(struct s2io_nic *sp)
7082 {
7083 	int i, ret = 0;
7084 	struct config_param *config;
7085 	struct mac_info *mac_control;
7086 	struct net_device *dev = sp->dev;
7087 	u16 interruptible;
7088 
7089 	/* Initialize the H/W I/O registers */
7090 	ret = init_nic(sp);
7091 	if (ret != 0) {
7092 		DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
7093 			  dev->name);
7094 		if (ret != -EIO)
7095 			s2io_reset(sp);
7096 		return ret;
7097 	}
7098 
7099 	/*
7100 	 * Initializing the Rx buffers. For now we are considering only 1
7101 	 * Rx ring and initializing buffers into 30 Rx blocks
7102 	 */
7103 	config = &sp->config;
7104 	mac_control = &sp->mac_control;
7105 
7106 	for (i = 0; i < config->rx_ring_num; i++) {
7107 		struct ring_info *ring = &mac_control->rings[i];
7108 
7109 		ring->mtu = dev->mtu;
7110 		ring->lro = !!(dev->features & NETIF_F_LRO);
7111 		ret = fill_rx_buffers(sp, ring, 1);
7112 		if (ret) {
7113 			DBG_PRINT(ERR_DBG, "%s: Out of memory in Open\n",
7114 				  dev->name);
7115 			s2io_reset(sp);
7116 			free_rx_buffers(sp);
7117 			return -ENOMEM;
7118 		}
7119 		DBG_PRINT(INFO_DBG, "Buf in ring:%d is %d:\n", i,
7120 			  ring->rx_bufs_left);
7121 	}
7122 
7123 	/* Initialise napi */
7124 	if (config->napi) {
7125 		if (config->intr_type ==  MSI_X) {
7126 			for (i = 0; i < sp->config.rx_ring_num; i++)
7127 				napi_enable(&sp->mac_control.rings[i].napi);
7128 		} else {
7129 			napi_enable(&sp->napi);
7130 		}
7131 	}
7132 
7133 	/* Maintain the state prior to the open */
7134 	if (sp->promisc_flg)
7135 		sp->promisc_flg = 0;
7136 	if (sp->m_cast_flg) {
7137 		sp->m_cast_flg = 0;
7138 		sp->all_multi_pos = 0;
7139 	}
7140 
7141 	/* Setting its receive mode */
7142 	s2io_set_multicast(dev);
7143 
7144 	if (dev->features & NETIF_F_LRO) {
7145 		/* Initialize max aggregatable pkts per session based on MTU */
7146 		sp->lro_max_aggr_per_sess = ((1<<16) - 1) / dev->mtu;
7147 		/* Check if we can use (if specified) user provided value */
7148 		if (lro_max_pkts < sp->lro_max_aggr_per_sess)
7149 			sp->lro_max_aggr_per_sess = lro_max_pkts;
7150 	}
7151 
7152 	/* Enable Rx Traffic and interrupts on the NIC */
7153 	if (start_nic(sp)) {
7154 		DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name);
7155 		s2io_reset(sp);
7156 		free_rx_buffers(sp);
7157 		return -ENODEV;
7158 	}
7159 
7160 	/* Add interrupt service routine */
7161 	if (s2io_add_isr(sp) != 0) {
7162 		if (sp->config.intr_type == MSI_X)
7163 			s2io_rem_isr(sp);
7164 		s2io_reset(sp);
7165 		free_rx_buffers(sp);
7166 		return -ENODEV;
7167 	}
7168 
7169 	timer_setup(&sp->alarm_timer, s2io_alarm_handle, 0);
7170 	mod_timer(&sp->alarm_timer, jiffies + HZ / 2);
7171 
7172 	set_bit(__S2IO_STATE_CARD_UP, &sp->state);
7173 
7174 	/*  Enable select interrupts */
7175 	en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS);
7176 	if (sp->config.intr_type != INTA) {
7177 		interruptible = TX_TRAFFIC_INTR | TX_PIC_INTR;
7178 		en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7179 	} else {
7180 		interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR;
7181 		interruptible |= TX_PIC_INTR;
7182 		en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7183 	}
7184 
7185 	return 0;
7186 }
7187 
7188 /**
7189  * s2io_restart_nic - Resets the NIC.
7190  * @data : long pointer to the device private structure
7191  * Description:
7192  * This function is scheduled to be run by the s2io_tx_watchdog
7193  * function after 0.5 secs to reset the NIC. The idea is to reduce
7194  * the run time of the watch dog routine which is run holding a
7195  * spin lock.
7196  */
7197 
7198 static void s2io_restart_nic(struct work_struct *work)
7199 {
7200 	struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task);
7201 	struct net_device *dev = sp->dev;
7202 
7203 	rtnl_lock();
7204 
7205 	if (!netif_running(dev))
7206 		goto out_unlock;
7207 
7208 	s2io_card_down(sp);
7209 	if (s2io_card_up(sp)) {
7210 		DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", dev->name);
7211 	}
7212 	s2io_wake_all_tx_queue(sp);
7213 	DBG_PRINT(ERR_DBG, "%s: was reset by Tx watchdog timer\n", dev->name);
7214 out_unlock:
7215 	rtnl_unlock();
7216 }
7217 
7218 /**
7219  *  s2io_tx_watchdog - Watchdog for transmit side.
7220  *  @dev : Pointer to net device structure
7221  *  Description:
7222  *  This function is triggered if the Tx Queue is stopped
7223  *  for a pre-defined amount of time when the Interface is still up.
7224  *  If the Interface is jammed in such a situation, the hardware is
7225  *  reset (by s2io_close) and restarted again (by s2io_open) to
7226  *  overcome any problem that might have been caused in the hardware.
7227  *  Return value:
7228  *  void
7229  */
7230 
7231 static void s2io_tx_watchdog(struct net_device *dev, unsigned int txqueue)
7232 {
7233 	struct s2io_nic *sp = netdev_priv(dev);
7234 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7235 
7236 	if (netif_carrier_ok(dev)) {
7237 		swstats->watchdog_timer_cnt++;
7238 		schedule_work(&sp->rst_timer_task);
7239 		swstats->soft_reset_cnt++;
7240 	}
7241 }
7242 
7243 /**
7244  *   rx_osm_handler - To perform some OS related operations on SKB.
7245  *   @sp: private member of the device structure,pointer to s2io_nic structure.
7246  *   @skb : the socket buffer pointer.
7247  *   @len : length of the packet
7248  *   @cksum : FCS checksum of the frame.
7249  *   @ring_no : the ring from which this RxD was extracted.
7250  *   Description:
7251  *   This function is called by the Rx interrupt serivce routine to perform
7252  *   some OS related operations on the SKB before passing it to the upper
7253  *   layers. It mainly checks if the checksum is OK, if so adds it to the
7254  *   SKBs cksum variable, increments the Rx packet count and passes the SKB
7255  *   to the upper layer. If the checksum is wrong, it increments the Rx
7256  *   packet error count, frees the SKB and returns error.
7257  *   Return value:
7258  *   SUCCESS on success and -1 on failure.
7259  */
7260 static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
7261 {
7262 	struct s2io_nic *sp = ring_data->nic;
7263 	struct net_device *dev = ring_data->dev;
7264 	struct sk_buff *skb = (struct sk_buff *)
7265 		((unsigned long)rxdp->Host_Control);
7266 	int ring_no = ring_data->ring_no;
7267 	u16 l3_csum, l4_csum;
7268 	unsigned long long err = rxdp->Control_1 & RXD_T_CODE;
7269 	struct lro *lro;
7270 	u8 err_mask;
7271 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7272 
7273 	skb->dev = dev;
7274 
7275 	if (err) {
7276 		/* Check for parity error */
7277 		if (err & 0x1)
7278 			swstats->parity_err_cnt++;
7279 
7280 		err_mask = err >> 48;
7281 		switch (err_mask) {
7282 		case 1:
7283 			swstats->rx_parity_err_cnt++;
7284 			break;
7285 
7286 		case 2:
7287 			swstats->rx_abort_cnt++;
7288 			break;
7289 
7290 		case 3:
7291 			swstats->rx_parity_abort_cnt++;
7292 			break;
7293 
7294 		case 4:
7295 			swstats->rx_rda_fail_cnt++;
7296 			break;
7297 
7298 		case 5:
7299 			swstats->rx_unkn_prot_cnt++;
7300 			break;
7301 
7302 		case 6:
7303 			swstats->rx_fcs_err_cnt++;
7304 			break;
7305 
7306 		case 7:
7307 			swstats->rx_buf_size_err_cnt++;
7308 			break;
7309 
7310 		case 8:
7311 			swstats->rx_rxd_corrupt_cnt++;
7312 			break;
7313 
7314 		case 15:
7315 			swstats->rx_unkn_err_cnt++;
7316 			break;
7317 		}
7318 		/*
7319 		 * Drop the packet if bad transfer code. Exception being
7320 		 * 0x5, which could be due to unsupported IPv6 extension header.
7321 		 * In this case, we let stack handle the packet.
7322 		 * Note that in this case, since checksum will be incorrect,
7323 		 * stack will validate the same.
7324 		 */
7325 		if (err_mask != 0x5) {
7326 			DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%x\n",
7327 				  dev->name, err_mask);
7328 			dev->stats.rx_crc_errors++;
7329 			swstats->mem_freed
7330 				+= skb->truesize;
7331 			dev_kfree_skb(skb);
7332 			ring_data->rx_bufs_left -= 1;
7333 			rxdp->Host_Control = 0;
7334 			return 0;
7335 		}
7336 	}
7337 
7338 	rxdp->Host_Control = 0;
7339 	if (sp->rxd_mode == RXD_MODE_1) {
7340 		int len = RXD_GET_BUFFER0_SIZE_1(rxdp->Control_2);
7341 
7342 		skb_put(skb, len);
7343 	} else if (sp->rxd_mode == RXD_MODE_3B) {
7344 		int get_block = ring_data->rx_curr_get_info.block_index;
7345 		int get_off = ring_data->rx_curr_get_info.offset;
7346 		int buf0_len = RXD_GET_BUFFER0_SIZE_3(rxdp->Control_2);
7347 		int buf2_len = RXD_GET_BUFFER2_SIZE_3(rxdp->Control_2);
7348 		unsigned char *buff = skb_push(skb, buf0_len);
7349 
7350 		struct buffAdd *ba = &ring_data->ba[get_block][get_off];
7351 		memcpy(buff, ba->ba_0, buf0_len);
7352 		skb_put(skb, buf2_len);
7353 	}
7354 
7355 	if ((rxdp->Control_1 & TCP_OR_UDP_FRAME) &&
7356 	    ((!ring_data->lro) ||
7357 	     (!(rxdp->Control_1 & RXD_FRAME_IP_FRAG))) &&
7358 	    (dev->features & NETIF_F_RXCSUM)) {
7359 		l3_csum = RXD_GET_L3_CKSUM(rxdp->Control_1);
7360 		l4_csum = RXD_GET_L4_CKSUM(rxdp->Control_1);
7361 		if ((l3_csum == L3_CKSUM_OK) && (l4_csum == L4_CKSUM_OK)) {
7362 			/*
7363 			 * NIC verifies if the Checksum of the received
7364 			 * frame is Ok or not and accordingly returns
7365 			 * a flag in the RxD.
7366 			 */
7367 			skb->ip_summed = CHECKSUM_UNNECESSARY;
7368 			if (ring_data->lro) {
7369 				u32 tcp_len = 0;
7370 				u8 *tcp;
7371 				int ret = 0;
7372 
7373 				ret = s2io_club_tcp_session(ring_data,
7374 							    skb->data, &tcp,
7375 							    &tcp_len, &lro,
7376 							    rxdp, sp);
7377 				switch (ret) {
7378 				case 3: /* Begin anew */
7379 					lro->parent = skb;
7380 					goto aggregate;
7381 				case 1: /* Aggregate */
7382 					lro_append_pkt(sp, lro, skb, tcp_len);
7383 					goto aggregate;
7384 				case 4: /* Flush session */
7385 					lro_append_pkt(sp, lro, skb, tcp_len);
7386 					queue_rx_frame(lro->parent,
7387 						       lro->vlan_tag);
7388 					clear_lro_session(lro);
7389 					swstats->flush_max_pkts++;
7390 					goto aggregate;
7391 				case 2: /* Flush both */
7392 					lro->parent->data_len = lro->frags_len;
7393 					swstats->sending_both++;
7394 					queue_rx_frame(lro->parent,
7395 						       lro->vlan_tag);
7396 					clear_lro_session(lro);
7397 					goto send_up;
7398 				case 0: /* sessions exceeded */
7399 				case -1: /* non-TCP or not L2 aggregatable */
7400 				case 5: /*
7401 					 * First pkt in session not
7402 					 * L3/L4 aggregatable
7403 					 */
7404 					break;
7405 				default:
7406 					DBG_PRINT(ERR_DBG,
7407 						  "%s: Samadhana!!\n",
7408 						  __func__);
7409 					BUG();
7410 				}
7411 			}
7412 		} else {
7413 			/*
7414 			 * Packet with erroneous checksum, let the
7415 			 * upper layers deal with it.
7416 			 */
7417 			skb_checksum_none_assert(skb);
7418 		}
7419 	} else
7420 		skb_checksum_none_assert(skb);
7421 
7422 	swstats->mem_freed += skb->truesize;
7423 send_up:
7424 	skb_record_rx_queue(skb, ring_no);
7425 	queue_rx_frame(skb, RXD_GET_VLAN_TAG(rxdp->Control_2));
7426 aggregate:
7427 	sp->mac_control.rings[ring_no].rx_bufs_left -= 1;
7428 	return SUCCESS;
7429 }
7430 
7431 /**
7432  *  s2io_link - stops/starts the Tx queue.
7433  *  @sp : private member of the device structure, which is a pointer to the
7434  *  s2io_nic structure.
7435  *  @link : inidicates whether link is UP/DOWN.
7436  *  Description:
7437  *  This function stops/starts the Tx queue depending on whether the link
7438  *  status of the NIC is is down or up. This is called by the Alarm
7439  *  interrupt handler whenever a link change interrupt comes up.
7440  *  Return value:
7441  *  void.
7442  */
7443 
7444 static void s2io_link(struct s2io_nic *sp, int link)
7445 {
7446 	struct net_device *dev = sp->dev;
7447 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7448 
7449 	if (link != sp->last_link_state) {
7450 		init_tti(sp, link);
7451 		if (link == LINK_DOWN) {
7452 			DBG_PRINT(ERR_DBG, "%s: Link down\n", dev->name);
7453 			s2io_stop_all_tx_queue(sp);
7454 			netif_carrier_off(dev);
7455 			if (swstats->link_up_cnt)
7456 				swstats->link_up_time =
7457 					jiffies - sp->start_time;
7458 			swstats->link_down_cnt++;
7459 		} else {
7460 			DBG_PRINT(ERR_DBG, "%s: Link Up\n", dev->name);
7461 			if (swstats->link_down_cnt)
7462 				swstats->link_down_time =
7463 					jiffies - sp->start_time;
7464 			swstats->link_up_cnt++;
7465 			netif_carrier_on(dev);
7466 			s2io_wake_all_tx_queue(sp);
7467 		}
7468 	}
7469 	sp->last_link_state = link;
7470 	sp->start_time = jiffies;
7471 }
7472 
7473 /**
7474  *  s2io_init_pci -Initialization of PCI and PCI-X configuration registers .
7475  *  @sp : private member of the device structure, which is a pointer to the
7476  *  s2io_nic structure.
7477  *  Description:
7478  *  This function initializes a few of the PCI and PCI-X configuration registers
7479  *  with recommended values.
7480  *  Return value:
7481  *  void
7482  */
7483 
7484 static void s2io_init_pci(struct s2io_nic *sp)
7485 {
7486 	u16 pci_cmd = 0, pcix_cmd = 0;
7487 
7488 	/* Enable Data Parity Error Recovery in PCI-X command register. */
7489 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7490 			     &(pcix_cmd));
7491 	pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7492 			      (pcix_cmd | 1));
7493 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7494 			     &(pcix_cmd));
7495 
7496 	/* Set the PErr Response bit in PCI command register. */
7497 	pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7498 	pci_write_config_word(sp->pdev, PCI_COMMAND,
7499 			      (pci_cmd | PCI_COMMAND_PARITY));
7500 	pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7501 }
7502 
7503 static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type,
7504 			    u8 *dev_multiq)
7505 {
7506 	int i;
7507 
7508 	if ((tx_fifo_num > MAX_TX_FIFOS) || (tx_fifo_num < 1)) {
7509 		DBG_PRINT(ERR_DBG, "Requested number of tx fifos "
7510 			  "(%d) not supported\n", tx_fifo_num);
7511 
7512 		if (tx_fifo_num < 1)
7513 			tx_fifo_num = 1;
7514 		else
7515 			tx_fifo_num = MAX_TX_FIFOS;
7516 
7517 		DBG_PRINT(ERR_DBG, "Default to %d tx fifos\n", tx_fifo_num);
7518 	}
7519 
7520 	if (multiq)
7521 		*dev_multiq = multiq;
7522 
7523 	if (tx_steering_type && (1 == tx_fifo_num)) {
7524 		if (tx_steering_type != TX_DEFAULT_STEERING)
7525 			DBG_PRINT(ERR_DBG,
7526 				  "Tx steering is not supported with "
7527 				  "one fifo. Disabling Tx steering.\n");
7528 		tx_steering_type = NO_STEERING;
7529 	}
7530 
7531 	if ((tx_steering_type < NO_STEERING) ||
7532 	    (tx_steering_type > TX_DEFAULT_STEERING)) {
7533 		DBG_PRINT(ERR_DBG,
7534 			  "Requested transmit steering not supported\n");
7535 		DBG_PRINT(ERR_DBG, "Disabling transmit steering\n");
7536 		tx_steering_type = NO_STEERING;
7537 	}
7538 
7539 	if (rx_ring_num > MAX_RX_RINGS) {
7540 		DBG_PRINT(ERR_DBG,
7541 			  "Requested number of rx rings not supported\n");
7542 		DBG_PRINT(ERR_DBG, "Default to %d rx rings\n",
7543 			  MAX_RX_RINGS);
7544 		rx_ring_num = MAX_RX_RINGS;
7545 	}
7546 
7547 	if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) {
7548 		DBG_PRINT(ERR_DBG, "Wrong intr_type requested. "
7549 			  "Defaulting to INTA\n");
7550 		*dev_intr_type = INTA;
7551 	}
7552 
7553 	if ((*dev_intr_type == MSI_X) &&
7554 	    ((pdev->device != PCI_DEVICE_ID_HERC_WIN) &&
7555 	     (pdev->device != PCI_DEVICE_ID_HERC_UNI))) {
7556 		DBG_PRINT(ERR_DBG, "Xframe I does not support MSI_X. "
7557 			  "Defaulting to INTA\n");
7558 		*dev_intr_type = INTA;
7559 	}
7560 
7561 	if ((rx_ring_mode != 1) && (rx_ring_mode != 2)) {
7562 		DBG_PRINT(ERR_DBG, "Requested ring mode not supported\n");
7563 		DBG_PRINT(ERR_DBG, "Defaulting to 1-buffer mode\n");
7564 		rx_ring_mode = 1;
7565 	}
7566 
7567 	for (i = 0; i < MAX_RX_RINGS; i++)
7568 		if (rx_ring_sz[i] > MAX_RX_BLOCKS_PER_RING) {
7569 			DBG_PRINT(ERR_DBG, "Requested rx ring size not "
7570 				  "supported\nDefaulting to %d\n",
7571 				  MAX_RX_BLOCKS_PER_RING);
7572 			rx_ring_sz[i] = MAX_RX_BLOCKS_PER_RING;
7573 		}
7574 
7575 	return SUCCESS;
7576 }
7577 
7578 /**
7579  * rts_ds_steer - Receive traffic steering based on IPv4 or IPv6 TOS
7580  * or Traffic class respectively.
7581  * @nic: device private variable
7582  * Description: The function configures the receive steering to
7583  * desired receive ring.
7584  * Return Value:  SUCCESS on success and
7585  * '-1' on failure (endian settings incorrect).
7586  */
7587 static int rts_ds_steer(struct s2io_nic *nic, u8 ds_codepoint, u8 ring)
7588 {
7589 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
7590 	register u64 val64 = 0;
7591 
7592 	if (ds_codepoint > 63)
7593 		return FAILURE;
7594 
7595 	val64 = RTS_DS_MEM_DATA(ring);
7596 	writeq(val64, &bar0->rts_ds_mem_data);
7597 
7598 	val64 = RTS_DS_MEM_CTRL_WE |
7599 		RTS_DS_MEM_CTRL_STROBE_NEW_CMD |
7600 		RTS_DS_MEM_CTRL_OFFSET(ds_codepoint);
7601 
7602 	writeq(val64, &bar0->rts_ds_mem_ctrl);
7603 
7604 	return wait_for_cmd_complete(&bar0->rts_ds_mem_ctrl,
7605 				     RTS_DS_MEM_CTRL_STROBE_CMD_BEING_EXECUTED,
7606 				     S2IO_BIT_RESET);
7607 }
7608 
7609 static const struct net_device_ops s2io_netdev_ops = {
7610 	.ndo_open	        = s2io_open,
7611 	.ndo_stop	        = s2io_close,
7612 	.ndo_get_stats	        = s2io_get_stats,
7613 	.ndo_start_xmit    	= s2io_xmit,
7614 	.ndo_validate_addr	= eth_validate_addr,
7615 	.ndo_set_rx_mode	= s2io_set_multicast,
7616 	.ndo_do_ioctl	   	= s2io_ioctl,
7617 	.ndo_set_mac_address    = s2io_set_mac_addr,
7618 	.ndo_change_mtu	   	= s2io_change_mtu,
7619 	.ndo_set_features	= s2io_set_features,
7620 	.ndo_tx_timeout	   	= s2io_tx_watchdog,
7621 #ifdef CONFIG_NET_POLL_CONTROLLER
7622 	.ndo_poll_controller    = s2io_netpoll,
7623 #endif
7624 };
7625 
7626 /**
7627  *  s2io_init_nic - Initialization of the adapter .
7628  *  @pdev : structure containing the PCI related information of the device.
7629  *  @pre: List of PCI devices supported by the driver listed in s2io_tbl.
7630  *  Description:
7631  *  The function initializes an adapter identified by the pci_dec structure.
7632  *  All OS related initialization including memory and device structure and
7633  *  initlaization of the device private variable is done. Also the swapper
7634  *  control register is initialized to enable read and write into the I/O
7635  *  registers of the device.
7636  *  Return value:
7637  *  returns 0 on success and negative on failure.
7638  */
7639 
7640 static int
7641 s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
7642 {
7643 	struct s2io_nic *sp;
7644 	struct net_device *dev;
7645 	int i, j, ret;
7646 	int dma_flag = false;
7647 	u32 mac_up, mac_down;
7648 	u64 val64 = 0, tmp64 = 0;
7649 	struct XENA_dev_config __iomem *bar0 = NULL;
7650 	u16 subid;
7651 	struct config_param *config;
7652 	struct mac_info *mac_control;
7653 	int mode;
7654 	u8 dev_intr_type = intr_type;
7655 	u8 dev_multiq = 0;
7656 
7657 	ret = s2io_verify_parm(pdev, &dev_intr_type, &dev_multiq);
7658 	if (ret)
7659 		return ret;
7660 
7661 	ret = pci_enable_device(pdev);
7662 	if (ret) {
7663 		DBG_PRINT(ERR_DBG,
7664 			  "%s: pci_enable_device failed\n", __func__);
7665 		return ret;
7666 	}
7667 
7668 	if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
7669 		DBG_PRINT(INIT_DBG, "%s: Using 64bit DMA\n", __func__);
7670 		dma_flag = true;
7671 		if (dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) {
7672 			DBG_PRINT(ERR_DBG,
7673 				  "Unable to obtain 64bit DMA for coherent allocations\n");
7674 			pci_disable_device(pdev);
7675 			return -ENOMEM;
7676 		}
7677 	} else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
7678 		DBG_PRINT(INIT_DBG, "%s: Using 32bit DMA\n", __func__);
7679 	} else {
7680 		pci_disable_device(pdev);
7681 		return -ENOMEM;
7682 	}
7683 	ret = pci_request_regions(pdev, s2io_driver_name);
7684 	if (ret) {
7685 		DBG_PRINT(ERR_DBG, "%s: Request Regions failed - %x\n",
7686 			  __func__, ret);
7687 		pci_disable_device(pdev);
7688 		return -ENODEV;
7689 	}
7690 	if (dev_multiq)
7691 		dev = alloc_etherdev_mq(sizeof(struct s2io_nic), tx_fifo_num);
7692 	else
7693 		dev = alloc_etherdev(sizeof(struct s2io_nic));
7694 	if (dev == NULL) {
7695 		pci_disable_device(pdev);
7696 		pci_release_regions(pdev);
7697 		return -ENODEV;
7698 	}
7699 
7700 	pci_set_master(pdev);
7701 	pci_set_drvdata(pdev, dev);
7702 	SET_NETDEV_DEV(dev, &pdev->dev);
7703 
7704 	/*  Private member variable initialized to s2io NIC structure */
7705 	sp = netdev_priv(dev);
7706 	sp->dev = dev;
7707 	sp->pdev = pdev;
7708 	sp->high_dma_flag = dma_flag;
7709 	sp->device_enabled_once = false;
7710 	if (rx_ring_mode == 1)
7711 		sp->rxd_mode = RXD_MODE_1;
7712 	if (rx_ring_mode == 2)
7713 		sp->rxd_mode = RXD_MODE_3B;
7714 
7715 	sp->config.intr_type = dev_intr_type;
7716 
7717 	if ((pdev->device == PCI_DEVICE_ID_HERC_WIN) ||
7718 	    (pdev->device == PCI_DEVICE_ID_HERC_UNI))
7719 		sp->device_type = XFRAME_II_DEVICE;
7720 	else
7721 		sp->device_type = XFRAME_I_DEVICE;
7722 
7723 
7724 	/* Initialize some PCI/PCI-X fields of the NIC. */
7725 	s2io_init_pci(sp);
7726 
7727 	/*
7728 	 * Setting the device configuration parameters.
7729 	 * Most of these parameters can be specified by the user during
7730 	 * module insertion as they are module loadable parameters. If
7731 	 * these parameters are not not specified during load time, they
7732 	 * are initialized with default values.
7733 	 */
7734 	config = &sp->config;
7735 	mac_control = &sp->mac_control;
7736 
7737 	config->napi = napi;
7738 	config->tx_steering_type = tx_steering_type;
7739 
7740 	/* Tx side parameters. */
7741 	if (config->tx_steering_type == TX_PRIORITY_STEERING)
7742 		config->tx_fifo_num = MAX_TX_FIFOS;
7743 	else
7744 		config->tx_fifo_num = tx_fifo_num;
7745 
7746 	/* Initialize the fifos used for tx steering */
7747 	if (config->tx_fifo_num < 5) {
7748 		if (config->tx_fifo_num  == 1)
7749 			sp->total_tcp_fifos = 1;
7750 		else
7751 			sp->total_tcp_fifos = config->tx_fifo_num - 1;
7752 		sp->udp_fifo_idx = config->tx_fifo_num - 1;
7753 		sp->total_udp_fifos = 1;
7754 		sp->other_fifo_idx = sp->total_tcp_fifos - 1;
7755 	} else {
7756 		sp->total_tcp_fifos = (tx_fifo_num - FIFO_UDP_MAX_NUM -
7757 				       FIFO_OTHER_MAX_NUM);
7758 		sp->udp_fifo_idx = sp->total_tcp_fifos;
7759 		sp->total_udp_fifos = FIFO_UDP_MAX_NUM;
7760 		sp->other_fifo_idx = sp->udp_fifo_idx + FIFO_UDP_MAX_NUM;
7761 	}
7762 
7763 	config->multiq = dev_multiq;
7764 	for (i = 0; i < config->tx_fifo_num; i++) {
7765 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7766 
7767 		tx_cfg->fifo_len = tx_fifo_len[i];
7768 		tx_cfg->fifo_priority = i;
7769 	}
7770 
7771 	/* mapping the QoS priority to the configured fifos */
7772 	for (i = 0; i < MAX_TX_FIFOS; i++)
7773 		config->fifo_mapping[i] = fifo_map[config->tx_fifo_num - 1][i];
7774 
7775 	/* map the hashing selector table to the configured fifos */
7776 	for (i = 0; i < config->tx_fifo_num; i++)
7777 		sp->fifo_selector[i] = fifo_selector[i];
7778 
7779 
7780 	config->tx_intr_type = TXD_INT_TYPE_UTILZ;
7781 	for (i = 0; i < config->tx_fifo_num; i++) {
7782 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7783 
7784 		tx_cfg->f_no_snoop = (NO_SNOOP_TXD | NO_SNOOP_TXD_BUFFER);
7785 		if (tx_cfg->fifo_len < 65) {
7786 			config->tx_intr_type = TXD_INT_TYPE_PER_LIST;
7787 			break;
7788 		}
7789 	}
7790 	/* + 2 because one Txd for skb->data and one Txd for UFO */
7791 	config->max_txds = MAX_SKB_FRAGS + 2;
7792 
7793 	/* Rx side parameters. */
7794 	config->rx_ring_num = rx_ring_num;
7795 	for (i = 0; i < config->rx_ring_num; i++) {
7796 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7797 		struct ring_info *ring = &mac_control->rings[i];
7798 
7799 		rx_cfg->num_rxd = rx_ring_sz[i] * (rxd_count[sp->rxd_mode] + 1);
7800 		rx_cfg->ring_priority = i;
7801 		ring->rx_bufs_left = 0;
7802 		ring->rxd_mode = sp->rxd_mode;
7803 		ring->rxd_count = rxd_count[sp->rxd_mode];
7804 		ring->pdev = sp->pdev;
7805 		ring->dev = sp->dev;
7806 	}
7807 
7808 	for (i = 0; i < rx_ring_num; i++) {
7809 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7810 
7811 		rx_cfg->ring_org = RING_ORG_BUFF1;
7812 		rx_cfg->f_no_snoop = (NO_SNOOP_RXD | NO_SNOOP_RXD_BUFFER);
7813 	}
7814 
7815 	/*  Setting Mac Control parameters */
7816 	mac_control->rmac_pause_time = rmac_pause_time;
7817 	mac_control->mc_pause_threshold_q0q3 = mc_pause_threshold_q0q3;
7818 	mac_control->mc_pause_threshold_q4q7 = mc_pause_threshold_q4q7;
7819 
7820 
7821 	/*  initialize the shared memory used by the NIC and the host */
7822 	if (init_shared_mem(sp)) {
7823 		DBG_PRINT(ERR_DBG, "%s: Memory allocation failed\n", dev->name);
7824 		ret = -ENOMEM;
7825 		goto mem_alloc_failed;
7826 	}
7827 
7828 	sp->bar0 = pci_ioremap_bar(pdev, 0);
7829 	if (!sp->bar0) {
7830 		DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem1\n",
7831 			  dev->name);
7832 		ret = -ENOMEM;
7833 		goto bar0_remap_failed;
7834 	}
7835 
7836 	sp->bar1 = pci_ioremap_bar(pdev, 2);
7837 	if (!sp->bar1) {
7838 		DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem2\n",
7839 			  dev->name);
7840 		ret = -ENOMEM;
7841 		goto bar1_remap_failed;
7842 	}
7843 
7844 	/* Initializing the BAR1 address as the start of the FIFO pointer. */
7845 	for (j = 0; j < MAX_TX_FIFOS; j++) {
7846 		mac_control->tx_FIFO_start[j] = sp->bar1 + (j * 0x00020000);
7847 	}
7848 
7849 	/*  Driver entry points */
7850 	dev->netdev_ops = &s2io_netdev_ops;
7851 	dev->ethtool_ops = &netdev_ethtool_ops;
7852 	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
7853 		NETIF_F_TSO | NETIF_F_TSO6 |
7854 		NETIF_F_RXCSUM | NETIF_F_LRO;
7855 	dev->features |= dev->hw_features |
7856 		NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
7857 	if (sp->high_dma_flag == true)
7858 		dev->features |= NETIF_F_HIGHDMA;
7859 	dev->watchdog_timeo = WATCH_DOG_TIMEOUT;
7860 	INIT_WORK(&sp->rst_timer_task, s2io_restart_nic);
7861 	INIT_WORK(&sp->set_link_task, s2io_set_link);
7862 
7863 	pci_save_state(sp->pdev);
7864 
7865 	/* Setting swapper control on the NIC, for proper reset operation */
7866 	if (s2io_set_swapper(sp)) {
7867 		DBG_PRINT(ERR_DBG, "%s: swapper settings are wrong\n",
7868 			  dev->name);
7869 		ret = -EAGAIN;
7870 		goto set_swap_failed;
7871 	}
7872 
7873 	/* Verify if the Herc works on the slot its placed into */
7874 	if (sp->device_type & XFRAME_II_DEVICE) {
7875 		mode = s2io_verify_pci_mode(sp);
7876 		if (mode < 0) {
7877 			DBG_PRINT(ERR_DBG, "%s: Unsupported PCI bus mode\n",
7878 				  __func__);
7879 			ret = -EBADSLT;
7880 			goto set_swap_failed;
7881 		}
7882 	}
7883 
7884 	if (sp->config.intr_type == MSI_X) {
7885 		sp->num_entries = config->rx_ring_num + 1;
7886 		ret = s2io_enable_msi_x(sp);
7887 
7888 		if (!ret) {
7889 			ret = s2io_test_msi(sp);
7890 			/* rollback MSI-X, will re-enable during add_isr() */
7891 			remove_msix_isr(sp);
7892 		}
7893 		if (ret) {
7894 
7895 			DBG_PRINT(ERR_DBG,
7896 				  "MSI-X requested but failed to enable\n");
7897 			sp->config.intr_type = INTA;
7898 		}
7899 	}
7900 
7901 	if (config->intr_type ==  MSI_X) {
7902 		for (i = 0; i < config->rx_ring_num ; i++) {
7903 			struct ring_info *ring = &mac_control->rings[i];
7904 
7905 			netif_napi_add(dev, &ring->napi, s2io_poll_msix, 64);
7906 		}
7907 	} else {
7908 		netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64);
7909 	}
7910 
7911 	/* Not needed for Herc */
7912 	if (sp->device_type & XFRAME_I_DEVICE) {
7913 		/*
7914 		 * Fix for all "FFs" MAC address problems observed on
7915 		 * Alpha platforms
7916 		 */
7917 		fix_mac_address(sp);
7918 		s2io_reset(sp);
7919 	}
7920 
7921 	/*
7922 	 * MAC address initialization.
7923 	 * For now only one mac address will be read and used.
7924 	 */
7925 	bar0 = sp->bar0;
7926 	val64 = RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
7927 		RMAC_ADDR_CMD_MEM_OFFSET(0 + S2IO_MAC_ADDR_START_OFFSET);
7928 	writeq(val64, &bar0->rmac_addr_cmd_mem);
7929 	wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
7930 			      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
7931 			      S2IO_BIT_RESET);
7932 	tmp64 = readq(&bar0->rmac_addr_data0_mem);
7933 	mac_down = (u32)tmp64;
7934 	mac_up = (u32) (tmp64 >> 32);
7935 
7936 	sp->def_mac_addr[0].mac_addr[3] = (u8) (mac_up);
7937 	sp->def_mac_addr[0].mac_addr[2] = (u8) (mac_up >> 8);
7938 	sp->def_mac_addr[0].mac_addr[1] = (u8) (mac_up >> 16);
7939 	sp->def_mac_addr[0].mac_addr[0] = (u8) (mac_up >> 24);
7940 	sp->def_mac_addr[0].mac_addr[5] = (u8) (mac_down >> 16);
7941 	sp->def_mac_addr[0].mac_addr[4] = (u8) (mac_down >> 24);
7942 
7943 	/*  Set the factory defined MAC address initially   */
7944 	dev->addr_len = ETH_ALEN;
7945 	memcpy(dev->dev_addr, sp->def_mac_addr, ETH_ALEN);
7946 
7947 	/* initialize number of multicast & unicast MAC entries variables */
7948 	if (sp->device_type == XFRAME_I_DEVICE) {
7949 		config->max_mc_addr = S2IO_XENA_MAX_MC_ADDRESSES;
7950 		config->max_mac_addr = S2IO_XENA_MAX_MAC_ADDRESSES;
7951 		config->mc_start_offset = S2IO_XENA_MC_ADDR_START_OFFSET;
7952 	} else if (sp->device_type == XFRAME_II_DEVICE) {
7953 		config->max_mc_addr = S2IO_HERC_MAX_MC_ADDRESSES;
7954 		config->max_mac_addr = S2IO_HERC_MAX_MAC_ADDRESSES;
7955 		config->mc_start_offset = S2IO_HERC_MC_ADDR_START_OFFSET;
7956 	}
7957 
7958 	/* MTU range: 46 - 9600 */
7959 	dev->min_mtu = MIN_MTU;
7960 	dev->max_mtu = S2IO_JUMBO_SIZE;
7961 
7962 	/* store mac addresses from CAM to s2io_nic structure */
7963 	do_s2io_store_unicast_mc(sp);
7964 
7965 	/* Configure MSIX vector for number of rings configured plus one */
7966 	if ((sp->device_type == XFRAME_II_DEVICE) &&
7967 	    (config->intr_type == MSI_X))
7968 		sp->num_entries = config->rx_ring_num + 1;
7969 
7970 	/* Store the values of the MSIX table in the s2io_nic structure */
7971 	store_xmsi_data(sp);
7972 	/* reset Nic and bring it to known state */
7973 	s2io_reset(sp);
7974 
7975 	/*
7976 	 * Initialize link state flags
7977 	 * and the card state parameter
7978 	 */
7979 	sp->state = 0;
7980 
7981 	/* Initialize spinlocks */
7982 	for (i = 0; i < sp->config.tx_fifo_num; i++) {
7983 		struct fifo_info *fifo = &mac_control->fifos[i];
7984 
7985 		spin_lock_init(&fifo->tx_lock);
7986 	}
7987 
7988 	/*
7989 	 * SXE-002: Configure link and activity LED to init state
7990 	 * on driver load.
7991 	 */
7992 	subid = sp->pdev->subsystem_device;
7993 	if ((subid & 0xFF) >= 0x07) {
7994 		val64 = readq(&bar0->gpio_control);
7995 		val64 |= 0x0000800000000000ULL;
7996 		writeq(val64, &bar0->gpio_control);
7997 		val64 = 0x0411040400000000ULL;
7998 		writeq(val64, (void __iomem *)bar0 + 0x2700);
7999 		val64 = readq(&bar0->gpio_control);
8000 	}
8001 
8002 	sp->rx_csum = 1;	/* Rx chksum verify enabled by default */
8003 
8004 	if (register_netdev(dev)) {
8005 		DBG_PRINT(ERR_DBG, "Device registration failed\n");
8006 		ret = -ENODEV;
8007 		goto register_failed;
8008 	}
8009 	s2io_vpd_read(sp);
8010 	DBG_PRINT(ERR_DBG, "Copyright(c) 2002-2010 Exar Corp.\n");
8011 	DBG_PRINT(ERR_DBG, "%s: Neterion %s (rev %d)\n", dev->name,
8012 		  sp->product_name, pdev->revision);
8013 	DBG_PRINT(ERR_DBG, "%s: Driver version %s\n", dev->name,
8014 		  s2io_driver_version);
8015 	DBG_PRINT(ERR_DBG, "%s: MAC Address: %pM\n", dev->name, dev->dev_addr);
8016 	DBG_PRINT(ERR_DBG, "Serial number: %s\n", sp->serial_num);
8017 	if (sp->device_type & XFRAME_II_DEVICE) {
8018 		mode = s2io_print_pci_mode(sp);
8019 		if (mode < 0) {
8020 			ret = -EBADSLT;
8021 			unregister_netdev(dev);
8022 			goto set_swap_failed;
8023 		}
8024 	}
8025 	switch (sp->rxd_mode) {
8026 	case RXD_MODE_1:
8027 		DBG_PRINT(ERR_DBG, "%s: 1-Buffer receive mode enabled\n",
8028 			  dev->name);
8029 		break;
8030 	case RXD_MODE_3B:
8031 		DBG_PRINT(ERR_DBG, "%s: 2-Buffer receive mode enabled\n",
8032 			  dev->name);
8033 		break;
8034 	}
8035 
8036 	switch (sp->config.napi) {
8037 	case 0:
8038 		DBG_PRINT(ERR_DBG, "%s: NAPI disabled\n", dev->name);
8039 		break;
8040 	case 1:
8041 		DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name);
8042 		break;
8043 	}
8044 
8045 	DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name,
8046 		  sp->config.tx_fifo_num);
8047 
8048 	DBG_PRINT(ERR_DBG, "%s: Using %d Rx ring(s)\n", dev->name,
8049 		  sp->config.rx_ring_num);
8050 
8051 	switch (sp->config.intr_type) {
8052 	case INTA:
8053 		DBG_PRINT(ERR_DBG, "%s: Interrupt type INTA\n", dev->name);
8054 		break;
8055 	case MSI_X:
8056 		DBG_PRINT(ERR_DBG, "%s: Interrupt type MSI-X\n", dev->name);
8057 		break;
8058 	}
8059 	if (sp->config.multiq) {
8060 		for (i = 0; i < sp->config.tx_fifo_num; i++) {
8061 			struct fifo_info *fifo = &mac_control->fifos[i];
8062 
8063 			fifo->multiq = config->multiq;
8064 		}
8065 		DBG_PRINT(ERR_DBG, "%s: Multiqueue support enabled\n",
8066 			  dev->name);
8067 	} else
8068 		DBG_PRINT(ERR_DBG, "%s: Multiqueue support disabled\n",
8069 			  dev->name);
8070 
8071 	switch (sp->config.tx_steering_type) {
8072 	case NO_STEERING:
8073 		DBG_PRINT(ERR_DBG, "%s: No steering enabled for transmit\n",
8074 			  dev->name);
8075 		break;
8076 	case TX_PRIORITY_STEERING:
8077 		DBG_PRINT(ERR_DBG,
8078 			  "%s: Priority steering enabled for transmit\n",
8079 			  dev->name);
8080 		break;
8081 	case TX_DEFAULT_STEERING:
8082 		DBG_PRINT(ERR_DBG,
8083 			  "%s: Default steering enabled for transmit\n",
8084 			  dev->name);
8085 	}
8086 
8087 	DBG_PRINT(ERR_DBG, "%s: Large receive offload enabled\n",
8088 		  dev->name);
8089 	/* Initialize device name */
8090 	snprintf(sp->name, sizeof(sp->name), "%s Neterion %s", dev->name,
8091 		 sp->product_name);
8092 
8093 	if (vlan_tag_strip)
8094 		sp->vlan_strip_flag = 1;
8095 	else
8096 		sp->vlan_strip_flag = 0;
8097 
8098 	/*
8099 	 * Make Link state as off at this point, when the Link change
8100 	 * interrupt comes the state will be automatically changed to
8101 	 * the right state.
8102 	 */
8103 	netif_carrier_off(dev);
8104 
8105 	return 0;
8106 
8107 register_failed:
8108 set_swap_failed:
8109 	iounmap(sp->bar1);
8110 bar1_remap_failed:
8111 	iounmap(sp->bar0);
8112 bar0_remap_failed:
8113 mem_alloc_failed:
8114 	free_shared_mem(sp);
8115 	pci_disable_device(pdev);
8116 	pci_release_regions(pdev);
8117 	free_netdev(dev);
8118 
8119 	return ret;
8120 }
8121 
8122 /**
8123  * s2io_rem_nic - Free the PCI device
8124  * @pdev: structure containing the PCI related information of the device.
8125  * Description: This function is called by the Pci subsystem to release a
8126  * PCI device and free up all resource held up by the device. This could
8127  * be in response to a Hot plug event or when the driver is to be removed
8128  * from memory.
8129  */
8130 
8131 static void s2io_rem_nic(struct pci_dev *pdev)
8132 {
8133 	struct net_device *dev = pci_get_drvdata(pdev);
8134 	struct s2io_nic *sp;
8135 
8136 	if (dev == NULL) {
8137 		DBG_PRINT(ERR_DBG, "Driver Data is NULL!!\n");
8138 		return;
8139 	}
8140 
8141 	sp = netdev_priv(dev);
8142 
8143 	cancel_work_sync(&sp->rst_timer_task);
8144 	cancel_work_sync(&sp->set_link_task);
8145 
8146 	unregister_netdev(dev);
8147 
8148 	free_shared_mem(sp);
8149 	iounmap(sp->bar0);
8150 	iounmap(sp->bar1);
8151 	pci_release_regions(pdev);
8152 	free_netdev(dev);
8153 	pci_disable_device(pdev);
8154 }
8155 
8156 module_pci_driver(s2io_driver);
8157 
8158 static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip,
8159 				struct tcphdr **tcp, struct RxD_t *rxdp,
8160 				struct s2io_nic *sp)
8161 {
8162 	int ip_off;
8163 	u8 l2_type = (u8)((rxdp->Control_1 >> 37) & 0x7), ip_len;
8164 
8165 	if (!(rxdp->Control_1 & RXD_FRAME_PROTO_TCP)) {
8166 		DBG_PRINT(INIT_DBG,
8167 			  "%s: Non-TCP frames not supported for LRO\n",
8168 			  __func__);
8169 		return -1;
8170 	}
8171 
8172 	/* Checking for DIX type or DIX type with VLAN */
8173 	if ((l2_type == 0) || (l2_type == 4)) {
8174 		ip_off = HEADER_ETHERNET_II_802_3_SIZE;
8175 		/*
8176 		 * If vlan stripping is disabled and the frame is VLAN tagged,
8177 		 * shift the offset by the VLAN header size bytes.
8178 		 */
8179 		if ((!sp->vlan_strip_flag) &&
8180 		    (rxdp->Control_1 & RXD_FRAME_VLAN_TAG))
8181 			ip_off += HEADER_VLAN_SIZE;
8182 	} else {
8183 		/* LLC, SNAP etc are considered non-mergeable */
8184 		return -1;
8185 	}
8186 
8187 	*ip = (struct iphdr *)(buffer + ip_off);
8188 	ip_len = (u8)((*ip)->ihl);
8189 	ip_len <<= 2;
8190 	*tcp = (struct tcphdr *)((unsigned long)*ip + ip_len);
8191 
8192 	return 0;
8193 }
8194 
8195 static int check_for_socket_match(struct lro *lro, struct iphdr *ip,
8196 				  struct tcphdr *tcp)
8197 {
8198 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8199 	if ((lro->iph->saddr != ip->saddr) ||
8200 	    (lro->iph->daddr != ip->daddr) ||
8201 	    (lro->tcph->source != tcp->source) ||
8202 	    (lro->tcph->dest != tcp->dest))
8203 		return -1;
8204 	return 0;
8205 }
8206 
8207 static inline int get_l4_pyld_length(struct iphdr *ip, struct tcphdr *tcp)
8208 {
8209 	return ntohs(ip->tot_len) - (ip->ihl << 2) - (tcp->doff << 2);
8210 }
8211 
8212 static void initiate_new_session(struct lro *lro, u8 *l2h,
8213 				 struct iphdr *ip, struct tcphdr *tcp,
8214 				 u32 tcp_pyld_len, u16 vlan_tag)
8215 {
8216 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8217 	lro->l2h = l2h;
8218 	lro->iph = ip;
8219 	lro->tcph = tcp;
8220 	lro->tcp_next_seq = tcp_pyld_len + ntohl(tcp->seq);
8221 	lro->tcp_ack = tcp->ack_seq;
8222 	lro->sg_num = 1;
8223 	lro->total_len = ntohs(ip->tot_len);
8224 	lro->frags_len = 0;
8225 	lro->vlan_tag = vlan_tag;
8226 	/*
8227 	 * Check if we saw TCP timestamp.
8228 	 * Other consistency checks have already been done.
8229 	 */
8230 	if (tcp->doff == 8) {
8231 		__be32 *ptr;
8232 		ptr = (__be32 *)(tcp+1);
8233 		lro->saw_ts = 1;
8234 		lro->cur_tsval = ntohl(*(ptr+1));
8235 		lro->cur_tsecr = *(ptr+2);
8236 	}
8237 	lro->in_use = 1;
8238 }
8239 
8240 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro)
8241 {
8242 	struct iphdr *ip = lro->iph;
8243 	struct tcphdr *tcp = lro->tcph;
8244 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8245 
8246 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8247 
8248 	/* Update L3 header */
8249 	csum_replace2(&ip->check, ip->tot_len, htons(lro->total_len));
8250 	ip->tot_len = htons(lro->total_len);
8251 
8252 	/* Update L4 header */
8253 	tcp->ack_seq = lro->tcp_ack;
8254 	tcp->window = lro->window;
8255 
8256 	/* Update tsecr field if this session has timestamps enabled */
8257 	if (lro->saw_ts) {
8258 		__be32 *ptr = (__be32 *)(tcp + 1);
8259 		*(ptr+2) = lro->cur_tsecr;
8260 	}
8261 
8262 	/* Update counters required for calculation of
8263 	 * average no. of packets aggregated.
8264 	 */
8265 	swstats->sum_avg_pkts_aggregated += lro->sg_num;
8266 	swstats->num_aggregations++;
8267 }
8268 
8269 static void aggregate_new_rx(struct lro *lro, struct iphdr *ip,
8270 			     struct tcphdr *tcp, u32 l4_pyld)
8271 {
8272 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8273 	lro->total_len += l4_pyld;
8274 	lro->frags_len += l4_pyld;
8275 	lro->tcp_next_seq += l4_pyld;
8276 	lro->sg_num++;
8277 
8278 	/* Update ack seq no. and window ad(from this pkt) in LRO object */
8279 	lro->tcp_ack = tcp->ack_seq;
8280 	lro->window = tcp->window;
8281 
8282 	if (lro->saw_ts) {
8283 		__be32 *ptr;
8284 		/* Update tsecr and tsval from this packet */
8285 		ptr = (__be32 *)(tcp+1);
8286 		lro->cur_tsval = ntohl(*(ptr+1));
8287 		lro->cur_tsecr = *(ptr + 2);
8288 	}
8289 }
8290 
8291 static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip,
8292 				    struct tcphdr *tcp, u32 tcp_pyld_len)
8293 {
8294 	u8 *ptr;
8295 
8296 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8297 
8298 	if (!tcp_pyld_len) {
8299 		/* Runt frame or a pure ack */
8300 		return -1;
8301 	}
8302 
8303 	if (ip->ihl != 5) /* IP has options */
8304 		return -1;
8305 
8306 	/* If we see CE codepoint in IP header, packet is not mergeable */
8307 	if (INET_ECN_is_ce(ipv4_get_dsfield(ip)))
8308 		return -1;
8309 
8310 	/* If we see ECE or CWR flags in TCP header, packet is not mergeable */
8311 	if (tcp->urg || tcp->psh || tcp->rst ||
8312 	    tcp->syn || tcp->fin ||
8313 	    tcp->ece || tcp->cwr || !tcp->ack) {
8314 		/*
8315 		 * Currently recognize only the ack control word and
8316 		 * any other control field being set would result in
8317 		 * flushing the LRO session
8318 		 */
8319 		return -1;
8320 	}
8321 
8322 	/*
8323 	 * Allow only one TCP timestamp option. Don't aggregate if
8324 	 * any other options are detected.
8325 	 */
8326 	if (tcp->doff != 5 && tcp->doff != 8)
8327 		return -1;
8328 
8329 	if (tcp->doff == 8) {
8330 		ptr = (u8 *)(tcp + 1);
8331 		while (*ptr == TCPOPT_NOP)
8332 			ptr++;
8333 		if (*ptr != TCPOPT_TIMESTAMP || *(ptr+1) != TCPOLEN_TIMESTAMP)
8334 			return -1;
8335 
8336 		/* Ensure timestamp value increases monotonically */
8337 		if (l_lro)
8338 			if (l_lro->cur_tsval > ntohl(*((__be32 *)(ptr+2))))
8339 				return -1;
8340 
8341 		/* timestamp echo reply should be non-zero */
8342 		if (*((__be32 *)(ptr+6)) == 0)
8343 			return -1;
8344 	}
8345 
8346 	return 0;
8347 }
8348 
8349 static int s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer,
8350 				 u8 **tcp, u32 *tcp_len, struct lro **lro,
8351 				 struct RxD_t *rxdp, struct s2io_nic *sp)
8352 {
8353 	struct iphdr *ip;
8354 	struct tcphdr *tcph;
8355 	int ret = 0, i;
8356 	u16 vlan_tag = 0;
8357 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8358 
8359 	ret = check_L2_lro_capable(buffer, &ip, (struct tcphdr **)tcp,
8360 				   rxdp, sp);
8361 	if (ret)
8362 		return ret;
8363 
8364 	DBG_PRINT(INFO_DBG, "IP Saddr: %x Daddr: %x\n", ip->saddr, ip->daddr);
8365 
8366 	vlan_tag = RXD_GET_VLAN_TAG(rxdp->Control_2);
8367 	tcph = (struct tcphdr *)*tcp;
8368 	*tcp_len = get_l4_pyld_length(ip, tcph);
8369 	for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8370 		struct lro *l_lro = &ring_data->lro0_n[i];
8371 		if (l_lro->in_use) {
8372 			if (check_for_socket_match(l_lro, ip, tcph))
8373 				continue;
8374 			/* Sock pair matched */
8375 			*lro = l_lro;
8376 
8377 			if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) {
8378 				DBG_PRINT(INFO_DBG, "%s: Out of sequence. "
8379 					  "expected 0x%x, actual 0x%x\n",
8380 					  __func__,
8381 					  (*lro)->tcp_next_seq,
8382 					  ntohl(tcph->seq));
8383 
8384 				swstats->outof_sequence_pkts++;
8385 				ret = 2;
8386 				break;
8387 			}
8388 
8389 			if (!verify_l3_l4_lro_capable(l_lro, ip, tcph,
8390 						      *tcp_len))
8391 				ret = 1; /* Aggregate */
8392 			else
8393 				ret = 2; /* Flush both */
8394 			break;
8395 		}
8396 	}
8397 
8398 	if (ret == 0) {
8399 		/* Before searching for available LRO objects,
8400 		 * check if the pkt is L3/L4 aggregatable. If not
8401 		 * don't create new LRO session. Just send this
8402 		 * packet up.
8403 		 */
8404 		if (verify_l3_l4_lro_capable(NULL, ip, tcph, *tcp_len))
8405 			return 5;
8406 
8407 		for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8408 			struct lro *l_lro = &ring_data->lro0_n[i];
8409 			if (!(l_lro->in_use)) {
8410 				*lro = l_lro;
8411 				ret = 3; /* Begin anew */
8412 				break;
8413 			}
8414 		}
8415 	}
8416 
8417 	if (ret == 0) { /* sessions exceeded */
8418 		DBG_PRINT(INFO_DBG, "%s: All LRO sessions already in use\n",
8419 			  __func__);
8420 		*lro = NULL;
8421 		return ret;
8422 	}
8423 
8424 	switch (ret) {
8425 	case 3:
8426 		initiate_new_session(*lro, buffer, ip, tcph, *tcp_len,
8427 				     vlan_tag);
8428 		break;
8429 	case 2:
8430 		update_L3L4_header(sp, *lro);
8431 		break;
8432 	case 1:
8433 		aggregate_new_rx(*lro, ip, tcph, *tcp_len);
8434 		if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) {
8435 			update_L3L4_header(sp, *lro);
8436 			ret = 4; /* Flush the LRO */
8437 		}
8438 		break;
8439 	default:
8440 		DBG_PRINT(ERR_DBG, "%s: Don't know, can't say!!\n", __func__);
8441 		break;
8442 	}
8443 
8444 	return ret;
8445 }
8446 
8447 static void clear_lro_session(struct lro *lro)
8448 {
8449 	static u16 lro_struct_size = sizeof(struct lro);
8450 
8451 	memset(lro, 0, lro_struct_size);
8452 }
8453 
8454 static void queue_rx_frame(struct sk_buff *skb, u16 vlan_tag)
8455 {
8456 	struct net_device *dev = skb->dev;
8457 	struct s2io_nic *sp = netdev_priv(dev);
8458 
8459 	skb->protocol = eth_type_trans(skb, dev);
8460 	if (vlan_tag && sp->vlan_strip_flag)
8461 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
8462 	if (sp->config.napi)
8463 		netif_receive_skb(skb);
8464 	else
8465 		netif_rx(skb);
8466 }
8467 
8468 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
8469 			   struct sk_buff *skb, u32 tcp_len)
8470 {
8471 	struct sk_buff *first = lro->parent;
8472 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8473 
8474 	first->len += tcp_len;
8475 	first->data_len = lro->frags_len;
8476 	skb_pull(skb, (skb->len - tcp_len));
8477 	if (skb_shinfo(first)->frag_list)
8478 		lro->last_frag->next = skb;
8479 	else
8480 		skb_shinfo(first)->frag_list = skb;
8481 	first->truesize += skb->truesize;
8482 	lro->last_frag = skb;
8483 	swstats->clubbed_frms_cnt++;
8484 }
8485 
8486 /**
8487  * s2io_io_error_detected - called when PCI error is detected
8488  * @pdev: Pointer to PCI device
8489  * @state: The current pci connection state
8490  *
8491  * This function is called after a PCI bus error affecting
8492  * this device has been detected.
8493  */
8494 static pci_ers_result_t s2io_io_error_detected(struct pci_dev *pdev,
8495 					       pci_channel_state_t state)
8496 {
8497 	struct net_device *netdev = pci_get_drvdata(pdev);
8498 	struct s2io_nic *sp = netdev_priv(netdev);
8499 
8500 	netif_device_detach(netdev);
8501 
8502 	if (state == pci_channel_io_perm_failure)
8503 		return PCI_ERS_RESULT_DISCONNECT;
8504 
8505 	if (netif_running(netdev)) {
8506 		/* Bring down the card, while avoiding PCI I/O */
8507 		do_s2io_card_down(sp, 0);
8508 	}
8509 	pci_disable_device(pdev);
8510 
8511 	return PCI_ERS_RESULT_NEED_RESET;
8512 }
8513 
8514 /**
8515  * s2io_io_slot_reset - called after the pci bus has been reset.
8516  * @pdev: Pointer to PCI device
8517  *
8518  * Restart the card from scratch, as if from a cold-boot.
8519  * At this point, the card has exprienced a hard reset,
8520  * followed by fixups by BIOS, and has its config space
8521  * set up identically to what it was at cold boot.
8522  */
8523 static pci_ers_result_t s2io_io_slot_reset(struct pci_dev *pdev)
8524 {
8525 	struct net_device *netdev = pci_get_drvdata(pdev);
8526 	struct s2io_nic *sp = netdev_priv(netdev);
8527 
8528 	if (pci_enable_device(pdev)) {
8529 		pr_err("Cannot re-enable PCI device after reset.\n");
8530 		return PCI_ERS_RESULT_DISCONNECT;
8531 	}
8532 
8533 	pci_set_master(pdev);
8534 	s2io_reset(sp);
8535 
8536 	return PCI_ERS_RESULT_RECOVERED;
8537 }
8538 
8539 /**
8540  * s2io_io_resume - called when traffic can start flowing again.
8541  * @pdev: Pointer to PCI device
8542  *
8543  * This callback is called when the error recovery driver tells
8544  * us that its OK to resume normal operation.
8545  */
8546 static void s2io_io_resume(struct pci_dev *pdev)
8547 {
8548 	struct net_device *netdev = pci_get_drvdata(pdev);
8549 	struct s2io_nic *sp = netdev_priv(netdev);
8550 
8551 	if (netif_running(netdev)) {
8552 		if (s2io_card_up(sp)) {
8553 			pr_err("Can't bring device back up after reset.\n");
8554 			return;
8555 		}
8556 
8557 		if (s2io_set_mac_addr(netdev, netdev->dev_addr) == FAILURE) {
8558 			s2io_card_down(sp);
8559 			pr_err("Can't restore mac addr after reset.\n");
8560 			return;
8561 		}
8562 	}
8563 
8564 	netif_device_attach(netdev);
8565 	netif_tx_wake_all_queues(netdev);
8566 }
8567