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