Lines Matching refs:sp

123 static inline int is_s2io_card_up(const struct s2io_nic *sp)  in is_s2io_card_up()  argument
125 return test_bit(__S2IO_STATE_CARD_UP, &sp->state); in is_s2io_card_up()
342 static void do_s2io_copy_mac_addr(struct s2io_nic *sp, int offset, u64 mac_addr) in do_s2io_copy_mac_addr() argument
344 sp->def_mac_addr[offset].mac_addr[5] = (u8) (mac_addr); in do_s2io_copy_mac_addr()
345 sp->def_mac_addr[offset].mac_addr[4] = (u8) (mac_addr >> 8); in do_s2io_copy_mac_addr()
346 sp->def_mac_addr[offset].mac_addr[3] = (u8) (mac_addr >> 16); in do_s2io_copy_mac_addr()
347 sp->def_mac_addr[offset].mac_addr[2] = (u8) (mac_addr >> 24); in do_s2io_copy_mac_addr()
348 sp->def_mac_addr[offset].mac_addr[1] = (u8) (mac_addr >> 32); in do_s2io_copy_mac_addr()
349 sp->def_mac_addr[offset].mac_addr[0] = (u8) (mac_addr >> 40); in do_s2io_copy_mac_addr()
498 static inline void s2io_stop_all_tx_queue(struct s2io_nic *sp) in s2io_stop_all_tx_queue() argument
500 if (!sp->config.multiq) { in s2io_stop_all_tx_queue()
503 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_stop_all_tx_queue()
504 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_STOP; in s2io_stop_all_tx_queue()
506 netif_tx_stop_all_queues(sp->dev); in s2io_stop_all_tx_queue()
509 static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no) in s2io_stop_tx_queue() argument
511 if (!sp->config.multiq) in s2io_stop_tx_queue()
512 sp->mac_control.fifos[fifo_no].queue_state = in s2io_stop_tx_queue()
515 netif_tx_stop_all_queues(sp->dev); in s2io_stop_tx_queue()
518 static inline void s2io_start_all_tx_queue(struct s2io_nic *sp) in s2io_start_all_tx_queue() argument
520 if (!sp->config.multiq) { in s2io_start_all_tx_queue()
523 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_start_all_tx_queue()
524 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START; in s2io_start_all_tx_queue()
526 netif_tx_start_all_queues(sp->dev); in s2io_start_all_tx_queue()
529 static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp) in s2io_wake_all_tx_queue() argument
531 if (!sp->config.multiq) { in s2io_wake_all_tx_queue()
534 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_wake_all_tx_queue()
535 sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START; in s2io_wake_all_tx_queue()
537 netif_tx_wake_all_queues(sp->dev); in s2io_wake_all_tx_queue()
2075 static int verify_pcc_quiescent(struct s2io_nic *sp, int flag) in verify_pcc_quiescent() argument
2078 struct XENA_dev_config __iomem *bar0 = sp->bar0; in verify_pcc_quiescent()
2081 herc = (sp->device_type == XFRAME_II_DEVICE); in verify_pcc_quiescent()
2084 if ((!herc && (sp->pdev->revision >= 4)) || herc) { in verify_pcc_quiescent()
2092 if ((!herc && (sp->pdev->revision >= 4)) || herc) { in verify_pcc_quiescent()
2117 static int verify_xena_quiescence(struct s2io_nic *sp) in verify_xena_quiescence() argument
2120 struct XENA_dev_config __iomem *bar0 = sp->bar0; in verify_xena_quiescence()
2122 mode = s2io_verify_pci_mode(sp); in verify_xena_quiescence()
2163 sp->device_type == XFRAME_II_DEVICE && in verify_xena_quiescence()
2184 static void fix_mac_address(struct s2io_nic *sp) in fix_mac_address() argument
2186 struct XENA_dev_config __iomem *bar0 = sp->bar0; in fix_mac_address()
2660 static void free_rxd_blk(struct s2io_nic *sp, int ring_no, int blk) in free_rxd_blk() argument
2662 struct net_device *dev = sp->dev; in free_rxd_blk()
2668 struct mac_info *mac_control = &sp->mac_control; in free_rxd_blk()
2672 for (j = 0 ; j < rxd_count[sp->rxd_mode]; j++) { in free_rxd_blk()
2678 if (sp->rxd_mode == RXD_MODE_1) { in free_rxd_blk()
2680 dma_unmap_single(&sp->pdev->dev, in free_rxd_blk()
2687 } else if (sp->rxd_mode == RXD_MODE_3B) { in free_rxd_blk()
2689 dma_unmap_single(&sp->pdev->dev, in free_rxd_blk()
2692 dma_unmap_single(&sp->pdev->dev, in free_rxd_blk()
2695 dma_unmap_single(&sp->pdev->dev, in free_rxd_blk()
2715 static void free_rx_buffers(struct s2io_nic *sp) in free_rx_buffers() argument
2717 struct net_device *dev = sp->dev; in free_rx_buffers()
2719 struct config_param *config = &sp->config; in free_rx_buffers()
2720 struct mac_info *mac_control = &sp->mac_control; in free_rx_buffers()
2726 free_rxd_blk(sp, i, blk); in free_rx_buffers()
3089 struct s2io_nic *sp = netdev_priv(dev); in s2io_mdio_write() local
3090 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_mdio_write()
3135 struct s2io_nic *sp = netdev_priv(dev); in s2io_mdio_read() local
3136 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_mdio_read()
3239 struct s2io_nic *sp = netdev_priv(dev); in s2io_updt_xpak_counter() local
3240 struct stat_block *stats = sp->mac_control.stats_info; in s2io_updt_xpak_counter()
3400 static void s2io_reset(struct s2io_nic *sp) in s2io_reset() argument
3402 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_reset()
3413 __func__, pci_name(sp->pdev)); in s2io_reset()
3416 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, &(pci_cmd)); in s2io_reset()
3420 if (strstr(sp->product_name, "CX4")) in s2io_reset()
3426 pci_restore_state(sp->pdev); in s2io_reset()
3427 pci_save_state(sp->pdev); in s2io_reset()
3428 pci_read_config_word(sp->pdev, 0x2, &val16); in s2io_reset()
3437 pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, pci_cmd); in s2io_reset()
3439 s2io_init_pci(sp); in s2io_reset()
3442 s2io_set_swapper(sp); in s2io_reset()
3445 do_s2io_restore_unicast_mc(sp); in s2io_reset()
3448 restore_xmsi_data(sp); in s2io_reset()
3451 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_reset()
3453 pci_write_config_word(sp->pdev, PCI_STATUS, 0x8000); in s2io_reset()
3456 pci_write_config_dword(sp->pdev, 0x68, 0x7C); in s2io_reset()
3463 memset(&sp->stats, 0, sizeof(struct net_device_stats)); in s2io_reset()
3465 stats = sp->mac_control.stats_info; in s2io_reset()
3491 subid = sp->pdev->subsystem_device; in s2io_reset()
3493 (sp->device_type == XFRAME_I_DEVICE)) { in s2io_reset()
3505 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_reset()
3510 sp->device_enabled_once = false; in s2io_reset()
3523 static int s2io_set_swapper(struct s2io_nic *sp) in s2io_set_swapper() argument
3525 struct net_device *dev = sp->dev; in s2io_set_swapper()
3526 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_swapper()
3609 if (sp->config.intr_type == INTA) in s2io_set_swapper()
3633 if (sp->config.intr_type == INTA) in s2io_set_swapper()
3812 struct s2io_nic *sp = dev_id; in s2io_test_intr() local
3814 sp->msi_detected = 1; in s2io_test_intr()
3815 wake_up(&sp->msi_wait); in s2io_test_intr()
3821 static int s2io_test_msi(struct s2io_nic *sp) in s2io_test_msi() argument
3823 struct pci_dev *pdev = sp->pdev; in s2io_test_msi()
3824 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_test_msi()
3828 err = request_irq(sp->entries[1].vector, s2io_test_intr, 0, in s2io_test_msi()
3829 sp->name, sp); in s2io_test_msi()
3832 sp->dev->name, pci_name(pdev), pdev->irq); in s2io_test_msi()
3836 init_waitqueue_head(&sp->msi_wait); in s2io_test_msi()
3837 sp->msi_detected = 0; in s2io_test_msi()
3845 wait_event_timeout(sp->msi_wait, sp->msi_detected, HZ/10); in s2io_test_msi()
3847 if (!sp->msi_detected) { in s2io_test_msi()
3851 sp->dev->name, pci_name(pdev)); in s2io_test_msi()
3856 free_irq(sp->entries[1].vector, sp); in s2io_test_msi()
3863 static void remove_msix_isr(struct s2io_nic *sp) in remove_msix_isr() argument
3868 for (i = 0; i < sp->num_entries; i++) { in remove_msix_isr()
3869 if (sp->s2io_entries[i].in_use == MSIX_REGISTERED_SUCCESS) { in remove_msix_isr()
3870 int vector = sp->entries[i].vector; in remove_msix_isr()
3871 void *arg = sp->s2io_entries[i].arg; in remove_msix_isr()
3876 kfree(sp->entries); in remove_msix_isr()
3877 kfree(sp->s2io_entries); in remove_msix_isr()
3878 sp->entries = NULL; in remove_msix_isr()
3879 sp->s2io_entries = NULL; in remove_msix_isr()
3881 pci_read_config_word(sp->pdev, 0x42, &msi_control); in remove_msix_isr()
3883 pci_write_config_word(sp->pdev, 0x42, msi_control); in remove_msix_isr()
3885 pci_disable_msix(sp->pdev); in remove_msix_isr()
3888 static void remove_inta_isr(struct s2io_nic *sp) in remove_inta_isr() argument
3890 free_irq(sp->pdev->irq, sp->dev); in remove_inta_isr()
3911 struct s2io_nic *sp = netdev_priv(dev); in s2io_open() local
3912 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_open()
3920 sp->last_link_state = 0; in s2io_open()
3923 err = s2io_card_up(sp); in s2io_open()
3932 s2io_card_down(sp); in s2io_open()
3936 s2io_start_all_tx_queue(sp); in s2io_open()
3940 if (sp->config.intr_type == MSI_X) { in s2io_open()
3941 if (sp->entries) { in s2io_open()
3942 kfree(sp->entries); in s2io_open()
3943 swstats->mem_freed += sp->num_entries * in s2io_open()
3946 if (sp->s2io_entries) { in s2io_open()
3947 kfree(sp->s2io_entries); in s2io_open()
3948 swstats->mem_freed += sp->num_entries * in s2io_open()
3970 struct s2io_nic *sp = netdev_priv(dev); in s2io_close() local
3971 struct config_param *config = &sp->config; in s2io_close()
3978 if (!is_s2io_card_up(sp)) in s2io_close()
3981 s2io_stop_all_tx_queue(sp); in s2io_close()
3984 tmp64 = do_s2io_read_unicast_mc(sp, offset); in s2io_close()
3986 do_s2io_delete_unicast_mc(sp, tmp64); in s2io_close()
3989 s2io_card_down(sp); in s2io_close()
4009 struct s2io_nic *sp = netdev_priv(dev); in s2io_xmit() local
4019 struct config_param *config = &sp->config; in s2io_xmit()
4020 struct mac_info *mac_control = &sp->mac_control; in s2io_xmit()
4032 if (!is_s2io_card_up(sp)) { in s2io_xmit()
4042 if (sp->config.tx_steering_type == TX_DEFAULT_STEERING) { in s2io_xmit()
4053 queue_len = sp->total_tcp_fifos; in s2io_xmit()
4056 sp->fifo_selector[queue_len - 1]; in s2io_xmit()
4060 queue_len = sp->total_udp_fifos; in s2io_xmit()
4063 sp->fifo_selector[queue_len - 1]; in s2io_xmit()
4066 queue += sp->udp_fifo_idx; in s2io_xmit()
4072 } else if (sp->config.tx_steering_type == TX_PRIORITY_STEERING) in s2io_xmit()
4080 if (sp->config.multiq) { in s2io_xmit()
4101 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4129 txdp->Buffer_Pointer = dma_map_single(&sp->pdev->dev, skb->data, in s2io_xmit()
4131 if (dma_mapping_error(&sp->pdev->dev, txdp->Buffer_Pointer)) in s2io_xmit()
4145 txdp->Buffer_Pointer = (u64)skb_frag_dma_map(&sp->pdev->dev, in s2io_xmit()
4175 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4180 if (sp->config.intr_type == MSI_X) in s2io_xmit()
4187 s2io_stop_tx_queue(sp, fifo->fifo_no); in s2io_xmit()
4197 struct s2io_nic *sp = from_timer(sp, t, alarm_timer); in s2io_alarm_handle() local
4198 struct net_device *dev = sp->dev; in s2io_alarm_handle()
4201 mod_timer(&sp->alarm_timer, jiffies + HZ / 2); in s2io_alarm_handle()
4207 struct s2io_nic *sp = ring->nic; in s2io_msix_ring_handle() local
4208 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_msix_ring_handle()
4210 if (unlikely(!is_s2io_card_up(sp))) in s2io_msix_ring_handle()
4213 if (sp->config.napi) { in s2io_msix_ring_handle()
4225 s2io_chk_rx_buffers(sp, ring); in s2io_msix_ring_handle()
4235 struct s2io_nic *sp = fifos->nic; in s2io_msix_fifo_handle() local
4236 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_msix_fifo_handle()
4237 struct config_param *config = &sp->config; in s2io_msix_fifo_handle()
4240 if (unlikely(!is_s2io_card_up(sp))) in s2io_msix_fifo_handle()
4252 s2io_txpic_intr_handle(sp); in s2io_msix_fifo_handle()
4260 writeq(sp->general_int_mask, &bar0->general_int_mask); in s2io_msix_fifo_handle()
4268 static void s2io_txpic_intr_handle(struct s2io_nic *sp) in s2io_txpic_intr_handle() argument
4270 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_txpic_intr_handle()
4297 if (!sp->device_enabled_once) in s2io_txpic_intr_handle()
4298 sp->device_enabled_once = 1; in s2io_txpic_intr_handle()
4300 s2io_link(sp, LINK_UP); in s2io_txpic_intr_handle()
4312 s2io_link(sp, LINK_DOWN); in s2io_txpic_intr_handle()
4363 struct s2io_nic *sp = netdev_priv(dev); in s2io_handle_errors() local
4364 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_handle_errors()
4368 struct swStat *sw_stat = &sp->mac_control.stats_info->sw_stat; in s2io_handle_errors()
4369 struct xpakStat *stats = &sp->mac_control.stats_info->xpak_stat; in s2io_handle_errors()
4371 if (!is_s2io_card_up(sp)) in s2io_handle_errors()
4374 if (pci_channel_offline(sp->pdev)) in s2io_handle_errors()
4391 if (s2io_link_fault_indication(sp) == MAC_RMAC_ERR_TIMER) { in s2io_handle_errors()
4395 schedule_work(&sp->set_link_task); in s2io_handle_errors()
4409 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_handle_errors()
4628 if (sp->device_type != XFRAME_II_DEVICE) { in s2io_handle_errors()
4644 s2io_stop_all_tx_queue(sp); in s2io_handle_errors()
4645 schedule_work(&sp->rst_timer_task); in s2io_handle_errors()
4665 struct s2io_nic *sp = netdev_priv(dev); in s2io_isr() local
4666 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_isr()
4673 if (pci_channel_offline(sp->pdev)) in s2io_isr()
4676 if (!is_s2io_card_up(sp)) in s2io_isr()
4679 config = &sp->config; in s2io_isr()
4680 mac_control = &sp->mac_control; in s2io_isr()
4700 napi_schedule(&sp->napi); in s2io_isr()
4733 s2io_txpic_intr_handle(sp); in s2io_isr()
4742 s2io_chk_rx_buffers(sp, ring); in s2io_isr()
4745 writeq(sp->general_int_mask, &bar0->general_int_mask); in s2io_isr()
4761 static void s2io_updt_stats(struct s2io_nic *sp) in s2io_updt_stats() argument
4763 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_updt_stats()
4767 if (is_s2io_card_up(sp)) { in s2io_updt_stats()
4795 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_stats() local
4796 struct mac_info *mac_control = &sp->mac_control; in s2io_get_stats()
4801 s2io_updt_stats(sp); in s2io_get_stats()
4811 le32_to_cpu(stats->rmac_vld_frms)) - sp->stats.rx_packets; in s2io_get_stats()
4812 sp->stats.rx_packets += delta; in s2io_get_stats()
4816 le32_to_cpu(stats->tmac_frms)) - sp->stats.tx_packets; in s2io_get_stats()
4817 sp->stats.tx_packets += delta; in s2io_get_stats()
4821 le32_to_cpu(stats->rmac_data_octets)) - sp->stats.rx_bytes; in s2io_get_stats()
4822 sp->stats.rx_bytes += delta; in s2io_get_stats()
4826 le32_to_cpu(stats->tmac_data_octets)) - sp->stats.tx_bytes; in s2io_get_stats()
4827 sp->stats.tx_bytes += delta; in s2io_get_stats()
4830 delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_errors; in s2io_get_stats()
4831 sp->stats.rx_errors += delta; in s2io_get_stats()
4835 le32_to_cpu(stats->tmac_any_err_frms)) - sp->stats.tx_errors; in s2io_get_stats()
4836 sp->stats.tx_errors += delta; in s2io_get_stats()
4839 delta = le64_to_cpu(stats->rmac_drop_frms) - sp->stats.rx_dropped; in s2io_get_stats()
4840 sp->stats.rx_dropped += delta; in s2io_get_stats()
4843 delta = le64_to_cpu(stats->tmac_drop_frms) - sp->stats.tx_dropped; in s2io_get_stats()
4844 sp->stats.tx_dropped += delta; in s2io_get_stats()
4855 delta -= sp->stats.multicast; in s2io_get_stats()
4856 sp->stats.multicast += delta; in s2io_get_stats()
4861 le64_to_cpu(stats->rmac_long_frms) - sp->stats.rx_length_errors; in s2io_get_stats()
4862 sp->stats.rx_length_errors += delta; in s2io_get_stats()
4865 delta = le64_to_cpu(stats->rmac_fcs_err_frms) - sp->stats.rx_crc_errors; in s2io_get_stats()
4866 sp->stats.rx_crc_errors += delta; in s2io_get_stats()
4890 struct s2io_nic *sp = netdev_priv(dev); in s2io_set_multicast() local
4891 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_multicast()
4896 struct config_param *config = &sp->config; in s2io_set_multicast()
4898 if ((dev->flags & IFF_ALLMULTI) && (!sp->m_cast_flg)) { in s2io_set_multicast()
4913 sp->m_cast_flg = 1; in s2io_set_multicast()
4914 sp->all_multi_pos = config->max_mc_addr - 1; in s2io_set_multicast()
4915 } else if ((dev->flags & IFF_ALLMULTI) && (sp->m_cast_flg)) { in s2io_set_multicast()
4923 RMAC_ADDR_CMD_MEM_OFFSET(sp->all_multi_pos); in s2io_set_multicast()
4930 sp->m_cast_flg = 0; in s2io_set_multicast()
4931 sp->all_multi_pos = 0; in s2io_set_multicast()
4934 if ((dev->flags & IFF_PROMISC) && (!sp->promisc_flg)) { in s2io_set_multicast()
4949 sp->vlan_strip_flag = 0; in s2io_set_multicast()
4953 sp->promisc_flg = 1; in s2io_set_multicast()
4956 } else if (!(dev->flags & IFF_PROMISC) && (sp->promisc_flg)) { in s2io_set_multicast()
4971 sp->vlan_strip_flag = 1; in s2io_set_multicast()
4975 sp->promisc_flg = 0; in s2io_set_multicast()
4980 if ((!sp->m_cast_flg) && netdev_mc_count(dev)) { in s2io_set_multicast()
4990 prev_cnt = sp->mc_addr_count; in s2io_set_multicast()
4991 sp->mc_addr_count = netdev_mc_count(dev); in s2io_set_multicast()
5058 static void do_s2io_store_unicast_mc(struct s2io_nic *sp) in do_s2io_store_unicast_mc() argument
5062 struct config_param *config = &sp->config; in do_s2io_store_unicast_mc()
5066 mac_addr = do_s2io_read_unicast_mc(sp, offset); in do_s2io_store_unicast_mc()
5070 do_s2io_copy_mac_addr(sp, offset, mac_addr); in do_s2io_store_unicast_mc()
5075 static void do_s2io_restore_unicast_mc(struct s2io_nic *sp) in do_s2io_restore_unicast_mc() argument
5078 struct config_param *config = &sp->config; in do_s2io_restore_unicast_mc()
5081 do_s2io_prog_unicast(sp->dev, in do_s2io_restore_unicast_mc()
5082 sp->def_mac_addr[offset].mac_addr); in do_s2io_restore_unicast_mc()
5087 do_s2io_add_mc(sp, sp->def_mac_addr[offset].mac_addr); in do_s2io_restore_unicast_mc()
5091 static int do_s2io_add_mc(struct s2io_nic *sp, u8 *addr) in do_s2io_add_mc() argument
5095 struct config_param *config = &sp->config; in do_s2io_add_mc()
5104 tmp64 = do_s2io_read_unicast_mc(sp, i); in do_s2io_add_mc()
5117 do_s2io_copy_mac_addr(sp, i, mac_addr); in do_s2io_add_mc()
5119 return do_s2io_add_mac(sp, mac_addr, i); in do_s2io_add_mc()
5123 static int do_s2io_add_mac(struct s2io_nic *sp, u64 addr, int off) in do_s2io_add_mac() argument
5126 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_add_mac()
5145 static int do_s2io_delete_unicast_mc(struct s2io_nic *sp, u64 addr) in do_s2io_delete_unicast_mc() argument
5149 struct config_param *config = &sp->config; in do_s2io_delete_unicast_mc()
5153 tmp64 = do_s2io_read_unicast_mc(sp, offset); in do_s2io_delete_unicast_mc()
5156 if (do_s2io_add_mac(sp, dis_addr, offset) == FAILURE) in do_s2io_delete_unicast_mc()
5159 do_s2io_store_unicast_mc(sp); in do_s2io_delete_unicast_mc()
5169 static u64 do_s2io_read_unicast_mc(struct s2io_nic *sp, int offset) in do_s2io_read_unicast_mc() argument
5172 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_read_unicast_mc()
5219 struct s2io_nic *sp = netdev_priv(dev); in do_s2io_prog_unicast() local
5223 struct config_param *config = &sp->config; in do_s2io_prog_unicast()
5231 perm_addr = ether_addr_to_u64(sp->def_mac_addr[0].mac_addr); in do_s2io_prog_unicast()
5239 tmp64 = do_s2io_read_unicast_mc(sp, i); in do_s2io_prog_unicast()
5255 do_s2io_copy_mac_addr(sp, i, mac_addr); in do_s2io_prog_unicast()
5257 return do_s2io_add_mac(sp, mac_addr, i); in do_s2io_prog_unicast()
5276 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_set_link_ksettings() local
5282 s2io_close(sp->dev); in s2io_ethtool_set_link_ksettings()
5283 s2io_open(sp->dev); in s2io_ethtool_set_link_ksettings()
5304 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_get_link_ksettings() local
5316 if (netif_carrier_ok(sp->dev)) { in s2io_ethtool_get_link_ksettings()
5342 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gdrvinfo() local
5346 strscpy(info->bus_info, pci_name(sp->pdev), sizeof(info->bus_info)); in s2io_ethtool_gdrvinfo()
5368 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gregs() local
5371 regs->version = sp->pdev->subsystem_device; in s2io_ethtool_gregs()
5374 reg = readq(sp->bar0 + i); in s2io_ethtool_gregs()
5382 static void s2io_set_led(struct s2io_nic *sp, bool on) in s2io_set_led() argument
5384 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_set_led()
5385 u16 subid = sp->pdev->subsystem_device; in s2io_set_led()
5388 if ((sp->device_type == XFRAME_II_DEVICE) || in s2io_set_led()
5424 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_set_led() local
5425 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_set_led()
5426 u16 subid = sp->pdev->subsystem_device; in s2io_ethtool_set_led()
5428 if ((sp->device_type == XFRAME_I_DEVICE) && ((subid & 0xFF) < 0x07)) { in s2io_ethtool_set_led()
5438 sp->adapt_ctrl_org = readq(&bar0->gpio_control); in s2io_ethtool_set_led()
5442 s2io_set_led(sp, true); in s2io_ethtool_set_led()
5446 s2io_set_led(sp, false); in s2io_ethtool_set_led()
5450 if (CARDS_WITH_FAULTY_LINK_INDICATORS(sp->device_type, subid)) in s2io_ethtool_set_led()
5451 writeq(sp->adapt_ctrl_org, &bar0->gpio_control); in s2io_ethtool_set_led()
5463 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_gringparam() local
5466 if (sp->rxd_mode == RXD_MODE_1) { in s2io_ethtool_gringparam()
5476 for (i = 0; i < sp->config.rx_ring_num; i++) in s2io_ethtool_gringparam()
5477 rx_desc_count += sp->config.rx_cfg[i].num_rxd; in s2io_ethtool_gringparam()
5481 for (i = 0; i < sp->config.tx_fifo_num; i++) in s2io_ethtool_gringparam()
5482 tx_desc_count += sp->config.tx_cfg[i].fifo_len; in s2io_ethtool_gringparam()
5484 DBG_PRINT(INFO_DBG, "max txds: %d\n", sp->config.max_txds); in s2io_ethtool_gringparam()
5500 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_getpause_data() local
5501 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_getpause_data()
5526 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_setpause_data() local
5527 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_ethtool_setpause_data()
5558 static int read_eeprom(struct s2io_nic *sp, int off, u64 *data) in read_eeprom() argument
5563 struct XENA_dev_config __iomem *bar0 = sp->bar0; in read_eeprom()
5565 if (sp->device_type == XFRAME_I_DEVICE) { in read_eeprom()
5585 if (sp->device_type == XFRAME_II_DEVICE) { in read_eeprom()
5625 static int write_eeprom(struct s2io_nic *sp, int off, u64 data, int cnt) in write_eeprom() argument
5629 struct XENA_dev_config __iomem *bar0 = sp->bar0; in write_eeprom()
5631 if (sp->device_type == XFRAME_I_DEVICE) { in write_eeprom()
5651 if (sp->device_type == XFRAME_II_DEVICE) { in write_eeprom()
5765 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_geeprom() local
5767 eeprom->magic = sp->pdev->vendor | (sp->pdev->device << 16); in s2io_ethtool_geeprom()
5773 if (read_eeprom(sp, (eeprom->offset + i), &data)) { in s2io_ethtool_geeprom()
5802 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_seeprom() local
5804 if (eeprom->magic != (sp->pdev->vendor | (sp->pdev->device << 16))) { in s2io_ethtool_seeprom()
5808 (sp->pdev->vendor | (sp->pdev->device << 16)), in s2io_ethtool_seeprom()
5820 if (write_eeprom(sp, (eeprom->offset + cnt), valid, 0)) { in s2io_ethtool_seeprom()
5846 static int s2io_register_test(struct s2io_nic *sp, uint64_t *data) in s2io_register_test() argument
5848 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_register_test()
5865 if (sp->device_type == XFRAME_II_DEVICE) in s2io_register_test()
5913 static int s2io_eeprom_test(struct s2io_nic *sp, uint64_t *data) in s2io_eeprom_test() argument
5918 struct net_device *dev = sp->dev; in s2io_eeprom_test()
5924 if (sp->device_type == XFRAME_I_DEVICE) in s2io_eeprom_test()
5925 if (!write_eeprom(sp, 0, 0, 3)) in s2io_eeprom_test()
5929 if (!read_eeprom(sp, 0x4F0, &org_4F0)) in s2io_eeprom_test()
5931 if (!read_eeprom(sp, 0x7F0, &org_7F0)) in s2io_eeprom_test()
5935 if (write_eeprom(sp, 0x4F0, 0x012345, 3)) in s2io_eeprom_test()
5937 if (read_eeprom(sp, 0x4F0, &ret_data)) in s2io_eeprom_test()
5949 write_eeprom(sp, 0x4F0, 0xFFFFFF, 3); in s2io_eeprom_test()
5952 if (sp->device_type == XFRAME_I_DEVICE) in s2io_eeprom_test()
5953 if (!write_eeprom(sp, 0x07C, 0, 3)) in s2io_eeprom_test()
5957 if (write_eeprom(sp, 0x7F0, 0x012345, 3)) in s2io_eeprom_test()
5959 if (read_eeprom(sp, 0x7F0, &ret_data)) in s2io_eeprom_test()
5971 write_eeprom(sp, 0x7F0, 0xFFFFFF, 3); in s2io_eeprom_test()
5973 if (sp->device_type == XFRAME_I_DEVICE) { in s2io_eeprom_test()
5975 if (!write_eeprom(sp, 0x080, 0, 3)) in s2io_eeprom_test()
5979 if (!write_eeprom(sp, 0x0FC, 0, 3)) in s2io_eeprom_test()
5983 if (!write_eeprom(sp, 0x100, 0, 3)) in s2io_eeprom_test()
5987 if (!write_eeprom(sp, 0x4EC, 0, 3)) in s2io_eeprom_test()
5993 write_eeprom(sp, 0x4F0, org_4F0, 3); in s2io_eeprom_test()
5995 write_eeprom(sp, 0x7F0, org_7F0, 3); in s2io_eeprom_test()
6015 static int s2io_bist_test(struct s2io_nic *sp, uint64_t *data) in s2io_bist_test() argument
6020 pci_read_config_byte(sp->pdev, PCI_BIST, &bist); in s2io_bist_test()
6022 pci_write_config_word(sp->pdev, PCI_BIST, bist); in s2io_bist_test()
6025 pci_read_config_byte(sp->pdev, PCI_BIST, &bist); in s2io_bist_test()
6051 static int s2io_link_test(struct s2io_nic *sp, uint64_t *data) in s2io_link_test() argument
6053 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_link_test()
6078 static int s2io_rldram_test(struct s2io_nic *sp, uint64_t *data) in s2io_rldram_test() argument
6080 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_rldram_test()
6179 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_test() local
6180 int orig_state = netif_running(sp->dev); in s2io_ethtool_test()
6185 s2io_close(sp->dev); in s2io_ethtool_test()
6187 if (s2io_register_test(sp, &data[0])) in s2io_ethtool_test()
6190 s2io_reset(sp); in s2io_ethtool_test()
6192 if (s2io_rldram_test(sp, &data[3])) in s2io_ethtool_test()
6195 s2io_reset(sp); in s2io_ethtool_test()
6197 if (s2io_eeprom_test(sp, &data[1])) in s2io_ethtool_test()
6200 if (s2io_bist_test(sp, &data[4])) in s2io_ethtool_test()
6204 s2io_open(sp->dev); in s2io_ethtool_test()
6219 if (s2io_link_test(sp, &data[2])) in s2io_ethtool_test()
6234 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_ethtool_stats() local
6235 struct stat_block *stats = sp->mac_control.stats_info; in s2io_get_ethtool_stats()
6239 s2io_updt_stats(sp); in s2io_get_ethtool_stats()
6401 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_get_ethtool_stats()
6519 struct s2io_nic *sp = netdev_priv(dev); in s2io_get_sset_count() local
6525 switch (sp->device_type) { in s2io_get_sset_count()
6542 struct s2io_nic *sp = netdev_priv(dev); in s2io_ethtool_get_strings() local
6551 if (sp->device_type == XFRAME_II_DEVICE) { in s2io_ethtool_get_strings()
6565 struct s2io_nic *sp = netdev_priv(dev); in s2io_set_features() local
6571 s2io_stop_all_tx_queue(sp); in s2io_set_features()
6572 s2io_card_down(sp); in s2io_set_features()
6574 rc = s2io_card_up(sp); in s2io_set_features()
6576 s2io_reset(sp); in s2io_set_features()
6578 s2io_start_all_tx_queue(sp); in s2io_set_features()
6636 struct s2io_nic *sp = netdev_priv(dev); in s2io_change_mtu() local
6641 s2io_stop_all_tx_queue(sp); in s2io_change_mtu()
6642 s2io_card_down(sp); in s2io_change_mtu()
6643 ret = s2io_card_up(sp); in s2io_change_mtu()
6649 s2io_wake_all_tx_queue(sp); in s2io_change_mtu()
6651 struct XENA_dev_config __iomem *bar0 = sp->bar0; in s2io_change_mtu()
6743 static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp, in set_rxd_buffer_pointer() argument
6748 struct net_device *dev = sp->dev; in set_rxd_buffer_pointer()
6749 struct swStat *stats = &sp->mac_control.stats_info->sw_stat; in set_rxd_buffer_pointer()
6751 if ((sp->rxd_mode == RXD_MODE_1) && (rxdp->Host_Control == 0)) { in set_rxd_buffer_pointer()
6777 dma_map_single(&sp->pdev->dev, (*skb)->data, in set_rxd_buffer_pointer()
6780 if (dma_mapping_error(&sp->pdev->dev, rxdp1->Buffer0_ptr)) in set_rxd_buffer_pointer()
6784 } else if ((sp->rxd_mode == RXD_MODE_3B) && (rxdp->Host_Control == 0)) { in set_rxd_buffer_pointer()
6803 dma_map_single(&sp->pdev->dev, (*skb)->data, in set_rxd_buffer_pointer()
6805 if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer2_ptr)) in set_rxd_buffer_pointer()
6808 dma_map_single(&sp->pdev->dev, ba->ba_0, in set_rxd_buffer_pointer()
6810 if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer0_ptr)) { in set_rxd_buffer_pointer()
6811 dma_unmap_single(&sp->pdev->dev, in set_rxd_buffer_pointer()
6821 dma_map_single(&sp->pdev->dev, ba->ba_1, in set_rxd_buffer_pointer()
6823 if (dma_mapping_error(&sp->pdev->dev, rxdp3->Buffer1_ptr)) { in set_rxd_buffer_pointer()
6824 dma_unmap_single(&sp->pdev->dev, in set_rxd_buffer_pointer()
6827 dma_unmap_single(&sp->pdev->dev, in set_rxd_buffer_pointer()
6844 static void set_rxd_buffer_size(struct s2io_nic *sp, struct RxD_t *rxdp, in set_rxd_buffer_size() argument
6847 struct net_device *dev = sp->dev; in set_rxd_buffer_size()
6848 if (sp->rxd_mode == RXD_MODE_1) { in set_rxd_buffer_size()
6850 } else if (sp->rxd_mode == RXD_MODE_3B) { in set_rxd_buffer_size()
6857 static int rxd_owner_bit_reset(struct s2io_nic *sp) in rxd_owner_bit_reset() argument
6860 struct config_param *config = &sp->config; in rxd_owner_bit_reset()
6861 struct mac_info *mac_control = &sp->mac_control; in rxd_owner_bit_reset()
6862 struct net_device *dev = sp->dev; in rxd_owner_bit_reset()
6871 if (sp->rxd_mode == RXD_MODE_1) in rxd_owner_bit_reset()
6873 else if (sp->rxd_mode == RXD_MODE_3B) in rxd_owner_bit_reset()
6880 blk_cnt = rx_cfg->num_rxd / (rxd_count[sp->rxd_mode] + 1); in rxd_owner_bit_reset()
6883 for (k = 0; k < rxd_count[sp->rxd_mode]; k++) { in rxd_owner_bit_reset()
6885 if (sp->rxd_mode == RXD_MODE_3B) in rxd_owner_bit_reset()
6887 if (set_rxd_buffer_pointer(sp, rxdp, ba, &skb, in rxd_owner_bit_reset()
6895 set_rxd_buffer_size(sp, rxdp, size); in rxd_owner_bit_reset()
6906 static int s2io_add_isr(struct s2io_nic *sp) in s2io_add_isr() argument
6909 struct net_device *dev = sp->dev; in s2io_add_isr()
6912 if (sp->config.intr_type == MSI_X) in s2io_add_isr()
6913 ret = s2io_enable_msi_x(sp); in s2io_add_isr()
6916 sp->config.intr_type = INTA; in s2io_add_isr()
6923 store_xmsi_data(sp); in s2io_add_isr()
6926 if (sp->config.intr_type == MSI_X) { in s2io_add_isr()
6929 for (i = 0; i < sp->num_entries; i++) { in s2io_add_isr()
6930 if (sp->s2io_entries[i].in_use == MSIX_FLG) { in s2io_add_isr()
6931 if (sp->s2io_entries[i].type == in s2io_add_isr()
6933 snprintf(sp->desc[i], in s2io_add_isr()
6934 sizeof(sp->desc[i]), in s2io_add_isr()
6937 err = request_irq(sp->entries[i].vector, in s2io_add_isr()
6940 sp->desc[i], in s2io_add_isr()
6941 sp->s2io_entries[i].arg); in s2io_add_isr()
6942 } else if (sp->s2io_entries[i].type == in s2io_add_isr()
6944 snprintf(sp->desc[i], in s2io_add_isr()
6945 sizeof(sp->desc[i]), in s2io_add_isr()
6948 err = request_irq(sp->entries[i].vector, in s2io_add_isr()
6951 sp->desc[i], in s2io_add_isr()
6952 sp->s2io_entries[i].arg); in s2io_add_isr()
6956 if (!(sp->msix_info[i].addr && in s2io_add_isr()
6957 sp->msix_info[i].data)) { in s2io_add_isr()
6960 sp->desc[i], in s2io_add_isr()
6962 sp->msix_info[i].addr, in s2io_add_isr()
6964 ntohl(sp->msix_info[i].data)); in s2io_add_isr()
6968 remove_msix_isr(sp); in s2io_add_isr()
6977 sp->config.intr_type = INTA; in s2io_add_isr()
6980 sp->s2io_entries[i].in_use = in s2io_add_isr()
6990 if (sp->config.intr_type == INTA) { in s2io_add_isr()
6991 err = request_irq(sp->pdev->irq, s2io_isr, IRQF_SHARED, in s2io_add_isr()
6992 sp->name, dev); in s2io_add_isr()
7002 static void s2io_rem_isr(struct s2io_nic *sp) in s2io_rem_isr() argument
7004 if (sp->config.intr_type == MSI_X) in s2io_rem_isr()
7005 remove_msix_isr(sp); in s2io_rem_isr()
7007 remove_inta_isr(sp); in s2io_rem_isr()
7010 static void do_s2io_card_down(struct s2io_nic *sp, int do_io) in do_s2io_card_down() argument
7013 struct XENA_dev_config __iomem *bar0 = sp->bar0; in do_s2io_card_down()
7016 config = &sp->config; in do_s2io_card_down()
7018 if (!is_s2io_card_up(sp)) in do_s2io_card_down()
7021 del_timer_sync(&sp->alarm_timer); in do_s2io_card_down()
7023 while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state))) in do_s2io_card_down()
7025 clear_bit(__S2IO_STATE_CARD_UP, &sp->state); in do_s2io_card_down()
7028 if (sp->config.napi) { in do_s2io_card_down()
7031 for (; off < sp->config.rx_ring_num; off++) in do_s2io_card_down()
7032 napi_disable(&sp->mac_control.rings[off].napi); in do_s2io_card_down()
7035 napi_disable(&sp->napi); in do_s2io_card_down()
7040 stop_nic(sp); in do_s2io_card_down()
7042 s2io_rem_isr(sp); in do_s2io_card_down()
7045 s2io_link(sp, LINK_DOWN); in do_s2io_card_down()
7056 rxd_owner_bit_reset(sp); in do_s2io_card_down()
7059 if (verify_xena_quiescence(sp)) { in do_s2io_card_down()
7060 if (verify_pcc_quiescent(sp, sp->device_enabled_once)) in do_s2io_card_down()
7074 s2io_reset(sp); in do_s2io_card_down()
7077 free_tx_buffers(sp); in do_s2io_card_down()
7080 free_rx_buffers(sp); in do_s2io_card_down()
7082 clear_bit(__S2IO_STATE_LINK_TASK, &(sp->state)); in do_s2io_card_down()
7085 static void s2io_card_down(struct s2io_nic *sp) in s2io_card_down() argument
7087 do_s2io_card_down(sp, 1); in s2io_card_down()
7090 static int s2io_card_up(struct s2io_nic *sp) in s2io_card_up() argument
7095 struct net_device *dev = sp->dev; in s2io_card_up()
7099 ret = init_nic(sp); in s2io_card_up()
7104 s2io_reset(sp); in s2io_card_up()
7112 config = &sp->config; in s2io_card_up()
7113 mac_control = &sp->mac_control; in s2io_card_up()
7120 ret = fill_rx_buffers(sp, ring, 1); in s2io_card_up()
7134 for (i = 0; i < sp->config.rx_ring_num; i++) in s2io_card_up()
7135 napi_enable(&sp->mac_control.rings[i].napi); in s2io_card_up()
7137 napi_enable(&sp->napi); in s2io_card_up()
7142 if (sp->promisc_flg) in s2io_card_up()
7143 sp->promisc_flg = 0; in s2io_card_up()
7144 if (sp->m_cast_flg) { in s2io_card_up()
7145 sp->m_cast_flg = 0; in s2io_card_up()
7146 sp->all_multi_pos = 0; in s2io_card_up()
7154 sp->lro_max_aggr_per_sess = ((1<<16) - 1) / dev->mtu; in s2io_card_up()
7156 if (lro_max_pkts < sp->lro_max_aggr_per_sess) in s2io_card_up()
7157 sp->lro_max_aggr_per_sess = lro_max_pkts; in s2io_card_up()
7161 if (start_nic(sp)) { in s2io_card_up()
7168 if (s2io_add_isr(sp) != 0) { in s2io_card_up()
7169 if (sp->config.intr_type == MSI_X) in s2io_card_up()
7170 s2io_rem_isr(sp); in s2io_card_up()
7175 timer_setup(&sp->alarm_timer, s2io_alarm_handle, 0); in s2io_card_up()
7176 mod_timer(&sp->alarm_timer, jiffies + HZ / 2); in s2io_card_up()
7178 set_bit(__S2IO_STATE_CARD_UP, &sp->state); in s2io_card_up()
7181 en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); in s2io_card_up()
7182 if (sp->config.intr_type != INTA) { in s2io_card_up()
7184 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS); in s2io_card_up()
7188 en_dis_able_nic_intrs(sp, interruptible, ENABLE_INTRS); in s2io_card_up()
7196 for (i = 0; i < sp->config.rx_ring_num; i++) in s2io_card_up()
7197 napi_disable(&sp->mac_control.rings[i].napi); in s2io_card_up()
7199 napi_disable(&sp->napi); in s2io_card_up()
7203 s2io_reset(sp); in s2io_card_up()
7204 free_rx_buffers(sp); in s2io_card_up()
7220 struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task); in s2io_restart_nic() local
7221 struct net_device *dev = sp->dev; in s2io_restart_nic()
7228 s2io_card_down(sp); in s2io_restart_nic()
7229 if (s2io_card_up(sp)) { in s2io_restart_nic()
7232 s2io_wake_all_tx_queue(sp); in s2io_restart_nic()
7254 struct s2io_nic *sp = netdev_priv(dev); in s2io_tx_watchdog() local
7255 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_tx_watchdog()
7259 schedule_work(&sp->rst_timer_task); in s2io_tx_watchdog()
7280 struct s2io_nic *sp = ring_data->nic; in rx_osm_handler() local
7289 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in rx_osm_handler()
7357 if (sp->rxd_mode == RXD_MODE_1) { in rx_osm_handler()
7361 } else if (sp->rxd_mode == RXD_MODE_3B) { in rx_osm_handler()
7393 rxdp, sp); in rx_osm_handler()
7399 lro_append_pkt(sp, lro, skb, tcp_len); in rx_osm_handler()
7402 lro_append_pkt(sp, lro, skb, tcp_len); in rx_osm_handler()
7444 sp->mac_control.rings[ring_no].rx_bufs_left -= 1; in rx_osm_handler()
7461 static void s2io_link(struct s2io_nic *sp, int link) in s2io_link() argument
7463 struct net_device *dev = sp->dev; in s2io_link()
7464 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_link()
7466 if (link != sp->last_link_state) { in s2io_link()
7467 init_tti(sp, link, false); in s2io_link()
7470 s2io_stop_all_tx_queue(sp); in s2io_link()
7474 jiffies - sp->start_time; in s2io_link()
7480 jiffies - sp->start_time; in s2io_link()
7483 s2io_wake_all_tx_queue(sp); in s2io_link()
7486 sp->last_link_state = link; in s2io_link()
7487 sp->start_time = jiffies; in s2io_link()
7501 static void s2io_init_pci(struct s2io_nic *sp) in s2io_init_pci() argument
7506 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7508 pci_write_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7510 pci_read_config_word(sp->pdev, PCIX_COMMAND_REGISTER, in s2io_init_pci()
7514 pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd); in s2io_init_pci()
7515 pci_write_config_word(sp->pdev, PCI_COMMAND, in s2io_init_pci()
7517 pci_read_config_word(sp->pdev, PCI_COMMAND, &pci_cmd); in s2io_init_pci()
7661 struct s2io_nic *sp; in s2io_init_nic() local
7713 sp = netdev_priv(dev); in s2io_init_nic()
7714 sp->dev = dev; in s2io_init_nic()
7715 sp->pdev = pdev; in s2io_init_nic()
7716 sp->device_enabled_once = false; in s2io_init_nic()
7718 sp->rxd_mode = RXD_MODE_1; in s2io_init_nic()
7720 sp->rxd_mode = RXD_MODE_3B; in s2io_init_nic()
7722 sp->config.intr_type = dev_intr_type; in s2io_init_nic()
7726 sp->device_type = XFRAME_II_DEVICE; in s2io_init_nic()
7728 sp->device_type = XFRAME_I_DEVICE; in s2io_init_nic()
7732 s2io_init_pci(sp); in s2io_init_nic()
7741 config = &sp->config; in s2io_init_nic()
7742 mac_control = &sp->mac_control; in s2io_init_nic()
7756 sp->total_tcp_fifos = 1; in s2io_init_nic()
7758 sp->total_tcp_fifos = config->tx_fifo_num - 1; in s2io_init_nic()
7759 sp->udp_fifo_idx = config->tx_fifo_num - 1; in s2io_init_nic()
7760 sp->total_udp_fifos = 1; in s2io_init_nic()
7761 sp->other_fifo_idx = sp->total_tcp_fifos - 1; in s2io_init_nic()
7763 sp->total_tcp_fifos = (tx_fifo_num - FIFO_UDP_MAX_NUM - in s2io_init_nic()
7765 sp->udp_fifo_idx = sp->total_tcp_fifos; in s2io_init_nic()
7766 sp->total_udp_fifos = FIFO_UDP_MAX_NUM; in s2io_init_nic()
7767 sp->other_fifo_idx = sp->udp_fifo_idx + FIFO_UDP_MAX_NUM; in s2io_init_nic()
7784 sp->fifo_selector[i] = fifo_selector[i]; in s2io_init_nic()
7806 rx_cfg->num_rxd = rx_ring_sz[i] * (rxd_count[sp->rxd_mode] + 1); in s2io_init_nic()
7809 ring->rxd_mode = sp->rxd_mode; in s2io_init_nic()
7810 ring->rxd_count = rxd_count[sp->rxd_mode]; in s2io_init_nic()
7811 ring->pdev = sp->pdev; in s2io_init_nic()
7812 ring->dev = sp->dev; in s2io_init_nic()
7829 if (init_shared_mem(sp)) { in s2io_init_nic()
7835 sp->bar0 = pci_ioremap_bar(pdev, 0); in s2io_init_nic()
7836 if (!sp->bar0) { in s2io_init_nic()
7843 sp->bar1 = pci_ioremap_bar(pdev, 2); in s2io_init_nic()
7844 if (!sp->bar1) { in s2io_init_nic()
7853 mac_control->tx_FIFO_start[j] = sp->bar1 + (j * 0x00020000); in s2io_init_nic()
7866 INIT_WORK(&sp->rst_timer_task, s2io_restart_nic); in s2io_init_nic()
7867 INIT_WORK(&sp->set_link_task, s2io_set_link); in s2io_init_nic()
7869 pci_save_state(sp->pdev); in s2io_init_nic()
7872 if (s2io_set_swapper(sp)) { in s2io_init_nic()
7880 if (sp->device_type & XFRAME_II_DEVICE) { in s2io_init_nic()
7881 mode = s2io_verify_pci_mode(sp); in s2io_init_nic()
7890 if (sp->config.intr_type == MSI_X) { in s2io_init_nic()
7891 sp->num_entries = config->rx_ring_num + 1; in s2io_init_nic()
7892 ret = s2io_enable_msi_x(sp); in s2io_init_nic()
7895 ret = s2io_test_msi(sp); in s2io_init_nic()
7897 remove_msix_isr(sp); in s2io_init_nic()
7903 sp->config.intr_type = INTA; in s2io_init_nic()
7914 netif_napi_add(dev, &sp->napi, s2io_poll_inta); in s2io_init_nic()
7918 if (sp->device_type & XFRAME_I_DEVICE) { in s2io_init_nic()
7923 fix_mac_address(sp); in s2io_init_nic()
7924 s2io_reset(sp); in s2io_init_nic()
7931 bar0 = sp->bar0; in s2io_init_nic()
7942 sp->def_mac_addr[0].mac_addr[3] = (u8) (mac_up); in s2io_init_nic()
7943 sp->def_mac_addr[0].mac_addr[2] = (u8) (mac_up >> 8); in s2io_init_nic()
7944 sp->def_mac_addr[0].mac_addr[1] = (u8) (mac_up >> 16); in s2io_init_nic()
7945 sp->def_mac_addr[0].mac_addr[0] = (u8) (mac_up >> 24); in s2io_init_nic()
7946 sp->def_mac_addr[0].mac_addr[5] = (u8) (mac_down >> 16); in s2io_init_nic()
7947 sp->def_mac_addr[0].mac_addr[4] = (u8) (mac_down >> 24); in s2io_init_nic()
7951 eth_hw_addr_set(dev, sp->def_mac_addr[0].mac_addr); in s2io_init_nic()
7954 if (sp->device_type == XFRAME_I_DEVICE) { in s2io_init_nic()
7958 } else if (sp->device_type == XFRAME_II_DEVICE) { in s2io_init_nic()
7969 do_s2io_store_unicast_mc(sp); in s2io_init_nic()
7972 if ((sp->device_type == XFRAME_II_DEVICE) && in s2io_init_nic()
7974 sp->num_entries = config->rx_ring_num + 1; in s2io_init_nic()
7977 store_xmsi_data(sp); in s2io_init_nic()
7979 s2io_reset(sp); in s2io_init_nic()
7985 sp->state = 0; in s2io_init_nic()
7988 for (i = 0; i < sp->config.tx_fifo_num; i++) { in s2io_init_nic()
7998 subid = sp->pdev->subsystem_device; in s2io_init_nic()
8008 sp->rx_csum = 1; /* Rx chksum verify enabled by default */ in s2io_init_nic()
8015 s2io_vpd_read(sp); in s2io_init_nic()
8018 sp->product_name, pdev->revision); in s2io_init_nic()
8022 DBG_PRINT(ERR_DBG, "Serial number: %s\n", sp->serial_num); in s2io_init_nic()
8023 if (sp->device_type & XFRAME_II_DEVICE) { in s2io_init_nic()
8024 mode = s2io_print_pci_mode(sp); in s2io_init_nic()
8031 switch (sp->rxd_mode) { in s2io_init_nic()
8042 switch (sp->config.napi) { in s2io_init_nic()
8052 sp->config.tx_fifo_num); in s2io_init_nic()
8055 sp->config.rx_ring_num); in s2io_init_nic()
8057 switch (sp->config.intr_type) { in s2io_init_nic()
8065 if (sp->config.multiq) { in s2io_init_nic()
8066 for (i = 0; i < sp->config.tx_fifo_num; i++) { in s2io_init_nic()
8077 switch (sp->config.tx_steering_type) { in s2io_init_nic()
8096 snprintf(sp->name, sizeof(sp->name), "%s Neterion %s", dev->name, in s2io_init_nic()
8097 sp->product_name); in s2io_init_nic()
8100 sp->vlan_strip_flag = 1; in s2io_init_nic()
8102 sp->vlan_strip_flag = 0; in s2io_init_nic()
8115 iounmap(sp->bar1); in s2io_init_nic()
8117 iounmap(sp->bar0); in s2io_init_nic()
8120 free_shared_mem(sp); in s2io_init_nic()
8140 struct s2io_nic *sp; in s2io_rem_nic() local
8147 sp = netdev_priv(dev); in s2io_rem_nic()
8149 cancel_work_sync(&sp->rst_timer_task); in s2io_rem_nic()
8150 cancel_work_sync(&sp->set_link_task); in s2io_rem_nic()
8154 free_shared_mem(sp); in s2io_rem_nic()
8155 iounmap(sp->bar0); in s2io_rem_nic()
8156 iounmap(sp->bar1); in s2io_rem_nic()
8166 struct s2io_nic *sp) in check_L2_lro_capable() argument
8185 if ((!sp->vlan_strip_flag) && in check_L2_lro_capable()
8246 static void update_L3L4_header(struct s2io_nic *sp, struct lro *lro) in update_L3L4_header() argument
8250 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in update_L3L4_header()
8357 struct RxD_t *rxdp, struct s2io_nic *sp) in s2io_club_tcp_session() argument
8363 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in s2io_club_tcp_session()
8366 rxdp, sp); in s2io_club_tcp_session()
8436 update_L3L4_header(sp, *lro); in s2io_club_tcp_session()
8440 if ((*lro)->sg_num == sp->lro_max_aggr_per_sess) { in s2io_club_tcp_session()
8441 update_L3L4_header(sp, *lro); in s2io_club_tcp_session()
8463 struct s2io_nic *sp = netdev_priv(dev); in queue_rx_frame() local
8466 if (vlan_tag && sp->vlan_strip_flag) in queue_rx_frame()
8468 if (sp->config.napi) in queue_rx_frame()
8474 static void lro_append_pkt(struct s2io_nic *sp, struct lro *lro, in lro_append_pkt() argument
8478 struct swStat *swstats = &sp->mac_control.stats_info->sw_stat; in lro_append_pkt()
8504 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_error_detected() local
8513 do_s2io_card_down(sp, 0); in s2io_io_error_detected()
8532 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_slot_reset() local
8540 s2io_reset(sp); in s2io_io_slot_reset()
8555 struct s2io_nic *sp = netdev_priv(netdev); in s2io_io_resume() local
8558 if (s2io_card_up(sp)) { in s2io_io_resume()
8564 s2io_card_down(sp); in s2io_io_resume()