Lines Matching full:adapter

66 static void qlcnic_schedule_work(struct qlcnic_adapter *adapter,
68 static void qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter);
75 static void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter);
76 static void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter);
77 static void qlcnic_create_diag_entries(struct qlcnic_adapter *adapter);
78 static void qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter);
80 static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding);
81 static void qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter, u8);
82 static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter);
93 static void qlcnic_free_lb_filters_mem(struct qlcnic_adapter *adapter);
119 qlcnic_update_cmd_producer(struct qlcnic_adapter *adapter, in qlcnic_update_cmd_producer() argument
142 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_enable_int() local
146 if (!QLCNIC_IS_MSI_FAMILY(adapter)) in qlcnic_enable_int()
147 writel(0xfbff, adapter->tgt_mask_reg); in qlcnic_enable_int()
170 qlcnic_napi_add(struct qlcnic_adapter *adapter, struct net_device *netdev) in qlcnic_napi_add() argument
174 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_napi_add()
176 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->max_sds_rings)) in qlcnic_napi_add()
179 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_napi_add()
182 if (ring == adapter->max_sds_rings - 1) in qlcnic_napi_add()
184 QLCNIC_NETDEV_WEIGHT/adapter->max_sds_rings); in qlcnic_napi_add()
194 qlcnic_napi_del(struct qlcnic_adapter *adapter) in qlcnic_napi_del() argument
198 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_napi_del()
200 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_napi_del()
205 qlcnic_free_sds_rings(adapter->recv_ctx); in qlcnic_napi_del()
209 qlcnic_napi_enable(struct qlcnic_adapter *adapter) in qlcnic_napi_enable() argument
213 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_napi_enable()
215 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_napi_enable()
218 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_napi_enable()
226 qlcnic_napi_disable(struct qlcnic_adapter *adapter) in qlcnic_napi_disable() argument
230 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_napi_disable()
232 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_napi_disable()
235 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_napi_disable()
243 static void qlcnic_clear_stats(struct qlcnic_adapter *adapter) in qlcnic_clear_stats() argument
245 memset(&adapter->stats, 0, sizeof(adapter->stats)); in qlcnic_clear_stats()
264 static void qlcnic_init_msix_entries(struct qlcnic_adapter *adapter, int count) in qlcnic_init_msix_entries() argument
269 adapter->msix_entries[i].entry = i; in qlcnic_init_msix_entries()
273 qlcnic_read_mac_addr(struct qlcnic_adapter *adapter) in qlcnic_read_mac_addr() argument
276 struct net_device *netdev = adapter->netdev; in qlcnic_read_mac_addr()
277 struct pci_dev *pdev = adapter->pdev; in qlcnic_read_mac_addr()
279 if (qlcnic_get_mac_address(adapter, mac_addr) != 0) in qlcnic_read_mac_addr()
284 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len); in qlcnic_read_mac_addr()
297 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_set_mac() local
300 if ((adapter->flags & QLCNIC_MAC_OVERRIDE_DISABLED)) in qlcnic_set_mac()
306 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_set_mac()
308 qlcnic_napi_disable(adapter); in qlcnic_set_mac()
311 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len); in qlcnic_set_mac()
313 qlcnic_set_multi(adapter->netdev); in qlcnic_set_mac()
315 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_set_mac()
317 qlcnic_napi_enable(adapter); in qlcnic_set_mac()
353 static int qlcnic_enable_msix(struct qlcnic_adapter *adapter, u32 num_msix) in qlcnic_enable_msix() argument
355 struct pci_dev *pdev = adapter->pdev; in qlcnic_enable_msix()
358 adapter->max_sds_rings = 1; in qlcnic_enable_msix()
359 adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED); in qlcnic_enable_msix()
362 if (adapter->msix_supported) { in qlcnic_enable_msix()
364 qlcnic_init_msix_entries(adapter, num_msix); in qlcnic_enable_msix()
365 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix); in qlcnic_enable_msix()
367 adapter->flags |= QLCNIC_MSIX_ENABLED; in qlcnic_enable_msix()
370 adapter->max_sds_rings = num_msix; in qlcnic_enable_msix()
385 static void qlcnic_enable_msi_legacy(struct qlcnic_adapter *adapter) in qlcnic_enable_msi_legacy() argument
388 struct pci_dev *pdev = adapter->pdev; in qlcnic_enable_msi_legacy()
391 adapter->flags |= QLCNIC_MSI_ENABLED; in qlcnic_enable_msi_legacy()
392 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, in qlcnic_enable_msi_legacy()
393 msi_tgt_status[adapter->ahw->pci_func]); in qlcnic_enable_msi_legacy()
395 adapter->msix_entries[0].vector = pdev->irq; in qlcnic_enable_msi_legacy()
399 legacy_intrp = &legacy_intr[adapter->ahw->pci_func]; in qlcnic_enable_msi_legacy()
401 adapter->int_vec_bit = legacy_intrp->int_vec_bit; in qlcnic_enable_msi_legacy()
402 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter, in qlcnic_enable_msi_legacy()
404 adapter->tgt_mask_reg = qlcnic_get_ioaddr(adapter, in qlcnic_enable_msi_legacy()
406 adapter->isr_int_vec = qlcnic_get_ioaddr(adapter, ISR_INT_VECTOR); in qlcnic_enable_msi_legacy()
408 adapter->crb_int_state_reg = qlcnic_get_ioaddr(adapter, in qlcnic_enable_msi_legacy()
411 adapter->msix_entries[0].vector = pdev->irq; in qlcnic_enable_msi_legacy()
415 qlcnic_setup_intr(struct qlcnic_adapter *adapter) in qlcnic_setup_intr() argument
419 if (adapter->msix_supported) { in qlcnic_setup_intr()
425 if (!qlcnic_enable_msix(adapter, num_msix)) in qlcnic_setup_intr()
428 qlcnic_enable_msi_legacy(adapter); in qlcnic_setup_intr()
432 qlcnic_teardown_intr(struct qlcnic_adapter *adapter) in qlcnic_teardown_intr() argument
434 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_teardown_intr()
435 pci_disable_msix(adapter->pdev); in qlcnic_teardown_intr()
436 if (adapter->flags & QLCNIC_MSI_ENABLED) in qlcnic_teardown_intr()
437 pci_disable_msi(adapter->pdev); in qlcnic_teardown_intr()
441 qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter) in qlcnic_cleanup_pci_map() argument
443 if (adapter->ahw->pci_base0 != NULL) in qlcnic_cleanup_pci_map()
444 iounmap(adapter->ahw->pci_base0); in qlcnic_cleanup_pci_map()
448 qlcnic_init_pci_info(struct qlcnic_adapter *adapter) in qlcnic_init_pci_info() argument
458 adapter->npars = kzalloc(sizeof(struct qlcnic_npar_info) * in qlcnic_init_pci_info()
460 if (!adapter->npars) { in qlcnic_init_pci_info()
465 adapter->eswitch = kzalloc(sizeof(struct qlcnic_eswitch) * in qlcnic_init_pci_info()
467 if (!adapter->eswitch) { in qlcnic_init_pci_info()
472 ret = qlcnic_get_pci_info(adapter, pci_info); in qlcnic_init_pci_info()
482 adapter->npars[pfn].active = (u8)pci_info[i].active; in qlcnic_init_pci_info()
483 adapter->npars[pfn].type = (u8)pci_info[i].type; in qlcnic_init_pci_info()
484 adapter->npars[pfn].phy_port = (u8)pci_info[i].default_port; in qlcnic_init_pci_info()
485 adapter->npars[pfn].min_bw = pci_info[i].tx_min_bw; in qlcnic_init_pci_info()
486 adapter->npars[pfn].max_bw = pci_info[i].tx_max_bw; in qlcnic_init_pci_info()
490 adapter->eswitch[i].flags |= QLCNIC_SWITCH_ENABLE; in qlcnic_init_pci_info()
496 kfree(adapter->eswitch); in qlcnic_init_pci_info()
497 adapter->eswitch = NULL; in qlcnic_init_pci_info()
499 kfree(adapter->npars); in qlcnic_init_pci_info()
500 adapter->npars = NULL; in qlcnic_init_pci_info()
508 qlcnic_set_function_modes(struct qlcnic_adapter *adapter) in qlcnic_set_function_modes() argument
514 void __iomem *priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE; in qlcnic_set_function_modes()
517 ref_count = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); in qlcnic_set_function_modes()
518 ret = qlcnic_api_lock(adapter); in qlcnic_set_function_modes()
525 if (adapter->npars[i].type != QLCNIC_TYPE_NIC || in qlcnic_set_function_modes()
526 id == adapter->ahw->pci_func) in qlcnic_set_function_modes()
533 data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw->pci_func)) | in qlcnic_set_function_modes()
535 adapter->ahw->pci_func)); in qlcnic_set_function_modes()
538 qlcnic_api_unlock(adapter); in qlcnic_set_function_modes()
544 qlcnic_check_vf(struct qlcnic_adapter *adapter) in qlcnic_check_vf() argument
553 adapter->fw_hal_version = readl(adapter->ahw->pci_base0 + in qlcnic_check_vf()
557 pci_read_config_dword(adapter->pdev, QLCNIC_MSIX_TABLE_OFFSET, &func); in qlcnic_check_vf()
558 msix_base_addr = adapter->ahw->pci_base0 + QLCNIC_MSIX_BASE; in qlcnic_check_vf()
561 adapter->ahw->pci_func = func; in qlcnic_check_vf()
564 priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE; in qlcnic_check_vf()
569 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func); in qlcnic_check_vf()
572 adapter->op_mode = QLCNIC_NON_PRIV_FUNC; in qlcnic_check_vf()
573 dev_info(&adapter->pdev->dev, in qlcnic_check_vf()
575 adapter->fw_hal_version); in qlcnic_check_vf()
576 adapter->nic_ops = &qlcnic_vf_ops; in qlcnic_check_vf()
578 adapter->nic_ops = &qlcnic_ops; in qlcnic_check_vf()
582 qlcnic_setup_pci_map(struct qlcnic_adapter *adapter) in qlcnic_setup_pci_map() argument
588 struct pci_dev *pdev = adapter->pdev; in qlcnic_setup_pci_map()
608 adapter->ahw->pci_base0 = mem_ptr0; in qlcnic_setup_pci_map()
609 adapter->ahw->pci_len0 = pci_len0; in qlcnic_setup_pci_map()
611 qlcnic_check_vf(adapter); in qlcnic_setup_pci_map()
613 adapter->ahw->ocm_win_crb = qlcnic_get_ioaddr(adapter, in qlcnic_setup_pci_map()
615 adapter->ahw->pci_func))); in qlcnic_setup_pci_map()
620 static void get_brd_name(struct qlcnic_adapter *adapter, char *name) in get_brd_name() argument
622 struct pci_dev *pdev = adapter->pdev; in get_brd_name()
631 adapter->mac_addr, in get_brd_name()
640 sprintf(name, "%pM Gigabit Ethernet", adapter->mac_addr); in get_brd_name()
644 qlcnic_check_options(struct qlcnic_adapter *adapter) in qlcnic_check_options() argument
647 struct pci_dev *pdev = adapter->pdev; in qlcnic_check_options()
648 struct qlcnic_fw_dump *fw_dump = &adapter->ahw->fw_dump; in qlcnic_check_options()
650 prev_fw_version = adapter->fw_version; in qlcnic_check_options()
652 fw_major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR); in qlcnic_check_options()
653 fw_minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR); in qlcnic_check_options()
654 fw_build = QLCRD32(adapter, QLCNIC_FW_VERSION_SUB); in qlcnic_check_options()
656 adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); in qlcnic_check_options()
658 if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC) { in qlcnic_check_options()
660 adapter->fw_version > prev_fw_version) { in qlcnic_check_options()
663 if (!qlcnic_fw_cmd_get_minidump_temp(adapter)) in qlcnic_check_options()
671 if (adapter->ahw->port_type == QLCNIC_XGBE) { in qlcnic_check_options()
672 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { in qlcnic_check_options()
673 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF; in qlcnic_check_options()
674 adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF; in qlcnic_check_options()
676 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; in qlcnic_check_options()
677 adapter->max_rxd = MAX_RCV_DESCRIPTORS_10G; in qlcnic_check_options()
680 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; in qlcnic_check_options()
681 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; in qlcnic_check_options()
683 } else if (adapter->ahw->port_type == QLCNIC_GBE) { in qlcnic_check_options()
684 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; in qlcnic_check_options()
685 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; in qlcnic_check_options()
686 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; in qlcnic_check_options()
687 adapter->max_rxd = MAX_RCV_DESCRIPTORS_1G; in qlcnic_check_options()
690 adapter->msix_supported = !!use_msi_x; in qlcnic_check_options()
692 adapter->num_txd = MAX_CMD_DESCRIPTORS; in qlcnic_check_options()
694 adapter->max_rds_rings = MAX_RDS_RINGS; in qlcnic_check_options()
698 qlcnic_initialize_nic(struct qlcnic_adapter *adapter) in qlcnic_initialize_nic() argument
703 err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func); in qlcnic_initialize_nic()
707 adapter->physical_port = (u8)nic_info.phys_port; in qlcnic_initialize_nic()
708 adapter->switch_mode = nic_info.switch_mode; in qlcnic_initialize_nic()
709 adapter->max_tx_ques = nic_info.max_tx_ques; in qlcnic_initialize_nic()
710 adapter->max_rx_ques = nic_info.max_rx_ques; in qlcnic_initialize_nic()
711 adapter->capabilities = nic_info.capabilities; in qlcnic_initialize_nic()
712 adapter->max_mac_filters = nic_info.max_mac_filters; in qlcnic_initialize_nic()
713 adapter->max_mtu = nic_info.max_mtu; in qlcnic_initialize_nic()
715 if (adapter->capabilities & BIT_6) in qlcnic_initialize_nic()
716 adapter->flags |= QLCNIC_ESWITCH_ENABLED; in qlcnic_initialize_nic()
718 adapter->flags &= ~QLCNIC_ESWITCH_ENABLED; in qlcnic_initialize_nic()
724 qlcnic_set_vlan_config(struct qlcnic_adapter *adapter, in qlcnic_set_vlan_config() argument
728 adapter->flags &= ~QLCNIC_TAGGING_ENABLED; in qlcnic_set_vlan_config()
730 adapter->flags |= QLCNIC_TAGGING_ENABLED; in qlcnic_set_vlan_config()
733 adapter->pvid = esw_cfg->vlan_id; in qlcnic_set_vlan_config()
735 adapter->pvid = 0; in qlcnic_set_vlan_config()
741 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_vlan_rx_add() local
742 set_bit(vid, adapter->vlans); in qlcnic_vlan_rx_add()
749 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_vlan_rx_del() local
752 clear_bit(vid, adapter->vlans); in qlcnic_vlan_rx_del()
757 qlcnic_set_eswitch_port_features(struct qlcnic_adapter *adapter, in qlcnic_set_eswitch_port_features() argument
760 adapter->flags &= ~(QLCNIC_MACSPOOF | QLCNIC_MAC_OVERRIDE_DISABLED | in qlcnic_set_eswitch_port_features()
764 adapter->flags |= QLCNIC_MACSPOOF; in qlcnic_set_eswitch_port_features()
767 adapter->flags |= QLCNIC_MAC_OVERRIDE_DISABLED; in qlcnic_set_eswitch_port_features()
770 adapter->flags |= QLCNIC_PROMISC_DISABLED; in qlcnic_set_eswitch_port_features()
772 qlcnic_set_netdev_features(adapter, esw_cfg); in qlcnic_set_eswitch_port_features()
776 qlcnic_set_eswitch_port_config(struct qlcnic_adapter *adapter) in qlcnic_set_eswitch_port_config() argument
780 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) in qlcnic_set_eswitch_port_config()
783 esw_cfg.pci_func = adapter->ahw->pci_func; in qlcnic_set_eswitch_port_config()
784 if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg)) in qlcnic_set_eswitch_port_config()
786 qlcnic_set_vlan_config(adapter, &esw_cfg); in qlcnic_set_eswitch_port_config()
787 qlcnic_set_eswitch_port_features(adapter, &esw_cfg); in qlcnic_set_eswitch_port_config()
793 qlcnic_set_netdev_features(struct qlcnic_adapter *adapter, in qlcnic_set_netdev_features() argument
796 struct net_device *netdev = adapter->netdev; in qlcnic_set_netdev_features()
804 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { in qlcnic_set_netdev_features()
826 qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter) in qlcnic_check_eswitch_mode() argument
832 err = qlcnic_initialize_nic(adapter); in qlcnic_check_eswitch_mode()
836 if (adapter->flags & QLCNIC_ADAPTER_INITIALIZED) in qlcnic_check_eswitch_mode()
839 priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE; in qlcnic_check_eswitch_mode()
841 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func); in qlcnic_check_eswitch_mode()
846 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func); in qlcnic_check_eswitch_mode()
848 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) { in qlcnic_check_eswitch_mode()
850 adapter->op_mode = QLCNIC_MGMT_FUNC; in qlcnic_check_eswitch_mode()
851 err = qlcnic_init_pci_info(adapter); in qlcnic_check_eswitch_mode()
855 qlcnic_set_function_modes(adapter); in qlcnic_check_eswitch_mode()
856 dev_info(&adapter->pdev->dev, in qlcnic_check_eswitch_mode()
858 adapter->fw_hal_version); in qlcnic_check_eswitch_mode()
860 adapter->op_mode = QLCNIC_PRIV_FUNC; in qlcnic_check_eswitch_mode()
861 dev_info(&adapter->pdev->dev, in qlcnic_check_eswitch_mode()
863 adapter->fw_hal_version); in qlcnic_check_eswitch_mode()
867 adapter->flags |= QLCNIC_ADAPTER_INITIALIZED; in qlcnic_check_eswitch_mode()
873 qlcnic_set_default_offload_settings(struct qlcnic_adapter *adapter) in qlcnic_set_default_offload_settings() argument
879 if (adapter->need_fw_reset) in qlcnic_set_default_offload_settings()
883 if (adapter->npars[i].type != QLCNIC_TYPE_NIC) in qlcnic_set_default_offload_settings()
890 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) in qlcnic_set_default_offload_settings()
892 if (qlcnic_config_switch_port(adapter, &esw_cfg)) in qlcnic_set_default_offload_settings()
894 npar = &adapter->npars[i]; in qlcnic_set_default_offload_settings()
907 qlcnic_reset_eswitch_config(struct qlcnic_adapter *adapter, in qlcnic_reset_eswitch_config() argument
919 if (qlcnic_config_switch_port(adapter, &esw_cfg)) in qlcnic_reset_eswitch_config()
923 if (qlcnic_config_switch_port(adapter, &esw_cfg)) in qlcnic_reset_eswitch_config()
930 qlcnic_reset_npar_config(struct qlcnic_adapter *adapter) in qlcnic_reset_npar_config() argument
936 if (!adapter->need_fw_reset) in qlcnic_reset_npar_config()
941 npar = &adapter->npars[i]; in qlcnic_reset_npar_config()
944 err = qlcnic_get_nic_info(adapter, &nic_info, i); in qlcnic_reset_npar_config()
949 err = qlcnic_set_nic_info(adapter, &nic_info); in qlcnic_reset_npar_config()
954 err = qlcnic_config_port_mirroring(adapter, in qlcnic_reset_npar_config()
959 err = qlcnic_reset_eswitch_config(adapter, npar, i); in qlcnic_reset_npar_config()
966 static int qlcnic_check_npar_opertional(struct qlcnic_adapter *adapter) in qlcnic_check_npar_opertional() argument
971 if (adapter->op_mode == QLCNIC_MGMT_FUNC) in qlcnic_check_npar_opertional()
974 npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); in qlcnic_check_npar_opertional()
977 npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); in qlcnic_check_npar_opertional()
980 dev_err(&adapter->pdev->dev, in qlcnic_check_npar_opertional()
988 qlcnic_set_mgmt_operations(struct qlcnic_adapter *adapter) in qlcnic_set_mgmt_operations() argument
992 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED) || in qlcnic_set_mgmt_operations()
993 adapter->op_mode != QLCNIC_MGMT_FUNC) in qlcnic_set_mgmt_operations()
996 err = qlcnic_set_default_offload_settings(adapter); in qlcnic_set_mgmt_operations()
1000 err = qlcnic_reset_npar_config(adapter); in qlcnic_set_mgmt_operations()
1004 qlcnic_dev_set_npar_ready(adapter); in qlcnic_set_mgmt_operations()
1010 qlcnic_start_firmware(struct qlcnic_adapter *adapter) in qlcnic_start_firmware() argument
1014 err = qlcnic_can_start_firmware(adapter); in qlcnic_start_firmware()
1021 qlcnic_request_firmware(adapter); in qlcnic_start_firmware()
1023 err = qlcnic_check_flash_fw_ver(adapter); in qlcnic_start_firmware()
1027 adapter->fw_type = QLCNIC_FLASH_ROMIMAGE; in qlcnic_start_firmware()
1030 err = qlcnic_need_fw_reset(adapter); in qlcnic_start_firmware()
1034 err = qlcnic_pinit_from_rom(adapter); in qlcnic_start_firmware()
1038 err = qlcnic_load_firmware(adapter); in qlcnic_start_firmware()
1042 qlcnic_release_firmware(adapter); in qlcnic_start_firmware()
1043 QLCWR32(adapter, CRB_DRIVER_VERSION, QLCNIC_DRIVER_VERSION); in qlcnic_start_firmware()
1046 err = qlcnic_check_fw_status(adapter); in qlcnic_start_firmware()
1050 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY); in qlcnic_start_firmware()
1051 qlcnic_idc_debug_info(adapter, 1); in qlcnic_start_firmware()
1053 err = qlcnic_check_eswitch_mode(adapter); in qlcnic_start_firmware()
1055 dev_err(&adapter->pdev->dev, in qlcnic_start_firmware()
1059 err = qlcnic_set_mgmt_operations(adapter); in qlcnic_start_firmware()
1063 qlcnic_check_options(adapter); in qlcnic_start_firmware()
1064 adapter->need_fw_reset = 0; in qlcnic_start_firmware()
1066 qlcnic_release_firmware(adapter); in qlcnic_start_firmware()
1070 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED); in qlcnic_start_firmware()
1071 dev_err(&adapter->pdev->dev, "Device state set to failed\n"); in qlcnic_start_firmware()
1073 qlcnic_release_firmware(adapter); in qlcnic_start_firmware()
1078 qlcnic_request_irq(struct qlcnic_adapter *adapter) in qlcnic_request_irq() argument
1085 struct net_device *netdev = adapter->netdev; in qlcnic_request_irq()
1086 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_request_irq()
1088 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_request_irq()
1090 if (!QLCNIC_IS_MSI_FAMILY(adapter)) in qlcnic_request_irq()
1094 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_request_irq()
1096 else if (adapter->flags & QLCNIC_MSI_ENABLED) in qlcnic_request_irq()
1103 adapter->irq = netdev->irq; in qlcnic_request_irq()
1105 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_request_irq()
1118 qlcnic_free_irq(struct qlcnic_adapter *adapter) in qlcnic_free_irq() argument
1123 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_free_irq()
1125 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_free_irq()
1132 __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev) in __qlcnic_up() argument
1137 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in __qlcnic_up()
1140 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in __qlcnic_up()
1142 if (qlcnic_set_eswitch_port_config(adapter)) in __qlcnic_up()
1145 if (qlcnic_fw_create_ctx(adapter)) in __qlcnic_up()
1148 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in __qlcnic_up()
1149 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in __qlcnic_up()
1150 qlcnic_post_rx_buffers(adapter, rds_ring); in __qlcnic_up()
1154 qlcnic_fw_cmd_set_mtu(adapter, netdev->mtu); in __qlcnic_up()
1156 adapter->ahw->linkup = 0; in __qlcnic_up()
1158 if (adapter->max_sds_rings > 1) in __qlcnic_up()
1159 qlcnic_config_rss(adapter, 1); in __qlcnic_up()
1161 qlcnic_config_intr_coalesce(adapter); in __qlcnic_up()
1164 qlcnic_config_hw_lro(adapter, QLCNIC_LRO_ENABLED); in __qlcnic_up()
1166 qlcnic_napi_enable(adapter); in __qlcnic_up()
1168 qlcnic_linkevent_request(adapter, 1); in __qlcnic_up()
1170 adapter->reset_context = 0; in __qlcnic_up()
1171 set_bit(__QLCNIC_DEV_UP, &adapter->state); in __qlcnic_up()
1178 qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev) in qlcnic_up() argument
1184 err = __qlcnic_up(adapter, netdev); in qlcnic_up()
1191 __qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev) in __qlcnic_down() argument
1193 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in __qlcnic_down()
1196 if (!test_and_clear_bit(__QLCNIC_DEV_UP, &adapter->state)) in __qlcnic_down()
1200 spin_lock(&adapter->tx_clean_lock); in __qlcnic_down()
1204 qlcnic_free_mac_list(adapter); in __qlcnic_down()
1206 if (adapter->fhash.fnum) in __qlcnic_down()
1207 qlcnic_delete_lb_filters(adapter); in __qlcnic_down()
1209 qlcnic_nic_set_promisc(adapter, QLCNIC_NIU_NON_PROMISC_MODE); in __qlcnic_down()
1211 qlcnic_napi_disable(adapter); in __qlcnic_down()
1213 qlcnic_fw_destroy_ctx(adapter); in __qlcnic_down()
1215 qlcnic_reset_rx_buffers_list(adapter); in __qlcnic_down()
1216 qlcnic_release_tx_buffers(adapter); in __qlcnic_down()
1217 spin_unlock(&adapter->tx_clean_lock); in __qlcnic_down()
1223 qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev) in qlcnic_down() argument
1227 __qlcnic_down(adapter, netdev); in qlcnic_down()
1233 qlcnic_attach(struct qlcnic_adapter *adapter) in qlcnic_attach() argument
1235 struct net_device *netdev = adapter->netdev; in qlcnic_attach()
1236 struct pci_dev *pdev = adapter->pdev; in qlcnic_attach()
1239 if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_attach()
1242 err = qlcnic_napi_add(adapter, netdev); in qlcnic_attach()
1246 err = qlcnic_alloc_sw_resources(adapter); in qlcnic_attach()
1252 err = qlcnic_alloc_hw_resources(adapter); in qlcnic_attach()
1258 err = qlcnic_request_irq(adapter); in qlcnic_attach()
1264 qlcnic_create_sysfs_entries(adapter); in qlcnic_attach()
1266 adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC; in qlcnic_attach()
1270 qlcnic_free_hw_resources(adapter); in qlcnic_attach()
1272 qlcnic_free_sw_resources(adapter); in qlcnic_attach()
1274 qlcnic_napi_del(adapter); in qlcnic_attach()
1279 qlcnic_detach(struct qlcnic_adapter *adapter) in qlcnic_detach() argument
1281 if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC) in qlcnic_detach()
1284 qlcnic_remove_sysfs_entries(adapter); in qlcnic_detach()
1286 qlcnic_free_hw_resources(adapter); in qlcnic_detach()
1287 qlcnic_release_rx_buffers(adapter); in qlcnic_detach()
1288 qlcnic_free_irq(adapter); in qlcnic_detach()
1289 qlcnic_napi_del(adapter); in qlcnic_detach()
1290 qlcnic_free_sw_resources(adapter); in qlcnic_detach()
1292 adapter->is_up = 0; in qlcnic_detach()
1297 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_diag_free_res() local
1301 clear_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_diag_free_res()
1302 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_diag_free_res()
1303 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_diag_free_res()
1304 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_diag_free_res()
1309 qlcnic_fw_destroy_ctx(adapter); in qlcnic_diag_free_res()
1311 qlcnic_detach(adapter); in qlcnic_diag_free_res()
1313 adapter->diag_test = 0; in qlcnic_diag_free_res()
1314 adapter->max_sds_rings = max_sds_rings; in qlcnic_diag_free_res()
1316 if (qlcnic_attach(adapter)) in qlcnic_diag_free_res()
1320 __qlcnic_up(adapter, netdev); in qlcnic_diag_free_res()
1325 static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter) in qlcnic_alloc_adapter_resources() argument
1328 adapter->ahw = kzalloc(sizeof(struct qlcnic_hardware_context), in qlcnic_alloc_adapter_resources()
1330 if (!adapter->ahw) { in qlcnic_alloc_adapter_resources()
1331 dev_err(&adapter->pdev->dev, in qlcnic_alloc_adapter_resources()
1332 "Failed to allocate recv ctx resources for adapter\n"); in qlcnic_alloc_adapter_resources()
1336 adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context), in qlcnic_alloc_adapter_resources()
1338 if (!adapter->recv_ctx) { in qlcnic_alloc_adapter_resources()
1339 dev_err(&adapter->pdev->dev, in qlcnic_alloc_adapter_resources()
1340 "Failed to allocate recv ctx resources for adapter\n"); in qlcnic_alloc_adapter_resources()
1341 kfree(adapter->ahw); in qlcnic_alloc_adapter_resources()
1342 adapter->ahw = NULL; in qlcnic_alloc_adapter_resources()
1347 adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT; in qlcnic_alloc_adapter_resources()
1348 adapter->ahw->coal.rx_time_us = QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US; in qlcnic_alloc_adapter_resources()
1349 adapter->ahw->coal.rx_packets = QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS; in qlcnic_alloc_adapter_resources()
1354 static void qlcnic_free_adapter_resources(struct qlcnic_adapter *adapter) in qlcnic_free_adapter_resources() argument
1356 kfree(adapter->recv_ctx); in qlcnic_free_adapter_resources()
1357 adapter->recv_ctx = NULL; in qlcnic_free_adapter_resources()
1359 if (adapter->ahw->fw_dump.tmpl_hdr) { in qlcnic_free_adapter_resources()
1360 vfree(adapter->ahw->fw_dump.tmpl_hdr); in qlcnic_free_adapter_resources()
1361 adapter->ahw->fw_dump.tmpl_hdr = NULL; in qlcnic_free_adapter_resources()
1363 kfree(adapter->ahw); in qlcnic_free_adapter_resources()
1364 adapter->ahw = NULL; in qlcnic_free_adapter_resources()
1369 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_diag_alloc_res() local
1378 __qlcnic_down(adapter, netdev); in qlcnic_diag_alloc_res()
1380 qlcnic_detach(adapter); in qlcnic_diag_alloc_res()
1382 adapter->max_sds_rings = 1; in qlcnic_diag_alloc_res()
1383 adapter->diag_test = test; in qlcnic_diag_alloc_res()
1385 ret = qlcnic_attach(adapter); in qlcnic_diag_alloc_res()
1391 ret = qlcnic_fw_create_ctx(adapter); in qlcnic_diag_alloc_res()
1393 qlcnic_detach(adapter); in qlcnic_diag_alloc_res()
1398 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_diag_alloc_res()
1399 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in qlcnic_diag_alloc_res()
1400 qlcnic_post_rx_buffers(adapter, rds_ring); in qlcnic_diag_alloc_res()
1403 if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_diag_alloc_res()
1404 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_diag_alloc_res()
1405 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_diag_alloc_res()
1410 if (adapter->diag_test == QLCNIC_LOOPBACK_TEST) { in qlcnic_diag_alloc_res()
1411 adapter->ahw->loopback_state = 0; in qlcnic_diag_alloc_res()
1412 qlcnic_linkevent_request(adapter, 1); in qlcnic_diag_alloc_res()
1415 set_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_diag_alloc_res()
1422 qlcnic_reset_hw_context(struct qlcnic_adapter *adapter) in qlcnic_reset_hw_context() argument
1424 struct net_device *netdev = adapter->netdev; in qlcnic_reset_hw_context()
1426 if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_reset_hw_context()
1431 qlcnic_down(adapter, netdev); in qlcnic_reset_hw_context()
1433 qlcnic_up(adapter, netdev); in qlcnic_reset_hw_context()
1437 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_reset_hw_context()
1442 qlcnic_reset_context(struct qlcnic_adapter *adapter) in qlcnic_reset_context() argument
1445 struct net_device *netdev = adapter->netdev; in qlcnic_reset_context()
1447 if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_reset_context()
1450 if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC) { in qlcnic_reset_context()
1455 __qlcnic_down(adapter, netdev); in qlcnic_reset_context()
1457 qlcnic_detach(adapter); in qlcnic_reset_context()
1460 err = qlcnic_attach(adapter); in qlcnic_reset_context()
1462 __qlcnic_up(adapter, netdev); in qlcnic_reset_context()
1468 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_reset_context()
1473 qlcnic_setup_netdev(struct qlcnic_adapter *adapter, in qlcnic_setup_netdev() argument
1477 struct pci_dev *pdev = adapter->pdev; in qlcnic_setup_netdev()
1479 adapter->mc_enabled = 0; in qlcnic_setup_netdev()
1480 adapter->max_mc_count = 38; in qlcnic_setup_netdev()
1492 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) in qlcnic_setup_netdev()
1499 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_FVLANTX) in qlcnic_setup_netdev()
1501 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO) in qlcnic_setup_netdev()
1507 netdev->irq = adapter->msix_entries[0].vector; in qlcnic_setup_netdev()
1535 qlcnic_alloc_msix_entries(struct qlcnic_adapter *adapter, u16 count) in qlcnic_alloc_msix_entries() argument
1537 adapter->msix_entries = kcalloc(count, sizeof(struct msix_entry), in qlcnic_alloc_msix_entries()
1540 if (adapter->msix_entries) in qlcnic_alloc_msix_entries()
1543 dev_err(&adapter->pdev->dev, "failed allocating msix_entries\n"); in qlcnic_alloc_msix_entries()
1551 struct qlcnic_adapter *adapter = NULL; in qlcnic_probe() local
1586 adapter = netdev_priv(netdev); in qlcnic_probe()
1587 adapter->netdev = netdev; in qlcnic_probe()
1588 adapter->pdev = pdev; in qlcnic_probe()
1590 if (qlcnic_alloc_adapter_resources(adapter)) in qlcnic_probe()
1593 adapter->dev_rst_time = jiffies; in qlcnic_probe()
1595 adapter->ahw->revision_id = revision_id; in qlcnic_probe()
1596 adapter->mac_learn = qlcnic_mac_learn; in qlcnic_probe()
1598 rwlock_init(&adapter->ahw->crb_lock); in qlcnic_probe()
1599 mutex_init(&adapter->ahw->mem_lock); in qlcnic_probe()
1601 spin_lock_init(&adapter->tx_clean_lock); in qlcnic_probe()
1602 INIT_LIST_HEAD(&adapter->mac_list); in qlcnic_probe()
1604 err = qlcnic_setup_pci_map(adapter); in qlcnic_probe()
1609 adapter->portnum = adapter->ahw->pci_func; in qlcnic_probe()
1611 err = qlcnic_get_board_info(adapter); in qlcnic_probe()
1617 err = qlcnic_setup_idc_param(adapter); in qlcnic_probe()
1621 adapter->flags |= QLCNIC_NEED_FLR; in qlcnic_probe()
1623 err = adapter->nic_ops->start_firmware(adapter); in qlcnic_probe()
1629 if (qlcnic_read_mac_addr(adapter)) in qlcnic_probe()
1632 if (adapter->portnum == 0) { in qlcnic_probe()
1633 get_brd_name(adapter, brd_name); in qlcnic_probe()
1637 brd_name, adapter->ahw->revision_id); in qlcnic_probe()
1640 qlcnic_clear_stats(adapter); in qlcnic_probe()
1642 err = qlcnic_alloc_msix_entries(adapter, adapter->max_rx_ques); in qlcnic_probe()
1646 qlcnic_setup_intr(adapter); in qlcnic_probe()
1648 err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac); in qlcnic_probe()
1652 pci_set_drvdata(pdev, adapter); in qlcnic_probe()
1654 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY); in qlcnic_probe()
1656 switch (adapter->ahw->port_type) { in qlcnic_probe()
1658 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", in qlcnic_probe()
1659 adapter->netdev->name); in qlcnic_probe()
1662 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n", in qlcnic_probe()
1663 adapter->netdev->name); in qlcnic_probe()
1667 if (adapter->mac_learn) in qlcnic_probe()
1668 qlcnic_alloc_lb_filters_mem(adapter); in qlcnic_probe()
1670 qlcnic_create_diag_entries(adapter); in qlcnic_probe()
1675 qlcnic_teardown_intr(adapter); in qlcnic_probe()
1676 kfree(adapter->msix_entries); in qlcnic_probe()
1679 qlcnic_clr_all_drv_state(adapter, 0); in qlcnic_probe()
1682 qlcnic_cleanup_pci_map(adapter); in qlcnic_probe()
1685 qlcnic_free_adapter_resources(adapter); in qlcnic_probe()
1701 struct qlcnic_adapter *adapter; in qlcnic_remove() local
1704 adapter = pci_get_drvdata(pdev); in qlcnic_remove()
1705 if (adapter == NULL) in qlcnic_remove()
1708 netdev = adapter->netdev; in qlcnic_remove()
1710 qlcnic_cancel_fw_work(adapter); in qlcnic_remove()
1714 qlcnic_detach(adapter); in qlcnic_remove()
1716 if (adapter->npars != NULL) in qlcnic_remove()
1717 kfree(adapter->npars); in qlcnic_remove()
1718 if (adapter->eswitch != NULL) in qlcnic_remove()
1719 kfree(adapter->eswitch); in qlcnic_remove()
1721 qlcnic_clr_all_drv_state(adapter, 0); in qlcnic_remove()
1723 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_remove()
1725 qlcnic_free_lb_filters_mem(adapter); in qlcnic_remove()
1727 qlcnic_teardown_intr(adapter); in qlcnic_remove()
1728 kfree(adapter->msix_entries); in qlcnic_remove()
1730 qlcnic_remove_diag_entries(adapter); in qlcnic_remove()
1732 qlcnic_cleanup_pci_map(adapter); in qlcnic_remove()
1734 qlcnic_release_firmware(adapter); in qlcnic_remove()
1741 qlcnic_free_adapter_resources(adapter); in qlcnic_remove()
1746 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in __qlcnic_shutdown() local
1747 struct net_device *netdev = adapter->netdev; in __qlcnic_shutdown()
1752 qlcnic_cancel_fw_work(adapter); in __qlcnic_shutdown()
1755 qlcnic_down(adapter, netdev); in __qlcnic_shutdown()
1757 qlcnic_clr_all_drv_state(adapter, 0); in __qlcnic_shutdown()
1759 clear_bit(__QLCNIC_RESETTING, &adapter->state); in __qlcnic_shutdown()
1765 if (qlcnic_wol_supported(adapter)) { in __qlcnic_shutdown()
1798 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_resume() local
1799 struct net_device *netdev = adapter->netdev; in qlcnic_resume()
1810 err = adapter->nic_ops->start_firmware(adapter); in qlcnic_resume()
1817 err = qlcnic_up(adapter, netdev); in qlcnic_resume()
1825 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY); in qlcnic_resume()
1832 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_open() local
1837 err = qlcnic_attach(adapter); in qlcnic_open()
1841 err = __qlcnic_up(adapter, netdev); in qlcnic_open()
1850 qlcnic_detach(adapter); in qlcnic_open()
1859 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_close() local
1861 __qlcnic_down(adapter, netdev); in qlcnic_close()
1865 void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter) in qlcnic_alloc_lb_filters_mem() argument
1870 if (adapter->fhash.fmax && adapter->fhash.fhead) in qlcnic_alloc_lb_filters_mem()
1873 spin_lock_init(&adapter->mac_learn_lock); in qlcnic_alloc_lb_filters_mem()
1880 adapter->fhash.fmax = QLCNIC_LB_MAX_FILTERS; in qlcnic_alloc_lb_filters_mem()
1881 adapter->fhash.fhead = head; in qlcnic_alloc_lb_filters_mem()
1883 for (i = 0; i < adapter->fhash.fmax; i++) in qlcnic_alloc_lb_filters_mem()
1884 INIT_HLIST_HEAD(&adapter->fhash.fhead[i]); in qlcnic_alloc_lb_filters_mem()
1887 static void qlcnic_free_lb_filters_mem(struct qlcnic_adapter *adapter) in qlcnic_free_lb_filters_mem() argument
1889 if (adapter->fhash.fmax && adapter->fhash.fhead) in qlcnic_free_lb_filters_mem()
1890 kfree(adapter->fhash.fhead); in qlcnic_free_lb_filters_mem()
1892 adapter->fhash.fhead = NULL; in qlcnic_free_lb_filters_mem()
1893 adapter->fhash.fmax = 0; in qlcnic_free_lb_filters_mem()
1896 static void qlcnic_change_filter(struct qlcnic_adapter *adapter, in qlcnic_change_filter() argument
1913 word = QLCNIC_MAC_EVENT | ((u64)(adapter->portnum) << 16); in qlcnic_change_filter()
1931 qlcnic_send_filter(struct qlcnic_adapter *adapter, in qlcnic_send_filter() argument
1944 if (!compare_ether_addr(phdr->h_source, adapter->mac_addr)) in qlcnic_send_filter()
1947 if (adapter->fhash.fnum >= adapter->fhash.fmax) in qlcnic_send_filter()
1951 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) in qlcnic_send_filter()
1955 head = &(adapter->fhash.fhead[hindex]); in qlcnic_send_filter()
1963 qlcnic_change_filter(adapter, src_addr, vlan_id, in qlcnic_send_filter()
1974 qlcnic_change_filter(adapter, src_addr, vlan_id, tx_ring); in qlcnic_send_filter()
1979 spin_lock(&adapter->mac_learn_lock); in qlcnic_send_filter()
1981 adapter->fhash.fnum++; in qlcnic_send_filter()
1982 spin_unlock(&adapter->mac_learn_lock); in qlcnic_send_filter()
1986 qlcnic_tx_pkt(struct qlcnic_adapter *adapter, in qlcnic_tx_pkt() argument
1995 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; in qlcnic_tx_pkt()
2007 if (unlikely(adapter->pvid)) { in qlcnic_tx_pkt()
2008 if (vlan_tci && !(adapter->flags & QLCNIC_TAGGING_ENABLED)) in qlcnic_tx_pkt()
2010 if (vlan_tci && (adapter->flags & QLCNIC_TAGGING_ENABLED)) in qlcnic_tx_pkt()
2014 vlan_tci = adapter->pvid; in qlcnic_tx_pkt()
2025 if ((adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) && in qlcnic_tx_pkt()
2088 adapter->stats.lso_frames++; in qlcnic_tx_pkt()
2193 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_xmit_frame() local
2194 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; in qlcnic_xmit_frame()
2207 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_xmit_frame()
2212 if (adapter->flags & QLCNIC_MACSPOOF) { in qlcnic_xmit_frame()
2215 adapter->mac_addr)) in qlcnic_xmit_frame()
2239 adapter->stats.xmit_off++; in qlcnic_xmit_frame()
2247 pdev = adapter->pdev; in qlcnic_xmit_frame()
2253 adapter->stats.tx_dma_map_error++; in qlcnic_xmit_frame()
2261 qlcnic_set_tx_port(first_desc, adapter->portnum); in qlcnic_xmit_frame()
2297 if (unlikely(qlcnic_tx_pkt(adapter, first_desc, skb))) in qlcnic_xmit_frame()
2300 if (adapter->mac_learn) in qlcnic_xmit_frame()
2301 qlcnic_send_filter(adapter, tx_ring, first_desc, skb); in qlcnic_xmit_frame()
2303 adapter->stats.txbytes += skb->len; in qlcnic_xmit_frame()
2304 adapter->stats.xmitcalled++; in qlcnic_xmit_frame()
2306 qlcnic_update_cmd_producer(adapter, tx_ring); in qlcnic_xmit_frame()
2313 adapter->stats.txdropped++; in qlcnic_xmit_frame()
2318 static int qlcnic_check_temp(struct qlcnic_adapter *adapter) in qlcnic_check_temp() argument
2320 struct net_device *netdev = adapter->netdev; in qlcnic_check_temp()
2324 temp = QLCRD32(adapter, CRB_TEMP_STATE); in qlcnic_check_temp()
2336 if (adapter->temp == QLCNIC_TEMP_NORMAL) { in qlcnic_check_temp()
2344 if (adapter->temp == QLCNIC_TEMP_WARN) { in qlcnic_check_temp()
2350 adapter->temp = temp_state; in qlcnic_check_temp()
2354 void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup) in qlcnic_advert_link_change() argument
2356 struct net_device *netdev = adapter->netdev; in qlcnic_advert_link_change()
2358 if (adapter->ahw->linkup && !linkup) { in qlcnic_advert_link_change()
2360 adapter->ahw->linkup = 0; in qlcnic_advert_link_change()
2365 } else if (!adapter->ahw->linkup && linkup) { in qlcnic_advert_link_change()
2367 adapter->ahw->linkup = 1; in qlcnic_advert_link_change()
2377 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_tx_timeout() local
2379 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_tx_timeout()
2384 if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS) in qlcnic_tx_timeout()
2385 adapter->need_fw_reset = 1; in qlcnic_tx_timeout()
2387 adapter->reset_context = 1; in qlcnic_tx_timeout()
2392 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_get_stats() local
2395 stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; in qlcnic_get_stats()
2396 stats->tx_packets = adapter->stats.xmitfinished; in qlcnic_get_stats()
2397 stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes; in qlcnic_get_stats()
2398 stats->tx_bytes = adapter->stats.txbytes; in qlcnic_get_stats()
2399 stats->rx_dropped = adapter->stats.rxdropped; in qlcnic_get_stats()
2400 stats->tx_dropped = adapter->stats.txdropped; in qlcnic_get_stats()
2405 static irqreturn_t qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter) in qlcnic_clear_legacy_intr() argument
2409 status = readl(adapter->isr_int_vec); in qlcnic_clear_legacy_intr()
2411 if (!(status & adapter->int_vec_bit)) in qlcnic_clear_legacy_intr()
2415 status = readl(adapter->crb_int_state_reg); in qlcnic_clear_legacy_intr()
2419 writel(0xffffffff, adapter->tgt_status_reg); in qlcnic_clear_legacy_intr()
2421 readl(adapter->isr_int_vec); in qlcnic_clear_legacy_intr()
2422 readl(adapter->isr_int_vec); in qlcnic_clear_legacy_intr()
2430 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_tmp_intr() local
2432 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_tmp_intr()
2434 else if (adapter->flags & QLCNIC_MSI_ENABLED) { in qlcnic_tmp_intr()
2435 writel(0xffffffff, adapter->tgt_status_reg); in qlcnic_tmp_intr()
2439 if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_tmp_intr()
2443 adapter->diag_cnt++; in qlcnic_tmp_intr()
2451 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_intr() local
2453 if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_intr()
2464 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_msi_intr() local
2467 writel(0xffffffff, adapter->tgt_status_reg); in qlcnic_msi_intr()
2481 static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter) in qlcnic_process_cmd_ring() argument
2486 struct pci_dev *pdev = adapter->pdev; in qlcnic_process_cmd_ring()
2487 struct net_device *netdev = adapter->netdev; in qlcnic_process_cmd_ring()
2490 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring; in qlcnic_process_cmd_ring()
2492 if (!spin_trylock(&adapter->tx_clean_lock)) in qlcnic_process_cmd_ring()
2512 adapter->stats.xmitfinished++; in qlcnic_process_cmd_ring()
2530 adapter->stats.xmit_on++; in qlcnic_process_cmd_ring()
2533 adapter->tx_timeo_cnt = 0; in qlcnic_process_cmd_ring()
2550 spin_unlock(&adapter->tx_clean_lock); in qlcnic_process_cmd_ring()
2560 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_poll() local
2565 tx_complete = qlcnic_process_cmd_ring(adapter); in qlcnic_poll()
2571 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_poll()
2583 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_rx_poll() local
2590 if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_rx_poll()
2602 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_poll_controller() local
2603 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_poll_controller()
2605 disable_irq(adapter->irq); in qlcnic_poll_controller()
2606 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in qlcnic_poll_controller()
2608 qlcnic_intr(adapter->irq, sds_ring); in qlcnic_poll_controller()
2610 enable_irq(adapter->irq); in qlcnic_poll_controller()
2615 qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) in qlcnic_idc_debug_info() argument
2619 val = adapter->portnum & 0xf; in qlcnic_idc_debug_info()
2621 val |= (jiffies - adapter->dev_rst_time) << 8; in qlcnic_idc_debug_info()
2623 QLCWR32(adapter, QLCNIC_CRB_DRV_SCRATCH, val); in qlcnic_idc_debug_info()
2624 adapter->dev_rst_time = jiffies; in qlcnic_idc_debug_info()
2628 qlcnic_set_drv_state(struct qlcnic_adapter *adapter, u8 state) in qlcnic_set_drv_state() argument
2635 if (qlcnic_api_lock(adapter)) in qlcnic_set_drv_state()
2638 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_set_drv_state()
2641 QLC_DEV_SET_RST_RDY(val, adapter->portnum); in qlcnic_set_drv_state()
2643 QLC_DEV_SET_QSCNT_RDY(val, adapter->portnum); in qlcnic_set_drv_state()
2645 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_set_drv_state()
2647 qlcnic_api_unlock(adapter); in qlcnic_set_drv_state()
2653 qlcnic_clr_drv_state(struct qlcnic_adapter *adapter) in qlcnic_clr_drv_state() argument
2657 if (qlcnic_api_lock(adapter)) in qlcnic_clr_drv_state()
2660 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_clr_drv_state()
2661 QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); in qlcnic_clr_drv_state()
2662 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_clr_drv_state()
2664 qlcnic_api_unlock(adapter); in qlcnic_clr_drv_state()
2670 qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter, u8 failed) in qlcnic_clr_all_drv_state() argument
2674 if (qlcnic_api_lock(adapter)) in qlcnic_clr_all_drv_state()
2677 val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); in qlcnic_clr_all_drv_state()
2678 QLC_DEV_CLR_REF_CNT(val, adapter->portnum); in qlcnic_clr_all_drv_state()
2679 QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); in qlcnic_clr_all_drv_state()
2682 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED); in qlcnic_clr_all_drv_state()
2683 dev_info(&adapter->pdev->dev, in qlcnic_clr_all_drv_state()
2686 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_COLD); in qlcnic_clr_all_drv_state()
2688 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_clr_all_drv_state()
2689 QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum); in qlcnic_clr_all_drv_state()
2690 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_clr_all_drv_state()
2692 qlcnic_api_unlock(adapter); in qlcnic_clr_all_drv_state()
2694 adapter->fw_fail_cnt = 0; in qlcnic_clr_all_drv_state()
2695 adapter->flags &= ~QLCNIC_FW_HANG; in qlcnic_clr_all_drv_state()
2696 clear_bit(__QLCNIC_START_FW, &adapter->state); in qlcnic_clr_all_drv_state()
2697 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_clr_all_drv_state()
2702 qlcnic_check_drv_state(struct qlcnic_adapter *adapter) in qlcnic_check_drv_state() argument
2706 state = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_check_drv_state()
2707 act = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); in qlcnic_check_drv_state()
2709 if (adapter->flags & QLCNIC_FW_RESET_OWNER) { in qlcnic_check_drv_state()
2710 active_mask = (~(1 << (adapter->ahw->pci_func * 4))); in qlcnic_check_drv_state()
2721 static int qlcnic_check_idc_ver(struct qlcnic_adapter *adapter) in qlcnic_check_idc_ver() argument
2723 u32 val = QLCRD32(adapter, QLCNIC_CRB_DRV_IDC_VER); in qlcnic_check_idc_ver()
2726 dev_warn(&adapter->pdev->dev, "IDC Version mismatch, driver's" in qlcnic_check_idc_ver()
2734 qlcnic_can_start_firmware(struct qlcnic_adapter *adapter) in qlcnic_can_start_firmware() argument
2737 u8 dev_init_timeo = adapter->dev_init_timeo; in qlcnic_can_start_firmware()
2738 u8 portnum = adapter->portnum; in qlcnic_can_start_firmware()
2741 if (test_and_clear_bit(__QLCNIC_START_FW, &adapter->state)) in qlcnic_can_start_firmware()
2744 if (qlcnic_api_lock(adapter)) in qlcnic_can_start_firmware()
2747 val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE); in qlcnic_can_start_firmware()
2750 QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val); in qlcnic_can_start_firmware()
2753 prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_can_start_firmware()
2754 QLCDB(adapter, HW, "Device state = %u\n", prev_state); in qlcnic_can_start_firmware()
2758 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING); in qlcnic_can_start_firmware()
2759 QLCWR32(adapter, QLCNIC_CRB_DRV_IDC_VER, QLCNIC_DRV_IDC_VER); in qlcnic_can_start_firmware()
2760 qlcnic_idc_debug_info(adapter, 0); in qlcnic_can_start_firmware()
2761 qlcnic_api_unlock(adapter); in qlcnic_can_start_firmware()
2765 ret = qlcnic_check_idc_ver(adapter); in qlcnic_can_start_firmware()
2766 qlcnic_api_unlock(adapter); in qlcnic_can_start_firmware()
2770 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_can_start_firmware()
2772 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_can_start_firmware()
2776 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_can_start_firmware()
2778 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_can_start_firmware()
2782 dev_err(&adapter->pdev->dev, "Device in failed state.\n"); in qlcnic_can_start_firmware()
2783 qlcnic_api_unlock(adapter); in qlcnic_can_start_firmware()
2791 qlcnic_api_unlock(adapter); in qlcnic_can_start_firmware()
2795 prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_can_start_firmware()
2802 dev_err(&adapter->pdev->dev, in qlcnic_can_start_firmware()
2807 if (qlcnic_api_lock(adapter)) in qlcnic_can_start_firmware()
2810 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_can_start_firmware()
2812 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_can_start_firmware()
2814 ret = qlcnic_check_idc_ver(adapter); in qlcnic_can_start_firmware()
2815 qlcnic_api_unlock(adapter); in qlcnic_can_start_firmware()
2823 struct qlcnic_adapter *adapter = container_of(work, in qlcnic_fwinit_work() local
2828 if (qlcnic_api_lock(adapter)) in qlcnic_fwinit_work()
2831 dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_fwinit_work()
2834 qlcnic_api_unlock(adapter); in qlcnic_fwinit_work()
2835 qlcnic_schedule_work(adapter, qlcnic_fwinit_work, in qlcnic_fwinit_work()
2840 if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { in qlcnic_fwinit_work()
2841 qlcnic_api_unlock(adapter); in qlcnic_fwinit_work()
2847 dev_info(&adapter->pdev->dev, "Detected state change from " in qlcnic_fwinit_work()
2852 if (adapter->fw_wait_cnt++ > adapter->reset_ack_timeo) { in qlcnic_fwinit_work()
2853 dev_info(&adapter->pdev->dev, "Reset:Failed to get ack %d sec\n", in qlcnic_fwinit_work()
2854 adapter->reset_ack_timeo); in qlcnic_fwinit_work()
2858 if (!qlcnic_check_drv_state(adapter)) { in qlcnic_fwinit_work()
2860 dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_fwinit_work()
2863 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, in qlcnic_fwinit_work()
2865 set_bit(__QLCNIC_START_FW, &adapter->state); in qlcnic_fwinit_work()
2866 QLCDB(adapter, DRV, "Restarting fw\n"); in qlcnic_fwinit_work()
2867 qlcnic_idc_debug_info(adapter, 0); in qlcnic_fwinit_work()
2868 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE); in qlcnic_fwinit_work()
2869 QLC_DEV_SET_RST_RDY(val, adapter->portnum); in qlcnic_fwinit_work()
2870 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val); in qlcnic_fwinit_work()
2873 qlcnic_api_unlock(adapter); in qlcnic_fwinit_work()
2876 if (adapter->ahw->fw_dump.enable && in qlcnic_fwinit_work()
2877 (adapter->flags & QLCNIC_FW_RESET_OWNER)) { in qlcnic_fwinit_work()
2878 QLCDB(adapter, DRV, "Take FW dump\n"); in qlcnic_fwinit_work()
2879 qlcnic_dump_fw(adapter); in qlcnic_fwinit_work()
2880 adapter->flags |= QLCNIC_FW_HANG; in qlcnic_fwinit_work()
2884 adapter->flags &= ~QLCNIC_FW_RESET_OWNER; in qlcnic_fwinit_work()
2885 if (!adapter->nic_ops->start_firmware(adapter)) { in qlcnic_fwinit_work()
2886 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0); in qlcnic_fwinit_work()
2887 adapter->fw_wait_cnt = 0; in qlcnic_fwinit_work()
2893 qlcnic_api_unlock(adapter); in qlcnic_fwinit_work()
2896 dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_fwinit_work()
2897 QLCDB(adapter, HW, "Func waiting: Device state=%u\n", dev_state); in qlcnic_fwinit_work()
2901 if (!adapter->nic_ops->start_firmware(adapter)) { in qlcnic_fwinit_work()
2902 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0); in qlcnic_fwinit_work()
2903 adapter->fw_wait_cnt = 0; in qlcnic_fwinit_work()
2909 qlcnic_schedule_work(adapter, in qlcnic_fwinit_work()
2915 dev_err(&adapter->pdev->dev, "Fwinit work failed state=%u " in qlcnic_fwinit_work()
2916 "fw_wait_cnt=%u\n", dev_state, adapter->fw_wait_cnt); in qlcnic_fwinit_work()
2917 netif_device_attach(adapter->netdev); in qlcnic_fwinit_work()
2918 qlcnic_clr_all_drv_state(adapter, 0); in qlcnic_fwinit_work()
2924 struct qlcnic_adapter *adapter = container_of(work, in qlcnic_detach_work() local
2926 struct net_device *netdev = adapter->netdev; in qlcnic_detach_work()
2932 if (adapter->dev_state == QLCNIC_DEV_NEED_QUISCENT) { in qlcnic_detach_work()
2934 __qlcnic_down(adapter, netdev); in qlcnic_detach_work()
2936 qlcnic_down(adapter, netdev); in qlcnic_detach_work()
2938 status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1); in qlcnic_detach_work()
2941 dev_err(&adapter->pdev->dev, in qlcnic_detach_work()
2946 dev_err(&adapter->pdev->dev, in qlcnic_detach_work()
2949 dev_err(&adapter->pdev->dev, in qlcnic_detach_work()
2950 "Replace the adapter.\n"); in qlcnic_detach_work()
2956 if (adapter->temp == QLCNIC_TEMP_PANIC) { in qlcnic_detach_work()
2957 dev_err(&adapter->pdev->dev, "Detaching the device: temp=%d\n", in qlcnic_detach_work()
2958 adapter->temp); in qlcnic_detach_work()
2963 if (!(adapter->flags & QLCNIC_FW_RESET_OWNER)) { in qlcnic_detach_work()
2964 if (qlcnic_set_drv_state(adapter, adapter->dev_state)) { in qlcnic_detach_work()
2965 dev_err(&adapter->pdev->dev, in qlcnic_detach_work()
2972 adapter->fw_wait_cnt = 0; in qlcnic_detach_work()
2974 qlcnic_schedule_work(adapter, qlcnic_fwinit_work, FW_POLL_DELAY); in qlcnic_detach_work()
2980 qlcnic_clr_all_drv_state(adapter, 1); in qlcnic_detach_work()
2985 qlcnic_set_npar_non_operational(struct qlcnic_adapter *adapter) in qlcnic_set_npar_non_operational() argument
2989 state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); in qlcnic_set_npar_non_operational()
2993 if (qlcnic_api_lock(adapter)) in qlcnic_set_npar_non_operational()
2995 QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_NON_OPER); in qlcnic_set_npar_non_operational()
2996 qlcnic_api_unlock(adapter); in qlcnic_set_npar_non_operational()
3001 qlcnic_dev_request_reset(struct qlcnic_adapter *adapter) in qlcnic_dev_request_reset() argument
3005 adapter->need_fw_reset = 1; in qlcnic_dev_request_reset()
3006 if (qlcnic_api_lock(adapter)) in qlcnic_dev_request_reset()
3009 state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_dev_request_reset()
3012 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_NEED_RESET); in qlcnic_dev_request_reset()
3013 adapter->flags |= QLCNIC_FW_RESET_OWNER; in qlcnic_dev_request_reset()
3014 QLCDB(adapter, DRV, "NEED_RESET state set\n"); in qlcnic_dev_request_reset()
3015 qlcnic_idc_debug_info(adapter, 0); in qlcnic_dev_request_reset()
3018 QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_NON_OPER); in qlcnic_dev_request_reset()
3019 qlcnic_api_unlock(adapter); in qlcnic_dev_request_reset()
3024 qlcnic_dev_set_npar_ready(struct qlcnic_adapter *adapter) in qlcnic_dev_set_npar_ready() argument
3026 if (qlcnic_api_lock(adapter)) in qlcnic_dev_set_npar_ready()
3029 QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_OPER); in qlcnic_dev_set_npar_ready()
3030 QLCDB(adapter, DRV, "NPAR operational state set\n"); in qlcnic_dev_set_npar_ready()
3032 qlcnic_api_unlock(adapter); in qlcnic_dev_set_npar_ready()
3036 qlcnic_schedule_work(struct qlcnic_adapter *adapter, in qlcnic_schedule_work() argument
3039 if (test_bit(__QLCNIC_AER, &adapter->state)) in qlcnic_schedule_work()
3042 INIT_DELAYED_WORK(&adapter->fw_work, func); in qlcnic_schedule_work()
3043 queue_delayed_work(qlcnic_wq, &adapter->fw_work, in qlcnic_schedule_work()
3048 qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter) in qlcnic_cancel_fw_work() argument
3050 while (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_cancel_fw_work()
3053 cancel_delayed_work_sync(&adapter->fw_work); in qlcnic_cancel_fw_work()
3059 struct qlcnic_adapter *adapter = container_of(work, in qlcnic_attach_work() local
3061 struct net_device *netdev = adapter->netdev; in qlcnic_attach_work()
3064 if (adapter->op_mode != QLCNIC_MGMT_FUNC) { in qlcnic_attach_work()
3065 npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE); in qlcnic_attach_work()
3066 if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO) in qlcnic_attach_work()
3067 qlcnic_clr_all_drv_state(adapter, 0); in qlcnic_attach_work()
3069 qlcnic_schedule_work(adapter, qlcnic_attach_work, in qlcnic_attach_work()
3073 QLCDB(adapter, DRV, "Waiting for NPAR state to operational\n"); in qlcnic_attach_work()
3078 if (qlcnic_up(adapter, netdev)) in qlcnic_attach_work()
3086 adapter->fw_fail_cnt = 0; in qlcnic_attach_work()
3087 adapter->flags &= ~QLCNIC_FW_HANG; in qlcnic_attach_work()
3088 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_attach_work()
3090 if (!qlcnic_clr_drv_state(adapter)) in qlcnic_attach_work()
3091 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, in qlcnic_attach_work()
3096 qlcnic_check_health(struct qlcnic_adapter *adapter) in qlcnic_check_health() argument
3101 if (qlcnic_check_temp(adapter)) in qlcnic_check_health()
3104 if (adapter->need_fw_reset) in qlcnic_check_health()
3105 qlcnic_dev_request_reset(adapter); in qlcnic_check_health()
3107 state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE); in qlcnic_check_health()
3109 qlcnic_set_npar_non_operational(adapter); in qlcnic_check_health()
3110 adapter->need_fw_reset = 1; in qlcnic_check_health()
3114 heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER); in qlcnic_check_health()
3115 if (heartbeat != adapter->heartbeat) { in qlcnic_check_health()
3116 adapter->heartbeat = heartbeat; in qlcnic_check_health()
3117 adapter->fw_fail_cnt = 0; in qlcnic_check_health()
3118 if (adapter->need_fw_reset) in qlcnic_check_health()
3121 if (adapter->reset_context && auto_fw_reset) { in qlcnic_check_health()
3122 qlcnic_reset_hw_context(adapter); in qlcnic_check_health()
3123 adapter->netdev->trans_start = jiffies; in qlcnic_check_health()
3129 if (++adapter->fw_fail_cnt < FW_FAIL_THRESH) in qlcnic_check_health()
3132 adapter->flags |= QLCNIC_FW_HANG; in qlcnic_check_health()
3134 qlcnic_dev_request_reset(adapter); in qlcnic_check_health()
3137 clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state); in qlcnic_check_health()
3139 dev_err(&adapter->pdev->dev, "firmware hang detected\n"); in qlcnic_check_health()
3140 dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" in qlcnic_check_health()
3145 QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1), in qlcnic_check_health()
3146 QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS2), in qlcnic_check_health()
3147 QLCRD32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x3c), in qlcnic_check_health()
3148 QLCRD32(adapter, QLCNIC_CRB_PEG_NET_1 + 0x3c), in qlcnic_check_health()
3149 QLCRD32(adapter, QLCNIC_CRB_PEG_NET_2 + 0x3c), in qlcnic_check_health()
3150 QLCRD32(adapter, QLCNIC_CRB_PEG_NET_3 + 0x3c), in qlcnic_check_health()
3151 QLCRD32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x3c)); in qlcnic_check_health()
3152 peg_status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1); in qlcnic_check_health()
3154 dev_err(&adapter->pdev->dev, in qlcnic_check_health()
3158 adapter->dev_state = (state == QLCNIC_DEV_NEED_QUISCENT) ? state : in qlcnic_check_health()
3162 !test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_check_health()
3164 qlcnic_schedule_work(adapter, qlcnic_detach_work, 0); in qlcnic_check_health()
3165 QLCDB(adapter, DRV, "fw recovery scheduled.\n"); in qlcnic_check_health()
3174 struct qlcnic_adapter *adapter = container_of(work, in qlcnic_fw_poll_work() local
3177 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_fw_poll_work()
3181 if (qlcnic_check_health(adapter)) in qlcnic_fw_poll_work()
3184 if (adapter->fhash.fnum) in qlcnic_fw_poll_work()
3185 qlcnic_prune_lb_filters(adapter); in qlcnic_fw_poll_work()
3188 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY); in qlcnic_fw_poll_work()
3215 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_attach_func() local
3216 struct net_device *netdev = adapter->netdev; in qlcnic_attach_func()
3230 if (qlcnic_api_lock(adapter)) in qlcnic_attach_func()
3233 if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) { in qlcnic_attach_func()
3234 adapter->need_fw_reset = 1; in qlcnic_attach_func()
3235 set_bit(__QLCNIC_START_FW, &adapter->state); in qlcnic_attach_func()
3236 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING); in qlcnic_attach_func()
3237 QLCDB(adapter, DRV, "Restarting fw\n"); in qlcnic_attach_func()
3239 qlcnic_api_unlock(adapter); in qlcnic_attach_func()
3241 err = adapter->nic_ops->start_firmware(adapter); in qlcnic_attach_func()
3245 qlcnic_clr_drv_state(adapter); in qlcnic_attach_func()
3246 qlcnic_setup_intr(adapter); in qlcnic_attach_func()
3249 err = qlcnic_attach(adapter); in qlcnic_attach_func()
3251 qlcnic_clr_all_drv_state(adapter, 1); in qlcnic_attach_func()
3252 clear_bit(__QLCNIC_AER, &adapter->state); in qlcnic_attach_func()
3257 err = qlcnic_up(adapter, netdev); in qlcnic_attach_func()
3271 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_io_error_detected() local
3272 struct net_device *netdev = adapter->netdev; in qlcnic_io_error_detected()
3280 set_bit(__QLCNIC_AER, &adapter->state); in qlcnic_io_error_detected()
3283 cancel_delayed_work_sync(&adapter->fw_work); in qlcnic_io_error_detected()
3286 qlcnic_down(adapter, netdev); in qlcnic_io_error_detected()
3288 qlcnic_detach(adapter); in qlcnic_io_error_detected()
3289 qlcnic_teardown_intr(adapter); in qlcnic_io_error_detected()
3291 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_io_error_detected()
3307 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_io_resume() local
3311 if (QLCRD32(adapter, QLCNIC_CRB_DEV_STATE) == QLCNIC_DEV_READY && in qlcnic_io_resume()
3312 test_and_clear_bit(__QLCNIC_AER, &adapter->state)) in qlcnic_io_resume()
3313 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, in qlcnic_io_resume()
3318 qlcnicvf_start_firmware(struct qlcnic_adapter *adapter) in qlcnicvf_start_firmware() argument
3322 err = qlcnic_can_start_firmware(adapter); in qlcnicvf_start_firmware()
3326 err = qlcnic_check_npar_opertional(adapter); in qlcnicvf_start_firmware()
3330 err = qlcnic_initialize_nic(adapter); in qlcnicvf_start_firmware()
3334 qlcnic_check_options(adapter); in qlcnicvf_start_firmware()
3336 err = qlcnic_set_eswitch_port_config(adapter); in qlcnicvf_start_firmware()
3340 adapter->need_fw_reset = 0; in qlcnicvf_start_firmware()
3346 qlcnicvf_config_bridged_mode(struct qlcnic_adapter *adapter, u32 enable) in qlcnicvf_config_bridged_mode() argument
3352 qlcnicvf_config_led(struct qlcnic_adapter *adapter, u32 state, u32 rate) in qlcnicvf_config_led() argument
3361 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_store_bridged_mode() local
3365 if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)) in qlcnic_store_bridged_mode()
3368 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_store_bridged_mode()
3374 if (!adapter->nic_ops->config_bridged_mode(adapter, !!new)) in qlcnic_store_bridged_mode()
3385 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_show_bridged_mode() local
3388 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) in qlcnic_show_bridged_mode()
3389 bridged_mode = !!(adapter->flags & QLCNIC_BRIDGE_ENABLED); in qlcnic_show_bridged_mode()
3404 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_store_diag_mode() local
3410 if (!!new != !!(adapter->flags & QLCNIC_DIAG_ENABLED)) in qlcnic_store_diag_mode()
3411 adapter->flags ^= QLCNIC_DIAG_ENABLED; in qlcnic_store_diag_mode()
3420 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_show_diag_mode() local
3423 !!(adapter->flags & QLCNIC_DIAG_ENABLED)); in qlcnic_show_diag_mode()
3448 int qlcnic_set_max_rss(struct qlcnic_adapter *adapter, u8 data) in qlcnic_set_max_rss() argument
3450 struct net_device *netdev = adapter->netdev; in qlcnic_set_max_rss()
3453 if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_set_max_rss()
3458 __qlcnic_down(adapter, netdev); in qlcnic_set_max_rss()
3459 qlcnic_detach(adapter); in qlcnic_set_max_rss()
3460 qlcnic_teardown_intr(adapter); in qlcnic_set_max_rss()
3462 if (qlcnic_enable_msix(adapter, data)) { in qlcnic_set_max_rss()
3464 qlcnic_enable_msi_legacy(adapter); in qlcnic_set_max_rss()
3468 err = qlcnic_attach(adapter); in qlcnic_set_max_rss()
3471 err = __qlcnic_up(adapter, netdev); in qlcnic_set_max_rss()
3478 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_set_max_rss()
3483 qlcnic_validate_beacon(struct qlcnic_adapter *adapter, u16 beacon, u8 *state, in qlcnic_validate_beacon() argument
3489 QLCDB(adapter, DRV, "rate %x state %x\n", *rate, *state); in qlcnic_validate_beacon()
3507 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_store_beacon() local
3508 int max_sds_rings = adapter->max_sds_rings; in qlcnic_store_beacon()
3513 if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) { in qlcnic_store_beacon()
3523 err = qlcnic_validate_beacon(adapter, beacon, &b_state, &b_rate); in qlcnic_store_beacon()
3527 if (adapter->ahw->beacon_state == b_state) in qlcnic_store_beacon()
3532 if (!adapter->ahw->beacon_state) in qlcnic_store_beacon()
3533 if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state)) { in qlcnic_store_beacon()
3538 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_store_beacon()
3543 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_store_beacon()
3544 err = qlcnic_diag_alloc_res(adapter->netdev, QLCNIC_LED_TEST); in qlcnic_store_beacon()
3547 set_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state); in qlcnic_store_beacon()
3550 err = qlcnic_config_led(adapter, b_state, b_rate); in qlcnic_store_beacon()
3554 adapter->ahw->beacon_state = b_state; in qlcnic_store_beacon()
3557 if (test_and_clear_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state)) in qlcnic_store_beacon()
3558 qlcnic_diag_free_res(adapter->netdev, max_sds_rings); in qlcnic_store_beacon()
3561 if (!adapter->ahw->beacon_state) in qlcnic_store_beacon()
3562 clear_bit(__QLCNIC_LED_ENABLE, &adapter->state); in qlcnic_store_beacon()
3572 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_show_beacon() local
3574 return sprintf(buf, "%d\n", adapter->ahw->beacon_state); in qlcnic_show_beacon()
3584 qlcnic_sysfs_validate_crb(struct qlcnic_adapter *adapter, in qlcnic_sysfs_validate_crb() argument
3589 if (!(adapter->flags & QLCNIC_DIAG_ENABLED)) in qlcnic_sysfs_validate_crb()
3612 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_crb() local
3617 ret = qlcnic_sysfs_validate_crb(adapter, offset, size); in qlcnic_sysfs_read_crb()
3622 qlcnic_pci_camqm_read_2M(adapter, offset, &qmdata); in qlcnic_sysfs_read_crb()
3625 data = QLCRD32(adapter, offset); in qlcnic_sysfs_read_crb()
3637 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_write_crb() local
3642 ret = qlcnic_sysfs_validate_crb(adapter, offset, size); in qlcnic_sysfs_write_crb()
3648 qlcnic_pci_camqm_write_2M(adapter, offset, qmdata); in qlcnic_sysfs_write_crb()
3651 QLCWR32(adapter, offset, data); in qlcnic_sysfs_write_crb()
3657 qlcnic_sysfs_validate_mem(struct qlcnic_adapter *adapter, in qlcnic_sysfs_validate_mem() argument
3660 if (!(adapter->flags & QLCNIC_DIAG_ENABLED)) in qlcnic_sysfs_validate_mem()
3675 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_mem() local
3679 ret = qlcnic_sysfs_validate_mem(adapter, offset, size); in qlcnic_sysfs_read_mem()
3683 if (qlcnic_pci_mem_read_2M(adapter, offset, &data)) in qlcnic_sysfs_read_mem()
3697 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_write_mem() local
3701 ret = qlcnic_sysfs_validate_mem(adapter, offset, size); in qlcnic_sysfs_write_mem()
3707 if (qlcnic_pci_mem_write_2M(adapter, offset, data)) in qlcnic_sysfs_write_mem()
3728 validate_pm_config(struct qlcnic_adapter *adapter, in validate_pm_config() argument
3743 if (adapter->npars[src_pci_func].type != QLCNIC_TYPE_NIC) in validate_pm_config()
3746 if (adapter->npars[dest_pci_func].type != QLCNIC_TYPE_NIC) in validate_pm_config()
3749 s_esw_id = adapter->npars[src_pci_func].phy_port; in validate_pm_config()
3750 d_esw_id = adapter->npars[dest_pci_func].phy_port; in validate_pm_config()
3765 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_write_pm_config() local
3777 ret = validate_pm_config(adapter, pm_cfg, count); in qlcnic_sysfs_write_pm_config()
3783 id = adapter->npars[pci_func].phy_port; in qlcnic_sysfs_write_pm_config()
3784 ret = qlcnic_config_port_mirroring(adapter, id, in qlcnic_sysfs_write_pm_config()
3792 id = adapter->npars[pci_func].phy_port; in qlcnic_sysfs_write_pm_config()
3793 adapter->npars[pci_func].enable_pm = !!pm_cfg[i].action; in qlcnic_sysfs_write_pm_config()
3794 adapter->npars[pci_func].dest_npar = id; in qlcnic_sysfs_write_pm_config()
3804 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_pm_config() local
3812 if (adapter->npars[i].type != QLCNIC_TYPE_NIC) in qlcnic_sysfs_read_pm_config()
3814 pm_cfg[i].action = adapter->npars[i].enable_pm; in qlcnic_sysfs_read_pm_config()
3824 validate_esw_config(struct qlcnic_adapter *adapter, in validate_esw_config() argument
3831 op_mode = readl(adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE); in validate_esw_config()
3838 if (adapter->op_mode == QLCNIC_MGMT_FUNC) in validate_esw_config()
3839 if (adapter->npars[pci_func].type != QLCNIC_TYPE_NIC) in validate_esw_config()
3876 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_write_esw_config() local
3888 ret = validate_esw_config(adapter, esw_cfg, count); in qlcnic_sysfs_write_esw_config()
3893 if (adapter->op_mode == QLCNIC_MGMT_FUNC) in qlcnic_sysfs_write_esw_config()
3894 if (qlcnic_config_switch_port(adapter, &esw_cfg[i])) in qlcnic_sysfs_write_esw_config()
3897 if (adapter->ahw->pci_func != esw_cfg[i].pci_func) in qlcnic_sysfs_write_esw_config()
3901 qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i]); in qlcnic_sysfs_write_esw_config()
3903 esw_cfg[i].pci_func = adapter->ahw->pci_func; in qlcnic_sysfs_write_esw_config()
3907 qlcnic_set_eswitch_port_features(adapter, &esw_cfg[i]); in qlcnic_sysfs_write_esw_config()
3910 qlcnic_set_vlan_config(adapter, &esw_cfg[i]); in qlcnic_sysfs_write_esw_config()
3914 qlcnic_set_vlan_config(adapter, &esw_cfg[i]); in qlcnic_sysfs_write_esw_config()
3919 if (adapter->op_mode != QLCNIC_MGMT_FUNC) in qlcnic_sysfs_write_esw_config()
3924 npar = &adapter->npars[pci_func]; in qlcnic_sysfs_write_esw_config()
3950 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_esw_config() local
3958 if (adapter->npars[i].type != QLCNIC_TYPE_NIC) in qlcnic_sysfs_read_esw_config()
3961 if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i])) in qlcnic_sysfs_read_esw_config()
3970 validate_npar_config(struct qlcnic_adapter *adapter, in validate_npar_config() argument
3980 if (adapter->npars[pci_func].type != QLCNIC_TYPE_NIC) in validate_npar_config()
3995 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_write_npar_config() local
4007 ret = validate_npar_config(adapter, np_cfg, count); in qlcnic_sysfs_write_npar_config()
4013 ret = qlcnic_get_nic_info(adapter, &nic_info, pci_func); in qlcnic_sysfs_write_npar_config()
4019 ret = qlcnic_set_nic_info(adapter, &nic_info); in qlcnic_sysfs_write_npar_config()
4022 adapter->npars[i].min_bw = nic_info.min_tx_bw; in qlcnic_sysfs_write_npar_config()
4023 adapter->npars[i].max_bw = nic_info.max_tx_bw; in qlcnic_sysfs_write_npar_config()
4034 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_npar_config() local
4043 if (adapter->npars[i].type != QLCNIC_TYPE_NIC) in qlcnic_sysfs_read_npar_config()
4045 ret = qlcnic_get_nic_info(adapter, &nic_info, i); in qlcnic_sysfs_read_npar_config()
4067 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_get_port_stats() local
4078 ret = qlcnic_get_port_stats(adapter, offset, QLCNIC_QUERY_RX_COUNTER, in qlcnic_sysfs_get_port_stats()
4083 ret = qlcnic_get_port_stats(adapter, offset, QLCNIC_QUERY_TX_COUNTER, in qlcnic_sysfs_get_port_stats()
4097 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_get_esw_stats() local
4108 ret = qlcnic_get_eswitch_stats(adapter, offset, QLCNIC_QUERY_RX_COUNTER, in qlcnic_sysfs_get_esw_stats()
4113 ret = qlcnic_get_eswitch_stats(adapter, offset, QLCNIC_QUERY_TX_COUNTER, in qlcnic_sysfs_get_esw_stats()
4127 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_clear_esw_stats() local
4133 ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_ESWITCH, offset, in qlcnic_sysfs_clear_esw_stats()
4138 ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_ESWITCH, offset, in qlcnic_sysfs_clear_esw_stats()
4152 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_clear_port_stats() local
4158 ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_PORT, offset, in qlcnic_sysfs_clear_port_stats()
4163 ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_PORT, offset, in qlcnic_sysfs_clear_port_stats()
4176 struct qlcnic_adapter *adapter = dev_get_drvdata(dev); in qlcnic_sysfs_read_pci_config() local
4188 ret = qlcnic_get_pci_info(adapter, pci_info); in qlcnic_sysfs_read_pci_config()
4249 qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter) in qlcnic_create_sysfs_entries() argument
4251 struct device *dev = &adapter->pdev->dev; in qlcnic_create_sysfs_entries()
4253 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) in qlcnic_create_sysfs_entries()
4260 qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter) in qlcnic_remove_sysfs_entries() argument
4262 struct device *dev = &adapter->pdev->dev; in qlcnic_remove_sysfs_entries()
4264 if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG) in qlcnic_remove_sysfs_entries()
4269 qlcnic_create_diag_entries(struct qlcnic_adapter *adapter) in qlcnic_create_diag_entries() argument
4271 struct device *dev = &adapter->pdev->dev; in qlcnic_create_diag_entries()
4276 if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) in qlcnic_create_diag_entries()
4288 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) in qlcnic_create_diag_entries()
4292 if (adapter->op_mode != QLCNIC_MGMT_FUNC) in qlcnic_create_diag_entries()
4303 qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter) in qlcnic_remove_diag_entries() argument
4305 struct device *dev = &adapter->pdev->dev; in qlcnic_remove_diag_entries()
4309 if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) in qlcnic_remove_diag_entries()
4316 if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED)) in qlcnic_remove_diag_entries()
4319 if (adapter->op_mode != QLCNIC_MGMT_FUNC) in qlcnic_remove_diag_entries()
4331 qlcnic_config_indev_addr(struct qlcnic_adapter *adapter, in qlcnic_config_indev_addr() argument
4343 qlcnic_config_ipaddr(adapter, in qlcnic_config_indev_addr()
4347 qlcnic_config_ipaddr(adapter, in qlcnic_config_indev_addr()
4361 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_restore_indev_addr() local
4365 qlcnic_config_indev_addr(adapter, netdev, event); in qlcnic_restore_indev_addr()
4367 for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) { in qlcnic_restore_indev_addr()
4371 qlcnic_config_indev_addr(adapter, dev, event); in qlcnic_restore_indev_addr()
4378 struct qlcnic_adapter *adapter; in qlcnic_netdev_event() local
4393 adapter = netdev_priv(dev); in qlcnic_netdev_event()
4395 if (!adapter) in qlcnic_netdev_event()
4398 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_netdev_event()
4401 qlcnic_config_indev_addr(adapter, dev, event); in qlcnic_netdev_event()
4410 struct qlcnic_adapter *adapter; in qlcnic_inetaddr_event() local
4429 adapter = netdev_priv(dev); in qlcnic_inetaddr_event()
4431 if (!adapter) in qlcnic_inetaddr_event()
4434 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) in qlcnic_inetaddr_event()
4439 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_UP); in qlcnic_inetaddr_event()
4442 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_DOWN); in qlcnic_inetaddr_event()