xref: /linux/drivers/net/ethernet/neterion/s2io.c (revision f86fd32d)
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 = pci_alloc_consistent(nic->pdev,
644 						     PAGE_SIZE, &tmp_p);
645 			if (!tmp_v) {
646 				DBG_PRINT(INFO_DBG,
647 					  "pci_alloc_consistent 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 = pci_alloc_consistent(nic->pdev,
662 							     PAGE_SIZE, &tmp_p);
663 				if (!tmp_v) {
664 					DBG_PRINT(INFO_DBG,
665 						  "pci_alloc_consistent failed for TxDL\n");
666 					return -ENOMEM;
667 				}
668 				mem_allocated += PAGE_SIZE;
669 			}
670 			while (k < lst_per_page) {
671 				int l = (j * lst_per_page) + k;
672 				if (l == tx_cfg->fifo_len)
673 					break;
674 				fifo->list_info[l].list_virt_addr =
675 					tmp_v + (k * lst_size);
676 				fifo->list_info[l].list_phy_addr =
677 					tmp_p + (k * lst_size);
678 				k++;
679 			}
680 		}
681 	}
682 
683 	for (i = 0; i < config->tx_fifo_num; i++) {
684 		struct fifo_info *fifo = &mac_control->fifos[i];
685 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
686 
687 		size = tx_cfg->fifo_len;
688 		fifo->ufo_in_band_v = kcalloc(size, sizeof(u64), GFP_KERNEL);
689 		if (!fifo->ufo_in_band_v)
690 			return -ENOMEM;
691 		mem_allocated += (size * sizeof(u64));
692 	}
693 
694 	/* Allocation and initialization of RXDs in Rings */
695 	size = 0;
696 	for (i = 0; i < config->rx_ring_num; i++) {
697 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
698 		struct ring_info *ring = &mac_control->rings[i];
699 
700 		if (rx_cfg->num_rxd % (rxd_count[nic->rxd_mode] + 1)) {
701 			DBG_PRINT(ERR_DBG, "%s: Ring%d RxD count is not a "
702 				  "multiple of RxDs per Block\n",
703 				  dev->name, i);
704 			return FAILURE;
705 		}
706 		size += rx_cfg->num_rxd;
707 		ring->block_count = rx_cfg->num_rxd /
708 			(rxd_count[nic->rxd_mode] + 1);
709 		ring->pkt_cnt = rx_cfg->num_rxd - ring->block_count;
710 	}
711 	if (nic->rxd_mode == RXD_MODE_1)
712 		size = (size * (sizeof(struct RxD1)));
713 	else
714 		size = (size * (sizeof(struct RxD3)));
715 
716 	for (i = 0; i < config->rx_ring_num; i++) {
717 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
718 		struct ring_info *ring = &mac_control->rings[i];
719 
720 		ring->rx_curr_get_info.block_index = 0;
721 		ring->rx_curr_get_info.offset = 0;
722 		ring->rx_curr_get_info.ring_len = rx_cfg->num_rxd - 1;
723 		ring->rx_curr_put_info.block_index = 0;
724 		ring->rx_curr_put_info.offset = 0;
725 		ring->rx_curr_put_info.ring_len = rx_cfg->num_rxd - 1;
726 		ring->nic = nic;
727 		ring->ring_no = i;
728 
729 		blk_cnt = rx_cfg->num_rxd / (rxd_count[nic->rxd_mode] + 1);
730 		/*  Allocating all the Rx blocks */
731 		for (j = 0; j < blk_cnt; j++) {
732 			struct rx_block_info *rx_blocks;
733 			int l;
734 
735 			rx_blocks = &ring->rx_blocks[j];
736 			size = SIZE_OF_BLOCK;	/* size is always page size */
737 			tmp_v_addr = pci_alloc_consistent(nic->pdev, size,
738 							  &tmp_p_addr);
739 			if (tmp_v_addr == NULL) {
740 				/*
741 				 * In case of failure, free_shared_mem()
742 				 * is called, which should free any
743 				 * memory that was alloced till the
744 				 * failure happened.
745 				 */
746 				rx_blocks->block_virt_addr = tmp_v_addr;
747 				return -ENOMEM;
748 			}
749 			mem_allocated += size;
750 
751 			size = sizeof(struct rxd_info) *
752 				rxd_count[nic->rxd_mode];
753 			rx_blocks->block_virt_addr = tmp_v_addr;
754 			rx_blocks->block_dma_addr = tmp_p_addr;
755 			rx_blocks->rxds = kmalloc(size,  GFP_KERNEL);
756 			if (!rx_blocks->rxds)
757 				return -ENOMEM;
758 			mem_allocated += size;
759 			for (l = 0; l < rxd_count[nic->rxd_mode]; l++) {
760 				rx_blocks->rxds[l].virt_addr =
761 					rx_blocks->block_virt_addr +
762 					(rxd_size[nic->rxd_mode] * l);
763 				rx_blocks->rxds[l].dma_addr =
764 					rx_blocks->block_dma_addr +
765 					(rxd_size[nic->rxd_mode] * l);
766 			}
767 		}
768 		/* Interlinking all Rx Blocks */
769 		for (j = 0; j < blk_cnt; j++) {
770 			int next = (j + 1) % blk_cnt;
771 			tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
772 			tmp_v_addr_next = ring->rx_blocks[next].block_virt_addr;
773 			tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
774 			tmp_p_addr_next = ring->rx_blocks[next].block_dma_addr;
775 
776 			pre_rxd_blk = tmp_v_addr;
777 			pre_rxd_blk->reserved_2_pNext_RxD_block =
778 				(unsigned long)tmp_v_addr_next;
779 			pre_rxd_blk->pNext_RxD_Blk_physical =
780 				(u64)tmp_p_addr_next;
781 		}
782 	}
783 	if (nic->rxd_mode == RXD_MODE_3B) {
784 		/*
785 		 * Allocation of Storages for buffer addresses in 2BUFF mode
786 		 * and the buffers as well.
787 		 */
788 		for (i = 0; i < config->rx_ring_num; i++) {
789 			struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
790 			struct ring_info *ring = &mac_control->rings[i];
791 
792 			blk_cnt = rx_cfg->num_rxd /
793 				(rxd_count[nic->rxd_mode] + 1);
794 			size = sizeof(struct buffAdd *) * blk_cnt;
795 			ring->ba = kmalloc(size, GFP_KERNEL);
796 			if (!ring->ba)
797 				return -ENOMEM;
798 			mem_allocated += size;
799 			for (j = 0; j < blk_cnt; j++) {
800 				int k = 0;
801 
802 				size = sizeof(struct buffAdd) *
803 					(rxd_count[nic->rxd_mode] + 1);
804 				ring->ba[j] = kmalloc(size, GFP_KERNEL);
805 				if (!ring->ba[j])
806 					return -ENOMEM;
807 				mem_allocated += size;
808 				while (k != rxd_count[nic->rxd_mode]) {
809 					ba = &ring->ba[j][k];
810 					size = BUF0_LEN + ALIGN_SIZE;
811 					ba->ba_0_org = kmalloc(size, GFP_KERNEL);
812 					if (!ba->ba_0_org)
813 						return -ENOMEM;
814 					mem_allocated += size;
815 					tmp = (unsigned long)ba->ba_0_org;
816 					tmp += ALIGN_SIZE;
817 					tmp &= ~((unsigned long)ALIGN_SIZE);
818 					ba->ba_0 = (void *)tmp;
819 
820 					size = BUF1_LEN + ALIGN_SIZE;
821 					ba->ba_1_org = kmalloc(size, GFP_KERNEL);
822 					if (!ba->ba_1_org)
823 						return -ENOMEM;
824 					mem_allocated += size;
825 					tmp = (unsigned long)ba->ba_1_org;
826 					tmp += ALIGN_SIZE;
827 					tmp &= ~((unsigned long)ALIGN_SIZE);
828 					ba->ba_1 = (void *)tmp;
829 					k++;
830 				}
831 			}
832 		}
833 	}
834 
835 	/* Allocation and initialization of Statistics block */
836 	size = sizeof(struct stat_block);
837 	mac_control->stats_mem =
838 		pci_alloc_consistent(nic->pdev, size,
839 				     &mac_control->stats_mem_phy);
840 
841 	if (!mac_control->stats_mem) {
842 		/*
843 		 * In case of failure, free_shared_mem() is called, which
844 		 * should free any memory that was alloced till the
845 		 * failure happened.
846 		 */
847 		return -ENOMEM;
848 	}
849 	mem_allocated += size;
850 	mac_control->stats_mem_sz = size;
851 
852 	tmp_v_addr = mac_control->stats_mem;
853 	mac_control->stats_info = tmp_v_addr;
854 	memset(tmp_v_addr, 0, size);
855 	DBG_PRINT(INIT_DBG, "%s: Ring Mem PHY: 0x%llx\n",
856 		dev_name(&nic->pdev->dev), (unsigned long long)tmp_p_addr);
857 	mac_control->stats_info->sw_stat.mem_allocated += mem_allocated;
858 	return SUCCESS;
859 }
860 
861 /**
862  * free_shared_mem - Free the allocated Memory
863  * @nic:  Device private variable.
864  * Description: This function is to free all memory locations allocated by
865  * the init_shared_mem() function and return it to the kernel.
866  */
867 
868 static void free_shared_mem(struct s2io_nic *nic)
869 {
870 	int i, j, blk_cnt, size;
871 	void *tmp_v_addr;
872 	dma_addr_t tmp_p_addr;
873 	int lst_size, lst_per_page;
874 	struct net_device *dev;
875 	int page_num = 0;
876 	struct config_param *config;
877 	struct mac_info *mac_control;
878 	struct stat_block *stats;
879 	struct swStat *swstats;
880 
881 	if (!nic)
882 		return;
883 
884 	dev = nic->dev;
885 
886 	config = &nic->config;
887 	mac_control = &nic->mac_control;
888 	stats = mac_control->stats_info;
889 	swstats = &stats->sw_stat;
890 
891 	lst_size = sizeof(struct TxD) * config->max_txds;
892 	lst_per_page = PAGE_SIZE / lst_size;
893 
894 	for (i = 0; i < config->tx_fifo_num; i++) {
895 		struct fifo_info *fifo = &mac_control->fifos[i];
896 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
897 
898 		page_num = TXD_MEM_PAGE_CNT(tx_cfg->fifo_len, lst_per_page);
899 		for (j = 0; j < page_num; j++) {
900 			int mem_blks = (j * lst_per_page);
901 			struct list_info_hold *fli;
902 
903 			if (!fifo->list_info)
904 				return;
905 
906 			fli = &fifo->list_info[mem_blks];
907 			if (!fli->list_virt_addr)
908 				break;
909 			pci_free_consistent(nic->pdev, PAGE_SIZE,
910 					    fli->list_virt_addr,
911 					    fli->list_phy_addr);
912 			swstats->mem_freed += PAGE_SIZE;
913 		}
914 		/* If we got a zero DMA address during allocation,
915 		 * free the page now
916 		 */
917 		if (mac_control->zerodma_virt_addr) {
918 			pci_free_consistent(nic->pdev, PAGE_SIZE,
919 					    mac_control->zerodma_virt_addr,
920 					    (dma_addr_t)0);
921 			DBG_PRINT(INIT_DBG,
922 				  "%s: Freeing TxDL with zero DMA address. "
923 				  "Virtual address %p\n",
924 				  dev->name, mac_control->zerodma_virt_addr);
925 			swstats->mem_freed += PAGE_SIZE;
926 		}
927 		kfree(fifo->list_info);
928 		swstats->mem_freed += tx_cfg->fifo_len *
929 			sizeof(struct list_info_hold);
930 	}
931 
932 	size = SIZE_OF_BLOCK;
933 	for (i = 0; i < config->rx_ring_num; i++) {
934 		struct ring_info *ring = &mac_control->rings[i];
935 
936 		blk_cnt = ring->block_count;
937 		for (j = 0; j < blk_cnt; j++) {
938 			tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
939 			tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
940 			if (tmp_v_addr == NULL)
941 				break;
942 			pci_free_consistent(nic->pdev, size,
943 					    tmp_v_addr, tmp_p_addr);
944 			swstats->mem_freed += size;
945 			kfree(ring->rx_blocks[j].rxds);
946 			swstats->mem_freed += sizeof(struct rxd_info) *
947 				rxd_count[nic->rxd_mode];
948 		}
949 	}
950 
951 	if (nic->rxd_mode == RXD_MODE_3B) {
952 		/* Freeing buffer storage addresses in 2BUFF mode. */
953 		for (i = 0; i < config->rx_ring_num; i++) {
954 			struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
955 			struct ring_info *ring = &mac_control->rings[i];
956 
957 			blk_cnt = rx_cfg->num_rxd /
958 				(rxd_count[nic->rxd_mode] + 1);
959 			for (j = 0; j < blk_cnt; j++) {
960 				int k = 0;
961 				if (!ring->ba[j])
962 					continue;
963 				while (k != rxd_count[nic->rxd_mode]) {
964 					struct buffAdd *ba = &ring->ba[j][k];
965 					kfree(ba->ba_0_org);
966 					swstats->mem_freed +=
967 						BUF0_LEN + ALIGN_SIZE;
968 					kfree(ba->ba_1_org);
969 					swstats->mem_freed +=
970 						BUF1_LEN + ALIGN_SIZE;
971 					k++;
972 				}
973 				kfree(ring->ba[j]);
974 				swstats->mem_freed += sizeof(struct buffAdd) *
975 					(rxd_count[nic->rxd_mode] + 1);
976 			}
977 			kfree(ring->ba);
978 			swstats->mem_freed += sizeof(struct buffAdd *) *
979 				blk_cnt;
980 		}
981 	}
982 
983 	for (i = 0; i < nic->config.tx_fifo_num; i++) {
984 		struct fifo_info *fifo = &mac_control->fifos[i];
985 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
986 
987 		if (fifo->ufo_in_band_v) {
988 			swstats->mem_freed += tx_cfg->fifo_len *
989 				sizeof(u64);
990 			kfree(fifo->ufo_in_band_v);
991 		}
992 	}
993 
994 	if (mac_control->stats_mem) {
995 		swstats->mem_freed += mac_control->stats_mem_sz;
996 		pci_free_consistent(nic->pdev,
997 				    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 		pci_unmap_single(nic->pdev, (dma_addr_t)txds->Buffer_Pointer,
2320 				 sizeof(u64), PCI_DMA_TODEVICE);
2321 		txds++;
2322 	}
2323 
2324 	skb = (struct sk_buff *)((unsigned long)txds->Host_Control);
2325 	if (!skb) {
2326 		memset(txdlp, 0, (sizeof(struct TxD) * fifo_data->max_txds));
2327 		return NULL;
2328 	}
2329 	pci_unmap_single(nic->pdev, (dma_addr_t)txds->Buffer_Pointer,
2330 			 skb_headlen(skb), PCI_DMA_TODEVICE);
2331 	frg_cnt = skb_shinfo(skb)->nr_frags;
2332 	if (frg_cnt) {
2333 		txds++;
2334 		for (j = 0; j < frg_cnt; j++, txds++) {
2335 			const skb_frag_t *frag = &skb_shinfo(skb)->frags[j];
2336 			if (!txds->Buffer_Pointer)
2337 				break;
2338 			pci_unmap_page(nic->pdev,
2339 				       (dma_addr_t)txds->Buffer_Pointer,
2340 				       skb_frag_size(frag), PCI_DMA_TODEVICE);
2341 		}
2342 	}
2343 	memset(txdlp, 0, (sizeof(struct TxD) * fifo_data->max_txds));
2344 	return skb;
2345 }
2346 
2347 /**
2348  *  free_tx_buffers - Free all queued Tx buffers
2349  *  @nic : device private variable.
2350  *  Description:
2351  *  Free all queued Tx buffers.
2352  *  Return Value: void
2353  */
2354 
2355 static void free_tx_buffers(struct s2io_nic *nic)
2356 {
2357 	struct net_device *dev = nic->dev;
2358 	struct sk_buff *skb;
2359 	struct TxD *txdp;
2360 	int i, j;
2361 	int cnt = 0;
2362 	struct config_param *config = &nic->config;
2363 	struct mac_info *mac_control = &nic->mac_control;
2364 	struct stat_block *stats = mac_control->stats_info;
2365 	struct swStat *swstats = &stats->sw_stat;
2366 
2367 	for (i = 0; i < config->tx_fifo_num; i++) {
2368 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
2369 		struct fifo_info *fifo = &mac_control->fifos[i];
2370 		unsigned long flags;
2371 
2372 		spin_lock_irqsave(&fifo->tx_lock, flags);
2373 		for (j = 0; j < tx_cfg->fifo_len; j++) {
2374 			txdp = fifo->list_info[j].list_virt_addr;
2375 			skb = s2io_txdl_getskb(&mac_control->fifos[i], txdp, j);
2376 			if (skb) {
2377 				swstats->mem_freed += skb->truesize;
2378 				dev_kfree_skb(skb);
2379 				cnt++;
2380 			}
2381 		}
2382 		DBG_PRINT(INTR_DBG,
2383 			  "%s: forcibly freeing %d skbs on FIFO%d\n",
2384 			  dev->name, cnt, i);
2385 		fifo->tx_curr_get_info.offset = 0;
2386 		fifo->tx_curr_put_info.offset = 0;
2387 		spin_unlock_irqrestore(&fifo->tx_lock, flags);
2388 	}
2389 }
2390 
2391 /**
2392  *   stop_nic -  To stop the nic
2393  *   @nic ; device private variable.
2394  *   Description:
2395  *   This function does exactly the opposite of what the start_nic()
2396  *   function does. This function is called to stop the device.
2397  *   Return Value:
2398  *   void.
2399  */
2400 
2401 static void stop_nic(struct s2io_nic *nic)
2402 {
2403 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2404 	register u64 val64 = 0;
2405 	u16 interruptible;
2406 
2407 	/*  Disable all interrupts */
2408 	en_dis_err_alarms(nic, ENA_ALL_INTRS, DISABLE_INTRS);
2409 	interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR;
2410 	interruptible |= TX_PIC_INTR;
2411 	en_dis_able_nic_intrs(nic, interruptible, DISABLE_INTRS);
2412 
2413 	/* Clearing Adapter_En bit of ADAPTER_CONTROL Register */
2414 	val64 = readq(&bar0->adapter_control);
2415 	val64 &= ~(ADAPTER_CNTL_EN);
2416 	writeq(val64, &bar0->adapter_control);
2417 }
2418 
2419 /**
2420  *  fill_rx_buffers - Allocates the Rx side skbs
2421  *  @ring_info: per ring structure
2422  *  @from_card_up: If this is true, we will map the buffer to get
2423  *     the dma address for buf0 and buf1 to give it to the card.
2424  *     Else we will sync the already mapped buffer to give it to the card.
2425  *  Description:
2426  *  The function allocates Rx side skbs and puts the physical
2427  *  address of these buffers into the RxD buffer pointers, so that the NIC
2428  *  can DMA the received frame into these locations.
2429  *  The NIC supports 3 receive modes, viz
2430  *  1. single buffer,
2431  *  2. three buffer and
2432  *  3. Five buffer modes.
2433  *  Each mode defines how many fragments the received frame will be split
2434  *  up into by the NIC. The frame is split into L3 header, L4 Header,
2435  *  L4 payload in three buffer mode and in 5 buffer mode, L4 payload itself
2436  *  is split into 3 fragments. As of now only single buffer mode is
2437  *  supported.
2438  *   Return Value:
2439  *  SUCCESS on success or an appropriate -ve value on failure.
2440  */
2441 static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
2442 			   int from_card_up)
2443 {
2444 	struct sk_buff *skb;
2445 	struct RxD_t *rxdp;
2446 	int off, size, block_no, block_no1;
2447 	u32 alloc_tab = 0;
2448 	u32 alloc_cnt;
2449 	u64 tmp;
2450 	struct buffAdd *ba;
2451 	struct RxD_t *first_rxdp = NULL;
2452 	u64 Buffer0_ptr = 0, Buffer1_ptr = 0;
2453 	struct RxD1 *rxdp1;
2454 	struct RxD3 *rxdp3;
2455 	struct swStat *swstats = &ring->nic->mac_control.stats_info->sw_stat;
2456 
2457 	alloc_cnt = ring->pkt_cnt - ring->rx_bufs_left;
2458 
2459 	block_no1 = ring->rx_curr_get_info.block_index;
2460 	while (alloc_tab < alloc_cnt) {
2461 		block_no = ring->rx_curr_put_info.block_index;
2462 
2463 		off = ring->rx_curr_put_info.offset;
2464 
2465 		rxdp = ring->rx_blocks[block_no].rxds[off].virt_addr;
2466 
2467 		if ((block_no == block_no1) &&
2468 		    (off == ring->rx_curr_get_info.offset) &&
2469 		    (rxdp->Host_Control)) {
2470 			DBG_PRINT(INTR_DBG, "%s: Get and Put info equated\n",
2471 				  ring->dev->name);
2472 			goto end;
2473 		}
2474 		if (off && (off == ring->rxd_count)) {
2475 			ring->rx_curr_put_info.block_index++;
2476 			if (ring->rx_curr_put_info.block_index ==
2477 			    ring->block_count)
2478 				ring->rx_curr_put_info.block_index = 0;
2479 			block_no = ring->rx_curr_put_info.block_index;
2480 			off = 0;
2481 			ring->rx_curr_put_info.offset = off;
2482 			rxdp = ring->rx_blocks[block_no].block_virt_addr;
2483 			DBG_PRINT(INTR_DBG, "%s: Next block at: %p\n",
2484 				  ring->dev->name, rxdp);
2485 
2486 		}
2487 
2488 		if ((rxdp->Control_1 & RXD_OWN_XENA) &&
2489 		    ((ring->rxd_mode == RXD_MODE_3B) &&
2490 		     (rxdp->Control_2 & s2BIT(0)))) {
2491 			ring->rx_curr_put_info.offset = off;
2492 			goto end;
2493 		}
2494 		/* calculate size of skb based on ring mode */
2495 		size = ring->mtu +
2496 			HEADER_ETHERNET_II_802_3_SIZE +
2497 			HEADER_802_2_SIZE + HEADER_SNAP_SIZE;
2498 		if (ring->rxd_mode == RXD_MODE_1)
2499 			size += NET_IP_ALIGN;
2500 		else
2501 			size = ring->mtu + ALIGN_SIZE + BUF0_LEN + 4;
2502 
2503 		/* allocate skb */
2504 		skb = netdev_alloc_skb(nic->dev, size);
2505 		if (!skb) {
2506 			DBG_PRINT(INFO_DBG, "%s: Could not allocate skb\n",
2507 				  ring->dev->name);
2508 			if (first_rxdp) {
2509 				dma_wmb();
2510 				first_rxdp->Control_1 |= RXD_OWN_XENA;
2511 			}
2512 			swstats->mem_alloc_fail_cnt++;
2513 
2514 			return -ENOMEM ;
2515 		}
2516 		swstats->mem_allocated += skb->truesize;
2517 
2518 		if (ring->rxd_mode == RXD_MODE_1) {
2519 			/* 1 buffer mode - normal operation mode */
2520 			rxdp1 = (struct RxD1 *)rxdp;
2521 			memset(rxdp, 0, sizeof(struct RxD1));
2522 			skb_reserve(skb, NET_IP_ALIGN);
2523 			rxdp1->Buffer0_ptr =
2524 				pci_map_single(ring->pdev, skb->data,
2525 					       size - NET_IP_ALIGN,
2526 					       PCI_DMA_FROMDEVICE);
2527 			if (pci_dma_mapping_error(nic->pdev,
2528 						  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 					pci_map_single(ring->pdev, ba->ba_0,
2561 						       BUF0_LEN,
2562 						       PCI_DMA_FROMDEVICE);
2563 				if (pci_dma_mapping_error(nic->pdev,
2564 							  rxdp3->Buffer0_ptr))
2565 					goto pci_map_failed;
2566 			} else
2567 				pci_dma_sync_single_for_device(ring->pdev,
2568 							       (dma_addr_t)rxdp3->Buffer0_ptr,
2569 							       BUF0_LEN,
2570 							       PCI_DMA_FROMDEVICE);
2571 
2572 			rxdp->Control_2 = SET_BUFFER0_SIZE_3(BUF0_LEN);
2573 			if (ring->rxd_mode == RXD_MODE_3B) {
2574 				/* Two buffer mode */
2575 
2576 				/*
2577 				 * Buffer2 will have L3/L4 header plus
2578 				 * L4 payload
2579 				 */
2580 				rxdp3->Buffer2_ptr = pci_map_single(ring->pdev,
2581 								    skb->data,
2582 								    ring->mtu + 4,
2583 								    PCI_DMA_FROMDEVICE);
2584 
2585 				if (pci_dma_mapping_error(nic->pdev,
2586 							  rxdp3->Buffer2_ptr))
2587 					goto pci_map_failed;
2588 
2589 				if (from_card_up) {
2590 					rxdp3->Buffer1_ptr =
2591 						pci_map_single(ring->pdev,
2592 							       ba->ba_1,
2593 							       BUF1_LEN,
2594 							       PCI_DMA_FROMDEVICE);
2595 
2596 					if (pci_dma_mapping_error(nic->pdev,
2597 								  rxdp3->Buffer1_ptr)) {
2598 						pci_unmap_single(ring->pdev,
2599 								 (dma_addr_t)(unsigned long)
2600 								 skb->data,
2601 								 ring->mtu + 4,
2602 								 PCI_DMA_FROMDEVICE);
2603 						goto pci_map_failed;
2604 					}
2605 				}
2606 				rxdp->Control_2 |= SET_BUFFER1_SIZE_3(1);
2607 				rxdp->Control_2 |= SET_BUFFER2_SIZE_3
2608 					(ring->mtu + 4);
2609 			}
2610 			rxdp->Control_2 |= s2BIT(0);
2611 			rxdp->Host_Control = (unsigned long) (skb);
2612 		}
2613 		if (alloc_tab & ((1 << rxsync_frequency) - 1))
2614 			rxdp->Control_1 |= RXD_OWN_XENA;
2615 		off++;
2616 		if (off == (ring->rxd_count + 1))
2617 			off = 0;
2618 		ring->rx_curr_put_info.offset = off;
2619 
2620 		rxdp->Control_2 |= SET_RXD_MARKER;
2621 		if (!(alloc_tab & ((1 << rxsync_frequency) - 1))) {
2622 			if (first_rxdp) {
2623 				dma_wmb();
2624 				first_rxdp->Control_1 |= RXD_OWN_XENA;
2625 			}
2626 			first_rxdp = rxdp;
2627 		}
2628 		ring->rx_bufs_left += 1;
2629 		alloc_tab++;
2630 	}
2631 
2632 end:
2633 	/* Transfer ownership of first descriptor to adapter just before
2634 	 * exiting. Before that, use memory barrier so that ownership
2635 	 * and other fields are seen by adapter correctly.
2636 	 */
2637 	if (first_rxdp) {
2638 		dma_wmb();
2639 		first_rxdp->Control_1 |= RXD_OWN_XENA;
2640 	}
2641 
2642 	return SUCCESS;
2643 
2644 pci_map_failed:
2645 	swstats->pci_map_fail_cnt++;
2646 	swstats->mem_freed += skb->truesize;
2647 	dev_kfree_skb_irq(skb);
2648 	return -ENOMEM;
2649 }
2650 
2651 static void free_rxd_blk(struct s2io_nic *sp, int ring_no, int blk)
2652 {
2653 	struct net_device *dev = sp->dev;
2654 	int j;
2655 	struct sk_buff *skb;
2656 	struct RxD_t *rxdp;
2657 	struct RxD1 *rxdp1;
2658 	struct RxD3 *rxdp3;
2659 	struct mac_info *mac_control = &sp->mac_control;
2660 	struct stat_block *stats = mac_control->stats_info;
2661 	struct swStat *swstats = &stats->sw_stat;
2662 
2663 	for (j = 0 ; j < rxd_count[sp->rxd_mode]; j++) {
2664 		rxdp = mac_control->rings[ring_no].
2665 			rx_blocks[blk].rxds[j].virt_addr;
2666 		skb = (struct sk_buff *)((unsigned long)rxdp->Host_Control);
2667 		if (!skb)
2668 			continue;
2669 		if (sp->rxd_mode == RXD_MODE_1) {
2670 			rxdp1 = (struct RxD1 *)rxdp;
2671 			pci_unmap_single(sp->pdev,
2672 					 (dma_addr_t)rxdp1->Buffer0_ptr,
2673 					 dev->mtu +
2674 					 HEADER_ETHERNET_II_802_3_SIZE +
2675 					 HEADER_802_2_SIZE + HEADER_SNAP_SIZE,
2676 					 PCI_DMA_FROMDEVICE);
2677 			memset(rxdp, 0, sizeof(struct RxD1));
2678 		} else if (sp->rxd_mode == RXD_MODE_3B) {
2679 			rxdp3 = (struct RxD3 *)rxdp;
2680 			pci_unmap_single(sp->pdev,
2681 					 (dma_addr_t)rxdp3->Buffer0_ptr,
2682 					 BUF0_LEN,
2683 					 PCI_DMA_FROMDEVICE);
2684 			pci_unmap_single(sp->pdev,
2685 					 (dma_addr_t)rxdp3->Buffer1_ptr,
2686 					 BUF1_LEN,
2687 					 PCI_DMA_FROMDEVICE);
2688 			pci_unmap_single(sp->pdev,
2689 					 (dma_addr_t)rxdp3->Buffer2_ptr,
2690 					 dev->mtu + 4,
2691 					 PCI_DMA_FROMDEVICE);
2692 			memset(rxdp, 0, sizeof(struct RxD3));
2693 		}
2694 		swstats->mem_freed += skb->truesize;
2695 		dev_kfree_skb(skb);
2696 		mac_control->rings[ring_no].rx_bufs_left -= 1;
2697 	}
2698 }
2699 
2700 /**
2701  *  free_rx_buffers - Frees all Rx buffers
2702  *  @sp: device private variable.
2703  *  Description:
2704  *  This function will free all Rx buffers allocated by host.
2705  *  Return Value:
2706  *  NONE.
2707  */
2708 
2709 static void free_rx_buffers(struct s2io_nic *sp)
2710 {
2711 	struct net_device *dev = sp->dev;
2712 	int i, blk = 0, buf_cnt = 0;
2713 	struct config_param *config = &sp->config;
2714 	struct mac_info *mac_control = &sp->mac_control;
2715 
2716 	for (i = 0; i < config->rx_ring_num; i++) {
2717 		struct ring_info *ring = &mac_control->rings[i];
2718 
2719 		for (blk = 0; blk < rx_ring_sz[i]; blk++)
2720 			free_rxd_blk(sp, i, blk);
2721 
2722 		ring->rx_curr_put_info.block_index = 0;
2723 		ring->rx_curr_get_info.block_index = 0;
2724 		ring->rx_curr_put_info.offset = 0;
2725 		ring->rx_curr_get_info.offset = 0;
2726 		ring->rx_bufs_left = 0;
2727 		DBG_PRINT(INIT_DBG, "%s: Freed 0x%x Rx Buffers on ring%d\n",
2728 			  dev->name, buf_cnt, i);
2729 	}
2730 }
2731 
2732 static int s2io_chk_rx_buffers(struct s2io_nic *nic, struct ring_info *ring)
2733 {
2734 	if (fill_rx_buffers(nic, ring, 0) == -ENOMEM) {
2735 		DBG_PRINT(INFO_DBG, "%s: Out of memory in Rx Intr!!\n",
2736 			  ring->dev->name);
2737 	}
2738 	return 0;
2739 }
2740 
2741 /**
2742  * s2io_poll - Rx interrupt handler for NAPI support
2743  * @napi : pointer to the napi structure.
2744  * @budget : The number of packets that were budgeted to be processed
2745  * during  one pass through the 'Poll" function.
2746  * Description:
2747  * Comes into picture only if NAPI support has been incorporated. It does
2748  * the same thing that rx_intr_handler does, but not in a interrupt context
2749  * also It will process only a given number of packets.
2750  * Return value:
2751  * 0 on success and 1 if there are No Rx packets to be processed.
2752  */
2753 
2754 static int s2io_poll_msix(struct napi_struct *napi, int budget)
2755 {
2756 	struct ring_info *ring = container_of(napi, struct ring_info, napi);
2757 	struct net_device *dev = ring->dev;
2758 	int pkts_processed = 0;
2759 	u8 __iomem *addr = NULL;
2760 	u8 val8 = 0;
2761 	struct s2io_nic *nic = netdev_priv(dev);
2762 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2763 	int budget_org = budget;
2764 
2765 	if (unlikely(!is_s2io_card_up(nic)))
2766 		return 0;
2767 
2768 	pkts_processed = rx_intr_handler(ring, budget);
2769 	s2io_chk_rx_buffers(nic, ring);
2770 
2771 	if (pkts_processed < budget_org) {
2772 		napi_complete_done(napi, pkts_processed);
2773 		/*Re Enable MSI-Rx Vector*/
2774 		addr = (u8 __iomem *)&bar0->xmsi_mask_reg;
2775 		addr += 7 - ring->ring_no;
2776 		val8 = (ring->ring_no == 0) ? 0x3f : 0xbf;
2777 		writeb(val8, addr);
2778 		val8 = readb(addr);
2779 	}
2780 	return pkts_processed;
2781 }
2782 
2783 static int s2io_poll_inta(struct napi_struct *napi, int budget)
2784 {
2785 	struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi);
2786 	int pkts_processed = 0;
2787 	int ring_pkts_processed, i;
2788 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2789 	int budget_org = budget;
2790 	struct config_param *config = &nic->config;
2791 	struct mac_info *mac_control = &nic->mac_control;
2792 
2793 	if (unlikely(!is_s2io_card_up(nic)))
2794 		return 0;
2795 
2796 	for (i = 0; i < config->rx_ring_num; i++) {
2797 		struct ring_info *ring = &mac_control->rings[i];
2798 		ring_pkts_processed = rx_intr_handler(ring, budget);
2799 		s2io_chk_rx_buffers(nic, ring);
2800 		pkts_processed += ring_pkts_processed;
2801 		budget -= ring_pkts_processed;
2802 		if (budget <= 0)
2803 			break;
2804 	}
2805 	if (pkts_processed < budget_org) {
2806 		napi_complete_done(napi, pkts_processed);
2807 		/* Re enable the Rx interrupts for the ring */
2808 		writeq(0, &bar0->rx_traffic_mask);
2809 		readl(&bar0->rx_traffic_mask);
2810 	}
2811 	return pkts_processed;
2812 }
2813 
2814 #ifdef CONFIG_NET_POLL_CONTROLLER
2815 /**
2816  * s2io_netpoll - netpoll event handler entry point
2817  * @dev : pointer to the device structure.
2818  * Description:
2819  * 	This function will be called by upper layer to check for events on the
2820  * interface in situations where interrupts are disabled. It is used for
2821  * specific in-kernel networking tasks, such as remote consoles and kernel
2822  * debugging over the network (example netdump in RedHat).
2823  */
2824 static void s2io_netpoll(struct net_device *dev)
2825 {
2826 	struct s2io_nic *nic = netdev_priv(dev);
2827 	const int irq = nic->pdev->irq;
2828 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
2829 	u64 val64 = 0xFFFFFFFFFFFFFFFFULL;
2830 	int i;
2831 	struct config_param *config = &nic->config;
2832 	struct mac_info *mac_control = &nic->mac_control;
2833 
2834 	if (pci_channel_offline(nic->pdev))
2835 		return;
2836 
2837 	disable_irq(irq);
2838 
2839 	writeq(val64, &bar0->rx_traffic_int);
2840 	writeq(val64, &bar0->tx_traffic_int);
2841 
2842 	/* we need to free up the transmitted skbufs or else netpoll will
2843 	 * run out of skbs and will fail and eventually netpoll application such
2844 	 * as netdump will fail.
2845 	 */
2846 	for (i = 0; i < config->tx_fifo_num; i++)
2847 		tx_intr_handler(&mac_control->fifos[i]);
2848 
2849 	/* check for received packet and indicate up to network */
2850 	for (i = 0; i < config->rx_ring_num; i++) {
2851 		struct ring_info *ring = &mac_control->rings[i];
2852 
2853 		rx_intr_handler(ring, 0);
2854 	}
2855 
2856 	for (i = 0; i < config->rx_ring_num; i++) {
2857 		struct ring_info *ring = &mac_control->rings[i];
2858 
2859 		if (fill_rx_buffers(nic, ring, 0) == -ENOMEM) {
2860 			DBG_PRINT(INFO_DBG,
2861 				  "%s: Out of memory in Rx Netpoll!!\n",
2862 				  dev->name);
2863 			break;
2864 		}
2865 	}
2866 	enable_irq(irq);
2867 }
2868 #endif
2869 
2870 /**
2871  *  rx_intr_handler - Rx interrupt handler
2872  *  @ring_info: per ring structure.
2873  *  @budget: budget for napi processing.
2874  *  Description:
2875  *  If the interrupt is because of a received frame or if the
2876  *  receive ring contains fresh as yet un-processed frames,this function is
2877  *  called. It picks out the RxD at which place the last Rx processing had
2878  *  stopped and sends the skb to the OSM's Rx handler and then increments
2879  *  the offset.
2880  *  Return Value:
2881  *  No. of napi packets processed.
2882  */
2883 static int rx_intr_handler(struct ring_info *ring_data, int budget)
2884 {
2885 	int get_block, put_block;
2886 	struct rx_curr_get_info get_info, put_info;
2887 	struct RxD_t *rxdp;
2888 	struct sk_buff *skb;
2889 	int pkt_cnt = 0, napi_pkts = 0;
2890 	int i;
2891 	struct RxD1 *rxdp1;
2892 	struct RxD3 *rxdp3;
2893 
2894 	if (budget <= 0)
2895 		return napi_pkts;
2896 
2897 	get_info = ring_data->rx_curr_get_info;
2898 	get_block = get_info.block_index;
2899 	memcpy(&put_info, &ring_data->rx_curr_put_info, sizeof(put_info));
2900 	put_block = put_info.block_index;
2901 	rxdp = ring_data->rx_blocks[get_block].rxds[get_info.offset].virt_addr;
2902 
2903 	while (RXD_IS_UP2DT(rxdp)) {
2904 		/*
2905 		 * If your are next to put index then it's
2906 		 * FIFO full condition
2907 		 */
2908 		if ((get_block == put_block) &&
2909 		    (get_info.offset + 1) == put_info.offset) {
2910 			DBG_PRINT(INTR_DBG, "%s: Ring Full\n",
2911 				  ring_data->dev->name);
2912 			break;
2913 		}
2914 		skb = (struct sk_buff *)((unsigned long)rxdp->Host_Control);
2915 		if (skb == NULL) {
2916 			DBG_PRINT(ERR_DBG, "%s: NULL skb in Rx Intr\n",
2917 				  ring_data->dev->name);
2918 			return 0;
2919 		}
2920 		if (ring_data->rxd_mode == RXD_MODE_1) {
2921 			rxdp1 = (struct RxD1 *)rxdp;
2922 			pci_unmap_single(ring_data->pdev, (dma_addr_t)
2923 					 rxdp1->Buffer0_ptr,
2924 					 ring_data->mtu +
2925 					 HEADER_ETHERNET_II_802_3_SIZE +
2926 					 HEADER_802_2_SIZE +
2927 					 HEADER_SNAP_SIZE,
2928 					 PCI_DMA_FROMDEVICE);
2929 		} else if (ring_data->rxd_mode == RXD_MODE_3B) {
2930 			rxdp3 = (struct RxD3 *)rxdp;
2931 			pci_dma_sync_single_for_cpu(ring_data->pdev,
2932 						    (dma_addr_t)rxdp3->Buffer0_ptr,
2933 						    BUF0_LEN,
2934 						    PCI_DMA_FROMDEVICE);
2935 			pci_unmap_single(ring_data->pdev,
2936 					 (dma_addr_t)rxdp3->Buffer2_ptr,
2937 					 ring_data->mtu + 4,
2938 					 PCI_DMA_FROMDEVICE);
2939 		}
2940 		prefetch(skb->data);
2941 		rx_osm_handler(ring_data, rxdp);
2942 		get_info.offset++;
2943 		ring_data->rx_curr_get_info.offset = get_info.offset;
2944 		rxdp = ring_data->rx_blocks[get_block].
2945 			rxds[get_info.offset].virt_addr;
2946 		if (get_info.offset == rxd_count[ring_data->rxd_mode]) {
2947 			get_info.offset = 0;
2948 			ring_data->rx_curr_get_info.offset = get_info.offset;
2949 			get_block++;
2950 			if (get_block == ring_data->block_count)
2951 				get_block = 0;
2952 			ring_data->rx_curr_get_info.block_index = get_block;
2953 			rxdp = ring_data->rx_blocks[get_block].block_virt_addr;
2954 		}
2955 
2956 		if (ring_data->nic->config.napi) {
2957 			budget--;
2958 			napi_pkts++;
2959 			if (!budget)
2960 				break;
2961 		}
2962 		pkt_cnt++;
2963 		if ((indicate_max_pkts) && (pkt_cnt > indicate_max_pkts))
2964 			break;
2965 	}
2966 	if (ring_data->lro) {
2967 		/* Clear all LRO sessions before exiting */
2968 		for (i = 0; i < MAX_LRO_SESSIONS; i++) {
2969 			struct lro *lro = &ring_data->lro0_n[i];
2970 			if (lro->in_use) {
2971 				update_L3L4_header(ring_data->nic, lro);
2972 				queue_rx_frame(lro->parent, lro->vlan_tag);
2973 				clear_lro_session(lro);
2974 			}
2975 		}
2976 	}
2977 	return napi_pkts;
2978 }
2979 
2980 /**
2981  *  tx_intr_handler - Transmit interrupt handler
2982  *  @nic : device private variable
2983  *  Description:
2984  *  If an interrupt was raised to indicate DMA complete of the
2985  *  Tx packet, this function is called. It identifies the last TxD
2986  *  whose buffer was freed and frees all skbs whose data have already
2987  *  DMA'ed into the NICs internal memory.
2988  *  Return Value:
2989  *  NONE
2990  */
2991 
2992 static void tx_intr_handler(struct fifo_info *fifo_data)
2993 {
2994 	struct s2io_nic *nic = fifo_data->nic;
2995 	struct tx_curr_get_info get_info, put_info;
2996 	struct sk_buff *skb = NULL;
2997 	struct TxD *txdlp;
2998 	int pkt_cnt = 0;
2999 	unsigned long flags = 0;
3000 	u8 err_mask;
3001 	struct stat_block *stats = nic->mac_control.stats_info;
3002 	struct swStat *swstats = &stats->sw_stat;
3003 
3004 	if (!spin_trylock_irqsave(&fifo_data->tx_lock, flags))
3005 		return;
3006 
3007 	get_info = fifo_data->tx_curr_get_info;
3008 	memcpy(&put_info, &fifo_data->tx_curr_put_info, sizeof(put_info));
3009 	txdlp = fifo_data->list_info[get_info.offset].list_virt_addr;
3010 	while ((!(txdlp->Control_1 & TXD_LIST_OWN_XENA)) &&
3011 	       (get_info.offset != put_info.offset) &&
3012 	       (txdlp->Host_Control)) {
3013 		/* Check for TxD errors */
3014 		if (txdlp->Control_1 & TXD_T_CODE) {
3015 			unsigned long long err;
3016 			err = txdlp->Control_1 & TXD_T_CODE;
3017 			if (err & 0x1) {
3018 				swstats->parity_err_cnt++;
3019 			}
3020 
3021 			/* update t_code statistics */
3022 			err_mask = err >> 48;
3023 			switch (err_mask) {
3024 			case 2:
3025 				swstats->tx_buf_abort_cnt++;
3026 				break;
3027 
3028 			case 3:
3029 				swstats->tx_desc_abort_cnt++;
3030 				break;
3031 
3032 			case 7:
3033 				swstats->tx_parity_err_cnt++;
3034 				break;
3035 
3036 			case 10:
3037 				swstats->tx_link_loss_cnt++;
3038 				break;
3039 
3040 			case 15:
3041 				swstats->tx_list_proc_err_cnt++;
3042 				break;
3043 			}
3044 		}
3045 
3046 		skb = s2io_txdl_getskb(fifo_data, txdlp, get_info.offset);
3047 		if (skb == NULL) {
3048 			spin_unlock_irqrestore(&fifo_data->tx_lock, flags);
3049 			DBG_PRINT(ERR_DBG, "%s: NULL skb in Tx Free Intr\n",
3050 				  __func__);
3051 			return;
3052 		}
3053 		pkt_cnt++;
3054 
3055 		/* Updating the statistics block */
3056 		swstats->mem_freed += skb->truesize;
3057 		dev_consume_skb_irq(skb);
3058 
3059 		get_info.offset++;
3060 		if (get_info.offset == get_info.fifo_len + 1)
3061 			get_info.offset = 0;
3062 		txdlp = fifo_data->list_info[get_info.offset].list_virt_addr;
3063 		fifo_data->tx_curr_get_info.offset = get_info.offset;
3064 	}
3065 
3066 	s2io_wake_tx_queue(fifo_data, pkt_cnt, nic->config.multiq);
3067 
3068 	spin_unlock_irqrestore(&fifo_data->tx_lock, flags);
3069 }
3070 
3071 /**
3072  *  s2io_mdio_write - Function to write in to MDIO registers
3073  *  @mmd_type : MMD type value (PMA/PMD/WIS/PCS/PHYXS)
3074  *  @addr     : address value
3075  *  @value    : data value
3076  *  @dev      : pointer to net_device structure
3077  *  Description:
3078  *  This function is used to write values to the MDIO registers
3079  *  NONE
3080  */
3081 static void s2io_mdio_write(u32 mmd_type, u64 addr, u16 value,
3082 			    struct net_device *dev)
3083 {
3084 	u64 val64;
3085 	struct s2io_nic *sp = netdev_priv(dev);
3086 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3087 
3088 	/* address transaction */
3089 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3090 		MDIO_MMD_DEV_ADDR(mmd_type) |
3091 		MDIO_MMS_PRT_ADDR(0x0);
3092 	writeq(val64, &bar0->mdio_control);
3093 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3094 	writeq(val64, &bar0->mdio_control);
3095 	udelay(100);
3096 
3097 	/* Data transaction */
3098 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3099 		MDIO_MMD_DEV_ADDR(mmd_type) |
3100 		MDIO_MMS_PRT_ADDR(0x0) |
3101 		MDIO_MDIO_DATA(value) |
3102 		MDIO_OP(MDIO_OP_WRITE_TRANS);
3103 	writeq(val64, &bar0->mdio_control);
3104 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3105 	writeq(val64, &bar0->mdio_control);
3106 	udelay(100);
3107 
3108 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3109 		MDIO_MMD_DEV_ADDR(mmd_type) |
3110 		MDIO_MMS_PRT_ADDR(0x0) |
3111 		MDIO_OP(MDIO_OP_READ_TRANS);
3112 	writeq(val64, &bar0->mdio_control);
3113 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3114 	writeq(val64, &bar0->mdio_control);
3115 	udelay(100);
3116 }
3117 
3118 /**
3119  *  s2io_mdio_read - Function to write in to MDIO registers
3120  *  @mmd_type : MMD type value (PMA/PMD/WIS/PCS/PHYXS)
3121  *  @addr     : address value
3122  *  @dev      : pointer to net_device structure
3123  *  Description:
3124  *  This function is used to read values to the MDIO registers
3125  *  NONE
3126  */
3127 static u64 s2io_mdio_read(u32 mmd_type, u64 addr, struct net_device *dev)
3128 {
3129 	u64 val64 = 0x0;
3130 	u64 rval64 = 0x0;
3131 	struct s2io_nic *sp = netdev_priv(dev);
3132 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3133 
3134 	/* address transaction */
3135 	val64 = val64 | (MDIO_MMD_INDX_ADDR(addr)
3136 			 | MDIO_MMD_DEV_ADDR(mmd_type)
3137 			 | MDIO_MMS_PRT_ADDR(0x0));
3138 	writeq(val64, &bar0->mdio_control);
3139 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3140 	writeq(val64, &bar0->mdio_control);
3141 	udelay(100);
3142 
3143 	/* Data transaction */
3144 	val64 = MDIO_MMD_INDX_ADDR(addr) |
3145 		MDIO_MMD_DEV_ADDR(mmd_type) |
3146 		MDIO_MMS_PRT_ADDR(0x0) |
3147 		MDIO_OP(MDIO_OP_READ_TRANS);
3148 	writeq(val64, &bar0->mdio_control);
3149 	val64 = val64 | MDIO_CTRL_START_TRANS(0xE);
3150 	writeq(val64, &bar0->mdio_control);
3151 	udelay(100);
3152 
3153 	/* Read the value from regs */
3154 	rval64 = readq(&bar0->mdio_control);
3155 	rval64 = rval64 & 0xFFFF0000;
3156 	rval64 = rval64 >> 16;
3157 	return rval64;
3158 }
3159 
3160 /**
3161  *  s2io_chk_xpak_counter - Function to check the status of the xpak counters
3162  *  @counter      : counter value to be updated
3163  *  @flag         : flag to indicate the status
3164  *  @type         : counter type
3165  *  Description:
3166  *  This function is to check the status of the xpak counters value
3167  *  NONE
3168  */
3169 
3170 static void s2io_chk_xpak_counter(u64 *counter, u64 * regs_stat, u32 index,
3171 				  u16 flag, u16 type)
3172 {
3173 	u64 mask = 0x3;
3174 	u64 val64;
3175 	int i;
3176 	for (i = 0; i < index; i++)
3177 		mask = mask << 0x2;
3178 
3179 	if (flag > 0) {
3180 		*counter = *counter + 1;
3181 		val64 = *regs_stat & mask;
3182 		val64 = val64 >> (index * 0x2);
3183 		val64 = val64 + 1;
3184 		if (val64 == 3) {
3185 			switch (type) {
3186 			case 1:
3187 				DBG_PRINT(ERR_DBG,
3188 					  "Take Xframe NIC out of service.\n");
3189 				DBG_PRINT(ERR_DBG,
3190 "Excessive temperatures may result in premature transceiver failure.\n");
3191 				break;
3192 			case 2:
3193 				DBG_PRINT(ERR_DBG,
3194 					  "Take Xframe NIC out of service.\n");
3195 				DBG_PRINT(ERR_DBG,
3196 "Excessive bias currents may indicate imminent laser diode failure.\n");
3197 				break;
3198 			case 3:
3199 				DBG_PRINT(ERR_DBG,
3200 					  "Take Xframe NIC out of service.\n");
3201 				DBG_PRINT(ERR_DBG,
3202 "Excessive laser output power may saturate far-end receiver.\n");
3203 				break;
3204 			default:
3205 				DBG_PRINT(ERR_DBG,
3206 					  "Incorrect XPAK Alarm type\n");
3207 			}
3208 			val64 = 0x0;
3209 		}
3210 		val64 = val64 << (index * 0x2);
3211 		*regs_stat = (*regs_stat & (~mask)) | (val64);
3212 
3213 	} else {
3214 		*regs_stat = *regs_stat & (~mask);
3215 	}
3216 }
3217 
3218 /**
3219  *  s2io_updt_xpak_counter - Function to update the xpak counters
3220  *  @dev         : pointer to net_device struct
3221  *  Description:
3222  *  This function is to upate the status of the xpak counters value
3223  *  NONE
3224  */
3225 static void s2io_updt_xpak_counter(struct net_device *dev)
3226 {
3227 	u16 flag  = 0x0;
3228 	u16 type  = 0x0;
3229 	u16 val16 = 0x0;
3230 	u64 val64 = 0x0;
3231 	u64 addr  = 0x0;
3232 
3233 	struct s2io_nic *sp = netdev_priv(dev);
3234 	struct stat_block *stats = sp->mac_control.stats_info;
3235 	struct xpakStat *xstats = &stats->xpak_stat;
3236 
3237 	/* Check the communication with the MDIO slave */
3238 	addr = MDIO_CTRL1;
3239 	val64 = 0x0;
3240 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3241 	if ((val64 == 0xFFFF) || (val64 == 0x0000)) {
3242 		DBG_PRINT(ERR_DBG,
3243 			  "ERR: MDIO slave access failed - Returned %llx\n",
3244 			  (unsigned long long)val64);
3245 		return;
3246 	}
3247 
3248 	/* Check for the expected value of control reg 1 */
3249 	if (val64 != MDIO_CTRL1_SPEED10G) {
3250 		DBG_PRINT(ERR_DBG, "Incorrect value at PMA address 0x0000 - "
3251 			  "Returned: %llx- Expected: 0x%x\n",
3252 			  (unsigned long long)val64, MDIO_CTRL1_SPEED10G);
3253 		return;
3254 	}
3255 
3256 	/* Loading the DOM register to MDIO register */
3257 	addr = 0xA100;
3258 	s2io_mdio_write(MDIO_MMD_PMAPMD, addr, val16, dev);
3259 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3260 
3261 	/* Reading the Alarm flags */
3262 	addr = 0xA070;
3263 	val64 = 0x0;
3264 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3265 
3266 	flag = CHECKBIT(val64, 0x7);
3267 	type = 1;
3268 	s2io_chk_xpak_counter(&xstats->alarm_transceiver_temp_high,
3269 			      &xstats->xpak_regs_stat,
3270 			      0x0, flag, type);
3271 
3272 	if (CHECKBIT(val64, 0x6))
3273 		xstats->alarm_transceiver_temp_low++;
3274 
3275 	flag = CHECKBIT(val64, 0x3);
3276 	type = 2;
3277 	s2io_chk_xpak_counter(&xstats->alarm_laser_bias_current_high,
3278 			      &xstats->xpak_regs_stat,
3279 			      0x2, flag, type);
3280 
3281 	if (CHECKBIT(val64, 0x2))
3282 		xstats->alarm_laser_bias_current_low++;
3283 
3284 	flag = CHECKBIT(val64, 0x1);
3285 	type = 3;
3286 	s2io_chk_xpak_counter(&xstats->alarm_laser_output_power_high,
3287 			      &xstats->xpak_regs_stat,
3288 			      0x4, flag, type);
3289 
3290 	if (CHECKBIT(val64, 0x0))
3291 		xstats->alarm_laser_output_power_low++;
3292 
3293 	/* Reading the Warning flags */
3294 	addr = 0xA074;
3295 	val64 = 0x0;
3296 	val64 = s2io_mdio_read(MDIO_MMD_PMAPMD, addr, dev);
3297 
3298 	if (CHECKBIT(val64, 0x7))
3299 		xstats->warn_transceiver_temp_high++;
3300 
3301 	if (CHECKBIT(val64, 0x6))
3302 		xstats->warn_transceiver_temp_low++;
3303 
3304 	if (CHECKBIT(val64, 0x3))
3305 		xstats->warn_laser_bias_current_high++;
3306 
3307 	if (CHECKBIT(val64, 0x2))
3308 		xstats->warn_laser_bias_current_low++;
3309 
3310 	if (CHECKBIT(val64, 0x1))
3311 		xstats->warn_laser_output_power_high++;
3312 
3313 	if (CHECKBIT(val64, 0x0))
3314 		xstats->warn_laser_output_power_low++;
3315 }
3316 
3317 /**
3318  *  wait_for_cmd_complete - waits for a command to complete.
3319  *  @sp : private member of the device structure, which is a pointer to the
3320  *  s2io_nic structure.
3321  *  Description: Function that waits for a command to Write into RMAC
3322  *  ADDR DATA registers to be completed and returns either success or
3323  *  error depending on whether the command was complete or not.
3324  *  Return value:
3325  *   SUCCESS on success and FAILURE on failure.
3326  */
3327 
3328 static int wait_for_cmd_complete(void __iomem *addr, u64 busy_bit,
3329 				 int bit_state)
3330 {
3331 	int ret = FAILURE, cnt = 0, delay = 1;
3332 	u64 val64;
3333 
3334 	if ((bit_state != S2IO_BIT_RESET) && (bit_state != S2IO_BIT_SET))
3335 		return FAILURE;
3336 
3337 	do {
3338 		val64 = readq(addr);
3339 		if (bit_state == S2IO_BIT_RESET) {
3340 			if (!(val64 & busy_bit)) {
3341 				ret = SUCCESS;
3342 				break;
3343 			}
3344 		} else {
3345 			if (val64 & busy_bit) {
3346 				ret = SUCCESS;
3347 				break;
3348 			}
3349 		}
3350 
3351 		if (in_interrupt())
3352 			mdelay(delay);
3353 		else
3354 			msleep(delay);
3355 
3356 		if (++cnt >= 10)
3357 			delay = 50;
3358 	} while (cnt < 20);
3359 	return ret;
3360 }
3361 /**
3362  * check_pci_device_id - Checks if the device id is supported
3363  * @id : device id
3364  * Description: Function to check if the pci device id is supported by driver.
3365  * Return value: Actual device id if supported else PCI_ANY_ID
3366  */
3367 static u16 check_pci_device_id(u16 id)
3368 {
3369 	switch (id) {
3370 	case PCI_DEVICE_ID_HERC_WIN:
3371 	case PCI_DEVICE_ID_HERC_UNI:
3372 		return XFRAME_II_DEVICE;
3373 	case PCI_DEVICE_ID_S2IO_UNI:
3374 	case PCI_DEVICE_ID_S2IO_WIN:
3375 		return XFRAME_I_DEVICE;
3376 	default:
3377 		return PCI_ANY_ID;
3378 	}
3379 }
3380 
3381 /**
3382  *  s2io_reset - Resets the card.
3383  *  @sp : private member of the device structure.
3384  *  Description: Function to Reset the card. This function then also
3385  *  restores the previously saved PCI configuration space registers as
3386  *  the card reset also resets the configuration space.
3387  *  Return value:
3388  *  void.
3389  */
3390 
3391 static void s2io_reset(struct s2io_nic *sp)
3392 {
3393 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3394 	u64 val64;
3395 	u16 subid, pci_cmd;
3396 	int i;
3397 	u16 val16;
3398 	unsigned long long up_cnt, down_cnt, up_time, down_time, reset_cnt;
3399 	unsigned long long mem_alloc_cnt, mem_free_cnt, watchdog_cnt;
3400 	struct stat_block *stats;
3401 	struct swStat *swstats;
3402 
3403 	DBG_PRINT(INIT_DBG, "%s: Resetting XFrame card %s\n",
3404 		  __func__, pci_name(sp->pdev));
3405 
3406 	/* Back up  the PCI-X CMD reg, dont want to lose MMRBC, OST settings */
3407 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd));
3408 
3409 	val64 = SW_RESET_ALL;
3410 	writeq(val64, &bar0->sw_reset);
3411 	if (strstr(sp->product_name, "CX4"))
3412 		msleep(750);
3413 	msleep(250);
3414 	for (i = 0; i < S2IO_MAX_PCI_CONFIG_SPACE_REINIT; i++) {
3415 
3416 		/* Restore the PCI state saved during initialization. */
3417 		pci_restore_state(sp->pdev);
3418 		pci_save_state(sp->pdev);
3419 		pci_read_config_word(sp->pdev, 0x2, &val16);
3420 		if (check_pci_device_id(val16) != (u16)PCI_ANY_ID)
3421 			break;
3422 		msleep(200);
3423 	}
3424 
3425 	if (check_pci_device_id(val16) == (u16)PCI_ANY_ID)
3426 		DBG_PRINT(ERR_DBG, "%s SW_Reset failed!\n", __func__);
3427 
3428 	pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd);
3429 
3430 	s2io_init_pci(sp);
3431 
3432 	/* Set swapper to enable I/O register access */
3433 	s2io_set_swapper(sp);
3434 
3435 	/* restore mac_addr entries */
3436 	do_s2io_restore_unicast_mc(sp);
3437 
3438 	/* Restore the MSIX table entries from local variables */
3439 	restore_xmsi_data(sp);
3440 
3441 	/* Clear certain PCI/PCI-X fields after reset */
3442 	if (sp->device_type == XFRAME_II_DEVICE) {
3443 		/* Clear "detected parity error" bit */
3444 		pci_write_config_word(sp->pdev, PCI_STATUS, 0x8000);
3445 
3446 		/* Clearing PCIX Ecc status register */
3447 		pci_write_config_dword(sp->pdev, 0x68, 0x7C);
3448 
3449 		/* Clearing PCI_STATUS error reflected here */
3450 		writeq(s2BIT(62), &bar0->txpic_int_reg);
3451 	}
3452 
3453 	/* Reset device statistics maintained by OS */
3454 	memset(&sp->stats, 0, sizeof(struct net_device_stats));
3455 
3456 	stats = sp->mac_control.stats_info;
3457 	swstats = &stats->sw_stat;
3458 
3459 	/* save link up/down time/cnt, reset/memory/watchdog cnt */
3460 	up_cnt = swstats->link_up_cnt;
3461 	down_cnt = swstats->link_down_cnt;
3462 	up_time = swstats->link_up_time;
3463 	down_time = swstats->link_down_time;
3464 	reset_cnt = swstats->soft_reset_cnt;
3465 	mem_alloc_cnt = swstats->mem_allocated;
3466 	mem_free_cnt = swstats->mem_freed;
3467 	watchdog_cnt = swstats->watchdog_timer_cnt;
3468 
3469 	memset(stats, 0, sizeof(struct stat_block));
3470 
3471 	/* restore link up/down time/cnt, reset/memory/watchdog cnt */
3472 	swstats->link_up_cnt = up_cnt;
3473 	swstats->link_down_cnt = down_cnt;
3474 	swstats->link_up_time = up_time;
3475 	swstats->link_down_time = down_time;
3476 	swstats->soft_reset_cnt = reset_cnt;
3477 	swstats->mem_allocated = mem_alloc_cnt;
3478 	swstats->mem_freed = mem_free_cnt;
3479 	swstats->watchdog_timer_cnt = watchdog_cnt;
3480 
3481 	/* SXE-002: Configure link and activity LED to turn it off */
3482 	subid = sp->pdev->subsystem_device;
3483 	if (((subid & 0xFF) >= 0x07) &&
3484 	    (sp->device_type == XFRAME_I_DEVICE)) {
3485 		val64 = readq(&bar0->gpio_control);
3486 		val64 |= 0x0000800000000000ULL;
3487 		writeq(val64, &bar0->gpio_control);
3488 		val64 = 0x0411040400000000ULL;
3489 		writeq(val64, (void __iomem *)bar0 + 0x2700);
3490 	}
3491 
3492 	/*
3493 	 * Clear spurious ECC interrupts that would have occurred on
3494 	 * XFRAME II cards after reset.
3495 	 */
3496 	if (sp->device_type == XFRAME_II_DEVICE) {
3497 		val64 = readq(&bar0->pcc_err_reg);
3498 		writeq(val64, &bar0->pcc_err_reg);
3499 	}
3500 
3501 	sp->device_enabled_once = false;
3502 }
3503 
3504 /**
3505  *  s2io_set_swapper - to set the swapper controle on the card
3506  *  @sp : private member of the device structure,
3507  *  pointer to the s2io_nic structure.
3508  *  Description: Function to set the swapper control on the card
3509  *  correctly depending on the 'endianness' of the system.
3510  *  Return value:
3511  *  SUCCESS on success and FAILURE on failure.
3512  */
3513 
3514 static int s2io_set_swapper(struct s2io_nic *sp)
3515 {
3516 	struct net_device *dev = sp->dev;
3517 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3518 	u64 val64, valt, valr;
3519 
3520 	/*
3521 	 * Set proper endian settings and verify the same by reading
3522 	 * the PIF Feed-back register.
3523 	 */
3524 
3525 	val64 = readq(&bar0->pif_rd_swapper_fb);
3526 	if (val64 != 0x0123456789ABCDEFULL) {
3527 		int i = 0;
3528 		static const u64 value[] = {
3529 			0xC30000C3C30000C3ULL,	/* FE=1, SE=1 */
3530 			0x8100008181000081ULL,	/* FE=1, SE=0 */
3531 			0x4200004242000042ULL,	/* FE=0, SE=1 */
3532 			0			/* FE=0, SE=0 */
3533 		};
3534 
3535 		while (i < 4) {
3536 			writeq(value[i], &bar0->swapper_ctrl);
3537 			val64 = readq(&bar0->pif_rd_swapper_fb);
3538 			if (val64 == 0x0123456789ABCDEFULL)
3539 				break;
3540 			i++;
3541 		}
3542 		if (i == 4) {
3543 			DBG_PRINT(ERR_DBG, "%s: Endian settings are wrong, "
3544 				  "feedback read %llx\n",
3545 				  dev->name, (unsigned long long)val64);
3546 			return FAILURE;
3547 		}
3548 		valr = value[i];
3549 	} else {
3550 		valr = readq(&bar0->swapper_ctrl);
3551 	}
3552 
3553 	valt = 0x0123456789ABCDEFULL;
3554 	writeq(valt, &bar0->xmsi_address);
3555 	val64 = readq(&bar0->xmsi_address);
3556 
3557 	if (val64 != valt) {
3558 		int i = 0;
3559 		static const u64 value[] = {
3560 			0x00C3C30000C3C300ULL,	/* FE=1, SE=1 */
3561 			0x0081810000818100ULL,	/* FE=1, SE=0 */
3562 			0x0042420000424200ULL,	/* FE=0, SE=1 */
3563 			0			/* FE=0, SE=0 */
3564 		};
3565 
3566 		while (i < 4) {
3567 			writeq((value[i] | valr), &bar0->swapper_ctrl);
3568 			writeq(valt, &bar0->xmsi_address);
3569 			val64 = readq(&bar0->xmsi_address);
3570 			if (val64 == valt)
3571 				break;
3572 			i++;
3573 		}
3574 		if (i == 4) {
3575 			unsigned long long x = val64;
3576 			DBG_PRINT(ERR_DBG,
3577 				  "Write failed, Xmsi_addr reads:0x%llx\n", x);
3578 			return FAILURE;
3579 		}
3580 	}
3581 	val64 = readq(&bar0->swapper_ctrl);
3582 	val64 &= 0xFFFF000000000000ULL;
3583 
3584 #ifdef __BIG_ENDIAN
3585 	/*
3586 	 * The device by default set to a big endian format, so a
3587 	 * big endian driver need not set anything.
3588 	 */
3589 	val64 |= (SWAPPER_CTRL_TXP_FE |
3590 		  SWAPPER_CTRL_TXP_SE |
3591 		  SWAPPER_CTRL_TXD_R_FE |
3592 		  SWAPPER_CTRL_TXD_W_FE |
3593 		  SWAPPER_CTRL_TXF_R_FE |
3594 		  SWAPPER_CTRL_RXD_R_FE |
3595 		  SWAPPER_CTRL_RXD_W_FE |
3596 		  SWAPPER_CTRL_RXF_W_FE |
3597 		  SWAPPER_CTRL_XMSI_FE |
3598 		  SWAPPER_CTRL_STATS_FE |
3599 		  SWAPPER_CTRL_STATS_SE);
3600 	if (sp->config.intr_type == INTA)
3601 		val64 |= SWAPPER_CTRL_XMSI_SE;
3602 	writeq(val64, &bar0->swapper_ctrl);
3603 #else
3604 	/*
3605 	 * Initially we enable all bits to make it accessible by the
3606 	 * driver, then we selectively enable only those bits that
3607 	 * we want to set.
3608 	 */
3609 	val64 |= (SWAPPER_CTRL_TXP_FE |
3610 		  SWAPPER_CTRL_TXP_SE |
3611 		  SWAPPER_CTRL_TXD_R_FE |
3612 		  SWAPPER_CTRL_TXD_R_SE |
3613 		  SWAPPER_CTRL_TXD_W_FE |
3614 		  SWAPPER_CTRL_TXD_W_SE |
3615 		  SWAPPER_CTRL_TXF_R_FE |
3616 		  SWAPPER_CTRL_RXD_R_FE |
3617 		  SWAPPER_CTRL_RXD_R_SE |
3618 		  SWAPPER_CTRL_RXD_W_FE |
3619 		  SWAPPER_CTRL_RXD_W_SE |
3620 		  SWAPPER_CTRL_RXF_W_FE |
3621 		  SWAPPER_CTRL_XMSI_FE |
3622 		  SWAPPER_CTRL_STATS_FE |
3623 		  SWAPPER_CTRL_STATS_SE);
3624 	if (sp->config.intr_type == INTA)
3625 		val64 |= SWAPPER_CTRL_XMSI_SE;
3626 	writeq(val64, &bar0->swapper_ctrl);
3627 #endif
3628 	val64 = readq(&bar0->swapper_ctrl);
3629 
3630 	/*
3631 	 * Verifying if endian settings are accurate by reading a
3632 	 * feedback register.
3633 	 */
3634 	val64 = readq(&bar0->pif_rd_swapper_fb);
3635 	if (val64 != 0x0123456789ABCDEFULL) {
3636 		/* Endian settings are incorrect, calls for another dekko. */
3637 		DBG_PRINT(ERR_DBG,
3638 			  "%s: Endian settings are wrong, feedback read %llx\n",
3639 			  dev->name, (unsigned long long)val64);
3640 		return FAILURE;
3641 	}
3642 
3643 	return SUCCESS;
3644 }
3645 
3646 static int wait_for_msix_trans(struct s2io_nic *nic, int i)
3647 {
3648 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3649 	u64 val64;
3650 	int ret = 0, cnt = 0;
3651 
3652 	do {
3653 		val64 = readq(&bar0->xmsi_access);
3654 		if (!(val64 & s2BIT(15)))
3655 			break;
3656 		mdelay(1);
3657 		cnt++;
3658 	} while (cnt < 5);
3659 	if (cnt == 5) {
3660 		DBG_PRINT(ERR_DBG, "XMSI # %d Access failed\n", i);
3661 		ret = 1;
3662 	}
3663 
3664 	return ret;
3665 }
3666 
3667 static void restore_xmsi_data(struct s2io_nic *nic)
3668 {
3669 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3670 	u64 val64;
3671 	int i, msix_index;
3672 
3673 	if (nic->device_type == XFRAME_I_DEVICE)
3674 		return;
3675 
3676 	for (i = 0; i < MAX_REQUESTED_MSI_X; i++) {
3677 		msix_index = (i) ? ((i-1) * 8 + 1) : 0;
3678 		writeq(nic->msix_info[i].addr, &bar0->xmsi_address);
3679 		writeq(nic->msix_info[i].data, &bar0->xmsi_data);
3680 		val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6));
3681 		writeq(val64, &bar0->xmsi_access);
3682 		if (wait_for_msix_trans(nic, msix_index))
3683 			DBG_PRINT(ERR_DBG, "%s: index: %d failed\n",
3684 				  __func__, msix_index);
3685 	}
3686 }
3687 
3688 static void store_xmsi_data(struct s2io_nic *nic)
3689 {
3690 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3691 	u64 val64, addr, data;
3692 	int i, msix_index;
3693 
3694 	if (nic->device_type == XFRAME_I_DEVICE)
3695 		return;
3696 
3697 	/* Store and display */
3698 	for (i = 0; i < MAX_REQUESTED_MSI_X; i++) {
3699 		msix_index = (i) ? ((i-1) * 8 + 1) : 0;
3700 		val64 = (s2BIT(15) | vBIT(msix_index, 26, 6));
3701 		writeq(val64, &bar0->xmsi_access);
3702 		if (wait_for_msix_trans(nic, msix_index)) {
3703 			DBG_PRINT(ERR_DBG, "%s: index: %d failed\n",
3704 				  __func__, msix_index);
3705 			continue;
3706 		}
3707 		addr = readq(&bar0->xmsi_address);
3708 		data = readq(&bar0->xmsi_data);
3709 		if (addr && data) {
3710 			nic->msix_info[i].addr = addr;
3711 			nic->msix_info[i].data = data;
3712 		}
3713 	}
3714 }
3715 
3716 static int s2io_enable_msi_x(struct s2io_nic *nic)
3717 {
3718 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
3719 	u64 rx_mat;
3720 	u16 msi_control; /* Temp variable */
3721 	int ret, i, j, msix_indx = 1;
3722 	int size;
3723 	struct stat_block *stats = nic->mac_control.stats_info;
3724 	struct swStat *swstats = &stats->sw_stat;
3725 
3726 	size = nic->num_entries * sizeof(struct msix_entry);
3727 	nic->entries = kzalloc(size, GFP_KERNEL);
3728 	if (!nic->entries) {
3729 		DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n",
3730 			  __func__);
3731 		swstats->mem_alloc_fail_cnt++;
3732 		return -ENOMEM;
3733 	}
3734 	swstats->mem_allocated += size;
3735 
3736 	size = nic->num_entries * sizeof(struct s2io_msix_entry);
3737 	nic->s2io_entries = kzalloc(size, GFP_KERNEL);
3738 	if (!nic->s2io_entries) {
3739 		DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n",
3740 			  __func__);
3741 		swstats->mem_alloc_fail_cnt++;
3742 		kfree(nic->entries);
3743 		swstats->mem_freed
3744 			+= (nic->num_entries * sizeof(struct msix_entry));
3745 		return -ENOMEM;
3746 	}
3747 	swstats->mem_allocated += size;
3748 
3749 	nic->entries[0].entry = 0;
3750 	nic->s2io_entries[0].entry = 0;
3751 	nic->s2io_entries[0].in_use = MSIX_FLG;
3752 	nic->s2io_entries[0].type = MSIX_ALARM_TYPE;
3753 	nic->s2io_entries[0].arg = &nic->mac_control.fifos;
3754 
3755 	for (i = 1; i < nic->num_entries; i++) {
3756 		nic->entries[i].entry = ((i - 1) * 8) + 1;
3757 		nic->s2io_entries[i].entry = ((i - 1) * 8) + 1;
3758 		nic->s2io_entries[i].arg = NULL;
3759 		nic->s2io_entries[i].in_use = 0;
3760 	}
3761 
3762 	rx_mat = readq(&bar0->rx_mat);
3763 	for (j = 0; j < nic->config.rx_ring_num; j++) {
3764 		rx_mat |= RX_MAT_SET(j, msix_indx);
3765 		nic->s2io_entries[j+1].arg = &nic->mac_control.rings[j];
3766 		nic->s2io_entries[j+1].type = MSIX_RING_TYPE;
3767 		nic->s2io_entries[j+1].in_use = MSIX_FLG;
3768 		msix_indx += 8;
3769 	}
3770 	writeq(rx_mat, &bar0->rx_mat);
3771 	readq(&bar0->rx_mat);
3772 
3773 	ret = pci_enable_msix_range(nic->pdev, nic->entries,
3774 				    nic->num_entries, nic->num_entries);
3775 	/* We fail init if error or we get less vectors than min required */
3776 	if (ret < 0) {
3777 		DBG_PRINT(ERR_DBG, "Enabling MSI-X failed\n");
3778 		kfree(nic->entries);
3779 		swstats->mem_freed += nic->num_entries *
3780 			sizeof(struct msix_entry);
3781 		kfree(nic->s2io_entries);
3782 		swstats->mem_freed += nic->num_entries *
3783 			sizeof(struct s2io_msix_entry);
3784 		nic->entries = NULL;
3785 		nic->s2io_entries = NULL;
3786 		return -ENOMEM;
3787 	}
3788 
3789 	/*
3790 	 * To enable MSI-X, MSI also needs to be enabled, due to a bug
3791 	 * in the herc NIC. (Temp change, needs to be removed later)
3792 	 */
3793 	pci_read_config_word(nic->pdev, 0x42, &msi_control);
3794 	msi_control |= 0x1; /* Enable MSI */
3795 	pci_write_config_word(nic->pdev, 0x42, msi_control);
3796 
3797 	return 0;
3798 }
3799 
3800 /* Handle software interrupt used during MSI(X) test */
3801 static irqreturn_t s2io_test_intr(int irq, void *dev_id)
3802 {
3803 	struct s2io_nic *sp = dev_id;
3804 
3805 	sp->msi_detected = 1;
3806 	wake_up(&sp->msi_wait);
3807 
3808 	return IRQ_HANDLED;
3809 }
3810 
3811 /* Test interrupt path by forcing a a software IRQ */
3812 static int s2io_test_msi(struct s2io_nic *sp)
3813 {
3814 	struct pci_dev *pdev = sp->pdev;
3815 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
3816 	int err;
3817 	u64 val64, saved64;
3818 
3819 	err = request_irq(sp->entries[1].vector, s2io_test_intr, 0,
3820 			  sp->name, sp);
3821 	if (err) {
3822 		DBG_PRINT(ERR_DBG, "%s: PCI %s: cannot assign irq %d\n",
3823 			  sp->dev->name, pci_name(pdev), pdev->irq);
3824 		return err;
3825 	}
3826 
3827 	init_waitqueue_head(&sp->msi_wait);
3828 	sp->msi_detected = 0;
3829 
3830 	saved64 = val64 = readq(&bar0->scheduled_int_ctrl);
3831 	val64 |= SCHED_INT_CTRL_ONE_SHOT;
3832 	val64 |= SCHED_INT_CTRL_TIMER_EN;
3833 	val64 |= SCHED_INT_CTRL_INT2MSI(1);
3834 	writeq(val64, &bar0->scheduled_int_ctrl);
3835 
3836 	wait_event_timeout(sp->msi_wait, sp->msi_detected, HZ/10);
3837 
3838 	if (!sp->msi_detected) {
3839 		/* MSI(X) test failed, go back to INTx mode */
3840 		DBG_PRINT(ERR_DBG, "%s: PCI %s: No interrupt was generated "
3841 			  "using MSI(X) during test\n",
3842 			  sp->dev->name, pci_name(pdev));
3843 
3844 		err = -EOPNOTSUPP;
3845 	}
3846 
3847 	free_irq(sp->entries[1].vector, sp);
3848 
3849 	writeq(saved64, &bar0->scheduled_int_ctrl);
3850 
3851 	return err;
3852 }
3853 
3854 static void remove_msix_isr(struct s2io_nic *sp)
3855 {
3856 	int i;
3857 	u16 msi_control;
3858 
3859 	for (i = 0; i < sp->num_entries; i++) {
3860 		if (sp->s2io_entries[i].in_use == MSIX_REGISTERED_SUCCESS) {
3861 			int vector = sp->entries[i].vector;
3862 			void *arg = sp->s2io_entries[i].arg;
3863 			free_irq(vector, arg);
3864 		}
3865 	}
3866 
3867 	kfree(sp->entries);
3868 	kfree(sp->s2io_entries);
3869 	sp->entries = NULL;
3870 	sp->s2io_entries = NULL;
3871 
3872 	pci_read_config_word(sp->pdev, 0x42, &msi_control);
3873 	msi_control &= 0xFFFE; /* Disable MSI */
3874 	pci_write_config_word(sp->pdev, 0x42, msi_control);
3875 
3876 	pci_disable_msix(sp->pdev);
3877 }
3878 
3879 static void remove_inta_isr(struct s2io_nic *sp)
3880 {
3881 	free_irq(sp->pdev->irq, sp->dev);
3882 }
3883 
3884 /* ********************************************************* *
3885  * Functions defined below concern the OS part of the driver *
3886  * ********************************************************* */
3887 
3888 /**
3889  *  s2io_open - open entry point of the driver
3890  *  @dev : pointer to the device structure.
3891  *  Description:
3892  *  This function is the open entry point of the driver. It mainly calls a
3893  *  function to allocate Rx buffers and inserts them into the buffer
3894  *  descriptors and then enables the Rx part of the NIC.
3895  *  Return value:
3896  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3897  *   file on failure.
3898  */
3899 
3900 static int s2io_open(struct net_device *dev)
3901 {
3902 	struct s2io_nic *sp = netdev_priv(dev);
3903 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
3904 	int err = 0;
3905 
3906 	/*
3907 	 * Make sure you have link off by default every time
3908 	 * Nic is initialized
3909 	 */
3910 	netif_carrier_off(dev);
3911 	sp->last_link_state = 0;
3912 
3913 	/* Initialize H/W and enable interrupts */
3914 	err = s2io_card_up(sp);
3915 	if (err) {
3916 		DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
3917 			  dev->name);
3918 		goto hw_init_failed;
3919 	}
3920 
3921 	if (do_s2io_prog_unicast(dev, dev->dev_addr) == FAILURE) {
3922 		DBG_PRINT(ERR_DBG, "Set Mac Address Failed\n");
3923 		s2io_card_down(sp);
3924 		err = -ENODEV;
3925 		goto hw_init_failed;
3926 	}
3927 	s2io_start_all_tx_queue(sp);
3928 	return 0;
3929 
3930 hw_init_failed:
3931 	if (sp->config.intr_type == MSI_X) {
3932 		if (sp->entries) {
3933 			kfree(sp->entries);
3934 			swstats->mem_freed += sp->num_entries *
3935 				sizeof(struct msix_entry);
3936 		}
3937 		if (sp->s2io_entries) {
3938 			kfree(sp->s2io_entries);
3939 			swstats->mem_freed += sp->num_entries *
3940 				sizeof(struct s2io_msix_entry);
3941 		}
3942 	}
3943 	return err;
3944 }
3945 
3946 /**
3947  *  s2io_close -close entry point of the driver
3948  *  @dev : device pointer.
3949  *  Description:
3950  *  This is the stop entry point of the driver. It needs to undo exactly
3951  *  whatever was done by the open entry point,thus it's usually referred to
3952  *  as the close function.Among other things this function mainly stops the
3953  *  Rx side of the NIC and frees all the Rx buffers in the Rx rings.
3954  *  Return value:
3955  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3956  *  file on failure.
3957  */
3958 
3959 static int s2io_close(struct net_device *dev)
3960 {
3961 	struct s2io_nic *sp = netdev_priv(dev);
3962 	struct config_param *config = &sp->config;
3963 	u64 tmp64;
3964 	int offset;
3965 
3966 	/* Return if the device is already closed               *
3967 	 *  Can happen when s2io_card_up failed in change_mtu    *
3968 	 */
3969 	if (!is_s2io_card_up(sp))
3970 		return 0;
3971 
3972 	s2io_stop_all_tx_queue(sp);
3973 	/* delete all populated mac entries */
3974 	for (offset = 1; offset < config->max_mc_addr; offset++) {
3975 		tmp64 = do_s2io_read_unicast_mc(sp, offset);
3976 		if (tmp64 != S2IO_DISABLE_MAC_ENTRY)
3977 			do_s2io_delete_unicast_mc(sp, tmp64);
3978 	}
3979 
3980 	s2io_card_down(sp);
3981 
3982 	return 0;
3983 }
3984 
3985 /**
3986  *  s2io_xmit - Tx entry point of te driver
3987  *  @skb : the socket buffer containing the Tx data.
3988  *  @dev : device pointer.
3989  *  Description :
3990  *  This function is the Tx entry point of the driver. S2IO NIC supports
3991  *  certain protocol assist features on Tx side, namely  CSO, S/G, LSO.
3992  *  NOTE: when device can't queue the pkt,just the trans_start variable will
3993  *  not be upadted.
3994  *  Return value:
3995  *  0 on success & 1 on failure.
3996  */
3997 
3998 static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
3999 {
4000 	struct s2io_nic *sp = netdev_priv(dev);
4001 	u16 frg_cnt, frg_len, i, queue, queue_len, put_off, get_off;
4002 	register u64 val64;
4003 	struct TxD *txdp;
4004 	struct TxFIFO_element __iomem *tx_fifo;
4005 	unsigned long flags = 0;
4006 	u16 vlan_tag = 0;
4007 	struct fifo_info *fifo = NULL;
4008 	int offload_type;
4009 	int enable_per_list_interrupt = 0;
4010 	struct config_param *config = &sp->config;
4011 	struct mac_info *mac_control = &sp->mac_control;
4012 	struct stat_block *stats = mac_control->stats_info;
4013 	struct swStat *swstats = &stats->sw_stat;
4014 
4015 	DBG_PRINT(TX_DBG, "%s: In Neterion Tx routine\n", dev->name);
4016 
4017 	if (unlikely(skb->len <= 0)) {
4018 		DBG_PRINT(TX_DBG, "%s: Buffer has no data..\n", dev->name);
4019 		dev_kfree_skb_any(skb);
4020 		return NETDEV_TX_OK;
4021 	}
4022 
4023 	if (!is_s2io_card_up(sp)) {
4024 		DBG_PRINT(TX_DBG, "%s: Card going down for reset\n",
4025 			  dev->name);
4026 		dev_kfree_skb_any(skb);
4027 		return NETDEV_TX_OK;
4028 	}
4029 
4030 	queue = 0;
4031 	if (skb_vlan_tag_present(skb))
4032 		vlan_tag = skb_vlan_tag_get(skb);
4033 	if (sp->config.tx_steering_type == TX_DEFAULT_STEERING) {
4034 		if (skb->protocol == htons(ETH_P_IP)) {
4035 			struct iphdr *ip;
4036 			struct tcphdr *th;
4037 			ip = ip_hdr(skb);
4038 
4039 			if (!ip_is_fragment(ip)) {
4040 				th = (struct tcphdr *)(((unsigned char *)ip) +
4041 						       ip->ihl*4);
4042 
4043 				if (ip->protocol == IPPROTO_TCP) {
4044 					queue_len = sp->total_tcp_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 				} else if (ip->protocol == IPPROTO_UDP) {
4051 					queue_len = sp->total_udp_fifos;
4052 					queue = (ntohs(th->source) +
4053 						 ntohs(th->dest)) &
4054 						sp->fifo_selector[queue_len - 1];
4055 					if (queue >= queue_len)
4056 						queue = queue_len - 1;
4057 					queue += sp->udp_fifo_idx;
4058 					if (skb->len > 1024)
4059 						enable_per_list_interrupt = 1;
4060 				}
4061 			}
4062 		}
4063 	} else if (sp->config.tx_steering_type == TX_PRIORITY_STEERING)
4064 		/* get fifo number based on skb->priority value */
4065 		queue = config->fifo_mapping
4066 			[skb->priority & (MAX_TX_FIFOS - 1)];
4067 	fifo = &mac_control->fifos[queue];
4068 
4069 	spin_lock_irqsave(&fifo->tx_lock, flags);
4070 
4071 	if (sp->config.multiq) {
4072 		if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
4073 			spin_unlock_irqrestore(&fifo->tx_lock, flags);
4074 			return NETDEV_TX_BUSY;
4075 		}
4076 	} else if (unlikely(fifo->queue_state == FIFO_QUEUE_STOP)) {
4077 		if (netif_queue_stopped(dev)) {
4078 			spin_unlock_irqrestore(&fifo->tx_lock, flags);
4079 			return NETDEV_TX_BUSY;
4080 		}
4081 	}
4082 
4083 	put_off = (u16)fifo->tx_curr_put_info.offset;
4084 	get_off = (u16)fifo->tx_curr_get_info.offset;
4085 	txdp = fifo->list_info[put_off].list_virt_addr;
4086 
4087 	queue_len = fifo->tx_curr_put_info.fifo_len + 1;
4088 	/* Avoid "put" pointer going beyond "get" pointer */
4089 	if (txdp->Host_Control ||
4090 	    ((put_off+1) == queue_len ? 0 : (put_off+1)) == get_off) {
4091 		DBG_PRINT(TX_DBG, "Error in xmit, No free TXDs.\n");
4092 		s2io_stop_tx_queue(sp, fifo->fifo_no);
4093 		dev_kfree_skb_any(skb);
4094 		spin_unlock_irqrestore(&fifo->tx_lock, flags);
4095 		return NETDEV_TX_OK;
4096 	}
4097 
4098 	offload_type = s2io_offload_type(skb);
4099 	if (offload_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)) {
4100 		txdp->Control_1 |= TXD_TCP_LSO_EN;
4101 		txdp->Control_1 |= TXD_TCP_LSO_MSS(s2io_tcp_mss(skb));
4102 	}
4103 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
4104 		txdp->Control_2 |= (TXD_TX_CKO_IPV4_EN |
4105 				    TXD_TX_CKO_TCP_EN |
4106 				    TXD_TX_CKO_UDP_EN);
4107 	}
4108 	txdp->Control_1 |= TXD_GATHER_CODE_FIRST;
4109 	txdp->Control_1 |= TXD_LIST_OWN_XENA;
4110 	txdp->Control_2 |= TXD_INT_NUMBER(fifo->fifo_no);
4111 	if (enable_per_list_interrupt)
4112 		if (put_off & (queue_len >> 5))
4113 			txdp->Control_2 |= TXD_INT_TYPE_PER_LIST;
4114 	if (vlan_tag) {
4115 		txdp->Control_2 |= TXD_VLAN_ENABLE;
4116 		txdp->Control_2 |= TXD_VLAN_TAG(vlan_tag);
4117 	}
4118 
4119 	frg_len = skb_headlen(skb);
4120 	txdp->Buffer_Pointer = pci_map_single(sp->pdev, skb->data,
4121 					      frg_len, PCI_DMA_TODEVICE);
4122 	if (pci_dma_mapping_error(sp->pdev, txdp->Buffer_Pointer))
4123 		goto pci_map_failed;
4124 
4125 	txdp->Host_Control = (unsigned long)skb;
4126 	txdp->Control_1 |= TXD_BUFFER0_SIZE(frg_len);
4127 
4128 	frg_cnt = skb_shinfo(skb)->nr_frags;
4129 	/* For fragmented SKB. */
4130 	for (i = 0; i < frg_cnt; i++) {
4131 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4132 		/* A '0' length fragment will be ignored */
4133 		if (!skb_frag_size(frag))
4134 			continue;
4135 		txdp++;
4136 		txdp->Buffer_Pointer = (u64)skb_frag_dma_map(&sp->pdev->dev,
4137 							     frag, 0,
4138 							     skb_frag_size(frag),
4139 							     DMA_TO_DEVICE);
4140 		txdp->Control_1 = TXD_BUFFER0_SIZE(skb_frag_size(frag));
4141 	}
4142 	txdp->Control_1 |= TXD_GATHER_CODE_LAST;
4143 
4144 	tx_fifo = mac_control->tx_FIFO_start[queue];
4145 	val64 = fifo->list_info[put_off].list_phy_addr;
4146 	writeq(val64, &tx_fifo->TxDL_Pointer);
4147 
4148 	val64 = (TX_FIFO_LAST_TXD_NUM(frg_cnt) | TX_FIFO_FIRST_LIST |
4149 		 TX_FIFO_LAST_LIST);
4150 	if (offload_type)
4151 		val64 |= TX_FIFO_SPECIAL_FUNC;
4152 
4153 	writeq(val64, &tx_fifo->List_Control);
4154 
4155 	put_off++;
4156 	if (put_off == fifo->tx_curr_put_info.fifo_len + 1)
4157 		put_off = 0;
4158 	fifo->tx_curr_put_info.offset = put_off;
4159 
4160 	/* Avoid "put" pointer going beyond "get" pointer */
4161 	if (((put_off+1) == queue_len ? 0 : (put_off+1)) == get_off) {
4162 		swstats->fifo_full_cnt++;
4163 		DBG_PRINT(TX_DBG,
4164 			  "No free TxDs for xmit, Put: 0x%x Get:0x%x\n",
4165 			  put_off, get_off);
4166 		s2io_stop_tx_queue(sp, fifo->fifo_no);
4167 	}
4168 	swstats->mem_allocated += skb->truesize;
4169 	spin_unlock_irqrestore(&fifo->tx_lock, flags);
4170 
4171 	if (sp->config.intr_type == MSI_X)
4172 		tx_intr_handler(fifo);
4173 
4174 	return NETDEV_TX_OK;
4175 
4176 pci_map_failed:
4177 	swstats->pci_map_fail_cnt++;
4178 	s2io_stop_tx_queue(sp, fifo->fifo_no);
4179 	swstats->mem_freed += skb->truesize;
4180 	dev_kfree_skb_any(skb);
4181 	spin_unlock_irqrestore(&fifo->tx_lock, flags);
4182 	return NETDEV_TX_OK;
4183 }
4184 
4185 static void
4186 s2io_alarm_handle(struct timer_list *t)
4187 {
4188 	struct s2io_nic *sp = from_timer(sp, t, alarm_timer);
4189 	struct net_device *dev = sp->dev;
4190 
4191 	s2io_handle_errors(dev);
4192 	mod_timer(&sp->alarm_timer, jiffies + HZ / 2);
4193 }
4194 
4195 static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id)
4196 {
4197 	struct ring_info *ring = (struct ring_info *)dev_id;
4198 	struct s2io_nic *sp = ring->nic;
4199 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4200 
4201 	if (unlikely(!is_s2io_card_up(sp)))
4202 		return IRQ_HANDLED;
4203 
4204 	if (sp->config.napi) {
4205 		u8 __iomem *addr = NULL;
4206 		u8 val8 = 0;
4207 
4208 		addr = (u8 __iomem *)&bar0->xmsi_mask_reg;
4209 		addr += (7 - ring->ring_no);
4210 		val8 = (ring->ring_no == 0) ? 0x7f : 0xff;
4211 		writeb(val8, addr);
4212 		val8 = readb(addr);
4213 		napi_schedule(&ring->napi);
4214 	} else {
4215 		rx_intr_handler(ring, 0);
4216 		s2io_chk_rx_buffers(sp, ring);
4217 	}
4218 
4219 	return IRQ_HANDLED;
4220 }
4221 
4222 static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id)
4223 {
4224 	int i;
4225 	struct fifo_info *fifos = (struct fifo_info *)dev_id;
4226 	struct s2io_nic *sp = fifos->nic;
4227 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4228 	struct config_param *config  = &sp->config;
4229 	u64 reason;
4230 
4231 	if (unlikely(!is_s2io_card_up(sp)))
4232 		return IRQ_NONE;
4233 
4234 	reason = readq(&bar0->general_int_status);
4235 	if (unlikely(reason == S2IO_MINUS_ONE))
4236 		/* Nothing much can be done. Get out */
4237 		return IRQ_HANDLED;
4238 
4239 	if (reason & (GEN_INTR_TXPIC | GEN_INTR_TXTRAFFIC)) {
4240 		writeq(S2IO_MINUS_ONE, &bar0->general_int_mask);
4241 
4242 		if (reason & GEN_INTR_TXPIC)
4243 			s2io_txpic_intr_handle(sp);
4244 
4245 		if (reason & GEN_INTR_TXTRAFFIC)
4246 			writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int);
4247 
4248 		for (i = 0; i < config->tx_fifo_num; i++)
4249 			tx_intr_handler(&fifos[i]);
4250 
4251 		writeq(sp->general_int_mask, &bar0->general_int_mask);
4252 		readl(&bar0->general_int_status);
4253 		return IRQ_HANDLED;
4254 	}
4255 	/* The interrupt was not raised by us */
4256 	return IRQ_NONE;
4257 }
4258 
4259 static void s2io_txpic_intr_handle(struct s2io_nic *sp)
4260 {
4261 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4262 	u64 val64;
4263 
4264 	val64 = readq(&bar0->pic_int_status);
4265 	if (val64 & PIC_INT_GPIO) {
4266 		val64 = readq(&bar0->gpio_int_reg);
4267 		if ((val64 & GPIO_INT_REG_LINK_DOWN) &&
4268 		    (val64 & GPIO_INT_REG_LINK_UP)) {
4269 			/*
4270 			 * This is unstable state so clear both up/down
4271 			 * interrupt and adapter to re-evaluate the link state.
4272 			 */
4273 			val64 |= GPIO_INT_REG_LINK_DOWN;
4274 			val64 |= GPIO_INT_REG_LINK_UP;
4275 			writeq(val64, &bar0->gpio_int_reg);
4276 			val64 = readq(&bar0->gpio_int_mask);
4277 			val64 &= ~(GPIO_INT_MASK_LINK_UP |
4278 				   GPIO_INT_MASK_LINK_DOWN);
4279 			writeq(val64, &bar0->gpio_int_mask);
4280 		} else if (val64 & GPIO_INT_REG_LINK_UP) {
4281 			val64 = readq(&bar0->adapter_status);
4282 			/* Enable Adapter */
4283 			val64 = readq(&bar0->adapter_control);
4284 			val64 |= ADAPTER_CNTL_EN;
4285 			writeq(val64, &bar0->adapter_control);
4286 			val64 |= ADAPTER_LED_ON;
4287 			writeq(val64, &bar0->adapter_control);
4288 			if (!sp->device_enabled_once)
4289 				sp->device_enabled_once = 1;
4290 
4291 			s2io_link(sp, LINK_UP);
4292 			/*
4293 			 * unmask link down interrupt and mask link-up
4294 			 * intr
4295 			 */
4296 			val64 = readq(&bar0->gpio_int_mask);
4297 			val64 &= ~GPIO_INT_MASK_LINK_DOWN;
4298 			val64 |= GPIO_INT_MASK_LINK_UP;
4299 			writeq(val64, &bar0->gpio_int_mask);
4300 
4301 		} else if (val64 & GPIO_INT_REG_LINK_DOWN) {
4302 			val64 = readq(&bar0->adapter_status);
4303 			s2io_link(sp, LINK_DOWN);
4304 			/* Link is down so unmaks link up interrupt */
4305 			val64 = readq(&bar0->gpio_int_mask);
4306 			val64 &= ~GPIO_INT_MASK_LINK_UP;
4307 			val64 |= GPIO_INT_MASK_LINK_DOWN;
4308 			writeq(val64, &bar0->gpio_int_mask);
4309 
4310 			/* turn off LED */
4311 			val64 = readq(&bar0->adapter_control);
4312 			val64 = val64 & (~ADAPTER_LED_ON);
4313 			writeq(val64, &bar0->adapter_control);
4314 		}
4315 	}
4316 	val64 = readq(&bar0->gpio_int_mask);
4317 }
4318 
4319 /**
4320  *  do_s2io_chk_alarm_bit - Check for alarm and incrment the counter
4321  *  @value: alarm bits
4322  *  @addr: address value
4323  *  @cnt: counter variable
4324  *  Description: Check for alarm and increment the counter
4325  *  Return Value:
4326  *  1 - if alarm bit set
4327  *  0 - if alarm bit is not set
4328  */
4329 static int do_s2io_chk_alarm_bit(u64 value, void __iomem *addr,
4330 				 unsigned long long *cnt)
4331 {
4332 	u64 val64;
4333 	val64 = readq(addr);
4334 	if (val64 & value) {
4335 		writeq(val64, addr);
4336 		(*cnt)++;
4337 		return 1;
4338 	}
4339 	return 0;
4340 
4341 }
4342 
4343 /**
4344  *  s2io_handle_errors - Xframe error indication handler
4345  *  @nic: device private variable
4346  *  Description: Handle alarms such as loss of link, single or
4347  *  double ECC errors, critical and serious errors.
4348  *  Return Value:
4349  *  NONE
4350  */
4351 static void s2io_handle_errors(void *dev_id)
4352 {
4353 	struct net_device *dev = (struct net_device *)dev_id;
4354 	struct s2io_nic *sp = netdev_priv(dev);
4355 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4356 	u64 temp64 = 0, val64 = 0;
4357 	int i = 0;
4358 
4359 	struct swStat *sw_stat = &sp->mac_control.stats_info->sw_stat;
4360 	struct xpakStat *stats = &sp->mac_control.stats_info->xpak_stat;
4361 
4362 	if (!is_s2io_card_up(sp))
4363 		return;
4364 
4365 	if (pci_channel_offline(sp->pdev))
4366 		return;
4367 
4368 	memset(&sw_stat->ring_full_cnt, 0,
4369 	       sizeof(sw_stat->ring_full_cnt));
4370 
4371 	/* Handling the XPAK counters update */
4372 	if (stats->xpak_timer_count < 72000) {
4373 		/* waiting for an hour */
4374 		stats->xpak_timer_count++;
4375 	} else {
4376 		s2io_updt_xpak_counter(dev);
4377 		/* reset the count to zero */
4378 		stats->xpak_timer_count = 0;
4379 	}
4380 
4381 	/* Handling link status change error Intr */
4382 	if (s2io_link_fault_indication(sp) == MAC_RMAC_ERR_TIMER) {
4383 		val64 = readq(&bar0->mac_rmac_err_reg);
4384 		writeq(val64, &bar0->mac_rmac_err_reg);
4385 		if (val64 & RMAC_LINK_STATE_CHANGE_INT)
4386 			schedule_work(&sp->set_link_task);
4387 	}
4388 
4389 	/* In case of a serious error, the device will be Reset. */
4390 	if (do_s2io_chk_alarm_bit(SERR_SOURCE_ANY, &bar0->serr_source,
4391 				  &sw_stat->serious_err_cnt))
4392 		goto reset;
4393 
4394 	/* Check for data parity error */
4395 	if (do_s2io_chk_alarm_bit(GPIO_INT_REG_DP_ERR_INT, &bar0->gpio_int_reg,
4396 				  &sw_stat->parity_err_cnt))
4397 		goto reset;
4398 
4399 	/* Check for ring full counter */
4400 	if (sp->device_type == XFRAME_II_DEVICE) {
4401 		val64 = readq(&bar0->ring_bump_counter1);
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] += temp64;
4406 		}
4407 
4408 		val64 = readq(&bar0->ring_bump_counter2);
4409 		for (i = 0; i < 4; i++) {
4410 			temp64 = (val64 & vBIT(0xFFFF, (i*16), 16));
4411 			temp64 >>= 64 - ((i+1)*16);
4412 			sw_stat->ring_full_cnt[i+4] += temp64;
4413 		}
4414 	}
4415 
4416 	val64 = readq(&bar0->txdma_int_status);
4417 	/*check for pfc_err*/
4418 	if (val64 & TXDMA_PFC_INT) {
4419 		if (do_s2io_chk_alarm_bit(PFC_ECC_DB_ERR | PFC_SM_ERR_ALARM |
4420 					  PFC_MISC_0_ERR | PFC_MISC_1_ERR |
4421 					  PFC_PCIX_ERR,
4422 					  &bar0->pfc_err_reg,
4423 					  &sw_stat->pfc_err_cnt))
4424 			goto reset;
4425 		do_s2io_chk_alarm_bit(PFC_ECC_SG_ERR,
4426 				      &bar0->pfc_err_reg,
4427 				      &sw_stat->pfc_err_cnt);
4428 	}
4429 
4430 	/*check for tda_err*/
4431 	if (val64 & TXDMA_TDA_INT) {
4432 		if (do_s2io_chk_alarm_bit(TDA_Fn_ECC_DB_ERR |
4433 					  TDA_SM0_ERR_ALARM |
4434 					  TDA_SM1_ERR_ALARM,
4435 					  &bar0->tda_err_reg,
4436 					  &sw_stat->tda_err_cnt))
4437 			goto reset;
4438 		do_s2io_chk_alarm_bit(TDA_Fn_ECC_SG_ERR | TDA_PCIX_ERR,
4439 				      &bar0->tda_err_reg,
4440 				      &sw_stat->tda_err_cnt);
4441 	}
4442 	/*check for pcc_err*/
4443 	if (val64 & TXDMA_PCC_INT) {
4444 		if (do_s2io_chk_alarm_bit(PCC_SM_ERR_ALARM | PCC_WR_ERR_ALARM |
4445 					  PCC_N_SERR | PCC_6_COF_OV_ERR |
4446 					  PCC_7_COF_OV_ERR | PCC_6_LSO_OV_ERR |
4447 					  PCC_7_LSO_OV_ERR | PCC_FB_ECC_DB_ERR |
4448 					  PCC_TXB_ECC_DB_ERR,
4449 					  &bar0->pcc_err_reg,
4450 					  &sw_stat->pcc_err_cnt))
4451 			goto reset;
4452 		do_s2io_chk_alarm_bit(PCC_FB_ECC_SG_ERR | PCC_TXB_ECC_SG_ERR,
4453 				      &bar0->pcc_err_reg,
4454 				      &sw_stat->pcc_err_cnt);
4455 	}
4456 
4457 	/*check for tti_err*/
4458 	if (val64 & TXDMA_TTI_INT) {
4459 		if (do_s2io_chk_alarm_bit(TTI_SM_ERR_ALARM,
4460 					  &bar0->tti_err_reg,
4461 					  &sw_stat->tti_err_cnt))
4462 			goto reset;
4463 		do_s2io_chk_alarm_bit(TTI_ECC_SG_ERR | TTI_ECC_DB_ERR,
4464 				      &bar0->tti_err_reg,
4465 				      &sw_stat->tti_err_cnt);
4466 	}
4467 
4468 	/*check for lso_err*/
4469 	if (val64 & TXDMA_LSO_INT) {
4470 		if (do_s2io_chk_alarm_bit(LSO6_ABORT | LSO7_ABORT |
4471 					  LSO6_SM_ERR_ALARM | LSO7_SM_ERR_ALARM,
4472 					  &bar0->lso_err_reg,
4473 					  &sw_stat->lso_err_cnt))
4474 			goto reset;
4475 		do_s2io_chk_alarm_bit(LSO6_SEND_OFLOW | LSO7_SEND_OFLOW,
4476 				      &bar0->lso_err_reg,
4477 				      &sw_stat->lso_err_cnt);
4478 	}
4479 
4480 	/*check for tpa_err*/
4481 	if (val64 & TXDMA_TPA_INT) {
4482 		if (do_s2io_chk_alarm_bit(TPA_SM_ERR_ALARM,
4483 					  &bar0->tpa_err_reg,
4484 					  &sw_stat->tpa_err_cnt))
4485 			goto reset;
4486 		do_s2io_chk_alarm_bit(TPA_TX_FRM_DROP,
4487 				      &bar0->tpa_err_reg,
4488 				      &sw_stat->tpa_err_cnt);
4489 	}
4490 
4491 	/*check for sm_err*/
4492 	if (val64 & TXDMA_SM_INT) {
4493 		if (do_s2io_chk_alarm_bit(SM_SM_ERR_ALARM,
4494 					  &bar0->sm_err_reg,
4495 					  &sw_stat->sm_err_cnt))
4496 			goto reset;
4497 	}
4498 
4499 	val64 = readq(&bar0->mac_int_status);
4500 	if (val64 & MAC_INT_STATUS_TMAC_INT) {
4501 		if (do_s2io_chk_alarm_bit(TMAC_TX_BUF_OVRN | TMAC_TX_SM_ERR,
4502 					  &bar0->mac_tmac_err_reg,
4503 					  &sw_stat->mac_tmac_err_cnt))
4504 			goto reset;
4505 		do_s2io_chk_alarm_bit(TMAC_ECC_SG_ERR | TMAC_ECC_DB_ERR |
4506 				      TMAC_DESC_ECC_SG_ERR |
4507 				      TMAC_DESC_ECC_DB_ERR,
4508 				      &bar0->mac_tmac_err_reg,
4509 				      &sw_stat->mac_tmac_err_cnt);
4510 	}
4511 
4512 	val64 = readq(&bar0->xgxs_int_status);
4513 	if (val64 & XGXS_INT_STATUS_TXGXS) {
4514 		if (do_s2io_chk_alarm_bit(TXGXS_ESTORE_UFLOW | TXGXS_TX_SM_ERR,
4515 					  &bar0->xgxs_txgxs_err_reg,
4516 					  &sw_stat->xgxs_txgxs_err_cnt))
4517 			goto reset;
4518 		do_s2io_chk_alarm_bit(TXGXS_ECC_SG_ERR | TXGXS_ECC_DB_ERR,
4519 				      &bar0->xgxs_txgxs_err_reg,
4520 				      &sw_stat->xgxs_txgxs_err_cnt);
4521 	}
4522 
4523 	val64 = readq(&bar0->rxdma_int_status);
4524 	if (val64 & RXDMA_INT_RC_INT_M) {
4525 		if (do_s2io_chk_alarm_bit(RC_PRCn_ECC_DB_ERR |
4526 					  RC_FTC_ECC_DB_ERR |
4527 					  RC_PRCn_SM_ERR_ALARM |
4528 					  RC_FTC_SM_ERR_ALARM,
4529 					  &bar0->rc_err_reg,
4530 					  &sw_stat->rc_err_cnt))
4531 			goto reset;
4532 		do_s2io_chk_alarm_bit(RC_PRCn_ECC_SG_ERR |
4533 				      RC_FTC_ECC_SG_ERR |
4534 				      RC_RDA_FAIL_WR_Rn, &bar0->rc_err_reg,
4535 				      &sw_stat->rc_err_cnt);
4536 		if (do_s2io_chk_alarm_bit(PRC_PCI_AB_RD_Rn |
4537 					  PRC_PCI_AB_WR_Rn |
4538 					  PRC_PCI_AB_F_WR_Rn,
4539 					  &bar0->prc_pcix_err_reg,
4540 					  &sw_stat->prc_pcix_err_cnt))
4541 			goto reset;
4542 		do_s2io_chk_alarm_bit(PRC_PCI_DP_RD_Rn |
4543 				      PRC_PCI_DP_WR_Rn |
4544 				      PRC_PCI_DP_F_WR_Rn,
4545 				      &bar0->prc_pcix_err_reg,
4546 				      &sw_stat->prc_pcix_err_cnt);
4547 	}
4548 
4549 	if (val64 & RXDMA_INT_RPA_INT_M) {
4550 		if (do_s2io_chk_alarm_bit(RPA_SM_ERR_ALARM | RPA_CREDIT_ERR,
4551 					  &bar0->rpa_err_reg,
4552 					  &sw_stat->rpa_err_cnt))
4553 			goto reset;
4554 		do_s2io_chk_alarm_bit(RPA_ECC_SG_ERR | RPA_ECC_DB_ERR,
4555 				      &bar0->rpa_err_reg,
4556 				      &sw_stat->rpa_err_cnt);
4557 	}
4558 
4559 	if (val64 & RXDMA_INT_RDA_INT_M) {
4560 		if (do_s2io_chk_alarm_bit(RDA_RXDn_ECC_DB_ERR |
4561 					  RDA_FRM_ECC_DB_N_AERR |
4562 					  RDA_SM1_ERR_ALARM |
4563 					  RDA_SM0_ERR_ALARM |
4564 					  RDA_RXD_ECC_DB_SERR,
4565 					  &bar0->rda_err_reg,
4566 					  &sw_stat->rda_err_cnt))
4567 			goto reset;
4568 		do_s2io_chk_alarm_bit(RDA_RXDn_ECC_SG_ERR |
4569 				      RDA_FRM_ECC_SG_ERR |
4570 				      RDA_MISC_ERR |
4571 				      RDA_PCIX_ERR,
4572 				      &bar0->rda_err_reg,
4573 				      &sw_stat->rda_err_cnt);
4574 	}
4575 
4576 	if (val64 & RXDMA_INT_RTI_INT_M) {
4577 		if (do_s2io_chk_alarm_bit(RTI_SM_ERR_ALARM,
4578 					  &bar0->rti_err_reg,
4579 					  &sw_stat->rti_err_cnt))
4580 			goto reset;
4581 		do_s2io_chk_alarm_bit(RTI_ECC_SG_ERR | RTI_ECC_DB_ERR,
4582 				      &bar0->rti_err_reg,
4583 				      &sw_stat->rti_err_cnt);
4584 	}
4585 
4586 	val64 = readq(&bar0->mac_int_status);
4587 	if (val64 & MAC_INT_STATUS_RMAC_INT) {
4588 		if (do_s2io_chk_alarm_bit(RMAC_RX_BUFF_OVRN | RMAC_RX_SM_ERR,
4589 					  &bar0->mac_rmac_err_reg,
4590 					  &sw_stat->mac_rmac_err_cnt))
4591 			goto reset;
4592 		do_s2io_chk_alarm_bit(RMAC_UNUSED_INT |
4593 				      RMAC_SINGLE_ECC_ERR |
4594 				      RMAC_DOUBLE_ECC_ERR,
4595 				      &bar0->mac_rmac_err_reg,
4596 				      &sw_stat->mac_rmac_err_cnt);
4597 	}
4598 
4599 	val64 = readq(&bar0->xgxs_int_status);
4600 	if (val64 & XGXS_INT_STATUS_RXGXS) {
4601 		if (do_s2io_chk_alarm_bit(RXGXS_ESTORE_OFLOW | RXGXS_RX_SM_ERR,
4602 					  &bar0->xgxs_rxgxs_err_reg,
4603 					  &sw_stat->xgxs_rxgxs_err_cnt))
4604 			goto reset;
4605 	}
4606 
4607 	val64 = readq(&bar0->mc_int_status);
4608 	if (val64 & MC_INT_STATUS_MC_INT) {
4609 		if (do_s2io_chk_alarm_bit(MC_ERR_REG_SM_ERR,
4610 					  &bar0->mc_err_reg,
4611 					  &sw_stat->mc_err_cnt))
4612 			goto reset;
4613 
4614 		/* Handling Ecc errors */
4615 		if (val64 & (MC_ERR_REG_ECC_ALL_SNG | MC_ERR_REG_ECC_ALL_DBL)) {
4616 			writeq(val64, &bar0->mc_err_reg);
4617 			if (val64 & MC_ERR_REG_ECC_ALL_DBL) {
4618 				sw_stat->double_ecc_errs++;
4619 				if (sp->device_type != XFRAME_II_DEVICE) {
4620 					/*
4621 					 * Reset XframeI only if critical error
4622 					 */
4623 					if (val64 &
4624 					    (MC_ERR_REG_MIRI_ECC_DB_ERR_0 |
4625 					     MC_ERR_REG_MIRI_ECC_DB_ERR_1))
4626 						goto reset;
4627 				}
4628 			} else
4629 				sw_stat->single_ecc_errs++;
4630 		}
4631 	}
4632 	return;
4633 
4634 reset:
4635 	s2io_stop_all_tx_queue(sp);
4636 	schedule_work(&sp->rst_timer_task);
4637 	sw_stat->soft_reset_cnt++;
4638 }
4639 
4640 /**
4641  *  s2io_isr - ISR handler of the device .
4642  *  @irq: the irq of the device.
4643  *  @dev_id: a void pointer to the dev structure of the NIC.
4644  *  Description:  This function is the ISR handler of the device. It
4645  *  identifies the reason for the interrupt and calls the relevant
4646  *  service routines. As a contongency measure, this ISR allocates the
4647  *  recv buffers, if their numbers are below the panic value which is
4648  *  presently set to 25% of the original number of rcv buffers allocated.
4649  *  Return value:
4650  *   IRQ_HANDLED: will be returned if IRQ was handled by this routine
4651  *   IRQ_NONE: will be returned if interrupt is not from our device
4652  */
4653 static irqreturn_t s2io_isr(int irq, void *dev_id)
4654 {
4655 	struct net_device *dev = (struct net_device *)dev_id;
4656 	struct s2io_nic *sp = netdev_priv(dev);
4657 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4658 	int i;
4659 	u64 reason = 0;
4660 	struct mac_info *mac_control;
4661 	struct config_param *config;
4662 
4663 	/* Pretend we handled any irq's from a disconnected card */
4664 	if (pci_channel_offline(sp->pdev))
4665 		return IRQ_NONE;
4666 
4667 	if (!is_s2io_card_up(sp))
4668 		return IRQ_NONE;
4669 
4670 	config = &sp->config;
4671 	mac_control = &sp->mac_control;
4672 
4673 	/*
4674 	 * Identify the cause for interrupt and call the appropriate
4675 	 * interrupt handler. Causes for the interrupt could be;
4676 	 * 1. Rx of packet.
4677 	 * 2. Tx complete.
4678 	 * 3. Link down.
4679 	 */
4680 	reason = readq(&bar0->general_int_status);
4681 
4682 	if (unlikely(reason == S2IO_MINUS_ONE))
4683 		return IRQ_HANDLED;	/* Nothing much can be done. Get out */
4684 
4685 	if (reason &
4686 	    (GEN_INTR_RXTRAFFIC | GEN_INTR_TXTRAFFIC | GEN_INTR_TXPIC)) {
4687 		writeq(S2IO_MINUS_ONE, &bar0->general_int_mask);
4688 
4689 		if (config->napi) {
4690 			if (reason & GEN_INTR_RXTRAFFIC) {
4691 				napi_schedule(&sp->napi);
4692 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_mask);
4693 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int);
4694 				readl(&bar0->rx_traffic_int);
4695 			}
4696 		} else {
4697 			/*
4698 			 * rx_traffic_int reg is an R1 register, writing all 1's
4699 			 * will ensure that the actual interrupt causing bit
4700 			 * get's cleared and hence a read can be avoided.
4701 			 */
4702 			if (reason & GEN_INTR_RXTRAFFIC)
4703 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int);
4704 
4705 			for (i = 0; i < config->rx_ring_num; i++) {
4706 				struct ring_info *ring = &mac_control->rings[i];
4707 
4708 				rx_intr_handler(ring, 0);
4709 			}
4710 		}
4711 
4712 		/*
4713 		 * tx_traffic_int reg is an R1 register, writing all 1's
4714 		 * will ensure that the actual interrupt causing bit get's
4715 		 * cleared and hence a read can be avoided.
4716 		 */
4717 		if (reason & GEN_INTR_TXTRAFFIC)
4718 			writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int);
4719 
4720 		for (i = 0; i < config->tx_fifo_num; i++)
4721 			tx_intr_handler(&mac_control->fifos[i]);
4722 
4723 		if (reason & GEN_INTR_TXPIC)
4724 			s2io_txpic_intr_handle(sp);
4725 
4726 		/*
4727 		 * Reallocate the buffers from the interrupt handler itself.
4728 		 */
4729 		if (!config->napi) {
4730 			for (i = 0; i < config->rx_ring_num; i++) {
4731 				struct ring_info *ring = &mac_control->rings[i];
4732 
4733 				s2io_chk_rx_buffers(sp, ring);
4734 			}
4735 		}
4736 		writeq(sp->general_int_mask, &bar0->general_int_mask);
4737 		readl(&bar0->general_int_status);
4738 
4739 		return IRQ_HANDLED;
4740 
4741 	} else if (!reason) {
4742 		/* The interrupt was not raised by us */
4743 		return IRQ_NONE;
4744 	}
4745 
4746 	return IRQ_HANDLED;
4747 }
4748 
4749 /**
4750  * s2io_updt_stats -
4751  */
4752 static void s2io_updt_stats(struct s2io_nic *sp)
4753 {
4754 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4755 	u64 val64;
4756 	int cnt = 0;
4757 
4758 	if (is_s2io_card_up(sp)) {
4759 		/* Apprx 30us on a 133 MHz bus */
4760 		val64 = SET_UPDT_CLICKS(10) |
4761 			STAT_CFG_ONE_SHOT_EN | STAT_CFG_STAT_EN;
4762 		writeq(val64, &bar0->stat_cfg);
4763 		do {
4764 			udelay(100);
4765 			val64 = readq(&bar0->stat_cfg);
4766 			if (!(val64 & s2BIT(0)))
4767 				break;
4768 			cnt++;
4769 			if (cnt == 5)
4770 				break; /* Updt failed */
4771 		} while (1);
4772 	}
4773 }
4774 
4775 /**
4776  *  s2io_get_stats - Updates the device statistics structure.
4777  *  @dev : pointer to the device structure.
4778  *  Description:
4779  *  This function updates the device statistics structure in the s2io_nic
4780  *  structure and returns a pointer to the same.
4781  *  Return value:
4782  *  pointer to the updated net_device_stats structure.
4783  */
4784 static struct net_device_stats *s2io_get_stats(struct net_device *dev)
4785 {
4786 	struct s2io_nic *sp = netdev_priv(dev);
4787 	struct mac_info *mac_control = &sp->mac_control;
4788 	struct stat_block *stats = mac_control->stats_info;
4789 	u64 delta;
4790 
4791 	/* Configure Stats for immediate updt */
4792 	s2io_updt_stats(sp);
4793 
4794 	/* A device reset will cause the on-adapter statistics to be zero'ed.
4795 	 * This can be done while running by changing the MTU.  To prevent the
4796 	 * system from having the stats zero'ed, the driver keeps a copy of the
4797 	 * last update to the system (which is also zero'ed on reset).  This
4798 	 * enables the driver to accurately know the delta between the last
4799 	 * update and the current update.
4800 	 */
4801 	delta = ((u64) le32_to_cpu(stats->rmac_vld_frms_oflow) << 32 |
4802 		le32_to_cpu(stats->rmac_vld_frms)) - sp->stats.rx_packets;
4803 	sp->stats.rx_packets += delta;
4804 	dev->stats.rx_packets += delta;
4805 
4806 	delta = ((u64) le32_to_cpu(stats->tmac_frms_oflow) << 32 |
4807 		le32_to_cpu(stats->tmac_frms)) - sp->stats.tx_packets;
4808 	sp->stats.tx_packets += delta;
4809 	dev->stats.tx_packets += delta;
4810 
4811 	delta = ((u64) le32_to_cpu(stats->rmac_data_octets_oflow) << 32 |
4812 		le32_to_cpu(stats->rmac_data_octets)) - sp->stats.rx_bytes;
4813 	sp->stats.rx_bytes += delta;
4814 	dev->stats.rx_bytes += delta;
4815 
4816 	delta = ((u64) le32_to_cpu(stats->tmac_data_octets_oflow) << 32 |
4817 		le32_to_cpu(stats->tmac_data_octets)) - sp->stats.tx_bytes;
4818 	sp->stats.tx_bytes += delta;
4819 	dev->stats.tx_bytes += delta;
4820 
4821 	delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_errors;
4822 	sp->stats.rx_errors += delta;
4823 	dev->stats.rx_errors += delta;
4824 
4825 	delta = ((u64) le32_to_cpu(stats->tmac_any_err_frms_oflow) << 32 |
4826 		le32_to_cpu(stats->tmac_any_err_frms)) - sp->stats.tx_errors;
4827 	sp->stats.tx_errors += delta;
4828 	dev->stats.tx_errors += delta;
4829 
4830 	delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_dropped;
4831 	sp->stats.rx_dropped += delta;
4832 	dev->stats.rx_dropped += delta;
4833 
4834 	delta = le64_to_cpu(stats->tmac_drop_frms) - sp->stats.tx_dropped;
4835 	sp->stats.tx_dropped += delta;
4836 	dev->stats.tx_dropped += delta;
4837 
4838 	/* The adapter MAC interprets pause frames as multicast packets, but
4839 	 * does not pass them up.  This erroneously increases the multicast
4840 	 * packet count and needs to be deducted when the multicast frame count
4841 	 * is queried.
4842 	 */
4843 	delta = (u64) le32_to_cpu(stats->rmac_vld_mcst_frms_oflow) << 32 |
4844 		le32_to_cpu(stats->rmac_vld_mcst_frms);
4845 	delta -= le64_to_cpu(stats->rmac_pause_ctrl_frms);
4846 	delta -= sp->stats.multicast;
4847 	sp->stats.multicast += delta;
4848 	dev->stats.multicast += delta;
4849 
4850 	delta = ((u64) le32_to_cpu(stats->rmac_usized_frms_oflow) << 32 |
4851 		le32_to_cpu(stats->rmac_usized_frms)) +
4852 		le64_to_cpu(stats->rmac_long_frms) - sp->stats.rx_length_errors;
4853 	sp->stats.rx_length_errors += delta;
4854 	dev->stats.rx_length_errors += delta;
4855 
4856 	delta = le64_to_cpu(stats->rmac_fcs_err_frms) - sp->stats.rx_crc_errors;
4857 	sp->stats.rx_crc_errors += delta;
4858 	dev->stats.rx_crc_errors += delta;
4859 
4860 	return &dev->stats;
4861 }
4862 
4863 /**
4864  *  s2io_set_multicast - entry point for multicast address enable/disable.
4865  *  @dev : pointer to the device structure
4866  *  Description:
4867  *  This function is a driver entry point which gets called by the kernel
4868  *  whenever multicast addresses must be enabled/disabled. This also gets
4869  *  called to set/reset promiscuous mode. Depending on the deivce flag, we
4870  *  determine, if multicast address must be enabled or if promiscuous mode
4871  *  is to be disabled etc.
4872  *  Return value:
4873  *  void.
4874  */
4875 
4876 static void s2io_set_multicast(struct net_device *dev)
4877 {
4878 	int i, j, prev_cnt;
4879 	struct netdev_hw_addr *ha;
4880 	struct s2io_nic *sp = netdev_priv(dev);
4881 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
4882 	u64 val64 = 0, multi_mac = 0x010203040506ULL, mask =
4883 		0xfeffffffffffULL;
4884 	u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, mac_addr = 0;
4885 	void __iomem *add;
4886 	struct config_param *config = &sp->config;
4887 
4888 	if ((dev->flags & IFF_ALLMULTI) && (!sp->m_cast_flg)) {
4889 		/*  Enable all Multicast addresses */
4890 		writeq(RMAC_ADDR_DATA0_MEM_ADDR(multi_mac),
4891 		       &bar0->rmac_addr_data0_mem);
4892 		writeq(RMAC_ADDR_DATA1_MEM_MASK(mask),
4893 		       &bar0->rmac_addr_data1_mem);
4894 		val64 = RMAC_ADDR_CMD_MEM_WE |
4895 			RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4896 			RMAC_ADDR_CMD_MEM_OFFSET(config->max_mc_addr - 1);
4897 		writeq(val64, &bar0->rmac_addr_cmd_mem);
4898 		/* Wait till command completes */
4899 		wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4900 				      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4901 				      S2IO_BIT_RESET);
4902 
4903 		sp->m_cast_flg = 1;
4904 		sp->all_multi_pos = config->max_mc_addr - 1;
4905 	} else if ((dev->flags & IFF_ALLMULTI) && (sp->m_cast_flg)) {
4906 		/*  Disable all Multicast addresses */
4907 		writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4908 		       &bar0->rmac_addr_data0_mem);
4909 		writeq(RMAC_ADDR_DATA1_MEM_MASK(0x0),
4910 		       &bar0->rmac_addr_data1_mem);
4911 		val64 = RMAC_ADDR_CMD_MEM_WE |
4912 			RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4913 			RMAC_ADDR_CMD_MEM_OFFSET(sp->all_multi_pos);
4914 		writeq(val64, &bar0->rmac_addr_cmd_mem);
4915 		/* Wait till command completes */
4916 		wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4917 				      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4918 				      S2IO_BIT_RESET);
4919 
4920 		sp->m_cast_flg = 0;
4921 		sp->all_multi_pos = 0;
4922 	}
4923 
4924 	if ((dev->flags & IFF_PROMISC) && (!sp->promisc_flg)) {
4925 		/*  Put the NIC into promiscuous mode */
4926 		add = &bar0->mac_cfg;
4927 		val64 = readq(&bar0->mac_cfg);
4928 		val64 |= MAC_CFG_RMAC_PROM_ENABLE;
4929 
4930 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4931 		writel((u32)val64, add);
4932 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4933 		writel((u32) (val64 >> 32), (add + 4));
4934 
4935 		if (vlan_tag_strip != 1) {
4936 			val64 = readq(&bar0->rx_pa_cfg);
4937 			val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
4938 			writeq(val64, &bar0->rx_pa_cfg);
4939 			sp->vlan_strip_flag = 0;
4940 		}
4941 
4942 		val64 = readq(&bar0->mac_cfg);
4943 		sp->promisc_flg = 1;
4944 		DBG_PRINT(INFO_DBG, "%s: entered promiscuous mode\n",
4945 			  dev->name);
4946 	} else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) {
4947 		/*  Remove the NIC from promiscuous mode */
4948 		add = &bar0->mac_cfg;
4949 		val64 = readq(&bar0->mac_cfg);
4950 		val64 &= ~MAC_CFG_RMAC_PROM_ENABLE;
4951 
4952 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4953 		writel((u32)val64, add);
4954 		writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4955 		writel((u32) (val64 >> 32), (add + 4));
4956 
4957 		if (vlan_tag_strip != 0) {
4958 			val64 = readq(&bar0->rx_pa_cfg);
4959 			val64 |= RX_PA_CFG_STRIP_VLAN_TAG;
4960 			writeq(val64, &bar0->rx_pa_cfg);
4961 			sp->vlan_strip_flag = 1;
4962 		}
4963 
4964 		val64 = readq(&bar0->mac_cfg);
4965 		sp->promisc_flg = 0;
4966 		DBG_PRINT(INFO_DBG, "%s: left promiscuous mode\n", dev->name);
4967 	}
4968 
4969 	/*  Update individual M_CAST address list */
4970 	if ((!sp->m_cast_flg) && netdev_mc_count(dev)) {
4971 		if (netdev_mc_count(dev) >
4972 		    (config->max_mc_addr - config->max_mac_addr)) {
4973 			DBG_PRINT(ERR_DBG,
4974 				  "%s: No more Rx filters can be added - "
4975 				  "please enable ALL_MULTI instead\n",
4976 				  dev->name);
4977 			return;
4978 		}
4979 
4980 		prev_cnt = sp->mc_addr_count;
4981 		sp->mc_addr_count = netdev_mc_count(dev);
4982 
4983 		/* Clear out the previous list of Mc in the H/W. */
4984 		for (i = 0; i < prev_cnt; i++) {
4985 			writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4986 			       &bar0->rmac_addr_data0_mem);
4987 			writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
4988 			       &bar0->rmac_addr_data1_mem);
4989 			val64 = RMAC_ADDR_CMD_MEM_WE |
4990 				RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4991 				RMAC_ADDR_CMD_MEM_OFFSET
4992 				(config->mc_start_offset + i);
4993 			writeq(val64, &bar0->rmac_addr_cmd_mem);
4994 
4995 			/* Wait for command completes */
4996 			if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4997 						  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4998 						  S2IO_BIT_RESET)) {
4999 				DBG_PRINT(ERR_DBG,
5000 					  "%s: Adding Multicasts failed\n",
5001 					  dev->name);
5002 				return;
5003 			}
5004 		}
5005 
5006 		/* Create the new Rx filter list and update the same in H/W. */
5007 		i = 0;
5008 		netdev_for_each_mc_addr(ha, dev) {
5009 			mac_addr = 0;
5010 			for (j = 0; j < ETH_ALEN; j++) {
5011 				mac_addr |= ha->addr[j];
5012 				mac_addr <<= 8;
5013 			}
5014 			mac_addr >>= 8;
5015 			writeq(RMAC_ADDR_DATA0_MEM_ADDR(mac_addr),
5016 			       &bar0->rmac_addr_data0_mem);
5017 			writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
5018 			       &bar0->rmac_addr_data1_mem);
5019 			val64 = RMAC_ADDR_CMD_MEM_WE |
5020 				RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5021 				RMAC_ADDR_CMD_MEM_OFFSET
5022 				(i + config->mc_start_offset);
5023 			writeq(val64, &bar0->rmac_addr_cmd_mem);
5024 
5025 			/* Wait for command completes */
5026 			if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5027 						  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5028 						  S2IO_BIT_RESET)) {
5029 				DBG_PRINT(ERR_DBG,
5030 					  "%s: Adding Multicasts failed\n",
5031 					  dev->name);
5032 				return;
5033 			}
5034 			i++;
5035 		}
5036 	}
5037 }
5038 
5039 /* read from CAM unicast & multicast addresses and store it in
5040  * def_mac_addr structure
5041  */
5042 static void do_s2io_store_unicast_mc(struct s2io_nic *sp)
5043 {
5044 	int offset;
5045 	u64 mac_addr = 0x0;
5046 	struct config_param *config = &sp->config;
5047 
5048 	/* store unicast & multicast mac addresses */
5049 	for (offset = 0; offset < config->max_mc_addr; offset++) {
5050 		mac_addr = do_s2io_read_unicast_mc(sp, offset);
5051 		/* if read fails disable the entry */
5052 		if (mac_addr == FAILURE)
5053 			mac_addr = S2IO_DISABLE_MAC_ENTRY;
5054 		do_s2io_copy_mac_addr(sp, offset, mac_addr);
5055 	}
5056 }
5057 
5058 /* restore unicast & multicast MAC to CAM from def_mac_addr structure */
5059 static void do_s2io_restore_unicast_mc(struct s2io_nic *sp)
5060 {
5061 	int offset;
5062 	struct config_param *config = &sp->config;
5063 	/* restore unicast mac address */
5064 	for (offset = 0; offset < config->max_mac_addr; offset++)
5065 		do_s2io_prog_unicast(sp->dev,
5066 				     sp->def_mac_addr[offset].mac_addr);
5067 
5068 	/* restore multicast mac address */
5069 	for (offset = config->mc_start_offset;
5070 	     offset < config->max_mc_addr; offset++)
5071 		do_s2io_add_mc(sp, sp->def_mac_addr[offset].mac_addr);
5072 }
5073 
5074 /* add a multicast MAC address to CAM */
5075 static int do_s2io_add_mc(struct s2io_nic *sp, u8 *addr)
5076 {
5077 	int i;
5078 	u64 mac_addr = 0;
5079 	struct config_param *config = &sp->config;
5080 
5081 	for (i = 0; i < ETH_ALEN; i++) {
5082 		mac_addr <<= 8;
5083 		mac_addr |= addr[i];
5084 	}
5085 	if ((0ULL == mac_addr) || (mac_addr == S2IO_DISABLE_MAC_ENTRY))
5086 		return SUCCESS;
5087 
5088 	/* check if the multicast mac already preset in CAM */
5089 	for (i = config->mc_start_offset; i < config->max_mc_addr; i++) {
5090 		u64 tmp64;
5091 		tmp64 = do_s2io_read_unicast_mc(sp, i);
5092 		if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5093 			break;
5094 
5095 		if (tmp64 == mac_addr)
5096 			return SUCCESS;
5097 	}
5098 	if (i == config->max_mc_addr) {
5099 		DBG_PRINT(ERR_DBG,
5100 			  "CAM full no space left for multicast MAC\n");
5101 		return FAILURE;
5102 	}
5103 	/* Update the internal structure with this new mac address */
5104 	do_s2io_copy_mac_addr(sp, i, mac_addr);
5105 
5106 	return do_s2io_add_mac(sp, mac_addr, i);
5107 }
5108 
5109 /* add MAC address to CAM */
5110 static int do_s2io_add_mac(struct s2io_nic *sp, u64 addr, int off)
5111 {
5112 	u64 val64;
5113 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5114 
5115 	writeq(RMAC_ADDR_DATA0_MEM_ADDR(addr),
5116 	       &bar0->rmac_addr_data0_mem);
5117 
5118 	val64 =	RMAC_ADDR_CMD_MEM_WE | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5119 		RMAC_ADDR_CMD_MEM_OFFSET(off);
5120 	writeq(val64, &bar0->rmac_addr_cmd_mem);
5121 
5122 	/* Wait till command completes */
5123 	if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5124 				  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5125 				  S2IO_BIT_RESET)) {
5126 		DBG_PRINT(INFO_DBG, "do_s2io_add_mac failed\n");
5127 		return FAILURE;
5128 	}
5129 	return SUCCESS;
5130 }
5131 /* deletes a specified unicast/multicast mac entry from CAM */
5132 static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr)
5133 {
5134 	int offset;
5135 	u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, tmp64;
5136 	struct config_param *config = &sp->config;
5137 
5138 	for (offset = 1;
5139 	     offset < config->max_mc_addr; offset++) {
5140 		tmp64 = do_s2io_read_unicast_mc(sp, offset);
5141 		if (tmp64 == addr) {
5142 			/* disable the entry by writing  0xffffffffffffULL */
5143 			if (do_s2io_add_mac(sp, dis_addr, offset) ==  FAILURE)
5144 				return FAILURE;
5145 			/* store the new mac list from CAM */
5146 			do_s2io_store_unicast_mc(sp);
5147 			return SUCCESS;
5148 		}
5149 	}
5150 	DBG_PRINT(ERR_DBG, "MAC address 0x%llx not found in CAM\n",
5151 		  (unsigned long long)addr);
5152 	return FAILURE;
5153 }
5154 
5155 /* read mac entries from CAM */
5156 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset)
5157 {
5158 	u64 tmp64 = 0xffffffffffff0000ULL, val64;
5159 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5160 
5161 	/* read mac addr */
5162 	val64 =	RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5163 		RMAC_ADDR_CMD_MEM_OFFSET(offset);
5164 	writeq(val64, &bar0->rmac_addr_cmd_mem);
5165 
5166 	/* Wait till command completes */
5167 	if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5168 				  RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5169 				  S2IO_BIT_RESET)) {
5170 		DBG_PRINT(INFO_DBG, "do_s2io_read_unicast_mc failed\n");
5171 		return FAILURE;
5172 	}
5173 	tmp64 = readq(&bar0->rmac_addr_data0_mem);
5174 
5175 	return tmp64 >> 16;
5176 }
5177 
5178 /**
5179  * s2io_set_mac_addr - driver entry point
5180  */
5181 
5182 static int s2io_set_mac_addr(struct net_device *dev, void *p)
5183 {
5184 	struct sockaddr *addr = p;
5185 
5186 	if (!is_valid_ether_addr(addr->sa_data))
5187 		return -EADDRNOTAVAIL;
5188 
5189 	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5190 
5191 	/* store the MAC address in CAM */
5192 	return do_s2io_prog_unicast(dev, dev->dev_addr);
5193 }
5194 /**
5195  *  do_s2io_prog_unicast - Programs the Xframe mac address
5196  *  @dev : pointer to the device structure.
5197  *  @addr: a uchar pointer to the new mac address which is to be set.
5198  *  Description : This procedure will program the Xframe to receive
5199  *  frames with new Mac Address
5200  *  Return value: SUCCESS on success and an appropriate (-)ve integer
5201  *  as defined in errno.h file on failure.
5202  */
5203 
5204 static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr)
5205 {
5206 	struct s2io_nic *sp = netdev_priv(dev);
5207 	register u64 mac_addr = 0, perm_addr = 0;
5208 	int i;
5209 	u64 tmp64;
5210 	struct config_param *config = &sp->config;
5211 
5212 	/*
5213 	 * Set the new MAC address as the new unicast filter and reflect this
5214 	 * change on the device address registered with the OS. It will be
5215 	 * at offset 0.
5216 	 */
5217 	for (i = 0; i < ETH_ALEN; i++) {
5218 		mac_addr <<= 8;
5219 		mac_addr |= addr[i];
5220 		perm_addr <<= 8;
5221 		perm_addr |= sp->def_mac_addr[0].mac_addr[i];
5222 	}
5223 
5224 	/* check if the dev_addr is different than perm_addr */
5225 	if (mac_addr == perm_addr)
5226 		return SUCCESS;
5227 
5228 	/* check if the mac already preset in CAM */
5229 	for (i = 1; i < config->max_mac_addr; i++) {
5230 		tmp64 = do_s2io_read_unicast_mc(sp, i);
5231 		if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5232 			break;
5233 
5234 		if (tmp64 == mac_addr) {
5235 			DBG_PRINT(INFO_DBG,
5236 				  "MAC addr:0x%llx already present in CAM\n",
5237 				  (unsigned long long)mac_addr);
5238 			return SUCCESS;
5239 		}
5240 	}
5241 	if (i == config->max_mac_addr) {
5242 		DBG_PRINT(ERR_DBG, "CAM full no space left for Unicast MAC\n");
5243 		return FAILURE;
5244 	}
5245 	/* Update the internal structure with this new mac address */
5246 	do_s2io_copy_mac_addr(sp, i, mac_addr);
5247 
5248 	return do_s2io_add_mac(sp, mac_addr, i);
5249 }
5250 
5251 /**
5252  * s2io_ethtool_set_link_ksettings - Sets different link parameters.
5253  * @sp : private member of the device structure, which is a pointer to the
5254  * s2io_nic structure.
5255  * @cmd: pointer to the structure with parameters given by ethtool to set
5256  * link information.
5257  * Description:
5258  * The function sets different link parameters provided by the user onto
5259  * the NIC.
5260  * Return value:
5261  * 0 on success.
5262  */
5263 
5264 static int
5265 s2io_ethtool_set_link_ksettings(struct net_device *dev,
5266 				const struct ethtool_link_ksettings *cmd)
5267 {
5268 	struct s2io_nic *sp = netdev_priv(dev);
5269 	if ((cmd->base.autoneg == AUTONEG_ENABLE) ||
5270 	    (cmd->base.speed != SPEED_10000) ||
5271 	    (cmd->base.duplex != DUPLEX_FULL))
5272 		return -EINVAL;
5273 	else {
5274 		s2io_close(sp->dev);
5275 		s2io_open(sp->dev);
5276 	}
5277 
5278 	return 0;
5279 }
5280 
5281 /**
5282  * s2io_ethtol_get_link_ksettings - Return link specific information.
5283  * @sp : private member of the device structure, pointer to the
5284  *      s2io_nic structure.
5285  * @cmd : pointer to the structure with parameters given by ethtool
5286  * to return link information.
5287  * Description:
5288  * Returns link specific information like speed, duplex etc.. to ethtool.
5289  * Return value :
5290  * return 0 on success.
5291  */
5292 
5293 static int
5294 s2io_ethtool_get_link_ksettings(struct net_device *dev,
5295 				struct ethtool_link_ksettings *cmd)
5296 {
5297 	struct s2io_nic *sp = netdev_priv(dev);
5298 
5299 	ethtool_link_ksettings_zero_link_mode(cmd, supported);
5300 	ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
5301 	ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
5302 
5303 	ethtool_link_ksettings_zero_link_mode(cmd, advertising);
5304 	ethtool_link_ksettings_add_link_mode(cmd, advertising, 10000baseT_Full);
5305 	ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
5306 
5307 	cmd->base.port = PORT_FIBRE;
5308 
5309 	if (netif_carrier_ok(sp->dev)) {
5310 		cmd->base.speed = SPEED_10000;
5311 		cmd->base.duplex = DUPLEX_FULL;
5312 	} else {
5313 		cmd->base.speed = SPEED_UNKNOWN;
5314 		cmd->base.duplex = DUPLEX_UNKNOWN;
5315 	}
5316 
5317 	cmd->base.autoneg = AUTONEG_DISABLE;
5318 	return 0;
5319 }
5320 
5321 /**
5322  * s2io_ethtool_gdrvinfo - Returns driver specific information.
5323  * @sp : private member of the device structure, which is a pointer to the
5324  * s2io_nic structure.
5325  * @info : pointer to the structure with parameters given by ethtool to
5326  * return driver information.
5327  * Description:
5328  * Returns driver specefic information like name, version etc.. to ethtool.
5329  * Return value:
5330  *  void
5331  */
5332 
5333 static void s2io_ethtool_gdrvinfo(struct net_device *dev,
5334 				  struct ethtool_drvinfo *info)
5335 {
5336 	struct s2io_nic *sp = netdev_priv(dev);
5337 
5338 	strlcpy(info->driver, s2io_driver_name, sizeof(info->driver));
5339 	strlcpy(info->version, s2io_driver_version, sizeof(info->version));
5340 	strlcpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info));
5341 }
5342 
5343 /**
5344  *  s2io_ethtool_gregs - dumps the entire space of Xfame into the buffer.
5345  *  @sp: private member of the device structure, which is a pointer to the
5346  *  s2io_nic structure.
5347  *  @regs : pointer to the structure with parameters given by ethtool for
5348  *  dumping the registers.
5349  *  @reg_space: The input argument into which all the registers are dumped.
5350  *  Description:
5351  *  Dumps the entire register space of xFrame NIC into the user given
5352  *  buffer area.
5353  * Return value :
5354  * void .
5355  */
5356 
5357 static void s2io_ethtool_gregs(struct net_device *dev,
5358 			       struct ethtool_regs *regs, void *space)
5359 {
5360 	int i;
5361 	u64 reg;
5362 	u8 *reg_space = (u8 *)space;
5363 	struct s2io_nic *sp = netdev_priv(dev);
5364 
5365 	regs->len = XENA_REG_SPACE;
5366 	regs->version = sp->pdev->subsystem_device;
5367 
5368 	for (i = 0; i < regs->len; i += 8) {
5369 		reg = readq(sp->bar0 + i);
5370 		memcpy((reg_space + i), &reg, 8);
5371 	}
5372 }
5373 
5374 /*
5375  *  s2io_set_led - control NIC led
5376  */
5377 static void s2io_set_led(struct s2io_nic *sp, bool on)
5378 {
5379 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5380 	u16 subid = sp->pdev->subsystem_device;
5381 	u64 val64;
5382 
5383 	if ((sp->device_type == XFRAME_II_DEVICE) ||
5384 	    ((subid & 0xFF) >= 0x07)) {
5385 		val64 = readq(&bar0->gpio_control);
5386 		if (on)
5387 			val64 |= GPIO_CTRL_GPIO_0;
5388 		else
5389 			val64 &= ~GPIO_CTRL_GPIO_0;
5390 
5391 		writeq(val64, &bar0->gpio_control);
5392 	} else {
5393 		val64 = readq(&bar0->adapter_control);
5394 		if (on)
5395 			val64 |= ADAPTER_LED_ON;
5396 		else
5397 			val64 &= ~ADAPTER_LED_ON;
5398 
5399 		writeq(val64, &bar0->adapter_control);
5400 	}
5401 
5402 }
5403 
5404 /**
5405  * s2io_ethtool_set_led - To physically identify the nic on the system.
5406  * @dev : network device
5407  * @state: led setting
5408  *
5409  * Description: Used to physically identify the NIC on the system.
5410  * The Link LED will blink for a time specified by the user for
5411  * identification.
5412  * NOTE: The Link has to be Up to be able to blink the LED. Hence
5413  * identification is possible only if it's link is up.
5414  */
5415 
5416 static int s2io_ethtool_set_led(struct net_device *dev,
5417 				enum ethtool_phys_id_state state)
5418 {
5419 	struct s2io_nic *sp = netdev_priv(dev);
5420 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5421 	u16 subid = sp->pdev->subsystem_device;
5422 
5423 	if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) {
5424 		u64 val64 = readq(&bar0->adapter_control);
5425 		if (!(val64 & ADAPTER_CNTL_EN)) {
5426 			pr_err("Adapter Link down, cannot blink LED\n");
5427 			return -EAGAIN;
5428 		}
5429 	}
5430 
5431 	switch (state) {
5432 	case ETHTOOL_ID_ACTIVE:
5433 		sp->adapt_ctrl_org = readq(&bar0->gpio_control);
5434 		return 1;	/* cycle on/off once per second */
5435 
5436 	case ETHTOOL_ID_ON:
5437 		s2io_set_led(sp, true);
5438 		break;
5439 
5440 	case ETHTOOL_ID_OFF:
5441 		s2io_set_led(sp, false);
5442 		break;
5443 
5444 	case ETHTOOL_ID_INACTIVE:
5445 		if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid))
5446 			writeq(sp->adapt_ctrl_org, &bar0->gpio_control);
5447 	}
5448 
5449 	return 0;
5450 }
5451 
5452 static void s2io_ethtool_gringparam(struct net_device *dev,
5453 				    struct ethtool_ringparam *ering)
5454 {
5455 	struct s2io_nic *sp = netdev_priv(dev);
5456 	int i, tx_desc_count = 0, rx_desc_count = 0;
5457 
5458 	if (sp->rxd_mode == RXD_MODE_1) {
5459 		ering->rx_max_pending = MAX_RX_DESC_1;
5460 		ering->rx_jumbo_max_pending = MAX_RX_DESC_1;
5461 	} else {
5462 		ering->rx_max_pending = MAX_RX_DESC_2;
5463 		ering->rx_jumbo_max_pending = MAX_RX_DESC_2;
5464 	}
5465 
5466 	ering->tx_max_pending = MAX_TX_DESC;
5467 
5468 	for (i = 0; i < sp->config.rx_ring_num; i++)
5469 		rx_desc_count += sp->config.rx_cfg[i].num_rxd;
5470 	ering->rx_pending = rx_desc_count;
5471 	ering->rx_jumbo_pending = rx_desc_count;
5472 
5473 	for (i = 0; i < sp->config.tx_fifo_num; i++)
5474 		tx_desc_count += sp->config.tx_cfg[i].fifo_len;
5475 	ering->tx_pending = tx_desc_count;
5476 	DBG_PRINT(INFO_DBG, "max txds: %d\n", sp->config.max_txds);
5477 }
5478 
5479 /**
5480  * s2io_ethtool_getpause_data -Pause frame frame generation and reception.
5481  * @sp : private member of the device structure, which is a pointer to the
5482  *	s2io_nic structure.
5483  * @ep : pointer to the structure with pause parameters given by ethtool.
5484  * Description:
5485  * Returns the Pause frame generation and reception capability of the NIC.
5486  * Return value:
5487  *  void
5488  */
5489 static void s2io_ethtool_getpause_data(struct net_device *dev,
5490 				       struct ethtool_pauseparam *ep)
5491 {
5492 	u64 val64;
5493 	struct s2io_nic *sp = netdev_priv(dev);
5494 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5495 
5496 	val64 = readq(&bar0->rmac_pause_cfg);
5497 	if (val64 & RMAC_PAUSE_GEN_ENABLE)
5498 		ep->tx_pause = true;
5499 	if (val64 & RMAC_PAUSE_RX_ENABLE)
5500 		ep->rx_pause = true;
5501 	ep->autoneg = false;
5502 }
5503 
5504 /**
5505  * s2io_ethtool_setpause_data -  set/reset pause frame generation.
5506  * @sp : private member of the device structure, which is a pointer to the
5507  *      s2io_nic structure.
5508  * @ep : pointer to the structure with pause parameters given by ethtool.
5509  * Description:
5510  * It can be used to set or reset Pause frame generation or reception
5511  * support of the NIC.
5512  * Return value:
5513  * int, returns 0 on Success
5514  */
5515 
5516 static int s2io_ethtool_setpause_data(struct net_device *dev,
5517 				      struct ethtool_pauseparam *ep)
5518 {
5519 	u64 val64;
5520 	struct s2io_nic *sp = netdev_priv(dev);
5521 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5522 
5523 	val64 = readq(&bar0->rmac_pause_cfg);
5524 	if (ep->tx_pause)
5525 		val64 |= RMAC_PAUSE_GEN_ENABLE;
5526 	else
5527 		val64 &= ~RMAC_PAUSE_GEN_ENABLE;
5528 	if (ep->rx_pause)
5529 		val64 |= RMAC_PAUSE_RX_ENABLE;
5530 	else
5531 		val64 &= ~RMAC_PAUSE_RX_ENABLE;
5532 	writeq(val64, &bar0->rmac_pause_cfg);
5533 	return 0;
5534 }
5535 
5536 /**
5537  * read_eeprom - reads 4 bytes of data from user given offset.
5538  * @sp : private member of the device structure, which is a pointer to the
5539  *      s2io_nic structure.
5540  * @off : offset at which the data must be written
5541  * @data : Its an output parameter where the data read at the given
5542  *	offset is stored.
5543  * Description:
5544  * Will read 4 bytes of data from the user given offset and return the
5545  * read data.
5546  * NOTE: Will allow to read only part of the EEPROM visible through the
5547  *   I2C bus.
5548  * Return value:
5549  *  -1 on failure and 0 on success.
5550  */
5551 
5552 #define S2IO_DEV_ID		5
5553 static int read_eeprom(struct s2io_nic *sp, int off, u64 *data)
5554 {
5555 	int ret = -1;
5556 	u32 exit_cnt = 0;
5557 	u64 val64;
5558 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5559 
5560 	if (sp->device_type == XFRAME_I_DEVICE) {
5561 		val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5562 			I2C_CONTROL_ADDR(off) |
5563 			I2C_CONTROL_BYTE_CNT(0x3) |
5564 			I2C_CONTROL_READ |
5565 			I2C_CONTROL_CNTL_START;
5566 		SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5567 
5568 		while (exit_cnt < 5) {
5569 			val64 = readq(&bar0->i2c_control);
5570 			if (I2C_CONTROL_CNTL_END(val64)) {
5571 				*data = I2C_CONTROL_GET_DATA(val64);
5572 				ret = 0;
5573 				break;
5574 			}
5575 			msleep(50);
5576 			exit_cnt++;
5577 		}
5578 	}
5579 
5580 	if (sp->device_type == XFRAME_II_DEVICE) {
5581 		val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5582 			SPI_CONTROL_BYTECNT(0x3) |
5583 			SPI_CONTROL_CMD(0x3) | SPI_CONTROL_ADDR(off);
5584 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5585 		val64 |= SPI_CONTROL_REQ;
5586 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5587 		while (exit_cnt < 5) {
5588 			val64 = readq(&bar0->spi_control);
5589 			if (val64 & SPI_CONTROL_NACK) {
5590 				ret = 1;
5591 				break;
5592 			} else if (val64 & SPI_CONTROL_DONE) {
5593 				*data = readq(&bar0->spi_data);
5594 				*data &= 0xffffff;
5595 				ret = 0;
5596 				break;
5597 			}
5598 			msleep(50);
5599 			exit_cnt++;
5600 		}
5601 	}
5602 	return ret;
5603 }
5604 
5605 /**
5606  *  write_eeprom - actually writes the relevant part of the data value.
5607  *  @sp : private member of the device structure, which is a pointer to the
5608  *       s2io_nic structure.
5609  *  @off : offset at which the data must be written
5610  *  @data : The data that is to be written
5611  *  @cnt : Number of bytes of the data that are actually to be written into
5612  *  the Eeprom. (max of 3)
5613  * Description:
5614  *  Actually writes the relevant part of the data value into the Eeprom
5615  *  through the I2C bus.
5616  * Return value:
5617  *  0 on success, -1 on failure.
5618  */
5619 
5620 static int write_eeprom(struct s2io_nic *sp, int off, u64 data, int cnt)
5621 {
5622 	int exit_cnt = 0, ret = -1;
5623 	u64 val64;
5624 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5625 
5626 	if (sp->device_type == XFRAME_I_DEVICE) {
5627 		val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5628 			I2C_CONTROL_ADDR(off) |
5629 			I2C_CONTROL_BYTE_CNT(cnt) |
5630 			I2C_CONTROL_SET_DATA((u32)data) |
5631 			I2C_CONTROL_CNTL_START;
5632 		SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5633 
5634 		while (exit_cnt < 5) {
5635 			val64 = readq(&bar0->i2c_control);
5636 			if (I2C_CONTROL_CNTL_END(val64)) {
5637 				if (!(val64 & I2C_CONTROL_NACK))
5638 					ret = 0;
5639 				break;
5640 			}
5641 			msleep(50);
5642 			exit_cnt++;
5643 		}
5644 	}
5645 
5646 	if (sp->device_type == XFRAME_II_DEVICE) {
5647 		int write_cnt = (cnt == 8) ? 0 : cnt;
5648 		writeq(SPI_DATA_WRITE(data, (cnt << 3)), &bar0->spi_data);
5649 
5650 		val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5651 			SPI_CONTROL_BYTECNT(write_cnt) |
5652 			SPI_CONTROL_CMD(0x2) | SPI_CONTROL_ADDR(off);
5653 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5654 		val64 |= SPI_CONTROL_REQ;
5655 		SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5656 		while (exit_cnt < 5) {
5657 			val64 = readq(&bar0->spi_control);
5658 			if (val64 & SPI_CONTROL_NACK) {
5659 				ret = 1;
5660 				break;
5661 			} else if (val64 & SPI_CONTROL_DONE) {
5662 				ret = 0;
5663 				break;
5664 			}
5665 			msleep(50);
5666 			exit_cnt++;
5667 		}
5668 	}
5669 	return ret;
5670 }
5671 static void s2io_vpd_read(struct s2io_nic *nic)
5672 {
5673 	u8 *vpd_data;
5674 	u8 data;
5675 	int i = 0, cnt, len, fail = 0;
5676 	int vpd_addr = 0x80;
5677 	struct swStat *swstats = &nic->mac_control.stats_info->sw_stat;
5678 
5679 	if (nic->device_type == XFRAME_II_DEVICE) {
5680 		strcpy(nic->product_name, "Xframe II 10GbE network adapter");
5681 		vpd_addr = 0x80;
5682 	} else {
5683 		strcpy(nic->product_name, "Xframe I 10GbE network adapter");
5684 		vpd_addr = 0x50;
5685 	}
5686 	strcpy(nic->serial_num, "NOT AVAILABLE");
5687 
5688 	vpd_data = kmalloc(256, GFP_KERNEL);
5689 	if (!vpd_data) {
5690 		swstats->mem_alloc_fail_cnt++;
5691 		return;
5692 	}
5693 	swstats->mem_allocated += 256;
5694 
5695 	for (i = 0; i < 256; i += 4) {
5696 		pci_write_config_byte(nic->pdev, (vpd_addr + 2), i);
5697 		pci_read_config_byte(nic->pdev,  (vpd_addr + 2), &data);
5698 		pci_write_config_byte(nic->pdev, (vpd_addr + 3), 0);
5699 		for (cnt = 0; cnt < 5; cnt++) {
5700 			msleep(2);
5701 			pci_read_config_byte(nic->pdev, (vpd_addr + 3), &data);
5702 			if (data == 0x80)
5703 				break;
5704 		}
5705 		if (cnt >= 5) {
5706 			DBG_PRINT(ERR_DBG, "Read of VPD data failed\n");
5707 			fail = 1;
5708 			break;
5709 		}
5710 		pci_read_config_dword(nic->pdev,  (vpd_addr + 4),
5711 				      (u32 *)&vpd_data[i]);
5712 	}
5713 
5714 	if (!fail) {
5715 		/* read serial number of adapter */
5716 		for (cnt = 0; cnt < 252; cnt++) {
5717 			if ((vpd_data[cnt] == 'S') &&
5718 			    (vpd_data[cnt+1] == 'N')) {
5719 				len = vpd_data[cnt+2];
5720 				if (len < min(VPD_STRING_LEN, 256-cnt-2)) {
5721 					memcpy(nic->serial_num,
5722 					       &vpd_data[cnt + 3],
5723 					       len);
5724 					memset(nic->serial_num+len,
5725 					       0,
5726 					       VPD_STRING_LEN-len);
5727 					break;
5728 				}
5729 			}
5730 		}
5731 	}
5732 
5733 	if ((!fail) && (vpd_data[1] < VPD_STRING_LEN)) {
5734 		len = vpd_data[1];
5735 		memcpy(nic->product_name, &vpd_data[3], len);
5736 		nic->product_name[len] = 0;
5737 	}
5738 	kfree(vpd_data);
5739 	swstats->mem_freed += 256;
5740 }
5741 
5742 /**
5743  *  s2io_ethtool_geeprom  - reads the value stored in the Eeprom.
5744  *  @sp : private member of the device structure, which is a pointer to the
5745  *  s2io_nic structure.
5746  *  @eeprom : pointer to the user level structure provided by ethtool,
5747  *  containing all relevant information.
5748  *  @data_buf : user defined value to be written into Eeprom.
5749  *  Description: Reads the values stored in the Eeprom at given offset
5750  *  for a given length. Stores these values int the input argument data
5751  *  buffer 'data_buf' and returns these to the caller (ethtool.)
5752  *  Return value:
5753  *  int  0 on success
5754  */
5755 
5756 static int s2io_ethtool_geeprom(struct net_device *dev,
5757 				struct ethtool_eeprom *eeprom, u8 * data_buf)
5758 {
5759 	u32 i, valid;
5760 	u64 data;
5761 	struct s2io_nic *sp = netdev_priv(dev);
5762 
5763 	eeprom->magic = sp->pdev->vendor | (sp->pdev->device << 16);
5764 
5765 	if ((eeprom->offset + eeprom->len) > (XENA_EEPROM_SPACE))
5766 		eeprom->len = XENA_EEPROM_SPACE - eeprom->offset;
5767 
5768 	for (i = 0; i < eeprom->len; i += 4) {
5769 		if (read_eeprom(sp, (eeprom->offset + i), &data)) {
5770 			DBG_PRINT(ERR_DBG, "Read of EEPROM failed\n");
5771 			return -EFAULT;
5772 		}
5773 		valid = INV(data);
5774 		memcpy((data_buf + i), &valid, 4);
5775 	}
5776 	return 0;
5777 }
5778 
5779 /**
5780  *  s2io_ethtool_seeprom - tries to write the user provided value in Eeprom
5781  *  @sp : private member of the device structure, which is a pointer to the
5782  *  s2io_nic structure.
5783  *  @eeprom : pointer to the user level structure provided by ethtool,
5784  *  containing all relevant information.
5785  *  @data_buf ; user defined value to be written into Eeprom.
5786  *  Description:
5787  *  Tries to write the user provided value in the Eeprom, at the offset
5788  *  given by the user.
5789  *  Return value:
5790  *  0 on success, -EFAULT on failure.
5791  */
5792 
5793 static int s2io_ethtool_seeprom(struct net_device *dev,
5794 				struct ethtool_eeprom *eeprom,
5795 				u8 *data_buf)
5796 {
5797 	int len = eeprom->len, cnt = 0;
5798 	u64 valid = 0, data;
5799 	struct s2io_nic *sp = netdev_priv(dev);
5800 
5801 	if (eeprom->magic != (sp->pdev->vendor | (sp->pdev->device << 16))) {
5802 		DBG_PRINT(ERR_DBG,
5803 			  "ETHTOOL_WRITE_EEPROM Err: "
5804 			  "Magic value is wrong, it is 0x%x should be 0x%x\n",
5805 			  (sp->pdev->vendor | (sp->pdev->device << 16)),
5806 			  eeprom->magic);
5807 		return -EFAULT;
5808 	}
5809 
5810 	while (len) {
5811 		data = (u32)data_buf[cnt] & 0x000000FF;
5812 		if (data)
5813 			valid = (u32)(data << 24);
5814 		else
5815 			valid = data;
5816 
5817 		if (write_eeprom(sp, (eeprom->offset + cnt), valid, 0)) {
5818 			DBG_PRINT(ERR_DBG,
5819 				  "ETHTOOL_WRITE_EEPROM Err: "
5820 				  "Cannot write into the specified offset\n");
5821 			return -EFAULT;
5822 		}
5823 		cnt++;
5824 		len--;
5825 	}
5826 
5827 	return 0;
5828 }
5829 
5830 /**
5831  * s2io_register_test - reads and writes into all clock domains.
5832  * @sp : private member of the device structure, which is a pointer to the
5833  * s2io_nic structure.
5834  * @data : variable that returns the result of each of the test conducted b
5835  * by the driver.
5836  * Description:
5837  * Read and write into all clock domains. The NIC has 3 clock domains,
5838  * see that registers in all the three regions are accessible.
5839  * Return value:
5840  * 0 on success.
5841  */
5842 
5843 static int s2io_register_test(struct s2io_nic *sp, uint64_t *data)
5844 {
5845 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
5846 	u64 val64 = 0, exp_val;
5847 	int fail = 0;
5848 
5849 	val64 = readq(&bar0->pif_rd_swapper_fb);
5850 	if (val64 != 0x123456789abcdefULL) {
5851 		fail = 1;
5852 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 1);
5853 	}
5854 
5855 	val64 = readq(&bar0->rmac_pause_cfg);
5856 	if (val64 != 0xc000ffff00000000ULL) {
5857 		fail = 1;
5858 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 2);
5859 	}
5860 
5861 	val64 = readq(&bar0->rx_queue_cfg);
5862 	if (sp->device_type == XFRAME_II_DEVICE)
5863 		exp_val = 0x0404040404040404ULL;
5864 	else
5865 		exp_val = 0x0808080808080808ULL;
5866 	if (val64 != exp_val) {
5867 		fail = 1;
5868 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 3);
5869 	}
5870 
5871 	val64 = readq(&bar0->xgxs_efifo_cfg);
5872 	if (val64 != 0x000000001923141EULL) {
5873 		fail = 1;
5874 		DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 4);
5875 	}
5876 
5877 	val64 = 0x5A5A5A5A5A5A5A5AULL;
5878 	writeq(val64, &bar0->xmsi_data);
5879 	val64 = readq(&bar0->xmsi_data);
5880 	if (val64 != 0x5A5A5A5A5A5A5A5AULL) {
5881 		fail = 1;
5882 		DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 1);
5883 	}
5884 
5885 	val64 = 0xA5A5A5A5A5A5A5A5ULL;
5886 	writeq(val64, &bar0->xmsi_data);
5887 	val64 = readq(&bar0->xmsi_data);
5888 	if (val64 != 0xA5A5A5A5A5A5A5A5ULL) {
5889 		fail = 1;
5890 		DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 2);
5891 	}
5892 
5893 	*data = fail;
5894 	return fail;
5895 }
5896 
5897 /**
5898  * s2io_eeprom_test - to verify that EEprom in the xena can be programmed.
5899  * @sp : private member of the device structure, which is a pointer to the
5900  * s2io_nic structure.
5901  * @data:variable that returns the result of each of the test conducted by
5902  * the driver.
5903  * Description:
5904  * Verify that EEPROM in the xena can be programmed using I2C_CONTROL
5905  * register.
5906  * Return value:
5907  * 0 on success.
5908  */
5909 
5910 static int s2io_eeprom_test(struct s2io_nic *sp, uint64_t *data)
5911 {
5912 	int fail = 0;
5913 	u64 ret_data, org_4F0, org_7F0;
5914 	u8 saved_4F0 = 0, saved_7F0 = 0;
5915 	struct net_device *dev = sp->dev;
5916 
5917 	/* Test Write Error at offset 0 */
5918 	/* Note that SPI interface allows write access to all areas
5919 	 * of EEPROM. Hence doing all negative testing only for Xframe I.
5920 	 */
5921 	if (sp->device_type == XFRAME_I_DEVICE)
5922 		if (!write_eeprom(sp, 0, 0, 3))
5923 			fail = 1;
5924 
5925 	/* Save current values at offsets 0x4F0 and 0x7F0 */
5926 	if (!read_eeprom(sp, 0x4F0, &org_4F0))
5927 		saved_4F0 = 1;
5928 	if (!read_eeprom(sp, 0x7F0, &org_7F0))
5929 		saved_7F0 = 1;
5930 
5931 	/* Test Write at offset 4f0 */
5932 	if (write_eeprom(sp, 0x4F0, 0x012345, 3))
5933 		fail = 1;
5934 	if (read_eeprom(sp, 0x4F0, &ret_data))
5935 		fail = 1;
5936 
5937 	if (ret_data != 0x012345) {
5938 		DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x4F0. "
5939 			  "Data written %llx Data read %llx\n",
5940 			  dev->name, (unsigned long long)0x12345,
5941 			  (unsigned long long)ret_data);
5942 		fail = 1;
5943 	}
5944 
5945 	/* Reset the EEPROM data go FFFF */
5946 	write_eeprom(sp, 0x4F0, 0xFFFFFF, 3);
5947 
5948 	/* Test Write Request Error at offset 0x7c */
5949 	if (sp->device_type == XFRAME_I_DEVICE)
5950 		if (!write_eeprom(sp, 0x07C, 0, 3))
5951 			fail = 1;
5952 
5953 	/* Test Write Request at offset 0x7f0 */
5954 	if (write_eeprom(sp, 0x7F0, 0x012345, 3))
5955 		fail = 1;
5956 	if (read_eeprom(sp, 0x7F0, &ret_data))
5957 		fail = 1;
5958 
5959 	if (ret_data != 0x012345) {
5960 		DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x7F0. "
5961 			  "Data written %llx Data read %llx\n",
5962 			  dev->name, (unsigned long long)0x12345,
5963 			  (unsigned long long)ret_data);
5964 		fail = 1;
5965 	}
5966 
5967 	/* Reset the EEPROM data go FFFF */
5968 	write_eeprom(sp, 0x7F0, 0xFFFFFF, 3);
5969 
5970 	if (sp->device_type == XFRAME_I_DEVICE) {
5971 		/* Test Write Error at offset 0x80 */
5972 		if (!write_eeprom(sp, 0x080, 0, 3))
5973 			fail = 1;
5974 
5975 		/* Test Write Error at offset 0xfc */
5976 		if (!write_eeprom(sp, 0x0FC, 0, 3))
5977 			fail = 1;
5978 
5979 		/* Test Write Error at offset 0x100 */
5980 		if (!write_eeprom(sp, 0x100, 0, 3))
5981 			fail = 1;
5982 
5983 		/* Test Write Error at offset 4ec */
5984 		if (!write_eeprom(sp, 0x4EC, 0, 3))
5985 			fail = 1;
5986 	}
5987 
5988 	/* Restore values at offsets 0x4F0 and 0x7F0 */
5989 	if (saved_4F0)
5990 		write_eeprom(sp, 0x4F0, org_4F0, 3);
5991 	if (saved_7F0)
5992 		write_eeprom(sp, 0x7F0, org_7F0, 3);
5993 
5994 	*data = fail;
5995 	return fail;
5996 }
5997 
5998 /**
5999  * s2io_bist_test - invokes the MemBist test of the card .
6000  * @sp : private member of the device structure, which is a pointer to the
6001  * s2io_nic structure.
6002  * @data:variable that returns the result of each of the test conducted by
6003  * the driver.
6004  * Description:
6005  * This invokes the MemBist test of the card. We give around
6006  * 2 secs time for the Test to complete. If it's still not complete
6007  * within this peiod, we consider that the test failed.
6008  * Return value:
6009  * 0 on success and -1 on failure.
6010  */
6011 
6012 static int s2io_bist_test(struct s2io_nic *sp, uint64_t *data)
6013 {
6014 	u8 bist = 0;
6015 	int cnt = 0, ret = -1;
6016 
6017 	pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6018 	bist |= PCI_BIST_START;
6019 	pci_write_config_word(sp->pdev, PCI_BIST, bist);
6020 
6021 	while (cnt < 20) {
6022 		pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6023 		if (!(bist & PCI_BIST_START)) {
6024 			*data = (bist & PCI_BIST_CODE_MASK);
6025 			ret = 0;
6026 			break;
6027 		}
6028 		msleep(100);
6029 		cnt++;
6030 	}
6031 
6032 	return ret;
6033 }
6034 
6035 /**
6036  * s2io_link_test - verifies the link state of the nic
6037  * @sp ; private member of the device structure, which is a pointer to the
6038  * s2io_nic structure.
6039  * @data: variable that returns the result of each of the test conducted by
6040  * the driver.
6041  * Description:
6042  * The function verifies the link state of the NIC and updates the input
6043  * argument 'data' appropriately.
6044  * Return value:
6045  * 0 on success.
6046  */
6047 
6048 static int s2io_link_test(struct s2io_nic *sp, uint64_t *data)
6049 {
6050 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
6051 	u64 val64;
6052 
6053 	val64 = readq(&bar0->adapter_status);
6054 	if (!(LINK_IS_UP(val64)))
6055 		*data = 1;
6056 	else
6057 		*data = 0;
6058 
6059 	return *data;
6060 }
6061 
6062 /**
6063  * s2io_rldram_test - offline test for access to the RldRam chip on the NIC
6064  * @sp: private member of the device structure, which is a pointer to the
6065  * s2io_nic structure.
6066  * @data: variable that returns the result of each of the test
6067  * conducted by the driver.
6068  * Description:
6069  *  This is one of the offline test that tests the read and write
6070  *  access to the RldRam chip on the NIC.
6071  * Return value:
6072  *  0 on success.
6073  */
6074 
6075 static int s2io_rldram_test(struct s2io_nic *sp, uint64_t *data)
6076 {
6077 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
6078 	u64 val64;
6079 	int cnt, iteration = 0, test_fail = 0;
6080 
6081 	val64 = readq(&bar0->adapter_control);
6082 	val64 &= ~ADAPTER_ECC_EN;
6083 	writeq(val64, &bar0->adapter_control);
6084 
6085 	val64 = readq(&bar0->mc_rldram_test_ctrl);
6086 	val64 |= MC_RLDRAM_TEST_MODE;
6087 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6088 
6089 	val64 = readq(&bar0->mc_rldram_mrs);
6090 	val64 |= MC_RLDRAM_QUEUE_SIZE_ENABLE;
6091 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6092 
6093 	val64 |= MC_RLDRAM_MRS_ENABLE;
6094 	SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6095 
6096 	while (iteration < 2) {
6097 		val64 = 0x55555555aaaa0000ULL;
6098 		if (iteration == 1)
6099 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6100 		writeq(val64, &bar0->mc_rldram_test_d0);
6101 
6102 		val64 = 0xaaaa5a5555550000ULL;
6103 		if (iteration == 1)
6104 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6105 		writeq(val64, &bar0->mc_rldram_test_d1);
6106 
6107 		val64 = 0x55aaaaaaaa5a0000ULL;
6108 		if (iteration == 1)
6109 			val64 ^= 0xFFFFFFFFFFFF0000ULL;
6110 		writeq(val64, &bar0->mc_rldram_test_d2);
6111 
6112 		val64 = (u64) (0x0000003ffffe0100ULL);
6113 		writeq(val64, &bar0->mc_rldram_test_add);
6114 
6115 		val64 = MC_RLDRAM_TEST_MODE |
6116 			MC_RLDRAM_TEST_WRITE |
6117 			MC_RLDRAM_TEST_GO;
6118 		SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6119 
6120 		for (cnt = 0; cnt < 5; cnt++) {
6121 			val64 = readq(&bar0->mc_rldram_test_ctrl);
6122 			if (val64 & MC_RLDRAM_TEST_DONE)
6123 				break;
6124 			msleep(200);
6125 		}
6126 
6127 		if (cnt == 5)
6128 			break;
6129 
6130 		val64 = MC_RLDRAM_TEST_MODE | MC_RLDRAM_TEST_GO;
6131 		SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6132 
6133 		for (cnt = 0; cnt < 5; cnt++) {
6134 			val64 = readq(&bar0->mc_rldram_test_ctrl);
6135 			if (val64 & MC_RLDRAM_TEST_DONE)
6136 				break;
6137 			msleep(500);
6138 		}
6139 
6140 		if (cnt == 5)
6141 			break;
6142 
6143 		val64 = readq(&bar0->mc_rldram_test_ctrl);
6144 		if (!(val64 & MC_RLDRAM_TEST_PASS))
6145 			test_fail = 1;
6146 
6147 		iteration++;
6148 	}
6149 
6150 	*data = test_fail;
6151 
6152 	/* Bring the adapter out of test mode */
6153 	SPECIAL_REG_WRITE(0, &bar0->mc_rldram_test_ctrl, LF);
6154 
6155 	return test_fail;
6156 }
6157 
6158 /**
6159  *  s2io_ethtool_test - conducts 6 tsets to determine the health of card.
6160  *  @sp : private member of the device structure, which is a pointer to the
6161  *  s2io_nic structure.
6162  *  @ethtest : pointer to a ethtool command specific structure that will be
6163  *  returned to the user.
6164  *  @data : variable that returns the result of each of the test
6165  * conducted by the driver.
6166  * Description:
6167  *  This function conducts 6 tests ( 4 offline and 2 online) to determine
6168  *  the health of the card.
6169  * Return value:
6170  *  void
6171  */
6172 
6173 static void s2io_ethtool_test(struct net_device *dev,
6174 			      struct ethtool_test *ethtest,
6175 			      uint64_t *data)
6176 {
6177 	struct s2io_nic *sp = netdev_priv(dev);
6178 	int orig_state = netif_running(sp->dev);
6179 
6180 	if (ethtest->flags == ETH_TEST_FL_OFFLINE) {
6181 		/* Offline Tests. */
6182 		if (orig_state)
6183 			s2io_close(sp->dev);
6184 
6185 		if (s2io_register_test(sp, &data[0]))
6186 			ethtest->flags |= ETH_TEST_FL_FAILED;
6187 
6188 		s2io_reset(sp);
6189 
6190 		if (s2io_rldram_test(sp, &data[3]))
6191 			ethtest->flags |= ETH_TEST_FL_FAILED;
6192 
6193 		s2io_reset(sp);
6194 
6195 		if (s2io_eeprom_test(sp, &data[1]))
6196 			ethtest->flags |= ETH_TEST_FL_FAILED;
6197 
6198 		if (s2io_bist_test(sp, &data[4]))
6199 			ethtest->flags |= ETH_TEST_FL_FAILED;
6200 
6201 		if (orig_state)
6202 			s2io_open(sp->dev);
6203 
6204 		data[2] = 0;
6205 	} else {
6206 		/* Online Tests. */
6207 		if (!orig_state) {
6208 			DBG_PRINT(ERR_DBG, "%s: is not up, cannot run test\n",
6209 				  dev->name);
6210 			data[0] = -1;
6211 			data[1] = -1;
6212 			data[2] = -1;
6213 			data[3] = -1;
6214 			data[4] = -1;
6215 		}
6216 
6217 		if (s2io_link_test(sp, &data[2]))
6218 			ethtest->flags |= ETH_TEST_FL_FAILED;
6219 
6220 		data[0] = 0;
6221 		data[1] = 0;
6222 		data[3] = 0;
6223 		data[4] = 0;
6224 	}
6225 }
6226 
6227 static void s2io_get_ethtool_stats(struct net_device *dev,
6228 				   struct ethtool_stats *estats,
6229 				   u64 *tmp_stats)
6230 {
6231 	int i = 0, k;
6232 	struct s2io_nic *sp = netdev_priv(dev);
6233 	struct stat_block *stats = sp->mac_control.stats_info;
6234 	struct swStat *swstats = &stats->sw_stat;
6235 	struct xpakStat *xstats = &stats->xpak_stat;
6236 
6237 	s2io_updt_stats(sp);
6238 	tmp_stats[i++] =
6239 		(u64)le32_to_cpu(stats->tmac_frms_oflow) << 32  |
6240 		le32_to_cpu(stats->tmac_frms);
6241 	tmp_stats[i++] =
6242 		(u64)le32_to_cpu(stats->tmac_data_octets_oflow) << 32 |
6243 		le32_to_cpu(stats->tmac_data_octets);
6244 	tmp_stats[i++] = le64_to_cpu(stats->tmac_drop_frms);
6245 	tmp_stats[i++] =
6246 		(u64)le32_to_cpu(stats->tmac_mcst_frms_oflow) << 32 |
6247 		le32_to_cpu(stats->tmac_mcst_frms);
6248 	tmp_stats[i++] =
6249 		(u64)le32_to_cpu(stats->tmac_bcst_frms_oflow) << 32 |
6250 		le32_to_cpu(stats->tmac_bcst_frms);
6251 	tmp_stats[i++] = le64_to_cpu(stats->tmac_pause_ctrl_frms);
6252 	tmp_stats[i++] =
6253 		(u64)le32_to_cpu(stats->tmac_ttl_octets_oflow) << 32 |
6254 		le32_to_cpu(stats->tmac_ttl_octets);
6255 	tmp_stats[i++] =
6256 		(u64)le32_to_cpu(stats->tmac_ucst_frms_oflow) << 32 |
6257 		le32_to_cpu(stats->tmac_ucst_frms);
6258 	tmp_stats[i++] =
6259 		(u64)le32_to_cpu(stats->tmac_nucst_frms_oflow) << 32 |
6260 		le32_to_cpu(stats->tmac_nucst_frms);
6261 	tmp_stats[i++] =
6262 		(u64)le32_to_cpu(stats->tmac_any_err_frms_oflow) << 32 |
6263 		le32_to_cpu(stats->tmac_any_err_frms);
6264 	tmp_stats[i++] = le64_to_cpu(stats->tmac_ttl_less_fb_octets);
6265 	tmp_stats[i++] = le64_to_cpu(stats->tmac_vld_ip_octets);
6266 	tmp_stats[i++] =
6267 		(u64)le32_to_cpu(stats->tmac_vld_ip_oflow) << 32 |
6268 		le32_to_cpu(stats->tmac_vld_ip);
6269 	tmp_stats[i++] =
6270 		(u64)le32_to_cpu(stats->tmac_drop_ip_oflow) << 32 |
6271 		le32_to_cpu(stats->tmac_drop_ip);
6272 	tmp_stats[i++] =
6273 		(u64)le32_to_cpu(stats->tmac_icmp_oflow) << 32 |
6274 		le32_to_cpu(stats->tmac_icmp);
6275 	tmp_stats[i++] =
6276 		(u64)le32_to_cpu(stats->tmac_rst_tcp_oflow) << 32 |
6277 		le32_to_cpu(stats->tmac_rst_tcp);
6278 	tmp_stats[i++] = le64_to_cpu(stats->tmac_tcp);
6279 	tmp_stats[i++] = (u64)le32_to_cpu(stats->tmac_udp_oflow) << 32 |
6280 		le32_to_cpu(stats->tmac_udp);
6281 	tmp_stats[i++] =
6282 		(u64)le32_to_cpu(stats->rmac_vld_frms_oflow) << 32 |
6283 		le32_to_cpu(stats->rmac_vld_frms);
6284 	tmp_stats[i++] =
6285 		(u64)le32_to_cpu(stats->rmac_data_octets_oflow) << 32 |
6286 		le32_to_cpu(stats->rmac_data_octets);
6287 	tmp_stats[i++] = le64_to_cpu(stats->rmac_fcs_err_frms);
6288 	tmp_stats[i++] = le64_to_cpu(stats->rmac_drop_frms);
6289 	tmp_stats[i++] =
6290 		(u64)le32_to_cpu(stats->rmac_vld_mcst_frms_oflow) << 32 |
6291 		le32_to_cpu(stats->rmac_vld_mcst_frms);
6292 	tmp_stats[i++] =
6293 		(u64)le32_to_cpu(stats->rmac_vld_bcst_frms_oflow) << 32 |
6294 		le32_to_cpu(stats->rmac_vld_bcst_frms);
6295 	tmp_stats[i++] = le32_to_cpu(stats->rmac_in_rng_len_err_frms);
6296 	tmp_stats[i++] = le32_to_cpu(stats->rmac_out_rng_len_err_frms);
6297 	tmp_stats[i++] = le64_to_cpu(stats->rmac_long_frms);
6298 	tmp_stats[i++] = le64_to_cpu(stats->rmac_pause_ctrl_frms);
6299 	tmp_stats[i++] = le64_to_cpu(stats->rmac_unsup_ctrl_frms);
6300 	tmp_stats[i++] =
6301 		(u64)le32_to_cpu(stats->rmac_ttl_octets_oflow) << 32 |
6302 		le32_to_cpu(stats->rmac_ttl_octets);
6303 	tmp_stats[i++] =
6304 		(u64)le32_to_cpu(stats->rmac_accepted_ucst_frms_oflow) << 32
6305 		| le32_to_cpu(stats->rmac_accepted_ucst_frms);
6306 	tmp_stats[i++] =
6307 		(u64)le32_to_cpu(stats->rmac_accepted_nucst_frms_oflow)
6308 		<< 32 | le32_to_cpu(stats->rmac_accepted_nucst_frms);
6309 	tmp_stats[i++] =
6310 		(u64)le32_to_cpu(stats->rmac_discarded_frms_oflow) << 32 |
6311 		le32_to_cpu(stats->rmac_discarded_frms);
6312 	tmp_stats[i++] =
6313 		(u64)le32_to_cpu(stats->rmac_drop_events_oflow)
6314 		<< 32 | le32_to_cpu(stats->rmac_drop_events);
6315 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_less_fb_octets);
6316 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_frms);
6317 	tmp_stats[i++] =
6318 		(u64)le32_to_cpu(stats->rmac_usized_frms_oflow) << 32 |
6319 		le32_to_cpu(stats->rmac_usized_frms);
6320 	tmp_stats[i++] =
6321 		(u64)le32_to_cpu(stats->rmac_osized_frms_oflow) << 32 |
6322 		le32_to_cpu(stats->rmac_osized_frms);
6323 	tmp_stats[i++] =
6324 		(u64)le32_to_cpu(stats->rmac_frag_frms_oflow) << 32 |
6325 		le32_to_cpu(stats->rmac_frag_frms);
6326 	tmp_stats[i++] =
6327 		(u64)le32_to_cpu(stats->rmac_jabber_frms_oflow) << 32 |
6328 		le32_to_cpu(stats->rmac_jabber_frms);
6329 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_64_frms);
6330 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_65_127_frms);
6331 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_128_255_frms);
6332 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_256_511_frms);
6333 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_512_1023_frms);
6334 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_1024_1518_frms);
6335 	tmp_stats[i++] =
6336 		(u64)le32_to_cpu(stats->rmac_ip_oflow) << 32 |
6337 		le32_to_cpu(stats->rmac_ip);
6338 	tmp_stats[i++] = le64_to_cpu(stats->rmac_ip_octets);
6339 	tmp_stats[i++] = le32_to_cpu(stats->rmac_hdr_err_ip);
6340 	tmp_stats[i++] =
6341 		(u64)le32_to_cpu(stats->rmac_drop_ip_oflow) << 32 |
6342 		le32_to_cpu(stats->rmac_drop_ip);
6343 	tmp_stats[i++] =
6344 		(u64)le32_to_cpu(stats->rmac_icmp_oflow) << 32 |
6345 		le32_to_cpu(stats->rmac_icmp);
6346 	tmp_stats[i++] = le64_to_cpu(stats->rmac_tcp);
6347 	tmp_stats[i++] =
6348 		(u64)le32_to_cpu(stats->rmac_udp_oflow) << 32 |
6349 		le32_to_cpu(stats->rmac_udp);
6350 	tmp_stats[i++] =
6351 		(u64)le32_to_cpu(stats->rmac_err_drp_udp_oflow) << 32 |
6352 		le32_to_cpu(stats->rmac_err_drp_udp);
6353 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_err_sym);
6354 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q0);
6355 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q1);
6356 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q2);
6357 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q3);
6358 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q4);
6359 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q5);
6360 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q6);
6361 	tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q7);
6362 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q0);
6363 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q1);
6364 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q2);
6365 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q3);
6366 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q4);
6367 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q5);
6368 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q6);
6369 	tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q7);
6370 	tmp_stats[i++] =
6371 		(u64)le32_to_cpu(stats->rmac_pause_cnt_oflow) << 32 |
6372 		le32_to_cpu(stats->rmac_pause_cnt);
6373 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_data_err_cnt);
6374 	tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_ctrl_err_cnt);
6375 	tmp_stats[i++] =
6376 		(u64)le32_to_cpu(stats->rmac_accepted_ip_oflow) << 32 |
6377 		le32_to_cpu(stats->rmac_accepted_ip);
6378 	tmp_stats[i++] = le32_to_cpu(stats->rmac_err_tcp);
6379 	tmp_stats[i++] = le32_to_cpu(stats->rd_req_cnt);
6380 	tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_cnt);
6381 	tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_rtry_cnt);
6382 	tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_cnt);
6383 	tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_rd_ack_cnt);
6384 	tmp_stats[i++] = le32_to_cpu(stats->wr_req_cnt);
6385 	tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_cnt);
6386 	tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_rtry_cnt);
6387 	tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_cnt);
6388 	tmp_stats[i++] = le32_to_cpu(stats->wr_disc_cnt);
6389 	tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_wr_ack_cnt);
6390 	tmp_stats[i++] = le32_to_cpu(stats->txp_wr_cnt);
6391 	tmp_stats[i++] = le32_to_cpu(stats->txd_rd_cnt);
6392 	tmp_stats[i++] = le32_to_cpu(stats->txd_wr_cnt);
6393 	tmp_stats[i++] = le32_to_cpu(stats->rxd_rd_cnt);
6394 	tmp_stats[i++] = le32_to_cpu(stats->rxd_wr_cnt);
6395 	tmp_stats[i++] = le32_to_cpu(stats->txf_rd_cnt);
6396 	tmp_stats[i++] = le32_to_cpu(stats->rxf_wr_cnt);
6397 
6398 	/* Enhanced statistics exist only for Hercules */
6399 	if (sp->device_type == XFRAME_II_DEVICE) {
6400 		tmp_stats[i++] =
6401 			le64_to_cpu(stats->rmac_ttl_1519_4095_frms);
6402 		tmp_stats[i++] =
6403 			le64_to_cpu(stats->rmac_ttl_4096_8191_frms);
6404 		tmp_stats[i++] =
6405 			le64_to_cpu(stats->rmac_ttl_8192_max_frms);
6406 		tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_gt_max_frms);
6407 		tmp_stats[i++] = le64_to_cpu(stats->rmac_osized_alt_frms);
6408 		tmp_stats[i++] = le64_to_cpu(stats->rmac_jabber_alt_frms);
6409 		tmp_stats[i++] = le64_to_cpu(stats->rmac_gt_max_alt_frms);
6410 		tmp_stats[i++] = le64_to_cpu(stats->rmac_vlan_frms);
6411 		tmp_stats[i++] = le32_to_cpu(stats->rmac_len_discard);
6412 		tmp_stats[i++] = le32_to_cpu(stats->rmac_fcs_discard);
6413 		tmp_stats[i++] = le32_to_cpu(stats->rmac_pf_discard);
6414 		tmp_stats[i++] = le32_to_cpu(stats->rmac_da_discard);
6415 		tmp_stats[i++] = le32_to_cpu(stats->rmac_red_discard);
6416 		tmp_stats[i++] = le32_to_cpu(stats->rmac_rts_discard);
6417 		tmp_stats[i++] = le32_to_cpu(stats->rmac_ingm_full_discard);
6418 		tmp_stats[i++] = le32_to_cpu(stats->link_fault_cnt);
6419 	}
6420 
6421 	tmp_stats[i++] = 0;
6422 	tmp_stats[i++] = swstats->single_ecc_errs;
6423 	tmp_stats[i++] = swstats->double_ecc_errs;
6424 	tmp_stats[i++] = swstats->parity_err_cnt;
6425 	tmp_stats[i++] = swstats->serious_err_cnt;
6426 	tmp_stats[i++] = swstats->soft_reset_cnt;
6427 	tmp_stats[i++] = swstats->fifo_full_cnt;
6428 	for (k = 0; k < MAX_RX_RINGS; k++)
6429 		tmp_stats[i++] = swstats->ring_full_cnt[k];
6430 	tmp_stats[i++] = xstats->alarm_transceiver_temp_high;
6431 	tmp_stats[i++] = xstats->alarm_transceiver_temp_low;
6432 	tmp_stats[i++] = xstats->alarm_laser_bias_current_high;
6433 	tmp_stats[i++] = xstats->alarm_laser_bias_current_low;
6434 	tmp_stats[i++] = xstats->alarm_laser_output_power_high;
6435 	tmp_stats[i++] = xstats->alarm_laser_output_power_low;
6436 	tmp_stats[i++] = xstats->warn_transceiver_temp_high;
6437 	tmp_stats[i++] = xstats->warn_transceiver_temp_low;
6438 	tmp_stats[i++] = xstats->warn_laser_bias_current_high;
6439 	tmp_stats[i++] = xstats->warn_laser_bias_current_low;
6440 	tmp_stats[i++] = xstats->warn_laser_output_power_high;
6441 	tmp_stats[i++] = xstats->warn_laser_output_power_low;
6442 	tmp_stats[i++] = swstats->clubbed_frms_cnt;
6443 	tmp_stats[i++] = swstats->sending_both;
6444 	tmp_stats[i++] = swstats->outof_sequence_pkts;
6445 	tmp_stats[i++] = swstats->flush_max_pkts;
6446 	if (swstats->num_aggregations) {
6447 		u64 tmp = swstats->sum_avg_pkts_aggregated;
6448 		int count = 0;
6449 		/*
6450 		 * Since 64-bit divide does not work on all platforms,
6451 		 * do repeated subtraction.
6452 		 */
6453 		while (tmp >= swstats->num_aggregations) {
6454 			tmp -= swstats->num_aggregations;
6455 			count++;
6456 		}
6457 		tmp_stats[i++] = count;
6458 	} else
6459 		tmp_stats[i++] = 0;
6460 	tmp_stats[i++] = swstats->mem_alloc_fail_cnt;
6461 	tmp_stats[i++] = swstats->pci_map_fail_cnt;
6462 	tmp_stats[i++] = swstats->watchdog_timer_cnt;
6463 	tmp_stats[i++] = swstats->mem_allocated;
6464 	tmp_stats[i++] = swstats->mem_freed;
6465 	tmp_stats[i++] = swstats->link_up_cnt;
6466 	tmp_stats[i++] = swstats->link_down_cnt;
6467 	tmp_stats[i++] = swstats->link_up_time;
6468 	tmp_stats[i++] = swstats->link_down_time;
6469 
6470 	tmp_stats[i++] = swstats->tx_buf_abort_cnt;
6471 	tmp_stats[i++] = swstats->tx_desc_abort_cnt;
6472 	tmp_stats[i++] = swstats->tx_parity_err_cnt;
6473 	tmp_stats[i++] = swstats->tx_link_loss_cnt;
6474 	tmp_stats[i++] = swstats->tx_list_proc_err_cnt;
6475 
6476 	tmp_stats[i++] = swstats->rx_parity_err_cnt;
6477 	tmp_stats[i++] = swstats->rx_abort_cnt;
6478 	tmp_stats[i++] = swstats->rx_parity_abort_cnt;
6479 	tmp_stats[i++] = swstats->rx_rda_fail_cnt;
6480 	tmp_stats[i++] = swstats->rx_unkn_prot_cnt;
6481 	tmp_stats[i++] = swstats->rx_fcs_err_cnt;
6482 	tmp_stats[i++] = swstats->rx_buf_size_err_cnt;
6483 	tmp_stats[i++] = swstats->rx_rxd_corrupt_cnt;
6484 	tmp_stats[i++] = swstats->rx_unkn_err_cnt;
6485 	tmp_stats[i++] = swstats->tda_err_cnt;
6486 	tmp_stats[i++] = swstats->pfc_err_cnt;
6487 	tmp_stats[i++] = swstats->pcc_err_cnt;
6488 	tmp_stats[i++] = swstats->tti_err_cnt;
6489 	tmp_stats[i++] = swstats->tpa_err_cnt;
6490 	tmp_stats[i++] = swstats->sm_err_cnt;
6491 	tmp_stats[i++] = swstats->lso_err_cnt;
6492 	tmp_stats[i++] = swstats->mac_tmac_err_cnt;
6493 	tmp_stats[i++] = swstats->mac_rmac_err_cnt;
6494 	tmp_stats[i++] = swstats->xgxs_txgxs_err_cnt;
6495 	tmp_stats[i++] = swstats->xgxs_rxgxs_err_cnt;
6496 	tmp_stats[i++] = swstats->rc_err_cnt;
6497 	tmp_stats[i++] = swstats->prc_pcix_err_cnt;
6498 	tmp_stats[i++] = swstats->rpa_err_cnt;
6499 	tmp_stats[i++] = swstats->rda_err_cnt;
6500 	tmp_stats[i++] = swstats->rti_err_cnt;
6501 	tmp_stats[i++] = swstats->mc_err_cnt;
6502 }
6503 
6504 static int s2io_ethtool_get_regs_len(struct net_device *dev)
6505 {
6506 	return XENA_REG_SPACE;
6507 }
6508 
6509 
6510 static int s2io_get_eeprom_len(struct net_device *dev)
6511 {
6512 	return XENA_EEPROM_SPACE;
6513 }
6514 
6515 static int s2io_get_sset_count(struct net_device *dev, int sset)
6516 {
6517 	struct s2io_nic *sp = netdev_priv(dev);
6518 
6519 	switch (sset) {
6520 	case ETH_SS_TEST:
6521 		return S2IO_TEST_LEN;
6522 	case ETH_SS_STATS:
6523 		switch (sp->device_type) {
6524 		case XFRAME_I_DEVICE:
6525 			return XFRAME_I_STAT_LEN;
6526 		case XFRAME_II_DEVICE:
6527 			return XFRAME_II_STAT_LEN;
6528 		default:
6529 			return 0;
6530 		}
6531 	default:
6532 		return -EOPNOTSUPP;
6533 	}
6534 }
6535 
6536 static void s2io_ethtool_get_strings(struct net_device *dev,
6537 				     u32 stringset, u8 *data)
6538 {
6539 	int stat_size = 0;
6540 	struct s2io_nic *sp = netdev_priv(dev);
6541 
6542 	switch (stringset) {
6543 	case ETH_SS_TEST:
6544 		memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN);
6545 		break;
6546 	case ETH_SS_STATS:
6547 		stat_size = sizeof(ethtool_xena_stats_keys);
6548 		memcpy(data, &ethtool_xena_stats_keys, stat_size);
6549 		if (sp->device_type == XFRAME_II_DEVICE) {
6550 			memcpy(data + stat_size,
6551 			       &ethtool_enhanced_stats_keys,
6552 			       sizeof(ethtool_enhanced_stats_keys));
6553 			stat_size += sizeof(ethtool_enhanced_stats_keys);
6554 		}
6555 
6556 		memcpy(data + stat_size, &ethtool_driver_stats_keys,
6557 		       sizeof(ethtool_driver_stats_keys));
6558 	}
6559 }
6560 
6561 static int s2io_set_features(struct net_device *dev, netdev_features_t features)
6562 {
6563 	struct s2io_nic *sp = netdev_priv(dev);
6564 	netdev_features_t changed = (features ^ dev->features) & NETIF_F_LRO;
6565 
6566 	if (changed && netif_running(dev)) {
6567 		int rc;
6568 
6569 		s2io_stop_all_tx_queue(sp);
6570 		s2io_card_down(sp);
6571 		dev->features = features;
6572 		rc = s2io_card_up(sp);
6573 		if (rc)
6574 			s2io_reset(sp);
6575 		else
6576 			s2io_start_all_tx_queue(sp);
6577 
6578 		return rc ? rc : 1;
6579 	}
6580 
6581 	return 0;
6582 }
6583 
6584 static const struct ethtool_ops netdev_ethtool_ops = {
6585 	.get_drvinfo = s2io_ethtool_gdrvinfo,
6586 	.get_regs_len = s2io_ethtool_get_regs_len,
6587 	.get_regs = s2io_ethtool_gregs,
6588 	.get_link = ethtool_op_get_link,
6589 	.get_eeprom_len = s2io_get_eeprom_len,
6590 	.get_eeprom = s2io_ethtool_geeprom,
6591 	.set_eeprom = s2io_ethtool_seeprom,
6592 	.get_ringparam = s2io_ethtool_gringparam,
6593 	.get_pauseparam = s2io_ethtool_getpause_data,
6594 	.set_pauseparam = s2io_ethtool_setpause_data,
6595 	.self_test = s2io_ethtool_test,
6596 	.get_strings = s2io_ethtool_get_strings,
6597 	.set_phys_id = s2io_ethtool_set_led,
6598 	.get_ethtool_stats = s2io_get_ethtool_stats,
6599 	.get_sset_count = s2io_get_sset_count,
6600 	.get_link_ksettings = s2io_ethtool_get_link_ksettings,
6601 	.set_link_ksettings = s2io_ethtool_set_link_ksettings,
6602 };
6603 
6604 /**
6605  *  s2io_ioctl - Entry point for the Ioctl
6606  *  @dev :  Device pointer.
6607  *  @ifr :  An IOCTL specefic structure, that can contain a pointer to
6608  *  a proprietary structure used to pass information to the driver.
6609  *  @cmd :  This is used to distinguish between the different commands that
6610  *  can be passed to the IOCTL functions.
6611  *  Description:
6612  *  Currently there are no special functionality supported in IOCTL, hence
6613  *  function always return EOPNOTSUPPORTED
6614  */
6615 
6616 static int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
6617 {
6618 	return -EOPNOTSUPP;
6619 }
6620 
6621 /**
6622  *  s2io_change_mtu - entry point to change MTU size for the device.
6623  *   @dev : device pointer.
6624  *   @new_mtu : the new MTU size for the device.
6625  *   Description: A driver entry point to change MTU size for the device.
6626  *   Before changing the MTU the device must be stopped.
6627  *  Return value:
6628  *   0 on success and an appropriate (-)ve integer as defined in errno.h
6629  *   file on failure.
6630  */
6631 
6632 static int s2io_change_mtu(struct net_device *dev, int new_mtu)
6633 {
6634 	struct s2io_nic *sp = netdev_priv(dev);
6635 	int ret = 0;
6636 
6637 	dev->mtu = new_mtu;
6638 	if (netif_running(dev)) {
6639 		s2io_stop_all_tx_queue(sp);
6640 		s2io_card_down(sp);
6641 		ret = s2io_card_up(sp);
6642 		if (ret) {
6643 			DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n",
6644 				  __func__);
6645 			return ret;
6646 		}
6647 		s2io_wake_all_tx_queue(sp);
6648 	} else { /* Device is down */
6649 		struct XENA_dev_config __iomem *bar0 = sp->bar0;
6650 		u64 val64 = new_mtu;
6651 
6652 		writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
6653 	}
6654 
6655 	return ret;
6656 }
6657 
6658 /**
6659  * s2io_set_link - Set the LInk status
6660  * @data: long pointer to device private structue
6661  * Description: Sets the link status for the adapter
6662  */
6663 
6664 static void s2io_set_link(struct work_struct *work)
6665 {
6666 	struct s2io_nic *nic = container_of(work, struct s2io_nic,
6667 					    set_link_task);
6668 	struct net_device *dev = nic->dev;
6669 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
6670 	register u64 val64;
6671 	u16 subid;
6672 
6673 	rtnl_lock();
6674 
6675 	if (!netif_running(dev))
6676 		goto out_unlock;
6677 
6678 	if (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(nic->state))) {
6679 		/* The card is being reset, no point doing anything */
6680 		goto out_unlock;
6681 	}
6682 
6683 	subid = nic->pdev->subsystem_device;
6684 	if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER) {
6685 		/*
6686 		 * Allow a small delay for the NICs self initiated
6687 		 * cleanup to complete.
6688 		 */
6689 		msleep(100);
6690 	}
6691 
6692 	val64 = readq(&bar0->adapter_status);
6693 	if (LINK_IS_UP(val64)) {
6694 		if (!(readq(&bar0->adapter_control) & ADAPTER_CNTL_EN)) {
6695 			if (verify_xena_quiescence(nic)) {
6696 				val64 = readq(&bar0->adapter_control);
6697 				val64 |= ADAPTER_CNTL_EN;
6698 				writeq(val64, &bar0->adapter_control);
6699 				if (CARDS_WITH_FAULTY_LINK_INDICATORS(
6700 					    nic->device_type, subid)) {
6701 					val64 = readq(&bar0->gpio_control);
6702 					val64 |= GPIO_CTRL_GPIO_0;
6703 					writeq(val64, &bar0->gpio_control);
6704 					val64 = readq(&bar0->gpio_control);
6705 				} else {
6706 					val64 |= ADAPTER_LED_ON;
6707 					writeq(val64, &bar0->adapter_control);
6708 				}
6709 				nic->device_enabled_once = true;
6710 			} else {
6711 				DBG_PRINT(ERR_DBG,
6712 					  "%s: Error: device is not Quiescent\n",
6713 					  dev->name);
6714 				s2io_stop_all_tx_queue(nic);
6715 			}
6716 		}
6717 		val64 = readq(&bar0->adapter_control);
6718 		val64 |= ADAPTER_LED_ON;
6719 		writeq(val64, &bar0->adapter_control);
6720 		s2io_link(nic, LINK_UP);
6721 	} else {
6722 		if (CARDS_WITH_FAULTY_LINK_INDICATORS(nic->device_type,
6723 						      subid)) {
6724 			val64 = readq(&bar0->gpio_control);
6725 			val64 &= ~GPIO_CTRL_GPIO_0;
6726 			writeq(val64, &bar0->gpio_control);
6727 			val64 = readq(&bar0->gpio_control);
6728 		}
6729 		/* turn off LED */
6730 		val64 = readq(&bar0->adapter_control);
6731 		val64 = val64 & (~ADAPTER_LED_ON);
6732 		writeq(val64, &bar0->adapter_control);
6733 		s2io_link(nic, LINK_DOWN);
6734 	}
6735 	clear_bit(__S2IO_STATE_LINK_TASK, &(nic->state));
6736 
6737 out_unlock:
6738 	rtnl_unlock();
6739 }
6740 
6741 static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6742 				  struct buffAdd *ba,
6743 				  struct sk_buff **skb, u64 *temp0, u64 *temp1,
6744 				  u64 *temp2, int size)
6745 {
6746 	struct net_device *dev = sp->dev;
6747 	struct swStat *stats = &sp->mac_control.stats_info->sw_stat;
6748 
6749 	if ((sp->rxd_mode == RXD_MODE_1) && (rxdp->Host_Control == 0)) {
6750 		struct RxD1 *rxdp1 = (struct RxD1 *)rxdp;
6751 		/* allocate skb */
6752 		if (*skb) {
6753 			DBG_PRINT(INFO_DBG, "SKB is not NULL\n");
6754 			/*
6755 			 * As Rx frame are not going to be processed,
6756 			 * using same mapped address for the Rxd
6757 			 * buffer pointer
6758 			 */
6759 			rxdp1->Buffer0_ptr = *temp0;
6760 		} else {
6761 			*skb = netdev_alloc_skb(dev, size);
6762 			if (!(*skb)) {
6763 				DBG_PRINT(INFO_DBG,
6764 					  "%s: Out of memory to allocate %s\n",
6765 					  dev->name, "1 buf mode SKBs");
6766 				stats->mem_alloc_fail_cnt++;
6767 				return -ENOMEM ;
6768 			}
6769 			stats->mem_allocated += (*skb)->truesize;
6770 			/* storing the mapped addr in a temp variable
6771 			 * such it will be used for next rxd whose
6772 			 * Host Control is NULL
6773 			 */
6774 			rxdp1->Buffer0_ptr = *temp0 =
6775 				pci_map_single(sp->pdev, (*skb)->data,
6776 					       size - NET_IP_ALIGN,
6777 					       PCI_DMA_FROMDEVICE);
6778 			if (pci_dma_mapping_error(sp->pdev, rxdp1->Buffer0_ptr))
6779 				goto memalloc_failed;
6780 			rxdp->Host_Control = (unsigned long) (*skb);
6781 		}
6782 	} else if ((sp->rxd_mode == RXD_MODE_3B) && (rxdp->Host_Control == 0)) {
6783 		struct RxD3 *rxdp3 = (struct RxD3 *)rxdp;
6784 		/* Two buffer Mode */
6785 		if (*skb) {
6786 			rxdp3->Buffer2_ptr = *temp2;
6787 			rxdp3->Buffer0_ptr = *temp0;
6788 			rxdp3->Buffer1_ptr = *temp1;
6789 		} else {
6790 			*skb = netdev_alloc_skb(dev, size);
6791 			if (!(*skb)) {
6792 				DBG_PRINT(INFO_DBG,
6793 					  "%s: Out of memory to allocate %s\n",
6794 					  dev->name,
6795 					  "2 buf mode SKBs");
6796 				stats->mem_alloc_fail_cnt++;
6797 				return -ENOMEM;
6798 			}
6799 			stats->mem_allocated += (*skb)->truesize;
6800 			rxdp3->Buffer2_ptr = *temp2 =
6801 				pci_map_single(sp->pdev, (*skb)->data,
6802 					       dev->mtu + 4,
6803 					       PCI_DMA_FROMDEVICE);
6804 			if (pci_dma_mapping_error(sp->pdev, rxdp3->Buffer2_ptr))
6805 				goto memalloc_failed;
6806 			rxdp3->Buffer0_ptr = *temp0 =
6807 				pci_map_single(sp->pdev, ba->ba_0, BUF0_LEN,
6808 					       PCI_DMA_FROMDEVICE);
6809 			if (pci_dma_mapping_error(sp->pdev,
6810 						  rxdp3->Buffer0_ptr)) {
6811 				pci_unmap_single(sp->pdev,
6812 						 (dma_addr_t)rxdp3->Buffer2_ptr,
6813 						 dev->mtu + 4,
6814 						 PCI_DMA_FROMDEVICE);
6815 				goto memalloc_failed;
6816 			}
6817 			rxdp->Host_Control = (unsigned long) (*skb);
6818 
6819 			/* Buffer-1 will be dummy buffer not used */
6820 			rxdp3->Buffer1_ptr = *temp1 =
6821 				pci_map_single(sp->pdev, ba->ba_1, BUF1_LEN,
6822 					       PCI_DMA_FROMDEVICE);
6823 			if (pci_dma_mapping_error(sp->pdev,
6824 						  rxdp3->Buffer1_ptr)) {
6825 				pci_unmap_single(sp->pdev,
6826 						 (dma_addr_t)rxdp3->Buffer0_ptr,
6827 						 BUF0_LEN, PCI_DMA_FROMDEVICE);
6828 				pci_unmap_single(sp->pdev,
6829 						 (dma_addr_t)rxdp3->Buffer2_ptr,
6830 						 dev->mtu + 4,
6831 						 PCI_DMA_FROMDEVICE);
6832 				goto memalloc_failed;
6833 			}
6834 		}
6835 	}
6836 	return 0;
6837 
6838 memalloc_failed:
6839 	stats->pci_map_fail_cnt++;
6840 	stats->mem_freed += (*skb)->truesize;
6841 	dev_kfree_skb(*skb);
6842 	return -ENOMEM;
6843 }
6844 
6845 static void set_rxd_buffer_size(struct s2io_nic *sp, struct RxD_t *rxdp,
6846 				int size)
6847 {
6848 	struct net_device *dev = sp->dev;
6849 	if (sp->rxd_mode == RXD_MODE_1) {
6850 		rxdp->Control_2 = SET_BUFFER0_SIZE_1(size - NET_IP_ALIGN);
6851 	} else if (sp->rxd_mode == RXD_MODE_3B) {
6852 		rxdp->Control_2 = SET_BUFFER0_SIZE_3(BUF0_LEN);
6853 		rxdp->Control_2 |= SET_BUFFER1_SIZE_3(1);
6854 		rxdp->Control_2 |= SET_BUFFER2_SIZE_3(dev->mtu + 4);
6855 	}
6856 }
6857 
6858 static  int rxd_owner_bit_reset(struct s2io_nic *sp)
6859 {
6860 	int i, j, k, blk_cnt = 0, size;
6861 	struct config_param *config = &sp->config;
6862 	struct mac_info *mac_control = &sp->mac_control;
6863 	struct net_device *dev = sp->dev;
6864 	struct RxD_t *rxdp = NULL;
6865 	struct sk_buff *skb = NULL;
6866 	struct buffAdd *ba = NULL;
6867 	u64 temp0_64 = 0, temp1_64 = 0, temp2_64 = 0;
6868 
6869 	/* Calculate the size based on ring mode */
6870 	size = dev->mtu + HEADER_ETHERNET_II_802_3_SIZE +
6871 		HEADER_802_2_SIZE + HEADER_SNAP_SIZE;
6872 	if (sp->rxd_mode == RXD_MODE_1)
6873 		size += NET_IP_ALIGN;
6874 	else if (sp->rxd_mode == RXD_MODE_3B)
6875 		size = dev->mtu + ALIGN_SIZE + BUF0_LEN + 4;
6876 
6877 	for (i = 0; i < config->rx_ring_num; i++) {
6878 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
6879 		struct ring_info *ring = &mac_control->rings[i];
6880 
6881 		blk_cnt = rx_cfg->num_rxd / (rxd_count[sp->rxd_mode] + 1);
6882 
6883 		for (j = 0; j < blk_cnt; j++) {
6884 			for (k = 0; k < rxd_count[sp->rxd_mode]; k++) {
6885 				rxdp = ring->rx_blocks[j].rxds[k].virt_addr;
6886 				if (sp->rxd_mode == RXD_MODE_3B)
6887 					ba = &ring->ba[j][k];
6888 				if (set_rxd_buffer_pointer(sp, rxdp, ba, &skb,
6889 							   &temp0_64,
6890 							   &temp1_64,
6891 							   &temp2_64,
6892 							   size) == -ENOMEM) {
6893 					return 0;
6894 				}
6895 
6896 				set_rxd_buffer_size(sp, rxdp, size);
6897 				dma_wmb();
6898 				/* flip the Ownership bit to Hardware */
6899 				rxdp->Control_1 |= RXD_OWN_XENA;
6900 			}
6901 		}
6902 	}
6903 	return 0;
6904 
6905 }
6906 
6907 static int s2io_add_isr(struct s2io_nic *sp)
6908 {
6909 	int ret = 0;
6910 	struct net_device *dev = sp->dev;
6911 	int err = 0;
6912 
6913 	if (sp->config.intr_type == MSI_X)
6914 		ret = s2io_enable_msi_x(sp);
6915 	if (ret) {
6916 		DBG_PRINT(ERR_DBG, "%s: Defaulting to INTA\n", dev->name);
6917 		sp->config.intr_type = INTA;
6918 	}
6919 
6920 	/*
6921 	 * Store the values of the MSIX table in
6922 	 * the struct s2io_nic structure
6923 	 */
6924 	store_xmsi_data(sp);
6925 
6926 	/* After proper initialization of H/W, register ISR */
6927 	if (sp->config.intr_type == MSI_X) {
6928 		int i, msix_rx_cnt = 0;
6929 
6930 		for (i = 0; i < sp->num_entries; i++) {
6931 			if (sp->s2io_entries[i].in_use == MSIX_FLG) {
6932 				if (sp->s2io_entries[i].type ==
6933 				    MSIX_RING_TYPE) {
6934 					snprintf(sp->desc[i],
6935 						sizeof(sp->desc[i]),
6936 						"%s:MSI-X-%d-RX",
6937 						dev->name, i);
6938 					err = request_irq(sp->entries[i].vector,
6939 							  s2io_msix_ring_handle,
6940 							  0,
6941 							  sp->desc[i],
6942 							  sp->s2io_entries[i].arg);
6943 				} else if (sp->s2io_entries[i].type ==
6944 					   MSIX_ALARM_TYPE) {
6945 					snprintf(sp->desc[i],
6946 						sizeof(sp->desc[i]),
6947 						"%s:MSI-X-%d-TX",
6948 						dev->name, i);
6949 					err = request_irq(sp->entries[i].vector,
6950 							  s2io_msix_fifo_handle,
6951 							  0,
6952 							  sp->desc[i],
6953 							  sp->s2io_entries[i].arg);
6954 
6955 				}
6956 				/* if either data or addr is zero print it. */
6957 				if (!(sp->msix_info[i].addr &&
6958 				      sp->msix_info[i].data)) {
6959 					DBG_PRINT(ERR_DBG,
6960 						  "%s @Addr:0x%llx Data:0x%llx\n",
6961 						  sp->desc[i],
6962 						  (unsigned long long)
6963 						  sp->msix_info[i].addr,
6964 						  (unsigned long long)
6965 						  ntohl(sp->msix_info[i].data));
6966 				} else
6967 					msix_rx_cnt++;
6968 				if (err) {
6969 					remove_msix_isr(sp);
6970 
6971 					DBG_PRINT(ERR_DBG,
6972 						  "%s:MSI-X-%d registration "
6973 						  "failed\n", dev->name, i);
6974 
6975 					DBG_PRINT(ERR_DBG,
6976 						  "%s: Defaulting to INTA\n",
6977 						  dev->name);
6978 					sp->config.intr_type = INTA;
6979 					break;
6980 				}
6981 				sp->s2io_entries[i].in_use =
6982 					MSIX_REGISTERED_SUCCESS;
6983 			}
6984 		}
6985 		if (!err) {
6986 			pr_info("MSI-X-RX %d entries enabled\n", --msix_rx_cnt);
6987 			DBG_PRINT(INFO_DBG,
6988 				  "MSI-X-TX entries enabled through alarm vector\n");
6989 		}
6990 	}
6991 	if (sp->config.intr_type == INTA) {
6992 		err = request_irq(sp->pdev->irq, s2io_isr, IRQF_SHARED,
6993 				  sp->name, dev);
6994 		if (err) {
6995 			DBG_PRINT(ERR_DBG, "%s: ISR registration failed\n",
6996 				  dev->name);
6997 			return -1;
6998 		}
6999 	}
7000 	return 0;
7001 }
7002 
7003 static void s2io_rem_isr(struct s2io_nic *sp)
7004 {
7005 	if (sp->config.intr_type == MSI_X)
7006 		remove_msix_isr(sp);
7007 	else
7008 		remove_inta_isr(sp);
7009 }
7010 
7011 static void do_s2io_card_down(struct s2io_nic *sp, int do_io)
7012 {
7013 	int cnt = 0;
7014 	struct XENA_dev_config __iomem *bar0 = sp->bar0;
7015 	register u64 val64 = 0;
7016 	struct config_param *config;
7017 	config = &sp->config;
7018 
7019 	if (!is_s2io_card_up(sp))
7020 		return;
7021 
7022 	del_timer_sync(&sp->alarm_timer);
7023 	/* If s2io_set_link task is executing, wait till it completes. */
7024 	while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state)))
7025 		msleep(50);
7026 	clear_bit(__S2IO_STATE_CARD_UP, &sp->state);
7027 
7028 	/* Disable napi */
7029 	if (sp->config.napi) {
7030 		int off = 0;
7031 		if (config->intr_type ==  MSI_X) {
7032 			for (; off < sp->config.rx_ring_num; off++)
7033 				napi_disable(&sp->mac_control.rings[off].napi);
7034 		}
7035 		else
7036 			napi_disable(&sp->napi);
7037 	}
7038 
7039 	/* disable Tx and Rx traffic on the NIC */
7040 	if (do_io)
7041 		stop_nic(sp);
7042 
7043 	s2io_rem_isr(sp);
7044 
7045 	/* stop the tx queue, indicate link down */
7046 	s2io_link(sp, LINK_DOWN);
7047 
7048 	/* Check if the device is Quiescent and then Reset the NIC */
7049 	while (do_io) {
7050 		/* As per the HW requirement we need to replenish the
7051 		 * receive buffer to avoid the ring bump. Since there is
7052 		 * no intention of processing the Rx frame at this pointwe are
7053 		 * just setting the ownership bit of rxd in Each Rx
7054 		 * ring to HW and set the appropriate buffer size
7055 		 * based on the ring mode
7056 		 */
7057 		rxd_owner_bit_reset(sp);
7058 
7059 		val64 = readq(&bar0->adapter_status);
7060 		if (verify_xena_quiescence(sp)) {
7061 			if (verify_pcc_quiescent(sp, sp->device_enabled_once))
7062 				break;
7063 		}
7064 
7065 		msleep(50);
7066 		cnt++;
7067 		if (cnt == 10) {
7068 			DBG_PRINT(ERR_DBG, "Device not Quiescent - "
7069 				  "adapter status reads 0x%llx\n",
7070 				  (unsigned long long)val64);
7071 			break;
7072 		}
7073 	}
7074 	if (do_io)
7075 		s2io_reset(sp);
7076 
7077 	/* Free all Tx buffers */
7078 	free_tx_buffers(sp);
7079 
7080 	/* Free all Rx buffers */
7081 	free_rx_buffers(sp);
7082 
7083 	clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state));
7084 }
7085 
7086 static void s2io_card_down(struct s2io_nic *sp)
7087 {
7088 	do_s2io_card_down(sp, 1);
7089 }
7090 
7091 static int s2io_card_up(struct s2io_nic *sp)
7092 {
7093 	int i, ret = 0;
7094 	struct config_param *config;
7095 	struct mac_info *mac_control;
7096 	struct net_device *dev = sp->dev;
7097 	u16 interruptible;
7098 
7099 	/* Initialize the H/W I/O registers */
7100 	ret = init_nic(sp);
7101 	if (ret != 0) {
7102 		DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
7103 			  dev->name);
7104 		if (ret != -EIO)
7105 			s2io_reset(sp);
7106 		return ret;
7107 	}
7108 
7109 	/*
7110 	 * Initializing the Rx buffers. For now we are considering only 1
7111 	 * Rx ring and initializing buffers into 30 Rx blocks
7112 	 */
7113 	config = &sp->config;
7114 	mac_control = &sp->mac_control;
7115 
7116 	for (i = 0; i < config->rx_ring_num; i++) {
7117 		struct ring_info *ring = &mac_control->rings[i];
7118 
7119 		ring->mtu = dev->mtu;
7120 		ring->lro = !!(dev->features & NETIF_F_LRO);
7121 		ret = fill_rx_buffers(sp, ring, 1);
7122 		if (ret) {
7123 			DBG_PRINT(ERR_DBG, "%s: Out of memory in Open\n",
7124 				  dev->name);
7125 			s2io_reset(sp);
7126 			free_rx_buffers(sp);
7127 			return -ENOMEM;
7128 		}
7129 		DBG_PRINT(INFO_DBG, "Buf in ring:%d is %d:\n", i,
7130 			  ring->rx_bufs_left);
7131 	}
7132 
7133 	/* Initialise napi */
7134 	if (config->napi) {
7135 		if (config->intr_type ==  MSI_X) {
7136 			for (i = 0; i < sp->config.rx_ring_num; i++)
7137 				napi_enable(&sp->mac_control.rings[i].napi);
7138 		} else {
7139 			napi_enable(&sp->napi);
7140 		}
7141 	}
7142 
7143 	/* Maintain the state prior to the open */
7144 	if (sp->promisc_flg)
7145 		sp->promisc_flg = 0;
7146 	if (sp->m_cast_flg) {
7147 		sp->m_cast_flg = 0;
7148 		sp->all_multi_pos = 0;
7149 	}
7150 
7151 	/* Setting its receive mode */
7152 	s2io_set_multicast(dev);
7153 
7154 	if (dev->features & NETIF_F_LRO) {
7155 		/* Initialize max aggregatable pkts per session based on MTU */
7156 		sp->lro_max_aggr_per_sess = ((1<<16) - 1) / dev->mtu;
7157 		/* Check if we can use (if specified) user provided value */
7158 		if (lro_max_pkts < sp->lro_max_aggr_per_sess)
7159 			sp->lro_max_aggr_per_sess = lro_max_pkts;
7160 	}
7161 
7162 	/* Enable Rx Traffic and interrupts on the NIC */
7163 	if (start_nic(sp)) {
7164 		DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name);
7165 		s2io_reset(sp);
7166 		free_rx_buffers(sp);
7167 		return -ENODEV;
7168 	}
7169 
7170 	/* Add interrupt service routine */
7171 	if (s2io_add_isr(sp) != 0) {
7172 		if (sp->config.intr_type == MSI_X)
7173 			s2io_rem_isr(sp);
7174 		s2io_reset(sp);
7175 		free_rx_buffers(sp);
7176 		return -ENODEV;
7177 	}
7178 
7179 	timer_setup(&sp->alarm_timer, s2io_alarm_handle, 0);
7180 	mod_timer(&sp->alarm_timer, jiffies + HZ / 2);
7181 
7182 	set_bit(__S2IO_STATE_CARD_UP, &sp->state);
7183 
7184 	/*  Enable select interrupts */
7185 	en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS);
7186 	if (sp->config.intr_type != INTA) {
7187 		interruptible = TX_TRAFFIC_INTR | TX_PIC_INTR;
7188 		en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7189 	} else {
7190 		interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR;
7191 		interruptible |= TX_PIC_INTR;
7192 		en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7193 	}
7194 
7195 	return 0;
7196 }
7197 
7198 /**
7199  * s2io_restart_nic - Resets the NIC.
7200  * @data : long pointer to the device private structure
7201  * Description:
7202  * This function is scheduled to be run by the s2io_tx_watchdog
7203  * function after 0.5 secs to reset the NIC. The idea is to reduce
7204  * the run time of the watch dog routine which is run holding a
7205  * spin lock.
7206  */
7207 
7208 static void s2io_restart_nic(struct work_struct *work)
7209 {
7210 	struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task);
7211 	struct net_device *dev = sp->dev;
7212 
7213 	rtnl_lock();
7214 
7215 	if (!netif_running(dev))
7216 		goto out_unlock;
7217 
7218 	s2io_card_down(sp);
7219 	if (s2io_card_up(sp)) {
7220 		DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", dev->name);
7221 	}
7222 	s2io_wake_all_tx_queue(sp);
7223 	DBG_PRINT(ERR_DBG, "%s: was reset by Tx watchdog timer\n", dev->name);
7224 out_unlock:
7225 	rtnl_unlock();
7226 }
7227 
7228 /**
7229  *  s2io_tx_watchdog - Watchdog for transmit side.
7230  *  @dev : Pointer to net device structure
7231  *  Description:
7232  *  This function is triggered if the Tx Queue is stopped
7233  *  for a pre-defined amount of time when the Interface is still up.
7234  *  If the Interface is jammed in such a situation, the hardware is
7235  *  reset (by s2io_close) and restarted again (by s2io_open) to
7236  *  overcome any problem that might have been caused in the hardware.
7237  *  Return value:
7238  *  void
7239  */
7240 
7241 static void s2io_tx_watchdog(struct net_device *dev, unsigned int txqueue)
7242 {
7243 	struct s2io_nic *sp = netdev_priv(dev);
7244 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7245 
7246 	if (netif_carrier_ok(dev)) {
7247 		swstats->watchdog_timer_cnt++;
7248 		schedule_work(&sp->rst_timer_task);
7249 		swstats->soft_reset_cnt++;
7250 	}
7251 }
7252 
7253 /**
7254  *   rx_osm_handler - To perform some OS related operations on SKB.
7255  *   @sp: private member of the device structure,pointer to s2io_nic structure.
7256  *   @skb : the socket buffer pointer.
7257  *   @len : length of the packet
7258  *   @cksum : FCS checksum of the frame.
7259  *   @ring_no : the ring from which this RxD was extracted.
7260  *   Description:
7261  *   This function is called by the Rx interrupt serivce routine to perform
7262  *   some OS related operations on the SKB before passing it to the upper
7263  *   layers. It mainly checks if the checksum is OK, if so adds it to the
7264  *   SKBs cksum variable, increments the Rx packet count and passes the SKB
7265  *   to the upper layer. If the checksum is wrong, it increments the Rx
7266  *   packet error count, frees the SKB and returns error.
7267  *   Return value:
7268  *   SUCCESS on success and -1 on failure.
7269  */
7270 static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
7271 {
7272 	struct s2io_nic *sp = ring_data->nic;
7273 	struct net_device *dev = ring_data->dev;
7274 	struct sk_buff *skb = (struct sk_buff *)
7275 		((unsigned long)rxdp->Host_Control);
7276 	int ring_no = ring_data->ring_no;
7277 	u16 l3_csum, l4_csum;
7278 	unsigned long long err = rxdp->Control_1 & RXD_T_CODE;
7279 	struct lro *uninitialized_var(lro);
7280 	u8 err_mask;
7281 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7282 
7283 	skb->dev = dev;
7284 
7285 	if (err) {
7286 		/* Check for parity error */
7287 		if (err & 0x1)
7288 			swstats->parity_err_cnt++;
7289 
7290 		err_mask = err >> 48;
7291 		switch (err_mask) {
7292 		case 1:
7293 			swstats->rx_parity_err_cnt++;
7294 			break;
7295 
7296 		case 2:
7297 			swstats->rx_abort_cnt++;
7298 			break;
7299 
7300 		case 3:
7301 			swstats->rx_parity_abort_cnt++;
7302 			break;
7303 
7304 		case 4:
7305 			swstats->rx_rda_fail_cnt++;
7306 			break;
7307 
7308 		case 5:
7309 			swstats->rx_unkn_prot_cnt++;
7310 			break;
7311 
7312 		case 6:
7313 			swstats->rx_fcs_err_cnt++;
7314 			break;
7315 
7316 		case 7:
7317 			swstats->rx_buf_size_err_cnt++;
7318 			break;
7319 
7320 		case 8:
7321 			swstats->rx_rxd_corrupt_cnt++;
7322 			break;
7323 
7324 		case 15:
7325 			swstats->rx_unkn_err_cnt++;
7326 			break;
7327 		}
7328 		/*
7329 		 * Drop the packet if bad transfer code. Exception being
7330 		 * 0x5, which could be due to unsupported IPv6 extension header.
7331 		 * In this case, we let stack handle the packet.
7332 		 * Note that in this case, since checksum will be incorrect,
7333 		 * stack will validate the same.
7334 		 */
7335 		if (err_mask != 0x5) {
7336 			DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%x\n",
7337 				  dev->name, err_mask);
7338 			dev->stats.rx_crc_errors++;
7339 			swstats->mem_freed
7340 				+= skb->truesize;
7341 			dev_kfree_skb(skb);
7342 			ring_data->rx_bufs_left -= 1;
7343 			rxdp->Host_Control = 0;
7344 			return 0;
7345 		}
7346 	}
7347 
7348 	rxdp->Host_Control = 0;
7349 	if (sp->rxd_mode == RXD_MODE_1) {
7350 		int len = RXD_GET_BUFFER0_SIZE_1(rxdp->Control_2);
7351 
7352 		skb_put(skb, len);
7353 	} else if (sp->rxd_mode == RXD_MODE_3B) {
7354 		int get_block = ring_data->rx_curr_get_info.block_index;
7355 		int get_off = ring_data->rx_curr_get_info.offset;
7356 		int buf0_len = RXD_GET_BUFFER0_SIZE_3(rxdp->Control_2);
7357 		int buf2_len = RXD_GET_BUFFER2_SIZE_3(rxdp->Control_2);
7358 		unsigned char *buff = skb_push(skb, buf0_len);
7359 
7360 		struct buffAdd *ba = &ring_data->ba[get_block][get_off];
7361 		memcpy(buff, ba->ba_0, buf0_len);
7362 		skb_put(skb, buf2_len);
7363 	}
7364 
7365 	if ((rxdp->Control_1 & TCP_OR_UDP_FRAME) &&
7366 	    ((!ring_data->lro) ||
7367 	     (!(rxdp->Control_1 & RXD_FRAME_IP_FRAG))) &&
7368 	    (dev->features & NETIF_F_RXCSUM)) {
7369 		l3_csum = RXD_GET_L3_CKSUM(rxdp->Control_1);
7370 		l4_csum = RXD_GET_L4_CKSUM(rxdp->Control_1);
7371 		if ((l3_csum == L3_CKSUM_OK) && (l4_csum == L4_CKSUM_OK)) {
7372 			/*
7373 			 * NIC verifies if the Checksum of the received
7374 			 * frame is Ok or not and accordingly returns
7375 			 * a flag in the RxD.
7376 			 */
7377 			skb->ip_summed = CHECKSUM_UNNECESSARY;
7378 			if (ring_data->lro) {
7379 				u32 tcp_len = 0;
7380 				u8 *tcp;
7381 				int ret = 0;
7382 
7383 				ret = s2io_club_tcp_session(ring_data,
7384 							    skb->data, &tcp,
7385 							    &tcp_len, &lro,
7386 							    rxdp, sp);
7387 				switch (ret) {
7388 				case 3: /* Begin anew */
7389 					lro->parent = skb;
7390 					goto aggregate;
7391 				case 1: /* Aggregate */
7392 					lro_append_pkt(sp, lro, skb, tcp_len);
7393 					goto aggregate;
7394 				case 4: /* Flush session */
7395 					lro_append_pkt(sp, lro, skb, tcp_len);
7396 					queue_rx_frame(lro->parent,
7397 						       lro->vlan_tag);
7398 					clear_lro_session(lro);
7399 					swstats->flush_max_pkts++;
7400 					goto aggregate;
7401 				case 2: /* Flush both */
7402 					lro->parent->data_len = lro->frags_len;
7403 					swstats->sending_both++;
7404 					queue_rx_frame(lro->parent,
7405 						       lro->vlan_tag);
7406 					clear_lro_session(lro);
7407 					goto send_up;
7408 				case 0: /* sessions exceeded */
7409 				case -1: /* non-TCP or not L2 aggregatable */
7410 				case 5: /*
7411 					 * First pkt in session not
7412 					 * L3/L4 aggregatable
7413 					 */
7414 					break;
7415 				default:
7416 					DBG_PRINT(ERR_DBG,
7417 						  "%s: Samadhana!!\n",
7418 						  __func__);
7419 					BUG();
7420 				}
7421 			}
7422 		} else {
7423 			/*
7424 			 * Packet with erroneous checksum, let the
7425 			 * upper layers deal with it.
7426 			 */
7427 			skb_checksum_none_assert(skb);
7428 		}
7429 	} else
7430 		skb_checksum_none_assert(skb);
7431 
7432 	swstats->mem_freed += skb->truesize;
7433 send_up:
7434 	skb_record_rx_queue(skb, ring_no);
7435 	queue_rx_frame(skb, RXD_GET_VLAN_TAG(rxdp->Control_2));
7436 aggregate:
7437 	sp->mac_control.rings[ring_no].rx_bufs_left -= 1;
7438 	return SUCCESS;
7439 }
7440 
7441 /**
7442  *  s2io_link - stops/starts the Tx queue.
7443  *  @sp : private member of the device structure, which is a pointer to the
7444  *  s2io_nic structure.
7445  *  @link : inidicates whether link is UP/DOWN.
7446  *  Description:
7447  *  This function stops/starts the Tx queue depending on whether the link
7448  *  status of the NIC is is down or up. This is called by the Alarm
7449  *  interrupt handler whenever a link change interrupt comes up.
7450  *  Return value:
7451  *  void.
7452  */
7453 
7454 static void s2io_link(struct s2io_nic *sp, int link)
7455 {
7456 	struct net_device *dev = sp->dev;
7457 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7458 
7459 	if (link != sp->last_link_state) {
7460 		init_tti(sp, link);
7461 		if (link == LINK_DOWN) {
7462 			DBG_PRINT(ERR_DBG, "%s: Link down\n", dev->name);
7463 			s2io_stop_all_tx_queue(sp);
7464 			netif_carrier_off(dev);
7465 			if (swstats->link_up_cnt)
7466 				swstats->link_up_time =
7467 					jiffies - sp->start_time;
7468 			swstats->link_down_cnt++;
7469 		} else {
7470 			DBG_PRINT(ERR_DBG, "%s: Link Up\n", dev->name);
7471 			if (swstats->link_down_cnt)
7472 				swstats->link_down_time =
7473 					jiffies - sp->start_time;
7474 			swstats->link_up_cnt++;
7475 			netif_carrier_on(dev);
7476 			s2io_wake_all_tx_queue(sp);
7477 		}
7478 	}
7479 	sp->last_link_state = link;
7480 	sp->start_time = jiffies;
7481 }
7482 
7483 /**
7484  *  s2io_init_pci -Initialization of PCI and PCI-X configuration registers .
7485  *  @sp : private member of the device structure, which is a pointer to the
7486  *  s2io_nic structure.
7487  *  Description:
7488  *  This function initializes a few of the PCI and PCI-X configuration registers
7489  *  with recommended values.
7490  *  Return value:
7491  *  void
7492  */
7493 
7494 static void s2io_init_pci(struct s2io_nic *sp)
7495 {
7496 	u16 pci_cmd = 0, pcix_cmd = 0;
7497 
7498 	/* Enable Data Parity Error Recovery in PCI-X command register. */
7499 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7500 			     &(pcix_cmd));
7501 	pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7502 			      (pcix_cmd | 1));
7503 	pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7504 			     &(pcix_cmd));
7505 
7506 	/* Set the PErr Response bit in PCI command register. */
7507 	pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7508 	pci_write_config_word(sp->pdev, PCI_COMMAND,
7509 			      (pci_cmd | PCI_COMMAND_PARITY));
7510 	pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7511 }
7512 
7513 static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type,
7514 			    u8 *dev_multiq)
7515 {
7516 	int i;
7517 
7518 	if ((tx_fifo_num > MAX_TX_FIFOS) || (tx_fifo_num < 1)) {
7519 		DBG_PRINT(ERR_DBG, "Requested number of tx fifos "
7520 			  "(%d) not supported\n", tx_fifo_num);
7521 
7522 		if (tx_fifo_num < 1)
7523 			tx_fifo_num = 1;
7524 		else
7525 			tx_fifo_num = MAX_TX_FIFOS;
7526 
7527 		DBG_PRINT(ERR_DBG, "Default to %d tx fifos\n", tx_fifo_num);
7528 	}
7529 
7530 	if (multiq)
7531 		*dev_multiq = multiq;
7532 
7533 	if (tx_steering_type && (1 == tx_fifo_num)) {
7534 		if (tx_steering_type != TX_DEFAULT_STEERING)
7535 			DBG_PRINT(ERR_DBG,
7536 				  "Tx steering is not supported with "
7537 				  "one fifo. Disabling Tx steering.\n");
7538 		tx_steering_type = NO_STEERING;
7539 	}
7540 
7541 	if ((tx_steering_type < NO_STEERING) ||
7542 	    (tx_steering_type > TX_DEFAULT_STEERING)) {
7543 		DBG_PRINT(ERR_DBG,
7544 			  "Requested transmit steering not supported\n");
7545 		DBG_PRINT(ERR_DBG, "Disabling transmit steering\n");
7546 		tx_steering_type = NO_STEERING;
7547 	}
7548 
7549 	if (rx_ring_num > MAX_RX_RINGS) {
7550 		DBG_PRINT(ERR_DBG,
7551 			  "Requested number of rx rings not supported\n");
7552 		DBG_PRINT(ERR_DBG, "Default to %d rx rings\n",
7553 			  MAX_RX_RINGS);
7554 		rx_ring_num = MAX_RX_RINGS;
7555 	}
7556 
7557 	if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) {
7558 		DBG_PRINT(ERR_DBG, "Wrong intr_type requested. "
7559 			  "Defaulting to INTA\n");
7560 		*dev_intr_type = INTA;
7561 	}
7562 
7563 	if ((*dev_intr_type == MSI_X) &&
7564 	    ((pdev->device != PCI_DEVICE_ID_HERC_WIN) &&
7565 	     (pdev->device != PCI_DEVICE_ID_HERC_UNI))) {
7566 		DBG_PRINT(ERR_DBG, "Xframe I does not support MSI_X. "
7567 			  "Defaulting to INTA\n");
7568 		*dev_intr_type = INTA;
7569 	}
7570 
7571 	if ((rx_ring_mode != 1) && (rx_ring_mode != 2)) {
7572 		DBG_PRINT(ERR_DBG, "Requested ring mode not supported\n");
7573 		DBG_PRINT(ERR_DBG, "Defaulting to 1-buffer mode\n");
7574 		rx_ring_mode = 1;
7575 	}
7576 
7577 	for (i = 0; i < MAX_RX_RINGS; i++)
7578 		if (rx_ring_sz[i] > MAX_RX_BLOCKS_PER_RING) {
7579 			DBG_PRINT(ERR_DBG, "Requested rx ring size not "
7580 				  "supported\nDefaulting to %d\n",
7581 				  MAX_RX_BLOCKS_PER_RING);
7582 			rx_ring_sz[i] = MAX_RX_BLOCKS_PER_RING;
7583 		}
7584 
7585 	return SUCCESS;
7586 }
7587 
7588 /**
7589  * rts_ds_steer - Receive traffic steering based on IPv4 or IPv6 TOS
7590  * or Traffic class respectively.
7591  * @nic: device private variable
7592  * Description: The function configures the receive steering to
7593  * desired receive ring.
7594  * Return Value:  SUCCESS on success and
7595  * '-1' on failure (endian settings incorrect).
7596  */
7597 static int rts_ds_steer(struct s2io_nic *nic, u8 ds_codepoint, u8 ring)
7598 {
7599 	struct XENA_dev_config __iomem *bar0 = nic->bar0;
7600 	register u64 val64 = 0;
7601 
7602 	if (ds_codepoint > 63)
7603 		return FAILURE;
7604 
7605 	val64 = RTS_DS_MEM_DATA(ring);
7606 	writeq(val64, &bar0->rts_ds_mem_data);
7607 
7608 	val64 = RTS_DS_MEM_CTRL_WE |
7609 		RTS_DS_MEM_CTRL_STROBE_NEW_CMD |
7610 		RTS_DS_MEM_CTRL_OFFSET(ds_codepoint);
7611 
7612 	writeq(val64, &bar0->rts_ds_mem_ctrl);
7613 
7614 	return wait_for_cmd_complete(&bar0->rts_ds_mem_ctrl,
7615 				     RTS_DS_MEM_CTRL_STROBE_CMD_BEING_EXECUTED,
7616 				     S2IO_BIT_RESET);
7617 }
7618 
7619 static const struct net_device_ops s2io_netdev_ops = {
7620 	.ndo_open	        = s2io_open,
7621 	.ndo_stop	        = s2io_close,
7622 	.ndo_get_stats	        = s2io_get_stats,
7623 	.ndo_start_xmit    	= s2io_xmit,
7624 	.ndo_validate_addr	= eth_validate_addr,
7625 	.ndo_set_rx_mode	= s2io_set_multicast,
7626 	.ndo_do_ioctl	   	= s2io_ioctl,
7627 	.ndo_set_mac_address    = s2io_set_mac_addr,
7628 	.ndo_change_mtu	   	= s2io_change_mtu,
7629 	.ndo_set_features	= s2io_set_features,
7630 	.ndo_tx_timeout	   	= s2io_tx_watchdog,
7631 #ifdef CONFIG_NET_POLL_CONTROLLER
7632 	.ndo_poll_controller    = s2io_netpoll,
7633 #endif
7634 };
7635 
7636 /**
7637  *  s2io_init_nic - Initialization of the adapter .
7638  *  @pdev : structure containing the PCI related information of the device.
7639  *  @pre: List of PCI devices supported by the driver listed in s2io_tbl.
7640  *  Description:
7641  *  The function initializes an adapter identified by the pci_dec structure.
7642  *  All OS related initialization including memory and device structure and
7643  *  initlaization of the device private variable is done. Also the swapper
7644  *  control register is initialized to enable read and write into the I/O
7645  *  registers of the device.
7646  *  Return value:
7647  *  returns 0 on success and negative on failure.
7648  */
7649 
7650 static int
7651 s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
7652 {
7653 	struct s2io_nic *sp;
7654 	struct net_device *dev;
7655 	int i, j, ret;
7656 	int dma_flag = false;
7657 	u32 mac_up, mac_down;
7658 	u64 val64 = 0, tmp64 = 0;
7659 	struct XENA_dev_config __iomem *bar0 = NULL;
7660 	u16 subid;
7661 	struct config_param *config;
7662 	struct mac_info *mac_control;
7663 	int mode;
7664 	u8 dev_intr_type = intr_type;
7665 	u8 dev_multiq = 0;
7666 
7667 	ret = s2io_verify_parm(pdev, &dev_intr_type, &dev_multiq);
7668 	if (ret)
7669 		return ret;
7670 
7671 	ret = pci_enable_device(pdev);
7672 	if (ret) {
7673 		DBG_PRINT(ERR_DBG,
7674 			  "%s: pci_enable_device failed\n", __func__);
7675 		return ret;
7676 	}
7677 
7678 	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
7679 		DBG_PRINT(INIT_DBG, "%s: Using 64bit DMA\n", __func__);
7680 		dma_flag = true;
7681 		if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64))) {
7682 			DBG_PRINT(ERR_DBG,
7683 				  "Unable to obtain 64bit DMA "
7684 				  "for consistent allocations\n");
7685 			pci_disable_device(pdev);
7686 			return -ENOMEM;
7687 		}
7688 	} else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
7689 		DBG_PRINT(INIT_DBG, "%s: Using 32bit DMA\n", __func__);
7690 	} else {
7691 		pci_disable_device(pdev);
7692 		return -ENOMEM;
7693 	}
7694 	ret = pci_request_regions(pdev, s2io_driver_name);
7695 	if (ret) {
7696 		DBG_PRINT(ERR_DBG, "%s: Request Regions failed - %x\n",
7697 			  __func__, ret);
7698 		pci_disable_device(pdev);
7699 		return -ENODEV;
7700 	}
7701 	if (dev_multiq)
7702 		dev = alloc_etherdev_mq(sizeof(struct s2io_nic), tx_fifo_num);
7703 	else
7704 		dev = alloc_etherdev(sizeof(struct s2io_nic));
7705 	if (dev == NULL) {
7706 		pci_disable_device(pdev);
7707 		pci_release_regions(pdev);
7708 		return -ENODEV;
7709 	}
7710 
7711 	pci_set_master(pdev);
7712 	pci_set_drvdata(pdev, dev);
7713 	SET_NETDEV_DEV(dev, &pdev->dev);
7714 
7715 	/*  Private member variable initialized to s2io NIC structure */
7716 	sp = netdev_priv(dev);
7717 	sp->dev = dev;
7718 	sp->pdev = pdev;
7719 	sp->high_dma_flag = dma_flag;
7720 	sp->device_enabled_once = false;
7721 	if (rx_ring_mode == 1)
7722 		sp->rxd_mode = RXD_MODE_1;
7723 	if (rx_ring_mode == 2)
7724 		sp->rxd_mode = RXD_MODE_3B;
7725 
7726 	sp->config.intr_type = dev_intr_type;
7727 
7728 	if ((pdev->device == PCI_DEVICE_ID_HERC_WIN) ||
7729 	    (pdev->device == PCI_DEVICE_ID_HERC_UNI))
7730 		sp->device_type = XFRAME_II_DEVICE;
7731 	else
7732 		sp->device_type = XFRAME_I_DEVICE;
7733 
7734 
7735 	/* Initialize some PCI/PCI-X fields of the NIC. */
7736 	s2io_init_pci(sp);
7737 
7738 	/*
7739 	 * Setting the device configuration parameters.
7740 	 * Most of these parameters can be specified by the user during
7741 	 * module insertion as they are module loadable parameters. If
7742 	 * these parameters are not not specified during load time, they
7743 	 * are initialized with default values.
7744 	 */
7745 	config = &sp->config;
7746 	mac_control = &sp->mac_control;
7747 
7748 	config->napi = napi;
7749 	config->tx_steering_type = tx_steering_type;
7750 
7751 	/* Tx side parameters. */
7752 	if (config->tx_steering_type == TX_PRIORITY_STEERING)
7753 		config->tx_fifo_num = MAX_TX_FIFOS;
7754 	else
7755 		config->tx_fifo_num = tx_fifo_num;
7756 
7757 	/* Initialize the fifos used for tx steering */
7758 	if (config->tx_fifo_num < 5) {
7759 		if (config->tx_fifo_num  == 1)
7760 			sp->total_tcp_fifos = 1;
7761 		else
7762 			sp->total_tcp_fifos = config->tx_fifo_num - 1;
7763 		sp->udp_fifo_idx = config->tx_fifo_num - 1;
7764 		sp->total_udp_fifos = 1;
7765 		sp->other_fifo_idx = sp->total_tcp_fifos - 1;
7766 	} else {
7767 		sp->total_tcp_fifos = (tx_fifo_num - FIFO_UDP_MAX_NUM -
7768 				       FIFO_OTHER_MAX_NUM);
7769 		sp->udp_fifo_idx = sp->total_tcp_fifos;
7770 		sp->total_udp_fifos = FIFO_UDP_MAX_NUM;
7771 		sp->other_fifo_idx = sp->udp_fifo_idx + FIFO_UDP_MAX_NUM;
7772 	}
7773 
7774 	config->multiq = dev_multiq;
7775 	for (i = 0; i < config->tx_fifo_num; i++) {
7776 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7777 
7778 		tx_cfg->fifo_len = tx_fifo_len[i];
7779 		tx_cfg->fifo_priority = i;
7780 	}
7781 
7782 	/* mapping the QoS priority to the configured fifos */
7783 	for (i = 0; i < MAX_TX_FIFOS; i++)
7784 		config->fifo_mapping[i] = fifo_map[config->tx_fifo_num - 1][i];
7785 
7786 	/* map the hashing selector table to the configured fifos */
7787 	for (i = 0; i < config->tx_fifo_num; i++)
7788 		sp->fifo_selector[i] = fifo_selector[i];
7789 
7790 
7791 	config->tx_intr_type = TXD_INT_TYPE_UTILZ;
7792 	for (i = 0; i < config->tx_fifo_num; i++) {
7793 		struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7794 
7795 		tx_cfg->f_no_snoop = (NO_SNOOP_TXD | NO_SNOOP_TXD_BUFFER);
7796 		if (tx_cfg->fifo_len < 65) {
7797 			config->tx_intr_type = TXD_INT_TYPE_PER_LIST;
7798 			break;
7799 		}
7800 	}
7801 	/* + 2 because one Txd for skb->data and one Txd for UFO */
7802 	config->max_txds = MAX_SKB_FRAGS + 2;
7803 
7804 	/* Rx side parameters. */
7805 	config->rx_ring_num = rx_ring_num;
7806 	for (i = 0; i < config->rx_ring_num; i++) {
7807 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7808 		struct ring_info *ring = &mac_control->rings[i];
7809 
7810 		rx_cfg->num_rxd = rx_ring_sz[i] * (rxd_count[sp->rxd_mode] + 1);
7811 		rx_cfg->ring_priority = i;
7812 		ring->rx_bufs_left = 0;
7813 		ring->rxd_mode = sp->rxd_mode;
7814 		ring->rxd_count = rxd_count[sp->rxd_mode];
7815 		ring->pdev = sp->pdev;
7816 		ring->dev = sp->dev;
7817 	}
7818 
7819 	for (i = 0; i < rx_ring_num; i++) {
7820 		struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7821 
7822 		rx_cfg->ring_org = RING_ORG_BUFF1;
7823 		rx_cfg->f_no_snoop = (NO_SNOOP_RXD | NO_SNOOP_RXD_BUFFER);
7824 	}
7825 
7826 	/*  Setting Mac Control parameters */
7827 	mac_control->rmac_pause_time = rmac_pause_time;
7828 	mac_control->mc_pause_threshold_q0q3 = mc_pause_threshold_q0q3;
7829 	mac_control->mc_pause_threshold_q4q7 = mc_pause_threshold_q4q7;
7830 
7831 
7832 	/*  initialize the shared memory used by the NIC and the host */
7833 	if (init_shared_mem(sp)) {
7834 		DBG_PRINT(ERR_DBG, "%s: Memory allocation failed\n", dev->name);
7835 		ret = -ENOMEM;
7836 		goto mem_alloc_failed;
7837 	}
7838 
7839 	sp->bar0 = pci_ioremap_bar(pdev, 0);
7840 	if (!sp->bar0) {
7841 		DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem1\n",
7842 			  dev->name);
7843 		ret = -ENOMEM;
7844 		goto bar0_remap_failed;
7845 	}
7846 
7847 	sp->bar1 = pci_ioremap_bar(pdev, 2);
7848 	if (!sp->bar1) {
7849 		DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem2\n",
7850 			  dev->name);
7851 		ret = -ENOMEM;
7852 		goto bar1_remap_failed;
7853 	}
7854 
7855 	/* Initializing the BAR1 address as the start of the FIFO pointer. */
7856 	for (j = 0; j < MAX_TX_FIFOS; j++) {
7857 		mac_control->tx_FIFO_start[j] = sp->bar1 + (j * 0x00020000);
7858 	}
7859 
7860 	/*  Driver entry points */
7861 	dev->netdev_ops = &s2io_netdev_ops;
7862 	dev->ethtool_ops = &netdev_ethtool_ops;
7863 	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
7864 		NETIF_F_TSO | NETIF_F_TSO6 |
7865 		NETIF_F_RXCSUM | NETIF_F_LRO;
7866 	dev->features |= dev->hw_features |
7867 		NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
7868 	if (sp->high_dma_flag == true)
7869 		dev->features |= NETIF_F_HIGHDMA;
7870 	dev->watchdog_timeo = WATCH_DOG_TIMEOUT;
7871 	INIT_WORK(&sp->rst_timer_task, s2io_restart_nic);
7872 	INIT_WORK(&sp->set_link_task, s2io_set_link);
7873 
7874 	pci_save_state(sp->pdev);
7875 
7876 	/* Setting swapper control on the NIC, for proper reset operation */
7877 	if (s2io_set_swapper(sp)) {
7878 		DBG_PRINT(ERR_DBG, "%s: swapper settings are wrong\n",
7879 			  dev->name);
7880 		ret = -EAGAIN;
7881 		goto set_swap_failed;
7882 	}
7883 
7884 	/* Verify if the Herc works on the slot its placed into */
7885 	if (sp->device_type & XFRAME_II_DEVICE) {
7886 		mode = s2io_verify_pci_mode(sp);
7887 		if (mode < 0) {
7888 			DBG_PRINT(ERR_DBG, "%s: Unsupported PCI bus mode\n",
7889 				  __func__);
7890 			ret = -EBADSLT;
7891 			goto set_swap_failed;
7892 		}
7893 	}
7894 
7895 	if (sp->config.intr_type == MSI_X) {
7896 		sp->num_entries = config->rx_ring_num + 1;
7897 		ret = s2io_enable_msi_x(sp);
7898 
7899 		if (!ret) {
7900 			ret = s2io_test_msi(sp);
7901 			/* rollback MSI-X, will re-enable during add_isr() */
7902 			remove_msix_isr(sp);
7903 		}
7904 		if (ret) {
7905 
7906 			DBG_PRINT(ERR_DBG,
7907 				  "MSI-X requested but failed to enable\n");
7908 			sp->config.intr_type = INTA;
7909 		}
7910 	}
7911 
7912 	if (config->intr_type ==  MSI_X) {
7913 		for (i = 0; i < config->rx_ring_num ; i++) {
7914 			struct ring_info *ring = &mac_control->rings[i];
7915 
7916 			netif_napi_add(dev, &ring->napi, s2io_poll_msix, 64);
7917 		}
7918 	} else {
7919 		netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64);
7920 	}
7921 
7922 	/* Not needed for Herc */
7923 	if (sp->device_type & XFRAME_I_DEVICE) {
7924 		/*
7925 		 * Fix for all "FFs" MAC address problems observed on
7926 		 * Alpha platforms
7927 		 */
7928 		fix_mac_address(sp);
7929 		s2io_reset(sp);
7930 	}
7931 
7932 	/*
7933 	 * MAC address initialization.
7934 	 * For now only one mac address will be read and used.
7935 	 */
7936 	bar0 = sp->bar0;
7937 	val64 = RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
7938 		RMAC_ADDR_CMD_MEM_OFFSET(0 + S2IO_MAC_ADDR_START_OFFSET);
7939 	writeq(val64, &bar0->rmac_addr_cmd_mem);
7940 	wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
7941 			      RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
7942 			      S2IO_BIT_RESET);
7943 	tmp64 = readq(&bar0->rmac_addr_data0_mem);
7944 	mac_down = (u32)tmp64;
7945 	mac_up = (u32) (tmp64 >> 32);
7946 
7947 	sp->def_mac_addr[0].mac_addr[3] = (u8) (mac_up);
7948 	sp->def_mac_addr[0].mac_addr[2] = (u8) (mac_up >> 8);
7949 	sp->def_mac_addr[0].mac_addr[1] = (u8) (mac_up >> 16);
7950 	sp->def_mac_addr[0].mac_addr[0] = (u8) (mac_up >> 24);
7951 	sp->def_mac_addr[0].mac_addr[5] = (u8) (mac_down >> 16);
7952 	sp->def_mac_addr[0].mac_addr[4] = (u8) (mac_down >> 24);
7953 
7954 	/*  Set the factory defined MAC address initially   */
7955 	dev->addr_len = ETH_ALEN;
7956 	memcpy(dev->dev_addr, sp->def_mac_addr, ETH_ALEN);
7957 
7958 	/* initialize number of multicast & unicast MAC entries variables */
7959 	if (sp->device_type == XFRAME_I_DEVICE) {
7960 		config->max_mc_addr = S2IO_XENA_MAX_MC_ADDRESSES;
7961 		config->max_mac_addr = S2IO_XENA_MAX_MAC_ADDRESSES;
7962 		config->mc_start_offset = S2IO_XENA_MC_ADDR_START_OFFSET;
7963 	} else if (sp->device_type == XFRAME_II_DEVICE) {
7964 		config->max_mc_addr = S2IO_HERC_MAX_MC_ADDRESSES;
7965 		config->max_mac_addr = S2IO_HERC_MAX_MAC_ADDRESSES;
7966 		config->mc_start_offset = S2IO_HERC_MC_ADDR_START_OFFSET;
7967 	}
7968 
7969 	/* MTU range: 46 - 9600 */
7970 	dev->min_mtu = MIN_MTU;
7971 	dev->max_mtu = S2IO_JUMBO_SIZE;
7972 
7973 	/* store mac addresses from CAM to s2io_nic structure */
7974 	do_s2io_store_unicast_mc(sp);
7975 
7976 	/* Configure MSIX vector for number of rings configured plus one */
7977 	if ((sp->device_type == XFRAME_II_DEVICE) &&
7978 	    (config->intr_type == MSI_X))
7979 		sp->num_entries = config->rx_ring_num + 1;
7980 
7981 	/* Store the values of the MSIX table in the s2io_nic structure */
7982 	store_xmsi_data(sp);
7983 	/* reset Nic and bring it to known state */
7984 	s2io_reset(sp);
7985 
7986 	/*
7987 	 * Initialize link state flags
7988 	 * and the card state parameter
7989 	 */
7990 	sp->state = 0;
7991 
7992 	/* Initialize spinlocks */
7993 	for (i = 0; i < sp->config.tx_fifo_num; i++) {
7994 		struct fifo_info *fifo = &mac_control->fifos[i];
7995 
7996 		spin_lock_init(&fifo->tx_lock);
7997 	}
7998 
7999 	/*
8000 	 * SXE-002: Configure link and activity LED to init state
8001 	 * on driver load.
8002 	 */
8003 	subid = sp->pdev->subsystem_device;
8004 	if ((subid & 0xFF) >= 0x07) {
8005 		val64 = readq(&bar0->gpio_control);
8006 		val64 |= 0x0000800000000000ULL;
8007 		writeq(val64, &bar0->gpio_control);
8008 		val64 = 0x0411040400000000ULL;
8009 		writeq(val64, (void __iomem *)bar0 + 0x2700);
8010 		val64 = readq(&bar0->gpio_control);
8011 	}
8012 
8013 	sp->rx_csum = 1;	/* Rx chksum verify enabled by default */
8014 
8015 	if (register_netdev(dev)) {
8016 		DBG_PRINT(ERR_DBG, "Device registration failed\n");
8017 		ret = -ENODEV;
8018 		goto register_failed;
8019 	}
8020 	s2io_vpd_read(sp);
8021 	DBG_PRINT(ERR_DBG, "Copyright(c) 2002-2010 Exar Corp.\n");
8022 	DBG_PRINT(ERR_DBG, "%s: Neterion %s (rev %d)\n", dev->name,
8023 		  sp->product_name, pdev->revision);
8024 	DBG_PRINT(ERR_DBG, "%s: Driver version %s\n", dev->name,
8025 		  s2io_driver_version);
8026 	DBG_PRINT(ERR_DBG, "%s: MAC Address: %pM\n", dev->name, dev->dev_addr);
8027 	DBG_PRINT(ERR_DBG, "Serial number: %s\n", sp->serial_num);
8028 	if (sp->device_type & XFRAME_II_DEVICE) {
8029 		mode = s2io_print_pci_mode(sp);
8030 		if (mode < 0) {
8031 			ret = -EBADSLT;
8032 			unregister_netdev(dev);
8033 			goto set_swap_failed;
8034 		}
8035 	}
8036 	switch (sp->rxd_mode) {
8037 	case RXD_MODE_1:
8038 		DBG_PRINT(ERR_DBG, "%s: 1-Buffer receive mode enabled\n",
8039 			  dev->name);
8040 		break;
8041 	case RXD_MODE_3B:
8042 		DBG_PRINT(ERR_DBG, "%s: 2-Buffer receive mode enabled\n",
8043 			  dev->name);
8044 		break;
8045 	}
8046 
8047 	switch (sp->config.napi) {
8048 	case 0:
8049 		DBG_PRINT(ERR_DBG, "%s: NAPI disabled\n", dev->name);
8050 		break;
8051 	case 1:
8052 		DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name);
8053 		break;
8054 	}
8055 
8056 	DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name,
8057 		  sp->config.tx_fifo_num);
8058 
8059 	DBG_PRINT(ERR_DBG, "%s: Using %d Rx ring(s)\n", dev->name,
8060 		  sp->config.rx_ring_num);
8061 
8062 	switch (sp->config.intr_type) {
8063 	case INTA:
8064 		DBG_PRINT(ERR_DBG, "%s: Interrupt type INTA\n", dev->name);
8065 		break;
8066 	case MSI_X:
8067 		DBG_PRINT(ERR_DBG, "%s: Interrupt type MSI-X\n", dev->name);
8068 		break;
8069 	}
8070 	if (sp->config.multiq) {
8071 		for (i = 0; i < sp->config.tx_fifo_num; i++) {
8072 			struct fifo_info *fifo = &mac_control->fifos[i];
8073 
8074 			fifo->multiq = config->multiq;
8075 		}
8076 		DBG_PRINT(ERR_DBG, "%s: Multiqueue support enabled\n",
8077 			  dev->name);
8078 	} else
8079 		DBG_PRINT(ERR_DBG, "%s: Multiqueue support disabled\n",
8080 			  dev->name);
8081 
8082 	switch (sp->config.tx_steering_type) {
8083 	case NO_STEERING:
8084 		DBG_PRINT(ERR_DBG, "%s: No steering enabled for transmit\n",
8085 			  dev->name);
8086 		break;
8087 	case TX_PRIORITY_STEERING:
8088 		DBG_PRINT(ERR_DBG,
8089 			  "%s: Priority steering enabled for transmit\n",
8090 			  dev->name);
8091 		break;
8092 	case TX_DEFAULT_STEERING:
8093 		DBG_PRINT(ERR_DBG,
8094 			  "%s: Default steering enabled for transmit\n",
8095 			  dev->name);
8096 	}
8097 
8098 	DBG_PRINT(ERR_DBG, "%s: Large receive offload enabled\n",
8099 		  dev->name);
8100 	/* Initialize device name */
8101 	snprintf(sp->name, sizeof(sp->name), "%s Neterion %s", dev->name,
8102 		 sp->product_name);
8103 
8104 	if (vlan_tag_strip)
8105 		sp->vlan_strip_flag = 1;
8106 	else
8107 		sp->vlan_strip_flag = 0;
8108 
8109 	/*
8110 	 * Make Link state as off at this point, when the Link change
8111 	 * interrupt comes the state will be automatically changed to
8112 	 * the right state.
8113 	 */
8114 	netif_carrier_off(dev);
8115 
8116 	return 0;
8117 
8118 register_failed:
8119 set_swap_failed:
8120 	iounmap(sp->bar1);
8121 bar1_remap_failed:
8122 	iounmap(sp->bar0);
8123 bar0_remap_failed:
8124 mem_alloc_failed:
8125 	free_shared_mem(sp);
8126 	pci_disable_device(pdev);
8127 	pci_release_regions(pdev);
8128 	free_netdev(dev);
8129 
8130 	return ret;
8131 }
8132 
8133 /**
8134  * s2io_rem_nic - Free the PCI device
8135  * @pdev: structure containing the PCI related information of the device.
8136  * Description: This function is called by the Pci subsystem to release a
8137  * PCI device and free up all resource held up by the device. This could
8138  * be in response to a Hot plug event or when the driver is to be removed
8139  * from memory.
8140  */
8141 
8142 static void s2io_rem_nic(struct pci_dev *pdev)
8143 {
8144 	struct net_device *dev = pci_get_drvdata(pdev);
8145 	struct s2io_nic *sp;
8146 
8147 	if (dev == NULL) {
8148 		DBG_PRINT(ERR_DBG, "Driver Data is NULL!!\n");
8149 		return;
8150 	}
8151 
8152 	sp = netdev_priv(dev);
8153 
8154 	cancel_work_sync(&sp->rst_timer_task);
8155 	cancel_work_sync(&sp->set_link_task);
8156 
8157 	unregister_netdev(dev);
8158 
8159 	free_shared_mem(sp);
8160 	iounmap(sp->bar0);
8161 	iounmap(sp->bar1);
8162 	pci_release_regions(pdev);
8163 	free_netdev(dev);
8164 	pci_disable_device(pdev);
8165 }
8166 
8167 module_pci_driver(s2io_driver);
8168 
8169 static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip,
8170 				struct tcphdr **tcp, struct RxD_t *rxdp,
8171 				struct s2io_nic *sp)
8172 {
8173 	int ip_off;
8174 	u8 l2_type = (u8)((rxdp->Control_1 >> 37) & 0x7), ip_len;
8175 
8176 	if (!(rxdp->Control_1 & RXD_FRAME_PROTO_TCP)) {
8177 		DBG_PRINT(INIT_DBG,
8178 			  "%s: Non-TCP frames not supported for LRO\n",
8179 			  __func__);
8180 		return -1;
8181 	}
8182 
8183 	/* Checking for DIX type or DIX type with VLAN */
8184 	if ((l2_type == 0) || (l2_type == 4)) {
8185 		ip_off = HEADER_ETHERNET_II_802_3_SIZE;
8186 		/*
8187 		 * If vlan stripping is disabled and the frame is VLAN tagged,
8188 		 * shift the offset by the VLAN header size bytes.
8189 		 */
8190 		if ((!sp->vlan_strip_flag) &&
8191 		    (rxdp->Control_1 & RXD_FRAME_VLAN_TAG))
8192 			ip_off += HEADER_VLAN_SIZE;
8193 	} else {
8194 		/* LLC, SNAP etc are considered non-mergeable */
8195 		return -1;
8196 	}
8197 
8198 	*ip = (struct iphdr *)(buffer + ip_off);
8199 	ip_len = (u8)((*ip)->ihl);
8200 	ip_len <<= 2;
8201 	*tcp = (struct tcphdr *)((unsigned long)*ip + ip_len);
8202 
8203 	return 0;
8204 }
8205 
8206 static int check_for_socket_match(struct lro *lro, struct iphdr *ip,
8207 				  struct tcphdr *tcp)
8208 {
8209 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8210 	if ((lro->iph->saddr != ip->saddr) ||
8211 	    (lro->iph->daddr != ip->daddr) ||
8212 	    (lro->tcph->source != tcp->source) ||
8213 	    (lro->tcph->dest != tcp->dest))
8214 		return -1;
8215 	return 0;
8216 }
8217 
8218 static inline int get_l4_pyld_length(struct iphdr *ip, struct tcphdr *tcp)
8219 {
8220 	return ntohs(ip->tot_len) - (ip->ihl << 2) - (tcp->doff << 2);
8221 }
8222 
8223 static void initiate_new_session(struct lro *lro, u8 *l2h,
8224 				 struct iphdr *ip, struct tcphdr *tcp,
8225 				 u32 tcp_pyld_len, u16 vlan_tag)
8226 {
8227 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8228 	lro->l2h = l2h;
8229 	lro->iph = ip;
8230 	lro->tcph = tcp;
8231 	lro->tcp_next_seq = tcp_pyld_len + ntohl(tcp->seq);
8232 	lro->tcp_ack = tcp->ack_seq;
8233 	lro->sg_num = 1;
8234 	lro->total_len = ntohs(ip->tot_len);
8235 	lro->frags_len = 0;
8236 	lro->vlan_tag = vlan_tag;
8237 	/*
8238 	 * Check if we saw TCP timestamp.
8239 	 * Other consistency checks have already been done.
8240 	 */
8241 	if (tcp->doff == 8) {
8242 		__be32 *ptr;
8243 		ptr = (__be32 *)(tcp+1);
8244 		lro->saw_ts = 1;
8245 		lro->cur_tsval = ntohl(*(ptr+1));
8246 		lro->cur_tsecr = *(ptr+2);
8247 	}
8248 	lro->in_use = 1;
8249 }
8250 
8251 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro)
8252 {
8253 	struct iphdr *ip = lro->iph;
8254 	struct tcphdr *tcp = lro->tcph;
8255 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8256 
8257 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8258 
8259 	/* Update L3 header */
8260 	csum_replace2(&ip->check, ip->tot_len, htons(lro->total_len));
8261 	ip->tot_len = htons(lro->total_len);
8262 
8263 	/* Update L4 header */
8264 	tcp->ack_seq = lro->tcp_ack;
8265 	tcp->window = lro->window;
8266 
8267 	/* Update tsecr field if this session has timestamps enabled */
8268 	if (lro->saw_ts) {
8269 		__be32 *ptr = (__be32 *)(tcp + 1);
8270 		*(ptr+2) = lro->cur_tsecr;
8271 	}
8272 
8273 	/* Update counters required for calculation of
8274 	 * average no. of packets aggregated.
8275 	 */
8276 	swstats->sum_avg_pkts_aggregated += lro->sg_num;
8277 	swstats->num_aggregations++;
8278 }
8279 
8280 static void aggregate_new_rx(struct lro *lro, struct iphdr *ip,
8281 			     struct tcphdr *tcp, u32 l4_pyld)
8282 {
8283 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8284 	lro->total_len += l4_pyld;
8285 	lro->frags_len += l4_pyld;
8286 	lro->tcp_next_seq += l4_pyld;
8287 	lro->sg_num++;
8288 
8289 	/* Update ack seq no. and window ad(from this pkt) in LRO object */
8290 	lro->tcp_ack = tcp->ack_seq;
8291 	lro->window = tcp->window;
8292 
8293 	if (lro->saw_ts) {
8294 		__be32 *ptr;
8295 		/* Update tsecr and tsval from this packet */
8296 		ptr = (__be32 *)(tcp+1);
8297 		lro->cur_tsval = ntohl(*(ptr+1));
8298 		lro->cur_tsecr = *(ptr + 2);
8299 	}
8300 }
8301 
8302 static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip,
8303 				    struct tcphdr *tcp, u32 tcp_pyld_len)
8304 {
8305 	u8 *ptr;
8306 
8307 	DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8308 
8309 	if (!tcp_pyld_len) {
8310 		/* Runt frame or a pure ack */
8311 		return -1;
8312 	}
8313 
8314 	if (ip->ihl != 5) /* IP has options */
8315 		return -1;
8316 
8317 	/* If we see CE codepoint in IP header, packet is not mergeable */
8318 	if (INET_ECN_is_ce(ipv4_get_dsfield(ip)))
8319 		return -1;
8320 
8321 	/* If we see ECE or CWR flags in TCP header, packet is not mergeable */
8322 	if (tcp->urg || tcp->psh || tcp->rst ||
8323 	    tcp->syn || tcp->fin ||
8324 	    tcp->ece || tcp->cwr || !tcp->ack) {
8325 		/*
8326 		 * Currently recognize only the ack control word and
8327 		 * any other control field being set would result in
8328 		 * flushing the LRO session
8329 		 */
8330 		return -1;
8331 	}
8332 
8333 	/*
8334 	 * Allow only one TCP timestamp option. Don't aggregate if
8335 	 * any other options are detected.
8336 	 */
8337 	if (tcp->doff != 5 && tcp->doff != 8)
8338 		return -1;
8339 
8340 	if (tcp->doff == 8) {
8341 		ptr = (u8 *)(tcp + 1);
8342 		while (*ptr == TCPOPT_NOP)
8343 			ptr++;
8344 		if (*ptr != TCPOPT_TIMESTAMP || *(ptr+1) != TCPOLEN_TIMESTAMP)
8345 			return -1;
8346 
8347 		/* Ensure timestamp value increases monotonically */
8348 		if (l_lro)
8349 			if (l_lro->cur_tsval > ntohl(*((__be32 *)(ptr+2))))
8350 				return -1;
8351 
8352 		/* timestamp echo reply should be non-zero */
8353 		if (*((__be32 *)(ptr+6)) == 0)
8354 			return -1;
8355 	}
8356 
8357 	return 0;
8358 }
8359 
8360 static int s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer,
8361 				 u8 **tcp, u32 *tcp_len, struct lro **lro,
8362 				 struct RxD_t *rxdp, struct s2io_nic *sp)
8363 {
8364 	struct iphdr *ip;
8365 	struct tcphdr *tcph;
8366 	int ret = 0, i;
8367 	u16 vlan_tag = 0;
8368 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8369 
8370 	ret = check_L2_lro_capable(buffer, &ip, (struct tcphdr **)tcp,
8371 				   rxdp, sp);
8372 	if (ret)
8373 		return ret;
8374 
8375 	DBG_PRINT(INFO_DBG, "IP Saddr: %x Daddr: %x\n", ip->saddr, ip->daddr);
8376 
8377 	vlan_tag = RXD_GET_VLAN_TAG(rxdp->Control_2);
8378 	tcph = (struct tcphdr *)*tcp;
8379 	*tcp_len = get_l4_pyld_length(ip, tcph);
8380 	for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8381 		struct lro *l_lro = &ring_data->lro0_n[i];
8382 		if (l_lro->in_use) {
8383 			if (check_for_socket_match(l_lro, ip, tcph))
8384 				continue;
8385 			/* Sock pair matched */
8386 			*lro = l_lro;
8387 
8388 			if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) {
8389 				DBG_PRINT(INFO_DBG, "%s: Out of sequence. "
8390 					  "expected 0x%x, actual 0x%x\n",
8391 					  __func__,
8392 					  (*lro)->tcp_next_seq,
8393 					  ntohl(tcph->seq));
8394 
8395 				swstats->outof_sequence_pkts++;
8396 				ret = 2;
8397 				break;
8398 			}
8399 
8400 			if (!verify_l3_l4_lro_capable(l_lro, ip, tcph,
8401 						      *tcp_len))
8402 				ret = 1; /* Aggregate */
8403 			else
8404 				ret = 2; /* Flush both */
8405 			break;
8406 		}
8407 	}
8408 
8409 	if (ret == 0) {
8410 		/* Before searching for available LRO objects,
8411 		 * check if the pkt is L3/L4 aggregatable. If not
8412 		 * don't create new LRO session. Just send this
8413 		 * packet up.
8414 		 */
8415 		if (verify_l3_l4_lro_capable(NULL, ip, tcph, *tcp_len))
8416 			return 5;
8417 
8418 		for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8419 			struct lro *l_lro = &ring_data->lro0_n[i];
8420 			if (!(l_lro->in_use)) {
8421 				*lro = l_lro;
8422 				ret = 3; /* Begin anew */
8423 				break;
8424 			}
8425 		}
8426 	}
8427 
8428 	if (ret == 0) { /* sessions exceeded */
8429 		DBG_PRINT(INFO_DBG, "%s: All LRO sessions already in use\n",
8430 			  __func__);
8431 		*lro = NULL;
8432 		return ret;
8433 	}
8434 
8435 	switch (ret) {
8436 	case 3:
8437 		initiate_new_session(*lro, buffer, ip, tcph, *tcp_len,
8438 				     vlan_tag);
8439 		break;
8440 	case 2:
8441 		update_L3L4_header(sp, *lro);
8442 		break;
8443 	case 1:
8444 		aggregate_new_rx(*lro, ip, tcph, *tcp_len);
8445 		if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) {
8446 			update_L3L4_header(sp, *lro);
8447 			ret = 4; /* Flush the LRO */
8448 		}
8449 		break;
8450 	default:
8451 		DBG_PRINT(ERR_DBG, "%s: Don't know, can't say!!\n", __func__);
8452 		break;
8453 	}
8454 
8455 	return ret;
8456 }
8457 
8458 static void clear_lro_session(struct lro *lro)
8459 {
8460 	static u16 lro_struct_size = sizeof(struct lro);
8461 
8462 	memset(lro, 0, lro_struct_size);
8463 }
8464 
8465 static void queue_rx_frame(struct sk_buff *skb, u16 vlan_tag)
8466 {
8467 	struct net_device *dev = skb->dev;
8468 	struct s2io_nic *sp = netdev_priv(dev);
8469 
8470 	skb->protocol = eth_type_trans(skb, dev);
8471 	if (vlan_tag && sp->vlan_strip_flag)
8472 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
8473 	if (sp->config.napi)
8474 		netif_receive_skb(skb);
8475 	else
8476 		netif_rx(skb);
8477 }
8478 
8479 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
8480 			   struct sk_buff *skb, u32 tcp_len)
8481 {
8482 	struct sk_buff *first = lro->parent;
8483 	struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8484 
8485 	first->len += tcp_len;
8486 	first->data_len = lro->frags_len;
8487 	skb_pull(skb, (skb->len - tcp_len));
8488 	if (skb_shinfo(first)->frag_list)
8489 		lro->last_frag->next = skb;
8490 	else
8491 		skb_shinfo(first)->frag_list = skb;
8492 	first->truesize += skb->truesize;
8493 	lro->last_frag = skb;
8494 	swstats->clubbed_frms_cnt++;
8495 }
8496 
8497 /**
8498  * s2io_io_error_detected - called when PCI error is detected
8499  * @pdev: Pointer to PCI device
8500  * @state: The current pci connection state
8501  *
8502  * This function is called after a PCI bus error affecting
8503  * this device has been detected.
8504  */
8505 static pci_ers_result_t s2io_io_error_detected(struct pci_dev *pdev,
8506 					       pci_channel_state_t state)
8507 {
8508 	struct net_device *netdev = pci_get_drvdata(pdev);
8509 	struct s2io_nic *sp = netdev_priv(netdev);
8510 
8511 	netif_device_detach(netdev);
8512 
8513 	if (state == pci_channel_io_perm_failure)
8514 		return PCI_ERS_RESULT_DISCONNECT;
8515 
8516 	if (netif_running(netdev)) {
8517 		/* Bring down the card, while avoiding PCI I/O */
8518 		do_s2io_card_down(sp, 0);
8519 	}
8520 	pci_disable_device(pdev);
8521 
8522 	return PCI_ERS_RESULT_NEED_RESET;
8523 }
8524 
8525 /**
8526  * s2io_io_slot_reset - called after the pci bus has been reset.
8527  * @pdev: Pointer to PCI device
8528  *
8529  * Restart the card from scratch, as if from a cold-boot.
8530  * At this point, the card has exprienced a hard reset,
8531  * followed by fixups by BIOS, and has its config space
8532  * set up identically to what it was at cold boot.
8533  */
8534 static pci_ers_result_t s2io_io_slot_reset(struct pci_dev *pdev)
8535 {
8536 	struct net_device *netdev = pci_get_drvdata(pdev);
8537 	struct s2io_nic *sp = netdev_priv(netdev);
8538 
8539 	if (pci_enable_device(pdev)) {
8540 		pr_err("Cannot re-enable PCI device after reset.\n");
8541 		return PCI_ERS_RESULT_DISCONNECT;
8542 	}
8543 
8544 	pci_set_master(pdev);
8545 	s2io_reset(sp);
8546 
8547 	return PCI_ERS_RESULT_RECOVERED;
8548 }
8549 
8550 /**
8551  * s2io_io_resume - called when traffic can start flowing again.
8552  * @pdev: Pointer to PCI device
8553  *
8554  * This callback is called when the error recovery driver tells
8555  * us that its OK to resume normal operation.
8556  */
8557 static void s2io_io_resume(struct pci_dev *pdev)
8558 {
8559 	struct net_device *netdev = pci_get_drvdata(pdev);
8560 	struct s2io_nic *sp = netdev_priv(netdev);
8561 
8562 	if (netif_running(netdev)) {
8563 		if (s2io_card_up(sp)) {
8564 			pr_err("Can't bring device back up after reset.\n");
8565 			return;
8566 		}
8567 
8568 		if (s2io_set_mac_addr(netdev, netdev->dev_addr) == FAILURE) {
8569 			s2io_card_down(sp);
8570 			pr_err("Can't restore mac addr after reset.\n");
8571 			return;
8572 		}
8573 	}
8574 
8575 	netif_device_attach(netdev);
8576 	netif_tx_wake_all_queues(netdev);
8577 }
8578