GNU Linux-libre 5.10.153-gnu1
[releases.git] / drivers / net / ethernet / neterion / s2io.c
1 /************************************************************************
2  * s2io.c: A Linux PCI-X Ethernet driver for Neterion 10GbE Server NIC
3  * Copyright(c) 2002-2010 Exar Corp.
4  *
5  * This software may be used and distributed according to the terms of
6  * the GNU General Public License (GPL), incorporated herein by reference.
7  * Drivers based on or derived from this code fall under the GPL and must
8  * retain the authorship, copyright and license notice.  This file is not
9  * a complete program and may only be used when the entire operating
10  * system is licensed under the GPL.
11  * See the file COPYING in this distribution for more information.
12  *
13  * Credits:
14  * Jeff Garzik          : For pointing out the improper error condition
15  *                        check in the s2io_xmit routine and also some
16  *                        issues in the Tx watch dog function. Also for
17  *                        patiently answering all those innumerable
18  *                        questions regaring the 2.6 porting issues.
19  * Stephen Hemminger    : Providing proper 2.6 porting mechanism for some
20  *                        macros available only in 2.6 Kernel.
21  * Francois Romieu      : For pointing out all code part that were
22  *                        deprecated and also styling related comments.
23  * Grant Grundler       : For helping me get rid of some Architecture
24  *                        dependent code.
25  * Christopher Hellwig  : Some more 2.6 specific issues in the driver.
26  *
27  * The module loadable parameters that are supported by the driver and a brief
28  * explanation of all the variables.
29  *
30  * rx_ring_num : This can be used to program the number of receive rings used
31  * in the driver.
32  * rx_ring_sz: This defines the number of receive blocks each ring can have.
33  *     This is also an array of size 8.
34  * rx_ring_mode: This defines the operation mode of all 8 rings. The valid
35  *              values are 1, 2.
36  * tx_fifo_num: This defines the number of Tx FIFOs thats used int the driver.
37  * tx_fifo_len: This too is an array of 8. Each element defines the number of
38  * Tx descriptors that can be associated with each corresponding FIFO.
39  * intr_type: This defines the type of interrupt. The values can be 0(INTA),
40  *     2(MSI_X). Default value is '2(MSI_X)'
41  * lro_max_pkts: This parameter defines maximum number of packets can be
42  *     aggregated as a single large packet
43  * napi: This parameter used to enable/disable NAPI (polling Rx)
44  *     Possible values '1' for enable and '0' for disable. Default is '1'
45  * vlan_tag_strip: This can be used to enable or disable vlan stripping.
46  *                 Possible values '1' for enable , '0' for disable.
47  *                 Default is '2' - which means disable in promisc mode
48  *                 and enable in non-promiscuous mode.
49  * multiq: This parameter used to enable/disable MULTIQUEUE support.
50  *      Possible values '1' for enable and '0' for disable. Default is '0'
51  ************************************************************************/
52
53 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
54
55 #include <linux/module.h>
56 #include <linux/types.h>
57 #include <linux/errno.h>
58 #include <linux/ioport.h>
59 #include <linux/pci.h>
60 #include <linux/dma-mapping.h>
61 #include <linux/kernel.h>
62 #include <linux/netdevice.h>
63 #include <linux/etherdevice.h>
64 #include <linux/mdio.h>
65 #include <linux/skbuff.h>
66 #include <linux/init.h>
67 #include <linux/delay.h>
68 #include <linux/stddef.h>
69 #include <linux/ioctl.h>
70 #include <linux/timex.h>
71 #include <linux/ethtool.h>
72 #include <linux/workqueue.h>
73 #include <linux/if_vlan.h>
74 #include <linux/ip.h>
75 #include <linux/tcp.h>
76 #include <linux/uaccess.h>
77 #include <linux/io.h>
78 #include <linux/io-64-nonatomic-lo-hi.h>
79 #include <linux/slab.h>
80 #include <linux/prefetch.h>
81 #include <net/tcp.h>
82 #include <net/checksum.h>
83
84 #include <asm/div64.h>
85 #include <asm/irq.h>
86
87 /* local include */
88 #include "s2io.h"
89 #include "s2io-regs.h"
90
91 #define DRV_VERSION "2.0.26.28"
92
93 /* S2io Driver name & version. */
94 static const char s2io_driver_name[] = "Neterion";
95 static const char s2io_driver_version[] = DRV_VERSION;
96
97 static const int rxd_size[2] = {32, 48};
98 static const int rxd_count[2] = {127, 85};
99
100 static inline int RXD_IS_UP2DT(struct RxD_t *rxdp)
101 {
102         int ret;
103
104         ret = ((!(rxdp->Control_1 & RXD_OWN_XENA)) &&
105                (GET_RXD_MARKER(rxdp->Control_2) != THE_RXD_MARK));
106
107         return ret;
108 }
109
110 /*
111  * Cards with following subsystem_id have a link state indication
112  * problem, 600B, 600C, 600D, 640B, 640C and 640D.
113  * macro below identifies these cards given the subsystem_id.
114  */
115 #define CARDS_WITH_FAULTY_LINK_INDICATORS(dev_type, subid)              \
116         (dev_type == XFRAME_I_DEVICE) ?                                 \
117         ((((subid >= 0x600B) && (subid <= 0x600D)) ||                   \
118           ((subid >= 0x640B) && (subid <= 0x640D))) ? 1 : 0) : 0
119
120 #define LINK_IS_UP(val64) (!(val64 & (ADAPTER_STATUS_RMAC_REMOTE_FAULT | \
121                                       ADAPTER_STATUS_RMAC_LOCAL_FAULT)))
122
123 static inline int is_s2io_card_up(const struct s2io_nic *sp)
124 {
125         return test_bit(__S2IO_STATE_CARD_UP, &sp->state);
126 }
127
128 /* Ethtool related variables and Macros. */
129 static const char s2io_gstrings[][ETH_GSTRING_LEN] = {
130         "Register test\t(offline)",
131         "Eeprom test\t(offline)",
132         "Link test\t(online)",
133         "RLDRAM test\t(offline)",
134         "BIST Test\t(offline)"
135 };
136
137 static const char ethtool_xena_stats_keys[][ETH_GSTRING_LEN] = {
138         {"tmac_frms"},
139         {"tmac_data_octets"},
140         {"tmac_drop_frms"},
141         {"tmac_mcst_frms"},
142         {"tmac_bcst_frms"},
143         {"tmac_pause_ctrl_frms"},
144         {"tmac_ttl_octets"},
145         {"tmac_ucst_frms"},
146         {"tmac_nucst_frms"},
147         {"tmac_any_err_frms"},
148         {"tmac_ttl_less_fb_octets"},
149         {"tmac_vld_ip_octets"},
150         {"tmac_vld_ip"},
151         {"tmac_drop_ip"},
152         {"tmac_icmp"},
153         {"tmac_rst_tcp"},
154         {"tmac_tcp"},
155         {"tmac_udp"},
156         {"rmac_vld_frms"},
157         {"rmac_data_octets"},
158         {"rmac_fcs_err_frms"},
159         {"rmac_drop_frms"},
160         {"rmac_vld_mcst_frms"},
161         {"rmac_vld_bcst_frms"},
162         {"rmac_in_rng_len_err_frms"},
163         {"rmac_out_rng_len_err_frms"},
164         {"rmac_long_frms"},
165         {"rmac_pause_ctrl_frms"},
166         {"rmac_unsup_ctrl_frms"},
167         {"rmac_ttl_octets"},
168         {"rmac_accepted_ucst_frms"},
169         {"rmac_accepted_nucst_frms"},
170         {"rmac_discarded_frms"},
171         {"rmac_drop_events"},
172         {"rmac_ttl_less_fb_octets"},
173         {"rmac_ttl_frms"},
174         {"rmac_usized_frms"},
175         {"rmac_osized_frms"},
176         {"rmac_frag_frms"},
177         {"rmac_jabber_frms"},
178         {"rmac_ttl_64_frms"},
179         {"rmac_ttl_65_127_frms"},
180         {"rmac_ttl_128_255_frms"},
181         {"rmac_ttl_256_511_frms"},
182         {"rmac_ttl_512_1023_frms"},
183         {"rmac_ttl_1024_1518_frms"},
184         {"rmac_ip"},
185         {"rmac_ip_octets"},
186         {"rmac_hdr_err_ip"},
187         {"rmac_drop_ip"},
188         {"rmac_icmp"},
189         {"rmac_tcp"},
190         {"rmac_udp"},
191         {"rmac_err_drp_udp"},
192         {"rmac_xgmii_err_sym"},
193         {"rmac_frms_q0"},
194         {"rmac_frms_q1"},
195         {"rmac_frms_q2"},
196         {"rmac_frms_q3"},
197         {"rmac_frms_q4"},
198         {"rmac_frms_q5"},
199         {"rmac_frms_q6"},
200         {"rmac_frms_q7"},
201         {"rmac_full_q0"},
202         {"rmac_full_q1"},
203         {"rmac_full_q2"},
204         {"rmac_full_q3"},
205         {"rmac_full_q4"},
206         {"rmac_full_q5"},
207         {"rmac_full_q6"},
208         {"rmac_full_q7"},
209         {"rmac_pause_cnt"},
210         {"rmac_xgmii_data_err_cnt"},
211         {"rmac_xgmii_ctrl_err_cnt"},
212         {"rmac_accepted_ip"},
213         {"rmac_err_tcp"},
214         {"rd_req_cnt"},
215         {"new_rd_req_cnt"},
216         {"new_rd_req_rtry_cnt"},
217         {"rd_rtry_cnt"},
218         {"wr_rtry_rd_ack_cnt"},
219         {"wr_req_cnt"},
220         {"new_wr_req_cnt"},
221         {"new_wr_req_rtry_cnt"},
222         {"wr_rtry_cnt"},
223         {"wr_disc_cnt"},
224         {"rd_rtry_wr_ack_cnt"},
225         {"txp_wr_cnt"},
226         {"txd_rd_cnt"},
227         {"txd_wr_cnt"},
228         {"rxd_rd_cnt"},
229         {"rxd_wr_cnt"},
230         {"txf_rd_cnt"},
231         {"rxf_wr_cnt"}
232 };
233
234 static const char ethtool_enhanced_stats_keys[][ETH_GSTRING_LEN] = {
235         {"rmac_ttl_1519_4095_frms"},
236         {"rmac_ttl_4096_8191_frms"},
237         {"rmac_ttl_8192_max_frms"},
238         {"rmac_ttl_gt_max_frms"},
239         {"rmac_osized_alt_frms"},
240         {"rmac_jabber_alt_frms"},
241         {"rmac_gt_max_alt_frms"},
242         {"rmac_vlan_frms"},
243         {"rmac_len_discard"},
244         {"rmac_fcs_discard"},
245         {"rmac_pf_discard"},
246         {"rmac_da_discard"},
247         {"rmac_red_discard"},
248         {"rmac_rts_discard"},
249         {"rmac_ingm_full_discard"},
250         {"link_fault_cnt"}
251 };
252
253 static const char ethtool_driver_stats_keys[][ETH_GSTRING_LEN] = {
254         {"\n DRIVER STATISTICS"},
255         {"single_bit_ecc_errs"},
256         {"double_bit_ecc_errs"},
257         {"parity_err_cnt"},
258         {"serious_err_cnt"},
259         {"soft_reset_cnt"},
260         {"fifo_full_cnt"},
261         {"ring_0_full_cnt"},
262         {"ring_1_full_cnt"},
263         {"ring_2_full_cnt"},
264         {"ring_3_full_cnt"},
265         {"ring_4_full_cnt"},
266         {"ring_5_full_cnt"},
267         {"ring_6_full_cnt"},
268         {"ring_7_full_cnt"},
269         {"alarm_transceiver_temp_high"},
270         {"alarm_transceiver_temp_low"},
271         {"alarm_laser_bias_current_high"},
272         {"alarm_laser_bias_current_low"},
273         {"alarm_laser_output_power_high"},
274         {"alarm_laser_output_power_low"},
275         {"warn_transceiver_temp_high"},
276         {"warn_transceiver_temp_low"},
277         {"warn_laser_bias_current_high"},
278         {"warn_laser_bias_current_low"},
279         {"warn_laser_output_power_high"},
280         {"warn_laser_output_power_low"},
281         {"lro_aggregated_pkts"},
282         {"lro_flush_both_count"},
283         {"lro_out_of_sequence_pkts"},
284         {"lro_flush_due_to_max_pkts"},
285         {"lro_avg_aggr_pkts"},
286         {"mem_alloc_fail_cnt"},
287         {"pci_map_fail_cnt"},
288         {"watchdog_timer_cnt"},
289         {"mem_allocated"},
290         {"mem_freed"},
291         {"link_up_cnt"},
292         {"link_down_cnt"},
293         {"link_up_time"},
294         {"link_down_time"},
295         {"tx_tcode_buf_abort_cnt"},
296         {"tx_tcode_desc_abort_cnt"},
297         {"tx_tcode_parity_err_cnt"},
298         {"tx_tcode_link_loss_cnt"},
299         {"tx_tcode_list_proc_err_cnt"},
300         {"rx_tcode_parity_err_cnt"},
301         {"rx_tcode_abort_cnt"},
302         {"rx_tcode_parity_abort_cnt"},
303         {"rx_tcode_rda_fail_cnt"},
304         {"rx_tcode_unkn_prot_cnt"},
305         {"rx_tcode_fcs_err_cnt"},
306         {"rx_tcode_buf_size_err_cnt"},
307         {"rx_tcode_rxd_corrupt_cnt"},
308         {"rx_tcode_unkn_err_cnt"},
309         {"tda_err_cnt"},
310         {"pfc_err_cnt"},
311         {"pcc_err_cnt"},
312         {"tti_err_cnt"},
313         {"tpa_err_cnt"},
314         {"sm_err_cnt"},
315         {"lso_err_cnt"},
316         {"mac_tmac_err_cnt"},
317         {"mac_rmac_err_cnt"},
318         {"xgxs_txgxs_err_cnt"},
319         {"xgxs_rxgxs_err_cnt"},
320         {"rc_err_cnt"},
321         {"prc_pcix_err_cnt"},
322         {"rpa_err_cnt"},
323         {"rda_err_cnt"},
324         {"rti_err_cnt"},
325         {"mc_err_cnt"}
326 };
327
328 #define S2IO_XENA_STAT_LEN      ARRAY_SIZE(ethtool_xena_stats_keys)
329 #define S2IO_ENHANCED_STAT_LEN  ARRAY_SIZE(ethtool_enhanced_stats_keys)
330 #define S2IO_DRIVER_STAT_LEN    ARRAY_SIZE(ethtool_driver_stats_keys)
331
332 #define XFRAME_I_STAT_LEN (S2IO_XENA_STAT_LEN + S2IO_DRIVER_STAT_LEN)
333 #define XFRAME_II_STAT_LEN (XFRAME_I_STAT_LEN + S2IO_ENHANCED_STAT_LEN)
334
335 #define XFRAME_I_STAT_STRINGS_LEN (XFRAME_I_STAT_LEN * ETH_GSTRING_LEN)
336 #define XFRAME_II_STAT_STRINGS_LEN (XFRAME_II_STAT_LEN * ETH_GSTRING_LEN)
337
338 #define S2IO_TEST_LEN   ARRAY_SIZE(s2io_gstrings)
339 #define S2IO_STRINGS_LEN        (S2IO_TEST_LEN * ETH_GSTRING_LEN)
340
341 /* copy mac addr to def_mac_addr array */
342 static void do_s2io_copy_mac_addr(struct s2io_nic *sp, int offset, u64 mac_addr)
343 {
344         sp->def_mac_addr[offset].mac_addr[5] = (u8) (mac_addr);
345         sp->def_mac_addr[offset].mac_addr[4] = (u8) (mac_addr >> 8);
346         sp->def_mac_addr[offset].mac_addr[3] = (u8) (mac_addr >> 16);
347         sp->def_mac_addr[offset].mac_addr[2] = (u8) (mac_addr >> 24);
348         sp->def_mac_addr[offset].mac_addr[1] = (u8) (mac_addr >> 32);
349         sp->def_mac_addr[offset].mac_addr[0] = (u8) (mac_addr >> 40);
350 }
351
352 /*
353  * Constants to be programmed into the Xena's registers, to configure
354  * the XAUI.
355  */
356
357 #define END_SIGN        0x0
358 static const u64 herc_act_dtx_cfg[] = {
359         /* Set address */
360         0x8000051536750000ULL, 0x80000515367500E0ULL,
361         /* Write data */
362         0x8000051536750004ULL, 0x80000515367500E4ULL,
363         /* Set address */
364         0x80010515003F0000ULL, 0x80010515003F00E0ULL,
365         /* Write data */
366         0x80010515003F0004ULL, 0x80010515003F00E4ULL,
367         /* Set address */
368         0x801205150D440000ULL, 0x801205150D4400E0ULL,
369         /* Write data */
370         0x801205150D440004ULL, 0x801205150D4400E4ULL,
371         /* Set address */
372         0x80020515F2100000ULL, 0x80020515F21000E0ULL,
373         /* Write data */
374         0x80020515F2100004ULL, 0x80020515F21000E4ULL,
375         /* Done */
376         END_SIGN
377 };
378
379 static const u64 xena_dtx_cfg[] = {
380         /* Set address */
381         0x8000051500000000ULL, 0x80000515000000E0ULL,
382         /* Write data */
383         0x80000515D9350004ULL, 0x80000515D93500E4ULL,
384         /* Set address */
385         0x8001051500000000ULL, 0x80010515000000E0ULL,
386         /* Write data */
387         0x80010515001E0004ULL, 0x80010515001E00E4ULL,
388         /* Set address */
389         0x8002051500000000ULL, 0x80020515000000E0ULL,
390         /* Write data */
391         0x80020515F2100004ULL, 0x80020515F21000E4ULL,
392         END_SIGN
393 };
394
395 /*
396  * Constants for Fixing the MacAddress problem seen mostly on
397  * Alpha machines.
398  */
399 static const u64 fix_mac[] = {
400         0x0060000000000000ULL, 0x0060600000000000ULL,
401         0x0040600000000000ULL, 0x0000600000000000ULL,
402         0x0020600000000000ULL, 0x0060600000000000ULL,
403         0x0020600000000000ULL, 0x0060600000000000ULL,
404         0x0020600000000000ULL, 0x0060600000000000ULL,
405         0x0020600000000000ULL, 0x0060600000000000ULL,
406         0x0020600000000000ULL, 0x0060600000000000ULL,
407         0x0020600000000000ULL, 0x0060600000000000ULL,
408         0x0020600000000000ULL, 0x0060600000000000ULL,
409         0x0020600000000000ULL, 0x0060600000000000ULL,
410         0x0020600000000000ULL, 0x0060600000000000ULL,
411         0x0020600000000000ULL, 0x0060600000000000ULL,
412         0x0020600000000000ULL, 0x0000600000000000ULL,
413         0x0040600000000000ULL, 0x0060600000000000ULL,
414         END_SIGN
415 };
416
417 MODULE_LICENSE("GPL");
418 MODULE_VERSION(DRV_VERSION);
419
420
421 /* Module Loadable parameters. */
422 S2IO_PARM_INT(tx_fifo_num, FIFO_DEFAULT_NUM);
423 S2IO_PARM_INT(rx_ring_num, 1);
424 S2IO_PARM_INT(multiq, 0);
425 S2IO_PARM_INT(rx_ring_mode, 1);
426 S2IO_PARM_INT(use_continuous_tx_intrs, 1);
427 S2IO_PARM_INT(rmac_pause_time, 0x100);
428 S2IO_PARM_INT(mc_pause_threshold_q0q3, 187);
429 S2IO_PARM_INT(mc_pause_threshold_q4q7, 187);
430 S2IO_PARM_INT(shared_splits, 0);
431 S2IO_PARM_INT(tmac_util_period, 5);
432 S2IO_PARM_INT(rmac_util_period, 5);
433 S2IO_PARM_INT(l3l4hdr_size, 128);
434 /* 0 is no steering, 1 is Priority steering, 2 is Default steering */
435 S2IO_PARM_INT(tx_steering_type, TX_DEFAULT_STEERING);
436 /* Frequency of Rx desc syncs expressed as power of 2 */
437 S2IO_PARM_INT(rxsync_frequency, 3);
438 /* Interrupt type. Values can be 0(INTA), 2(MSI_X) */
439 S2IO_PARM_INT(intr_type, 2);
440 /* Large receive offload feature */
441
442 /* Max pkts to be aggregated by LRO at one time. If not specified,
443  * aggregation happens until we hit max IP pkt size(64K)
444  */
445 S2IO_PARM_INT(lro_max_pkts, 0xFFFF);
446 S2IO_PARM_INT(indicate_max_pkts, 0);
447
448 S2IO_PARM_INT(napi, 1);
449 S2IO_PARM_INT(vlan_tag_strip, NO_STRIP_IN_PROMISC);
450
451 static unsigned int tx_fifo_len[MAX_TX_FIFOS] =
452 {DEFAULT_FIFO_0_LEN, [1 ...(MAX_TX_FIFOS - 1)] = DEFAULT_FIFO_1_7_LEN};
453 static unsigned int rx_ring_sz[MAX_RX_RINGS] =
454 {[0 ...(MAX_RX_RINGS - 1)] = SMALL_BLK_CNT};
455 static unsigned int rts_frm_len[MAX_RX_RINGS] =
456 {[0 ...(MAX_RX_RINGS - 1)] = 0 };
457
458 module_param_array(tx_fifo_len, uint, NULL, 0);
459 module_param_array(rx_ring_sz, uint, NULL, 0);
460 module_param_array(rts_frm_len, uint, NULL, 0);
461
462 /*
463  * S2IO device table.
464  * This table lists all the devices that this driver supports.
465  */
466 static const struct pci_device_id s2io_tbl[] = {
467         {PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_S2IO_WIN,
468          PCI_ANY_ID, PCI_ANY_ID},
469         {PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_S2IO_UNI,
470          PCI_ANY_ID, PCI_ANY_ID},
471         {PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_HERC_WIN,
472          PCI_ANY_ID, PCI_ANY_ID},
473         {PCI_VENDOR_ID_S2IO, PCI_DEVICE_ID_HERC_UNI,
474          PCI_ANY_ID, PCI_ANY_ID},
475         {0,}
476 };
477
478 MODULE_DEVICE_TABLE(pci, s2io_tbl);
479
480 static const struct pci_error_handlers s2io_err_handler = {
481         .error_detected = s2io_io_error_detected,
482         .slot_reset = s2io_io_slot_reset,
483         .resume = s2io_io_resume,
484 };
485
486 static struct pci_driver s2io_driver = {
487         .name = "S2IO",
488         .id_table = s2io_tbl,
489         .probe = s2io_init_nic,
490         .remove = s2io_rem_nic,
491         .err_handler = &s2io_err_handler,
492 };
493
494 /* A simplifier macro used both by init and free shared_mem Fns(). */
495 #define TXD_MEM_PAGE_CNT(len, per_each) DIV_ROUND_UP(len, per_each)
496
497 /* netqueue manipulation helper functions */
498 static inline void s2io_stop_all_tx_queue(struct s2io_nic *sp)
499 {
500         if (!sp->config.multiq) {
501                 int i;
502
503                 for (i = 0; i < sp->config.tx_fifo_num; i++)
504                         sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_STOP;
505         }
506         netif_tx_stop_all_queues(sp->dev);
507 }
508
509 static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no)
510 {
511         if (!sp->config.multiq)
512                 sp->mac_control.fifos[fifo_no].queue_state =
513                         FIFO_QUEUE_STOP;
514
515         netif_tx_stop_all_queues(sp->dev);
516 }
517
518 static inline void s2io_start_all_tx_queue(struct s2io_nic *sp)
519 {
520         if (!sp->config.multiq) {
521                 int i;
522
523                 for (i = 0; i < sp->config.tx_fifo_num; i++)
524                         sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
525         }
526         netif_tx_start_all_queues(sp->dev);
527 }
528
529 static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp)
530 {
531         if (!sp->config.multiq) {
532                 int i;
533
534                 for (i = 0; i < sp->config.tx_fifo_num; i++)
535                         sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
536         }
537         netif_tx_wake_all_queues(sp->dev);
538 }
539
540 static inline void s2io_wake_tx_queue(
541         struct fifo_info *fifo, int cnt, u8 multiq)
542 {
543
544         if (multiq) {
545                 if (cnt && __netif_subqueue_stopped(fifo->dev, fifo->fifo_no))
546                         netif_wake_subqueue(fifo->dev, fifo->fifo_no);
547         } else if (cnt && (fifo->queue_state == FIFO_QUEUE_STOP)) {
548                 if (netif_queue_stopped(fifo->dev)) {
549                         fifo->queue_state = FIFO_QUEUE_START;
550                         netif_wake_queue(fifo->dev);
551                 }
552         }
553 }
554
555 /**
556  * init_shared_mem - Allocation and Initialization of Memory
557  * @nic: Device private variable.
558  * Description: The function allocates all the memory areas shared
559  * between the NIC and the driver. This includes Tx descriptors,
560  * Rx descriptors and the statistics block.
561  */
562
563 static int init_shared_mem(struct s2io_nic *nic)
564 {
565         u32 size;
566         void *tmp_v_addr, *tmp_v_addr_next;
567         dma_addr_t tmp_p_addr, tmp_p_addr_next;
568         struct RxD_block *pre_rxd_blk = NULL;
569         int i, j, blk_cnt;
570         int lst_size, lst_per_page;
571         struct net_device *dev = nic->dev;
572         unsigned long tmp;
573         struct buffAdd *ba;
574         struct config_param *config = &nic->config;
575         struct mac_info *mac_control = &nic->mac_control;
576         unsigned long long mem_allocated = 0;
577
578         /* Allocation and initialization of TXDLs in FIFOs */
579         size = 0;
580         for (i = 0; i < config->tx_fifo_num; i++) {
581                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
582
583                 size += tx_cfg->fifo_len;
584         }
585         if (size > MAX_AVAILABLE_TXDS) {
586                 DBG_PRINT(ERR_DBG,
587                           "Too many TxDs requested: %d, max supported: %d\n",
588                           size, MAX_AVAILABLE_TXDS);
589                 return -EINVAL;
590         }
591
592         size = 0;
593         for (i = 0; i < config->tx_fifo_num; i++) {
594                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
595
596                 size = tx_cfg->fifo_len;
597                 /*
598                  * Legal values are from 2 to 8192
599                  */
600                 if (size < 2) {
601                         DBG_PRINT(ERR_DBG, "Fifo %d: Invalid length (%d) - "
602                                   "Valid lengths are 2 through 8192\n",
603                                   i, size);
604                         return -EINVAL;
605                 }
606         }
607
608         lst_size = (sizeof(struct TxD) * config->max_txds);
609         lst_per_page = PAGE_SIZE / lst_size;
610
611         for (i = 0; i < config->tx_fifo_num; i++) {
612                 struct fifo_info *fifo = &mac_control->fifos[i];
613                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
614                 int fifo_len = tx_cfg->fifo_len;
615                 int list_holder_size = fifo_len * sizeof(struct list_info_hold);
616
617                 fifo->list_info = kzalloc(list_holder_size, GFP_KERNEL);
618                 if (!fifo->list_info) {
619                         DBG_PRINT(INFO_DBG, "Malloc failed for list_info\n");
620                         return -ENOMEM;
621                 }
622                 mem_allocated += list_holder_size;
623         }
624         for (i = 0; i < config->tx_fifo_num; i++) {
625                 int page_num = TXD_MEM_PAGE_CNT(config->tx_cfg[i].fifo_len,
626                                                 lst_per_page);
627                 struct fifo_info *fifo = &mac_control->fifos[i];
628                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
629
630                 fifo->tx_curr_put_info.offset = 0;
631                 fifo->tx_curr_put_info.fifo_len = tx_cfg->fifo_len - 1;
632                 fifo->tx_curr_get_info.offset = 0;
633                 fifo->tx_curr_get_info.fifo_len = tx_cfg->fifo_len - 1;
634                 fifo->fifo_no = i;
635                 fifo->nic = nic;
636                 fifo->max_txds = MAX_SKB_FRAGS + 2;
637                 fifo->dev = dev;
638
639                 for (j = 0; j < page_num; j++) {
640                         int k = 0;
641                         dma_addr_t tmp_p;
642                         void *tmp_v;
643                         tmp_v = dma_alloc_coherent(&nic->pdev->dev, PAGE_SIZE,
644                                                    &tmp_p, GFP_KERNEL);
645                         if (!tmp_v) {
646                                 DBG_PRINT(INFO_DBG,
647                                           "dma_alloc_coherent failed for TxDL\n");
648                                 return -ENOMEM;
649                         }
650                         /* If we got a zero DMA address(can happen on
651                          * certain platforms like PPC), reallocate.
652                          * Store virtual address of page we don't want,
653                          * to be freed later.
654                          */
655                         if (!tmp_p) {
656                                 mac_control->zerodma_virt_addr = tmp_v;
657                                 DBG_PRINT(INIT_DBG,
658                                           "%s: Zero DMA address for TxDL. "
659                                           "Virtual address %p\n",
660                                           dev->name, tmp_v);
661                                 tmp_v = dma_alloc_coherent(&nic->pdev->dev,
662                                                            PAGE_SIZE, &tmp_p,
663                                                            GFP_KERNEL);
664                                 if (!tmp_v) {
665                                         DBG_PRINT(INFO_DBG,
666                                                   "dma_alloc_coherent failed for TxDL\n");
667                                         return -ENOMEM;
668                                 }
669                                 mem_allocated += PAGE_SIZE;
670                         }
671                         while (k < lst_per_page) {
672                                 int l = (j * lst_per_page) + k;
673                                 if (l == tx_cfg->fifo_len)
674                                         break;
675                                 fifo->list_info[l].list_virt_addr =
676                                         tmp_v + (k * lst_size);
677                                 fifo->list_info[l].list_phy_addr =
678                                         tmp_p + (k * lst_size);
679                                 k++;
680                         }
681                 }
682         }
683
684         for (i = 0; i < config->tx_fifo_num; i++) {
685                 struct fifo_info *fifo = &mac_control->fifos[i];
686                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
687
688                 size = tx_cfg->fifo_len;
689                 fifo->ufo_in_band_v = kcalloc(size, sizeof(u64), GFP_KERNEL);
690                 if (!fifo->ufo_in_band_v)
691                         return -ENOMEM;
692                 mem_allocated += (size * sizeof(u64));
693         }
694
695         /* Allocation and initialization of RXDs in Rings */
696         size = 0;
697         for (i = 0; i < config->rx_ring_num; i++) {
698                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
699                 struct ring_info *ring = &mac_control->rings[i];
700
701                 if (rx_cfg->num_rxd % (rxd_count[nic->rxd_mode] + 1)) {
702                         DBG_PRINT(ERR_DBG, "%s: Ring%d RxD count is not a "
703                                   "multiple of RxDs per Block\n",
704                                   dev->name, i);
705                         return FAILURE;
706                 }
707                 size += rx_cfg->num_rxd;
708                 ring->block_count = rx_cfg->num_rxd /
709                         (rxd_count[nic->rxd_mode] + 1);
710                 ring->pkt_cnt = rx_cfg->num_rxd - ring->block_count;
711         }
712         if (nic->rxd_mode == RXD_MODE_1)
713                 size = (size * (sizeof(struct RxD1)));
714         else
715                 size = (size * (sizeof(struct RxD3)));
716
717         for (i = 0; i < config->rx_ring_num; i++) {
718                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
719                 struct ring_info *ring = &mac_control->rings[i];
720
721                 ring->rx_curr_get_info.block_index = 0;
722                 ring->rx_curr_get_info.offset = 0;
723                 ring->rx_curr_get_info.ring_len = rx_cfg->num_rxd - 1;
724                 ring->rx_curr_put_info.block_index = 0;
725                 ring->rx_curr_put_info.offset = 0;
726                 ring->rx_curr_put_info.ring_len = rx_cfg->num_rxd - 1;
727                 ring->nic = nic;
728                 ring->ring_no = i;
729
730                 blk_cnt = rx_cfg->num_rxd / (rxd_count[nic->rxd_mode] + 1);
731                 /*  Allocating all the Rx blocks */
732                 for (j = 0; j < blk_cnt; j++) {
733                         struct rx_block_info *rx_blocks;
734                         int l;
735
736                         rx_blocks = &ring->rx_blocks[j];
737                         size = SIZE_OF_BLOCK;   /* size is always page size */
738                         tmp_v_addr = dma_alloc_coherent(&nic->pdev->dev, size,
739                                                         &tmp_p_addr, GFP_KERNEL);
740                         if (tmp_v_addr == NULL) {
741                                 /*
742                                  * In case of failure, free_shared_mem()
743                                  * is called, which should free any
744                                  * memory that was alloced till the
745                                  * failure happened.
746                                  */
747                                 rx_blocks->block_virt_addr = tmp_v_addr;
748                                 return -ENOMEM;
749                         }
750                         mem_allocated += size;
751
752                         size = sizeof(struct rxd_info) *
753                                 rxd_count[nic->rxd_mode];
754                         rx_blocks->block_virt_addr = tmp_v_addr;
755                         rx_blocks->block_dma_addr = tmp_p_addr;
756                         rx_blocks->rxds = kmalloc(size,  GFP_KERNEL);
757                         if (!rx_blocks->rxds)
758                                 return -ENOMEM;
759                         mem_allocated += size;
760                         for (l = 0; l < rxd_count[nic->rxd_mode]; l++) {
761                                 rx_blocks->rxds[l].virt_addr =
762                                         rx_blocks->block_virt_addr +
763                                         (rxd_size[nic->rxd_mode] * l);
764                                 rx_blocks->rxds[l].dma_addr =
765                                         rx_blocks->block_dma_addr +
766                                         (rxd_size[nic->rxd_mode] * l);
767                         }
768                 }
769                 /* Interlinking all Rx Blocks */
770                 for (j = 0; j < blk_cnt; j++) {
771                         int next = (j + 1) % blk_cnt;
772                         tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
773                         tmp_v_addr_next = ring->rx_blocks[next].block_virt_addr;
774                         tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
775                         tmp_p_addr_next = ring->rx_blocks[next].block_dma_addr;
776
777                         pre_rxd_blk = tmp_v_addr;
778                         pre_rxd_blk->reserved_2_pNext_RxD_block =
779                                 (unsigned long)tmp_v_addr_next;
780                         pre_rxd_blk->pNext_RxD_Blk_physical =
781                                 (u64)tmp_p_addr_next;
782                 }
783         }
784         if (nic->rxd_mode == RXD_MODE_3B) {
785                 /*
786                  * Allocation of Storages for buffer addresses in 2BUFF mode
787                  * and the buffers as well.
788                  */
789                 for (i = 0; i < config->rx_ring_num; i++) {
790                         struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
791                         struct ring_info *ring = &mac_control->rings[i];
792
793                         blk_cnt = rx_cfg->num_rxd /
794                                 (rxd_count[nic->rxd_mode] + 1);
795                         size = sizeof(struct buffAdd *) * blk_cnt;
796                         ring->ba = kmalloc(size, GFP_KERNEL);
797                         if (!ring->ba)
798                                 return -ENOMEM;
799                         mem_allocated += size;
800                         for (j = 0; j < blk_cnt; j++) {
801                                 int k = 0;
802
803                                 size = sizeof(struct buffAdd) *
804                                         (rxd_count[nic->rxd_mode] + 1);
805                                 ring->ba[j] = kmalloc(size, GFP_KERNEL);
806                                 if (!ring->ba[j])
807                                         return -ENOMEM;
808                                 mem_allocated += size;
809                                 while (k != rxd_count[nic->rxd_mode]) {
810                                         ba = &ring->ba[j][k];
811                                         size = BUF0_LEN + ALIGN_SIZE;
812                                         ba->ba_0_org = kmalloc(size, GFP_KERNEL);
813                                         if (!ba->ba_0_org)
814                                                 return -ENOMEM;
815                                         mem_allocated += size;
816                                         tmp = (unsigned long)ba->ba_0_org;
817                                         tmp += ALIGN_SIZE;
818                                         tmp &= ~((unsigned long)ALIGN_SIZE);
819                                         ba->ba_0 = (void *)tmp;
820
821                                         size = BUF1_LEN + ALIGN_SIZE;
822                                         ba->ba_1_org = kmalloc(size, GFP_KERNEL);
823                                         if (!ba->ba_1_org)
824                                                 return -ENOMEM;
825                                         mem_allocated += size;
826                                         tmp = (unsigned long)ba->ba_1_org;
827                                         tmp += ALIGN_SIZE;
828                                         tmp &= ~((unsigned long)ALIGN_SIZE);
829                                         ba->ba_1 = (void *)tmp;
830                                         k++;
831                                 }
832                         }
833                 }
834         }
835
836         /* Allocation and initialization of Statistics block */
837         size = sizeof(struct stat_block);
838         mac_control->stats_mem =
839                 dma_alloc_coherent(&nic->pdev->dev, size,
840                                    &mac_control->stats_mem_phy, GFP_KERNEL);
841
842         if (!mac_control->stats_mem) {
843                 /*
844                  * In case of failure, free_shared_mem() is called, which
845                  * should free any memory that was alloced till the
846                  * failure happened.
847                  */
848                 return -ENOMEM;
849         }
850         mem_allocated += size;
851         mac_control->stats_mem_sz = size;
852
853         tmp_v_addr = mac_control->stats_mem;
854         mac_control->stats_info = tmp_v_addr;
855         memset(tmp_v_addr, 0, size);
856         DBG_PRINT(INIT_DBG, "%s: Ring Mem PHY: 0x%llx\n",
857                 dev_name(&nic->pdev->dev), (unsigned long long)tmp_p_addr);
858         mac_control->stats_info->sw_stat.mem_allocated += mem_allocated;
859         return SUCCESS;
860 }
861
862 /**
863  * free_shared_mem - Free the allocated Memory
864  * @nic:  Device private variable.
865  * Description: This function is to free all memory locations allocated by
866  * the init_shared_mem() function and return it to the kernel.
867  */
868
869 static void free_shared_mem(struct s2io_nic *nic)
870 {
871         int i, j, blk_cnt, size;
872         void *tmp_v_addr;
873         dma_addr_t tmp_p_addr;
874         int lst_size, lst_per_page;
875         struct net_device *dev;
876         int page_num = 0;
877         struct config_param *config;
878         struct mac_info *mac_control;
879         struct stat_block *stats;
880         struct swStat *swstats;
881
882         if (!nic)
883                 return;
884
885         dev = nic->dev;
886
887         config = &nic->config;
888         mac_control = &nic->mac_control;
889         stats = mac_control->stats_info;
890         swstats = &stats->sw_stat;
891
892         lst_size = sizeof(struct TxD) * config->max_txds;
893         lst_per_page = PAGE_SIZE / lst_size;
894
895         for (i = 0; i < config->tx_fifo_num; i++) {
896                 struct fifo_info *fifo = &mac_control->fifos[i];
897                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
898
899                 page_num = TXD_MEM_PAGE_CNT(tx_cfg->fifo_len, lst_per_page);
900                 for (j = 0; j < page_num; j++) {
901                         int mem_blks = (j * lst_per_page);
902                         struct list_info_hold *fli;
903
904                         if (!fifo->list_info)
905                                 return;
906
907                         fli = &fifo->list_info[mem_blks];
908                         if (!fli->list_virt_addr)
909                                 break;
910                         dma_free_coherent(&nic->pdev->dev, PAGE_SIZE,
911                                           fli->list_virt_addr,
912                                           fli->list_phy_addr);
913                         swstats->mem_freed += PAGE_SIZE;
914                 }
915                 /* If we got a zero DMA address during allocation,
916                  * free the page now
917                  */
918                 if (mac_control->zerodma_virt_addr) {
919                         dma_free_coherent(&nic->pdev->dev, PAGE_SIZE,
920                                           mac_control->zerodma_virt_addr,
921                                           (dma_addr_t)0);
922                         DBG_PRINT(INIT_DBG,
923                                   "%s: Freeing TxDL with zero DMA address. "
924                                   "Virtual address %p\n",
925                                   dev->name, mac_control->zerodma_virt_addr);
926                         swstats->mem_freed += PAGE_SIZE;
927                 }
928                 kfree(fifo->list_info);
929                 swstats->mem_freed += tx_cfg->fifo_len *
930                         sizeof(struct list_info_hold);
931         }
932
933         size = SIZE_OF_BLOCK;
934         for (i = 0; i < config->rx_ring_num; i++) {
935                 struct ring_info *ring = &mac_control->rings[i];
936
937                 blk_cnt = ring->block_count;
938                 for (j = 0; j < blk_cnt; j++) {
939                         tmp_v_addr = ring->rx_blocks[j].block_virt_addr;
940                         tmp_p_addr = ring->rx_blocks[j].block_dma_addr;
941                         if (tmp_v_addr == NULL)
942                                 break;
943                         dma_free_coherent(&nic->pdev->dev, size, tmp_v_addr,
944                                           tmp_p_addr);
945                         swstats->mem_freed += size;
946                         kfree(ring->rx_blocks[j].rxds);
947                         swstats->mem_freed += sizeof(struct rxd_info) *
948                                 rxd_count[nic->rxd_mode];
949                 }
950         }
951
952         if (nic->rxd_mode == RXD_MODE_3B) {
953                 /* Freeing buffer storage addresses in 2BUFF mode. */
954                 for (i = 0; i < config->rx_ring_num; i++) {
955                         struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
956                         struct ring_info *ring = &mac_control->rings[i];
957
958                         blk_cnt = rx_cfg->num_rxd /
959                                 (rxd_count[nic->rxd_mode] + 1);
960                         for (j = 0; j < blk_cnt; j++) {
961                                 int k = 0;
962                                 if (!ring->ba[j])
963                                         continue;
964                                 while (k != rxd_count[nic->rxd_mode]) {
965                                         struct buffAdd *ba = &ring->ba[j][k];
966                                         kfree(ba->ba_0_org);
967                                         swstats->mem_freed +=
968                                                 BUF0_LEN + ALIGN_SIZE;
969                                         kfree(ba->ba_1_org);
970                                         swstats->mem_freed +=
971                                                 BUF1_LEN + ALIGN_SIZE;
972                                         k++;
973                                 }
974                                 kfree(ring->ba[j]);
975                                 swstats->mem_freed += sizeof(struct buffAdd) *
976                                         (rxd_count[nic->rxd_mode] + 1);
977                         }
978                         kfree(ring->ba);
979                         swstats->mem_freed += sizeof(struct buffAdd *) *
980                                 blk_cnt;
981                 }
982         }
983
984         for (i = 0; i < nic->config.tx_fifo_num; i++) {
985                 struct fifo_info *fifo = &mac_control->fifos[i];
986                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
987
988                 if (fifo->ufo_in_band_v) {
989                         swstats->mem_freed += tx_cfg->fifo_len *
990                                 sizeof(u64);
991                         kfree(fifo->ufo_in_band_v);
992                 }
993         }
994
995         if (mac_control->stats_mem) {
996                 swstats->mem_freed += mac_control->stats_mem_sz;
997                 dma_free_coherent(&nic->pdev->dev, mac_control->stats_mem_sz,
998                                   mac_control->stats_mem,
999                                   mac_control->stats_mem_phy);
1000         }
1001 }
1002
1003 /*
1004  * s2io_verify_pci_mode -
1005  */
1006
1007 static int s2io_verify_pci_mode(struct s2io_nic *nic)
1008 {
1009         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1010         register u64 val64 = 0;
1011         int     mode;
1012
1013         val64 = readq(&bar0->pci_mode);
1014         mode = (u8)GET_PCI_MODE(val64);
1015
1016         if (val64 & PCI_MODE_UNKNOWN_MODE)
1017                 return -1;      /* Unknown PCI mode */
1018         return mode;
1019 }
1020
1021 #define NEC_VENID   0x1033
1022 #define NEC_DEVID   0x0125
1023 static int s2io_on_nec_bridge(struct pci_dev *s2io_pdev)
1024 {
1025         struct pci_dev *tdev = NULL;
1026         for_each_pci_dev(tdev) {
1027                 if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) {
1028                         if (tdev->bus == s2io_pdev->bus->parent) {
1029                                 pci_dev_put(tdev);
1030                                 return 1;
1031                         }
1032                 }
1033         }
1034         return 0;
1035 }
1036
1037 static int bus_speed[8] = {33, 133, 133, 200, 266, 133, 200, 266};
1038 /*
1039  * s2io_print_pci_mode -
1040  */
1041 static int s2io_print_pci_mode(struct s2io_nic *nic)
1042 {
1043         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1044         register u64 val64 = 0;
1045         int     mode;
1046         struct config_param *config = &nic->config;
1047         const char *pcimode;
1048
1049         val64 = readq(&bar0->pci_mode);
1050         mode = (u8)GET_PCI_MODE(val64);
1051
1052         if (val64 & PCI_MODE_UNKNOWN_MODE)
1053                 return -1;      /* Unknown PCI mode */
1054
1055         config->bus_speed = bus_speed[mode];
1056
1057         if (s2io_on_nec_bridge(nic->pdev)) {
1058                 DBG_PRINT(ERR_DBG, "%s: Device is on PCI-E bus\n",
1059                           nic->dev->name);
1060                 return mode;
1061         }
1062
1063         switch (mode) {
1064         case PCI_MODE_PCI_33:
1065                 pcimode = "33MHz PCI bus";
1066                 break;
1067         case PCI_MODE_PCI_66:
1068                 pcimode = "66MHz PCI bus";
1069                 break;
1070         case PCI_MODE_PCIX_M1_66:
1071                 pcimode = "66MHz PCIX(M1) bus";
1072                 break;
1073         case PCI_MODE_PCIX_M1_100:
1074                 pcimode = "100MHz PCIX(M1) bus";
1075                 break;
1076         case PCI_MODE_PCIX_M1_133:
1077                 pcimode = "133MHz PCIX(M1) bus";
1078                 break;
1079         case PCI_MODE_PCIX_M2_66:
1080                 pcimode = "133MHz PCIX(M2) bus";
1081                 break;
1082         case PCI_MODE_PCIX_M2_100:
1083                 pcimode = "200MHz PCIX(M2) bus";
1084                 break;
1085         case PCI_MODE_PCIX_M2_133:
1086                 pcimode = "266MHz PCIX(M2) bus";
1087                 break;
1088         default:
1089                 pcimode = "unsupported bus!";
1090                 mode = -1;
1091         }
1092
1093         DBG_PRINT(ERR_DBG, "%s: Device is on %d bit %s\n",
1094                   nic->dev->name, val64 & PCI_MODE_32_BITS ? 32 : 64, pcimode);
1095
1096         return mode;
1097 }
1098
1099 /**
1100  *  init_tti - Initialization transmit traffic interrupt scheme
1101  *  @nic: device private variable
1102  *  @link: link status (UP/DOWN) used to enable/disable continuous
1103  *  transmit interrupts
1104  *  Description: The function configures transmit traffic interrupts
1105  *  Return Value:  SUCCESS on success and
1106  *  '-1' on failure
1107  */
1108
1109 static int init_tti(struct s2io_nic *nic, int link)
1110 {
1111         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1112         register u64 val64 = 0;
1113         int i;
1114         struct config_param *config = &nic->config;
1115
1116         for (i = 0; i < config->tx_fifo_num; i++) {
1117                 /*
1118                  * TTI Initialization. Default Tx timer gets us about
1119                  * 250 interrupts per sec. Continuous interrupts are enabled
1120                  * by default.
1121                  */
1122                 if (nic->device_type == XFRAME_II_DEVICE) {
1123                         int count = (nic->config.bus_speed * 125)/2;
1124                         val64 = TTI_DATA1_MEM_TX_TIMER_VAL(count);
1125                 } else
1126                         val64 = TTI_DATA1_MEM_TX_TIMER_VAL(0x2078);
1127
1128                 val64 |= TTI_DATA1_MEM_TX_URNG_A(0xA) |
1129                         TTI_DATA1_MEM_TX_URNG_B(0x10) |
1130                         TTI_DATA1_MEM_TX_URNG_C(0x30) |
1131                         TTI_DATA1_MEM_TX_TIMER_AC_EN;
1132                 if (i == 0)
1133                         if (use_continuous_tx_intrs && (link == LINK_UP))
1134                                 val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN;
1135                 writeq(val64, &bar0->tti_data1_mem);
1136
1137                 if (nic->config.intr_type == MSI_X) {
1138                         val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) |
1139                                 TTI_DATA2_MEM_TX_UFC_B(0x100) |
1140                                 TTI_DATA2_MEM_TX_UFC_C(0x200) |
1141                                 TTI_DATA2_MEM_TX_UFC_D(0x300);
1142                 } else {
1143                         if ((nic->config.tx_steering_type ==
1144                              TX_DEFAULT_STEERING) &&
1145                             (config->tx_fifo_num > 1) &&
1146                             (i >= nic->udp_fifo_idx) &&
1147                             (i < (nic->udp_fifo_idx +
1148                                   nic->total_udp_fifos)))
1149                                 val64 = TTI_DATA2_MEM_TX_UFC_A(0x50) |
1150                                         TTI_DATA2_MEM_TX_UFC_B(0x80) |
1151                                         TTI_DATA2_MEM_TX_UFC_C(0x100) |
1152                                         TTI_DATA2_MEM_TX_UFC_D(0x120);
1153                         else
1154                                 val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) |
1155                                         TTI_DATA2_MEM_TX_UFC_B(0x20) |
1156                                         TTI_DATA2_MEM_TX_UFC_C(0x40) |
1157                                         TTI_DATA2_MEM_TX_UFC_D(0x80);
1158                 }
1159
1160                 writeq(val64, &bar0->tti_data2_mem);
1161
1162                 val64 = TTI_CMD_MEM_WE |
1163                         TTI_CMD_MEM_STROBE_NEW_CMD |
1164                         TTI_CMD_MEM_OFFSET(i);
1165                 writeq(val64, &bar0->tti_command_mem);
1166
1167                 if (wait_for_cmd_complete(&bar0->tti_command_mem,
1168                                           TTI_CMD_MEM_STROBE_NEW_CMD,
1169                                           S2IO_BIT_RESET) != SUCCESS)
1170                         return FAILURE;
1171         }
1172
1173         return SUCCESS;
1174 }
1175
1176 /**
1177  *  init_nic - Initialization of hardware
1178  *  @nic: device private variable
1179  *  Description: The function sequentially configures every block
1180  *  of the H/W from their reset values.
1181  *  Return Value:  SUCCESS on success and
1182  *  '-1' on failure (endian settings incorrect).
1183  */
1184
1185 static int init_nic(struct s2io_nic *nic)
1186 {
1187         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1188         struct net_device *dev = nic->dev;
1189         register u64 val64 = 0;
1190         void __iomem *add;
1191         u32 time;
1192         int i, j;
1193         int dtx_cnt = 0;
1194         unsigned long long mem_share;
1195         int mem_size;
1196         struct config_param *config = &nic->config;
1197         struct mac_info *mac_control = &nic->mac_control;
1198
1199         /* to set the swapper controle on the card */
1200         if (s2io_set_swapper(nic)) {
1201                 DBG_PRINT(ERR_DBG, "ERROR: Setting Swapper failed\n");
1202                 return -EIO;
1203         }
1204
1205         /*
1206          * Herc requires EOI to be removed from reset before XGXS, so..
1207          */
1208         if (nic->device_type & XFRAME_II_DEVICE) {
1209                 val64 = 0xA500000000ULL;
1210                 writeq(val64, &bar0->sw_reset);
1211                 msleep(500);
1212                 val64 = readq(&bar0->sw_reset);
1213         }
1214
1215         /* Remove XGXS from reset state */
1216         val64 = 0;
1217         writeq(val64, &bar0->sw_reset);
1218         msleep(500);
1219         val64 = readq(&bar0->sw_reset);
1220
1221         /* Ensure that it's safe to access registers by checking
1222          * RIC_RUNNING bit is reset. Check is valid only for XframeII.
1223          */
1224         if (nic->device_type == XFRAME_II_DEVICE) {
1225                 for (i = 0; i < 50; i++) {
1226                         val64 = readq(&bar0->adapter_status);
1227                         if (!(val64 & ADAPTER_STATUS_RIC_RUNNING))
1228                                 break;
1229                         msleep(10);
1230                 }
1231                 if (i == 50)
1232                         return -ENODEV;
1233         }
1234
1235         /*  Enable Receiving broadcasts */
1236         add = &bar0->mac_cfg;
1237         val64 = readq(&bar0->mac_cfg);
1238         val64 |= MAC_RMAC_BCAST_ENABLE;
1239         writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1240         writel((u32)val64, add);
1241         writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1242         writel((u32) (val64 >> 32), (add + 4));
1243
1244         /* Read registers in all blocks */
1245         val64 = readq(&bar0->mac_int_mask);
1246         val64 = readq(&bar0->mc_int_mask);
1247         val64 = readq(&bar0->xgxs_int_mask);
1248
1249         /*  Set MTU */
1250         val64 = dev->mtu;
1251         writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
1252
1253         if (nic->device_type & XFRAME_II_DEVICE) {
1254                 while (herc_act_dtx_cfg[dtx_cnt] != END_SIGN) {
1255                         SPECIAL_REG_WRITE(herc_act_dtx_cfg[dtx_cnt],
1256                                           &bar0->dtx_control, UF);
1257                         if (dtx_cnt & 0x1)
1258                                 msleep(1); /* Necessary!! */
1259                         dtx_cnt++;
1260                 }
1261         } else {
1262                 while (xena_dtx_cfg[dtx_cnt] != END_SIGN) {
1263                         SPECIAL_REG_WRITE(xena_dtx_cfg[dtx_cnt],
1264                                           &bar0->dtx_control, UF);
1265                         val64 = readq(&bar0->dtx_control);
1266                         dtx_cnt++;
1267                 }
1268         }
1269
1270         /*  Tx DMA Initialization */
1271         val64 = 0;
1272         writeq(val64, &bar0->tx_fifo_partition_0);
1273         writeq(val64, &bar0->tx_fifo_partition_1);
1274         writeq(val64, &bar0->tx_fifo_partition_2);
1275         writeq(val64, &bar0->tx_fifo_partition_3);
1276
1277         for (i = 0, j = 0; i < config->tx_fifo_num; i++) {
1278                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
1279
1280                 val64 |= vBIT(tx_cfg->fifo_len - 1, ((j * 32) + 19), 13) |
1281                         vBIT(tx_cfg->fifo_priority, ((j * 32) + 5), 3);
1282
1283                 if (i == (config->tx_fifo_num - 1)) {
1284                         if (i % 2 == 0)
1285                                 i++;
1286                 }
1287
1288                 switch (i) {
1289                 case 1:
1290                         writeq(val64, &bar0->tx_fifo_partition_0);
1291                         val64 = 0;
1292                         j = 0;
1293                         break;
1294                 case 3:
1295                         writeq(val64, &bar0->tx_fifo_partition_1);
1296                         val64 = 0;
1297                         j = 0;
1298                         break;
1299                 case 5:
1300                         writeq(val64, &bar0->tx_fifo_partition_2);
1301                         val64 = 0;
1302                         j = 0;
1303                         break;
1304                 case 7:
1305                         writeq(val64, &bar0->tx_fifo_partition_3);
1306                         val64 = 0;
1307                         j = 0;
1308                         break;
1309                 default:
1310                         j++;
1311                         break;
1312                 }
1313         }
1314
1315         /*
1316          * Disable 4 PCCs for Xena1, 2 and 3 as per H/W bug
1317          * SXE-008 TRANSMIT DMA ARBITRATION ISSUE.
1318          */
1319         if ((nic->device_type == XFRAME_I_DEVICE) && (nic->pdev->revision < 4))
1320                 writeq(PCC_ENABLE_FOUR, &bar0->pcc_enable);
1321
1322         val64 = readq(&bar0->tx_fifo_partition_0);
1323         DBG_PRINT(INIT_DBG, "Fifo partition at: 0x%p is: 0x%llx\n",
1324                   &bar0->tx_fifo_partition_0, (unsigned long long)val64);
1325
1326         /*
1327          * Initialization of Tx_PA_CONFIG register to ignore packet
1328          * integrity checking.
1329          */
1330         val64 = readq(&bar0->tx_pa_cfg);
1331         val64 |= TX_PA_CFG_IGNORE_FRM_ERR |
1332                 TX_PA_CFG_IGNORE_SNAP_OUI |
1333                 TX_PA_CFG_IGNORE_LLC_CTRL |
1334                 TX_PA_CFG_IGNORE_L2_ERR;
1335         writeq(val64, &bar0->tx_pa_cfg);
1336
1337         /* Rx DMA initialization. */
1338         val64 = 0;
1339         for (i = 0; i < config->rx_ring_num; i++) {
1340                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
1341
1342                 val64 |= vBIT(rx_cfg->ring_priority, (5 + (i * 8)), 3);
1343         }
1344         writeq(val64, &bar0->rx_queue_priority);
1345
1346         /*
1347          * Allocating equal share of memory to all the
1348          * configured Rings.
1349          */
1350         val64 = 0;
1351         if (nic->device_type & XFRAME_II_DEVICE)
1352                 mem_size = 32;
1353         else
1354                 mem_size = 64;
1355
1356         for (i = 0; i < config->rx_ring_num; i++) {
1357                 switch (i) {
1358                 case 0:
1359                         mem_share = (mem_size / config->rx_ring_num +
1360                                      mem_size % config->rx_ring_num);
1361                         val64 |= RX_QUEUE_CFG_Q0_SZ(mem_share);
1362                         continue;
1363                 case 1:
1364                         mem_share = (mem_size / config->rx_ring_num);
1365                         val64 |= RX_QUEUE_CFG_Q1_SZ(mem_share);
1366                         continue;
1367                 case 2:
1368                         mem_share = (mem_size / config->rx_ring_num);
1369                         val64 |= RX_QUEUE_CFG_Q2_SZ(mem_share);
1370                         continue;
1371                 case 3:
1372                         mem_share = (mem_size / config->rx_ring_num);
1373                         val64 |= RX_QUEUE_CFG_Q3_SZ(mem_share);
1374                         continue;
1375                 case 4:
1376                         mem_share = (mem_size / config->rx_ring_num);
1377                         val64 |= RX_QUEUE_CFG_Q4_SZ(mem_share);
1378                         continue;
1379                 case 5:
1380                         mem_share = (mem_size / config->rx_ring_num);
1381                         val64 |= RX_QUEUE_CFG_Q5_SZ(mem_share);
1382                         continue;
1383                 case 6:
1384                         mem_share = (mem_size / config->rx_ring_num);
1385                         val64 |= RX_QUEUE_CFG_Q6_SZ(mem_share);
1386                         continue;
1387                 case 7:
1388                         mem_share = (mem_size / config->rx_ring_num);
1389                         val64 |= RX_QUEUE_CFG_Q7_SZ(mem_share);
1390                         continue;
1391                 }
1392         }
1393         writeq(val64, &bar0->rx_queue_cfg);
1394
1395         /*
1396          * Filling Tx round robin registers
1397          * as per the number of FIFOs for equal scheduling priority
1398          */
1399         switch (config->tx_fifo_num) {
1400         case 1:
1401                 val64 = 0x0;
1402                 writeq(val64, &bar0->tx_w_round_robin_0);
1403                 writeq(val64, &bar0->tx_w_round_robin_1);
1404                 writeq(val64, &bar0->tx_w_round_robin_2);
1405                 writeq(val64, &bar0->tx_w_round_robin_3);
1406                 writeq(val64, &bar0->tx_w_round_robin_4);
1407                 break;
1408         case 2:
1409                 val64 = 0x0001000100010001ULL;
1410                 writeq(val64, &bar0->tx_w_round_robin_0);
1411                 writeq(val64, &bar0->tx_w_round_robin_1);
1412                 writeq(val64, &bar0->tx_w_round_robin_2);
1413                 writeq(val64, &bar0->tx_w_round_robin_3);
1414                 val64 = 0x0001000100000000ULL;
1415                 writeq(val64, &bar0->tx_w_round_robin_4);
1416                 break;
1417         case 3:
1418                 val64 = 0x0001020001020001ULL;
1419                 writeq(val64, &bar0->tx_w_round_robin_0);
1420                 val64 = 0x0200010200010200ULL;
1421                 writeq(val64, &bar0->tx_w_round_robin_1);
1422                 val64 = 0x0102000102000102ULL;
1423                 writeq(val64, &bar0->tx_w_round_robin_2);
1424                 val64 = 0x0001020001020001ULL;
1425                 writeq(val64, &bar0->tx_w_round_robin_3);
1426                 val64 = 0x0200010200000000ULL;
1427                 writeq(val64, &bar0->tx_w_round_robin_4);
1428                 break;
1429         case 4:
1430                 val64 = 0x0001020300010203ULL;
1431                 writeq(val64, &bar0->tx_w_round_robin_0);
1432                 writeq(val64, &bar0->tx_w_round_robin_1);
1433                 writeq(val64, &bar0->tx_w_round_robin_2);
1434                 writeq(val64, &bar0->tx_w_round_robin_3);
1435                 val64 = 0x0001020300000000ULL;
1436                 writeq(val64, &bar0->tx_w_round_robin_4);
1437                 break;
1438         case 5:
1439                 val64 = 0x0001020304000102ULL;
1440                 writeq(val64, &bar0->tx_w_round_robin_0);
1441                 val64 = 0x0304000102030400ULL;
1442                 writeq(val64, &bar0->tx_w_round_robin_1);
1443                 val64 = 0x0102030400010203ULL;
1444                 writeq(val64, &bar0->tx_w_round_robin_2);
1445                 val64 = 0x0400010203040001ULL;
1446                 writeq(val64, &bar0->tx_w_round_robin_3);
1447                 val64 = 0x0203040000000000ULL;
1448                 writeq(val64, &bar0->tx_w_round_robin_4);
1449                 break;
1450         case 6:
1451                 val64 = 0x0001020304050001ULL;
1452                 writeq(val64, &bar0->tx_w_round_robin_0);
1453                 val64 = 0x0203040500010203ULL;
1454                 writeq(val64, &bar0->tx_w_round_robin_1);
1455                 val64 = 0x0405000102030405ULL;
1456                 writeq(val64, &bar0->tx_w_round_robin_2);
1457                 val64 = 0x0001020304050001ULL;
1458                 writeq(val64, &bar0->tx_w_round_robin_3);
1459                 val64 = 0x0203040500000000ULL;
1460                 writeq(val64, &bar0->tx_w_round_robin_4);
1461                 break;
1462         case 7:
1463                 val64 = 0x0001020304050600ULL;
1464                 writeq(val64, &bar0->tx_w_round_robin_0);
1465                 val64 = 0x0102030405060001ULL;
1466                 writeq(val64, &bar0->tx_w_round_robin_1);
1467                 val64 = 0x0203040506000102ULL;
1468                 writeq(val64, &bar0->tx_w_round_robin_2);
1469                 val64 = 0x0304050600010203ULL;
1470                 writeq(val64, &bar0->tx_w_round_robin_3);
1471                 val64 = 0x0405060000000000ULL;
1472                 writeq(val64, &bar0->tx_w_round_robin_4);
1473                 break;
1474         case 8:
1475                 val64 = 0x0001020304050607ULL;
1476                 writeq(val64, &bar0->tx_w_round_robin_0);
1477                 writeq(val64, &bar0->tx_w_round_robin_1);
1478                 writeq(val64, &bar0->tx_w_round_robin_2);
1479                 writeq(val64, &bar0->tx_w_round_robin_3);
1480                 val64 = 0x0001020300000000ULL;
1481                 writeq(val64, &bar0->tx_w_round_robin_4);
1482                 break;
1483         }
1484
1485         /* Enable all configured Tx FIFO partitions */
1486         val64 = readq(&bar0->tx_fifo_partition_0);
1487         val64 |= (TX_FIFO_PARTITION_EN);
1488         writeq(val64, &bar0->tx_fifo_partition_0);
1489
1490         /* Filling the Rx round robin registers as per the
1491          * number of Rings and steering based on QoS with
1492          * equal priority.
1493          */
1494         switch (config->rx_ring_num) {
1495         case 1:
1496                 val64 = 0x0;
1497                 writeq(val64, &bar0->rx_w_round_robin_0);
1498                 writeq(val64, &bar0->rx_w_round_robin_1);
1499                 writeq(val64, &bar0->rx_w_round_robin_2);
1500                 writeq(val64, &bar0->rx_w_round_robin_3);
1501                 writeq(val64, &bar0->rx_w_round_robin_4);
1502
1503                 val64 = 0x8080808080808080ULL;
1504                 writeq(val64, &bar0->rts_qos_steering);
1505                 break;
1506         case 2:
1507                 val64 = 0x0001000100010001ULL;
1508                 writeq(val64, &bar0->rx_w_round_robin_0);
1509                 writeq(val64, &bar0->rx_w_round_robin_1);
1510                 writeq(val64, &bar0->rx_w_round_robin_2);
1511                 writeq(val64, &bar0->rx_w_round_robin_3);
1512                 val64 = 0x0001000100000000ULL;
1513                 writeq(val64, &bar0->rx_w_round_robin_4);
1514
1515                 val64 = 0x8080808040404040ULL;
1516                 writeq(val64, &bar0->rts_qos_steering);
1517                 break;
1518         case 3:
1519                 val64 = 0x0001020001020001ULL;
1520                 writeq(val64, &bar0->rx_w_round_robin_0);
1521                 val64 = 0x0200010200010200ULL;
1522                 writeq(val64, &bar0->rx_w_round_robin_1);
1523                 val64 = 0x0102000102000102ULL;
1524                 writeq(val64, &bar0->rx_w_round_robin_2);
1525                 val64 = 0x0001020001020001ULL;
1526                 writeq(val64, &bar0->rx_w_round_robin_3);
1527                 val64 = 0x0200010200000000ULL;
1528                 writeq(val64, &bar0->rx_w_round_robin_4);
1529
1530                 val64 = 0x8080804040402020ULL;
1531                 writeq(val64, &bar0->rts_qos_steering);
1532                 break;
1533         case 4:
1534                 val64 = 0x0001020300010203ULL;
1535                 writeq(val64, &bar0->rx_w_round_robin_0);
1536                 writeq(val64, &bar0->rx_w_round_robin_1);
1537                 writeq(val64, &bar0->rx_w_round_robin_2);
1538                 writeq(val64, &bar0->rx_w_round_robin_3);
1539                 val64 = 0x0001020300000000ULL;
1540                 writeq(val64, &bar0->rx_w_round_robin_4);
1541
1542                 val64 = 0x8080404020201010ULL;
1543                 writeq(val64, &bar0->rts_qos_steering);
1544                 break;
1545         case 5:
1546                 val64 = 0x0001020304000102ULL;
1547                 writeq(val64, &bar0->rx_w_round_robin_0);
1548                 val64 = 0x0304000102030400ULL;
1549                 writeq(val64, &bar0->rx_w_round_robin_1);
1550                 val64 = 0x0102030400010203ULL;
1551                 writeq(val64, &bar0->rx_w_round_robin_2);
1552                 val64 = 0x0400010203040001ULL;
1553                 writeq(val64, &bar0->rx_w_round_robin_3);
1554                 val64 = 0x0203040000000000ULL;
1555                 writeq(val64, &bar0->rx_w_round_robin_4);
1556
1557                 val64 = 0x8080404020201008ULL;
1558                 writeq(val64, &bar0->rts_qos_steering);
1559                 break;
1560         case 6:
1561                 val64 = 0x0001020304050001ULL;
1562                 writeq(val64, &bar0->rx_w_round_robin_0);
1563                 val64 = 0x0203040500010203ULL;
1564                 writeq(val64, &bar0->rx_w_round_robin_1);
1565                 val64 = 0x0405000102030405ULL;
1566                 writeq(val64, &bar0->rx_w_round_robin_2);
1567                 val64 = 0x0001020304050001ULL;
1568                 writeq(val64, &bar0->rx_w_round_robin_3);
1569                 val64 = 0x0203040500000000ULL;
1570                 writeq(val64, &bar0->rx_w_round_robin_4);
1571
1572                 val64 = 0x8080404020100804ULL;
1573                 writeq(val64, &bar0->rts_qos_steering);
1574                 break;
1575         case 7:
1576                 val64 = 0x0001020304050600ULL;
1577                 writeq(val64, &bar0->rx_w_round_robin_0);
1578                 val64 = 0x0102030405060001ULL;
1579                 writeq(val64, &bar0->rx_w_round_robin_1);
1580                 val64 = 0x0203040506000102ULL;
1581                 writeq(val64, &bar0->rx_w_round_robin_2);
1582                 val64 = 0x0304050600010203ULL;
1583                 writeq(val64, &bar0->rx_w_round_robin_3);
1584                 val64 = 0x0405060000000000ULL;
1585                 writeq(val64, &bar0->rx_w_round_robin_4);
1586
1587                 val64 = 0x8080402010080402ULL;
1588                 writeq(val64, &bar0->rts_qos_steering);
1589                 break;
1590         case 8:
1591                 val64 = 0x0001020304050607ULL;
1592                 writeq(val64, &bar0->rx_w_round_robin_0);
1593                 writeq(val64, &bar0->rx_w_round_robin_1);
1594                 writeq(val64, &bar0->rx_w_round_robin_2);
1595                 writeq(val64, &bar0->rx_w_round_robin_3);
1596                 val64 = 0x0001020300000000ULL;
1597                 writeq(val64, &bar0->rx_w_round_robin_4);
1598
1599                 val64 = 0x8040201008040201ULL;
1600                 writeq(val64, &bar0->rts_qos_steering);
1601                 break;
1602         }
1603
1604         /* UDP Fix */
1605         val64 = 0;
1606         for (i = 0; i < 8; i++)
1607                 writeq(val64, &bar0->rts_frm_len_n[i]);
1608
1609         /* Set the default rts frame length for the rings configured */
1610         val64 = MAC_RTS_FRM_LEN_SET(dev->mtu+22);
1611         for (i = 0 ; i < config->rx_ring_num ; i++)
1612                 writeq(val64, &bar0->rts_frm_len_n[i]);
1613
1614         /* Set the frame length for the configured rings
1615          * desired by the user
1616          */
1617         for (i = 0; i < config->rx_ring_num; i++) {
1618                 /* If rts_frm_len[i] == 0 then it is assumed that user not
1619                  * specified frame length steering.
1620                  * If the user provides the frame length then program
1621                  * the rts_frm_len register for those values or else
1622                  * leave it as it is.
1623                  */
1624                 if (rts_frm_len[i] != 0) {
1625                         writeq(MAC_RTS_FRM_LEN_SET(rts_frm_len[i]),
1626                                &bar0->rts_frm_len_n[i]);
1627                 }
1628         }
1629
1630         /* Disable differentiated services steering logic */
1631         for (i = 0; i < 64; i++) {
1632                 if (rts_ds_steer(nic, i, 0) == FAILURE) {
1633                         DBG_PRINT(ERR_DBG,
1634                                   "%s: rts_ds_steer failed on codepoint %d\n",
1635                                   dev->name, i);
1636                         return -ENODEV;
1637                 }
1638         }
1639
1640         /* Program statistics memory */
1641         writeq(mac_control->stats_mem_phy, &bar0->stat_addr);
1642
1643         if (nic->device_type == XFRAME_II_DEVICE) {
1644                 val64 = STAT_BC(0x320);
1645                 writeq(val64, &bar0->stat_byte_cnt);
1646         }
1647
1648         /*
1649          * Initializing the sampling rate for the device to calculate the
1650          * bandwidth utilization.
1651          */
1652         val64 = MAC_TX_LINK_UTIL_VAL(tmac_util_period) |
1653                 MAC_RX_LINK_UTIL_VAL(rmac_util_period);
1654         writeq(val64, &bar0->mac_link_util);
1655
1656         /*
1657          * Initializing the Transmit and Receive Traffic Interrupt
1658          * Scheme.
1659          */
1660
1661         /* Initialize TTI */
1662         if (SUCCESS != init_tti(nic, nic->last_link_state))
1663                 return -ENODEV;
1664
1665         /* RTI Initialization */
1666         if (nic->device_type == XFRAME_II_DEVICE) {
1667                 /*
1668                  * Programmed to generate Apprx 500 Intrs per
1669                  * second
1670                  */
1671                 int count = (nic->config.bus_speed * 125)/4;
1672                 val64 = RTI_DATA1_MEM_RX_TIMER_VAL(count);
1673         } else
1674                 val64 = RTI_DATA1_MEM_RX_TIMER_VAL(0xFFF);
1675         val64 |= RTI_DATA1_MEM_RX_URNG_A(0xA) |
1676                 RTI_DATA1_MEM_RX_URNG_B(0x10) |
1677                 RTI_DATA1_MEM_RX_URNG_C(0x30) |
1678                 RTI_DATA1_MEM_RX_TIMER_AC_EN;
1679
1680         writeq(val64, &bar0->rti_data1_mem);
1681
1682         val64 = RTI_DATA2_MEM_RX_UFC_A(0x1) |
1683                 RTI_DATA2_MEM_RX_UFC_B(0x2) ;
1684         if (nic->config.intr_type == MSI_X)
1685                 val64 |= (RTI_DATA2_MEM_RX_UFC_C(0x20) |
1686                           RTI_DATA2_MEM_RX_UFC_D(0x40));
1687         else
1688                 val64 |= (RTI_DATA2_MEM_RX_UFC_C(0x40) |
1689                           RTI_DATA2_MEM_RX_UFC_D(0x80));
1690         writeq(val64, &bar0->rti_data2_mem);
1691
1692         for (i = 0; i < config->rx_ring_num; i++) {
1693                 val64 = RTI_CMD_MEM_WE |
1694                         RTI_CMD_MEM_STROBE_NEW_CMD |
1695                         RTI_CMD_MEM_OFFSET(i);
1696                 writeq(val64, &bar0->rti_command_mem);
1697
1698                 /*
1699                  * Once the operation completes, the Strobe bit of the
1700                  * command register will be reset. We poll for this
1701                  * particular condition. We wait for a maximum of 500ms
1702                  * for the operation to complete, if it's not complete
1703                  * by then we return error.
1704                  */
1705                 time = 0;
1706                 while (true) {
1707                         val64 = readq(&bar0->rti_command_mem);
1708                         if (!(val64 & RTI_CMD_MEM_STROBE_NEW_CMD))
1709                                 break;
1710
1711                         if (time > 10) {
1712                                 DBG_PRINT(ERR_DBG, "%s: RTI init failed\n",
1713                                           dev->name);
1714                                 return -ENODEV;
1715                         }
1716                         time++;
1717                         msleep(50);
1718                 }
1719         }
1720
1721         /*
1722          * Initializing proper values as Pause threshold into all
1723          * the 8 Queues on Rx side.
1724          */
1725         writeq(0xffbbffbbffbbffbbULL, &bar0->mc_pause_thresh_q0q3);
1726         writeq(0xffbbffbbffbbffbbULL, &bar0->mc_pause_thresh_q4q7);
1727
1728         /* Disable RMAC PAD STRIPPING */
1729         add = &bar0->mac_cfg;
1730         val64 = readq(&bar0->mac_cfg);
1731         val64 &= ~(MAC_CFG_RMAC_STRIP_PAD);
1732         writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1733         writel((u32) (val64), add);
1734         writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1735         writel((u32) (val64 >> 32), (add + 4));
1736         val64 = readq(&bar0->mac_cfg);
1737
1738         /* Enable FCS stripping by adapter */
1739         add = &bar0->mac_cfg;
1740         val64 = readq(&bar0->mac_cfg);
1741         val64 |= MAC_CFG_RMAC_STRIP_FCS;
1742         if (nic->device_type == XFRAME_II_DEVICE)
1743                 writeq(val64, &bar0->mac_cfg);
1744         else {
1745                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1746                 writel((u32) (val64), add);
1747                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
1748                 writel((u32) (val64 >> 32), (add + 4));
1749         }
1750
1751         /*
1752          * Set the time value to be inserted in the pause frame
1753          * generated by xena.
1754          */
1755         val64 = readq(&bar0->rmac_pause_cfg);
1756         val64 &= ~(RMAC_PAUSE_HG_PTIME(0xffff));
1757         val64 |= RMAC_PAUSE_HG_PTIME(nic->mac_control.rmac_pause_time);
1758         writeq(val64, &bar0->rmac_pause_cfg);
1759
1760         /*
1761          * Set the Threshold Limit for Generating the pause frame
1762          * If the amount of data in any Queue exceeds ratio of
1763          * (mac_control.mc_pause_threshold_q0q3 or q4q7)/256
1764          * pause frame is generated
1765          */
1766         val64 = 0;
1767         for (i = 0; i < 4; i++) {
1768                 val64 |= (((u64)0xFF00 |
1769                            nic->mac_control.mc_pause_threshold_q0q3)
1770                           << (i * 2 * 8));
1771         }
1772         writeq(val64, &bar0->mc_pause_thresh_q0q3);
1773
1774         val64 = 0;
1775         for (i = 0; i < 4; i++) {
1776                 val64 |= (((u64)0xFF00 |
1777                            nic->mac_control.mc_pause_threshold_q4q7)
1778                           << (i * 2 * 8));
1779         }
1780         writeq(val64, &bar0->mc_pause_thresh_q4q7);
1781
1782         /*
1783          * TxDMA will stop Read request if the number of read split has
1784          * exceeded the limit pointed by shared_splits
1785          */
1786         val64 = readq(&bar0->pic_control);
1787         val64 |= PIC_CNTL_SHARED_SPLITS(shared_splits);
1788         writeq(val64, &bar0->pic_control);
1789
1790         if (nic->config.bus_speed == 266) {
1791                 writeq(TXREQTO_VAL(0x7f) | TXREQTO_EN, &bar0->txreqtimeout);
1792                 writeq(0x0, &bar0->read_retry_delay);
1793                 writeq(0x0, &bar0->write_retry_delay);
1794         }
1795
1796         /*
1797          * Programming the Herc to split every write transaction
1798          * that does not start on an ADB to reduce disconnects.
1799          */
1800         if (nic->device_type == XFRAME_II_DEVICE) {
1801                 val64 = FAULT_BEHAVIOUR | EXT_REQ_EN |
1802                         MISC_LINK_STABILITY_PRD(3);
1803                 writeq(val64, &bar0->misc_control);
1804                 val64 = readq(&bar0->pic_control2);
1805                 val64 &= ~(s2BIT(13)|s2BIT(14)|s2BIT(15));
1806                 writeq(val64, &bar0->pic_control2);
1807         }
1808         if (strstr(nic->product_name, "CX4")) {
1809                 val64 = TMAC_AVG_IPG(0x17);
1810                 writeq(val64, &bar0->tmac_avg_ipg);
1811         }
1812
1813         return SUCCESS;
1814 }
1815 #define LINK_UP_DOWN_INTERRUPT          1
1816 #define MAC_RMAC_ERR_TIMER              2
1817
1818 static int s2io_link_fault_indication(struct s2io_nic *nic)
1819 {
1820         if (nic->device_type == XFRAME_II_DEVICE)
1821                 return LINK_UP_DOWN_INTERRUPT;
1822         else
1823                 return MAC_RMAC_ERR_TIMER;
1824 }
1825
1826 /**
1827  *  do_s2io_write_bits -  update alarm bits in alarm register
1828  *  @value: alarm bits
1829  *  @flag: interrupt status
1830  *  @addr: address value
1831  *  Description: update alarm bits in alarm register
1832  *  Return Value:
1833  *  NONE.
1834  */
1835 static void do_s2io_write_bits(u64 value, int flag, void __iomem *addr)
1836 {
1837         u64 temp64;
1838
1839         temp64 = readq(addr);
1840
1841         if (flag == ENABLE_INTRS)
1842                 temp64 &= ~((u64)value);
1843         else
1844                 temp64 |= ((u64)value);
1845         writeq(temp64, addr);
1846 }
1847
1848 static void en_dis_err_alarms(struct s2io_nic *nic, u16 mask, int flag)
1849 {
1850         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1851         register u64 gen_int_mask = 0;
1852         u64 interruptible;
1853
1854         writeq(DISABLE_ALL_INTRS, &bar0->general_int_mask);
1855         if (mask & TX_DMA_INTR) {
1856                 gen_int_mask |= TXDMA_INT_M;
1857
1858                 do_s2io_write_bits(TXDMA_TDA_INT | TXDMA_PFC_INT |
1859                                    TXDMA_PCC_INT | TXDMA_TTI_INT |
1860                                    TXDMA_LSO_INT | TXDMA_TPA_INT |
1861                                    TXDMA_SM_INT, flag, &bar0->txdma_int_mask);
1862
1863                 do_s2io_write_bits(PFC_ECC_DB_ERR | PFC_SM_ERR_ALARM |
1864                                    PFC_MISC_0_ERR | PFC_MISC_1_ERR |
1865                                    PFC_PCIX_ERR | PFC_ECC_SG_ERR, flag,
1866                                    &bar0->pfc_err_mask);
1867
1868                 do_s2io_write_bits(TDA_Fn_ECC_DB_ERR | TDA_SM0_ERR_ALARM |
1869                                    TDA_SM1_ERR_ALARM | TDA_Fn_ECC_SG_ERR |
1870                                    TDA_PCIX_ERR, flag, &bar0->tda_err_mask);
1871
1872                 do_s2io_write_bits(PCC_FB_ECC_DB_ERR | PCC_TXB_ECC_DB_ERR |
1873                                    PCC_SM_ERR_ALARM | PCC_WR_ERR_ALARM |
1874                                    PCC_N_SERR | PCC_6_COF_OV_ERR |
1875                                    PCC_7_COF_OV_ERR | PCC_6_LSO_OV_ERR |
1876                                    PCC_7_LSO_OV_ERR | PCC_FB_ECC_SG_ERR |
1877                                    PCC_TXB_ECC_SG_ERR,
1878                                    flag, &bar0->pcc_err_mask);
1879
1880                 do_s2io_write_bits(TTI_SM_ERR_ALARM | TTI_ECC_SG_ERR |
1881                                    TTI_ECC_DB_ERR, flag, &bar0->tti_err_mask);
1882
1883                 do_s2io_write_bits(LSO6_ABORT | LSO7_ABORT |
1884                                    LSO6_SM_ERR_ALARM | LSO7_SM_ERR_ALARM |
1885                                    LSO6_SEND_OFLOW | LSO7_SEND_OFLOW,
1886                                    flag, &bar0->lso_err_mask);
1887
1888                 do_s2io_write_bits(TPA_SM_ERR_ALARM | TPA_TX_FRM_DROP,
1889                                    flag, &bar0->tpa_err_mask);
1890
1891                 do_s2io_write_bits(SM_SM_ERR_ALARM, flag, &bar0->sm_err_mask);
1892         }
1893
1894         if (mask & TX_MAC_INTR) {
1895                 gen_int_mask |= TXMAC_INT_M;
1896                 do_s2io_write_bits(MAC_INT_STATUS_TMAC_INT, flag,
1897                                    &bar0->mac_int_mask);
1898                 do_s2io_write_bits(TMAC_TX_BUF_OVRN | TMAC_TX_SM_ERR |
1899                                    TMAC_ECC_SG_ERR | TMAC_ECC_DB_ERR |
1900                                    TMAC_DESC_ECC_SG_ERR | TMAC_DESC_ECC_DB_ERR,
1901                                    flag, &bar0->mac_tmac_err_mask);
1902         }
1903
1904         if (mask & TX_XGXS_INTR) {
1905                 gen_int_mask |= TXXGXS_INT_M;
1906                 do_s2io_write_bits(XGXS_INT_STATUS_TXGXS, flag,
1907                                    &bar0->xgxs_int_mask);
1908                 do_s2io_write_bits(TXGXS_ESTORE_UFLOW | TXGXS_TX_SM_ERR |
1909                                    TXGXS_ECC_SG_ERR | TXGXS_ECC_DB_ERR,
1910                                    flag, &bar0->xgxs_txgxs_err_mask);
1911         }
1912
1913         if (mask & RX_DMA_INTR) {
1914                 gen_int_mask |= RXDMA_INT_M;
1915                 do_s2io_write_bits(RXDMA_INT_RC_INT_M | RXDMA_INT_RPA_INT_M |
1916                                    RXDMA_INT_RDA_INT_M | RXDMA_INT_RTI_INT_M,
1917                                    flag, &bar0->rxdma_int_mask);
1918                 do_s2io_write_bits(RC_PRCn_ECC_DB_ERR | RC_FTC_ECC_DB_ERR |
1919                                    RC_PRCn_SM_ERR_ALARM | RC_FTC_SM_ERR_ALARM |
1920                                    RC_PRCn_ECC_SG_ERR | RC_FTC_ECC_SG_ERR |
1921                                    RC_RDA_FAIL_WR_Rn, flag, &bar0->rc_err_mask);
1922                 do_s2io_write_bits(PRC_PCI_AB_RD_Rn | PRC_PCI_AB_WR_Rn |
1923                                    PRC_PCI_AB_F_WR_Rn | PRC_PCI_DP_RD_Rn |
1924                                    PRC_PCI_DP_WR_Rn | PRC_PCI_DP_F_WR_Rn, flag,
1925                                    &bar0->prc_pcix_err_mask);
1926                 do_s2io_write_bits(RPA_SM_ERR_ALARM | RPA_CREDIT_ERR |
1927                                    RPA_ECC_SG_ERR | RPA_ECC_DB_ERR, flag,
1928                                    &bar0->rpa_err_mask);
1929                 do_s2io_write_bits(RDA_RXDn_ECC_DB_ERR | RDA_FRM_ECC_DB_N_AERR |
1930                                    RDA_SM1_ERR_ALARM | RDA_SM0_ERR_ALARM |
1931                                    RDA_RXD_ECC_DB_SERR | RDA_RXDn_ECC_SG_ERR |
1932                                    RDA_FRM_ECC_SG_ERR |
1933                                    RDA_MISC_ERR|RDA_PCIX_ERR,
1934                                    flag, &bar0->rda_err_mask);
1935                 do_s2io_write_bits(RTI_SM_ERR_ALARM |
1936                                    RTI_ECC_SG_ERR | RTI_ECC_DB_ERR,
1937                                    flag, &bar0->rti_err_mask);
1938         }
1939
1940         if (mask & RX_MAC_INTR) {
1941                 gen_int_mask |= RXMAC_INT_M;
1942                 do_s2io_write_bits(MAC_INT_STATUS_RMAC_INT, flag,
1943                                    &bar0->mac_int_mask);
1944                 interruptible = (RMAC_RX_BUFF_OVRN | RMAC_RX_SM_ERR |
1945                                  RMAC_UNUSED_INT | RMAC_SINGLE_ECC_ERR |
1946                                  RMAC_DOUBLE_ECC_ERR);
1947                 if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER)
1948                         interruptible |= RMAC_LINK_STATE_CHANGE_INT;
1949                 do_s2io_write_bits(interruptible,
1950                                    flag, &bar0->mac_rmac_err_mask);
1951         }
1952
1953         if (mask & RX_XGXS_INTR) {
1954                 gen_int_mask |= RXXGXS_INT_M;
1955                 do_s2io_write_bits(XGXS_INT_STATUS_RXGXS, flag,
1956                                    &bar0->xgxs_int_mask);
1957                 do_s2io_write_bits(RXGXS_ESTORE_OFLOW | RXGXS_RX_SM_ERR, flag,
1958                                    &bar0->xgxs_rxgxs_err_mask);
1959         }
1960
1961         if (mask & MC_INTR) {
1962                 gen_int_mask |= MC_INT_M;
1963                 do_s2io_write_bits(MC_INT_MASK_MC_INT,
1964                                    flag, &bar0->mc_int_mask);
1965                 do_s2io_write_bits(MC_ERR_REG_SM_ERR | MC_ERR_REG_ECC_ALL_SNG |
1966                                    MC_ERR_REG_ECC_ALL_DBL | PLL_LOCK_N, flag,
1967                                    &bar0->mc_err_mask);
1968         }
1969         nic->general_int_mask = gen_int_mask;
1970
1971         /* Remove this line when alarm interrupts are enabled */
1972         nic->general_int_mask = 0;
1973 }
1974
1975 /**
1976  *  en_dis_able_nic_intrs - Enable or Disable the interrupts
1977  *  @nic: device private variable,
1978  *  @mask: A mask indicating which Intr block must be modified and,
1979  *  @flag: A flag indicating whether to enable or disable the Intrs.
1980  *  Description: This function will either disable or enable the interrupts
1981  *  depending on the flag argument. The mask argument can be used to
1982  *  enable/disable any Intr block.
1983  *  Return Value: NONE.
1984  */
1985
1986 static void en_dis_able_nic_intrs(struct s2io_nic *nic, u16 mask, int flag)
1987 {
1988         struct XENA_dev_config __iomem *bar0 = nic->bar0;
1989         register u64 temp64 = 0, intr_mask = 0;
1990
1991         intr_mask = nic->general_int_mask;
1992
1993         /*  Top level interrupt classification */
1994         /*  PIC Interrupts */
1995         if (mask & TX_PIC_INTR) {
1996                 /*  Enable PIC Intrs in the general intr mask register */
1997                 intr_mask |= TXPIC_INT_M;
1998                 if (flag == ENABLE_INTRS) {
1999                         /*
2000                          * If Hercules adapter enable GPIO otherwise
2001                          * disable all PCIX, Flash, MDIO, IIC and GPIO
2002                          * interrupts for now.
2003                          * TODO
2004                          */
2005                         if (s2io_link_fault_indication(nic) ==
2006                             LINK_UP_DOWN_INTERRUPT) {
2007                                 do_s2io_write_bits(PIC_INT_GPIO, flag,
2008                                                    &bar0->pic_int_mask);
2009                                 do_s2io_write_bits(GPIO_INT_MASK_LINK_UP, flag,
2010                                                    &bar0->gpio_int_mask);
2011                         } else
2012                                 writeq(DISABLE_ALL_INTRS, &bar0->pic_int_mask);
2013                 } else if (flag == DISABLE_INTRS) {
2014                         /*
2015                          * Disable PIC Intrs in the general
2016                          * intr mask register
2017                          */
2018                         writeq(DISABLE_ALL_INTRS, &bar0->pic_int_mask);
2019                 }
2020         }
2021
2022         /*  Tx traffic interrupts */
2023         if (mask & TX_TRAFFIC_INTR) {
2024                 intr_mask |= TXTRAFFIC_INT_M;
2025                 if (flag == ENABLE_INTRS) {
2026                         /*
2027                          * Enable all the Tx side interrupts
2028                          * writing 0 Enables all 64 TX interrupt levels
2029                          */
2030                         writeq(0x0, &bar0->tx_traffic_mask);
2031                 } else if (flag == DISABLE_INTRS) {
2032                         /*
2033                          * Disable Tx Traffic Intrs in the general intr mask
2034                          * register.
2035                          */
2036                         writeq(DISABLE_ALL_INTRS, &bar0->tx_traffic_mask);
2037                 }
2038         }
2039
2040         /*  Rx traffic interrupts */
2041         if (mask & RX_TRAFFIC_INTR) {
2042                 intr_mask |= RXTRAFFIC_INT_M;
2043                 if (flag == ENABLE_INTRS) {
2044                         /* writing 0 Enables all 8 RX interrupt levels */
2045                         writeq(0x0, &bar0->rx_traffic_mask);
2046                 } else if (flag == DISABLE_INTRS) {
2047                         /*
2048                          * Disable Rx Traffic Intrs in the general intr mask
2049                          * register.
2050                          */
2051                         writeq(DISABLE_ALL_INTRS, &bar0->rx_traffic_mask);
2052                 }
2053         }
2054
2055         temp64 = readq(&bar0->general_int_mask);
2056         if (flag == ENABLE_INTRS)
2057                 temp64 &= ~((u64)intr_mask);
2058         else
2059                 temp64 = DISABLE_ALL_INTRS;
2060         writeq(temp64, &bar0->general_int_mask);
2061
2062         nic->general_int_mask = readq(&bar0->general_int_mask);
2063 }
2064
2065 /**
2066  *  verify_pcc_quiescent- Checks for PCC quiescent state
2067  *  @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)
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 (in_interrupt())
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
4881 static void s2io_set_multicast(struct net_device *dev)
4882 {
4883         int i, j, prev_cnt;
4884         struct netdev_hw_addr *ha;
4885         struct s2io_nic *sp = netdev_priv(dev);
4886         struct XENA_dev_config __iomem *bar0 = sp->bar0;
4887         u64 val64 = 0, multi_mac = 0x010203040506ULL, mask =
4888                 0xfeffffffffffULL;
4889         u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, mac_addr = 0;
4890         void __iomem *add;
4891         struct config_param *config = &sp->config;
4892
4893         if ((dev->flags & IFF_ALLMULTI) && (!sp->m_cast_flg)) {
4894                 /*  Enable all Multicast addresses */
4895                 writeq(RMAC_ADDR_DATA0_MEM_ADDR(multi_mac),
4896                        &bar0->rmac_addr_data0_mem);
4897                 writeq(RMAC_ADDR_DATA1_MEM_MASK(mask),
4898                        &bar0->rmac_addr_data1_mem);
4899                 val64 = RMAC_ADDR_CMD_MEM_WE |
4900                         RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4901                         RMAC_ADDR_CMD_MEM_OFFSET(config->max_mc_addr - 1);
4902                 writeq(val64, &bar0->rmac_addr_cmd_mem);
4903                 /* Wait till command completes */
4904                 wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4905                                       RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4906                                       S2IO_BIT_RESET);
4907
4908                 sp->m_cast_flg = 1;
4909                 sp->all_multi_pos = config->max_mc_addr - 1;
4910         } else if ((dev->flags & IFF_ALLMULTI) && (sp->m_cast_flg)) {
4911                 /*  Disable all Multicast addresses */
4912                 writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4913                        &bar0->rmac_addr_data0_mem);
4914                 writeq(RMAC_ADDR_DATA1_MEM_MASK(0x0),
4915                        &bar0->rmac_addr_data1_mem);
4916                 val64 = RMAC_ADDR_CMD_MEM_WE |
4917                         RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4918                         RMAC_ADDR_CMD_MEM_OFFSET(sp->all_multi_pos);
4919                 writeq(val64, &bar0->rmac_addr_cmd_mem);
4920                 /* Wait till command completes */
4921                 wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
4922                                       RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
4923                                       S2IO_BIT_RESET);
4924
4925                 sp->m_cast_flg = 0;
4926                 sp->all_multi_pos = 0;
4927         }
4928
4929         if ((dev->flags & IFF_PROMISC) && (!sp->promisc_flg)) {
4930                 /*  Put the NIC into promiscuous mode */
4931                 add = &bar0->mac_cfg;
4932                 val64 = readq(&bar0->mac_cfg);
4933                 val64 |= MAC_CFG_RMAC_PROM_ENABLE;
4934
4935                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4936                 writel((u32)val64, add);
4937                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4938                 writel((u32) (val64 >> 32), (add + 4));
4939
4940                 if (vlan_tag_strip != 1) {
4941                         val64 = readq(&bar0->rx_pa_cfg);
4942                         val64 &= ~RX_PA_CFG_STRIP_VLAN_TAG;
4943                         writeq(val64, &bar0->rx_pa_cfg);
4944                         sp->vlan_strip_flag = 0;
4945                 }
4946
4947                 val64 = readq(&bar0->mac_cfg);
4948                 sp->promisc_flg = 1;
4949                 DBG_PRINT(INFO_DBG, "%s: entered promiscuous mode\n",
4950                           dev->name);
4951         } else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) {
4952                 /*  Remove the NIC from promiscuous mode */
4953                 add = &bar0->mac_cfg;
4954                 val64 = readq(&bar0->mac_cfg);
4955                 val64 &= ~MAC_CFG_RMAC_PROM_ENABLE;
4956
4957                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4958                 writel((u32)val64, add);
4959                 writeq(RMAC_CFG_KEY(0x4C0D), &bar0->rmac_cfg_key);
4960                 writel((u32) (val64 >> 32), (add + 4));
4961
4962                 if (vlan_tag_strip != 0) {
4963                         val64 = readq(&bar0->rx_pa_cfg);
4964                         val64 |= RX_PA_CFG_STRIP_VLAN_TAG;
4965                         writeq(val64, &bar0->rx_pa_cfg);
4966                         sp->vlan_strip_flag = 1;
4967                 }
4968
4969                 val64 = readq(&bar0->mac_cfg);
4970                 sp->promisc_flg = 0;
4971                 DBG_PRINT(INFO_DBG, "%s: left promiscuous mode\n", dev->name);
4972         }
4973
4974         /*  Update individual M_CAST address list */
4975         if ((!sp->m_cast_flg) && netdev_mc_count(dev)) {
4976                 if (netdev_mc_count(dev) >
4977                     (config->max_mc_addr - config->max_mac_addr)) {
4978                         DBG_PRINT(ERR_DBG,
4979                                   "%s: No more Rx filters can be added - "
4980                                   "please enable ALL_MULTI instead\n",
4981                                   dev->name);
4982                         return;
4983                 }
4984
4985                 prev_cnt = sp->mc_addr_count;
4986                 sp->mc_addr_count = netdev_mc_count(dev);
4987
4988                 /* Clear out the previous list of Mc in the H/W. */
4989                 for (i = 0; i < prev_cnt; i++) {
4990                         writeq(RMAC_ADDR_DATA0_MEM_ADDR(dis_addr),
4991                                &bar0->rmac_addr_data0_mem);
4992                         writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
4993                                &bar0->rmac_addr_data1_mem);
4994                         val64 = RMAC_ADDR_CMD_MEM_WE |
4995                                 RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
4996                                 RMAC_ADDR_CMD_MEM_OFFSET
4997                                 (config->mc_start_offset + i);
4998                         writeq(val64, &bar0->rmac_addr_cmd_mem);
4999
5000                         /* Wait for command completes */
5001                         if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5002                                                   RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5003                                                   S2IO_BIT_RESET)) {
5004                                 DBG_PRINT(ERR_DBG,
5005                                           "%s: Adding Multicasts failed\n",
5006                                           dev->name);
5007                                 return;
5008                         }
5009                 }
5010
5011                 /* Create the new Rx filter list and update the same in H/W. */
5012                 i = 0;
5013                 netdev_for_each_mc_addr(ha, dev) {
5014                         mac_addr = 0;
5015                         for (j = 0; j < ETH_ALEN; j++) {
5016                                 mac_addr |= ha->addr[j];
5017                                 mac_addr <<= 8;
5018                         }
5019                         mac_addr >>= 8;
5020                         writeq(RMAC_ADDR_DATA0_MEM_ADDR(mac_addr),
5021                                &bar0->rmac_addr_data0_mem);
5022                         writeq(RMAC_ADDR_DATA1_MEM_MASK(0ULL),
5023                                &bar0->rmac_addr_data1_mem);
5024                         val64 = RMAC_ADDR_CMD_MEM_WE |
5025                                 RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5026                                 RMAC_ADDR_CMD_MEM_OFFSET
5027                                 (i + config->mc_start_offset);
5028                         writeq(val64, &bar0->rmac_addr_cmd_mem);
5029
5030                         /* Wait for command completes */
5031                         if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5032                                                   RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5033                                                   S2IO_BIT_RESET)) {
5034                                 DBG_PRINT(ERR_DBG,
5035                                           "%s: Adding Multicasts failed\n",
5036                                           dev->name);
5037                                 return;
5038                         }
5039                         i++;
5040                 }
5041         }
5042 }
5043
5044 /* read from CAM unicast & multicast addresses and store it in
5045  * def_mac_addr structure
5046  */
5047 static void do_s2io_store_unicast_mc(struct s2io_nic *sp)
5048 {
5049         int offset;
5050         u64 mac_addr = 0x0;
5051         struct config_param *config = &sp->config;
5052
5053         /* store unicast & multicast mac addresses */
5054         for (offset = 0; offset < config->max_mc_addr; offset++) {
5055                 mac_addr = do_s2io_read_unicast_mc(sp, offset);
5056                 /* if read fails disable the entry */
5057                 if (mac_addr == FAILURE)
5058                         mac_addr = S2IO_DISABLE_MAC_ENTRY;
5059                 do_s2io_copy_mac_addr(sp, offset, mac_addr);
5060         }
5061 }
5062
5063 /* restore unicast & multicast MAC to CAM from def_mac_addr structure */
5064 static void do_s2io_restore_unicast_mc(struct s2io_nic *sp)
5065 {
5066         int offset;
5067         struct config_param *config = &sp->config;
5068         /* restore unicast mac address */
5069         for (offset = 0; offset < config->max_mac_addr; offset++)
5070                 do_s2io_prog_unicast(sp->dev,
5071                                      sp->def_mac_addr[offset].mac_addr);
5072
5073         /* restore multicast mac address */
5074         for (offset = config->mc_start_offset;
5075              offset < config->max_mc_addr; offset++)
5076                 do_s2io_add_mc(sp, sp->def_mac_addr[offset].mac_addr);
5077 }
5078
5079 /* add a multicast MAC address to CAM */
5080 static int do_s2io_add_mc(struct s2io_nic *sp, u8 *addr)
5081 {
5082         int i;
5083         u64 mac_addr = 0;
5084         struct config_param *config = &sp->config;
5085
5086         for (i = 0; i < ETH_ALEN; i++) {
5087                 mac_addr <<= 8;
5088                 mac_addr |= addr[i];
5089         }
5090         if ((0ULL == mac_addr) || (mac_addr == S2IO_DISABLE_MAC_ENTRY))
5091                 return SUCCESS;
5092
5093         /* check if the multicast mac already preset in CAM */
5094         for (i = config->mc_start_offset; i < config->max_mc_addr; i++) {
5095                 u64 tmp64;
5096                 tmp64 = do_s2io_read_unicast_mc(sp, i);
5097                 if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5098                         break;
5099
5100                 if (tmp64 == mac_addr)
5101                         return SUCCESS;
5102         }
5103         if (i == config->max_mc_addr) {
5104                 DBG_PRINT(ERR_DBG,
5105                           "CAM full no space left for multicast MAC\n");
5106                 return FAILURE;
5107         }
5108         /* Update the internal structure with this new mac address */
5109         do_s2io_copy_mac_addr(sp, i, mac_addr);
5110
5111         return do_s2io_add_mac(sp, mac_addr, i);
5112 }
5113
5114 /* add MAC address to CAM */
5115 static int do_s2io_add_mac(struct s2io_nic *sp, u64 addr, int off)
5116 {
5117         u64 val64;
5118         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5119
5120         writeq(RMAC_ADDR_DATA0_MEM_ADDR(addr),
5121                &bar0->rmac_addr_data0_mem);
5122
5123         val64 = RMAC_ADDR_CMD_MEM_WE | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5124                 RMAC_ADDR_CMD_MEM_OFFSET(off);
5125         writeq(val64, &bar0->rmac_addr_cmd_mem);
5126
5127         /* Wait till command completes */
5128         if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5129                                   RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5130                                   S2IO_BIT_RESET)) {
5131                 DBG_PRINT(INFO_DBG, "do_s2io_add_mac failed\n");
5132                 return FAILURE;
5133         }
5134         return SUCCESS;
5135 }
5136 /* deletes a specified unicast/multicast mac entry from CAM */
5137 static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr)
5138 {
5139         int offset;
5140         u64 dis_addr = S2IO_DISABLE_MAC_ENTRY, tmp64;
5141         struct config_param *config = &sp->config;
5142
5143         for (offset = 1;
5144              offset < config->max_mc_addr; offset++) {
5145                 tmp64 = do_s2io_read_unicast_mc(sp, offset);
5146                 if (tmp64 == addr) {
5147                         /* disable the entry by writing  0xffffffffffffULL */
5148                         if (do_s2io_add_mac(sp, dis_addr, offset) ==  FAILURE)
5149                                 return FAILURE;
5150                         /* store the new mac list from CAM */
5151                         do_s2io_store_unicast_mc(sp);
5152                         return SUCCESS;
5153                 }
5154         }
5155         DBG_PRINT(ERR_DBG, "MAC address 0x%llx not found in CAM\n",
5156                   (unsigned long long)addr);
5157         return FAILURE;
5158 }
5159
5160 /* read mac entries from CAM */
5161 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset)
5162 {
5163         u64 tmp64, val64;
5164         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5165
5166         /* read mac addr */
5167         val64 = RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
5168                 RMAC_ADDR_CMD_MEM_OFFSET(offset);
5169         writeq(val64, &bar0->rmac_addr_cmd_mem);
5170
5171         /* Wait till command completes */
5172         if (wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
5173                                   RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
5174                                   S2IO_BIT_RESET)) {
5175                 DBG_PRINT(INFO_DBG, "do_s2io_read_unicast_mc failed\n");
5176                 return FAILURE;
5177         }
5178         tmp64 = readq(&bar0->rmac_addr_data0_mem);
5179
5180         return tmp64 >> 16;
5181 }
5182
5183 /*
5184  * s2io_set_mac_addr - driver entry point
5185  */
5186
5187 static int s2io_set_mac_addr(struct net_device *dev, void *p)
5188 {
5189         struct sockaddr *addr = p;
5190
5191         if (!is_valid_ether_addr(addr->sa_data))
5192                 return -EADDRNOTAVAIL;
5193
5194         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5195
5196         /* store the MAC address in CAM */
5197         return do_s2io_prog_unicast(dev, dev->dev_addr);
5198 }
5199 /**
5200  *  do_s2io_prog_unicast - Programs the Xframe mac address
5201  *  @dev : pointer to the device structure.
5202  *  @addr: a uchar pointer to the new mac address which is to be set.
5203  *  Description : This procedure will program the Xframe to receive
5204  *  frames with new Mac Address
5205  *  Return value: SUCCESS on success and an appropriate (-)ve integer
5206  *  as defined in errno.h file on failure.
5207  */
5208
5209 static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr)
5210 {
5211         struct s2io_nic *sp = netdev_priv(dev);
5212         register u64 mac_addr = 0, perm_addr = 0;
5213         int i;
5214         u64 tmp64;
5215         struct config_param *config = &sp->config;
5216
5217         /*
5218          * Set the new MAC address as the new unicast filter and reflect this
5219          * change on the device address registered with the OS. It will be
5220          * at offset 0.
5221          */
5222         for (i = 0; i < ETH_ALEN; i++) {
5223                 mac_addr <<= 8;
5224                 mac_addr |= addr[i];
5225                 perm_addr <<= 8;
5226                 perm_addr |= sp->def_mac_addr[0].mac_addr[i];
5227         }
5228
5229         /* check if the dev_addr is different than perm_addr */
5230         if (mac_addr == perm_addr)
5231                 return SUCCESS;
5232
5233         /* check if the mac already preset in CAM */
5234         for (i = 1; i < config->max_mac_addr; i++) {
5235                 tmp64 = do_s2io_read_unicast_mc(sp, i);
5236                 if (tmp64 == S2IO_DISABLE_MAC_ENTRY) /* CAM entry is empty */
5237                         break;
5238
5239                 if (tmp64 == mac_addr) {
5240                         DBG_PRINT(INFO_DBG,
5241                                   "MAC addr:0x%llx already present in CAM\n",
5242                                   (unsigned long long)mac_addr);
5243                         return SUCCESS;
5244                 }
5245         }
5246         if (i == config->max_mac_addr) {
5247                 DBG_PRINT(ERR_DBG, "CAM full no space left for Unicast MAC\n");
5248                 return FAILURE;
5249         }
5250         /* Update the internal structure with this new mac address */
5251         do_s2io_copy_mac_addr(sp, i, mac_addr);
5252
5253         return do_s2io_add_mac(sp, mac_addr, i);
5254 }
5255
5256 /**
5257  * s2io_ethtool_set_link_ksettings - Sets different link parameters.
5258  * @dev : pointer to netdev
5259  * @cmd: pointer to the structure with parameters given by ethtool to set
5260  * link information.
5261  * Description:
5262  * The function sets different link parameters provided by the user onto
5263  * the NIC.
5264  * Return value:
5265  * 0 on success.
5266  */
5267
5268 static int
5269 s2io_ethtool_set_link_ksettings(struct net_device *dev,
5270                                 const struct ethtool_link_ksettings *cmd)
5271 {
5272         struct s2io_nic *sp = netdev_priv(dev);
5273         if ((cmd->base.autoneg == AUTONEG_ENABLE) ||
5274             (cmd->base.speed != SPEED_10000) ||
5275             (cmd->base.duplex != DUPLEX_FULL))
5276                 return -EINVAL;
5277         else {
5278                 s2io_close(sp->dev);
5279                 s2io_open(sp->dev);
5280         }
5281
5282         return 0;
5283 }
5284
5285 /**
5286  * s2io_ethtol_get_link_ksettings - Return link specific information.
5287  * @dev: pointer to netdev
5288  * @cmd : pointer to the structure with parameters given by ethtool
5289  * to return link information.
5290  * Description:
5291  * Returns link specific information like speed, duplex etc.. to ethtool.
5292  * Return value :
5293  * return 0 on success.
5294  */
5295
5296 static int
5297 s2io_ethtool_get_link_ksettings(struct net_device *dev,
5298                                 struct ethtool_link_ksettings *cmd)
5299 {
5300         struct s2io_nic *sp = netdev_priv(dev);
5301
5302         ethtool_link_ksettings_zero_link_mode(cmd, supported);
5303         ethtool_link_ksettings_add_link_mode(cmd, supported, 10000baseT_Full);
5304         ethtool_link_ksettings_add_link_mode(cmd, supported, FIBRE);
5305
5306         ethtool_link_ksettings_zero_link_mode(cmd, advertising);
5307         ethtool_link_ksettings_add_link_mode(cmd, advertising, 10000baseT_Full);
5308         ethtool_link_ksettings_add_link_mode(cmd, advertising, FIBRE);
5309
5310         cmd->base.port = PORT_FIBRE;
5311
5312         if (netif_carrier_ok(sp->dev)) {
5313                 cmd->base.speed = SPEED_10000;
5314                 cmd->base.duplex = DUPLEX_FULL;
5315         } else {
5316                 cmd->base.speed = SPEED_UNKNOWN;
5317                 cmd->base.duplex = DUPLEX_UNKNOWN;
5318         }
5319
5320         cmd->base.autoneg = AUTONEG_DISABLE;
5321         return 0;
5322 }
5323
5324 /**
5325  * s2io_ethtool_gdrvinfo - Returns driver specific information.
5326  * @dev: pointer to netdev
5327  * @info : pointer to the structure with parameters given by ethtool to
5328  * return driver information.
5329  * Description:
5330  * Returns driver specefic information like name, version etc.. to ethtool.
5331  * Return value:
5332  *  void
5333  */
5334
5335 static void s2io_ethtool_gdrvinfo(struct net_device *dev,
5336                                   struct ethtool_drvinfo *info)
5337 {
5338         struct s2io_nic *sp = netdev_priv(dev);
5339
5340         strlcpy(info->driver, s2io_driver_name, sizeof(info->driver));
5341         strlcpy(info->version, s2io_driver_version, sizeof(info->version));
5342         strlcpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info));
5343 }
5344
5345 /**
5346  *  s2io_ethtool_gregs - dumps the entire space of Xfame into the buffer.
5347  *  @dev: pointer to netdev
5348  *  @regs : pointer to the structure with parameters given by ethtool for
5349  *          dumping the registers.
5350  *  @space: The input argument into which all the registers are dumped.
5351  *  Description:
5352  *  Dumps the entire register space of xFrame NIC into the user given
5353  *  buffer area.
5354  * Return value :
5355  * void .
5356  */
5357
5358 static void s2io_ethtool_gregs(struct net_device *dev,
5359                                struct ethtool_regs *regs, void *space)
5360 {
5361         int i;
5362         u64 reg;
5363         u8 *reg_space = (u8 *)space;
5364         struct s2io_nic *sp = netdev_priv(dev);
5365
5366         regs->len = XENA_REG_SPACE;
5367         regs->version = sp->pdev->subsystem_device;
5368
5369         for (i = 0; i < regs->len; i += 8) {
5370                 reg = readq(sp->bar0 + i);
5371                 memcpy((reg_space + i), &reg, 8);
5372         }
5373 }
5374
5375 /*
5376  *  s2io_set_led - control NIC led
5377  */
5378 static void s2io_set_led(struct s2io_nic *sp, bool on)
5379 {
5380         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5381         u16 subid = sp->pdev->subsystem_device;
5382         u64 val64;
5383
5384         if ((sp->device_type == XFRAME_II_DEVICE) ||
5385             ((subid & 0xFF) >= 0x07)) {
5386                 val64 = readq(&bar0->gpio_control);
5387                 if (on)
5388                         val64 |= GPIO_CTRL_GPIO_0;
5389                 else
5390                         val64 &= ~GPIO_CTRL_GPIO_0;
5391
5392                 writeq(val64, &bar0->gpio_control);
5393         } else {
5394                 val64 = readq(&bar0->adapter_control);
5395                 if (on)
5396                         val64 |= ADAPTER_LED_ON;
5397                 else
5398                         val64 &= ~ADAPTER_LED_ON;
5399
5400                 writeq(val64, &bar0->adapter_control);
5401         }
5402
5403 }
5404
5405 /**
5406  * s2io_ethtool_set_led - To physically identify the nic on the system.
5407  * @dev : network device
5408  * @state: led setting
5409  *
5410  * Description: Used to physically identify the NIC on the system.
5411  * The Link LED will blink for a time specified by the user for
5412  * identification.
5413  * NOTE: The Link has to be Up to be able to blink the LED. Hence
5414  * identification is possible only if it's link is up.
5415  */
5416
5417 static int s2io_ethtool_set_led(struct net_device *dev,
5418                                 enum ethtool_phys_id_state state)
5419 {
5420         struct s2io_nic *sp = netdev_priv(dev);
5421         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5422         u16 subid = sp->pdev->subsystem_device;
5423
5424         if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) {
5425                 u64 val64 = readq(&bar0->adapter_control);
5426                 if (!(val64 & ADAPTER_CNTL_EN)) {
5427                         pr_err("Adapter Link down, cannot blink LED\n");
5428                         return -EAGAIN;
5429                 }
5430         }
5431
5432         switch (state) {
5433         case ETHTOOL_ID_ACTIVE:
5434                 sp->adapt_ctrl_org = readq(&bar0->gpio_control);
5435                 return 1;       /* cycle on/off once per second */
5436
5437         case ETHTOOL_ID_ON:
5438                 s2io_set_led(sp, true);
5439                 break;
5440
5441         case ETHTOOL_ID_OFF:
5442                 s2io_set_led(sp, false);
5443                 break;
5444
5445         case ETHTOOL_ID_INACTIVE:
5446                 if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid))
5447                         writeq(sp->adapt_ctrl_org, &bar0->gpio_control);
5448         }
5449
5450         return 0;
5451 }
5452
5453 static void s2io_ethtool_gringparam(struct net_device *dev,
5454                                     struct ethtool_ringparam *ering)
5455 {
5456         struct s2io_nic *sp = netdev_priv(dev);
5457         int i, tx_desc_count = 0, rx_desc_count = 0;
5458
5459         if (sp->rxd_mode == RXD_MODE_1) {
5460                 ering->rx_max_pending = MAX_RX_DESC_1;
5461                 ering->rx_jumbo_max_pending = MAX_RX_DESC_1;
5462         } else {
5463                 ering->rx_max_pending = MAX_RX_DESC_2;
5464                 ering->rx_jumbo_max_pending = MAX_RX_DESC_2;
5465         }
5466
5467         ering->tx_max_pending = MAX_TX_DESC;
5468
5469         for (i = 0; i < sp->config.rx_ring_num; i++)
5470                 rx_desc_count += sp->config.rx_cfg[i].num_rxd;
5471         ering->rx_pending = rx_desc_count;
5472         ering->rx_jumbo_pending = rx_desc_count;
5473
5474         for (i = 0; i < sp->config.tx_fifo_num; i++)
5475                 tx_desc_count += sp->config.tx_cfg[i].fifo_len;
5476         ering->tx_pending = tx_desc_count;
5477         DBG_PRINT(INFO_DBG, "max txds: %d\n", sp->config.max_txds);
5478 }
5479
5480 /**
5481  * s2io_ethtool_getpause_data -Pause frame frame generation and reception.
5482  * @dev: pointer to netdev
5483  * @ep : pointer to the structure with pause parameters given by ethtool.
5484  * Description:
5485  * Returns the Pause frame generation and reception capability of the NIC.
5486  * Return value:
5487  *  void
5488  */
5489 static void s2io_ethtool_getpause_data(struct net_device *dev,
5490                                        struct ethtool_pauseparam *ep)
5491 {
5492         u64 val64;
5493         struct s2io_nic *sp = netdev_priv(dev);
5494         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5495
5496         val64 = readq(&bar0->rmac_pause_cfg);
5497         if (val64 & RMAC_PAUSE_GEN_ENABLE)
5498                 ep->tx_pause = true;
5499         if (val64 & RMAC_PAUSE_RX_ENABLE)
5500                 ep->rx_pause = true;
5501         ep->autoneg = false;
5502 }
5503
5504 /**
5505  * s2io_ethtool_setpause_data -  set/reset pause frame generation.
5506  * @dev: pointer to netdev
5507  * @ep : pointer to the structure with pause parameters given by ethtool.
5508  * Description:
5509  * It can be used to set or reset Pause frame generation or reception
5510  * support of the NIC.
5511  * Return value:
5512  * int, returns 0 on Success
5513  */
5514
5515 static int s2io_ethtool_setpause_data(struct net_device *dev,
5516                                       struct ethtool_pauseparam *ep)
5517 {
5518         u64 val64;
5519         struct s2io_nic *sp = netdev_priv(dev);
5520         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5521
5522         val64 = readq(&bar0->rmac_pause_cfg);
5523         if (ep->tx_pause)
5524                 val64 |= RMAC_PAUSE_GEN_ENABLE;
5525         else
5526                 val64 &= ~RMAC_PAUSE_GEN_ENABLE;
5527         if (ep->rx_pause)
5528                 val64 |= RMAC_PAUSE_RX_ENABLE;
5529         else
5530                 val64 &= ~RMAC_PAUSE_RX_ENABLE;
5531         writeq(val64, &bar0->rmac_pause_cfg);
5532         return 0;
5533 }
5534
5535 #define S2IO_DEV_ID             5
5536 /**
5537  * read_eeprom - reads 4 bytes of data from user given offset.
5538  * @sp : private member of the device structure, which is a pointer to the
5539  *      s2io_nic structure.
5540  * @off : offset at which the data must be written
5541  * @data : Its an output parameter where the data read at the given
5542  *      offset is stored.
5543  * Description:
5544  * Will read 4 bytes of data from the user given offset and return the
5545  * read data.
5546  * NOTE: Will allow to read only part of the EEPROM visible through the
5547  *   I2C bus.
5548  * Return value:
5549  *  -1 on failure and 0 on success.
5550  */
5551 static int read_eeprom(struct s2io_nic *sp, int off, u64 *data)
5552 {
5553         int ret = -1;
5554         u32 exit_cnt = 0;
5555         u64 val64;
5556         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5557
5558         if (sp->device_type == XFRAME_I_DEVICE) {
5559                 val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5560                         I2C_CONTROL_ADDR(off) |
5561                         I2C_CONTROL_BYTE_CNT(0x3) |
5562                         I2C_CONTROL_READ |
5563                         I2C_CONTROL_CNTL_START;
5564                 SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5565
5566                 while (exit_cnt < 5) {
5567                         val64 = readq(&bar0->i2c_control);
5568                         if (I2C_CONTROL_CNTL_END(val64)) {
5569                                 *data = I2C_CONTROL_GET_DATA(val64);
5570                                 ret = 0;
5571                                 break;
5572                         }
5573                         msleep(50);
5574                         exit_cnt++;
5575                 }
5576         }
5577
5578         if (sp->device_type == XFRAME_II_DEVICE) {
5579                 val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5580                         SPI_CONTROL_BYTECNT(0x3) |
5581                         SPI_CONTROL_CMD(0x3) | SPI_CONTROL_ADDR(off);
5582                 SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5583                 val64 |= SPI_CONTROL_REQ;
5584                 SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5585                 while (exit_cnt < 5) {
5586                         val64 = readq(&bar0->spi_control);
5587                         if (val64 & SPI_CONTROL_NACK) {
5588                                 ret = 1;
5589                                 break;
5590                         } else if (val64 & SPI_CONTROL_DONE) {
5591                                 *data = readq(&bar0->spi_data);
5592                                 *data &= 0xffffff;
5593                                 ret = 0;
5594                                 break;
5595                         }
5596                         msleep(50);
5597                         exit_cnt++;
5598                 }
5599         }
5600         return ret;
5601 }
5602
5603 /**
5604  *  write_eeprom - actually writes the relevant part of the data value.
5605  *  @sp : private member of the device structure, which is a pointer to the
5606  *       s2io_nic structure.
5607  *  @off : offset at which the data must be written
5608  *  @data : The data that is to be written
5609  *  @cnt : Number of bytes of the data that are actually to be written into
5610  *  the Eeprom. (max of 3)
5611  * Description:
5612  *  Actually writes the relevant part of the data value into the Eeprom
5613  *  through the I2C bus.
5614  * Return value:
5615  *  0 on success, -1 on failure.
5616  */
5617
5618 static int write_eeprom(struct s2io_nic *sp, int off, u64 data, int cnt)
5619 {
5620         int exit_cnt = 0, ret = -1;
5621         u64 val64;
5622         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5623
5624         if (sp->device_type == XFRAME_I_DEVICE) {
5625                 val64 = I2C_CONTROL_DEV_ID(S2IO_DEV_ID) |
5626                         I2C_CONTROL_ADDR(off) |
5627                         I2C_CONTROL_BYTE_CNT(cnt) |
5628                         I2C_CONTROL_SET_DATA((u32)data) |
5629                         I2C_CONTROL_CNTL_START;
5630                 SPECIAL_REG_WRITE(val64, &bar0->i2c_control, LF);
5631
5632                 while (exit_cnt < 5) {
5633                         val64 = readq(&bar0->i2c_control);
5634                         if (I2C_CONTROL_CNTL_END(val64)) {
5635                                 if (!(val64 & I2C_CONTROL_NACK))
5636                                         ret = 0;
5637                                 break;
5638                         }
5639                         msleep(50);
5640                         exit_cnt++;
5641                 }
5642         }
5643
5644         if (sp->device_type == XFRAME_II_DEVICE) {
5645                 int write_cnt = (cnt == 8) ? 0 : cnt;
5646                 writeq(SPI_DATA_WRITE(data, (cnt << 3)), &bar0->spi_data);
5647
5648                 val64 = SPI_CONTROL_KEY(0x9) | SPI_CONTROL_SEL1 |
5649                         SPI_CONTROL_BYTECNT(write_cnt) |
5650                         SPI_CONTROL_CMD(0x2) | SPI_CONTROL_ADDR(off);
5651                 SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5652                 val64 |= SPI_CONTROL_REQ;
5653                 SPECIAL_REG_WRITE(val64, &bar0->spi_control, LF);
5654                 while (exit_cnt < 5) {
5655                         val64 = readq(&bar0->spi_control);
5656                         if (val64 & SPI_CONTROL_NACK) {
5657                                 ret = 1;
5658                                 break;
5659                         } else if (val64 & SPI_CONTROL_DONE) {
5660                                 ret = 0;
5661                                 break;
5662                         }
5663                         msleep(50);
5664                         exit_cnt++;
5665                 }
5666         }
5667         return ret;
5668 }
5669 static void s2io_vpd_read(struct s2io_nic *nic)
5670 {
5671         u8 *vpd_data;
5672         u8 data;
5673         int i = 0, cnt, len, fail = 0;
5674         int vpd_addr = 0x80;
5675         struct swStat *swstats = &nic->mac_control.stats_info->sw_stat;
5676
5677         if (nic->device_type == XFRAME_II_DEVICE) {
5678                 strcpy(nic->product_name, "Xframe II 10GbE network adapter");
5679                 vpd_addr = 0x80;
5680         } else {
5681                 strcpy(nic->product_name, "Xframe I 10GbE network adapter");
5682                 vpd_addr = 0x50;
5683         }
5684         strcpy(nic->serial_num, "NOT AVAILABLE");
5685
5686         vpd_data = kmalloc(256, GFP_KERNEL);
5687         if (!vpd_data) {
5688                 swstats->mem_alloc_fail_cnt++;
5689                 return;
5690         }
5691         swstats->mem_allocated += 256;
5692
5693         for (i = 0; i < 256; i += 4) {
5694                 pci_write_config_byte(nic->pdev, (vpd_addr + 2), i);
5695                 pci_read_config_byte(nic->pdev,  (vpd_addr + 2), &data);
5696                 pci_write_config_byte(nic->pdev, (vpd_addr + 3), 0);
5697                 for (cnt = 0; cnt < 5; cnt++) {
5698                         msleep(2);
5699                         pci_read_config_byte(nic->pdev, (vpd_addr + 3), &data);
5700                         if (data == 0x80)
5701                                 break;
5702                 }
5703                 if (cnt >= 5) {
5704                         DBG_PRINT(ERR_DBG, "Read of VPD data failed\n");
5705                         fail = 1;
5706                         break;
5707                 }
5708                 pci_read_config_dword(nic->pdev,  (vpd_addr + 4),
5709                                       (u32 *)&vpd_data[i]);
5710         }
5711
5712         if (!fail) {
5713                 /* read serial number of adapter */
5714                 for (cnt = 0; cnt < 252; cnt++) {
5715                         if ((vpd_data[cnt] == 'S') &&
5716                             (vpd_data[cnt+1] == 'N')) {
5717                                 len = vpd_data[cnt+2];
5718                                 if (len < min(VPD_STRING_LEN, 256-cnt-2)) {
5719                                         memcpy(nic->serial_num,
5720                                                &vpd_data[cnt + 3],
5721                                                len);
5722                                         memset(nic->serial_num+len,
5723                                                0,
5724                                                VPD_STRING_LEN-len);
5725                                         break;
5726                                 }
5727                         }
5728                 }
5729         }
5730
5731         if ((!fail) && (vpd_data[1] < VPD_STRING_LEN)) {
5732                 len = vpd_data[1];
5733                 memcpy(nic->product_name, &vpd_data[3], len);
5734                 nic->product_name[len] = 0;
5735         }
5736         kfree(vpd_data);
5737         swstats->mem_freed += 256;
5738 }
5739
5740 /**
5741  *  s2io_ethtool_geeprom  - reads the value stored in the Eeprom.
5742  *  @dev: pointer to netdev
5743  *  @eeprom : pointer to the user level structure provided by ethtool,
5744  *  containing all relevant information.
5745  *  @data_buf : user defined value to be written into Eeprom.
5746  *  Description: Reads the values stored in the Eeprom at given offset
5747  *  for a given length. Stores these values int the input argument data
5748  *  buffer 'data_buf' and returns these to the caller (ethtool.)
5749  *  Return value:
5750  *  int  0 on success
5751  */
5752
5753 static int s2io_ethtool_geeprom(struct net_device *dev,
5754                                 struct ethtool_eeprom *eeprom, u8 * data_buf)
5755 {
5756         u32 i, valid;
5757         u64 data;
5758         struct s2io_nic *sp = netdev_priv(dev);
5759
5760         eeprom->magic = sp->pdev->vendor | (sp->pdev->device << 16);
5761
5762         if ((eeprom->offset + eeprom->len) > (XENA_EEPROM_SPACE))
5763                 eeprom->len = XENA_EEPROM_SPACE - eeprom->offset;
5764
5765         for (i = 0; i < eeprom->len; i += 4) {
5766                 if (read_eeprom(sp, (eeprom->offset + i), &data)) {
5767                         DBG_PRINT(ERR_DBG, "Read of EEPROM failed\n");
5768                         return -EFAULT;
5769                 }
5770                 valid = INV(data);
5771                 memcpy((data_buf + i), &valid, 4);
5772         }
5773         return 0;
5774 }
5775
5776 /**
5777  *  s2io_ethtool_seeprom - tries to write the user provided value in Eeprom
5778  *  @dev: pointer to netdev
5779  *  @eeprom : pointer to the user level structure provided by ethtool,
5780  *  containing all relevant information.
5781  *  @data_buf : user defined value to be written into Eeprom.
5782  *  Description:
5783  *  Tries to write the user provided value in the Eeprom, at the offset
5784  *  given by the user.
5785  *  Return value:
5786  *  0 on success, -EFAULT on failure.
5787  */
5788
5789 static int s2io_ethtool_seeprom(struct net_device *dev,
5790                                 struct ethtool_eeprom *eeprom,
5791                                 u8 *data_buf)
5792 {
5793         int len = eeprom->len, cnt = 0;
5794         u64 valid = 0, data;
5795         struct s2io_nic *sp = netdev_priv(dev);
5796
5797         if (eeprom->magic != (sp->pdev->vendor | (sp->pdev->device << 16))) {
5798                 DBG_PRINT(ERR_DBG,
5799                           "ETHTOOL_WRITE_EEPROM Err: "
5800                           "Magic value is wrong, it is 0x%x should be 0x%x\n",
5801                           (sp->pdev->vendor | (sp->pdev->device << 16)),
5802                           eeprom->magic);
5803                 return -EFAULT;
5804         }
5805
5806         while (len) {
5807                 data = (u32)data_buf[cnt] & 0x000000FF;
5808                 if (data)
5809                         valid = (u32)(data << 24);
5810                 else
5811                         valid = data;
5812
5813                 if (write_eeprom(sp, (eeprom->offset + cnt), valid, 0)) {
5814                         DBG_PRINT(ERR_DBG,
5815                                   "ETHTOOL_WRITE_EEPROM Err: "
5816                                   "Cannot write into the specified offset\n");
5817                         return -EFAULT;
5818                 }
5819                 cnt++;
5820                 len--;
5821         }
5822
5823         return 0;
5824 }
5825
5826 /**
5827  * s2io_register_test - reads and writes into all clock domains.
5828  * @sp : private member of the device structure, which is a pointer to the
5829  * s2io_nic structure.
5830  * @data : variable that returns the result of each of the test conducted b
5831  * by the driver.
5832  * Description:
5833  * Read and write into all clock domains. The NIC has 3 clock domains,
5834  * see that registers in all the three regions are accessible.
5835  * Return value:
5836  * 0 on success.
5837  */
5838
5839 static int s2io_register_test(struct s2io_nic *sp, uint64_t *data)
5840 {
5841         struct XENA_dev_config __iomem *bar0 = sp->bar0;
5842         u64 val64 = 0, exp_val;
5843         int fail = 0;
5844
5845         val64 = readq(&bar0->pif_rd_swapper_fb);
5846         if (val64 != 0x123456789abcdefULL) {
5847                 fail = 1;
5848                 DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 1);
5849         }
5850
5851         val64 = readq(&bar0->rmac_pause_cfg);
5852         if (val64 != 0xc000ffff00000000ULL) {
5853                 fail = 1;
5854                 DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 2);
5855         }
5856
5857         val64 = readq(&bar0->rx_queue_cfg);
5858         if (sp->device_type == XFRAME_II_DEVICE)
5859                 exp_val = 0x0404040404040404ULL;
5860         else
5861                 exp_val = 0x0808080808080808ULL;
5862         if (val64 != exp_val) {
5863                 fail = 1;
5864                 DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 3);
5865         }
5866
5867         val64 = readq(&bar0->xgxs_efifo_cfg);
5868         if (val64 != 0x000000001923141EULL) {
5869                 fail = 1;
5870                 DBG_PRINT(INFO_DBG, "Read Test level %d fails\n", 4);
5871         }
5872
5873         val64 = 0x5A5A5A5A5A5A5A5AULL;
5874         writeq(val64, &bar0->xmsi_data);
5875         val64 = readq(&bar0->xmsi_data);
5876         if (val64 != 0x5A5A5A5A5A5A5A5AULL) {
5877                 fail = 1;
5878                 DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 1);
5879         }
5880
5881         val64 = 0xA5A5A5A5A5A5A5A5ULL;
5882         writeq(val64, &bar0->xmsi_data);
5883         val64 = readq(&bar0->xmsi_data);
5884         if (val64 != 0xA5A5A5A5A5A5A5A5ULL) {
5885                 fail = 1;
5886                 DBG_PRINT(ERR_DBG, "Write Test level %d fails\n", 2);
5887         }
5888
5889         *data = fail;
5890         return fail;
5891 }
5892
5893 /**
5894  * s2io_eeprom_test - to verify that EEprom in the xena can be programmed.
5895  * @sp : private member of the device structure, which is a pointer to the
5896  * s2io_nic structure.
5897  * @data:variable that returns the result of each of the test conducted by
5898  * the driver.
5899  * Description:
5900  * Verify that EEPROM in the xena can be programmed using I2C_CONTROL
5901  * register.
5902  * Return value:
5903  * 0 on success.
5904  */
5905
5906 static int s2io_eeprom_test(struct s2io_nic *sp, uint64_t *data)
5907 {
5908         int fail = 0;
5909         u64 ret_data, org_4F0, org_7F0;
5910         u8 saved_4F0 = 0, saved_7F0 = 0;
5911         struct net_device *dev = sp->dev;
5912
5913         /* Test Write Error at offset 0 */
5914         /* Note that SPI interface allows write access to all areas
5915          * of EEPROM. Hence doing all negative testing only for Xframe I.
5916          */
5917         if (sp->device_type == XFRAME_I_DEVICE)
5918                 if (!write_eeprom(sp, 0, 0, 3))
5919                         fail = 1;
5920
5921         /* Save current values at offsets 0x4F0 and 0x7F0 */
5922         if (!read_eeprom(sp, 0x4F0, &org_4F0))
5923                 saved_4F0 = 1;
5924         if (!read_eeprom(sp, 0x7F0, &org_7F0))
5925                 saved_7F0 = 1;
5926
5927         /* Test Write at offset 4f0 */
5928         if (write_eeprom(sp, 0x4F0, 0x012345, 3))
5929                 fail = 1;
5930         if (read_eeprom(sp, 0x4F0, &ret_data))
5931                 fail = 1;
5932
5933         if (ret_data != 0x012345) {
5934                 DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x4F0. "
5935                           "Data written %llx Data read %llx\n",
5936                           dev->name, (unsigned long long)0x12345,
5937                           (unsigned long long)ret_data);
5938                 fail = 1;
5939         }
5940
5941         /* Reset the EEPROM data go FFFF */
5942         write_eeprom(sp, 0x4F0, 0xFFFFFF, 3);
5943
5944         /* Test Write Request Error at offset 0x7c */
5945         if (sp->device_type == XFRAME_I_DEVICE)
5946                 if (!write_eeprom(sp, 0x07C, 0, 3))
5947                         fail = 1;
5948
5949         /* Test Write Request at offset 0x7f0 */
5950         if (write_eeprom(sp, 0x7F0, 0x012345, 3))
5951                 fail = 1;
5952         if (read_eeprom(sp, 0x7F0, &ret_data))
5953                 fail = 1;
5954
5955         if (ret_data != 0x012345) {
5956                 DBG_PRINT(ERR_DBG, "%s: eeprom test error at offset 0x7F0. "
5957                           "Data written %llx Data read %llx\n",
5958                           dev->name, (unsigned long long)0x12345,
5959                           (unsigned long long)ret_data);
5960                 fail = 1;
5961         }
5962
5963         /* Reset the EEPROM data go FFFF */
5964         write_eeprom(sp, 0x7F0, 0xFFFFFF, 3);
5965
5966         if (sp->device_type == XFRAME_I_DEVICE) {
5967                 /* Test Write Error at offset 0x80 */
5968                 if (!write_eeprom(sp, 0x080, 0, 3))
5969                         fail = 1;
5970
5971                 /* Test Write Error at offset 0xfc */
5972                 if (!write_eeprom(sp, 0x0FC, 0, 3))
5973                         fail = 1;
5974
5975                 /* Test Write Error at offset 0x100 */
5976                 if (!write_eeprom(sp, 0x100, 0, 3))
5977                         fail = 1;
5978
5979                 /* Test Write Error at offset 4ec */
5980                 if (!write_eeprom(sp, 0x4EC, 0, 3))
5981                         fail = 1;
5982         }
5983
5984         /* Restore values at offsets 0x4F0 and 0x7F0 */
5985         if (saved_4F0)
5986                 write_eeprom(sp, 0x4F0, org_4F0, 3);
5987         if (saved_7F0)
5988                 write_eeprom(sp, 0x7F0, org_7F0, 3);
5989
5990         *data = fail;
5991         return fail;
5992 }
5993
5994 /**
5995  * s2io_bist_test - invokes the MemBist test of the card .
5996  * @sp : private member of the device structure, which is a pointer to the
5997  * s2io_nic structure.
5998  * @data:variable that returns the result of each of the test conducted by
5999  * the driver.
6000  * Description:
6001  * This invokes the MemBist test of the card. We give around
6002  * 2 secs time for the Test to complete. If it's still not complete
6003  * within this peiod, we consider that the test failed.
6004  * Return value:
6005  * 0 on success and -1 on failure.
6006  */
6007
6008 static int s2io_bist_test(struct s2io_nic *sp, uint64_t *data)
6009 {
6010         u8 bist = 0;
6011         int cnt = 0, ret = -1;
6012
6013         pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6014         bist |= PCI_BIST_START;
6015         pci_write_config_word(sp->pdev, PCI_BIST, bist);
6016
6017         while (cnt < 20) {
6018                 pci_read_config_byte(sp->pdev, PCI_BIST, &bist);
6019                 if (!(bist & PCI_BIST_START)) {
6020                         *data = (bist & PCI_BIST_CODE_MASK);
6021                         ret = 0;
6022                         break;
6023                 }
6024                 msleep(100);
6025                 cnt++;
6026         }
6027
6028         return ret;
6029 }
6030
6031 /**
6032  * s2io_link_test - verifies the link state of the nic
6033  * @sp: private member of the device structure, which is a pointer to the
6034  * s2io_nic structure.
6035  * @data: variable that returns the result of each of the test conducted by
6036  * the driver.
6037  * Description:
6038  * The function verifies the link state of the NIC and updates the input
6039  * argument 'data' appropriately.
6040  * Return value:
6041  * 0 on success.
6042  */
6043
6044 static int s2io_link_test(struct s2io_nic *sp, uint64_t *data)
6045 {
6046         struct XENA_dev_config __iomem *bar0 = sp->bar0;
6047         u64 val64;
6048
6049         val64 = readq(&bar0->adapter_status);
6050         if (!(LINK_IS_UP(val64)))
6051                 *data = 1;
6052         else
6053                 *data = 0;
6054
6055         return *data;
6056 }
6057
6058 /**
6059  * s2io_rldram_test - offline test for access to the RldRam chip on the NIC
6060  * @sp: private member of the device structure, which is a pointer to the
6061  * s2io_nic structure.
6062  * @data: variable that returns the result of each of the test
6063  * conducted by the driver.
6064  * Description:
6065  *  This is one of the offline test that tests the read and write
6066  *  access to the RldRam chip on the NIC.
6067  * Return value:
6068  *  0 on success.
6069  */
6070
6071 static int s2io_rldram_test(struct s2io_nic *sp, uint64_t *data)
6072 {
6073         struct XENA_dev_config __iomem *bar0 = sp->bar0;
6074         u64 val64;
6075         int cnt, iteration = 0, test_fail = 0;
6076
6077         val64 = readq(&bar0->adapter_control);
6078         val64 &= ~ADAPTER_ECC_EN;
6079         writeq(val64, &bar0->adapter_control);
6080
6081         val64 = readq(&bar0->mc_rldram_test_ctrl);
6082         val64 |= MC_RLDRAM_TEST_MODE;
6083         SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6084
6085         val64 = readq(&bar0->mc_rldram_mrs);
6086         val64 |= MC_RLDRAM_QUEUE_SIZE_ENABLE;
6087         SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6088
6089         val64 |= MC_RLDRAM_MRS_ENABLE;
6090         SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_mrs, UF);
6091
6092         while (iteration < 2) {
6093                 val64 = 0x55555555aaaa0000ULL;
6094                 if (iteration == 1)
6095                         val64 ^= 0xFFFFFFFFFFFF0000ULL;
6096                 writeq(val64, &bar0->mc_rldram_test_d0);
6097
6098                 val64 = 0xaaaa5a5555550000ULL;
6099                 if (iteration == 1)
6100                         val64 ^= 0xFFFFFFFFFFFF0000ULL;
6101                 writeq(val64, &bar0->mc_rldram_test_d1);
6102
6103                 val64 = 0x55aaaaaaaa5a0000ULL;
6104                 if (iteration == 1)
6105                         val64 ^= 0xFFFFFFFFFFFF0000ULL;
6106                 writeq(val64, &bar0->mc_rldram_test_d2);
6107
6108                 val64 = (u64) (0x0000003ffffe0100ULL);
6109                 writeq(val64, &bar0->mc_rldram_test_add);
6110
6111                 val64 = MC_RLDRAM_TEST_MODE |
6112                         MC_RLDRAM_TEST_WRITE |
6113                         MC_RLDRAM_TEST_GO;
6114                 SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6115
6116                 for (cnt = 0; cnt < 5; cnt++) {
6117                         val64 = readq(&bar0->mc_rldram_test_ctrl);
6118                         if (val64 & MC_RLDRAM_TEST_DONE)
6119                                 break;
6120                         msleep(200);
6121                 }
6122
6123                 if (cnt == 5)
6124                         break;
6125
6126                 val64 = MC_RLDRAM_TEST_MODE | MC_RLDRAM_TEST_GO;
6127                 SPECIAL_REG_WRITE(val64, &bar0->mc_rldram_test_ctrl, LF);
6128
6129                 for (cnt = 0; cnt < 5; cnt++) {
6130                         val64 = readq(&bar0->mc_rldram_test_ctrl);
6131                         if (val64 & MC_RLDRAM_TEST_DONE)
6132                                 break;
6133                         msleep(500);
6134                 }
6135
6136                 if (cnt == 5)
6137                         break;
6138
6139                 val64 = readq(&bar0->mc_rldram_test_ctrl);
6140                 if (!(val64 & MC_RLDRAM_TEST_PASS))
6141                         test_fail = 1;
6142
6143                 iteration++;
6144         }
6145
6146         *data = test_fail;
6147
6148         /* Bring the adapter out of test mode */
6149         SPECIAL_REG_WRITE(0, &bar0->mc_rldram_test_ctrl, LF);
6150
6151         return test_fail;
6152 }
6153
6154 /**
6155  *  s2io_ethtool_test - conducts 6 tsets to determine the health of card.
6156  *  @dev: pointer to netdev
6157  *  @ethtest : pointer to a ethtool command specific structure that will be
6158  *  returned to the user.
6159  *  @data : variable that returns the result of each of the test
6160  * conducted by the driver.
6161  * Description:
6162  *  This function conducts 6 tests ( 4 offline and 2 online) to determine
6163  *  the health of the card.
6164  * Return value:
6165  *  void
6166  */
6167
6168 static void s2io_ethtool_test(struct net_device *dev,
6169                               struct ethtool_test *ethtest,
6170                               uint64_t *data)
6171 {
6172         struct s2io_nic *sp = netdev_priv(dev);
6173         int orig_state = netif_running(sp->dev);
6174
6175         if (ethtest->flags == ETH_TEST_FL_OFFLINE) {
6176                 /* Offline Tests. */
6177                 if (orig_state)
6178                         s2io_close(sp->dev);
6179
6180                 if (s2io_register_test(sp, &data[0]))
6181                         ethtest->flags |= ETH_TEST_FL_FAILED;
6182
6183                 s2io_reset(sp);
6184
6185                 if (s2io_rldram_test(sp, &data[3]))
6186                         ethtest->flags |= ETH_TEST_FL_FAILED;
6187
6188                 s2io_reset(sp);
6189
6190                 if (s2io_eeprom_test(sp, &data[1]))
6191                         ethtest->flags |= ETH_TEST_FL_FAILED;
6192
6193                 if (s2io_bist_test(sp, &data[4]))
6194                         ethtest->flags |= ETH_TEST_FL_FAILED;
6195
6196                 if (orig_state)
6197                         s2io_open(sp->dev);
6198
6199                 data[2] = 0;
6200         } else {
6201                 /* Online Tests. */
6202                 if (!orig_state) {
6203                         DBG_PRINT(ERR_DBG, "%s: is not up, cannot run test\n",
6204                                   dev->name);
6205                         data[0] = -1;
6206                         data[1] = -1;
6207                         data[2] = -1;
6208                         data[3] = -1;
6209                         data[4] = -1;
6210                 }
6211
6212                 if (s2io_link_test(sp, &data[2]))
6213                         ethtest->flags |= ETH_TEST_FL_FAILED;
6214
6215                 data[0] = 0;
6216                 data[1] = 0;
6217                 data[3] = 0;
6218                 data[4] = 0;
6219         }
6220 }
6221
6222 static void s2io_get_ethtool_stats(struct net_device *dev,
6223                                    struct ethtool_stats *estats,
6224                                    u64 *tmp_stats)
6225 {
6226         int i = 0, k;
6227         struct s2io_nic *sp = netdev_priv(dev);
6228         struct stat_block *stats = sp->mac_control.stats_info;
6229         struct swStat *swstats = &stats->sw_stat;
6230         struct xpakStat *xstats = &stats->xpak_stat;
6231
6232         s2io_updt_stats(sp);
6233         tmp_stats[i++] =
6234                 (u64)le32_to_cpu(stats->tmac_frms_oflow) << 32  |
6235                 le32_to_cpu(stats->tmac_frms);
6236         tmp_stats[i++] =
6237                 (u64)le32_to_cpu(stats->tmac_data_octets_oflow) << 32 |
6238                 le32_to_cpu(stats->tmac_data_octets);
6239         tmp_stats[i++] = le64_to_cpu(stats->tmac_drop_frms);
6240         tmp_stats[i++] =
6241                 (u64)le32_to_cpu(stats->tmac_mcst_frms_oflow) << 32 |
6242                 le32_to_cpu(stats->tmac_mcst_frms);
6243         tmp_stats[i++] =
6244                 (u64)le32_to_cpu(stats->tmac_bcst_frms_oflow) << 32 |
6245                 le32_to_cpu(stats->tmac_bcst_frms);
6246         tmp_stats[i++] = le64_to_cpu(stats->tmac_pause_ctrl_frms);
6247         tmp_stats[i++] =
6248                 (u64)le32_to_cpu(stats->tmac_ttl_octets_oflow) << 32 |
6249                 le32_to_cpu(stats->tmac_ttl_octets);
6250         tmp_stats[i++] =
6251                 (u64)le32_to_cpu(stats->tmac_ucst_frms_oflow) << 32 |
6252                 le32_to_cpu(stats->tmac_ucst_frms);
6253         tmp_stats[i++] =
6254                 (u64)le32_to_cpu(stats->tmac_nucst_frms_oflow) << 32 |
6255                 le32_to_cpu(stats->tmac_nucst_frms);
6256         tmp_stats[i++] =
6257                 (u64)le32_to_cpu(stats->tmac_any_err_frms_oflow) << 32 |
6258                 le32_to_cpu(stats->tmac_any_err_frms);
6259         tmp_stats[i++] = le64_to_cpu(stats->tmac_ttl_less_fb_octets);
6260         tmp_stats[i++] = le64_to_cpu(stats->tmac_vld_ip_octets);
6261         tmp_stats[i++] =
6262                 (u64)le32_to_cpu(stats->tmac_vld_ip_oflow) << 32 |
6263                 le32_to_cpu(stats->tmac_vld_ip);
6264         tmp_stats[i++] =
6265                 (u64)le32_to_cpu(stats->tmac_drop_ip_oflow) << 32 |
6266                 le32_to_cpu(stats->tmac_drop_ip);
6267         tmp_stats[i++] =
6268                 (u64)le32_to_cpu(stats->tmac_icmp_oflow) << 32 |
6269                 le32_to_cpu(stats->tmac_icmp);
6270         tmp_stats[i++] =
6271                 (u64)le32_to_cpu(stats->tmac_rst_tcp_oflow) << 32 |
6272                 le32_to_cpu(stats->tmac_rst_tcp);
6273         tmp_stats[i++] = le64_to_cpu(stats->tmac_tcp);
6274         tmp_stats[i++] = (u64)le32_to_cpu(stats->tmac_udp_oflow) << 32 |
6275                 le32_to_cpu(stats->tmac_udp);
6276         tmp_stats[i++] =
6277                 (u64)le32_to_cpu(stats->rmac_vld_frms_oflow) << 32 |
6278                 le32_to_cpu(stats->rmac_vld_frms);
6279         tmp_stats[i++] =
6280                 (u64)le32_to_cpu(stats->rmac_data_octets_oflow) << 32 |
6281                 le32_to_cpu(stats->rmac_data_octets);
6282         tmp_stats[i++] = le64_to_cpu(stats->rmac_fcs_err_frms);
6283         tmp_stats[i++] = le64_to_cpu(stats->rmac_drop_frms);
6284         tmp_stats[i++] =
6285                 (u64)le32_to_cpu(stats->rmac_vld_mcst_frms_oflow) << 32 |
6286                 le32_to_cpu(stats->rmac_vld_mcst_frms);
6287         tmp_stats[i++] =
6288                 (u64)le32_to_cpu(stats->rmac_vld_bcst_frms_oflow) << 32 |
6289                 le32_to_cpu(stats->rmac_vld_bcst_frms);
6290         tmp_stats[i++] = le32_to_cpu(stats->rmac_in_rng_len_err_frms);
6291         tmp_stats[i++] = le32_to_cpu(stats->rmac_out_rng_len_err_frms);
6292         tmp_stats[i++] = le64_to_cpu(stats->rmac_long_frms);
6293         tmp_stats[i++] = le64_to_cpu(stats->rmac_pause_ctrl_frms);
6294         tmp_stats[i++] = le64_to_cpu(stats->rmac_unsup_ctrl_frms);
6295         tmp_stats[i++] =
6296                 (u64)le32_to_cpu(stats->rmac_ttl_octets_oflow) << 32 |
6297                 le32_to_cpu(stats->rmac_ttl_octets);
6298         tmp_stats[i++] =
6299                 (u64)le32_to_cpu(stats->rmac_accepted_ucst_frms_oflow) << 32
6300                 | le32_to_cpu(stats->rmac_accepted_ucst_frms);
6301         tmp_stats[i++] =
6302                 (u64)le32_to_cpu(stats->rmac_accepted_nucst_frms_oflow)
6303                 << 32 | le32_to_cpu(stats->rmac_accepted_nucst_frms);
6304         tmp_stats[i++] =
6305                 (u64)le32_to_cpu(stats->rmac_discarded_frms_oflow) << 32 |
6306                 le32_to_cpu(stats->rmac_discarded_frms);
6307         tmp_stats[i++] =
6308                 (u64)le32_to_cpu(stats->rmac_drop_events_oflow)
6309                 << 32 | le32_to_cpu(stats->rmac_drop_events);
6310         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_less_fb_octets);
6311         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_frms);
6312         tmp_stats[i++] =
6313                 (u64)le32_to_cpu(stats->rmac_usized_frms_oflow) << 32 |
6314                 le32_to_cpu(stats->rmac_usized_frms);
6315         tmp_stats[i++] =
6316                 (u64)le32_to_cpu(stats->rmac_osized_frms_oflow) << 32 |
6317                 le32_to_cpu(stats->rmac_osized_frms);
6318         tmp_stats[i++] =
6319                 (u64)le32_to_cpu(stats->rmac_frag_frms_oflow) << 32 |
6320                 le32_to_cpu(stats->rmac_frag_frms);
6321         tmp_stats[i++] =
6322                 (u64)le32_to_cpu(stats->rmac_jabber_frms_oflow) << 32 |
6323                 le32_to_cpu(stats->rmac_jabber_frms);
6324         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_64_frms);
6325         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_65_127_frms);
6326         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_128_255_frms);
6327         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_256_511_frms);
6328         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_512_1023_frms);
6329         tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_1024_1518_frms);
6330         tmp_stats[i++] =
6331                 (u64)le32_to_cpu(stats->rmac_ip_oflow) << 32 |
6332                 le32_to_cpu(stats->rmac_ip);
6333         tmp_stats[i++] = le64_to_cpu(stats->rmac_ip_octets);
6334         tmp_stats[i++] = le32_to_cpu(stats->rmac_hdr_err_ip);
6335         tmp_stats[i++] =
6336                 (u64)le32_to_cpu(stats->rmac_drop_ip_oflow) << 32 |
6337                 le32_to_cpu(stats->rmac_drop_ip);
6338         tmp_stats[i++] =
6339                 (u64)le32_to_cpu(stats->rmac_icmp_oflow) << 32 |
6340                 le32_to_cpu(stats->rmac_icmp);
6341         tmp_stats[i++] = le64_to_cpu(stats->rmac_tcp);
6342         tmp_stats[i++] =
6343                 (u64)le32_to_cpu(stats->rmac_udp_oflow) << 32 |
6344                 le32_to_cpu(stats->rmac_udp);
6345         tmp_stats[i++] =
6346                 (u64)le32_to_cpu(stats->rmac_err_drp_udp_oflow) << 32 |
6347                 le32_to_cpu(stats->rmac_err_drp_udp);
6348         tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_err_sym);
6349         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q0);
6350         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q1);
6351         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q2);
6352         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q3);
6353         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q4);
6354         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q5);
6355         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q6);
6356         tmp_stats[i++] = le64_to_cpu(stats->rmac_frms_q7);
6357         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q0);
6358         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q1);
6359         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q2);
6360         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q3);
6361         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q4);
6362         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q5);
6363         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q6);
6364         tmp_stats[i++] = le16_to_cpu(stats->rmac_full_q7);
6365         tmp_stats[i++] =
6366                 (u64)le32_to_cpu(stats->rmac_pause_cnt_oflow) << 32 |
6367                 le32_to_cpu(stats->rmac_pause_cnt);
6368         tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_data_err_cnt);
6369         tmp_stats[i++] = le64_to_cpu(stats->rmac_xgmii_ctrl_err_cnt);
6370         tmp_stats[i++] =
6371                 (u64)le32_to_cpu(stats->rmac_accepted_ip_oflow) << 32 |
6372                 le32_to_cpu(stats->rmac_accepted_ip);
6373         tmp_stats[i++] = le32_to_cpu(stats->rmac_err_tcp);
6374         tmp_stats[i++] = le32_to_cpu(stats->rd_req_cnt);
6375         tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_cnt);
6376         tmp_stats[i++] = le32_to_cpu(stats->new_rd_req_rtry_cnt);
6377         tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_cnt);
6378         tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_rd_ack_cnt);
6379         tmp_stats[i++] = le32_to_cpu(stats->wr_req_cnt);
6380         tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_cnt);
6381         tmp_stats[i++] = le32_to_cpu(stats->new_wr_req_rtry_cnt);
6382         tmp_stats[i++] = le32_to_cpu(stats->wr_rtry_cnt);
6383         tmp_stats[i++] = le32_to_cpu(stats->wr_disc_cnt);
6384         tmp_stats[i++] = le32_to_cpu(stats->rd_rtry_wr_ack_cnt);
6385         tmp_stats[i++] = le32_to_cpu(stats->txp_wr_cnt);
6386         tmp_stats[i++] = le32_to_cpu(stats->txd_rd_cnt);
6387         tmp_stats[i++] = le32_to_cpu(stats->txd_wr_cnt);
6388         tmp_stats[i++] = le32_to_cpu(stats->rxd_rd_cnt);
6389         tmp_stats[i++] = le32_to_cpu(stats->rxd_wr_cnt);
6390         tmp_stats[i++] = le32_to_cpu(stats->txf_rd_cnt);
6391         tmp_stats[i++] = le32_to_cpu(stats->rxf_wr_cnt);
6392
6393         /* Enhanced statistics exist only for Hercules */
6394         if (sp->device_type == XFRAME_II_DEVICE) {
6395                 tmp_stats[i++] =
6396                         le64_to_cpu(stats->rmac_ttl_1519_4095_frms);
6397                 tmp_stats[i++] =
6398                         le64_to_cpu(stats->rmac_ttl_4096_8191_frms);
6399                 tmp_stats[i++] =
6400                         le64_to_cpu(stats->rmac_ttl_8192_max_frms);
6401                 tmp_stats[i++] = le64_to_cpu(stats->rmac_ttl_gt_max_frms);
6402                 tmp_stats[i++] = le64_to_cpu(stats->rmac_osized_alt_frms);
6403                 tmp_stats[i++] = le64_to_cpu(stats->rmac_jabber_alt_frms);
6404                 tmp_stats[i++] = le64_to_cpu(stats->rmac_gt_max_alt_frms);
6405                 tmp_stats[i++] = le64_to_cpu(stats->rmac_vlan_frms);
6406                 tmp_stats[i++] = le32_to_cpu(stats->rmac_len_discard);
6407                 tmp_stats[i++] = le32_to_cpu(stats->rmac_fcs_discard);
6408                 tmp_stats[i++] = le32_to_cpu(stats->rmac_pf_discard);
6409                 tmp_stats[i++] = le32_to_cpu(stats->rmac_da_discard);
6410                 tmp_stats[i++] = le32_to_cpu(stats->rmac_red_discard);
6411                 tmp_stats[i++] = le32_to_cpu(stats->rmac_rts_discard);
6412                 tmp_stats[i++] = le32_to_cpu(stats->rmac_ingm_full_discard);
6413                 tmp_stats[i++] = le32_to_cpu(stats->link_fault_cnt);
6414         }
6415
6416         tmp_stats[i++] = 0;
6417         tmp_stats[i++] = swstats->single_ecc_errs;
6418         tmp_stats[i++] = swstats->double_ecc_errs;
6419         tmp_stats[i++] = swstats->parity_err_cnt;
6420         tmp_stats[i++] = swstats->serious_err_cnt;
6421         tmp_stats[i++] = swstats->soft_reset_cnt;
6422         tmp_stats[i++] = swstats->fifo_full_cnt;
6423         for (k = 0; k < MAX_RX_RINGS; k++)
6424                 tmp_stats[i++] = swstats->ring_full_cnt[k];
6425         tmp_stats[i++] = xstats->alarm_transceiver_temp_high;
6426         tmp_stats[i++] = xstats->alarm_transceiver_temp_low;
6427         tmp_stats[i++] = xstats->alarm_laser_bias_current_high;
6428         tmp_stats[i++] = xstats->alarm_laser_bias_current_low;
6429         tmp_stats[i++] = xstats->alarm_laser_output_power_high;
6430         tmp_stats[i++] = xstats->alarm_laser_output_power_low;
6431         tmp_stats[i++] = xstats->warn_transceiver_temp_high;
6432         tmp_stats[i++] = xstats->warn_transceiver_temp_low;
6433         tmp_stats[i++] = xstats->warn_laser_bias_current_high;
6434         tmp_stats[i++] = xstats->warn_laser_bias_current_low;
6435         tmp_stats[i++] = xstats->warn_laser_output_power_high;
6436         tmp_stats[i++] = xstats->warn_laser_output_power_low;
6437         tmp_stats[i++] = swstats->clubbed_frms_cnt;
6438         tmp_stats[i++] = swstats->sending_both;
6439         tmp_stats[i++] = swstats->outof_sequence_pkts;
6440         tmp_stats[i++] = swstats->flush_max_pkts;
6441         if (swstats->num_aggregations) {
6442                 u64 tmp = swstats->sum_avg_pkts_aggregated;
6443                 int count = 0;
6444                 /*
6445                  * Since 64-bit divide does not work on all platforms,
6446                  * do repeated subtraction.
6447                  */
6448                 while (tmp >= swstats->num_aggregations) {
6449                         tmp -= swstats->num_aggregations;
6450                         count++;
6451                 }
6452                 tmp_stats[i++] = count;
6453         } else
6454                 tmp_stats[i++] = 0;
6455         tmp_stats[i++] = swstats->mem_alloc_fail_cnt;
6456         tmp_stats[i++] = swstats->pci_map_fail_cnt;
6457         tmp_stats[i++] = swstats->watchdog_timer_cnt;
6458         tmp_stats[i++] = swstats->mem_allocated;
6459         tmp_stats[i++] = swstats->mem_freed;
6460         tmp_stats[i++] = swstats->link_up_cnt;
6461         tmp_stats[i++] = swstats->link_down_cnt;
6462         tmp_stats[i++] = swstats->link_up_time;
6463         tmp_stats[i++] = swstats->link_down_time;
6464
6465         tmp_stats[i++] = swstats->tx_buf_abort_cnt;
6466         tmp_stats[i++] = swstats->tx_desc_abort_cnt;
6467         tmp_stats[i++] = swstats->tx_parity_err_cnt;
6468         tmp_stats[i++] = swstats->tx_link_loss_cnt;
6469         tmp_stats[i++] = swstats->tx_list_proc_err_cnt;
6470
6471         tmp_stats[i++] = swstats->rx_parity_err_cnt;
6472         tmp_stats[i++] = swstats->rx_abort_cnt;
6473         tmp_stats[i++] = swstats->rx_parity_abort_cnt;
6474         tmp_stats[i++] = swstats->rx_rda_fail_cnt;
6475         tmp_stats[i++] = swstats->rx_unkn_prot_cnt;
6476         tmp_stats[i++] = swstats->rx_fcs_err_cnt;
6477         tmp_stats[i++] = swstats->rx_buf_size_err_cnt;
6478         tmp_stats[i++] = swstats->rx_rxd_corrupt_cnt;
6479         tmp_stats[i++] = swstats->rx_unkn_err_cnt;
6480         tmp_stats[i++] = swstats->tda_err_cnt;
6481         tmp_stats[i++] = swstats->pfc_err_cnt;
6482         tmp_stats[i++] = swstats->pcc_err_cnt;
6483         tmp_stats[i++] = swstats->tti_err_cnt;
6484         tmp_stats[i++] = swstats->tpa_err_cnt;
6485         tmp_stats[i++] = swstats->sm_err_cnt;
6486         tmp_stats[i++] = swstats->lso_err_cnt;
6487         tmp_stats[i++] = swstats->mac_tmac_err_cnt;
6488         tmp_stats[i++] = swstats->mac_rmac_err_cnt;
6489         tmp_stats[i++] = swstats->xgxs_txgxs_err_cnt;
6490         tmp_stats[i++] = swstats->xgxs_rxgxs_err_cnt;
6491         tmp_stats[i++] = swstats->rc_err_cnt;
6492         tmp_stats[i++] = swstats->prc_pcix_err_cnt;
6493         tmp_stats[i++] = swstats->rpa_err_cnt;
6494         tmp_stats[i++] = swstats->rda_err_cnt;
6495         tmp_stats[i++] = swstats->rti_err_cnt;
6496         tmp_stats[i++] = swstats->mc_err_cnt;
6497 }
6498
6499 static int s2io_ethtool_get_regs_len(struct net_device *dev)
6500 {
6501         return XENA_REG_SPACE;
6502 }
6503
6504
6505 static int s2io_get_eeprom_len(struct net_device *dev)
6506 {
6507         return XENA_EEPROM_SPACE;
6508 }
6509
6510 static int s2io_get_sset_count(struct net_device *dev, int sset)
6511 {
6512         struct s2io_nic *sp = netdev_priv(dev);
6513
6514         switch (sset) {
6515         case ETH_SS_TEST:
6516                 return S2IO_TEST_LEN;
6517         case ETH_SS_STATS:
6518                 switch (sp->device_type) {
6519                 case XFRAME_I_DEVICE:
6520                         return XFRAME_I_STAT_LEN;
6521                 case XFRAME_II_DEVICE:
6522                         return XFRAME_II_STAT_LEN;
6523                 default:
6524                         return 0;
6525                 }
6526         default:
6527                 return -EOPNOTSUPP;
6528         }
6529 }
6530
6531 static void s2io_ethtool_get_strings(struct net_device *dev,
6532                                      u32 stringset, u8 *data)
6533 {
6534         int stat_size = 0;
6535         struct s2io_nic *sp = netdev_priv(dev);
6536
6537         switch (stringset) {
6538         case ETH_SS_TEST:
6539                 memcpy(data, s2io_gstrings, S2IO_STRINGS_LEN);
6540                 break;
6541         case ETH_SS_STATS:
6542                 stat_size = sizeof(ethtool_xena_stats_keys);
6543                 memcpy(data, &ethtool_xena_stats_keys, stat_size);
6544                 if (sp->device_type == XFRAME_II_DEVICE) {
6545                         memcpy(data + stat_size,
6546                                &ethtool_enhanced_stats_keys,
6547                                sizeof(ethtool_enhanced_stats_keys));
6548                         stat_size += sizeof(ethtool_enhanced_stats_keys);
6549                 }
6550
6551                 memcpy(data + stat_size, &ethtool_driver_stats_keys,
6552                        sizeof(ethtool_driver_stats_keys));
6553         }
6554 }
6555
6556 static int s2io_set_features(struct net_device *dev, netdev_features_t features)
6557 {
6558         struct s2io_nic *sp = netdev_priv(dev);
6559         netdev_features_t changed = (features ^ dev->features) & NETIF_F_LRO;
6560
6561         if (changed && netif_running(dev)) {
6562                 int rc;
6563
6564                 s2io_stop_all_tx_queue(sp);
6565                 s2io_card_down(sp);
6566                 dev->features = features;
6567                 rc = s2io_card_up(sp);
6568                 if (rc)
6569                         s2io_reset(sp);
6570                 else
6571                         s2io_start_all_tx_queue(sp);
6572
6573                 return rc ? rc : 1;
6574         }
6575
6576         return 0;
6577 }
6578
6579 static const struct ethtool_ops netdev_ethtool_ops = {
6580         .get_drvinfo = s2io_ethtool_gdrvinfo,
6581         .get_regs_len = s2io_ethtool_get_regs_len,
6582         .get_regs = s2io_ethtool_gregs,
6583         .get_link = ethtool_op_get_link,
6584         .get_eeprom_len = s2io_get_eeprom_len,
6585         .get_eeprom = s2io_ethtool_geeprom,
6586         .set_eeprom = s2io_ethtool_seeprom,
6587         .get_ringparam = s2io_ethtool_gringparam,
6588         .get_pauseparam = s2io_ethtool_getpause_data,
6589         .set_pauseparam = s2io_ethtool_setpause_data,
6590         .self_test = s2io_ethtool_test,
6591         .get_strings = s2io_ethtool_get_strings,
6592         .set_phys_id = s2io_ethtool_set_led,
6593         .get_ethtool_stats = s2io_get_ethtool_stats,
6594         .get_sset_count = s2io_get_sset_count,
6595         .get_link_ksettings = s2io_ethtool_get_link_ksettings,
6596         .set_link_ksettings = s2io_ethtool_set_link_ksettings,
6597 };
6598
6599 /**
6600  *  s2io_ioctl - Entry point for the Ioctl
6601  *  @dev :  Device pointer.
6602  *  @rq :  An IOCTL specefic structure, that can contain a pointer to
6603  *  a proprietary structure used to pass information to the driver.
6604  *  @cmd :  This is used to distinguish between the different commands that
6605  *  can be passed to the IOCTL functions.
6606  *  Description:
6607  *  Currently there are no special functionality supported in IOCTL, hence
6608  *  function always return EOPNOTSUPPORTED
6609  */
6610
6611 static int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
6612 {
6613         return -EOPNOTSUPP;
6614 }
6615
6616 /**
6617  *  s2io_change_mtu - entry point to change MTU size for the device.
6618  *   @dev : device pointer.
6619  *   @new_mtu : the new MTU size for the device.
6620  *   Description: A driver entry point to change MTU size for the device.
6621  *   Before changing the MTU the device must be stopped.
6622  *  Return value:
6623  *   0 on success and an appropriate (-)ve integer as defined in errno.h
6624  *   file on failure.
6625  */
6626
6627 static int s2io_change_mtu(struct net_device *dev, int new_mtu)
6628 {
6629         struct s2io_nic *sp = netdev_priv(dev);
6630         int ret = 0;
6631
6632         dev->mtu = new_mtu;
6633         if (netif_running(dev)) {
6634                 s2io_stop_all_tx_queue(sp);
6635                 s2io_card_down(sp);
6636                 ret = s2io_card_up(sp);
6637                 if (ret) {
6638                         DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n",
6639                                   __func__);
6640                         return ret;
6641                 }
6642                 s2io_wake_all_tx_queue(sp);
6643         } else { /* Device is down */
6644                 struct XENA_dev_config __iomem *bar0 = sp->bar0;
6645                 u64 val64 = new_mtu;
6646
6647                 writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
6648         }
6649
6650         return ret;
6651 }
6652
6653 /**
6654  * s2io_set_link - Set the LInk status
6655  * @work: work struct containing a pointer to device private structue
6656  * Description: Sets the link status for the adapter
6657  */
6658
6659 static void s2io_set_link(struct work_struct *work)
6660 {
6661         struct s2io_nic *nic = container_of(work, struct s2io_nic,
6662                                             set_link_task);
6663         struct net_device *dev = nic->dev;
6664         struct XENA_dev_config __iomem *bar0 = nic->bar0;
6665         register u64 val64;
6666         u16 subid;
6667
6668         rtnl_lock();
6669
6670         if (!netif_running(dev))
6671                 goto out_unlock;
6672
6673         if (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(nic->state))) {
6674                 /* The card is being reset, no point doing anything */
6675                 goto out_unlock;
6676         }
6677
6678         subid = nic->pdev->subsystem_device;
6679         if (s2io_link_fault_indication(nic) == MAC_RMAC_ERR_TIMER) {
6680                 /*
6681                  * Allow a small delay for the NICs self initiated
6682                  * cleanup to complete.
6683                  */
6684                 msleep(100);
6685         }
6686
6687         val64 = readq(&bar0->adapter_status);
6688         if (LINK_IS_UP(val64)) {
6689                 if (!(readq(&bar0->adapter_control) & ADAPTER_CNTL_EN)) {
6690                         if (verify_xena_quiescence(nic)) {
6691                                 val64 = readq(&bar0->adapter_control);
6692                                 val64 |= ADAPTER_CNTL_EN;
6693                                 writeq(val64, &bar0->adapter_control);
6694                                 if (CARDS_WITH_FAULTY_LINK_INDICATORS(
6695                                             nic->device_type, subid)) {
6696                                         val64 = readq(&bar0->gpio_control);
6697                                         val64 |= GPIO_CTRL_GPIO_0;
6698                                         writeq(val64, &bar0->gpio_control);
6699                                         val64 = readq(&bar0->gpio_control);
6700                                 } else {
6701                                         val64 |= ADAPTER_LED_ON;
6702                                         writeq(val64, &bar0->adapter_control);
6703                                 }
6704                                 nic->device_enabled_once = true;
6705                         } else {
6706                                 DBG_PRINT(ERR_DBG,
6707                                           "%s: Error: device is not Quiescent\n",
6708                                           dev->name);
6709                                 s2io_stop_all_tx_queue(nic);
6710                         }
6711                 }
6712                 val64 = readq(&bar0->adapter_control);
6713                 val64 |= ADAPTER_LED_ON;
6714                 writeq(val64, &bar0->adapter_control);
6715                 s2io_link(nic, LINK_UP);
6716         } else {
6717                 if (CARDS_WITH_FAULTY_LINK_INDICATORS(nic->device_type,
6718                                                       subid)) {
6719                         val64 = readq(&bar0->gpio_control);
6720                         val64 &= ~GPIO_CTRL_GPIO_0;
6721                         writeq(val64, &bar0->gpio_control);
6722                         val64 = readq(&bar0->gpio_control);
6723                 }
6724                 /* turn off LED */
6725                 val64 = readq(&bar0->adapter_control);
6726                 val64 = val64 & (~ADAPTER_LED_ON);
6727                 writeq(val64, &bar0->adapter_control);
6728                 s2io_link(nic, LINK_DOWN);
6729         }
6730         clear_bit(__S2IO_STATE_LINK_TASK, &(nic->state));
6731
6732 out_unlock:
6733         rtnl_unlock();
6734 }
6735
6736 static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
6737                                   struct buffAdd *ba,
6738                                   struct sk_buff **skb, u64 *temp0, u64 *temp1,
6739                                   u64 *temp2, int size)
6740 {
6741         struct net_device *dev = sp->dev;
6742         struct swStat *stats = &sp->mac_control.stats_info->sw_stat;
6743
6744         if ((sp->rxd_mode == RXD_MODE_1) && (rxdp->Host_Control == 0)) {
6745                 struct RxD1 *rxdp1 = (struct RxD1 *)rxdp;
6746                 /* allocate skb */
6747                 if (*skb) {
6748                         DBG_PRINT(INFO_DBG, "SKB is not NULL\n");
6749                         /*
6750                          * As Rx frame are not going to be processed,
6751                          * using same mapped address for the Rxd
6752                          * buffer pointer
6753                          */
6754                         rxdp1->Buffer0_ptr = *temp0;
6755                 } else {
6756                         *skb = netdev_alloc_skb(dev, size);
6757                         if (!(*skb)) {
6758                                 DBG_PRINT(INFO_DBG,
6759                                           "%s: Out of memory to allocate %s\n",
6760                                           dev->name, "1 buf mode SKBs");
6761                                 stats->mem_alloc_fail_cnt++;
6762                                 return -ENOMEM ;
6763                         }
6764                         stats->mem_allocated += (*skb)->truesize;
6765                         /* storing the mapped addr in a temp variable
6766                          * such it will be used for next rxd whose
6767                          * Host Control is NULL
6768                          */
6769                         rxdp1->Buffer0_ptr = *temp0 =
6770                                 dma_map_single(&sp->pdev->dev, (*skb)->data,
6771                                                size - NET_IP_ALIGN,
6772                                                DMA_FROM_DEVICE);
6773                         if (dma_mapping_error(&sp->pdev->dev, rxdp1->Buffer0_ptr))
6774                                 goto memalloc_failed;
6775                         rxdp->Host_Control = (unsigned long) (*skb);
6776                 }
6777         } else if ((sp->rxd_mode == RXD_MODE_3B) && (rxdp->Host_Control == 0)) {
6778                 struct RxD3 *rxdp3 = (struct RxD3 *)rxdp;
6779                 /* Two buffer Mode */
6780                 if (*skb) {
6781                         rxdp3->Buffer2_ptr = *temp2;
6782                         rxdp3->Buffer0_ptr = *temp0;
6783                         rxdp3->Buffer1_ptr = *temp1;
6784                 } else {
6785                         *skb = netdev_alloc_skb(dev, size);
6786                         if (!(*skb)) {
6787                                 DBG_PRINT(INFO_DBG,
6788                                           "%s: Out of memory to allocate %s\n",
6789                                           dev->name,
6790                                           "2 buf mode SKBs");
6791                                 stats->mem_alloc_fail_cnt++;
6792                                 return -ENOMEM;
6793                         }
6794                         stats->mem_allocated += (*skb)->truesize;
6795                         rxdp3->Buffer2_ptr = *temp2 =
6796                                 dma_map_single(&sp->pdev->dev, (*skb)->data,
6797                                                dev->mtu + 4, DMA_FROM_DEVICE);
6798                         if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer2_ptr))
6799                                 goto memalloc_failed;
6800                         rxdp3->Buffer0_ptr = *temp0 =
6801                                 dma_map_single(&sp->pdev->dev, ba->ba_0,
6802                                                BUF0_LEN, DMA_FROM_DEVICE);
6803                         if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer0_ptr)) {
6804                                 dma_unmap_single(&sp->pdev->dev,
6805                                                  (dma_addr_t)rxdp3->Buffer2_ptr,
6806                                                  dev->mtu + 4,
6807                                                  DMA_FROM_DEVICE);
6808                                 goto memalloc_failed;
6809                         }
6810                         rxdp->Host_Control = (unsigned long) (*skb);
6811
6812                         /* Buffer-1 will be dummy buffer not used */
6813                         rxdp3->Buffer1_ptr = *temp1 =
6814                                 dma_map_single(&sp->pdev->dev, ba->ba_1,
6815                                                BUF1_LEN, DMA_FROM_DEVICE);
6816                         if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer1_ptr)) {
6817                                 dma_unmap_single(&sp->pdev->dev,
6818                                                  (dma_addr_t)rxdp3->Buffer0_ptr,
6819                                                  BUF0_LEN, DMA_FROM_DEVICE);
6820                                 dma_unmap_single(&sp->pdev->dev,
6821                                                  (dma_addr_t)rxdp3->Buffer2_ptr,
6822                                                  dev->mtu + 4,
6823                                                  DMA_FROM_DEVICE);
6824                                 goto memalloc_failed;
6825                         }
6826                 }
6827         }
6828         return 0;
6829
6830 memalloc_failed:
6831         stats->pci_map_fail_cnt++;
6832         stats->mem_freed += (*skb)->truesize;
6833         dev_kfree_skb(*skb);
6834         return -ENOMEM;
6835 }
6836
6837 static void set_rxd_buffer_size(struct s2io_nic *sp, struct RxD_t *rxdp,
6838                                 int size)
6839 {
6840         struct net_device *dev = sp->dev;
6841         if (sp->rxd_mode == RXD_MODE_1) {
6842                 rxdp->Control_2 = SET_BUFFER0_SIZE_1(size - NET_IP_ALIGN);
6843         } else if (sp->rxd_mode == RXD_MODE_3B) {
6844                 rxdp->Control_2 = SET_BUFFER0_SIZE_3(BUF0_LEN);
6845                 rxdp->Control_2 |= SET_BUFFER1_SIZE_3(1);
6846                 rxdp->Control_2 |= SET_BUFFER2_SIZE_3(dev->mtu + 4);
6847         }
6848 }
6849
6850 static  int rxd_owner_bit_reset(struct s2io_nic *sp)
6851 {
6852         int i, j, k, blk_cnt = 0, size;
6853         struct config_param *config = &sp->config;
6854         struct mac_info *mac_control = &sp->mac_control;
6855         struct net_device *dev = sp->dev;
6856         struct RxD_t *rxdp = NULL;
6857         struct sk_buff *skb = NULL;
6858         struct buffAdd *ba = NULL;
6859         u64 temp0_64 = 0, temp1_64 = 0, temp2_64 = 0;
6860
6861         /* Calculate the size based on ring mode */
6862         size = dev->mtu + HEADER_ETHERNET_II_802_3_SIZE +
6863                 HEADER_802_2_SIZE + HEADER_SNAP_SIZE;
6864         if (sp->rxd_mode == RXD_MODE_1)
6865                 size += NET_IP_ALIGN;
6866         else if (sp->rxd_mode == RXD_MODE_3B)
6867                 size = dev->mtu + ALIGN_SIZE + BUF0_LEN + 4;
6868
6869         for (i = 0; i < config->rx_ring_num; i++) {
6870                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
6871                 struct ring_info *ring = &mac_control->rings[i];
6872
6873                 blk_cnt = rx_cfg->num_rxd / (rxd_count[sp->rxd_mode] + 1);
6874
6875                 for (j = 0; j < blk_cnt; j++) {
6876                         for (k = 0; k < rxd_count[sp->rxd_mode]; k++) {
6877                                 rxdp = ring->rx_blocks[j].rxds[k].virt_addr;
6878                                 if (sp->rxd_mode == RXD_MODE_3B)
6879                                         ba = &ring->ba[j][k];
6880                                 if (set_rxd_buffer_pointer(sp, rxdp, ba, &skb,
6881                                                            &temp0_64,
6882                                                            &temp1_64,
6883                                                            &temp2_64,
6884                                                            size) == -ENOMEM) {
6885                                         return 0;
6886                                 }
6887
6888                                 set_rxd_buffer_size(sp, rxdp, size);
6889                                 dma_wmb();
6890                                 /* flip the Ownership bit to Hardware */
6891                                 rxdp->Control_1 |= RXD_OWN_XENA;
6892                         }
6893                 }
6894         }
6895         return 0;
6896
6897 }
6898
6899 static int s2io_add_isr(struct s2io_nic *sp)
6900 {
6901         int ret = 0;
6902         struct net_device *dev = sp->dev;
6903         int err = 0;
6904
6905         if (sp->config.intr_type == MSI_X)
6906                 ret = s2io_enable_msi_x(sp);
6907         if (ret) {
6908                 DBG_PRINT(ERR_DBG, "%s: Defaulting to INTA\n", dev->name);
6909                 sp->config.intr_type = INTA;
6910         }
6911
6912         /*
6913          * Store the values of the MSIX table in
6914          * the struct s2io_nic structure
6915          */
6916         store_xmsi_data(sp);
6917
6918         /* After proper initialization of H/W, register ISR */
6919         if (sp->config.intr_type == MSI_X) {
6920                 int i, msix_rx_cnt = 0;
6921
6922                 for (i = 0; i < sp->num_entries; i++) {
6923                         if (sp->s2io_entries[i].in_use == MSIX_FLG) {
6924                                 if (sp->s2io_entries[i].type ==
6925                                     MSIX_RING_TYPE) {
6926                                         snprintf(sp->desc[i],
6927                                                 sizeof(sp->desc[i]),
6928                                                 "%s:MSI-X-%d-RX",
6929                                                 dev->name, i);
6930                                         err = request_irq(sp->entries[i].vector,
6931                                                           s2io_msix_ring_handle,
6932                                                           0,
6933                                                           sp->desc[i],
6934                                                           sp->s2io_entries[i].arg);
6935                                 } else if (sp->s2io_entries[i].type ==
6936                                            MSIX_ALARM_TYPE) {
6937                                         snprintf(sp->desc[i],
6938                                                 sizeof(sp->desc[i]),
6939                                                 "%s:MSI-X-%d-TX",
6940                                                 dev->name, i);
6941                                         err = request_irq(sp->entries[i].vector,
6942                                                           s2io_msix_fifo_handle,
6943                                                           0,
6944                                                           sp->desc[i],
6945                                                           sp->s2io_entries[i].arg);
6946
6947                                 }
6948                                 /* if either data or addr is zero print it. */
6949                                 if (!(sp->msix_info[i].addr &&
6950                                       sp->msix_info[i].data)) {
6951                                         DBG_PRINT(ERR_DBG,
6952                                                   "%s @Addr:0x%llx Data:0x%llx\n",
6953                                                   sp->desc[i],
6954                                                   (unsigned long long)
6955                                                   sp->msix_info[i].addr,
6956                                                   (unsigned long long)
6957                                                   ntohl(sp->msix_info[i].data));
6958                                 } else
6959                                         msix_rx_cnt++;
6960                                 if (err) {
6961                                         remove_msix_isr(sp);
6962
6963                                         DBG_PRINT(ERR_DBG,
6964                                                   "%s:MSI-X-%d registration "
6965                                                   "failed\n", dev->name, i);
6966
6967                                         DBG_PRINT(ERR_DBG,
6968                                                   "%s: Defaulting to INTA\n",
6969                                                   dev->name);
6970                                         sp->config.intr_type = INTA;
6971                                         break;
6972                                 }
6973                                 sp->s2io_entries[i].in_use =
6974                                         MSIX_REGISTERED_SUCCESS;
6975                         }
6976                 }
6977                 if (!err) {
6978                         pr_info("MSI-X-RX %d entries enabled\n", --msix_rx_cnt);
6979                         DBG_PRINT(INFO_DBG,
6980                                   "MSI-X-TX entries enabled through alarm vector\n");
6981                 }
6982         }
6983         if (sp->config.intr_type == INTA) {
6984                 err = request_irq(sp->pdev->irq, s2io_isr, IRQF_SHARED,
6985                                   sp->name, dev);
6986                 if (err) {
6987                         DBG_PRINT(ERR_DBG, "%s: ISR registration failed\n",
6988                                   dev->name);
6989                         return -1;
6990                 }
6991         }
6992         return 0;
6993 }
6994
6995 static void s2io_rem_isr(struct s2io_nic *sp)
6996 {
6997         if (sp->config.intr_type == MSI_X)
6998                 remove_msix_isr(sp);
6999         else
7000                 remove_inta_isr(sp);
7001 }
7002
7003 static void do_s2io_card_down(struct s2io_nic *sp, int do_io)
7004 {
7005         int cnt = 0;
7006         struct XENA_dev_config __iomem *bar0 = sp->bar0;
7007         register u64 val64 = 0;
7008         struct config_param *config;
7009         config = &sp->config;
7010
7011         if (!is_s2io_card_up(sp))
7012                 return;
7013
7014         del_timer_sync(&sp->alarm_timer);
7015         /* If s2io_set_link task is executing, wait till it completes. */
7016         while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state)))
7017                 msleep(50);
7018         clear_bit(__S2IO_STATE_CARD_UP, &sp->state);
7019
7020         /* Disable napi */
7021         if (sp->config.napi) {
7022                 int off = 0;
7023                 if (config->intr_type ==  MSI_X) {
7024                         for (; off < sp->config.rx_ring_num; off++)
7025                                 napi_disable(&sp->mac_control.rings[off].napi);
7026                 }
7027                 else
7028                         napi_disable(&sp->napi);
7029         }
7030
7031         /* disable Tx and Rx traffic on the NIC */
7032         if (do_io)
7033                 stop_nic(sp);
7034
7035         s2io_rem_isr(sp);
7036
7037         /* stop the tx queue, indicate link down */
7038         s2io_link(sp, LINK_DOWN);
7039
7040         /* Check if the device is Quiescent and then Reset the NIC */
7041         while (do_io) {
7042                 /* As per the HW requirement we need to replenish the
7043                  * receive buffer to avoid the ring bump. Since there is
7044                  * no intention of processing the Rx frame at this pointwe are
7045                  * just setting the ownership bit of rxd in Each Rx
7046                  * ring to HW and set the appropriate buffer size
7047                  * based on the ring mode
7048                  */
7049                 rxd_owner_bit_reset(sp);
7050
7051                 val64 = readq(&bar0->adapter_status);
7052                 if (verify_xena_quiescence(sp)) {
7053                         if (verify_pcc_quiescent(sp, sp->device_enabled_once))
7054                                 break;
7055                 }
7056
7057                 msleep(50);
7058                 cnt++;
7059                 if (cnt == 10) {
7060                         DBG_PRINT(ERR_DBG, "Device not Quiescent - "
7061                                   "adapter status reads 0x%llx\n",
7062                                   (unsigned long long)val64);
7063                         break;
7064                 }
7065         }
7066         if (do_io)
7067                 s2io_reset(sp);
7068
7069         /* Free all Tx buffers */
7070         free_tx_buffers(sp);
7071
7072         /* Free all Rx buffers */
7073         free_rx_buffers(sp);
7074
7075         clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state));
7076 }
7077
7078 static void s2io_card_down(struct s2io_nic *sp)
7079 {
7080         do_s2io_card_down(sp, 1);
7081 }
7082
7083 static int s2io_card_up(struct s2io_nic *sp)
7084 {
7085         int i, ret = 0;
7086         struct config_param *config;
7087         struct mac_info *mac_control;
7088         struct net_device *dev = sp->dev;
7089         u16 interruptible;
7090
7091         /* Initialize the H/W I/O registers */
7092         ret = init_nic(sp);
7093         if (ret != 0) {
7094                 DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
7095                           dev->name);
7096                 if (ret != -EIO)
7097                         s2io_reset(sp);
7098                 return ret;
7099         }
7100
7101         /*
7102          * Initializing the Rx buffers. For now we are considering only 1
7103          * Rx ring and initializing buffers into 30 Rx blocks
7104          */
7105         config = &sp->config;
7106         mac_control = &sp->mac_control;
7107
7108         for (i = 0; i < config->rx_ring_num; i++) {
7109                 struct ring_info *ring = &mac_control->rings[i];
7110
7111                 ring->mtu = dev->mtu;
7112                 ring->lro = !!(dev->features & NETIF_F_LRO);
7113                 ret = fill_rx_buffers(sp, ring, 1);
7114                 if (ret) {
7115                         DBG_PRINT(ERR_DBG, "%s: Out of memory in Open\n",
7116                                   dev->name);
7117                         s2io_reset(sp);
7118                         free_rx_buffers(sp);
7119                         return -ENOMEM;
7120                 }
7121                 DBG_PRINT(INFO_DBG, "Buf in ring:%d is %d:\n", i,
7122                           ring->rx_bufs_left);
7123         }
7124
7125         /* Initialise napi */
7126         if (config->napi) {
7127                 if (config->intr_type ==  MSI_X) {
7128                         for (i = 0; i < sp->config.rx_ring_num; i++)
7129                                 napi_enable(&sp->mac_control.rings[i].napi);
7130                 } else {
7131                         napi_enable(&sp->napi);
7132                 }
7133         }
7134
7135         /* Maintain the state prior to the open */
7136         if (sp->promisc_flg)
7137                 sp->promisc_flg = 0;
7138         if (sp->m_cast_flg) {
7139                 sp->m_cast_flg = 0;
7140                 sp->all_multi_pos = 0;
7141         }
7142
7143         /* Setting its receive mode */
7144         s2io_set_multicast(dev);
7145
7146         if (dev->features & NETIF_F_LRO) {
7147                 /* Initialize max aggregatable pkts per session based on MTU */
7148                 sp->lro_max_aggr_per_sess = ((1<<16) - 1) / dev->mtu;
7149                 /* Check if we can use (if specified) user provided value */
7150                 if (lro_max_pkts < sp->lro_max_aggr_per_sess)
7151                         sp->lro_max_aggr_per_sess = lro_max_pkts;
7152         }
7153
7154         /* Enable Rx Traffic and interrupts on the NIC */
7155         if (start_nic(sp)) {
7156                 DBG_PRINT(ERR_DBG, "%s: Starting NIC failed\n", dev->name);
7157                 s2io_reset(sp);
7158                 free_rx_buffers(sp);
7159                 return -ENODEV;
7160         }
7161
7162         /* Add interrupt service routine */
7163         if (s2io_add_isr(sp) != 0) {
7164                 if (sp->config.intr_type == MSI_X)
7165                         s2io_rem_isr(sp);
7166                 s2io_reset(sp);
7167                 free_rx_buffers(sp);
7168                 return -ENODEV;
7169         }
7170
7171         timer_setup(&sp->alarm_timer, s2io_alarm_handle, 0);
7172         mod_timer(&sp->alarm_timer, jiffies + HZ / 2);
7173
7174         set_bit(__S2IO_STATE_CARD_UP, &sp->state);
7175
7176         /*  Enable select interrupts */
7177         en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS);
7178         if (sp->config.intr_type != INTA) {
7179                 interruptible = TX_TRAFFIC_INTR | TX_PIC_INTR;
7180                 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7181         } else {
7182                 interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR;
7183                 interruptible |= TX_PIC_INTR;
7184                 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS);
7185         }
7186
7187         return 0;
7188 }
7189
7190 /**
7191  * s2io_restart_nic - Resets the NIC.
7192  * @work : work struct containing a pointer to the device private structure
7193  * Description:
7194  * This function is scheduled to be run by the s2io_tx_watchdog
7195  * function after 0.5 secs to reset the NIC. The idea is to reduce
7196  * the run time of the watch dog routine which is run holding a
7197  * spin lock.
7198  */
7199
7200 static void s2io_restart_nic(struct work_struct *work)
7201 {
7202         struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task);
7203         struct net_device *dev = sp->dev;
7204
7205         rtnl_lock();
7206
7207         if (!netif_running(dev))
7208                 goto out_unlock;
7209
7210         s2io_card_down(sp);
7211         if (s2io_card_up(sp)) {
7212                 DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n", dev->name);
7213         }
7214         s2io_wake_all_tx_queue(sp);
7215         DBG_PRINT(ERR_DBG, "%s: was reset by Tx watchdog timer\n", dev->name);
7216 out_unlock:
7217         rtnl_unlock();
7218 }
7219
7220 /**
7221  *  s2io_tx_watchdog - Watchdog for transmit side.
7222  *  @dev : Pointer to net device structure
7223  *  @txqueue: index of the hanging queue
7224  *  Description:
7225  *  This function is triggered if the Tx Queue is stopped
7226  *  for a pre-defined amount of time when the Interface is still up.
7227  *  If the Interface is jammed in such a situation, the hardware is
7228  *  reset (by s2io_close) and restarted again (by s2io_open) to
7229  *  overcome any problem that might have been caused in the hardware.
7230  *  Return value:
7231  *  void
7232  */
7233
7234 static void s2io_tx_watchdog(struct net_device *dev, unsigned int txqueue)
7235 {
7236         struct s2io_nic *sp = netdev_priv(dev);
7237         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7238
7239         if (netif_carrier_ok(dev)) {
7240                 swstats->watchdog_timer_cnt++;
7241                 schedule_work(&sp->rst_timer_task);
7242                 swstats->soft_reset_cnt++;
7243         }
7244 }
7245
7246 /**
7247  *   rx_osm_handler - To perform some OS related operations on SKB.
7248  *   @ring_data : the ring from which this RxD was extracted.
7249  *   @rxdp: descriptor
7250  *   Description:
7251  *   This function is called by the Rx interrupt serivce routine to perform
7252  *   some OS related operations on the SKB before passing it to the upper
7253  *   layers. It mainly checks if the checksum is OK, if so adds it to the
7254  *   SKBs cksum variable, increments the Rx packet count and passes the SKB
7255  *   to the upper layer. If the checksum is wrong, it increments the Rx
7256  *   packet error count, frees the SKB and returns error.
7257  *   Return value:
7258  *   SUCCESS on success and -1 on failure.
7259  */
7260 static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
7261 {
7262         struct s2io_nic *sp = ring_data->nic;
7263         struct net_device *dev = ring_data->dev;
7264         struct sk_buff *skb = (struct sk_buff *)
7265                 ((unsigned long)rxdp->Host_Control);
7266         int ring_no = ring_data->ring_no;
7267         u16 l3_csum, l4_csum;
7268         unsigned long long err = rxdp->Control_1 & RXD_T_CODE;
7269         struct lro *lro;
7270         u8 err_mask;
7271         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7272
7273         skb->dev = dev;
7274
7275         if (err) {
7276                 /* Check for parity error */
7277                 if (err & 0x1)
7278                         swstats->parity_err_cnt++;
7279
7280                 err_mask = err >> 48;
7281                 switch (err_mask) {
7282                 case 1:
7283                         swstats->rx_parity_err_cnt++;
7284                         break;
7285
7286                 case 2:
7287                         swstats->rx_abort_cnt++;
7288                         break;
7289
7290                 case 3:
7291                         swstats->rx_parity_abort_cnt++;
7292                         break;
7293
7294                 case 4:
7295                         swstats->rx_rda_fail_cnt++;
7296                         break;
7297
7298                 case 5:
7299                         swstats->rx_unkn_prot_cnt++;
7300                         break;
7301
7302                 case 6:
7303                         swstats->rx_fcs_err_cnt++;
7304                         break;
7305
7306                 case 7:
7307                         swstats->rx_buf_size_err_cnt++;
7308                         break;
7309
7310                 case 8:
7311                         swstats->rx_rxd_corrupt_cnt++;
7312                         break;
7313
7314                 case 15:
7315                         swstats->rx_unkn_err_cnt++;
7316                         break;
7317                 }
7318                 /*
7319                  * Drop the packet if bad transfer code. Exception being
7320                  * 0x5, which could be due to unsupported IPv6 extension header.
7321                  * In this case, we let stack handle the packet.
7322                  * Note that in this case, since checksum will be incorrect,
7323                  * stack will validate the same.
7324                  */
7325                 if (err_mask != 0x5) {
7326                         DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%x\n",
7327                                   dev->name, err_mask);
7328                         dev->stats.rx_crc_errors++;
7329                         swstats->mem_freed
7330                                 += skb->truesize;
7331                         dev_kfree_skb(skb);
7332                         ring_data->rx_bufs_left -= 1;
7333                         rxdp->Host_Control = 0;
7334                         return 0;
7335                 }
7336         }
7337
7338         rxdp->Host_Control = 0;
7339         if (sp->rxd_mode == RXD_MODE_1) {
7340                 int len = RXD_GET_BUFFER0_SIZE_1(rxdp->Control_2);
7341
7342                 skb_put(skb, len);
7343         } else if (sp->rxd_mode == RXD_MODE_3B) {
7344                 int get_block = ring_data->rx_curr_get_info.block_index;
7345                 int get_off = ring_data->rx_curr_get_info.offset;
7346                 int buf0_len = RXD_GET_BUFFER0_SIZE_3(rxdp->Control_2);
7347                 int buf2_len = RXD_GET_BUFFER2_SIZE_3(rxdp->Control_2);
7348                 unsigned char *buff = skb_push(skb, buf0_len);
7349
7350                 struct buffAdd *ba = &ring_data->ba[get_block][get_off];
7351                 memcpy(buff, ba->ba_0, buf0_len);
7352                 skb_put(skb, buf2_len);
7353         }
7354
7355         if ((rxdp->Control_1 & TCP_OR_UDP_FRAME) &&
7356             ((!ring_data->lro) ||
7357              (!(rxdp->Control_1 & RXD_FRAME_IP_FRAG))) &&
7358             (dev->features & NETIF_F_RXCSUM)) {
7359                 l3_csum = RXD_GET_L3_CKSUM(rxdp->Control_1);
7360                 l4_csum = RXD_GET_L4_CKSUM(rxdp->Control_1);
7361                 if ((l3_csum == L3_CKSUM_OK) && (l4_csum == L4_CKSUM_OK)) {
7362                         /*
7363                          * NIC verifies if the Checksum of the received
7364                          * frame is Ok or not and accordingly returns
7365                          * a flag in the RxD.
7366                          */
7367                         skb->ip_summed = CHECKSUM_UNNECESSARY;
7368                         if (ring_data->lro) {
7369                                 u32 tcp_len = 0;
7370                                 u8 *tcp;
7371                                 int ret = 0;
7372
7373                                 ret = s2io_club_tcp_session(ring_data,
7374                                                             skb->data, &tcp,
7375                                                             &tcp_len, &lro,
7376                                                             rxdp, sp);
7377                                 switch (ret) {
7378                                 case 3: /* Begin anew */
7379                                         lro->parent = skb;
7380                                         goto aggregate;
7381                                 case 1: /* Aggregate */
7382                                         lro_append_pkt(sp, lro, skb, tcp_len);
7383                                         goto aggregate;
7384                                 case 4: /* Flush session */
7385                                         lro_append_pkt(sp, lro, skb, tcp_len);
7386                                         queue_rx_frame(lro->parent,
7387                                                        lro->vlan_tag);
7388                                         clear_lro_session(lro);
7389                                         swstats->flush_max_pkts++;
7390                                         goto aggregate;
7391                                 case 2: /* Flush both */
7392                                         lro->parent->data_len = lro->frags_len;
7393                                         swstats->sending_both++;
7394                                         queue_rx_frame(lro->parent,
7395                                                        lro->vlan_tag);
7396                                         clear_lro_session(lro);
7397                                         goto send_up;
7398                                 case 0: /* sessions exceeded */
7399                                 case -1: /* non-TCP or not L2 aggregatable */
7400                                 case 5: /*
7401                                          * First pkt in session not
7402                                          * L3/L4 aggregatable
7403                                          */
7404                                         break;
7405                                 default:
7406                                         DBG_PRINT(ERR_DBG,
7407                                                   "%s: Samadhana!!\n",
7408                                                   __func__);
7409                                         BUG();
7410                                 }
7411                         }
7412                 } else {
7413                         /*
7414                          * Packet with erroneous checksum, let the
7415                          * upper layers deal with it.
7416                          */
7417                         skb_checksum_none_assert(skb);
7418                 }
7419         } else
7420                 skb_checksum_none_assert(skb);
7421
7422         swstats->mem_freed += skb->truesize;
7423 send_up:
7424         skb_record_rx_queue(skb, ring_no);
7425         queue_rx_frame(skb, RXD_GET_VLAN_TAG(rxdp->Control_2));
7426 aggregate:
7427         sp->mac_control.rings[ring_no].rx_bufs_left -= 1;
7428         return SUCCESS;
7429 }
7430
7431 /**
7432  *  s2io_link - stops/starts the Tx queue.
7433  *  @sp : private member of the device structure, which is a pointer to the
7434  *  s2io_nic structure.
7435  *  @link : inidicates whether link is UP/DOWN.
7436  *  Description:
7437  *  This function stops/starts the Tx queue depending on whether the link
7438  *  status of the NIC is is down or up. This is called by the Alarm
7439  *  interrupt handler whenever a link change interrupt comes up.
7440  *  Return value:
7441  *  void.
7442  */
7443
7444 static void s2io_link(struct s2io_nic *sp, int link)
7445 {
7446         struct net_device *dev = sp->dev;
7447         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
7448
7449         if (link != sp->last_link_state) {
7450                 init_tti(sp, link);
7451                 if (link == LINK_DOWN) {
7452                         DBG_PRINT(ERR_DBG, "%s: Link down\n", dev->name);
7453                         s2io_stop_all_tx_queue(sp);
7454                         netif_carrier_off(dev);
7455                         if (swstats->link_up_cnt)
7456                                 swstats->link_up_time =
7457                                         jiffies - sp->start_time;
7458                         swstats->link_down_cnt++;
7459                 } else {
7460                         DBG_PRINT(ERR_DBG, "%s: Link Up\n", dev->name);
7461                         if (swstats->link_down_cnt)
7462                                 swstats->link_down_time =
7463                                         jiffies - sp->start_time;
7464                         swstats->link_up_cnt++;
7465                         netif_carrier_on(dev);
7466                         s2io_wake_all_tx_queue(sp);
7467                 }
7468         }
7469         sp->last_link_state = link;
7470         sp->start_time = jiffies;
7471 }
7472
7473 /**
7474  *  s2io_init_pci -Initialization of PCI and PCI-X configuration registers .
7475  *  @sp : private member of the device structure, which is a pointer to the
7476  *  s2io_nic structure.
7477  *  Description:
7478  *  This function initializes a few of the PCI and PCI-X configuration registers
7479  *  with recommended values.
7480  *  Return value:
7481  *  void
7482  */
7483
7484 static void s2io_init_pci(struct s2io_nic *sp)
7485 {
7486         u16 pci_cmd = 0, pcix_cmd = 0;
7487
7488         /* Enable Data Parity Error Recovery in PCI-X command register. */
7489         pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7490                              &(pcix_cmd));
7491         pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7492                               (pcix_cmd | 1));
7493         pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER,
7494                              &(pcix_cmd));
7495
7496         /* Set the PErr Response bit in PCI command register. */
7497         pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7498         pci_write_config_word(sp->pdev, PCI_COMMAND,
7499                               (pci_cmd | PCI_COMMAND_PARITY));
7500         pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd);
7501 }
7502
7503 static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type,
7504                             u8 *dev_multiq)
7505 {
7506         int i;
7507
7508         if ((tx_fifo_num > MAX_TX_FIFOS) || (tx_fifo_num < 1)) {
7509                 DBG_PRINT(ERR_DBG, "Requested number of tx fifos "
7510                           "(%d) not supported\n", tx_fifo_num);
7511
7512                 if (tx_fifo_num < 1)
7513                         tx_fifo_num = 1;
7514                 else
7515                         tx_fifo_num = MAX_TX_FIFOS;
7516
7517                 DBG_PRINT(ERR_DBG, "Default to %d tx fifos\n", tx_fifo_num);
7518         }
7519
7520         if (multiq)
7521                 *dev_multiq = multiq;
7522
7523         if (tx_steering_type && (1 == tx_fifo_num)) {
7524                 if (tx_steering_type != TX_DEFAULT_STEERING)
7525                         DBG_PRINT(ERR_DBG,
7526                                   "Tx steering is not supported with "
7527                                   "one fifo. Disabling Tx steering.\n");
7528                 tx_steering_type = NO_STEERING;
7529         }
7530
7531         if ((tx_steering_type < NO_STEERING) ||
7532             (tx_steering_type > TX_DEFAULT_STEERING)) {
7533                 DBG_PRINT(ERR_DBG,
7534                           "Requested transmit steering not supported\n");
7535                 DBG_PRINT(ERR_DBG, "Disabling transmit steering\n");
7536                 tx_steering_type = NO_STEERING;
7537         }
7538
7539         if (rx_ring_num > MAX_RX_RINGS) {
7540                 DBG_PRINT(ERR_DBG,
7541                           "Requested number of rx rings not supported\n");
7542                 DBG_PRINT(ERR_DBG, "Default to %d rx rings\n",
7543                           MAX_RX_RINGS);
7544                 rx_ring_num = MAX_RX_RINGS;
7545         }
7546
7547         if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) {
7548                 DBG_PRINT(ERR_DBG, "Wrong intr_type requested. "
7549                           "Defaulting to INTA\n");
7550                 *dev_intr_type = INTA;
7551         }
7552
7553         if ((*dev_intr_type == MSI_X) &&
7554             ((pdev->device != PCI_DEVICE_ID_HERC_WIN) &&
7555              (pdev->device != PCI_DEVICE_ID_HERC_UNI))) {
7556                 DBG_PRINT(ERR_DBG, "Xframe I does not support MSI_X. "
7557                           "Defaulting to INTA\n");
7558                 *dev_intr_type = INTA;
7559         }
7560
7561         if ((rx_ring_mode != 1) && (rx_ring_mode != 2)) {
7562                 DBG_PRINT(ERR_DBG, "Requested ring mode not supported\n");
7563                 DBG_PRINT(ERR_DBG, "Defaulting to 1-buffer mode\n");
7564                 rx_ring_mode = 1;
7565         }
7566
7567         for (i = 0; i < MAX_RX_RINGS; i++)
7568                 if (rx_ring_sz[i] > MAX_RX_BLOCKS_PER_RING) {
7569                         DBG_PRINT(ERR_DBG, "Requested rx ring size not "
7570                                   "supported\nDefaulting to %d\n",
7571                                   MAX_RX_BLOCKS_PER_RING);
7572                         rx_ring_sz[i] = MAX_RX_BLOCKS_PER_RING;
7573                 }
7574
7575         return SUCCESS;
7576 }
7577
7578 /**
7579  * rts_ds_steer - Receive traffic steering based on IPv4 or IPv6 TOS or Traffic class respectively.
7580  * @nic: device private variable
7581  * @ds_codepoint: data
7582  * @ring: ring index
7583  * Description: The function configures the receive steering to
7584  * desired receive ring.
7585  * Return Value:  SUCCESS on success and
7586  * '-1' on failure (endian settings incorrect).
7587  */
7588 static int rts_ds_steer(struct s2io_nic *nic, u8 ds_codepoint, u8 ring)
7589 {
7590         struct XENA_dev_config __iomem *bar0 = nic->bar0;
7591         register u64 val64 = 0;
7592
7593         if (ds_codepoint > 63)
7594                 return FAILURE;
7595
7596         val64 = RTS_DS_MEM_DATA(ring);
7597         writeq(val64, &bar0->rts_ds_mem_data);
7598
7599         val64 = RTS_DS_MEM_CTRL_WE |
7600                 RTS_DS_MEM_CTRL_STROBE_NEW_CMD |
7601                 RTS_DS_MEM_CTRL_OFFSET(ds_codepoint);
7602
7603         writeq(val64, &bar0->rts_ds_mem_ctrl);
7604
7605         return wait_for_cmd_complete(&bar0->rts_ds_mem_ctrl,
7606                                      RTS_DS_MEM_CTRL_STROBE_CMD_BEING_EXECUTED,
7607                                      S2IO_BIT_RESET);
7608 }
7609
7610 static const struct net_device_ops s2io_netdev_ops = {
7611         .ndo_open               = s2io_open,
7612         .ndo_stop               = s2io_close,
7613         .ndo_get_stats          = s2io_get_stats,
7614         .ndo_start_xmit         = s2io_xmit,
7615         .ndo_validate_addr      = eth_validate_addr,
7616         .ndo_set_rx_mode        = s2io_set_multicast,
7617         .ndo_do_ioctl           = s2io_ioctl,
7618         .ndo_set_mac_address    = s2io_set_mac_addr,
7619         .ndo_change_mtu         = s2io_change_mtu,
7620         .ndo_set_features       = s2io_set_features,
7621         .ndo_tx_timeout         = s2io_tx_watchdog,
7622 #ifdef CONFIG_NET_POLL_CONTROLLER
7623         .ndo_poll_controller    = s2io_netpoll,
7624 #endif
7625 };
7626
7627 /**
7628  *  s2io_init_nic - Initialization of the adapter .
7629  *  @pdev : structure containing the PCI related information of the device.
7630  *  @pre: List of PCI devices supported by the driver listed in s2io_tbl.
7631  *  Description:
7632  *  The function initializes an adapter identified by the pci_dec structure.
7633  *  All OS related initialization including memory and device structure and
7634  *  initlaization of the device private variable is done. Also the swapper
7635  *  control register is initialized to enable read and write into the I/O
7636  *  registers of the device.
7637  *  Return value:
7638  *  returns 0 on success and negative on failure.
7639  */
7640
7641 static int
7642 s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
7643 {
7644         struct s2io_nic *sp;
7645         struct net_device *dev;
7646         int i, j, ret;
7647         int dma_flag = false;
7648         u32 mac_up, mac_down;
7649         u64 val64 = 0, tmp64 = 0;
7650         struct XENA_dev_config __iomem *bar0 = NULL;
7651         u16 subid;
7652         struct config_param *config;
7653         struct mac_info *mac_control;
7654         int mode;
7655         u8 dev_intr_type = intr_type;
7656         u8 dev_multiq = 0;
7657
7658         ret = s2io_verify_parm(pdev, &dev_intr_type, &dev_multiq);
7659         if (ret)
7660                 return ret;
7661
7662         ret = pci_enable_device(pdev);
7663         if (ret) {
7664                 DBG_PRINT(ERR_DBG,
7665                           "%s: pci_enable_device failed\n", __func__);
7666                 return ret;
7667         }
7668
7669         if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
7670                 DBG_PRINT(INIT_DBG, "%s: Using 64bit DMA\n", __func__);
7671                 dma_flag = true;
7672                 if (dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) {
7673                         DBG_PRINT(ERR_DBG,
7674                                   "Unable to obtain 64bit DMA for coherent allocations\n");
7675                         pci_disable_device(pdev);
7676                         return -ENOMEM;
7677                 }
7678         } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
7679                 DBG_PRINT(INIT_DBG, "%s: Using 32bit DMA\n", __func__);
7680         } else {
7681                 pci_disable_device(pdev);
7682                 return -ENOMEM;
7683         }
7684         ret = pci_request_regions(pdev, s2io_driver_name);
7685         if (ret) {
7686                 DBG_PRINT(ERR_DBG, "%s: Request Regions failed - %x\n",
7687                           __func__, ret);
7688                 pci_disable_device(pdev);
7689                 return -ENODEV;
7690         }
7691         if (dev_multiq)
7692                 dev = alloc_etherdev_mq(sizeof(struct s2io_nic), tx_fifo_num);
7693         else
7694                 dev = alloc_etherdev(sizeof(struct s2io_nic));
7695         if (dev == NULL) {
7696                 pci_disable_device(pdev);
7697                 pci_release_regions(pdev);
7698                 return -ENODEV;
7699         }
7700
7701         pci_set_master(pdev);
7702         pci_set_drvdata(pdev, dev);
7703         SET_NETDEV_DEV(dev, &pdev->dev);
7704
7705         /*  Private member variable initialized to s2io NIC structure */
7706         sp = netdev_priv(dev);
7707         sp->dev = dev;
7708         sp->pdev = pdev;
7709         sp->high_dma_flag = dma_flag;
7710         sp->device_enabled_once = false;
7711         if (rx_ring_mode == 1)
7712                 sp->rxd_mode = RXD_MODE_1;
7713         if (rx_ring_mode == 2)
7714                 sp->rxd_mode = RXD_MODE_3B;
7715
7716         sp->config.intr_type = dev_intr_type;
7717
7718         if ((pdev->device == PCI_DEVICE_ID_HERC_WIN) ||
7719             (pdev->device == PCI_DEVICE_ID_HERC_UNI))
7720                 sp->device_type = XFRAME_II_DEVICE;
7721         else
7722                 sp->device_type = XFRAME_I_DEVICE;
7723
7724
7725         /* Initialize some PCI/PCI-X fields of the NIC. */
7726         s2io_init_pci(sp);
7727
7728         /*
7729          * Setting the device configuration parameters.
7730          * Most of these parameters can be specified by the user during
7731          * module insertion as they are module loadable parameters. If
7732          * these parameters are not not specified during load time, they
7733          * are initialized with default values.
7734          */
7735         config = &sp->config;
7736         mac_control = &sp->mac_control;
7737
7738         config->napi = napi;
7739         config->tx_steering_type = tx_steering_type;
7740
7741         /* Tx side parameters. */
7742         if (config->tx_steering_type == TX_PRIORITY_STEERING)
7743                 config->tx_fifo_num = MAX_TX_FIFOS;
7744         else
7745                 config->tx_fifo_num = tx_fifo_num;
7746
7747         /* Initialize the fifos used for tx steering */
7748         if (config->tx_fifo_num < 5) {
7749                 if (config->tx_fifo_num  == 1)
7750                         sp->total_tcp_fifos = 1;
7751                 else
7752                         sp->total_tcp_fifos = config->tx_fifo_num - 1;
7753                 sp->udp_fifo_idx = config->tx_fifo_num - 1;
7754                 sp->total_udp_fifos = 1;
7755                 sp->other_fifo_idx = sp->total_tcp_fifos - 1;
7756         } else {
7757                 sp->total_tcp_fifos = (tx_fifo_num - FIFO_UDP_MAX_NUM -
7758                                        FIFO_OTHER_MAX_NUM);
7759                 sp->udp_fifo_idx = sp->total_tcp_fifos;
7760                 sp->total_udp_fifos = FIFO_UDP_MAX_NUM;
7761                 sp->other_fifo_idx = sp->udp_fifo_idx + FIFO_UDP_MAX_NUM;
7762         }
7763
7764         config->multiq = dev_multiq;
7765         for (i = 0; i < config->tx_fifo_num; i++) {
7766                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7767
7768                 tx_cfg->fifo_len = tx_fifo_len[i];
7769                 tx_cfg->fifo_priority = i;
7770         }
7771
7772         /* mapping the QoS priority to the configured fifos */
7773         for (i = 0; i < MAX_TX_FIFOS; i++)
7774                 config->fifo_mapping[i] = fifo_map[config->tx_fifo_num - 1][i];
7775
7776         /* map the hashing selector table to the configured fifos */
7777         for (i = 0; i < config->tx_fifo_num; i++)
7778                 sp->fifo_selector[i] = fifo_selector[i];
7779
7780
7781         config->tx_intr_type = TXD_INT_TYPE_UTILZ;
7782         for (i = 0; i < config->tx_fifo_num; i++) {
7783                 struct tx_fifo_config *tx_cfg = &config->tx_cfg[i];
7784
7785                 tx_cfg->f_no_snoop = (NO_SNOOP_TXD | NO_SNOOP_TXD_BUFFER);
7786                 if (tx_cfg->fifo_len < 65) {
7787                         config->tx_intr_type = TXD_INT_TYPE_PER_LIST;
7788                         break;
7789                 }
7790         }
7791         /* + 2 because one Txd for skb->data and one Txd for UFO */
7792         config->max_txds = MAX_SKB_FRAGS + 2;
7793
7794         /* Rx side parameters. */
7795         config->rx_ring_num = rx_ring_num;
7796         for (i = 0; i < config->rx_ring_num; i++) {
7797                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7798                 struct ring_info *ring = &mac_control->rings[i];
7799
7800                 rx_cfg->num_rxd = rx_ring_sz[i] * (rxd_count[sp->rxd_mode] + 1);
7801                 rx_cfg->ring_priority = i;
7802                 ring->rx_bufs_left = 0;
7803                 ring->rxd_mode = sp->rxd_mode;
7804                 ring->rxd_count = rxd_count[sp->rxd_mode];
7805                 ring->pdev = sp->pdev;
7806                 ring->dev = sp->dev;
7807         }
7808
7809         for (i = 0; i < rx_ring_num; i++) {
7810                 struct rx_ring_config *rx_cfg = &config->rx_cfg[i];
7811
7812                 rx_cfg->ring_org = RING_ORG_BUFF1;
7813                 rx_cfg->f_no_snoop = (NO_SNOOP_RXD | NO_SNOOP_RXD_BUFFER);
7814         }
7815
7816         /*  Setting Mac Control parameters */
7817         mac_control->rmac_pause_time = rmac_pause_time;
7818         mac_control->mc_pause_threshold_q0q3 = mc_pause_threshold_q0q3;
7819         mac_control->mc_pause_threshold_q4q7 = mc_pause_threshold_q4q7;
7820
7821
7822         /*  initialize the shared memory used by the NIC and the host */
7823         if (init_shared_mem(sp)) {
7824                 DBG_PRINT(ERR_DBG, "%s: Memory allocation failed\n", dev->name);
7825                 ret = -ENOMEM;
7826                 goto mem_alloc_failed;
7827         }
7828
7829         sp->bar0 = pci_ioremap_bar(pdev, 0);
7830         if (!sp->bar0) {
7831                 DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem1\n",
7832                           dev->name);
7833                 ret = -ENOMEM;
7834                 goto bar0_remap_failed;
7835         }
7836
7837         sp->bar1 = pci_ioremap_bar(pdev, 2);
7838         if (!sp->bar1) {
7839                 DBG_PRINT(ERR_DBG, "%s: Neterion: cannot remap io mem2\n",
7840                           dev->name);
7841                 ret = -ENOMEM;
7842                 goto bar1_remap_failed;
7843         }
7844
7845         /* Initializing the BAR1 address as the start of the FIFO pointer. */
7846         for (j = 0; j < MAX_TX_FIFOS; j++) {
7847                 mac_control->tx_FIFO_start[j] = sp->bar1 + (j * 0x00020000);
7848         }
7849
7850         /*  Driver entry points */
7851         dev->netdev_ops = &s2io_netdev_ops;
7852         dev->ethtool_ops = &netdev_ethtool_ops;
7853         dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM |
7854                 NETIF_F_TSO | NETIF_F_TSO6 |
7855                 NETIF_F_RXCSUM | NETIF_F_LRO;
7856         dev->features |= dev->hw_features |
7857                 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
7858         if (sp->high_dma_flag == true)
7859                 dev->features |= NETIF_F_HIGHDMA;
7860         dev->watchdog_timeo = WATCH_DOG_TIMEOUT;
7861         INIT_WORK(&sp->rst_timer_task, s2io_restart_nic);
7862         INIT_WORK(&sp->set_link_task, s2io_set_link);
7863
7864         pci_save_state(sp->pdev);
7865
7866         /* Setting swapper control on the NIC, for proper reset operation */
7867         if (s2io_set_swapper(sp)) {
7868                 DBG_PRINT(ERR_DBG, "%s: swapper settings are wrong\n",
7869                           dev->name);
7870                 ret = -EAGAIN;
7871                 goto set_swap_failed;
7872         }
7873
7874         /* Verify if the Herc works on the slot its placed into */
7875         if (sp->device_type & XFRAME_II_DEVICE) {
7876                 mode = s2io_verify_pci_mode(sp);
7877                 if (mode < 0) {
7878                         DBG_PRINT(ERR_DBG, "%s: Unsupported PCI bus mode\n",
7879                                   __func__);
7880                         ret = -EBADSLT;
7881                         goto set_swap_failed;
7882                 }
7883         }
7884
7885         if (sp->config.intr_type == MSI_X) {
7886                 sp->num_entries = config->rx_ring_num + 1;
7887                 ret = s2io_enable_msi_x(sp);
7888
7889                 if (!ret) {
7890                         ret = s2io_test_msi(sp);
7891                         /* rollback MSI-X, will re-enable during add_isr() */
7892                         remove_msix_isr(sp);
7893                 }
7894                 if (ret) {
7895
7896                         DBG_PRINT(ERR_DBG,
7897                                   "MSI-X requested but failed to enable\n");
7898                         sp->config.intr_type = INTA;
7899                 }
7900         }
7901
7902         if (config->intr_type ==  MSI_X) {
7903                 for (i = 0; i < config->rx_ring_num ; i++) {
7904                         struct ring_info *ring = &mac_control->rings[i];
7905
7906                         netif_napi_add(dev, &ring->napi, s2io_poll_msix, 64);
7907                 }
7908         } else {
7909                 netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64);
7910         }
7911
7912         /* Not needed for Herc */
7913         if (sp->device_type & XFRAME_I_DEVICE) {
7914                 /*
7915                  * Fix for all "FFs" MAC address problems observed on
7916                  * Alpha platforms
7917                  */
7918                 fix_mac_address(sp);
7919                 s2io_reset(sp);
7920         }
7921
7922         /*
7923          * MAC address initialization.
7924          * For now only one mac address will be read and used.
7925          */
7926         bar0 = sp->bar0;
7927         val64 = RMAC_ADDR_CMD_MEM_RD | RMAC_ADDR_CMD_MEM_STROBE_NEW_CMD |
7928                 RMAC_ADDR_CMD_MEM_OFFSET(0 + S2IO_MAC_ADDR_START_OFFSET);
7929         writeq(val64, &bar0->rmac_addr_cmd_mem);
7930         wait_for_cmd_complete(&bar0->rmac_addr_cmd_mem,
7931                               RMAC_ADDR_CMD_MEM_STROBE_CMD_EXECUTING,
7932                               S2IO_BIT_RESET);
7933         tmp64 = readq(&bar0->rmac_addr_data0_mem);
7934         mac_down = (u32)tmp64;
7935         mac_up = (u32) (tmp64 >> 32);
7936
7937         sp->def_mac_addr[0].mac_addr[3] = (u8) (mac_up);
7938         sp->def_mac_addr[0].mac_addr[2] = (u8) (mac_up >> 8);
7939         sp->def_mac_addr[0].mac_addr[1] = (u8) (mac_up >> 16);
7940         sp->def_mac_addr[0].mac_addr[0] = (u8) (mac_up >> 24);
7941         sp->def_mac_addr[0].mac_addr[5] = (u8) (mac_down >> 16);
7942         sp->def_mac_addr[0].mac_addr[4] = (u8) (mac_down >> 24);
7943
7944         /*  Set the factory defined MAC address initially   */
7945         dev->addr_len = ETH_ALEN;
7946         memcpy(dev->dev_addr, sp->def_mac_addr, ETH_ALEN);
7947
7948         /* initialize number of multicast & unicast MAC entries variables */
7949         if (sp->device_type == XFRAME_I_DEVICE) {
7950                 config->max_mc_addr = S2IO_XENA_MAX_MC_ADDRESSES;
7951                 config->max_mac_addr = S2IO_XENA_MAX_MAC_ADDRESSES;
7952                 config->mc_start_offset = S2IO_XENA_MC_ADDR_START_OFFSET;
7953         } else if (sp->device_type == XFRAME_II_DEVICE) {
7954                 config->max_mc_addr = S2IO_HERC_MAX_MC_ADDRESSES;
7955                 config->max_mac_addr = S2IO_HERC_MAX_MAC_ADDRESSES;
7956                 config->mc_start_offset = S2IO_HERC_MC_ADDR_START_OFFSET;
7957         }
7958
7959         /* MTU range: 46 - 9600 */
7960         dev->min_mtu = MIN_MTU;
7961         dev->max_mtu = S2IO_JUMBO_SIZE;
7962
7963         /* store mac addresses from CAM to s2io_nic structure */
7964         do_s2io_store_unicast_mc(sp);
7965
7966         /* Configure MSIX vector for number of rings configured plus one */
7967         if ((sp->device_type == XFRAME_II_DEVICE) &&
7968             (config->intr_type == MSI_X))
7969                 sp->num_entries = config->rx_ring_num + 1;
7970
7971         /* Store the values of the MSIX table in the s2io_nic structure */
7972         store_xmsi_data(sp);
7973         /* reset Nic and bring it to known state */
7974         s2io_reset(sp);
7975
7976         /*
7977          * Initialize link state flags
7978          * and the card state parameter
7979          */
7980         sp->state = 0;
7981
7982         /* Initialize spinlocks */
7983         for (i = 0; i < sp->config.tx_fifo_num; i++) {
7984                 struct fifo_info *fifo = &mac_control->fifos[i];
7985
7986                 spin_lock_init(&fifo->tx_lock);
7987         }
7988
7989         /*
7990          * SXE-002: Configure link and activity LED to init state
7991          * on driver load.
7992          */
7993         subid = sp->pdev->subsystem_device;
7994         if ((subid & 0xFF) >= 0x07) {
7995                 val64 = readq(&bar0->gpio_control);
7996                 val64 |= 0x0000800000000000ULL;
7997                 writeq(val64, &bar0->gpio_control);
7998                 val64 = 0x0411040400000000ULL;
7999                 writeq(val64, (void __iomem *)bar0 + 0x2700);
8000                 val64 = readq(&bar0->gpio_control);
8001         }
8002
8003         sp->rx_csum = 1;        /* Rx chksum verify enabled by default */
8004
8005         if (register_netdev(dev)) {
8006                 DBG_PRINT(ERR_DBG, "Device registration failed\n");
8007                 ret = -ENODEV;
8008                 goto register_failed;
8009         }
8010         s2io_vpd_read(sp);
8011         DBG_PRINT(ERR_DBG, "Copyright(c) 2002-2010 Exar Corp.\n");
8012         DBG_PRINT(ERR_DBG, "%s: Neterion %s (rev %d)\n", dev->name,
8013                   sp->product_name, pdev->revision);
8014         DBG_PRINT(ERR_DBG, "%s: Driver version %s\n", dev->name,
8015                   s2io_driver_version);
8016         DBG_PRINT(ERR_DBG, "%s: MAC Address: %pM\n", dev->name, dev->dev_addr);
8017         DBG_PRINT(ERR_DBG, "Serial number: %s\n", sp->serial_num);
8018         if (sp->device_type & XFRAME_II_DEVICE) {
8019                 mode = s2io_print_pci_mode(sp);
8020                 if (mode < 0) {
8021                         ret = -EBADSLT;
8022                         unregister_netdev(dev);
8023                         goto set_swap_failed;
8024                 }
8025         }
8026         switch (sp->rxd_mode) {
8027         case RXD_MODE_1:
8028                 DBG_PRINT(ERR_DBG, "%s: 1-Buffer receive mode enabled\n",
8029                           dev->name);
8030                 break;
8031         case RXD_MODE_3B:
8032                 DBG_PRINT(ERR_DBG, "%s: 2-Buffer receive mode enabled\n",
8033                           dev->name);
8034                 break;
8035         }
8036
8037         switch (sp->config.napi) {
8038         case 0:
8039                 DBG_PRINT(ERR_DBG, "%s: NAPI disabled\n", dev->name);
8040                 break;
8041         case 1:
8042                 DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name);
8043                 break;
8044         }
8045
8046         DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name,
8047                   sp->config.tx_fifo_num);
8048
8049         DBG_PRINT(ERR_DBG, "%s: Using %d Rx ring(s)\n", dev->name,
8050                   sp->config.rx_ring_num);
8051
8052         switch (sp->config.intr_type) {
8053         case INTA:
8054                 DBG_PRINT(ERR_DBG, "%s: Interrupt type INTA\n", dev->name);
8055                 break;
8056         case MSI_X:
8057                 DBG_PRINT(ERR_DBG, "%s: Interrupt type MSI-X\n", dev->name);
8058                 break;
8059         }
8060         if (sp->config.multiq) {
8061                 for (i = 0; i < sp->config.tx_fifo_num; i++) {
8062                         struct fifo_info *fifo = &mac_control->fifos[i];
8063
8064                         fifo->multiq = config->multiq;
8065                 }
8066                 DBG_PRINT(ERR_DBG, "%s: Multiqueue support enabled\n",
8067                           dev->name);
8068         } else
8069                 DBG_PRINT(ERR_DBG, "%s: Multiqueue support disabled\n",
8070                           dev->name);
8071
8072         switch (sp->config.tx_steering_type) {
8073         case NO_STEERING:
8074                 DBG_PRINT(ERR_DBG, "%s: No steering enabled for transmit\n",
8075                           dev->name);
8076                 break;
8077         case TX_PRIORITY_STEERING:
8078                 DBG_PRINT(ERR_DBG,
8079                           "%s: Priority steering enabled for transmit\n",
8080                           dev->name);
8081                 break;
8082         case TX_DEFAULT_STEERING:
8083                 DBG_PRINT(ERR_DBG,
8084                           "%s: Default steering enabled for transmit\n",
8085                           dev->name);
8086         }
8087
8088         DBG_PRINT(ERR_DBG, "%s: Large receive offload enabled\n",
8089                   dev->name);
8090         /* Initialize device name */
8091         snprintf(sp->name, sizeof(sp->name), "%s Neterion %s", dev->name,
8092                  sp->product_name);
8093
8094         if (vlan_tag_strip)
8095                 sp->vlan_strip_flag = 1;
8096         else
8097                 sp->vlan_strip_flag = 0;
8098
8099         /*
8100          * Make Link state as off at this point, when the Link change
8101          * interrupt comes the state will be automatically changed to
8102          * the right state.
8103          */
8104         netif_carrier_off(dev);
8105
8106         return 0;
8107
8108 register_failed:
8109 set_swap_failed:
8110         iounmap(sp->bar1);
8111 bar1_remap_failed:
8112         iounmap(sp->bar0);
8113 bar0_remap_failed:
8114 mem_alloc_failed:
8115         free_shared_mem(sp);
8116         pci_disable_device(pdev);
8117         pci_release_regions(pdev);
8118         free_netdev(dev);
8119
8120         return ret;
8121 }
8122
8123 /**
8124  * s2io_rem_nic - Free the PCI device
8125  * @pdev: structure containing the PCI related information of the device.
8126  * Description: This function is called by the Pci subsystem to release a
8127  * PCI device and free up all resource held up by the device. This could
8128  * be in response to a Hot plug event or when the driver is to be removed
8129  * from memory.
8130  */
8131
8132 static void s2io_rem_nic(struct pci_dev *pdev)
8133 {
8134         struct net_device *dev = pci_get_drvdata(pdev);
8135         struct s2io_nic *sp;
8136
8137         if (dev == NULL) {
8138                 DBG_PRINT(ERR_DBG, "Driver Data is NULL!!\n");
8139                 return;
8140         }
8141
8142         sp = netdev_priv(dev);
8143
8144         cancel_work_sync(&sp->rst_timer_task);
8145         cancel_work_sync(&sp->set_link_task);
8146
8147         unregister_netdev(dev);
8148
8149         free_shared_mem(sp);
8150         iounmap(sp->bar0);
8151         iounmap(sp->bar1);
8152         pci_release_regions(pdev);
8153         free_netdev(dev);
8154         pci_disable_device(pdev);
8155 }
8156
8157 module_pci_driver(s2io_driver);
8158
8159 static int check_L2_lro_capable(u8 *buffer, struct iphdr **ip,
8160                                 struct tcphdr **tcp, struct RxD_t *rxdp,
8161                                 struct s2io_nic *sp)
8162 {
8163         int ip_off;
8164         u8 l2_type = (u8)((rxdp->Control_1 >> 37) & 0x7), ip_len;
8165
8166         if (!(rxdp->Control_1 & RXD_FRAME_PROTO_TCP)) {
8167                 DBG_PRINT(INIT_DBG,
8168                           "%s: Non-TCP frames not supported for LRO\n",
8169                           __func__);
8170                 return -1;
8171         }
8172
8173         /* Checking for DIX type or DIX type with VLAN */
8174         if ((l2_type == 0) || (l2_type == 4)) {
8175                 ip_off = HEADER_ETHERNET_II_802_3_SIZE;
8176                 /*
8177                  * If vlan stripping is disabled and the frame is VLAN tagged,
8178                  * shift the offset by the VLAN header size bytes.
8179                  */
8180                 if ((!sp->vlan_strip_flag) &&
8181                     (rxdp->Control_1 & RXD_FRAME_VLAN_TAG))
8182                         ip_off += HEADER_VLAN_SIZE;
8183         } else {
8184                 /* LLC, SNAP etc are considered non-mergeable */
8185                 return -1;
8186         }
8187
8188         *ip = (struct iphdr *)(buffer + ip_off);
8189         ip_len = (u8)((*ip)->ihl);
8190         ip_len <<= 2;
8191         *tcp = (struct tcphdr *)((unsigned long)*ip + ip_len);
8192
8193         return 0;
8194 }
8195
8196 static int check_for_socket_match(struct lro *lro, struct iphdr *ip,
8197                                   struct tcphdr *tcp)
8198 {
8199         DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8200         if ((lro->iph->saddr != ip->saddr) ||
8201             (lro->iph->daddr != ip->daddr) ||
8202             (lro->tcph->source != tcp->source) ||
8203             (lro->tcph->dest != tcp->dest))
8204                 return -1;
8205         return 0;
8206 }
8207
8208 static inline int get_l4_pyld_length(struct iphdr *ip, struct tcphdr *tcp)
8209 {
8210         return ntohs(ip->tot_len) - (ip->ihl << 2) - (tcp->doff << 2);
8211 }
8212
8213 static void initiate_new_session(struct lro *lro, u8 *l2h,
8214                                  struct iphdr *ip, struct tcphdr *tcp,
8215                                  u32 tcp_pyld_len, u16 vlan_tag)
8216 {
8217         DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8218         lro->l2h = l2h;
8219         lro->iph = ip;
8220         lro->tcph = tcp;
8221         lro->tcp_next_seq = tcp_pyld_len + ntohl(tcp->seq);
8222         lro->tcp_ack = tcp->ack_seq;
8223         lro->sg_num = 1;
8224         lro->total_len = ntohs(ip->tot_len);
8225         lro->frags_len = 0;
8226         lro->vlan_tag = vlan_tag;
8227         /*
8228          * Check if we saw TCP timestamp.
8229          * Other consistency checks have already been done.
8230          */
8231         if (tcp->doff == 8) {
8232                 __be32 *ptr;
8233                 ptr = (__be32 *)(tcp+1);
8234                 lro->saw_ts = 1;
8235                 lro->cur_tsval = ntohl(*(ptr+1));
8236                 lro->cur_tsecr = *(ptr+2);
8237         }
8238         lro->in_use = 1;
8239 }
8240
8241 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro)
8242 {
8243         struct iphdr *ip = lro->iph;
8244         struct tcphdr *tcp = lro->tcph;
8245         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8246
8247         DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8248
8249         /* Update L3 header */
8250         csum_replace2(&ip->check, ip->tot_len, htons(lro->total_len));
8251         ip->tot_len = htons(lro->total_len);
8252
8253         /* Update L4 header */
8254         tcp->ack_seq = lro->tcp_ack;
8255         tcp->window = lro->window;
8256
8257         /* Update tsecr field if this session has timestamps enabled */
8258         if (lro->saw_ts) {
8259                 __be32 *ptr = (__be32 *)(tcp + 1);
8260                 *(ptr+2) = lro->cur_tsecr;
8261         }
8262
8263         /* Update counters required for calculation of
8264          * average no. of packets aggregated.
8265          */
8266         swstats->sum_avg_pkts_aggregated += lro->sg_num;
8267         swstats->num_aggregations++;
8268 }
8269
8270 static void aggregate_new_rx(struct lro *lro, struct iphdr *ip,
8271                              struct tcphdr *tcp, u32 l4_pyld)
8272 {
8273         DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8274         lro->total_len += l4_pyld;
8275         lro->frags_len += l4_pyld;
8276         lro->tcp_next_seq += l4_pyld;
8277         lro->sg_num++;
8278
8279         /* Update ack seq no. and window ad(from this pkt) in LRO object */
8280         lro->tcp_ack = tcp->ack_seq;
8281         lro->window = tcp->window;
8282
8283         if (lro->saw_ts) {
8284                 __be32 *ptr;
8285                 /* Update tsecr and tsval from this packet */
8286                 ptr = (__be32 *)(tcp+1);
8287                 lro->cur_tsval = ntohl(*(ptr+1));
8288                 lro->cur_tsecr = *(ptr + 2);
8289         }
8290 }
8291
8292 static int verify_l3_l4_lro_capable(struct lro *l_lro, struct iphdr *ip,
8293                                     struct tcphdr *tcp, u32 tcp_pyld_len)
8294 {
8295         u8 *ptr;
8296
8297         DBG_PRINT(INFO_DBG, "%s: Been here...\n", __func__);
8298
8299         if (!tcp_pyld_len) {
8300                 /* Runt frame or a pure ack */
8301                 return -1;
8302         }
8303
8304         if (ip->ihl != 5) /* IP has options */
8305                 return -1;
8306
8307         /* If we see CE codepoint in IP header, packet is not mergeable */
8308         if (INET_ECN_is_ce(ipv4_get_dsfield(ip)))
8309                 return -1;
8310
8311         /* If we see ECE or CWR flags in TCP header, packet is not mergeable */
8312         if (tcp->urg || tcp->psh || tcp->rst ||
8313             tcp->syn || tcp->fin ||
8314             tcp->ece || tcp->cwr || !tcp->ack) {
8315                 /*
8316                  * Currently recognize only the ack control word and
8317                  * any other control field being set would result in
8318                  * flushing the LRO session
8319                  */
8320                 return -1;
8321         }
8322
8323         /*
8324          * Allow only one TCP timestamp option. Don't aggregate if
8325          * any other options are detected.
8326          */
8327         if (tcp->doff != 5 && tcp->doff != 8)
8328                 return -1;
8329
8330         if (tcp->doff == 8) {
8331                 ptr = (u8 *)(tcp + 1);
8332                 while (*ptr == TCPOPT_NOP)
8333                         ptr++;
8334                 if (*ptr != TCPOPT_TIMESTAMP || *(ptr+1) != TCPOLEN_TIMESTAMP)
8335                         return -1;
8336
8337                 /* Ensure timestamp value increases monotonically */
8338                 if (l_lro)
8339                         if (l_lro->cur_tsval > ntohl(*((__be32 *)(ptr+2))))
8340                                 return -1;
8341
8342                 /* timestamp echo reply should be non-zero */
8343                 if (*((__be32 *)(ptr+6)) == 0)
8344                         return -1;
8345         }
8346
8347         return 0;
8348 }
8349
8350 static int s2io_club_tcp_session(struct ring_info *ring_data, u8 *buffer,
8351                                  u8 **tcp, u32 *tcp_len, struct lro **lro,
8352                                  struct RxD_t *rxdp, struct s2io_nic *sp)
8353 {
8354         struct iphdr *ip;
8355         struct tcphdr *tcph;
8356         int ret = 0, i;
8357         u16 vlan_tag = 0;
8358         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8359
8360         ret = check_L2_lro_capable(buffer, &ip, (struct tcphdr **)tcp,
8361                                    rxdp, sp);
8362         if (ret)
8363                 return ret;
8364
8365         DBG_PRINT(INFO_DBG, "IP Saddr: %x Daddr: %x\n", ip->saddr, ip->daddr);
8366
8367         vlan_tag = RXD_GET_VLAN_TAG(rxdp->Control_2);
8368         tcph = (struct tcphdr *)*tcp;
8369         *tcp_len = get_l4_pyld_length(ip, tcph);
8370         for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8371                 struct lro *l_lro = &ring_data->lro0_n[i];
8372                 if (l_lro->in_use) {
8373                         if (check_for_socket_match(l_lro, ip, tcph))
8374                                 continue;
8375                         /* Sock pair matched */
8376                         *lro = l_lro;
8377
8378                         if ((*lro)->tcp_next_seq != ntohl(tcph->seq)) {
8379                                 DBG_PRINT(INFO_DBG, "%s: Out of sequence. "
8380                                           "expected 0x%x, actual 0x%x\n",
8381                                           __func__,
8382                                           (*lro)->tcp_next_seq,
8383                                           ntohl(tcph->seq));
8384
8385                                 swstats->outof_sequence_pkts++;
8386                                 ret = 2;
8387                                 break;
8388                         }
8389
8390                         if (!verify_l3_l4_lro_capable(l_lro, ip, tcph,
8391                                                       *tcp_len))
8392                                 ret = 1; /* Aggregate */
8393                         else
8394                                 ret = 2; /* Flush both */
8395                         break;
8396                 }
8397         }
8398
8399         if (ret == 0) {
8400                 /* Before searching for available LRO objects,
8401                  * check if the pkt is L3/L4 aggregatable. If not
8402                  * don't create new LRO session. Just send this
8403                  * packet up.
8404                  */
8405                 if (verify_l3_l4_lro_capable(NULL, ip, tcph, *tcp_len))
8406                         return 5;
8407
8408                 for (i = 0; i < MAX_LRO_SESSIONS; i++) {
8409                         struct lro *l_lro = &ring_data->lro0_n[i];
8410                         if (!(l_lro->in_use)) {
8411                                 *lro = l_lro;
8412                                 ret = 3; /* Begin anew */
8413                                 break;
8414                         }
8415                 }
8416         }
8417
8418         if (ret == 0) { /* sessions exceeded */
8419                 DBG_PRINT(INFO_DBG, "%s: All LRO sessions already in use\n",
8420                           __func__);
8421                 *lro = NULL;
8422                 return ret;
8423         }
8424
8425         switch (ret) {
8426         case 3:
8427                 initiate_new_session(*lro, buffer, ip, tcph, *tcp_len,
8428                                      vlan_tag);
8429                 break;
8430         case 2:
8431                 update_L3L4_header(sp, *lro);
8432                 break;
8433         case 1:
8434                 aggregate_new_rx(*lro, ip, tcph, *tcp_len);
8435                 if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) {
8436                         update_L3L4_header(sp, *lro);
8437                         ret = 4; /* Flush the LRO */
8438                 }
8439                 break;
8440         default:
8441                 DBG_PRINT(ERR_DBG, "%s: Don't know, can't say!!\n", __func__);
8442                 break;
8443         }
8444
8445         return ret;
8446 }
8447
8448 static void clear_lro_session(struct lro *lro)
8449 {
8450         static u16 lro_struct_size = sizeof(struct lro);
8451
8452         memset(lro, 0, lro_struct_size);
8453 }
8454
8455 static void queue_rx_frame(struct sk_buff *skb, u16 vlan_tag)
8456 {
8457         struct net_device *dev = skb->dev;
8458         struct s2io_nic *sp = netdev_priv(dev);
8459
8460         skb->protocol = eth_type_trans(skb, dev);
8461         if (vlan_tag && sp->vlan_strip_flag)
8462                 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
8463         if (sp->config.napi)
8464                 netif_receive_skb(skb);
8465         else
8466                 netif_rx(skb);
8467 }
8468
8469 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro,
8470                            struct sk_buff *skb, u32 tcp_len)
8471 {
8472         struct sk_buff *first = lro->parent;
8473         struct swStat *swstats = &sp->mac_control.stats_info->sw_stat;
8474
8475         first->len += tcp_len;
8476         first->data_len = lro->frags_len;
8477         skb_pull(skb, (skb->len - tcp_len));
8478         if (skb_shinfo(first)->frag_list)
8479                 lro->last_frag->next = skb;
8480         else
8481                 skb_shinfo(first)->frag_list = skb;
8482         first->truesize += skb->truesize;
8483         lro->last_frag = skb;
8484         swstats->clubbed_frms_cnt++;
8485 }
8486
8487 /**
8488  * s2io_io_error_detected - called when PCI error is detected
8489  * @pdev: Pointer to PCI device
8490  * @state: The current pci connection state
8491  *
8492  * This function is called after a PCI bus error affecting
8493  * this device has been detected.
8494  */
8495 static pci_ers_result_t s2io_io_error_detected(struct pci_dev *pdev,
8496                                                pci_channel_state_t state)
8497 {
8498         struct net_device *netdev = pci_get_drvdata(pdev);
8499         struct s2io_nic *sp = netdev_priv(netdev);
8500
8501         netif_device_detach(netdev);
8502
8503         if (state == pci_channel_io_perm_failure)
8504                 return PCI_ERS_RESULT_DISCONNECT;
8505
8506         if (netif_running(netdev)) {
8507                 /* Bring down the card, while avoiding PCI I/O */
8508                 do_s2io_card_down(sp, 0);
8509         }
8510         pci_disable_device(pdev);
8511
8512         return PCI_ERS_RESULT_NEED_RESET;
8513 }
8514
8515 /**
8516  * s2io_io_slot_reset - called after the pci bus has been reset.
8517  * @pdev: Pointer to PCI device
8518  *
8519  * Restart the card from scratch, as if from a cold-boot.
8520  * At this point, the card has exprienced a hard reset,
8521  * followed by fixups by BIOS, and has its config space
8522  * set up identically to what it was at cold boot.
8523  */
8524 static pci_ers_result_t s2io_io_slot_reset(struct pci_dev *pdev)
8525 {
8526         struct net_device *netdev = pci_get_drvdata(pdev);
8527         struct s2io_nic *sp = netdev_priv(netdev);
8528
8529         if (pci_enable_device(pdev)) {
8530                 pr_err("Cannot re-enable PCI device after reset.\n");
8531                 return PCI_ERS_RESULT_DISCONNECT;
8532         }
8533
8534         pci_set_master(pdev);
8535         s2io_reset(sp);
8536
8537         return PCI_ERS_RESULT_RECOVERED;
8538 }
8539
8540 /**
8541  * s2io_io_resume - called when traffic can start flowing again.
8542  * @pdev: Pointer to PCI device
8543  *
8544  * This callback is called when the error recovery driver tells
8545  * us that its OK to resume normal operation.
8546  */
8547 static void s2io_io_resume(struct pci_dev *pdev)
8548 {
8549         struct net_device *netdev = pci_get_drvdata(pdev);
8550         struct s2io_nic *sp = netdev_priv(netdev);
8551
8552         if (netif_running(netdev)) {
8553                 if (s2io_card_up(sp)) {
8554                         pr_err("Can't bring device back up after reset.\n");
8555                         return;
8556                 }
8557
8558                 if (do_s2io_prog_unicast(netdev, netdev->dev_addr) == FAILURE) {
8559                         s2io_card_down(sp);
8560                         pr_err("Can't restore mac addr after reset.\n");
8561                         return;
8562                 }
8563         }
8564
8565         netif_device_attach(netdev);
8566         netif_tx_wake_all_queues(netdev);
8567 }