Lines Matching refs:sp

124 static inline int is_s2io_card_up(const struct s2io_nic *sp)  in is_s2io_card_up()  argument
126 return test_bit(__S2IO_STATE_CARD_UP, &sp->state); in is_s2io_card_up()
349 static void do_s2io_copy_mac_addr(struct s2io_nic *sp, int offset, u64 mac_addr) in do_s2io_copy_mac_addr() argument
351 sp->def_mac_addr[offset].mac_addr[5] = (u8) (mac_addr); in do_s2io_copy_mac_addr()
352 sp->def_mac_addr[offset].mac_addr[4] = (u8) (mac_addr >> 8); in do_s2io_copy_mac_addr()
353 sp->def_mac_addr[offset].mac_addr[3] = (u8) (mac_addr >> 16); in do_s2io_copy_mac_addr()
354 sp->def_mac_addr[offset].mac_addr[2] = (u8) (mac_addr >> 24); in do_s2io_copy_mac_addr()
355 sp->def_mac_addr[offset].mac_addr[1] = (u8) (mac_addr >> 32); in do_s2io_copy_mac_addr()
356 sp->def_mac_addr[offset].mac_addr[0] = (u8) (mac_addr >> 40); in do_s2io_copy_mac_addr()
506 static inline void s2io_stop_all_tx_queue(struct s2io_nic *sp) in s2io_stop_all_tx_queue() argument
508 if (!sp->config.multiq) { in s2io_stop_all_tx_queue()
511 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_stop_all_tx_queue()
512 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_STOP; in s2io_stop_all_tx_queue()
514 netif_tx_stop_all_queues(sp->dev); in s2io_stop_all_tx_queue()
517 static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no) in s2io_stop_tx_queue() argument
519 if (!sp->config.multiq) in s2io_stop_tx_queue()
520 sp->mac_control.fifos[fifo_no].queue_state = in s2io_stop_tx_queue()
523 netif_tx_stop_all_queues(sp->dev); in s2io_stop_tx_queue()
526 static inline void s2io_start_all_tx_queue(struct s2io_nic *sp) in s2io_start_all_tx_queue() argument
528 if (!sp->config.multiq) { in s2io_start_all_tx_queue()
531 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_start_all_tx_queue()
532 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START; in s2io_start_all_tx_queue()
534 netif_tx_start_all_queues(sp->dev); in s2io_start_all_tx_queue()
537 static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp) in s2io_wake_all_tx_queue() argument
539 if (!sp->config.multiq) { in s2io_wake_all_tx_queue()
542 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_wake_all_tx_queue()
543 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START; in s2io_wake_all_tx_queue()
545 netif_tx_wake_all_queues(sp->dev); in s2io_wake_all_tx_queue()
2079 static int verify_pcc_quiescent(struct s2io_nic *sp, int flag) in verify_pcc_quiescent() argument
2082 struct XENA_dev_config __iomem *bar0 = sp->bar0; in verify_pcc_quiescent()
2085 herc = (sp->device_type == XFRAME_II_DEVICE); in verify_pcc_quiescent()
2088 if ((!herc && (sp->pdev->revision >= 4)) || herc) { in verify_pcc_quiescent()
2096 if ((!herc && (sp->pdev->revision >= 4)) || herc) { in verify_pcc_quiescent()
2119 static int verify_xena_quiescence(struct s2io_nic *sp) in verify_xena_quiescence() argument
2122 struct XENA_dev_config __iomem *bar0 = sp->bar0; in verify_xena_quiescence()
2124 mode = s2io_verify_pci_mode(sp); in verify_xena_quiescence()
2165 sp->device_type == XFRAME_II_DEVICE && in verify_xena_quiescence()
2186 static void fix_mac_address(struct s2io_nic *sp) in fix_mac_address() argument
2188 struct XENA_dev_config __iomem *bar0 = sp->bar0; in fix_mac_address()
2665 static void free_rxd_blk(struct s2io_nic *sp, int ring_no, int blk) in free_rxd_blk() argument
2667 struct net_device *dev = sp->dev; in free_rxd_blk()
2673 struct mac_info *mac_control = &sp->mac_control; in free_rxd_blk()
2677 for (j = 0 ; j < rxd_count[sp->rxd_mode]; j++) { in free_rxd_blk()
2683 if (sp->rxd_mode == RXD_MODE_1) { in free_rxd_blk()
2685 pci_unmap_single(sp->pdev, in free_rxd_blk()
2692 } else if (sp->rxd_mode == RXD_MODE_3B) { in free_rxd_blk()
2694 pci_unmap_single(sp->pdev, in free_rxd_blk()
2698 pci_unmap_single(sp->pdev, in free_rxd_blk()
2702 pci_unmap_single(sp->pdev, in free_rxd_blk()
2723 static void free_rx_buffers(struct s2io_nic *sp) in free_rx_buffers() argument
2725 struct net_device *dev = sp->dev; in free_rx_buffers()
2727 struct config_param *config = &sp->config; in free_rx_buffers()
2728 struct mac_info *mac_control = &sp->mac_control; in free_rx_buffers()
2734 free_rxd_blk(sp, i, blk); in free_rx_buffers()
3099 struct s2io_nic *sp = netdev_priv(dev); in s2io_mdio_write() local
3100 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_mdio_write()
3145 struct s2io_nic *sp = netdev_priv(dev); in s2io_mdio_read() local
3146 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_mdio_read()
3247 struct s2io_nic *sp = netdev_priv(dev); in s2io_updt_xpak_counter() local
3248 struct stat_block *stats = sp->mac_control.stats_info; in s2io_updt_xpak_counter()
3405 static void s2io_reset(struct s2io_nic *sp) in s2io_reset() argument
3407 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_reset()
3418 __func__, pci_name(sp->pdev)); in s2io_reset()
3421 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd)); in s2io_reset()
3425 if (strstr(sp->product_name, "CX4")) in s2io_reset()
3431 pci_restore_state(sp->pdev); in s2io_reset()
3432 pci_save_state(sp->pdev); in s2io_reset()
3433 pci_read_config_word(sp->pdev, 0x2, &val16); in s2io_reset()
3442 pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd); in s2io_reset()
3444 s2io_init_pci(sp); in s2io_reset()
3447 s2io_set_swapper(sp); in s2io_reset()
3450 do_s2io_restore_unicast_mc(sp); in s2io_reset()
3453 restore_xmsi_data(sp); in s2io_reset()
3456 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_reset()
3458 pci_write_config_word(sp->pdev, PCI_STATUS, 0x8000); in s2io_reset()
3461 pci_write_config_dword(sp->pdev, 0x68, 0x7C); in s2io_reset()
3468 memset(&sp->stats, 0, sizeof(struct net_device_stats)); in s2io_reset()
3470 stats = sp->mac_control.stats_info; in s2io_reset()
3496 subid = sp->pdev->subsystem_device; in s2io_reset()
3498 (sp->device_type == XFRAME_I_DEVICE)) { in s2io_reset()
3510 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_reset()
3515 sp->device_enabled_once = false; in s2io_reset()
3528 static int s2io_set_swapper(struct s2io_nic *sp) in s2io_set_swapper() argument
3530 struct net_device *dev = sp->dev; in s2io_set_swapper()
3531 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_swapper()
3614 if (sp->config.intr_type == INTA) in s2io_set_swapper()
3638 if (sp->config.intr_type == INTA) in s2io_set_swapper()
3819 struct s2io_nic *sp = dev_id; in s2io_test_intr() local
3821 sp->msi_detected = 1; in s2io_test_intr()
3822 wake_up(&sp->msi_wait); in s2io_test_intr()
3828 static int s2io_test_msi(struct s2io_nic *sp) in s2io_test_msi() argument
3830 struct pci_dev *pdev = sp->pdev; in s2io_test_msi()
3831 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_test_msi()
3835 err = request_irq(sp->entries[1].vector, s2io_test_intr, 0, in s2io_test_msi()
3836 sp->name, sp); in s2io_test_msi()
3839 sp->dev->name, pci_name(pdev), pdev->irq); in s2io_test_msi()
3843 init_waitqueue_head(&sp->msi_wait); in s2io_test_msi()
3844 sp->msi_detected = 0; in s2io_test_msi()
3852 wait_event_timeout(sp->msi_wait, sp->msi_detected, HZ/10); in s2io_test_msi()
3854 if (!sp->msi_detected) { in s2io_test_msi()
3858 sp->dev->name, pci_name(pdev)); in s2io_test_msi()
3863 free_irq(sp->entries[1].vector, sp); in s2io_test_msi()
3870 static void remove_msix_isr(struct s2io_nic *sp) in remove_msix_isr() argument
3875 for (i = 0; i < sp->num_entries; i++) { in remove_msix_isr()
3876 if (sp->s2io_entries[i].in_use == MSIX_REGISTERED_SUCCESS) { in remove_msix_isr()
3877 int vector = sp->entries[i].vector; in remove_msix_isr()
3878 void *arg = sp->s2io_entries[i].arg; in remove_msix_isr()
3883 kfree(sp->entries); in remove_msix_isr()
3884 kfree(sp->s2io_entries); in remove_msix_isr()
3885 sp->entries = NULL; in remove_msix_isr()
3886 sp->s2io_entries = NULL; in remove_msix_isr()
3888 pci_read_config_word(sp->pdev, 0x42, &msi_control); in remove_msix_isr()
3890 pci_write_config_word(sp->pdev, 0x42, msi_control); in remove_msix_isr()
3892 pci_disable_msix(sp->pdev); in remove_msix_isr()
3895 static void remove_inta_isr(struct s2io_nic *sp) in remove_inta_isr() argument
3897 free_irq(sp->pdev->irq, sp->dev); in remove_inta_isr()
3918 struct s2io_nic *sp = netdev_priv(dev); in s2io_open() local
3919 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_open()
3927 sp->last_link_state = 0; in s2io_open()
3930 err = s2io_card_up(sp); in s2io_open()
3939 s2io_card_down(sp); in s2io_open()
3943 s2io_start_all_tx_queue(sp); in s2io_open()
3947 if (sp->config.intr_type == MSI_X) { in s2io_open()
3948 if (sp->entries) { in s2io_open()
3949 kfree(sp->entries); in s2io_open()
3950 swstats->mem_freed += sp->num_entries * in s2io_open()
3953 if (sp->s2io_entries) { in s2io_open()
3954 kfree(sp->s2io_entries); in s2io_open()
3955 swstats->mem_freed += sp->num_entries * in s2io_open()
3977 struct s2io_nic *sp = netdev_priv(dev); in s2io_close() local
3978 struct config_param *config = &sp->config; in s2io_close()
3985 if (!is_s2io_card_up(sp)) in s2io_close()
3988 s2io_stop_all_tx_queue(sp); in s2io_close()
3991 tmp64 = do_s2io_read_unicast_mc(sp, offset); in s2io_close()
3993 do_s2io_delete_unicast_mc(sp, tmp64); in s2io_close()
3996 s2io_card_down(sp); in s2io_close()
4016 struct s2io_nic *sp = netdev_priv(dev); in s2io_xmit() local
4027 struct config_param *config = &sp->config; in s2io_xmit()
4028 struct mac_info *mac_control = &sp->mac_control; in s2io_xmit()
4040 if (!is_s2io_card_up(sp)) { in s2io_xmit()
4050 if (sp->config.tx_steering_type == TX_DEFAULT_STEERING) { in s2io_xmit()
4061 queue_len = sp->total_tcp_fifos; in s2io_xmit()
4064 sp->fifo_selector[queue_len - 1]; in s2io_xmit()
4068 queue_len = sp->total_udp_fifos; in s2io_xmit()
4071 sp->fifo_selector[queue_len - 1]; in s2io_xmit()
4074 queue += sp->udp_fifo_idx; in s2io_xmit()
4081 } else if (sp->config.tx_steering_type == TX_PRIORITY_STEERING) in s2io_xmit()
4094 if (sp->config.multiq) { in s2io_xmit()
4115 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4160 txdp->Buffer_Pointer = pci_map_single(sp->pdev, in s2io_xmit()
4164 if (pci_dma_mapping_error(sp->pdev, txdp->Buffer_Pointer)) in s2io_xmit()
4169 txdp->Buffer_Pointer = pci_map_single(sp->pdev, skb->data, in s2io_xmit()
4171 if (pci_dma_mapping_error(sp->pdev, txdp->Buffer_Pointer)) in s2io_xmit()
4187 txdp->Buffer_Pointer = (u64)skb_frag_dma_map(&sp->pdev->dev, in s2io_xmit()
4224 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4229 if (sp->config.intr_type == MSI_X) in s2io_xmit()
4236 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4246 struct s2io_nic *sp = (struct s2io_nic *)data; in s2io_alarm_handle() local
4247 struct net_device *dev = sp->dev; in s2io_alarm_handle()
4250 mod_timer(&sp->alarm_timer, jiffies + HZ / 2); in s2io_alarm_handle()
4256 struct s2io_nic *sp = ring->nic; in s2io_msix_ring_handle() local
4257 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_msix_ring_handle()
4259 if (unlikely(!is_s2io_card_up(sp))) in s2io_msix_ring_handle()
4262 if (sp->config.napi) { in s2io_msix_ring_handle()
4274 s2io_chk_rx_buffers(sp, ring); in s2io_msix_ring_handle()
4284 struct s2io_nic *sp = fifos->nic; in s2io_msix_fifo_handle() local
4285 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_msix_fifo_handle()
4286 struct config_param *config = &sp->config; in s2io_msix_fifo_handle()
4289 if (unlikely(!is_s2io_card_up(sp))) in s2io_msix_fifo_handle()
4301 s2io_txpic_intr_handle(sp); in s2io_msix_fifo_handle()
4309 writeq(sp->general_int_mask, &bar0->general_int_mask); in s2io_msix_fifo_handle()
4317 static void s2io_txpic_intr_handle(struct s2io_nic *sp) in s2io_txpic_intr_handle() argument
4319 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_txpic_intr_handle()
4346 if (!sp->device_enabled_once) in s2io_txpic_intr_handle()
4347 sp->device_enabled_once = 1; in s2io_txpic_intr_handle()
4349 s2io_link(sp, LINK_UP); in s2io_txpic_intr_handle()
4361 s2io_link(sp, LINK_DOWN); in s2io_txpic_intr_handle()
4412 struct s2io_nic *sp = netdev_priv(dev); in s2io_handle_errors() local
4413 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_handle_errors()
4417 struct swStat *sw_stat = &sp->mac_control.stats_info->sw_stat; in s2io_handle_errors()
4418 struct xpakStat *stats = &sp->mac_control.stats_info->xpak_stat; in s2io_handle_errors()
4420 if (!is_s2io_card_up(sp)) in s2io_handle_errors()
4423 if (pci_channel_offline(sp->pdev)) in s2io_handle_errors()
4440 if (s2io_link_fault_indication(sp) == MAC_RMAC_ERR_TIMER) { in s2io_handle_errors()
4444 schedule_work(&sp->set_link_task); in s2io_handle_errors()
4458 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_handle_errors()
4677 if (sp->device_type != XFRAME_II_DEVICE) { in s2io_handle_errors()
4693 s2io_stop_all_tx_queue(sp); in s2io_handle_errors()
4694 schedule_work(&sp->rst_timer_task); in s2io_handle_errors()
4714 struct s2io_nic *sp = netdev_priv(dev); in s2io_isr() local
4715 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_isr()
4722 if (pci_channel_offline(sp->pdev)) in s2io_isr()
4725 if (!is_s2io_card_up(sp)) in s2io_isr()
4728 config = &sp->config; in s2io_isr()
4729 mac_control = &sp->mac_control; in s2io_isr()
4749 napi_schedule(&sp->napi); in s2io_isr()
4782 s2io_txpic_intr_handle(sp); in s2io_isr()
4791 s2io_chk_rx_buffers(sp, ring); in s2io_isr()
4794 writeq(sp->general_int_mask, &bar0->general_int_mask); in s2io_isr()
4810 static void s2io_updt_stats(struct s2io_nic *sp) in s2io_updt_stats() argument
4812 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_updt_stats()
4816 if (is_s2io_card_up(sp)) { in s2io_updt_stats()
4844 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_stats() local
4845 struct mac_info *mac_control = &sp->mac_control; in s2io_get_stats()
4850 s2io_updt_stats(sp); in s2io_get_stats()
4860 le32_to_cpu(stats->rmac_vld_frms)) - sp->stats.rx_packets; in s2io_get_stats()
4861 sp->stats.rx_packets += delta; in s2io_get_stats()
4865 le32_to_cpu(stats->tmac_frms)) - sp->stats.tx_packets; in s2io_get_stats()
4866 sp->stats.tx_packets += delta; in s2io_get_stats()
4870 le32_to_cpu(stats->rmac_data_octets)) - sp->stats.rx_bytes; in s2io_get_stats()
4871 sp->stats.rx_bytes += delta; in s2io_get_stats()
4875 le32_to_cpu(stats->tmac_data_octets)) - sp->stats.tx_bytes; in s2io_get_stats()
4876 sp->stats.tx_bytes += delta; in s2io_get_stats()
4879 delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_errors; in s2io_get_stats()
4880 sp->stats.rx_errors += delta; in s2io_get_stats()
4884 le32_to_cpu(stats->tmac_any_err_frms)) - sp->stats.tx_errors; in s2io_get_stats()
4885 sp->stats.tx_errors += delta; in s2io_get_stats()
4888 delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_dropped; in s2io_get_stats()
4889 sp->stats.rx_dropped += delta; in s2io_get_stats()
4892 delta = le64_to_cpu(stats->tmac_drop_frms) - sp->stats.tx_dropped; in s2io_get_stats()
4893 sp->stats.tx_dropped += delta; in s2io_get_stats()
4904 delta -= sp->stats.multicast; in s2io_get_stats()
4905 sp->stats.multicast += delta; in s2io_get_stats()
4910 le64_to_cpu(stats->rmac_long_frms) - sp->stats.rx_length_errors; in s2io_get_stats()
4911 sp->stats.rx_length_errors += delta; in s2io_get_stats()
4914 delta = le64_to_cpu(stats->rmac_fcs_err_frms) - sp->stats.rx_crc_errors; in s2io_get_stats()
4915 sp->stats.rx_crc_errors += delta; in s2io_get_stats()
4938 struct s2io_nic *sp = netdev_priv(dev); in s2io_set_multicast() local
4939 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_multicast()
4944 struct config_param *config = &sp->config; in s2io_set_multicast()
4946 if ((dev->flags & IFF_ALLMULTI) && (!sp->m_cast_flg)) { in s2io_set_multicast()
4961 sp->m_cast_flg = 1; in s2io_set_multicast()
4962 sp->all_multi_pos = config->max_mc_addr - 1; in s2io_set_multicast()
4963 } else if ((dev->flags & IFF_ALLMULTI) && (sp->m_cast_flg)) { in s2io_set_multicast()
4971 RMAC_ADDR_CMD_MEM_OFFSET(sp->all_multi_pos); in s2io_set_multicast()
4978 sp->m_cast_flg = 0; in s2io_set_multicast()
4979 sp->all_multi_pos = 0; in s2io_set_multicast()
4982 if ((dev->flags & IFF_PROMISC) && (!sp->promisc_flg)) { in s2io_set_multicast()
4997 sp->vlan_strip_flag = 0; in s2io_set_multicast()
5001 sp->promisc_flg = 1; in s2io_set_multicast()
5004 } else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) { in s2io_set_multicast()
5019 sp->vlan_strip_flag = 1; in s2io_set_multicast()
5023 sp->promisc_flg = 0; in s2io_set_multicast()
5028 if ((!sp->m_cast_flg) && netdev_mc_count(dev)) { in s2io_set_multicast()
5038 prev_cnt = sp->mc_addr_count; in s2io_set_multicast()
5039 sp->mc_addr_count = netdev_mc_count(dev); in s2io_set_multicast()
5100 static void do_s2io_store_unicast_mc(struct s2io_nic *sp) in do_s2io_store_unicast_mc() argument
5104 struct config_param *config = &sp->config; in do_s2io_store_unicast_mc()
5108 mac_addr = do_s2io_read_unicast_mc(sp, offset); in do_s2io_store_unicast_mc()
5112 do_s2io_copy_mac_addr(sp, offset, mac_addr); in do_s2io_store_unicast_mc()
5117 static void do_s2io_restore_unicast_mc(struct s2io_nic *sp) in do_s2io_restore_unicast_mc() argument
5120 struct config_param *config = &sp->config; in do_s2io_restore_unicast_mc()
5123 do_s2io_prog_unicast(sp->dev, in do_s2io_restore_unicast_mc()
5124 sp->def_mac_addr[offset].mac_addr); in do_s2io_restore_unicast_mc()
5129 do_s2io_add_mc(sp, sp->def_mac_addr[offset].mac_addr); in do_s2io_restore_unicast_mc()
5133 static int do_s2io_add_mc(struct s2io_nic *sp, u8 *addr) in do_s2io_add_mc() argument
5137 struct config_param *config = &sp->config; in do_s2io_add_mc()
5149 tmp64 = do_s2io_read_unicast_mc(sp, i); in do_s2io_add_mc()
5162 do_s2io_copy_mac_addr(sp, i, mac_addr); in do_s2io_add_mc()
5164 return do_s2io_add_mac(sp, mac_addr, i); in do_s2io_add_mc()
5168 static int do_s2io_add_mac(struct s2io_nic *sp, u64 addr, int off) in do_s2io_add_mac() argument
5171 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_add_mac()
5190 static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr) in do_s2io_delete_unicast_mc() argument
5194 struct config_param *config = &sp->config; in do_s2io_delete_unicast_mc()
5198 tmp64 = do_s2io_read_unicast_mc(sp, offset); in do_s2io_delete_unicast_mc()
5201 if (do_s2io_add_mac(sp, dis_addr, offset) == FAILURE) in do_s2io_delete_unicast_mc()
5204 do_s2io_store_unicast_mc(sp); in do_s2io_delete_unicast_mc()
5214 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset) in do_s2io_read_unicast_mc() argument
5217 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_read_unicast_mc()
5264 struct s2io_nic *sp = netdev_priv(dev); in do_s2io_prog_unicast() local
5268 struct config_param *config = &sp->config; in do_s2io_prog_unicast()
5279 perm_addr |= sp->def_mac_addr[0].mac_addr[i]; in do_s2io_prog_unicast()
5288 tmp64 = do_s2io_read_unicast_mc(sp, i); in do_s2io_prog_unicast()
5304 do_s2io_copy_mac_addr(sp, i, mac_addr); in do_s2io_prog_unicast()
5306 return do_s2io_add_mac(sp, mac_addr, i); in do_s2io_prog_unicast()
5325 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_sset() local
5331 s2io_close(sp->dev); in s2io_ethtool_sset()
5332 s2io_open(sp->dev); in s2io_ethtool_sset()
5352 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gset() local
5360 if (netif_carrier_ok(sp->dev)) { in s2io_ethtool_gset()
5387 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gdrvinfo() local
5391 strlcpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info)); in s2io_ethtool_gdrvinfo()
5414 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gregs() local
5417 regs->version = sp->pdev->subsystem_device; in s2io_ethtool_gregs()
5420 reg = readq(sp->bar0 + i); in s2io_ethtool_gregs()
5428 static void s2io_set_led(struct s2io_nic *sp, bool on) in s2io_set_led() argument
5430 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_led()
5431 u16 subid = sp->pdev->subsystem_device; in s2io_set_led()
5434 if ((sp->device_type == XFRAME_II_DEVICE) || in s2io_set_led()
5470 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_set_led() local
5471 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_set_led()
5472 u16 subid = sp->pdev->subsystem_device; in s2io_ethtool_set_led()
5474 if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) { in s2io_ethtool_set_led()
5484 sp->adapt_ctrl_org = readq(&bar0->gpio_control); in s2io_ethtool_set_led()
5488 s2io_set_led(sp, true); in s2io_ethtool_set_led()
5492 s2io_set_led(sp, false); in s2io_ethtool_set_led()
5496 if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid)) in s2io_ethtool_set_led()
5497 writeq(sp->adapt_ctrl_org, &bar0->gpio_control); in s2io_ethtool_set_led()
5506 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gringparam() local
5509 if (sp->rxd_mode == RXD_MODE_1) { in s2io_ethtool_gringparam()
5519 for (i = 0; i < sp->config.rx_ring_num; i++) in s2io_ethtool_gringparam()
5520 rx_desc_count += sp->config.rx_cfg[i].num_rxd; in s2io_ethtool_gringparam()
5524 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_ethtool_gringparam()
5525 tx_desc_count += sp->config.tx_cfg[i].fifo_len; in s2io_ethtool_gringparam()
5527 DBG_PRINT(INFO_DBG, "max txds: %d\n", sp->config.max_txds); in s2io_ethtool_gringparam()
5544 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_getpause_data() local
5545 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_getpause_data()
5571 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_setpause_data() local
5572 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_setpause_data()
5604 static int read_eeprom(struct s2io_nic *sp, int off, u64 *data) in read_eeprom() argument
5609 struct XENA_dev_config __iomem *bar0 = sp->bar0; in read_eeprom()
5611 if (sp->device_type == XFRAME_I_DEVICE) { in read_eeprom()
5631 if (sp->device_type == XFRAME_II_DEVICE) { in read_eeprom()
5671 static int write_eeprom(struct s2io_nic *sp, int off, u64 data, int cnt) in write_eeprom() argument
5675 struct XENA_dev_config __iomem *bar0 = sp->bar0; in write_eeprom()
5677 if (sp->device_type == XFRAME_I_DEVICE) { in write_eeprom()
5697 if (sp->device_type == XFRAME_II_DEVICE) { in write_eeprom()
5812 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_geeprom() local
5814 eeprom->magic = sp->pdev->vendor | (sp->pdev->device << 16); in s2io_ethtool_geeprom()
5820 if (read_eeprom(sp, (eeprom->offset + i), &data)) { in s2io_ethtool_geeprom()
5850 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_seeprom() local
5852 if (eeprom->magic != (sp->pdev->vendor | (sp->pdev->device << 16))) { in s2io_ethtool_seeprom()
5856 (sp->pdev->vendor | (sp->pdev->device << 16)), in s2io_ethtool_seeprom()
5868 if (write_eeprom(sp, (eeprom->offset + cnt), valid, 0)) { in s2io_ethtool_seeprom()
5894 static int s2io_register_test(struct s2io_nic *sp, uint64_t *data) in s2io_register_test() argument
5896 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_register_test()
5913 if (sp->device_type == XFRAME_II_DEVICE) in s2io_register_test()
5961 static int s2io_eeprom_test(struct s2io_nic *sp, uint64_t *data) in s2io_eeprom_test() argument
5966 struct net_device *dev = sp->dev; in s2io_eeprom_test()
5972 if (sp->device_type == XFRAME_I_DEVICE) in s2io_eeprom_test()
5973 if (!write_eeprom(sp, 0, 0, 3)) in s2io_eeprom_test()
5977 if (!read_eeprom(sp, 0x4F0, &org_4F0)) in s2io_eeprom_test()
5979 if (!read_eeprom(sp, 0x7F0, &org_7F0)) in s2io_eeprom_test()
5983 if (write_eeprom(sp, 0x4F0, 0x012345, 3)) in s2io_eeprom_test()
5985 if (read_eeprom(sp, 0x4F0, &ret_data)) in s2io_eeprom_test()
5997 write_eeprom(sp, 0x4F0, 0xFFFFFF, 3); in s2io_eeprom_test()
6000 if (sp->device_type == XFRAME_I_DEVICE) in s2io_eeprom_test()
6001 if (!write_eeprom(sp, 0x07C, 0, 3)) in s2io_eeprom_test()
6005 if (write_eeprom(sp, 0x7F0, 0x012345, 3)) in s2io_eeprom_test()
6007 if (read_eeprom(sp, 0x7F0, &ret_data)) in s2io_eeprom_test()
6019 write_eeprom(sp, 0x7F0, 0xFFFFFF, 3); in s2io_eeprom_test()
6021 if (sp->device_type == XFRAME_I_DEVICE) { in s2io_eeprom_test()
6023 if (!write_eeprom(sp, 0x080, 0, 3)) in s2io_eeprom_test()
6027 if (!write_eeprom(sp, 0x0FC, 0, 3)) in s2io_eeprom_test()
6031 if (!write_eeprom(sp, 0x100, 0, 3)) in s2io_eeprom_test()
6035 if (!write_eeprom(sp, 0x4EC, 0, 3)) in s2io_eeprom_test()
6041 write_eeprom(sp, 0x4F0, org_4F0, 3); in s2io_eeprom_test()
6043 write_eeprom(sp, 0x7F0, org_7F0, 3); in s2io_eeprom_test()
6063 static int s2io_bist_test(struct s2io_nic *sp, uint64_t *data) in s2io_bist_test() argument
6068 pci_read_config_byte(sp->pdev, PCI_BIST, &bist); in s2io_bist_test()
6070 pci_write_config_word(sp->pdev, PCI_BIST, bist); in s2io_bist_test()
6073 pci_read_config_byte(sp->pdev, PCI_BIST, &bist); in s2io_bist_test()
6099 static int s2io_link_test(struct s2io_nic *sp, uint64_t *data) in s2io_link_test() argument
6101 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_link_test()
6126 static int s2io_rldram_test(struct s2io_nic *sp, uint64_t *data) in s2io_rldram_test() argument
6128 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_rldram_test()
6228 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_test() local
6229 int orig_state = netif_running(sp->dev); in s2io_ethtool_test()
6234 s2io_close(sp->dev); in s2io_ethtool_test()
6236 if (s2io_register_test(sp, &data[0])) in s2io_ethtool_test()
6239 s2io_reset(sp); in s2io_ethtool_test()
6241 if (s2io_rldram_test(sp, &data[3])) in s2io_ethtool_test()
6244 s2io_reset(sp); in s2io_ethtool_test()
6246 if (s2io_eeprom_test(sp, &data[1])) in s2io_ethtool_test()
6249 if (s2io_bist_test(sp, &data[4])) in s2io_ethtool_test()
6253 s2io_open(sp->dev); in s2io_ethtool_test()
6268 if (s2io_link_test(sp, &data[2])) in s2io_ethtool_test()
6283 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_ethtool_stats() local
6284 struct stat_block *stats = sp->mac_control.stats_info; in s2io_get_ethtool_stats()
6288 s2io_updt_stats(sp); in s2io_get_ethtool_stats()
6450 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_get_ethtool_stats()
6568 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_sset_count() local
6574 switch (sp->device_type) { in s2io_get_sset_count()
6591 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_get_strings() local
6600 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_ethtool_get_strings()
6614 struct s2io_nic *sp = netdev_priv(dev); in s2io_set_features() local
6620 s2io_stop_all_tx_queue(sp); in s2io_set_features()
6621 s2io_card_down(sp); in s2io_set_features()
6623 rc = s2io_card_up(sp); in s2io_set_features()
6625 s2io_reset(sp); in s2io_set_features()
6627 s2io_start_all_tx_queue(sp); in s2io_set_features()
6685 struct s2io_nic *sp = netdev_priv(dev); in s2io_change_mtu() local
6695 s2io_stop_all_tx_queue(sp); in s2io_change_mtu()
6696 s2io_card_down(sp); in s2io_change_mtu()
6697 ret = s2io_card_up(sp); in s2io_change_mtu()
6703 s2io_wake_all_tx_queue(sp); in s2io_change_mtu()
6705 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_change_mtu()
6797 static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp, in set_rxd_buffer_pointer() argument
6802 struct net_device *dev = sp->dev; in set_rxd_buffer_pointer()
6803 struct swStat *stats = &sp->mac_control.stats_info->sw_stat; in set_rxd_buffer_pointer()
6805 if ((sp->rxd_mode == RXD_MODE_1) && (rxdp->Host_Control == 0)) { in set_rxd_buffer_pointer()
6831 pci_map_single(sp->pdev, (*skb)->data, in set_rxd_buffer_pointer()
6834 if (pci_dma_mapping_error(sp->pdev, rxdp1->Buffer0_ptr)) in set_rxd_buffer_pointer()
6838 } else if ((sp->rxd_mode == RXD_MODE_3B) && (rxdp->Host_Control == 0)) { in set_rxd_buffer_pointer()
6857 pci_map_single(sp->pdev, (*skb)->data, in set_rxd_buffer_pointer()
6860 if (pci_dma_mapping_error(sp->pdev, rxdp3->Buffer2_ptr)) in set_rxd_buffer_pointer()
6863 pci_map_single(sp->pdev, ba->ba_0, BUF0_LEN, in set_rxd_buffer_pointer()
6865 if (pci_dma_mapping_error(sp->pdev, in set_rxd_buffer_pointer()
6867 pci_unmap_single(sp->pdev, in set_rxd_buffer_pointer()
6877 pci_map_single(sp->pdev, ba->ba_1, BUF1_LEN, in set_rxd_buffer_pointer()
6879 if (pci_dma_mapping_error(sp->pdev, in set_rxd_buffer_pointer()
6881 pci_unmap_single(sp->pdev, in set_rxd_buffer_pointer()
6884 pci_unmap_single(sp->pdev, in set_rxd_buffer_pointer()
6901 static void set_rxd_buffer_size(struct s2io_nic *sp, struct RxD_t *rxdp, in set_rxd_buffer_size() argument
6904 struct net_device *dev = sp->dev; in set_rxd_buffer_size()
6905 if (sp->rxd_mode == RXD_MODE_1) { in set_rxd_buffer_size()
6907 } else if (sp->rxd_mode == RXD_MODE_3B) { in set_rxd_buffer_size()
6914 static int rxd_owner_bit_reset(struct s2io_nic *sp) in rxd_owner_bit_reset() argument
6917 struct config_param *config = &sp->config; in rxd_owner_bit_reset()
6918 struct mac_info *mac_control = &sp->mac_control; in rxd_owner_bit_reset()
6919 struct net_device *dev = sp->dev; in rxd_owner_bit_reset()
6928 if (sp->rxd_mode == RXD_MODE_1) in rxd_owner_bit_reset()
6930 else if (sp->rxd_mode == RXD_MODE_3B) in rxd_owner_bit_reset()
6937 blk_cnt = rx_cfg->num_rxd / (rxd_count[sp->rxd_mode] + 1); in rxd_owner_bit_reset()
6940 for (k = 0; k < rxd_count[sp->rxd_mode]; k++) { in rxd_owner_bit_reset()
6942 if (sp->rxd_mode == RXD_MODE_3B) in rxd_owner_bit_reset()
6944 if (set_rxd_buffer_pointer(sp, rxdp, ba, &skb, in rxd_owner_bit_reset()
6952 set_rxd_buffer_size(sp, rxdp, size); in rxd_owner_bit_reset()
6963 static int s2io_add_isr(struct s2io_nic *sp) in s2io_add_isr() argument
6966 struct net_device *dev = sp->dev; in s2io_add_isr()
6969 if (sp->config.intr_type == MSI_X) in s2io_add_isr()
6970 ret = s2io_enable_msi_x(sp); in s2io_add_isr()
6973 sp->config.intr_type = INTA; in s2io_add_isr()
6980 store_xmsi_data(sp); in s2io_add_isr()
6983 if (sp->config.intr_type == MSI_X) { in s2io_add_isr()
6986 for (i = 0; i < sp->num_entries; i++) { in s2io_add_isr()
6987 if (sp->s2io_entries[i].in_use == MSIX_FLG) { in s2io_add_isr()
6988 if (sp->s2io_entries[i].type == in s2io_add_isr()
6990 snprintf(sp->desc[i], in s2io_add_isr()
6991 sizeof(sp->desc[i]), in s2io_add_isr()
6994 err = request_irq(sp->entries[i].vector, in s2io_add_isr()
6997 sp->desc[i], in s2io_add_isr()
6998 sp->s2io_entries[i].arg); in s2io_add_isr()
6999 } else if (sp->s2io_entries[i].type == in s2io_add_isr()
7001 snprintf(sp->desc[i], in s2io_add_isr()
7002 sizeof(sp->desc[i]), in s2io_add_isr()
7005 err = request_irq(sp->entries[i].vector, in s2io_add_isr()
7008 sp->desc[i], in s2io_add_isr()
7009 sp->s2io_entries[i].arg); in s2io_add_isr()
7013 if (!(sp->msix_info[i].addr && in s2io_add_isr()
7014 sp->msix_info[i].data)) { in s2io_add_isr()
7017 sp->desc[i], in s2io_add_isr()
7019 sp->msix_info[i].addr, in s2io_add_isr()
7021 ntohl(sp->msix_info[i].data)); in s2io_add_isr()
7025 remove_msix_isr(sp); in s2io_add_isr()
7034 sp->config.intr_type = INTA; in s2io_add_isr()
7037 sp->s2io_entries[i].in_use = in s2io_add_isr()
7047 if (sp->config.intr_type == INTA) { in s2io_add_isr()
7048 err = request_irq(sp->pdev->irq, s2io_isr, IRQF_SHARED, in s2io_add_isr()
7049 sp->name, dev); in s2io_add_isr()
7059 static void s2io_rem_isr(struct s2io_nic *sp) in s2io_rem_isr() argument
7061 if (sp->config.intr_type == MSI_X) in s2io_rem_isr()
7062 remove_msix_isr(sp); in s2io_rem_isr()
7064 remove_inta_isr(sp); in s2io_rem_isr()
7067 static void do_s2io_card_down(struct s2io_nic *sp, int do_io) in do_s2io_card_down() argument
7070 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_card_down()
7073 config = &sp->config; in do_s2io_card_down()
7075 if (!is_s2io_card_up(sp)) in do_s2io_card_down()
7078 del_timer_sync(&sp->alarm_timer); in do_s2io_card_down()
7080 while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state))) in do_s2io_card_down()
7082 clear_bit(__S2IO_STATE_CARD_UP, &sp->state); in do_s2io_card_down()
7085 if (sp->config.napi) { in do_s2io_card_down()
7088 for (; off < sp->config.rx_ring_num; off++) in do_s2io_card_down()
7089 napi_disable(&sp->mac_control.rings[off].napi); in do_s2io_card_down()
7092 napi_disable(&sp->napi); in do_s2io_card_down()
7097 stop_nic(sp); in do_s2io_card_down()
7099 s2io_rem_isr(sp); in do_s2io_card_down()
7102 s2io_link(sp, LINK_DOWN); in do_s2io_card_down()
7113 rxd_owner_bit_reset(sp); in do_s2io_card_down()
7116 if (verify_xena_quiescence(sp)) { in do_s2io_card_down()
7117 if (verify_pcc_quiescent(sp, sp->device_enabled_once)) in do_s2io_card_down()
7131 s2io_reset(sp); in do_s2io_card_down()
7134 free_tx_buffers(sp); in do_s2io_card_down()
7137 free_rx_buffers(sp); in do_s2io_card_down()
7139 clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state)); in do_s2io_card_down()
7142 static void s2io_card_down(struct s2io_nic *sp) in s2io_card_down() argument
7144 do_s2io_card_down(sp, 1); in s2io_card_down()
7147 static int s2io_card_up(struct s2io_nic *sp) in s2io_card_up() argument
7152 struct net_device *dev = sp->dev; in s2io_card_up()
7156 ret = init_nic(sp); in s2io_card_up()
7161 s2io_reset(sp); in s2io_card_up()
7169 config = &sp->config; in s2io_card_up()
7170 mac_control = &sp->mac_control; in s2io_card_up()
7177 ret = fill_rx_buffers(sp, ring, 1); in s2io_card_up()
7181 s2io_reset(sp); in s2io_card_up()
7182 free_rx_buffers(sp); in s2io_card_up()
7192 for (i = 0; i < sp->config.rx_ring_num; i++) in s2io_card_up()
7193 napi_enable(&sp->mac_control.rings[i].napi); in s2io_card_up()
7195 napi_enable(&sp->napi); in s2io_card_up()
7200 if (sp->promisc_flg) in s2io_card_up()
7201 sp->promisc_flg = 0; in s2io_card_up()
7202 if (sp->m_cast_flg) { in s2io_card_up()
7203 sp->m_cast_flg = 0; in s2io_card_up()
7204 sp->all_multi_pos = 0; in s2io_card_up()
7212 sp->lro_max_aggr_per_sess = ((1<<16) - 1) / dev->mtu; in s2io_card_up()
7214 if (lro_max_pkts < sp->lro_max_aggr_per_sess) in s2io_card_up()
7215 sp->lro_max_aggr_per_sess = lro_max_pkts; in s2io_card_up()
7219 if (start_nic(sp)) { in s2io_card_up()
7221 s2io_reset(sp); in s2io_card_up()
7222 free_rx_buffers(sp); in s2io_card_up()
7227 if (s2io_add_isr(sp) != 0) { in s2io_card_up()
7228 if (sp->config.intr_type == MSI_X) in s2io_card_up()
7229 s2io_rem_isr(sp); in s2io_card_up()
7230 s2io_reset(sp); in s2io_card_up()
7231 free_rx_buffers(sp); in s2io_card_up()
7235 S2IO_TIMER_CONF(sp->alarm_timer, s2io_alarm_handle, sp, (HZ/2)); in s2io_card_up()
7237 set_bit(__S2IO_STATE_CARD_UP, &sp->state); in s2io_card_up()
7240 en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); in s2io_card_up()
7241 if (sp->config.intr_type != INTA) { in s2io_card_up()
7243 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS); in s2io_card_up()
7247 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS); in s2io_card_up()
7265 struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task); in s2io_restart_nic() local
7266 struct net_device *dev = sp->dev; in s2io_restart_nic()
7273 s2io_card_down(sp); in s2io_restart_nic()
7274 if (s2io_card_up(sp)) { in s2io_restart_nic()
7277 s2io_wake_all_tx_queue(sp); in s2io_restart_nic()
7298 struct s2io_nic *sp = netdev_priv(dev); in s2io_tx_watchdog() local
7299 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_tx_watchdog()
7303 schedule_work(&sp->rst_timer_task); in s2io_tx_watchdog()
7327 struct s2io_nic *sp = ring_data->nic; in rx_osm_handler() local
7336 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in rx_osm_handler()
7404 if (sp->rxd_mode == RXD_MODE_1) { in rx_osm_handler()
7408 } else if (sp->rxd_mode == RXD_MODE_3B) { in rx_osm_handler()
7441 rxdp, sp); in rx_osm_handler()
7447 lro_append_pkt(sp, lro, skb, tcp_len); in rx_osm_handler()
7450 lro_append_pkt(sp, lro, skb, tcp_len); in rx_osm_handler()
7492 sp->mac_control.rings[ring_no].rx_bufs_left -= 1; in rx_osm_handler()
7509 static void s2io_link(struct s2io_nic *sp, int link) in s2io_link() argument
7511 struct net_device *dev = sp->dev; in s2io_link()
7512 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_link()
7514 if (link != sp->last_link_state) { in s2io_link()
7515 init_tti(sp, link); in s2io_link()
7518 s2io_stop_all_tx_queue(sp); in s2io_link()
7522 jiffies - sp->start_time; in s2io_link()
7528 jiffies - sp->start_time; in s2io_link()
7531 s2io_wake_all_tx_queue(sp); in s2io_link()
7534 sp->last_link_state = link; in s2io_link()
7535 sp->start_time = jiffies; in s2io_link()
7549 static void s2io_init_pci(struct s2io_nic *sp) in s2io_init_pci() argument
7554 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7556 pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7558 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7562 pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd); in s2io_init_pci()
7563 pci_write_config_word(sp->pdev, PCI_COMMAND, in s2io_init_pci()
7565 pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd); in s2io_init_pci()
7708 struct s2io_nic *sp; in s2io_init_nic() local
7771 sp = netdev_priv(dev); in s2io_init_nic()
7772 sp->dev = dev; in s2io_init_nic()
7773 sp->pdev = pdev; in s2io_init_nic()
7774 sp->high_dma_flag = dma_flag; in s2io_init_nic()
7775 sp->device_enabled_once = false; in s2io_init_nic()
7777 sp->rxd_mode = RXD_MODE_1; in s2io_init_nic()
7779 sp->rxd_mode = RXD_MODE_3B; in s2io_init_nic()
7781 sp->config.intr_type = dev_intr_type; in s2io_init_nic()
7785 sp->device_type = XFRAME_II_DEVICE; in s2io_init_nic()
7787 sp->device_type = XFRAME_I_DEVICE; in s2io_init_nic()
7791 s2io_init_pci(sp); in s2io_init_nic()
7800 config = &sp->config; in s2io_init_nic()
7801 mac_control = &sp->mac_control; in s2io_init_nic()
7815 sp->total_tcp_fifos = 1; in s2io_init_nic()
7817 sp->total_tcp_fifos = config->tx_fifo_num - 1; in s2io_init_nic()
7818 sp->udp_fifo_idx = config->tx_fifo_num - 1; in s2io_init_nic()
7819 sp->total_udp_fifos = 1; in s2io_init_nic()
7820 sp->other_fifo_idx = sp->total_tcp_fifos - 1; in s2io_init_nic()
7822 sp->total_tcp_fifos = (tx_fifo_num - FIFO_UDP_MAX_NUM - in s2io_init_nic()
7824 sp->udp_fifo_idx = sp->total_tcp_fifos; in s2io_init_nic()
7825 sp->total_udp_fifos = FIFO_UDP_MAX_NUM; in s2io_init_nic()
7826 sp->other_fifo_idx = sp->udp_fifo_idx + FIFO_UDP_MAX_NUM; in s2io_init_nic()
7843 sp->fifo_selector[i] = fifo_selector[i]; in s2io_init_nic()
7865 rx_cfg->num_rxd = rx_ring_sz[i] * (rxd_count[sp->rxd_mode] + 1); in s2io_init_nic()
7868 ring->rxd_mode = sp->rxd_mode; in s2io_init_nic()
7869 ring->rxd_count = rxd_count[sp->rxd_mode]; in s2io_init_nic()
7870 ring->pdev = sp->pdev; in s2io_init_nic()
7871 ring->dev = sp->dev; in s2io_init_nic()
7888 if (init_shared_mem(sp)) { in s2io_init_nic()
7894 sp->bar0 = pci_ioremap_bar(pdev, 0); in s2io_init_nic()
7895 if (!sp->bar0) { in s2io_init_nic()
7902 sp->bar1 = pci_ioremap_bar(pdev, 2); in s2io_init_nic()
7903 if (!sp->bar1) { in s2io_init_nic()
7912 mac_control->tx_FIFO_start[j] = sp->bar1 + (j * 0x00020000); in s2io_init_nic()
7923 if (sp->device_type & XFRAME_II_DEVICE) { in s2io_init_nic()
7928 if (sp->high_dma_flag == true) in s2io_init_nic()
7931 INIT_WORK(&sp->rst_timer_task, s2io_restart_nic); in s2io_init_nic()
7932 INIT_WORK(&sp->set_link_task, s2io_set_link); in s2io_init_nic()
7934 pci_save_state(sp->pdev); in s2io_init_nic()
7937 if (s2io_set_swapper(sp)) { in s2io_init_nic()
7945 if (sp->device_type & XFRAME_II_DEVICE) { in s2io_init_nic()
7946 mode = s2io_verify_pci_mode(sp); in s2io_init_nic()
7955 if (sp->config.intr_type == MSI_X) { in s2io_init_nic()
7956 sp->num_entries = config->rx_ring_num + 1; in s2io_init_nic()
7957 ret = s2io_enable_msi_x(sp); in s2io_init_nic()
7960 ret = s2io_test_msi(sp); in s2io_init_nic()
7962 remove_msix_isr(sp); in s2io_init_nic()
7968 sp->config.intr_type = INTA; in s2io_init_nic()
7979 netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64); in s2io_init_nic()
7983 if (sp->device_type & XFRAME_I_DEVICE) { in s2io_init_nic()
7988 fix_mac_address(sp); in s2io_init_nic()
7989 s2io_reset(sp); in s2io_init_nic()
7996 bar0 = sp->bar0; in s2io_init_nic()
8007 sp->def_mac_addr[0].mac_addr[3] = (u8) (mac_up); in s2io_init_nic()
8008 sp->def_mac_addr[0].mac_addr[2] = (u8) (mac_up >> 8); in s2io_init_nic()
8009 sp->def_mac_addr[0].mac_addr[1] = (u8) (mac_up >> 16); in s2io_init_nic()
8010 sp->def_mac_addr[0].mac_addr[0] = (u8) (mac_up >> 24); in s2io_init_nic()
8011 sp->def_mac_addr[0].mac_addr[5] = (u8) (mac_down >> 16); in s2io_init_nic()
8012 sp->def_mac_addr[0].mac_addr[4] = (u8) (mac_down >> 24); in s2io_init_nic()
8016 memcpy(dev->dev_addr, sp->def_mac_addr, ETH_ALEN); in s2io_init_nic()
8019 if (sp->device_type == XFRAME_I_DEVICE) { in s2io_init_nic()
8023 } else if (sp->device_type == XFRAME_II_DEVICE) { in s2io_init_nic()
8030 do_s2io_store_unicast_mc(sp); in s2io_init_nic()
8033 if ((sp->device_type == XFRAME_II_DEVICE) && in s2io_init_nic()
8035 sp->num_entries = config->rx_ring_num + 1; in s2io_init_nic()
8038 store_xmsi_data(sp); in s2io_init_nic()
8040 s2io_reset(sp); in s2io_init_nic()
8046 sp->state = 0; in s2io_init_nic()
8049 for (i = 0; i < sp->config.tx_fifo_num; i++) { in s2io_init_nic()
8059 subid = sp->pdev->subsystem_device; in s2io_init_nic()
8069 sp->rx_csum = 1; /* Rx chksum verify enabled by default */ in s2io_init_nic()
8076 s2io_vpd_read(sp); in s2io_init_nic()
8079 sp->product_name, pdev->revision); in s2io_init_nic()
8083 DBG_PRINT(ERR_DBG, "Serial number: %s\n", sp->serial_num); in s2io_init_nic()
8084 if (sp->device_type & XFRAME_II_DEVICE) { in s2io_init_nic()
8085 mode = s2io_print_pci_mode(sp); in s2io_init_nic()
8092 switch (sp->rxd_mode) { in s2io_init_nic()
8103 switch (sp->config.napi) { in s2io_init_nic()
8113 sp->config.tx_fifo_num); in s2io_init_nic()
8116 sp->config.rx_ring_num); in s2io_init_nic()
8118 switch (sp->config.intr_type) { in s2io_init_nic()
8126 if (sp->config.multiq) { in s2io_init_nic()
8127 for (i = 0; i < sp->config.tx_fifo_num; i++) { in s2io_init_nic()
8138 switch (sp->config.tx_steering_type) { in s2io_init_nic()
8161 snprintf(sp->name, sizeof(sp->name), "%s Neterion %s", dev->name, in s2io_init_nic()
8162 sp->product_name); in s2io_init_nic()
8165 sp->vlan_strip_flag = 1; in s2io_init_nic()
8167 sp->vlan_strip_flag = 0; in s2io_init_nic()
8180 iounmap(sp->bar1); in s2io_init_nic()
8182 iounmap(sp->bar0); in s2io_init_nic()
8185 free_shared_mem(sp); in s2io_init_nic()
8205 struct s2io_nic *sp; in s2io_rem_nic() local
8212 sp = netdev_priv(dev); in s2io_rem_nic()
8214 cancel_work_sync(&sp->rst_timer_task); in s2io_rem_nic()
8215 cancel_work_sync(&sp->set_link_task); in s2io_rem_nic()
8219 free_shared_mem(sp); in s2io_rem_nic()
8220 iounmap(sp->bar0); in s2io_rem_nic()
8221 iounmap(sp->bar1); in s2io_rem_nic()
8231 struct s2io_nic *sp) in check_L2_lro_capable() argument
8250 if ((!sp->vlan_strip_flag) && in check_L2_lro_capable()
8311 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro) in update_L3L4_header() argument
8315 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in update_L3L4_header()
8422 struct RxD_t *rxdp, struct s2io_nic *sp) in s2io_club_tcp_session() argument
8428 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_club_tcp_session()
8431 rxdp, sp); in s2io_club_tcp_session()
8501 update_L3L4_header(sp, *lro); in s2io_club_tcp_session()
8505 if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) { in s2io_club_tcp_session()
8506 update_L3L4_header(sp, *lro); in s2io_club_tcp_session()
8528 struct s2io_nic *sp = netdev_priv(dev); in queue_rx_frame() local
8531 if (vlan_tag && sp->vlan_strip_flag) in queue_rx_frame()
8533 if (sp->config.napi) in queue_rx_frame()
8539 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro, in lro_append_pkt() argument
8543 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in lro_append_pkt()
8569 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_error_detected() local
8578 do_s2io_card_down(sp, 0); in s2io_io_error_detected()
8597 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_slot_reset() local
8605 s2io_reset(sp); in s2io_io_slot_reset()
8620 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_resume() local
8623 if (s2io_card_up(sp)) { in s2io_io_resume()
8629 s2io_card_down(sp); in s2io_io_resume()