Lines Matching refs:adapter
269 int qlcnic_83xx_get_fw_version(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_fw_version() argument
272 struct pci_dev *pdev = adapter->pdev; in qlcnic_83xx_get_fw_version()
274 fw_major = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MAJOR); in qlcnic_83xx_get_fw_version()
275 fw_minor = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MINOR); in qlcnic_83xx_get_fw_version()
276 fw_build = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_SUB); in qlcnic_83xx_get_fw_version()
277 adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); in qlcnic_83xx_get_fw_version()
282 return adapter->fw_version; in qlcnic_83xx_get_fw_version()
285 static int __qlcnic_set_win_base(struct qlcnic_adapter *adapter, u32 addr) in __qlcnic_set_win_base() argument
290 base = adapter->ahw->pci_base0 + in __qlcnic_set_win_base()
291 QLC_83XX_CRB_WIN_FUNC(adapter->ahw->pci_func); in __qlcnic_set_win_base()
300 int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *adapter, ulong addr, in qlcnic_83xx_rd_reg_indirect() argument
303 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_rd_reg_indirect()
305 *err = __qlcnic_set_win_base(adapter, (u32) addr); in qlcnic_83xx_rd_reg_indirect()
309 dev_err(&adapter->pdev->dev, in qlcnic_83xx_rd_reg_indirect()
315 int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *adapter, ulong addr, in qlcnic_83xx_wrt_reg_indirect() argument
319 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_wrt_reg_indirect()
321 err = __qlcnic_set_win_base(adapter, (u32) addr); in qlcnic_83xx_wrt_reg_indirect()
326 dev_err(&adapter->pdev->dev, in qlcnic_83xx_wrt_reg_indirect()
333 static void qlcnic_83xx_enable_legacy(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_legacy() argument
335 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_enable_legacy()
338 adapter->tgt_status_reg = ahw->pci_base0 + QLC_83XX_INTX_PTR; in qlcnic_83xx_enable_legacy()
339 adapter->tgt_mask_reg = ahw->pci_base0 + QLC_83XX_INTX_MASK; in qlcnic_83xx_enable_legacy()
340 adapter->isr_int_vec = ahw->pci_base0 + QLC_83XX_INTX_TRGR; in qlcnic_83xx_enable_legacy()
341 adapter->msix_entries[0].vector = adapter->pdev->irq; in qlcnic_83xx_enable_legacy()
342 dev_info(&adapter->pdev->dev, "using legacy interrupt\n"); in qlcnic_83xx_enable_legacy()
345 static int qlcnic_83xx_calculate_msix_vector(struct qlcnic_adapter *adapter) in qlcnic_83xx_calculate_msix_vector() argument
349 num_msix = adapter->drv_sds_rings; in qlcnic_83xx_calculate_msix_vector()
354 if (!(adapter->flags & QLCNIC_TX_INTR_SHARED)) in qlcnic_83xx_calculate_msix_vector()
355 num_msix += adapter->drv_tx_rings; in qlcnic_83xx_calculate_msix_vector()
360 int qlcnic_83xx_setup_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_setup_intr() argument
362 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_setup_intr()
365 if (adapter->flags & QLCNIC_TSS_RSS) { in qlcnic_83xx_setup_intr()
366 err = qlcnic_setup_tss_rss_intr(adapter); in qlcnic_83xx_setup_intr()
371 num_msix = qlcnic_83xx_calculate_msix_vector(adapter); in qlcnic_83xx_setup_intr()
373 err = qlcnic_enable_msix(adapter, num_msix); in qlcnic_83xx_setup_intr()
377 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_setup_intr()
380 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_setup_intr()
383 adapter->drv_sds_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_setup_intr()
384 adapter->drv_tx_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_setup_intr()
395 if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) { in qlcnic_83xx_setup_intr()
396 if (adapter->ahw->pci_func >= QLC_MAX_LEGACY_FUNC_SUPP) { in qlcnic_83xx_setup_intr()
397 …dev_err(&adapter->pdev->dev, "PCI function number 8 and higher are not supported with legacy inter… in qlcnic_83xx_setup_intr()
402 qlcnic_83xx_enable_legacy(adapter); in qlcnic_83xx_setup_intr()
406 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_setup_intr()
417 static inline void qlcnic_83xx_clear_legacy_intr_mask(struct qlcnic_adapter *adapter) in qlcnic_83xx_clear_legacy_intr_mask() argument
419 writel(0, adapter->tgt_mask_reg); in qlcnic_83xx_clear_legacy_intr_mask()
422 static inline void qlcnic_83xx_set_legacy_intr_mask(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_legacy_intr_mask() argument
424 if (adapter->tgt_mask_reg) in qlcnic_83xx_set_legacy_intr_mask()
425 writel(1, adapter->tgt_mask_reg); in qlcnic_83xx_set_legacy_intr_mask()
429 *adapter) in qlcnic_83xx_enable_legacy_msix_mbx_intr()
438 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_enable_legacy_msix_mbx_intr()
439 writel(0, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_enable_legacy_msix_mbx_intr()
442 void qlcnic_83xx_disable_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_mbx_intr() argument
446 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_disable_mbx_intr()
447 writel(1, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_disable_mbx_intr()
448 QLCWRX(adapter->ahw, QLCNIC_MBX_INTR_ENBL, 0); in qlcnic_83xx_disable_mbx_intr()
451 static inline void qlcnic_83xx_get_mbx_data(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_mbx_data() argument
460 cmd->rsp.arg[i] = readl(QLCNIC_MBX_FW(adapter->ahw, i)); in qlcnic_83xx_get_mbx_data()
463 irqreturn_t qlcnic_83xx_clear_legacy_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_clear_legacy_intr() argument
466 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_clear_legacy_intr()
469 intr_val = readl(adapter->tgt_status_reg); in qlcnic_83xx_clear_legacy_intr()
474 if (QLC_83XX_INTX_FUNC(intr_val) != adapter->ahw->pci_func) { in qlcnic_83xx_clear_legacy_intr()
475 adapter->stats.spurious_intr++; in qlcnic_83xx_clear_legacy_intr()
482 writel_relaxed(0, adapter->isr_int_vec); in qlcnic_83xx_clear_legacy_intr()
483 intr_val = readl(adapter->isr_int_vec); in qlcnic_83xx_clear_legacy_intr()
485 intr_val = readl(adapter->tgt_status_reg); in qlcnic_83xx_clear_legacy_intr()
501 static void qlcnic_83xx_poll_process_aen(struct qlcnic_adapter *adapter) in qlcnic_83xx_poll_process_aen() argument
504 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen()
508 resp = QLCRDX(adapter->ahw, QLCNIC_FW_MBX_CTRL); in qlcnic_83xx_poll_process_aen()
512 event = readl(QLCNIC_MBX_FW(adapter->ahw, 0)); in qlcnic_83xx_poll_process_aen()
514 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_poll_process_aen()
520 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_poll_process_aen()
526 struct qlcnic_adapter *adapter = data; in qlcnic_83xx_intr() local
528 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_intr()
530 if (qlcnic_83xx_clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_83xx_intr()
533 qlcnic_83xx_poll_process_aen(adapter); in qlcnic_83xx_intr()
538 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_intr()
542 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_83xx_intr()
543 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_intr()
545 sds_ring = &adapter->recv_ctx->sds_rings[0]; in qlcnic_83xx_intr()
555 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_83xx_tmp_intr() local
557 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_tmp_intr()
560 if (adapter->nic_ops->clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_83xx_tmp_intr()
564 adapter->ahw->diag_cnt++; in qlcnic_83xx_tmp_intr()
565 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_tmp_intr()
570 void qlcnic_83xx_free_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_free_mbx_intr() argument
574 if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) in qlcnic_83xx_free_mbx_intr()
575 qlcnic_83xx_set_legacy_intr_mask(adapter); in qlcnic_83xx_free_mbx_intr()
577 qlcnic_83xx_disable_mbx_intr(adapter); in qlcnic_83xx_free_mbx_intr()
579 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_free_mbx_intr()
580 num_msix = adapter->ahw->num_msix - 1; in qlcnic_83xx_free_mbx_intr()
586 if (adapter->msix_entries) { in qlcnic_83xx_free_mbx_intr()
587 synchronize_irq(adapter->msix_entries[num_msix].vector); in qlcnic_83xx_free_mbx_intr()
588 free_irq(adapter->msix_entries[num_msix].vector, adapter); in qlcnic_83xx_free_mbx_intr()
592 int qlcnic_83xx_setup_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_setup_mbx_intr() argument
599 if (!(adapter->flags & QLCNIC_MSI_ENABLED) && in qlcnic_83xx_setup_mbx_intr()
600 !(adapter->flags & QLCNIC_MSIX_ENABLED)) in qlcnic_83xx_setup_mbx_intr()
603 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_setup_mbx_intr()
605 val = adapter->msix_entries[adapter->ahw->num_msix - 1].vector; in qlcnic_83xx_setup_mbx_intr()
606 err = request_irq(val, handler, flags, "qlcnic-MB", adapter); in qlcnic_83xx_setup_mbx_intr()
608 dev_err(&adapter->pdev->dev, in qlcnic_83xx_setup_mbx_intr()
614 val = adapter->msix_entries[0].vector; in qlcnic_83xx_setup_mbx_intr()
615 err = request_irq(val, handler, flags, "qlcnic", adapter); in qlcnic_83xx_setup_mbx_intr()
617 dev_err(&adapter->pdev->dev, in qlcnic_83xx_setup_mbx_intr()
621 qlcnic_83xx_clear_legacy_intr_mask(adapter); in qlcnic_83xx_setup_mbx_intr()
625 qlcnic_83xx_enable_mbx_interrupt(adapter); in qlcnic_83xx_setup_mbx_intr()
630 void qlcnic_83xx_get_func_no(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_func_no() argument
632 u32 val = QLCRDX(adapter->ahw, QLCNIC_INFORMANT); in qlcnic_83xx_get_func_no()
633 adapter->ahw->pci_func = (val >> 24) & 0xff; in qlcnic_83xx_get_func_no()
636 int qlcnic_83xx_cam_lock(struct qlcnic_adapter *adapter) in qlcnic_83xx_cam_lock() argument
641 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_cam_lock()
648 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, in qlcnic_83xx_cam_lock()
658 void qlcnic_83xx_cam_unlock(struct qlcnic_adapter *adapter) in qlcnic_83xx_cam_unlock() argument
662 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_cam_unlock()
668 void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf, in qlcnic_83xx_read_crb() argument
674 if (qlcnic_api_lock(adapter)) { in qlcnic_83xx_read_crb()
675 dev_err(&adapter->pdev->dev, in qlcnic_83xx_read_crb()
681 data = QLCRD32(adapter, (u32) offset, &ret); in qlcnic_83xx_read_crb()
682 qlcnic_api_unlock(adapter); in qlcnic_83xx_read_crb()
685 dev_err(&adapter->pdev->dev, in qlcnic_83xx_read_crb()
693 void qlcnic_83xx_write_crb(struct qlcnic_adapter *adapter, char *buf, in qlcnic_83xx_write_crb() argument
699 qlcnic_83xx_wrt_reg_indirect(adapter, (u32) offset, data); in qlcnic_83xx_write_crb()
702 int qlcnic_83xx_get_port_info(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_port_info() argument
704 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_port_info()
707 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_get_port_info()
709 dev_err(&adapter->pdev->dev, in qlcnic_83xx_get_port_info()
730 static void qlcnic_83xx_set_mac_filter_count(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_mac_filter_count() argument
732 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_mac_filter_count()
746 void qlcnic_83xx_enable_mbx_interrupt(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_mbx_interrupt() argument
750 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_enable_mbx_interrupt()
751 val = BIT_2 | ((adapter->ahw->num_msix - 1) << 8); in qlcnic_83xx_enable_mbx_interrupt()
755 QLCWRX(adapter->ahw, QLCNIC_MBX_INTR_ENBL, val); in qlcnic_83xx_enable_mbx_interrupt()
756 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_enable_mbx_interrupt()
759 void qlcnic_83xx_check_vf(struct qlcnic_adapter *adapter, in qlcnic_83xx_check_vf() argument
763 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_check_vf()
766 qlcnic_get_func_no(adapter); in qlcnic_83xx_check_vf()
768 if (qlcnic_sriov_vf_check(adapter)) { in qlcnic_83xx_check_vf()
769 qlcnic_sriov_vf_set_ops(adapter); in qlcnic_83xx_check_vf()
774 op_mode = QLCRDX(adapter->ahw, QLC_83XX_DRV_OP_MODE); in qlcnic_83xx_check_vf()
783 dev_info(&adapter->pdev->dev, in qlcnic_83xx_check_vf()
786 adapter->nic_ops = &qlcnic_vf_ops; in qlcnic_83xx_check_vf()
788 if (pci_find_ext_capability(adapter->pdev, in qlcnic_83xx_check_vf()
790 set_bit(__QLCNIC_SRIOV_CAPABLE, &adapter->state); in qlcnic_83xx_check_vf()
791 adapter->nic_ops = &qlcnic_83xx_ops; in qlcnic_83xx_check_vf()
795 static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,
797 static void qlcnic_83xx_handle_idc_comp_aen(struct qlcnic_adapter *adapter,
800 void qlcnic_dump_mbx(struct qlcnic_adapter *adapter, in qlcnic_dump_mbx() argument
808 dev_info(&adapter->pdev->dev, in qlcnic_dump_mbx()
816 dev_info(&adapter->pdev->dev, in qlcnic_dump_mbx()
826 static void qlcnic_83xx_poll_for_mbx_completion(struct qlcnic_adapter *adapter, in qlcnic_83xx_poll_for_mbx_completion() argument
829 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_poll_for_mbx_completion()
843 dev_err(&adapter->pdev->dev, in qlcnic_83xx_poll_for_mbx_completion()
850 int qlcnic_83xx_issue_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_issue_cmd() argument
853 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_issue_cmd()
854 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_issue_cmd()
863 err = mbx->ops->enqueue_cmd(adapter, cmd, &timeout); in qlcnic_83xx_issue_cmd()
865 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
875 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
885 qlcnic_83xx_poll_for_mbx_completion(adapter, cmd); in qlcnic_83xx_issue_cmd()
888 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
892 qlcnic_83xx_detach_mailbox_work(adapter); in qlcnic_83xx_issue_cmd()
899 struct qlcnic_adapter *adapter, u32 type) in qlcnic_83xx_alloc_mbx_args() argument
924 temp = adapter->ahw->fw_hal_version << 29; in qlcnic_83xx_alloc_mbx_args()
931 dev_err(&adapter->pdev->dev, "%s: Invalid mailbox command opcode 0x%x\n", in qlcnic_83xx_alloc_mbx_args()
938 struct qlcnic_adapter *adapter; in qlcnic_83xx_idc_aen_work() local
942 adapter = container_of(work, struct qlcnic_adapter, idc_aen_work.work); in qlcnic_83xx_idc_aen_work()
943 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_IDC_ACK); in qlcnic_83xx_idc_aen_work()
948 cmd.req.arg[i] = adapter->ahw->mbox_aen[i]; in qlcnic_83xx_idc_aen_work()
950 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_idc_aen_work()
952 dev_info(&adapter->pdev->dev, in qlcnic_83xx_idc_aen_work()
957 static void qlcnic_83xx_handle_idc_comp_aen(struct qlcnic_adapter *adapter, in qlcnic_83xx_handle_idc_comp_aen() argument
960 dev_dbg(&adapter->pdev->dev, "Completion AEN:0x%x.\n", in qlcnic_83xx_handle_idc_comp_aen()
962 clear_bit(QLC_83XX_IDC_COMP_AEN, &adapter->ahw->idc.status); in qlcnic_83xx_handle_idc_comp_aen()
966 static void __qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter) in __qlcnic_83xx_process_aen() argument
968 struct qlcnic_hardware_context *ahw = adapter->ahw; in __qlcnic_83xx_process_aen()
978 qlcnic_83xx_handle_link_aen(adapter, event); in __qlcnic_83xx_process_aen()
981 qlcnic_83xx_handle_idc_comp_aen(adapter, event); in __qlcnic_83xx_process_aen()
985 adapter->ahw->mbox_aen[i] = QLCNIC_MBX_RSP(event[i]); in __qlcnic_83xx_process_aen()
986 queue_delayed_work(adapter->qlcnic_wq, in __qlcnic_83xx_process_aen()
987 &adapter->idc_aen_work, 0); in __qlcnic_83xx_process_aen()
993 qlcnic_sriov_handle_bc_event(adapter, event[1]); in __qlcnic_83xx_process_aen()
996 dev_info(&adapter->pdev->dev, "SFP+ Insert AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
1000 dev_info(&adapter->pdev->dev, "SFP Removed AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
1004 qlcnic_dcb_aen_handler(adapter->dcb, (void *)&event[1]); in __qlcnic_83xx_process_aen()
1007 dev_dbg(&adapter->pdev->dev, "Unsupported AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
1015 static void qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter) in qlcnic_83xx_process_aen() argument
1018 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_process_aen()
1027 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_process_aen()
1038 struct qlcnic_adapter *adapter; in qlcnic_83xx_mbx_poll_work() local
1040 adapter = container_of(work, struct qlcnic_adapter, mbx_poll_work.work); in qlcnic_83xx_mbx_poll_work()
1042 if (!test_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_mbx_poll_work()
1045 qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_mbx_poll_work()
1046 queue_delayed_work(adapter->qlcnic_wq, &adapter->mbx_poll_work, in qlcnic_83xx_mbx_poll_work()
1050 void qlcnic_83xx_enable_mbx_poll(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_mbx_poll() argument
1052 if (test_and_set_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_enable_mbx_poll()
1055 INIT_DELAYED_WORK(&adapter->mbx_poll_work, qlcnic_83xx_mbx_poll_work); in qlcnic_83xx_enable_mbx_poll()
1056 queue_delayed_work(adapter->qlcnic_wq, &adapter->mbx_poll_work, 0); in qlcnic_83xx_enable_mbx_poll()
1059 void qlcnic_83xx_disable_mbx_poll(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_mbx_poll() argument
1061 if (!test_and_clear_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_disable_mbx_poll()
1063 cancel_delayed_work_sync(&adapter->mbx_poll_work); in qlcnic_83xx_disable_mbx_poll()
1066 static int qlcnic_83xx_add_rings(struct qlcnic_adapter *adapter) in qlcnic_83xx_add_rings() argument
1076 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_add_rings()
1077 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_add_rings()
1081 num_sds = adapter->drv_sds_rings - QLCNIC_MAX_SDS_RINGS; in qlcnic_83xx_add_rings()
1082 ahw->hw_ops->alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_add_rings()
1088 for (i = 8; i < adapter->drv_sds_rings; i++) { in qlcnic_83xx_add_rings()
1097 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_add_rings()
1102 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_add_rings()
1113 err = ahw->hw_ops->mbx_cmd(adapter, &cmd); in qlcnic_83xx_add_rings()
1115 dev_err(&adapter->pdev->dev, in qlcnic_83xx_add_rings()
1123 for (i = 8; i < adapter->drv_sds_rings; i++) { in qlcnic_83xx_add_rings()
1127 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_add_rings()
1140 void qlcnic_83xx_del_rx_ctx(struct qlcnic_adapter *adapter) in qlcnic_83xx_del_rx_ctx() argument
1145 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_del_rx_ctx()
1147 if (qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_DESTROY_RX_CTX)) in qlcnic_83xx_del_rx_ctx()
1150 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_del_rx_ctx()
1153 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_del_rx_ctx()
1154 qlcnic_pf_set_interface_id_del_rx_ctx(adapter, &temp); in qlcnic_83xx_del_rx_ctx()
1157 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_del_rx_ctx()
1159 dev_err(&adapter->pdev->dev, in qlcnic_83xx_del_rx_ctx()
1166 int qlcnic_83xx_create_rx_ctx(struct qlcnic_adapter *adapter) in qlcnic_83xx_create_rx_ctx() argument
1177 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_create_rx_ctx()
1178 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_create_rx_ctx()
1179 num_rds = adapter->max_rds_rings; in qlcnic_83xx_create_rx_ctx()
1181 if (adapter->drv_sds_rings <= QLCNIC_MAX_SDS_RINGS) in qlcnic_83xx_create_rx_ctx()
1182 num_sds = adapter->drv_sds_rings; in qlcnic_83xx_create_rx_ctx()
1190 if (adapter->flags & QLCNIC_FW_LRO_MSS_CAP) in qlcnic_83xx_create_rx_ctx()
1194 err = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_create_rx_ctx()
1199 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_create_rx_ctx()
1206 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_create_rx_ctx()
1207 qlcnic_pf_set_interface_id_create_rx_ctx(adapter, in qlcnic_83xx_create_rx_ctx()
1219 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_create_rx_ctx()
1223 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_create_rx_ctx()
1252 err = ahw->hw_ops->mbx_cmd(adapter, &cmd); in qlcnic_83xx_create_rx_ctx()
1254 dev_err(&adapter->pdev->dev, in qlcnic_83xx_create_rx_ctx()
1262 dev_info(&adapter->pdev->dev, "Rx Context[%d] Created, state:0x%x\n", in qlcnic_83xx_create_rx_ctx()
1278 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_create_rx_ctx()
1285 if (adapter->drv_sds_rings > QLCNIC_MAX_SDS_RINGS) in qlcnic_83xx_create_rx_ctx()
1286 err = qlcnic_83xx_add_rings(adapter); in qlcnic_83xx_create_rx_ctx()
1292 void qlcnic_83xx_del_tx_ctx(struct qlcnic_adapter *adapter, in qlcnic_83xx_del_tx_ctx() argument
1298 if (qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_DESTROY_TX_CTX)) in qlcnic_83xx_del_tx_ctx()
1301 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_del_tx_ctx()
1304 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_del_tx_ctx()
1305 qlcnic_pf_set_interface_id_del_tx_ctx(adapter, &temp); in qlcnic_83xx_del_tx_ctx()
1308 if (qlcnic_issue_cmd(adapter, &cmd)) in qlcnic_83xx_del_tx_ctx()
1309 dev_err(&adapter->pdev->dev, in qlcnic_83xx_del_tx_ctx()
1314 int qlcnic_83xx_create_tx_ctx(struct qlcnic_adapter *adapter, in qlcnic_83xx_create_tx_ctx() argument
1323 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_create_tx_ctx()
1339 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_create_tx_ctx()
1340 if (!(adapter->flags & QLCNIC_TX_INTR_SHARED)) in qlcnic_83xx_create_tx_ctx()
1341 msix_vector = adapter->drv_sds_rings + ring; in qlcnic_83xx_create_tx_ctx()
1343 msix_vector = adapter->drv_sds_rings - 1; in qlcnic_83xx_create_tx_ctx()
1349 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_create_tx_ctx()
1355 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CREATE_TX_CTX); in qlcnic_83xx_create_tx_ctx()
1359 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_create_tx_ctx()
1362 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_create_tx_ctx()
1363 qlcnic_pf_set_interface_id_create_tx_ctx(adapter, &temp); in qlcnic_83xx_create_tx_ctx()
1371 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_create_tx_ctx()
1373 netdev_err(adapter->netdev, in qlcnic_83xx_create_tx_ctx()
1380 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_create_tx_ctx()
1381 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_create_tx_ctx()
1382 intr_mask = ahw->intr_tbl[adapter->drv_sds_rings + ring].src; in qlcnic_83xx_create_tx_ctx()
1385 netdev_info(adapter->netdev, in qlcnic_83xx_create_tx_ctx()
1396 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_diag_alloc_res() local
1399 u16 adapter_state = adapter->is_up; in qlcnic_83xx_diag_alloc_res()
1406 __qlcnic_down(adapter, netdev); in qlcnic_83xx_diag_alloc_res()
1408 qlcnic_detach(adapter); in qlcnic_83xx_diag_alloc_res()
1410 adapter->drv_sds_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_diag_alloc_res()
1411 adapter->ahw->diag_test = test; in qlcnic_83xx_diag_alloc_res()
1412 adapter->ahw->linkup = 0; in qlcnic_83xx_diag_alloc_res()
1414 ret = qlcnic_attach(adapter); in qlcnic_83xx_diag_alloc_res()
1420 ret = qlcnic_fw_create_ctx(adapter); in qlcnic_83xx_diag_alloc_res()
1422 qlcnic_detach(adapter); in qlcnic_83xx_diag_alloc_res()
1424 adapter->drv_sds_rings = num_sds_ring; in qlcnic_83xx_diag_alloc_res()
1425 qlcnic_attach(adapter); in qlcnic_83xx_diag_alloc_res()
1431 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_83xx_diag_alloc_res()
1432 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in qlcnic_83xx_diag_alloc_res()
1433 qlcnic_post_rx_buffers(adapter, rds_ring, ring); in qlcnic_83xx_diag_alloc_res()
1436 if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_83xx_diag_alloc_res()
1437 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_diag_alloc_res()
1438 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_83xx_diag_alloc_res()
1439 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_diag_alloc_res()
1443 if (adapter->ahw->diag_test == QLCNIC_LOOPBACK_TEST) { in qlcnic_83xx_diag_alloc_res()
1444 adapter->ahw->loopback_state = 0; in qlcnic_83xx_diag_alloc_res()
1445 adapter->ahw->hw_ops->setup_link_event(adapter, 1); in qlcnic_83xx_diag_alloc_res()
1448 set_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_83xx_diag_alloc_res()
1455 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_diag_free_res() local
1459 clear_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_83xx_diag_free_res()
1460 if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_83xx_diag_free_res()
1461 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_diag_free_res()
1462 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_83xx_diag_free_res()
1463 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_diag_free_res()
1464 qlcnic_disable_sds_intr(adapter, sds_ring); in qlcnic_83xx_diag_free_res()
1468 qlcnic_fw_destroy_ctx(adapter); in qlcnic_83xx_diag_free_res()
1469 qlcnic_detach(adapter); in qlcnic_83xx_diag_free_res()
1471 adapter->ahw->diag_test = 0; in qlcnic_83xx_diag_free_res()
1472 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_diag_free_res()
1474 if (qlcnic_attach(adapter)) in qlcnic_83xx_diag_free_res()
1478 __qlcnic_up(adapter, netdev); in qlcnic_83xx_diag_free_res()
1484 static void qlcnic_83xx_get_beacon_state(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_beacon_state() argument
1486 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_beacon_state()
1491 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LED_CONFIG); in qlcnic_83xx_get_beacon_state()
1493 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_beacon_state()
1502 netdev_err(adapter->netdev, "Get beacon state failed, err=%d\n", in qlcnic_83xx_get_beacon_state()
1511 int qlcnic_83xx_config_led(struct qlcnic_adapter *adapter, u32 state, in qlcnic_83xx_config_led() argument
1520 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1525 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1527 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1532 adapter->ahw->mbox_reg[i] = cmd.rsp.arg[i+1]; in qlcnic_83xx_config_led()
1538 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1548 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1550 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1559 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1564 cmd.req.arg[1] = adapter->ahw->mbox_reg[0]; in qlcnic_83xx_config_led()
1565 cmd.req.arg[2] = adapter->ahw->mbox_reg[1]; in qlcnic_83xx_config_led()
1566 cmd.req.arg[3] = adapter->ahw->mbox_reg[2]; in qlcnic_83xx_config_led()
1568 cmd.req.arg[4] = adapter->ahw->mbox_reg[3]; in qlcnic_83xx_config_led()
1569 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1571 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1581 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_set_led() local
1584 if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { in qlcnic_83xx_set_led()
1592 if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state)) in qlcnic_83xx_set_led()
1595 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_83xx_set_led()
1598 err = qlcnic_83xx_config_led(adapter, active, 0); in qlcnic_83xx_set_led()
1605 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_83xx_set_led()
1608 err = qlcnic_83xx_config_led(adapter, active, 0); in qlcnic_83xx_set_led()
1618 clear_bit(__QLCNIC_LED_ENABLE, &adapter->state); in qlcnic_83xx_set_led()
1623 void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_initialize_nic() argument
1628 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_initialize_nic()
1632 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_initialize_nic()
1635 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_initialize_nic()
1643 if (adapter->dcb) in qlcnic_83xx_initialize_nic()
1646 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_initialize_nic()
1648 dev_err(&adapter->pdev->dev, in qlcnic_83xx_initialize_nic()
1655 static int qlcnic_83xx_set_port_config(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_port_config() argument
1660 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_SET_PORT_CONFIG); in qlcnic_83xx_set_port_config()
1664 cmd.req.arg[1] = adapter->ahw->port_config; in qlcnic_83xx_set_port_config()
1665 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_port_config()
1667 dev_info(&adapter->pdev->dev, "Set Port Config failed.\n"); in qlcnic_83xx_set_port_config()
1672 static int qlcnic_83xx_get_port_config(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_port_config() argument
1677 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_PORT_CONFIG); in qlcnic_83xx_get_port_config()
1681 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_port_config()
1683 dev_info(&adapter->pdev->dev, "Get Port config failed\n"); in qlcnic_83xx_get_port_config()
1685 adapter->ahw->port_config = cmd.rsp.arg[1]; in qlcnic_83xx_get_port_config()
1690 int qlcnic_83xx_setup_link_event(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_setup_link_event() argument
1696 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_EVENT); in qlcnic_83xx_setup_link_event()
1700 temp = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_setup_link_event()
1702 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_setup_link_event()
1704 dev_info(&adapter->pdev->dev, in qlcnic_83xx_setup_link_event()
1710 static void qlcnic_83xx_set_interface_id_promisc(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_promisc() argument
1713 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_promisc()
1714 qlcnic_alloc_lb_filters_mem(adapter); in qlcnic_83xx_set_interface_id_promisc()
1715 qlcnic_pf_set_interface_id_promisc(adapter, interface_id); in qlcnic_83xx_set_interface_id_promisc()
1716 adapter->rx_mac_learn = true; in qlcnic_83xx_set_interface_id_promisc()
1718 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_promisc()
1719 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_promisc()
1723 int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *adapter, u32 mode) in qlcnic_83xx_nic_set_promisc() argument
1729 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_nic_set_promisc()
1736 err = qlcnic_alloc_mbx_args(cmd, adapter, in qlcnic_83xx_nic_set_promisc()
1742 qlcnic_83xx_set_interface_id_promisc(adapter, &temp); in qlcnic_83xx_nic_set_promisc()
1744 if (qlcnic_84xx_check(adapter) && qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_nic_set_promisc()
1748 err = qlcnic_issue_cmd(adapter, cmd); in qlcnic_83xx_nic_set_promisc()
1761 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_loopback_test() local
1762 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_loopback_test()
1763 u8 drv_sds_rings = adapter->drv_sds_rings; in qlcnic_83xx_loopback_test()
1764 u8 drv_tx_rings = adapter->drv_tx_rings; in qlcnic_83xx_loopback_test()
1773 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_loopback_test()
1778 if (qlcnic_get_diag_lock(adapter)) { in qlcnic_83xx_loopback_test()
1791 ret = qlcnic_83xx_set_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1799 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_loopback_test()
1809 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1812 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1); in qlcnic_83xx_loopback_test()
1814 ret = qlcnic_do_lb_test(adapter, mode); in qlcnic_83xx_loopback_test()
1816 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1822 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_loopback_test()
1823 adapter->drv_tx_rings = drv_tx_rings; in qlcnic_83xx_loopback_test()
1824 qlcnic_release_diag_lock(adapter); in qlcnic_83xx_loopback_test()
1828 static void qlcnic_extend_lb_idc_cmpltn_wait(struct qlcnic_adapter *adapter, in qlcnic_extend_lb_idc_cmpltn_wait() argument
1831 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_extend_lb_idc_cmpltn_wait()
1834 netdev_info(adapter->netdev, "Received loopback IDC time extend event for 0x%x seconds\n", in qlcnic_extend_lb_idc_cmpltn_wait()
1841 static int qlcnic_83xx_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode) in qlcnic_83xx_set_lb_mode() argument
1843 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_lb_mode()
1844 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_set_lb_mode()
1850 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_set_lb_mode()
1871 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_set_lb_mode()
1885 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_set_lb_mode()
1893 qlcnic_extend_lb_idc_cmpltn_wait(adapter, in qlcnic_83xx_set_lb_mode()
1900 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_set_lb_mode()
1905 qlcnic_sre_macaddr_change(adapter, adapter->mac_addr, 0, in qlcnic_83xx_set_lb_mode()
1910 static int qlcnic_83xx_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode) in qlcnic_83xx_clear_lb_mode() argument
1912 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_clear_lb_mode()
1914 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_clear_lb_mode()
1925 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_clear_lb_mode()
1939 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_clear_lb_mode()
1947 qlcnic_extend_lb_idc_cmpltn_wait(adapter, in qlcnic_83xx_clear_lb_mode()
1958 qlcnic_sre_macaddr_change(adapter, adapter->mac_addr, 0, in qlcnic_83xx_clear_lb_mode()
1963 static void qlcnic_83xx_set_interface_id_ipaddr(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_ipaddr() argument
1966 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_ipaddr()
1967 qlcnic_pf_set_interface_id_ipaddr(adapter, interface_id); in qlcnic_83xx_set_interface_id_ipaddr()
1969 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_ipaddr()
1970 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_ipaddr()
1974 void qlcnic_83xx_config_ipaddr(struct qlcnic_adapter *adapter, __be32 ip, in qlcnic_83xx_config_ipaddr() argument
1981 err = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_ipaddr()
1986 qlcnic_83xx_set_interface_id_ipaddr(adapter, &temp); in qlcnic_83xx_config_ipaddr()
2003 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_ipaddr()
2005 dev_err(&adapter->netdev->dev, in qlcnic_83xx_config_ipaddr()
2012 int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *adapter, int mode) in qlcnic_83xx_config_hw_lro() argument
2021 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_config_hw_lro()
2024 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIGURE_HW_LRO); in qlcnic_83xx_config_hw_lro()
2028 temp = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_config_hw_lro()
2032 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_hw_lro()
2034 dev_info(&adapter->pdev->dev, "LRO config failed\n"); in qlcnic_83xx_config_hw_lro()
2040 int qlcnic_83xx_config_rss(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_config_rss() argument
2049 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIGURE_RSS); in qlcnic_83xx_config_rss()
2065 cmd.req.arg[1] = (adapter->recv_ctx->context_id); in qlcnic_83xx_config_rss()
2069 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_rss()
2072 dev_info(&adapter->pdev->dev, "RSS config failed\n"); in qlcnic_83xx_config_rss()
2079 static void qlcnic_83xx_set_interface_id_macaddr(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_macaddr() argument
2082 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_macaddr()
2083 qlcnic_pf_set_interface_id_macaddr(adapter, interface_id); in qlcnic_83xx_set_interface_id_macaddr()
2085 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_macaddr()
2086 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_macaddr()
2090 int qlcnic_83xx_sre_macaddr_change(struct qlcnic_adapter *adapter, u8 *addr, in qlcnic_83xx_sre_macaddr_change() argument
2098 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_sre_macaddr_change()
2105 err = qlcnic_alloc_mbx_args(cmd, adapter, QLCNIC_CMD_CONFIG_MAC_VLAN); in qlcnic_83xx_sre_macaddr_change()
2116 qlcnic_83xx_set_interface_id_macaddr(adapter, &temp); in qlcnic_83xx_sre_macaddr_change()
2127 err = qlcnic_issue_cmd(adapter, cmd); in qlcnic_83xx_sre_macaddr_change()
2137 void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, in qlcnic_83xx_change_l2_filter() argument
2143 qlcnic_83xx_sre_macaddr_change(adapter, mac, vlan_id, QLCNIC_MAC_ADD); in qlcnic_83xx_change_l2_filter()
2146 static void qlcnic_83xx_configure_mac(struct qlcnic_adapter *adapter, u8 *mac, in qlcnic_83xx_configure_mac() argument
2159 int qlcnic_83xx_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac, in qlcnic_83xx_get_mac_address() argument
2166 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_MAC_ADDRESS); in qlcnic_83xx_get_mac_address()
2170 qlcnic_83xx_configure_mac(adapter, mac, QLCNIC_GET_CURRENT_MAC, &cmd); in qlcnic_83xx_get_mac_address()
2171 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_mac_address()
2182 dev_err(&adapter->pdev->dev, "Failed to get mac address%d\n", in qlcnic_83xx_get_mac_address()
2190 static int qlcnic_83xx_set_rx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_rx_intr_coal() argument
2192 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_set_rx_intr_coal()
2197 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL); in qlcnic_83xx_set_rx_intr_coal()
2201 temp = adapter->recv_ctx->context_id; in qlcnic_83xx_set_rx_intr_coal()
2207 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_rx_intr_coal()
2209 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_intr_coal()
2217 static int qlcnic_83xx_set_tx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_tx_intr_coal() argument
2219 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_set_tx_intr_coal()
2224 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL); in qlcnic_83xx_set_tx_intr_coal()
2228 temp = adapter->tx_ring->ctx_id; in qlcnic_83xx_set_tx_intr_coal()
2234 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_tx_intr_coal()
2236 netdev_err(adapter->netdev, in qlcnic_83xx_set_tx_intr_coal()
2244 int qlcnic_83xx_set_rx_tx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_rx_tx_intr_coal() argument
2248 err = qlcnic_83xx_set_rx_intr_coal(adapter); in qlcnic_83xx_set_rx_tx_intr_coal()
2250 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_tx_intr_coal()
2253 err = qlcnic_83xx_set_tx_intr_coal(adapter); in qlcnic_83xx_set_rx_tx_intr_coal()
2255 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_tx_intr_coal()
2261 int qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter, in qlcnic_83xx_config_intr_coal() argument
2264 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_config_intr_coal()
2269 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_config_intr_coal()
2298 err = qlcnic_83xx_set_rx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2301 err = qlcnic_83xx_set_tx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2304 err = qlcnic_83xx_set_rx_tx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2308 netdev_err(adapter->netdev, in qlcnic_83xx_config_intr_coal()
2316 static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter, in qlcnic_83xx_handle_link_aen() argument
2319 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_handle_link_aen()
2339 qlcnic_advert_link_change(adapter, link_status); in qlcnic_83xx_handle_link_aen()
2345 struct qlcnic_adapter *adapter = data; in qlcnic_83xx_handle_aen() local
2349 mbx = adapter->ahw->mailbox; in qlcnic_83xx_handle_aen()
2351 resp = QLCRDX(adapter->ahw, QLCNIC_FW_MBX_CTRL); in qlcnic_83xx_handle_aen()
2355 event = readl(QLCNIC_MBX_FW(adapter->ahw, 0)); in qlcnic_83xx_handle_aen()
2357 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_handle_aen()
2362 adapter->stats.mbx_spurious_intr++; in qlcnic_83xx_handle_aen()
2366 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_handle_aen()
2367 writel(0, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_handle_aen()
2372 int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_nic_info() argument
2378 if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) { in qlcnic_83xx_set_nic_info()
2379 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_nic_info()
2385 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_SET_NIC_INFO); in qlcnic_83xx_set_nic_info()
2399 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_nic_info()
2402 dev_err(&adapter->pdev->dev, "Failed to set nic info%d\n", in qlcnic_83xx_set_nic_info()
2412 int qlcnic_83xx_get_nic_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_nic_info() argument
2419 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_nic_info()
2421 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_NIC_INFO); in qlcnic_83xx_get_nic_info()
2431 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_nic_info()
2433 dev_info(&adapter->pdev->dev, in qlcnic_83xx_get_nic_info()
2465 int qlcnic_get_pci_func_type(struct qlcnic_adapter *adapter, u16 type, in qlcnic_get_pci_func_type() argument
2468 struct device *dev = &adapter->pdev->dev; in qlcnic_get_pci_func_type()
2490 int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_pci_info() argument
2493 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_pci_info()
2494 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_get_pci_info()
2500 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_PCI_INFO); in qlcnic_83xx_get_pci_info()
2504 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_pci_info()
2518 err = qlcnic_get_pci_func_type(adapter, pci_info->type, in qlcnic_83xx_get_pci_info()
2549 int qlcnic_83xx_config_intrpt(struct qlcnic_adapter *adapter, bool op_type) in qlcnic_83xx_config_intrpt() argument
2556 max_ints = adapter->ahw->num_msix - 1; in qlcnic_83xx_config_intrpt()
2557 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTRPT); in qlcnic_83xx_config_intrpt()
2563 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_config_intrpt()
2564 cmd.req.arg[1] |= (adapter->ahw->pci_func << 8) | BIT_16; in qlcnic_83xx_config_intrpt()
2568 val = type | (adapter->ahw->intr_tbl[i].type << 4); in qlcnic_83xx_config_intrpt()
2569 if (adapter->ahw->intr_tbl[i].type == QLCNIC_INTRPT_MSIX) in qlcnic_83xx_config_intrpt()
2570 val |= (adapter->ahw->intr_tbl[i].id << 16); in qlcnic_83xx_config_intrpt()
2573 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_intrpt()
2575 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_intrpt()
2584 dev_info(&adapter->pdev->dev, in qlcnic_83xx_config_intrpt()
2586 adapter->ahw->intr_tbl[i].id); in qlcnic_83xx_config_intrpt()
2590 adapter->ahw->intr_tbl[i].id = MSW(val); in qlcnic_83xx_config_intrpt()
2591 adapter->ahw->intr_tbl[i].enabled = 1; in qlcnic_83xx_config_intrpt()
2593 adapter->ahw->intr_tbl[i].src = temp; in qlcnic_83xx_config_intrpt()
2595 adapter->ahw->intr_tbl[i].id = i; in qlcnic_83xx_config_intrpt()
2596 adapter->ahw->intr_tbl[i].enabled = 0; in qlcnic_83xx_config_intrpt()
2597 adapter->ahw->intr_tbl[i].src = 0; in qlcnic_83xx_config_intrpt()
2605 int qlcnic_83xx_lock_flash(struct qlcnic_adapter *adapter) in qlcnic_83xx_lock_flash() argument
2611 status = QLC_SHARED_REG_RD32(adapter, QLCNIC_FLASH_LOCK); in qlcnic_83xx_lock_flash()
2616 id = QLC_SHARED_REG_RD32(adapter, in qlcnic_83xx_lock_flash()
2618 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_flash()
2625 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, adapter->portnum); in qlcnic_83xx_lock_flash()
2629 void qlcnic_83xx_unlock_flash(struct qlcnic_adapter *adapter) in qlcnic_83xx_unlock_flash() argument
2631 QLC_SHARED_REG_RD32(adapter, QLCNIC_FLASH_UNLOCK); in qlcnic_83xx_unlock_flash()
2632 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, 0xFF); in qlcnic_83xx_unlock_flash()
2635 int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter, in qlcnic_83xx_lockless_flash_read32() argument
2645 dev_err(&adapter->pdev->dev, "Illegal addr = 0x%x\n", addr); in qlcnic_83xx_lockless_flash_read32()
2649 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_DIRECT_WINDOW, in qlcnic_83xx_lockless_flash_read32()
2659 ret = QLCRD32(adapter, indirect_add, &err); in qlcnic_83xx_lockless_flash_read32()
2672 qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_lockless_flash_read32()
2682 ret = QLCRD32(adapter, indirect_add, &err); in qlcnic_83xx_lockless_flash_read32()
2696 static int qlcnic_83xx_poll_flash_status_reg(struct qlcnic_adapter *adapter) in qlcnic_83xx_poll_flash_status_reg() argument
2703 status = QLCRD32(adapter, QLC_83XX_FLASH_STATUS, &err); in qlcnic_83xx_poll_flash_status_reg()
2720 int qlcnic_83xx_enable_flash_write(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_flash_write() argument
2724 cmd = adapter->ahw->fdt.write_statusreg_cmd; in qlcnic_83xx_enable_flash_write()
2725 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_enable_flash_write()
2727 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_enable_flash_write()
2728 adapter->ahw->fdt.write_enable_bits); in qlcnic_83xx_enable_flash_write()
2729 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_enable_flash_write()
2731 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_enable_flash_write()
2738 int qlcnic_83xx_disable_flash_write(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_flash_write() argument
2742 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_disable_flash_write()
2744 adapter->ahw->fdt.write_statusreg_cmd)); in qlcnic_83xx_disable_flash_write()
2745 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_disable_flash_write()
2746 adapter->ahw->fdt.write_disable_bits); in qlcnic_83xx_disable_flash_write()
2747 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_disable_flash_write()
2749 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_disable_flash_write()
2756 int qlcnic_83xx_read_flash_mfg_id(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_mfg_id() argument
2761 if (qlcnic_83xx_lock_flash(adapter)) in qlcnic_83xx_read_flash_mfg_id()
2764 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_read_flash_mfg_id()
2766 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_read_flash_mfg_id()
2768 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_read_flash_mfg_id()
2770 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2774 mfg_id = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err); in qlcnic_83xx_read_flash_mfg_id()
2776 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2780 adapter->flash_mfg_id = (mfg_id & 0xFF); in qlcnic_83xx_read_flash_mfg_id()
2781 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2786 int qlcnic_83xx_read_flash_descriptor_table(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_descriptor_table() argument
2793 if (qlcnic_83xx_lock_flash(adapter)) in qlcnic_83xx_read_flash_descriptor_table()
2796 memset(&adapter->ahw->fdt, 0, fdt_size); in qlcnic_83xx_read_flash_descriptor_table()
2797 ret = qlcnic_83xx_lockless_flash_read32(adapter, QLCNIC_FDT_LOCATION, in qlcnic_83xx_read_flash_descriptor_table()
2798 (u8 *)&adapter->ahw->fdt, in qlcnic_83xx_read_flash_descriptor_table()
2800 qlcnic_swap32_buffer((u32 *)&adapter->ahw->fdt, count); in qlcnic_83xx_read_flash_descriptor_table()
2801 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_descriptor_table()
2805 int qlcnic_83xx_erase_flash_sector(struct qlcnic_adapter *adapter, in qlcnic_83xx_erase_flash_sector() argument
2811 if (qlcnic_83xx_lock_flash(adapter) != 0) in qlcnic_83xx_erase_flash_sector()
2814 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) { in qlcnic_83xx_erase_flash_sector()
2815 ret = qlcnic_83xx_enable_flash_write(adapter); in qlcnic_83xx_erase_flash_sector()
2817 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2818 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2825 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_erase_flash_sector()
2827 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2828 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2837 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_erase_flash_sector()
2839 cmd = QLC_83XX_FLASH_FDT_ERASE_DEF_SIG | adapter->ahw->fdt.erase_cmd; in qlcnic_83xx_erase_flash_sector()
2840 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) in qlcnic_83xx_erase_flash_sector()
2841 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, cmd); in qlcnic_83xx_erase_flash_sector()
2843 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_erase_flash_sector()
2845 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_erase_flash_sector()
2848 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_erase_flash_sector()
2850 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2851 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2856 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) { in qlcnic_83xx_erase_flash_sector()
2857 ret = qlcnic_83xx_disable_flash_write(adapter); in qlcnic_83xx_erase_flash_sector()
2859 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2860 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2866 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2871 int qlcnic_83xx_flash_write32(struct qlcnic_adapter *adapter, u32 addr, in qlcnic_83xx_flash_write32() argument
2877 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, addr1); in qlcnic_83xx_flash_write32()
2878 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data); in qlcnic_83xx_flash_write32()
2879 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_write32()
2881 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_write32()
2883 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_write32()
2891 int qlcnic_83xx_flash_bulk_write(struct qlcnic_adapter *adapter, u32 addr, in qlcnic_83xx_flash_bulk_write() argument
2899 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2904 temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err); in qlcnic_83xx_flash_bulk_write()
2908 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_SPI_CONTROL, in qlcnic_83xx_flash_bulk_write()
2910 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2914 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data++); in qlcnic_83xx_flash_bulk_write()
2915 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2917 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2919 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2925 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2929 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_flash_bulk_write()
2931 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2933 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2935 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2942 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2946 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data++); in qlcnic_83xx_flash_bulk_write()
2947 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2949 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2951 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2956 ret = QLCRD32(adapter, QLC_83XX_FLASH_SPI_STATUS, &err); in qlcnic_83xx_flash_bulk_write()
2961 dev_err(&adapter->pdev->dev, "%s: failed at %d\n", in qlcnic_83xx_flash_bulk_write()
2964 temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err); in qlcnic_83xx_flash_bulk_write()
2968 qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_flash_bulk_write()
2976 static void qlcnic_83xx_recover_driver_lock(struct qlcnic_adapter *adapter) in qlcnic_83xx_recover_driver_lock() argument
2980 val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); in qlcnic_83xx_recover_driver_lock()
2985 val = val | ((adapter->portnum << 2) | in qlcnic_83xx_recover_driver_lock()
2987 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
2988 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
2991 val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); in qlcnic_83xx_recover_driver_lock()
2993 if (id == adapter->portnum) { in qlcnic_83xx_recover_driver_lock()
2996 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
2998 QLCRDX(adapter->ahw, QLC_83XX_DRV_UNLOCK); in qlcnic_83xx_recover_driver_lock()
3001 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
3002 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3005 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3010 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3016 int qlcnic_83xx_lock_driver(struct qlcnic_adapter *adapter) in qlcnic_83xx_lock_driver() argument
3022 status = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK); in qlcnic_83xx_lock_driver()
3030 temp = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3033 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3036 dev_info(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3039 qlcnic_83xx_recover_driver_lock(adapter); in qlcnic_83xx_lock_driver()
3043 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3051 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3057 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3060 val = lock_alive_counter << 8 | adapter->portnum; in qlcnic_83xx_lock_driver()
3061 QLCWRX(adapter->ahw, QLC_83XX_DRV_LOCK_ID, val); in qlcnic_83xx_lock_driver()
3066 void qlcnic_83xx_unlock_driver(struct qlcnic_adapter *adapter) in qlcnic_83xx_unlock_driver() argument
3070 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_unlock_driver()
3074 if (id != adapter->portnum) in qlcnic_83xx_unlock_driver()
3075 dev_err(&adapter->pdev->dev, in qlcnic_83xx_unlock_driver()
3077 __func__, adapter->portnum, id); in qlcnic_83xx_unlock_driver()
3080 QLCWRX(adapter->ahw, QLC_83XX_DRV_LOCK_ID, val); in qlcnic_83xx_unlock_driver()
3081 QLCRDX(adapter->ahw, QLC_83XX_DRV_UNLOCK); in qlcnic_83xx_unlock_driver()
3084 int qlcnic_ms_mem_write128(struct qlcnic_adapter *adapter, u64 addr, in qlcnic_ms_mem_write128() argument
3094 mutex_lock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3095 qlcnic_ind_wr(adapter, QLCNIC_MS_ADDR_HI, 0); in qlcnic_ms_mem_write128()
3102 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3106 qlcnic_ind_wr(adapter, QLCNIC_MS_ADDR_LO, addr); in qlcnic_ms_mem_write128()
3107 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_LO, *data++); in qlcnic_ms_mem_write128()
3108 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_HI, *data++); in qlcnic_ms_mem_write128()
3109 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_ULO, *data++); in qlcnic_ms_mem_write128()
3110 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_UHI, *data++); in qlcnic_ms_mem_write128()
3111 qlcnic_ind_wr(adapter, QLCNIC_MS_CTRL, QLCNIC_TA_WRITE_ENABLE); in qlcnic_ms_mem_write128()
3112 qlcnic_ind_wr(adapter, QLCNIC_MS_CTRL, QLCNIC_TA_WRITE_START); in qlcnic_ms_mem_write128()
3115 temp = qlcnic_ind_rd(adapter, QLCNIC_MS_CTRL); in qlcnic_ms_mem_write128()
3125 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3130 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3135 int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr, in qlcnic_83xx_flash_read32() argument
3142 if (qlcnic_83xx_lock_flash(adapter) != 0) in qlcnic_83xx_flash_read32()
3146 dev_err(&adapter->pdev->dev, "Illegal addr = 0x%x\n", addr); in qlcnic_83xx_flash_read32()
3147 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_flash_read32()
3152 if (qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_flash_read32()
3155 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_flash_read32()
3160 ret = QLCRD32(adapter, indirect_addr, &err); in qlcnic_83xx_flash_read32()
3170 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_flash_read32()
3175 void qlcnic_83xx_get_port_type(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_port_type() argument
3177 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_port_type()
3182 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_STATUS); in qlcnic_83xx_get_port_type()
3186 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_port_type()
3188 dev_info(&adapter->pdev->dev, in qlcnic_83xx_get_port_type()
3209 int qlcnic_83xx_test_link(struct qlcnic_adapter *adapter) in qlcnic_83xx_test_link() argument
3215 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_test_link()
3217 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_test_link()
3218 pci_func = adapter->portnum; in qlcnic_83xx_test_link()
3224 dev_info(&adapter->pdev->dev, "link state down\n"); in qlcnic_83xx_test_link()
3228 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_STATUS); in qlcnic_83xx_test_link()
3232 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_test_link()
3234 dev_info(&adapter->pdev->dev, in qlcnic_83xx_test_link()
3293 int qlcnic_83xx_get_link_ksettings(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_link_ksettings() argument
3296 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_link_ksettings()
3301 if (!test_bit(__QLCNIC_MAINTENANCE_MODE, &adapter->state)) { in qlcnic_83xx_get_link_ksettings()
3303 status = qlcnic_83xx_get_port_info(adapter); in qlcnic_83xx_get_link_ksettings()
3305 config = qlcnic_83xx_test_link(adapter); in qlcnic_83xx_get_link_ksettings()
3312 if (netif_running(adapter->netdev) && ahw->has_link_events) { in qlcnic_83xx_get_link_ksettings()
3394 int qlcnic_83xx_set_link_ksettings(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_link_ksettings() argument
3397 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_link_ksettings()
3398 u32 config = adapter->ahw->port_config; in qlcnic_83xx_set_link_ksettings()
3403 netdev_info(adapter->netdev, in qlcnic_83xx_set_link_ksettings()
3444 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_set_link_ksettings()
3446 netdev_info(adapter->netdev, in qlcnic_83xx_set_link_ksettings()
3467 static u64 *qlcnic_83xx_fill_stats(struct qlcnic_adapter *adapter, in qlcnic_83xx_fill_stats() argument
3474 err = qlcnic_issue_cmd(adapter, cmd); in qlcnic_83xx_fill_stats()
3476 dev_info(&adapter->pdev->dev, in qlcnic_83xx_fill_stats()
3517 dev_warn(&adapter->pdev->dev, "Unknown get statistics mode\n"); in qlcnic_83xx_fill_stats()
3523 void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data) in qlcnic_83xx_get_stats() argument
3526 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_get_stats()
3529 ret = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_STATISTICS); in qlcnic_83xx_get_stats()
3533 cmd.req.arg[1] = BIT_1 | (adapter->tx_ring->ctx_id << 16); in qlcnic_83xx_get_stats()
3535 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, in qlcnic_83xx_get_stats()
3542 cmd.req.arg[1] = BIT_2 | (adapter->portnum << 16); in qlcnic_83xx_get_stats()
3545 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, in qlcnic_83xx_get_stats()
3552 cmd.req.arg[1] = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_get_stats()
3555 data = qlcnic_83xx_fill_stats(adapter, &cmd, data, in qlcnic_83xx_get_stats()
3566 int qlcnic_83xx_extend_md_capab(struct qlcnic_adapter *adapter) in qlcnic_83xx_extend_md_capab() argument
3571 err = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_extend_md_capab()
3580 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_extend_md_capab()
3582 dev_err(&adapter->pdev->dev, in qlcnic_83xx_extend_md_capab()
3588 int qlcnic_83xx_reg_test(struct qlcnic_adapter *adapter) in qlcnic_83xx_reg_test() argument
3592 major = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MAJOR); in qlcnic_83xx_reg_test()
3593 minor = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MINOR); in qlcnic_83xx_reg_test()
3594 sub = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_SUB); in qlcnic_83xx_reg_test()
3596 if (adapter->fw_version != QLCNIC_VERSION_CODE(major, minor, sub)) { in qlcnic_83xx_reg_test()
3597 dev_info(&adapter->pdev->dev, "%s: Reg test failed\n", in qlcnic_83xx_reg_test()
3604 inline int qlcnic_83xx_get_regs_len(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_regs_len() argument
3607 sizeof(*adapter->ahw->ext_reg_tbl)) + in qlcnic_83xx_get_regs_len()
3609 sizeof(*adapter->ahw->reg_tbl)); in qlcnic_83xx_get_regs_len()
3612 int qlcnic_83xx_get_registers(struct qlcnic_adapter *adapter, u32 *regs_buff) in qlcnic_83xx_get_registers() argument
3618 regs_buff[i] = QLC_SHARED_REG_RD32(adapter, j); in qlcnic_83xx_get_registers()
3621 regs_buff[i++] = QLCRDX(adapter->ahw, j); in qlcnic_83xx_get_registers()
3627 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_interrupt_test() local
3628 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_interrupt_test()
3630 u8 val, drv_sds_rings = adapter->drv_sds_rings; in qlcnic_83xx_interrupt_test()
3631 u8 drv_tx_rings = adapter->drv_tx_rings; in qlcnic_83xx_interrupt_test()
3636 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_interrupt_test()
3641 if (qlcnic_get_diag_lock(adapter)) { in qlcnic_83xx_interrupt_test()
3652 ret = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_INTRPT_TEST); in qlcnic_83xx_interrupt_test()
3656 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_interrupt_test()
3665 ret = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_interrupt_test()
3670 dev_info(&adapter->pdev->dev, in qlcnic_83xx_interrupt_test()
3674 dev_err(&adapter->pdev->dev, in qlcnic_83xx_interrupt_test()
3687 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_interrupt_test()
3688 adapter->drv_tx_rings = drv_tx_rings; in qlcnic_83xx_interrupt_test()
3689 qlcnic_release_diag_lock(adapter); in qlcnic_83xx_interrupt_test()
3693 void qlcnic_83xx_get_pauseparam(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_pauseparam() argument
3696 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_pauseparam()
3700 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_get_pauseparam()
3702 dev_err(&adapter->pdev->dev, in qlcnic_83xx_get_pauseparam()
3729 int qlcnic_83xx_set_pauseparam(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_pauseparam() argument
3732 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_pauseparam()
3736 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_set_pauseparam()
3738 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_pauseparam()
3768 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_set_pauseparam()
3770 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_pauseparam()
3777 static int qlcnic_83xx_read_flash_status_reg(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_status_reg() argument
3782 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_read_flash_status_reg()
3784 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_read_flash_status_reg()
3786 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_read_flash_status_reg()
3790 temp = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err); in qlcnic_83xx_read_flash_status_reg()
3797 int qlcnic_83xx_flash_test(struct qlcnic_adapter *adapter) in qlcnic_83xx_flash_test() argument
3801 status = qlcnic_83xx_read_flash_status_reg(adapter); in qlcnic_83xx_flash_test()
3803 dev_info(&adapter->pdev->dev, "%s: EEPROM test failed.\n", in qlcnic_83xx_flash_test()
3812 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_shutdown() local
3813 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_shutdown()
3817 qlcnic_cancel_idc_work(adapter); in qlcnic_83xx_shutdown()
3820 qlcnic_down(adapter, netdev); in qlcnic_83xx_shutdown()
3822 qlcnic_83xx_disable_mbx_intr(adapter); in qlcnic_83xx_shutdown()
3823 cancel_delayed_work_sync(&adapter->idc_aen_work); in qlcnic_83xx_shutdown()
3832 static int qlcnic_83xx_resume(struct qlcnic_adapter *adapter) in qlcnic_83xx_resume() argument
3834 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_resume()
3838 err = qlcnic_83xx_idc_init(adapter); in qlcnic_83xx_resume()
3844 qlcnic_83xx_set_vnic_opmode(adapter); in qlcnic_83xx_resume()
3846 err = qlcnic_83xx_check_vnic_state(adapter); in qlcnic_83xx_resume()
3852 err = qlcnic_83xx_idc_reattach_driver(adapter); in qlcnic_83xx_resume()
3856 qlcnic_schedule_work(adapter, qlcnic_83xx_idc_poll_dev_state, in qlcnic_83xx_resume()
3877 qlcnic_83xx_notify_cmd_completion(struct qlcnic_adapter *adapter, in qlcnic_83xx_notify_cmd_completion() argument
3890 static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter) in qlcnic_83xx_flush_mbx_queue() argument
3892 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue()
3900 dev_info(&adapter->pdev->dev, "%s: Mailbox command 0x%x\n", in qlcnic_83xx_flush_mbx_queue()
3904 qlcnic_83xx_notify_cmd_completion(adapter, cmd); in qlcnic_83xx_flush_mbx_queue()
3910 static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter) in qlcnic_83xx_check_mbx_status() argument
3912 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_check_mbx_status()
3929 static inline void qlcnic_83xx_signal_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_signal_mbx_cmd() argument
3933 QLCWRX(adapter->ahw, QLCNIC_HOST_MBX_CTRL, QLCNIC_SET_OWNER); in qlcnic_83xx_signal_mbx_cmd()
3935 QLCWRX(adapter->ahw, QLCNIC_FW_MBX_CTRL, QLCNIC_CLR_OWNER); in qlcnic_83xx_signal_mbx_cmd()
3938 static void qlcnic_83xx_dequeue_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_dequeue_mbx_cmd() argument
3941 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd()
3950 qlcnic_83xx_notify_cmd_completion(adapter, cmd); in qlcnic_83xx_dequeue_mbx_cmd()
3953 static void qlcnic_83xx_encode_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_encode_mbx_cmd() argument
3957 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_encode_mbx_cmd()
3976 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_encode_mbx_cmd()
3988 void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *adapter) in qlcnic_83xx_detach_mailbox_work() argument
3990 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work()
3999 qlcnic_83xx_flush_mbx_queue(adapter); in qlcnic_83xx_detach_mailbox_work()
4002 static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_enqueue_mbx_cmd() argument
4006 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd()
4029 static int qlcnic_83xx_check_mac_rcode(struct qlcnic_adapter *adapter, in qlcnic_83xx_check_mac_rcode() argument
4036 fw_data = readl(QLCNIC_MBX_FW(adapter->ahw, 2)); in qlcnic_83xx_check_mac_rcode()
4049 static void qlcnic_83xx_decode_mbx_rsp(struct qlcnic_adapter *adapter, in qlcnic_83xx_decode_mbx_rsp() argument
4052 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_decode_mbx_rsp()
4053 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_decode_mbx_rsp()
4059 qlcnic_83xx_get_mbx_data(adapter, cmd); in qlcnic_83xx_decode_mbx_rsp()
4067 if (!qlcnic_83xx_check_mac_rcode(adapter, cmd)) in qlcnic_83xx_decode_mbx_rsp()
4074 qlcnic_dump_mbx(adapter, cmd); in qlcnic_83xx_decode_mbx_rsp()
4080 static inline void qlcnic_dump_mailbox_registers(struct qlcnic_adapter *adapter) in qlcnic_dump_mailbox_registers() argument
4082 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_dump_mailbox_registers()
4086 …dev_info(&adapter->pdev->dev, "Mbx interrupt mask=0x%x, Mbx interrupt enable=0x%x, Host mbx contro… in qlcnic_dump_mailbox_registers()
4097 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker() local
4099 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_mailbox_worker()
4105 ahw = adapter->ahw; in qlcnic_83xx_mailbox_worker()
4108 if (qlcnic_83xx_check_mbx_status(adapter)) { in qlcnic_83xx_mailbox_worker()
4109 qlcnic_83xx_flush_mbx_queue(adapter); in qlcnic_83xx_mailbox_worker()
4127 mbx_ops->encode_cmd(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4128 mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST); in qlcnic_83xx_mailbox_worker()
4132 mbx_ops->decode_resp(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4133 mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_COMPLETION); in qlcnic_83xx_mailbox_worker()
4139 qlcnic_dump_mailbox_registers(adapter); in qlcnic_83xx_mailbox_worker()
4140 qlcnic_83xx_get_mbx_data(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4141 qlcnic_dump_mbx(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4142 qlcnic_83xx_idc_request_reset(adapter, in qlcnic_83xx_mailbox_worker()
4146 mbx_ops->dequeue_cmd(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4158 int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *adapter) in qlcnic_83xx_init_mailbox_work() argument
4160 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_init_mailbox_work()
4169 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4190 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_error_detected() local
4198 set_bit(__QLCNIC_AER, &adapter->state); in qlcnic_83xx_io_error_detected()
4199 set_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_83xx_io_error_detected()
4201 qlcnic_83xx_aer_stop_poll_work(adapter); in qlcnic_83xx_io_error_detected()
4211 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_slot_reset() local
4223 err = qlcnic_83xx_aer_reset(adapter); in qlcnic_83xx_io_slot_reset()
4227 clear_bit(__QLCNIC_AER, &adapter->state); in qlcnic_83xx_io_slot_reset()
4228 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_83xx_io_slot_reset()
4234 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_resume() local
4236 if (test_and_clear_bit(__QLCNIC_AER, &adapter->state)) in qlcnic_83xx_io_resume()
4237 qlcnic_83xx_aer_start_poll_work(adapter); in qlcnic_83xx_io_resume()