Lines Matching full:adapter

268 int qlcnic_83xx_get_fw_version(struct qlcnic_adapter *adapter)  in qlcnic_83xx_get_fw_version()  argument
271 struct pci_dev *pdev = adapter->pdev; in qlcnic_83xx_get_fw_version()
273 fw_major = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MAJOR); in qlcnic_83xx_get_fw_version()
274 fw_minor = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_MINOR); in qlcnic_83xx_get_fw_version()
275 fw_build = QLC_SHARED_REG_RD32(adapter, QLCNIC_FW_VERSION_SUB); in qlcnic_83xx_get_fw_version()
276 adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build); in qlcnic_83xx_get_fw_version()
281 return adapter->fw_version; in qlcnic_83xx_get_fw_version()
284 static int __qlcnic_set_win_base(struct qlcnic_adapter *adapter, u32 addr) in __qlcnic_set_win_base() argument
289 base = adapter->ahw->pci_base0 + in __qlcnic_set_win_base()
290 QLC_83XX_CRB_WIN_FUNC(adapter->ahw->pci_func); in __qlcnic_set_win_base()
299 int qlcnic_83xx_rd_reg_indirect(struct qlcnic_adapter *adapter, ulong addr, in qlcnic_83xx_rd_reg_indirect() argument
302 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_rd_reg_indirect()
304 *err = __qlcnic_set_win_base(adapter, (u32) addr); in qlcnic_83xx_rd_reg_indirect()
308 dev_err(&adapter->pdev->dev, in qlcnic_83xx_rd_reg_indirect()
314 int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *adapter, ulong addr, in qlcnic_83xx_wrt_reg_indirect() argument
318 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_wrt_reg_indirect()
320 err = __qlcnic_set_win_base(adapter, (u32) addr); in qlcnic_83xx_wrt_reg_indirect()
325 dev_err(&adapter->pdev->dev, in qlcnic_83xx_wrt_reg_indirect()
332 static void qlcnic_83xx_enable_legacy(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_legacy() argument
334 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_enable_legacy()
337 adapter->tgt_status_reg = ahw->pci_base0 + QLC_83XX_INTX_PTR; in qlcnic_83xx_enable_legacy()
338 adapter->tgt_mask_reg = ahw->pci_base0 + QLC_83XX_INTX_MASK; in qlcnic_83xx_enable_legacy()
339 adapter->isr_int_vec = ahw->pci_base0 + QLC_83XX_INTX_TRGR; in qlcnic_83xx_enable_legacy()
340 adapter->msix_entries[0].vector = adapter->pdev->irq; in qlcnic_83xx_enable_legacy()
341 dev_info(&adapter->pdev->dev, "using legacy interrupt\n"); in qlcnic_83xx_enable_legacy()
344 static int qlcnic_83xx_calculate_msix_vector(struct qlcnic_adapter *adapter) in qlcnic_83xx_calculate_msix_vector() argument
348 num_msix = adapter->drv_sds_rings; in qlcnic_83xx_calculate_msix_vector()
353 if (!(adapter->flags & QLCNIC_TX_INTR_SHARED)) in qlcnic_83xx_calculate_msix_vector()
354 num_msix += adapter->drv_tx_rings; in qlcnic_83xx_calculate_msix_vector()
359 int qlcnic_83xx_setup_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_setup_intr() argument
361 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_setup_intr()
364 if (adapter->flags & QLCNIC_TSS_RSS) { in qlcnic_83xx_setup_intr()
365 err = qlcnic_setup_tss_rss_intr(adapter); in qlcnic_83xx_setup_intr()
370 num_msix = qlcnic_83xx_calculate_msix_vector(adapter); in qlcnic_83xx_setup_intr()
372 err = qlcnic_enable_msix(adapter, num_msix); in qlcnic_83xx_setup_intr()
376 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_setup_intr()
379 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_setup_intr()
382 adapter->drv_sds_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_setup_intr()
383 adapter->drv_tx_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_setup_intr()
394 if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) { in qlcnic_83xx_setup_intr()
395 if (adapter->ahw->pci_func >= QLC_MAX_LEGACY_FUNC_SUPP) { in qlcnic_83xx_setup_intr()
396 …dev_err(&adapter->pdev->dev, "PCI function number 8 and higher are not supported with legacy inter… in qlcnic_83xx_setup_intr()
401 qlcnic_83xx_enable_legacy(adapter); in qlcnic_83xx_setup_intr()
405 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_setup_intr()
416 static inline void qlcnic_83xx_clear_legacy_intr_mask(struct qlcnic_adapter *adapter) in qlcnic_83xx_clear_legacy_intr_mask() argument
418 writel(0, adapter->tgt_mask_reg); in qlcnic_83xx_clear_legacy_intr_mask()
421 static inline void qlcnic_83xx_set_legacy_intr_mask(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_legacy_intr_mask() argument
423 if (adapter->tgt_mask_reg) in qlcnic_83xx_set_legacy_intr_mask()
424 writel(1, adapter->tgt_mask_reg); in qlcnic_83xx_set_legacy_intr_mask()
428 *adapter) in qlcnic_83xx_enable_legacy_msix_mbx_intr()
437 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_enable_legacy_msix_mbx_intr()
438 writel(0, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_enable_legacy_msix_mbx_intr()
441 void qlcnic_83xx_disable_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_mbx_intr() argument
445 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_disable_mbx_intr()
446 writel(1, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_disable_mbx_intr()
447 QLCWRX(adapter->ahw, QLCNIC_MBX_INTR_ENBL, 0); in qlcnic_83xx_disable_mbx_intr()
450 static inline void qlcnic_83xx_get_mbx_data(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_mbx_data() argument
459 cmd->rsp.arg[i] = readl(QLCNIC_MBX_FW(adapter->ahw, i)); in qlcnic_83xx_get_mbx_data()
462 irqreturn_t qlcnic_83xx_clear_legacy_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_clear_legacy_intr() argument
465 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_clear_legacy_intr()
468 intr_val = readl(adapter->tgt_status_reg); in qlcnic_83xx_clear_legacy_intr()
473 if (QLC_83XX_INTX_FUNC(intr_val) != adapter->ahw->pci_func) { in qlcnic_83xx_clear_legacy_intr()
474 adapter->stats.spurious_intr++; in qlcnic_83xx_clear_legacy_intr()
481 writel_relaxed(0, adapter->isr_int_vec); in qlcnic_83xx_clear_legacy_intr()
482 intr_val = readl(adapter->isr_int_vec); in qlcnic_83xx_clear_legacy_intr()
484 intr_val = readl(adapter->tgt_status_reg); in qlcnic_83xx_clear_legacy_intr()
500 static void qlcnic_83xx_poll_process_aen(struct qlcnic_adapter *adapter) in qlcnic_83xx_poll_process_aen() argument
503 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen()
507 resp = QLCRDX(adapter->ahw, QLCNIC_FW_MBX_CTRL); in qlcnic_83xx_poll_process_aen()
511 event = readl(QLCNIC_MBX_FW(adapter->ahw, 0)); in qlcnic_83xx_poll_process_aen()
513 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_poll_process_aen()
519 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_poll_process_aen()
525 struct qlcnic_adapter *adapter = data; in qlcnic_83xx_intr() local
527 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_intr()
529 if (qlcnic_83xx_clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_83xx_intr()
532 qlcnic_83xx_poll_process_aen(adapter); in qlcnic_83xx_intr()
537 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_intr()
541 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) { in qlcnic_83xx_intr()
542 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_intr()
544 sds_ring = &adapter->recv_ctx->sds_rings[0]; in qlcnic_83xx_intr()
554 struct qlcnic_adapter *adapter = sds_ring->adapter; in qlcnic_83xx_tmp_intr() local
556 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_tmp_intr()
559 if (adapter->nic_ops->clear_legacy_intr(adapter) == IRQ_NONE) in qlcnic_83xx_tmp_intr()
563 adapter->ahw->diag_cnt++; in qlcnic_83xx_tmp_intr()
564 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_tmp_intr()
569 void qlcnic_83xx_free_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_free_mbx_intr() argument
573 if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) in qlcnic_83xx_free_mbx_intr()
574 qlcnic_83xx_set_legacy_intr_mask(adapter); in qlcnic_83xx_free_mbx_intr()
576 qlcnic_83xx_disable_mbx_intr(adapter); in qlcnic_83xx_free_mbx_intr()
578 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_free_mbx_intr()
579 num_msix = adapter->ahw->num_msix - 1; in qlcnic_83xx_free_mbx_intr()
585 if (adapter->msix_entries) { in qlcnic_83xx_free_mbx_intr()
586 synchronize_irq(adapter->msix_entries[num_msix].vector); in qlcnic_83xx_free_mbx_intr()
587 free_irq(adapter->msix_entries[num_msix].vector, adapter); in qlcnic_83xx_free_mbx_intr()
591 int qlcnic_83xx_setup_mbx_intr(struct qlcnic_adapter *adapter) in qlcnic_83xx_setup_mbx_intr() argument
598 if (!(adapter->flags & QLCNIC_MSI_ENABLED) && in qlcnic_83xx_setup_mbx_intr()
599 !(adapter->flags & QLCNIC_MSIX_ENABLED)) in qlcnic_83xx_setup_mbx_intr()
602 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_setup_mbx_intr()
604 val = adapter->msix_entries[adapter->ahw->num_msix - 1].vector; in qlcnic_83xx_setup_mbx_intr()
605 err = request_irq(val, handler, flags, "qlcnic-MB", adapter); in qlcnic_83xx_setup_mbx_intr()
607 dev_err(&adapter->pdev->dev, in qlcnic_83xx_setup_mbx_intr()
613 val = adapter->msix_entries[0].vector; in qlcnic_83xx_setup_mbx_intr()
614 err = request_irq(val, handler, flags, "qlcnic", adapter); in qlcnic_83xx_setup_mbx_intr()
616 dev_err(&adapter->pdev->dev, in qlcnic_83xx_setup_mbx_intr()
620 qlcnic_83xx_clear_legacy_intr_mask(adapter); in qlcnic_83xx_setup_mbx_intr()
624 qlcnic_83xx_enable_mbx_interrupt(adapter); in qlcnic_83xx_setup_mbx_intr()
629 void qlcnic_83xx_get_func_no(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_func_no() argument
631 u32 val = QLCRDX(adapter->ahw, QLCNIC_INFORMANT); in qlcnic_83xx_get_func_no()
632 adapter->ahw->pci_func = (val >> 24) & 0xff; in qlcnic_83xx_get_func_no()
635 int qlcnic_83xx_cam_lock(struct qlcnic_adapter *adapter) in qlcnic_83xx_cam_lock() argument
640 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_cam_lock()
647 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, in qlcnic_83xx_cam_lock()
657 void qlcnic_83xx_cam_unlock(struct qlcnic_adapter *adapter) in qlcnic_83xx_cam_unlock() argument
660 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_cam_unlock()
666 void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf, in qlcnic_83xx_read_crb() argument
672 if (qlcnic_api_lock(adapter)) { in qlcnic_83xx_read_crb()
673 dev_err(&adapter->pdev->dev, in qlcnic_83xx_read_crb()
679 data = QLCRD32(adapter, (u32) offset, &ret); in qlcnic_83xx_read_crb()
680 qlcnic_api_unlock(adapter); in qlcnic_83xx_read_crb()
683 dev_err(&adapter->pdev->dev, in qlcnic_83xx_read_crb()
691 void qlcnic_83xx_write_crb(struct qlcnic_adapter *adapter, char *buf, in qlcnic_83xx_write_crb() argument
697 qlcnic_83xx_wrt_reg_indirect(adapter, (u32) offset, data); in qlcnic_83xx_write_crb()
700 int qlcnic_83xx_get_port_info(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_port_info() argument
702 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_port_info()
705 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_get_port_info()
707 dev_err(&adapter->pdev->dev, in qlcnic_83xx_get_port_info()
728 static void qlcnic_83xx_set_mac_filter_count(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_mac_filter_count() argument
730 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_mac_filter_count()
744 void qlcnic_83xx_enable_mbx_interrupt(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_mbx_interrupt() argument
748 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_enable_mbx_interrupt()
749 val = BIT_2 | ((adapter->ahw->num_msix - 1) << 8); in qlcnic_83xx_enable_mbx_interrupt()
753 QLCWRX(adapter->ahw, QLCNIC_MBX_INTR_ENBL, val); in qlcnic_83xx_enable_mbx_interrupt()
754 qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter); in qlcnic_83xx_enable_mbx_interrupt()
757 void qlcnic_83xx_check_vf(struct qlcnic_adapter *adapter, in qlcnic_83xx_check_vf() argument
761 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_check_vf()
764 qlcnic_get_func_no(adapter); in qlcnic_83xx_check_vf()
766 if (qlcnic_sriov_vf_check(adapter)) { in qlcnic_83xx_check_vf()
767 qlcnic_sriov_vf_set_ops(adapter); in qlcnic_83xx_check_vf()
772 op_mode = QLCRDX(adapter->ahw, QLC_83XX_DRV_OP_MODE); in qlcnic_83xx_check_vf()
781 dev_info(&adapter->pdev->dev, in qlcnic_83xx_check_vf()
784 adapter->nic_ops = &qlcnic_vf_ops; in qlcnic_83xx_check_vf()
786 if (pci_find_ext_capability(adapter->pdev, in qlcnic_83xx_check_vf()
788 set_bit(__QLCNIC_SRIOV_CAPABLE, &adapter->state); in qlcnic_83xx_check_vf()
789 adapter->nic_ops = &qlcnic_83xx_ops; in qlcnic_83xx_check_vf()
793 static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,
795 static void qlcnic_83xx_handle_idc_comp_aen(struct qlcnic_adapter *adapter,
798 void qlcnic_dump_mbx(struct qlcnic_adapter *adapter, in qlcnic_dump_mbx() argument
806 dev_info(&adapter->pdev->dev, in qlcnic_dump_mbx()
814 dev_info(&adapter->pdev->dev, in qlcnic_dump_mbx()
824 static void qlcnic_83xx_poll_for_mbx_completion(struct qlcnic_adapter *adapter, in qlcnic_83xx_poll_for_mbx_completion() argument
827 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_poll_for_mbx_completion()
841 dev_err(&adapter->pdev->dev, in qlcnic_83xx_poll_for_mbx_completion()
848 int qlcnic_83xx_issue_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_issue_cmd() argument
851 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_issue_cmd()
852 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_issue_cmd()
861 err = mbx->ops->enqueue_cmd(adapter, cmd, &timeout); in qlcnic_83xx_issue_cmd()
863 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
873 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
883 qlcnic_83xx_poll_for_mbx_completion(adapter, cmd); in qlcnic_83xx_issue_cmd()
886 dev_err(&adapter->pdev->dev, in qlcnic_83xx_issue_cmd()
890 qlcnic_83xx_detach_mailbox_work(adapter); in qlcnic_83xx_issue_cmd()
897 struct qlcnic_adapter *adapter, u32 type) in qlcnic_83xx_alloc_mbx_args() argument
922 temp = adapter->ahw->fw_hal_version << 29; in qlcnic_83xx_alloc_mbx_args()
929 dev_err(&adapter->pdev->dev, "%s: Invalid mailbox command opcode 0x%x\n", in qlcnic_83xx_alloc_mbx_args()
936 struct qlcnic_adapter *adapter; in qlcnic_83xx_idc_aen_work() local
940 adapter = container_of(work, struct qlcnic_adapter, idc_aen_work.work); in qlcnic_83xx_idc_aen_work()
941 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_IDC_ACK); in qlcnic_83xx_idc_aen_work()
946 cmd.req.arg[i] = adapter->ahw->mbox_aen[i]; in qlcnic_83xx_idc_aen_work()
948 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_idc_aen_work()
950 dev_info(&adapter->pdev->dev, in qlcnic_83xx_idc_aen_work()
955 static void qlcnic_83xx_handle_idc_comp_aen(struct qlcnic_adapter *adapter, in qlcnic_83xx_handle_idc_comp_aen() argument
958 dev_dbg(&adapter->pdev->dev, "Completion AEN:0x%x.\n", in qlcnic_83xx_handle_idc_comp_aen()
960 clear_bit(QLC_83XX_IDC_COMP_AEN, &adapter->ahw->idc.status); in qlcnic_83xx_handle_idc_comp_aen()
964 static void __qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter) in __qlcnic_83xx_process_aen() argument
966 struct qlcnic_hardware_context *ahw = adapter->ahw; in __qlcnic_83xx_process_aen()
976 qlcnic_83xx_handle_link_aen(adapter, event); in __qlcnic_83xx_process_aen()
979 qlcnic_83xx_handle_idc_comp_aen(adapter, event); in __qlcnic_83xx_process_aen()
983 adapter->ahw->mbox_aen[i] = QLCNIC_MBX_RSP(event[i]); in __qlcnic_83xx_process_aen()
984 queue_delayed_work(adapter->qlcnic_wq, in __qlcnic_83xx_process_aen()
985 &adapter->idc_aen_work, 0); in __qlcnic_83xx_process_aen()
991 qlcnic_sriov_handle_bc_event(adapter, event[1]); in __qlcnic_83xx_process_aen()
994 dev_info(&adapter->pdev->dev, "SFP+ Insert AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
998 dev_info(&adapter->pdev->dev, "SFP Removed AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
1002 qlcnic_dcb_aen_handler(adapter->dcb, (void *)&event[1]); in __qlcnic_83xx_process_aen()
1005 dev_dbg(&adapter->pdev->dev, "Unsupported AEN:0x%x.\n", in __qlcnic_83xx_process_aen()
1013 static void qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter) in qlcnic_83xx_process_aen() argument
1016 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_process_aen()
1025 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_process_aen()
1036 struct qlcnic_adapter *adapter; in qlcnic_83xx_mbx_poll_work() local
1038 adapter = container_of(work, struct qlcnic_adapter, mbx_poll_work.work); in qlcnic_83xx_mbx_poll_work()
1040 if (!test_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_mbx_poll_work()
1043 qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_mbx_poll_work()
1044 queue_delayed_work(adapter->qlcnic_wq, &adapter->mbx_poll_work, in qlcnic_83xx_mbx_poll_work()
1048 void qlcnic_83xx_enable_mbx_poll(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_mbx_poll() argument
1050 if (test_and_set_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_enable_mbx_poll()
1053 INIT_DELAYED_WORK(&adapter->mbx_poll_work, qlcnic_83xx_mbx_poll_work); in qlcnic_83xx_enable_mbx_poll()
1054 queue_delayed_work(adapter->qlcnic_wq, &adapter->mbx_poll_work, 0); in qlcnic_83xx_enable_mbx_poll()
1057 void qlcnic_83xx_disable_mbx_poll(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_mbx_poll() argument
1059 if (!test_and_clear_bit(__QLCNIC_MBX_POLL_ENABLE, &adapter->state)) in qlcnic_83xx_disable_mbx_poll()
1061 cancel_delayed_work_sync(&adapter->mbx_poll_work); in qlcnic_83xx_disable_mbx_poll()
1064 static int qlcnic_83xx_add_rings(struct qlcnic_adapter *adapter) in qlcnic_83xx_add_rings() argument
1074 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_add_rings()
1075 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_add_rings()
1079 num_sds = adapter->drv_sds_rings - QLCNIC_MAX_SDS_RINGS; in qlcnic_83xx_add_rings()
1080 ahw->hw_ops->alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_add_rings()
1086 for (i = 8; i < adapter->drv_sds_rings; i++) { in qlcnic_83xx_add_rings()
1095 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_add_rings()
1100 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_add_rings()
1111 err = ahw->hw_ops->mbx_cmd(adapter, &cmd); in qlcnic_83xx_add_rings()
1113 dev_err(&adapter->pdev->dev, in qlcnic_83xx_add_rings()
1121 for (i = 8; i < adapter->drv_sds_rings; i++) { in qlcnic_83xx_add_rings()
1125 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_add_rings()
1138 void qlcnic_83xx_del_rx_ctx(struct qlcnic_adapter *adapter) in qlcnic_83xx_del_rx_ctx() argument
1143 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_del_rx_ctx()
1145 if (qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_DESTROY_RX_CTX)) in qlcnic_83xx_del_rx_ctx()
1148 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_del_rx_ctx()
1151 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_del_rx_ctx()
1152 qlcnic_pf_set_interface_id_del_rx_ctx(adapter, &temp); in qlcnic_83xx_del_rx_ctx()
1155 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_del_rx_ctx()
1157 dev_err(&adapter->pdev->dev, in qlcnic_83xx_del_rx_ctx()
1164 int qlcnic_83xx_create_rx_ctx(struct qlcnic_adapter *adapter) in qlcnic_83xx_create_rx_ctx() argument
1175 struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx; in qlcnic_83xx_create_rx_ctx()
1176 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_create_rx_ctx()
1177 num_rds = adapter->max_rds_rings; in qlcnic_83xx_create_rx_ctx()
1179 if (adapter->drv_sds_rings <= QLCNIC_MAX_SDS_RINGS) in qlcnic_83xx_create_rx_ctx()
1180 num_sds = adapter->drv_sds_rings; in qlcnic_83xx_create_rx_ctx()
1188 if (adapter->flags & QLCNIC_FW_LRO_MSS_CAP) in qlcnic_83xx_create_rx_ctx()
1192 err = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_create_rx_ctx()
1197 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_create_rx_ctx()
1204 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_create_rx_ctx()
1205 qlcnic_pf_set_interface_id_create_rx_ctx(adapter, in qlcnic_83xx_create_rx_ctx()
1217 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_create_rx_ctx()
1221 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_create_rx_ctx()
1250 err = ahw->hw_ops->mbx_cmd(adapter, &cmd); in qlcnic_83xx_create_rx_ctx()
1252 dev_err(&adapter->pdev->dev, in qlcnic_83xx_create_rx_ctx()
1260 dev_info(&adapter->pdev->dev, "Rx Context[%d] Created, state:0x%x\n", in qlcnic_83xx_create_rx_ctx()
1276 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_create_rx_ctx()
1283 if (adapter->drv_sds_rings > QLCNIC_MAX_SDS_RINGS) in qlcnic_83xx_create_rx_ctx()
1284 err = qlcnic_83xx_add_rings(adapter); in qlcnic_83xx_create_rx_ctx()
1290 void qlcnic_83xx_del_tx_ctx(struct qlcnic_adapter *adapter, in qlcnic_83xx_del_tx_ctx() argument
1296 if (qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_DESTROY_TX_CTX)) in qlcnic_83xx_del_tx_ctx()
1299 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_del_tx_ctx()
1302 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_del_tx_ctx()
1303 qlcnic_pf_set_interface_id_del_tx_ctx(adapter, &temp); in qlcnic_83xx_del_tx_ctx()
1306 if (qlcnic_issue_cmd(adapter, &cmd)) in qlcnic_83xx_del_tx_ctx()
1307 dev_err(&adapter->pdev->dev, in qlcnic_83xx_del_tx_ctx()
1312 int qlcnic_83xx_create_tx_ctx(struct qlcnic_adapter *adapter, in qlcnic_83xx_create_tx_ctx() argument
1321 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_create_tx_ctx()
1337 if (adapter->flags & QLCNIC_MSIX_ENABLED) { in qlcnic_83xx_create_tx_ctx()
1338 if (!(adapter->flags & QLCNIC_TX_INTR_SHARED)) in qlcnic_83xx_create_tx_ctx()
1339 msix_vector = adapter->drv_sds_rings + ring; in qlcnic_83xx_create_tx_ctx()
1341 msix_vector = adapter->drv_sds_rings - 1; in qlcnic_83xx_create_tx_ctx()
1347 if (adapter->ahw->diag_test != QLCNIC_LOOPBACK_TEST) in qlcnic_83xx_create_tx_ctx()
1353 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CREATE_TX_CTX); in qlcnic_83xx_create_tx_ctx()
1357 if (qlcnic_sriov_pf_check(adapter) || qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_create_tx_ctx()
1360 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_create_tx_ctx()
1361 qlcnic_pf_set_interface_id_create_tx_ctx(adapter, &temp); in qlcnic_83xx_create_tx_ctx()
1369 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_create_tx_ctx()
1371 netdev_err(adapter->netdev, in qlcnic_83xx_create_tx_ctx()
1378 if ((adapter->flags & QLCNIC_MSIX_ENABLED) && in qlcnic_83xx_create_tx_ctx()
1379 !(adapter->flags & QLCNIC_TX_INTR_SHARED)) { in qlcnic_83xx_create_tx_ctx()
1380 intr_mask = ahw->intr_tbl[adapter->drv_sds_rings + ring].src; in qlcnic_83xx_create_tx_ctx()
1383 netdev_info(adapter->netdev, in qlcnic_83xx_create_tx_ctx()
1394 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_diag_alloc_res() local
1397 u16 adapter_state = adapter->is_up; in qlcnic_83xx_diag_alloc_res()
1404 __qlcnic_down(adapter, netdev); in qlcnic_83xx_diag_alloc_res()
1406 qlcnic_detach(adapter); in qlcnic_83xx_diag_alloc_res()
1408 adapter->drv_sds_rings = QLCNIC_SINGLE_RING; in qlcnic_83xx_diag_alloc_res()
1409 adapter->ahw->diag_test = test; in qlcnic_83xx_diag_alloc_res()
1410 adapter->ahw->linkup = 0; in qlcnic_83xx_diag_alloc_res()
1412 ret = qlcnic_attach(adapter); in qlcnic_83xx_diag_alloc_res()
1418 ret = qlcnic_fw_create_ctx(adapter); in qlcnic_83xx_diag_alloc_res()
1420 qlcnic_detach(adapter); in qlcnic_83xx_diag_alloc_res()
1422 adapter->drv_sds_rings = num_sds_ring; in qlcnic_83xx_diag_alloc_res()
1423 qlcnic_attach(adapter); in qlcnic_83xx_diag_alloc_res()
1429 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in qlcnic_83xx_diag_alloc_res()
1430 rds_ring = &adapter->recv_ctx->rds_rings[ring]; in qlcnic_83xx_diag_alloc_res()
1431 qlcnic_post_rx_buffers(adapter, rds_ring, ring); in qlcnic_83xx_diag_alloc_res()
1434 if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_83xx_diag_alloc_res()
1435 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_diag_alloc_res()
1436 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_83xx_diag_alloc_res()
1437 qlcnic_enable_sds_intr(adapter, sds_ring); in qlcnic_83xx_diag_alloc_res()
1441 if (adapter->ahw->diag_test == QLCNIC_LOOPBACK_TEST) { in qlcnic_83xx_diag_alloc_res()
1442 adapter->ahw->loopback_state = 0; in qlcnic_83xx_diag_alloc_res()
1443 adapter->ahw->hw_ops->setup_link_event(adapter, 1); in qlcnic_83xx_diag_alloc_res()
1446 set_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_83xx_diag_alloc_res()
1453 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_diag_free_res() local
1457 clear_bit(__QLCNIC_DEV_UP, &adapter->state); in qlcnic_83xx_diag_free_res()
1458 if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) { in qlcnic_83xx_diag_free_res()
1459 for (ring = 0; ring < adapter->drv_sds_rings; ring++) { in qlcnic_83xx_diag_free_res()
1460 sds_ring = &adapter->recv_ctx->sds_rings[ring]; in qlcnic_83xx_diag_free_res()
1461 if (adapter->flags & QLCNIC_MSIX_ENABLED) in qlcnic_83xx_diag_free_res()
1462 qlcnic_disable_sds_intr(adapter, sds_ring); in qlcnic_83xx_diag_free_res()
1466 qlcnic_fw_destroy_ctx(adapter); in qlcnic_83xx_diag_free_res()
1467 qlcnic_detach(adapter); in qlcnic_83xx_diag_free_res()
1469 adapter->ahw->diag_test = 0; in qlcnic_83xx_diag_free_res()
1470 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_diag_free_res()
1472 if (qlcnic_attach(adapter)) in qlcnic_83xx_diag_free_res()
1476 __qlcnic_up(adapter, netdev); in qlcnic_83xx_diag_free_res()
1482 static void qlcnic_83xx_get_beacon_state(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_beacon_state() argument
1484 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_beacon_state()
1489 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LED_CONFIG); in qlcnic_83xx_get_beacon_state()
1491 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_beacon_state()
1500 netdev_err(adapter->netdev, "Get beacon state failed, err=%d\n", in qlcnic_83xx_get_beacon_state()
1509 int qlcnic_83xx_config_led(struct qlcnic_adapter *adapter, u32 state, in qlcnic_83xx_config_led() argument
1518 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1523 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1525 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1530 adapter->ahw->mbox_reg[i] = cmd.rsp.arg[i+1]; in qlcnic_83xx_config_led()
1536 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1546 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1548 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1557 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_led()
1562 cmd.req.arg[1] = adapter->ahw->mbox_reg[0]; in qlcnic_83xx_config_led()
1563 cmd.req.arg[2] = adapter->ahw->mbox_reg[1]; in qlcnic_83xx_config_led()
1564 cmd.req.arg[3] = adapter->ahw->mbox_reg[2]; in qlcnic_83xx_config_led()
1566 cmd.req.arg[4] = adapter->ahw->mbox_reg[3]; in qlcnic_83xx_config_led()
1567 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_led()
1569 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_led()
1579 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_set_led() local
1582 if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) { in qlcnic_83xx_set_led()
1590 if (test_and_set_bit(__QLCNIC_LED_ENABLE, &adapter->state)) in qlcnic_83xx_set_led()
1593 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_83xx_set_led()
1596 err = qlcnic_83xx_config_led(adapter, active, 0); in qlcnic_83xx_set_led()
1603 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) in qlcnic_83xx_set_led()
1606 err = qlcnic_83xx_config_led(adapter, active, 0); in qlcnic_83xx_set_led()
1616 clear_bit(__QLCNIC_LED_ENABLE, &adapter->state); in qlcnic_83xx_set_led()
1621 void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_initialize_nic() argument
1626 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_initialize_nic()
1630 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_initialize_nic()
1633 status = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_initialize_nic()
1641 if (adapter->dcb) in qlcnic_83xx_initialize_nic()
1644 status = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_initialize_nic()
1646 dev_err(&adapter->pdev->dev, in qlcnic_83xx_initialize_nic()
1653 static int qlcnic_83xx_set_port_config(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_port_config() argument
1658 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_SET_PORT_CONFIG); in qlcnic_83xx_set_port_config()
1662 cmd.req.arg[1] = adapter->ahw->port_config; in qlcnic_83xx_set_port_config()
1663 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_port_config()
1665 dev_info(&adapter->pdev->dev, "Set Port Config failed.\n"); in qlcnic_83xx_set_port_config()
1670 static int qlcnic_83xx_get_port_config(struct qlcnic_adapter *adapter) in qlcnic_83xx_get_port_config() argument
1675 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_PORT_CONFIG); in qlcnic_83xx_get_port_config()
1679 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_port_config()
1681 dev_info(&adapter->pdev->dev, "Get Port config failed\n"); in qlcnic_83xx_get_port_config()
1683 adapter->ahw->port_config = cmd.rsp.arg[1]; in qlcnic_83xx_get_port_config()
1688 int qlcnic_83xx_setup_link_event(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_setup_link_event() argument
1694 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LINK_EVENT); in qlcnic_83xx_setup_link_event()
1698 temp = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_setup_link_event()
1700 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_setup_link_event()
1702 dev_info(&adapter->pdev->dev, in qlcnic_83xx_setup_link_event()
1708 static void qlcnic_83xx_set_interface_id_promisc(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_promisc() argument
1711 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_promisc()
1712 qlcnic_alloc_lb_filters_mem(adapter); in qlcnic_83xx_set_interface_id_promisc()
1713 qlcnic_pf_set_interface_id_promisc(adapter, interface_id); in qlcnic_83xx_set_interface_id_promisc()
1714 adapter->rx_mac_learn = true; in qlcnic_83xx_set_interface_id_promisc()
1716 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_promisc()
1717 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_promisc()
1721 int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *adapter, u32 mode) in qlcnic_83xx_nic_set_promisc() argument
1727 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_nic_set_promisc()
1734 err = qlcnic_alloc_mbx_args(cmd, adapter, in qlcnic_83xx_nic_set_promisc()
1740 qlcnic_83xx_set_interface_id_promisc(adapter, &temp); in qlcnic_83xx_nic_set_promisc()
1742 if (qlcnic_84xx_check(adapter) && qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_nic_set_promisc()
1746 err = qlcnic_issue_cmd(adapter, cmd); in qlcnic_83xx_nic_set_promisc()
1759 struct qlcnic_adapter *adapter = netdev_priv(netdev); in qlcnic_83xx_loopback_test() local
1760 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_loopback_test()
1761 u8 drv_sds_rings = adapter->drv_sds_rings; in qlcnic_83xx_loopback_test()
1762 u8 drv_tx_rings = adapter->drv_tx_rings; in qlcnic_83xx_loopback_test()
1771 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_loopback_test()
1776 if (qlcnic_get_diag_lock(adapter)) { in qlcnic_83xx_loopback_test()
1789 ret = qlcnic_83xx_set_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1797 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_loopback_test()
1807 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1810 } while ((adapter->ahw->linkup && ahw->has_link_events) != 1); in qlcnic_83xx_loopback_test()
1812 ret = qlcnic_do_lb_test(adapter, mode); in qlcnic_83xx_loopback_test()
1814 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_loopback_test()
1820 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_loopback_test()
1821 adapter->drv_tx_rings = drv_tx_rings; in qlcnic_83xx_loopback_test()
1822 qlcnic_release_diag_lock(adapter); in qlcnic_83xx_loopback_test()
1826 static void qlcnic_extend_lb_idc_cmpltn_wait(struct qlcnic_adapter *adapter, in qlcnic_extend_lb_idc_cmpltn_wait() argument
1829 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_extend_lb_idc_cmpltn_wait()
1832 netdev_info(adapter->netdev, "Received loopback IDC time extend event for 0x%x seconds\n", in qlcnic_extend_lb_idc_cmpltn_wait()
1839 static int qlcnic_83xx_set_lb_mode(struct qlcnic_adapter *adapter, u8 mode) in qlcnic_83xx_set_lb_mode() argument
1841 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_lb_mode()
1842 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_set_lb_mode()
1848 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_set_lb_mode()
1869 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_set_lb_mode()
1883 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_set_lb_mode()
1891 qlcnic_extend_lb_idc_cmpltn_wait(adapter, in qlcnic_83xx_set_lb_mode()
1898 qlcnic_83xx_clear_lb_mode(adapter, mode); in qlcnic_83xx_set_lb_mode()
1903 qlcnic_sre_macaddr_change(adapter, adapter->mac_addr, 0, in qlcnic_83xx_set_lb_mode()
1908 static int qlcnic_83xx_clear_lb_mode(struct qlcnic_adapter *adapter, u8 mode) in qlcnic_83xx_clear_lb_mode() argument
1910 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_clear_lb_mode()
1912 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_clear_lb_mode()
1923 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_clear_lb_mode()
1937 if (test_bit(__QLCNIC_RESETTING, &adapter->state)) { in qlcnic_83xx_clear_lb_mode()
1945 qlcnic_extend_lb_idc_cmpltn_wait(adapter, in qlcnic_83xx_clear_lb_mode()
1956 qlcnic_sre_macaddr_change(adapter, adapter->mac_addr, 0, in qlcnic_83xx_clear_lb_mode()
1961 static void qlcnic_83xx_set_interface_id_ipaddr(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_ipaddr() argument
1964 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_ipaddr()
1965 qlcnic_pf_set_interface_id_ipaddr(adapter, interface_id); in qlcnic_83xx_set_interface_id_ipaddr()
1967 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_ipaddr()
1968 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_ipaddr()
1972 void qlcnic_83xx_config_ipaddr(struct qlcnic_adapter *adapter, __be32 ip, in qlcnic_83xx_config_ipaddr() argument
1979 err = qlcnic_alloc_mbx_args(&cmd, adapter, in qlcnic_83xx_config_ipaddr()
1984 qlcnic_83xx_set_interface_id_ipaddr(adapter, &temp); in qlcnic_83xx_config_ipaddr()
1992 * Adapter needs IP address in network byte order. in qlcnic_83xx_config_ipaddr()
2001 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_ipaddr()
2003 dev_err(&adapter->netdev->dev, in qlcnic_83xx_config_ipaddr()
2010 int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *adapter, int mode) in qlcnic_83xx_config_hw_lro() argument
2019 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_config_hw_lro()
2022 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIGURE_HW_LRO); in qlcnic_83xx_config_hw_lro()
2026 temp = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_config_hw_lro()
2030 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_hw_lro()
2032 dev_info(&adapter->pdev->dev, "LRO config failed\n"); in qlcnic_83xx_config_hw_lro()
2038 int qlcnic_83xx_config_rss(struct qlcnic_adapter *adapter, int enable) in qlcnic_83xx_config_rss() argument
2047 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIGURE_RSS); in qlcnic_83xx_config_rss()
2063 cmd.req.arg[1] = (adapter->recv_ctx->context_id); in qlcnic_83xx_config_rss()
2067 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_rss()
2070 dev_info(&adapter->pdev->dev, "RSS config failed\n"); in qlcnic_83xx_config_rss()
2077 static void qlcnic_83xx_set_interface_id_macaddr(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_interface_id_macaddr() argument
2080 if (qlcnic_sriov_pf_check(adapter)) { in qlcnic_83xx_set_interface_id_macaddr()
2081 qlcnic_pf_set_interface_id_macaddr(adapter, interface_id); in qlcnic_83xx_set_interface_id_macaddr()
2083 if (!qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_set_interface_id_macaddr()
2084 *interface_id = adapter->recv_ctx->context_id << 16; in qlcnic_83xx_set_interface_id_macaddr()
2088 int qlcnic_83xx_sre_macaddr_change(struct qlcnic_adapter *adapter, u8 *addr, in qlcnic_83xx_sre_macaddr_change() argument
2096 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_sre_macaddr_change()
2103 err = qlcnic_alloc_mbx_args(cmd, adapter, QLCNIC_CMD_CONFIG_MAC_VLAN); in qlcnic_83xx_sre_macaddr_change()
2114 qlcnic_83xx_set_interface_id_macaddr(adapter, &temp); in qlcnic_83xx_sre_macaddr_change()
2125 err = qlcnic_issue_cmd(adapter, cmd); in qlcnic_83xx_sre_macaddr_change()
2135 void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, in qlcnic_83xx_change_l2_filter() argument
2141 qlcnic_83xx_sre_macaddr_change(adapter, mac, vlan_id, QLCNIC_MAC_ADD); in qlcnic_83xx_change_l2_filter()
2144 static void qlcnic_83xx_configure_mac(struct qlcnic_adapter *adapter, u8 *mac, in qlcnic_83xx_configure_mac() argument
2157 int qlcnic_83xx_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac, in qlcnic_83xx_get_mac_address() argument
2164 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_MAC_ADDRESS); in qlcnic_83xx_get_mac_address()
2168 qlcnic_83xx_configure_mac(adapter, mac, QLCNIC_GET_CURRENT_MAC, &cmd); in qlcnic_83xx_get_mac_address()
2169 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_mac_address()
2180 dev_err(&adapter->pdev->dev, "Failed to get mac address%d\n", in qlcnic_83xx_get_mac_address()
2188 static int qlcnic_83xx_set_rx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_rx_intr_coal() argument
2190 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_set_rx_intr_coal()
2195 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL); in qlcnic_83xx_set_rx_intr_coal()
2199 temp = adapter->recv_ctx->context_id; in qlcnic_83xx_set_rx_intr_coal()
2205 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_rx_intr_coal()
2207 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_intr_coal()
2215 static int qlcnic_83xx_set_tx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_tx_intr_coal() argument
2217 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_set_tx_intr_coal()
2222 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL); in qlcnic_83xx_set_tx_intr_coal()
2226 temp = adapter->tx_ring->ctx_id; in qlcnic_83xx_set_tx_intr_coal()
2232 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_tx_intr_coal()
2234 netdev_err(adapter->netdev, in qlcnic_83xx_set_tx_intr_coal()
2242 int qlcnic_83xx_set_rx_tx_intr_coal(struct qlcnic_adapter *adapter) in qlcnic_83xx_set_rx_tx_intr_coal() argument
2246 err = qlcnic_83xx_set_rx_intr_coal(adapter); in qlcnic_83xx_set_rx_tx_intr_coal()
2248 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_tx_intr_coal()
2251 err = qlcnic_83xx_set_tx_intr_coal(adapter); in qlcnic_83xx_set_rx_tx_intr_coal()
2253 netdev_err(adapter->netdev, in qlcnic_83xx_set_rx_tx_intr_coal()
2259 int qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter, in qlcnic_83xx_config_intr_coal() argument
2262 struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal; in qlcnic_83xx_config_intr_coal()
2267 if (adapter->recv_ctx->state == QLCNIC_HOST_CTX_STATE_FREED) in qlcnic_83xx_config_intr_coal()
2296 err = qlcnic_83xx_set_rx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2299 err = qlcnic_83xx_set_tx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2302 err = qlcnic_83xx_set_rx_tx_intr_coal(adapter); in qlcnic_83xx_config_intr_coal()
2306 netdev_err(adapter->netdev, in qlcnic_83xx_config_intr_coal()
2314 static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter, in qlcnic_83xx_handle_link_aen() argument
2317 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_handle_link_aen()
2337 qlcnic_advert_link_change(adapter, link_status); in qlcnic_83xx_handle_link_aen()
2343 struct qlcnic_adapter *adapter = data; in qlcnic_83xx_handle_aen() local
2347 mbx = adapter->ahw->mailbox; in qlcnic_83xx_handle_aen()
2349 resp = QLCRDX(adapter->ahw, QLCNIC_FW_MBX_CTRL); in qlcnic_83xx_handle_aen()
2353 event = readl(QLCNIC_MBX_FW(adapter->ahw, 0)); in qlcnic_83xx_handle_aen()
2355 __qlcnic_83xx_process_aen(adapter); in qlcnic_83xx_handle_aen()
2360 adapter->stats.mbx_spurious_intr++; in qlcnic_83xx_handle_aen()
2364 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK); in qlcnic_83xx_handle_aen()
2365 writel(0, adapter->ahw->pci_base0 + mask); in qlcnic_83xx_handle_aen()
2370 int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_nic_info() argument
2376 if (adapter->ahw->op_mode != QLCNIC_MGMT_FUNC) { in qlcnic_83xx_set_nic_info()
2377 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_nic_info()
2383 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_SET_NIC_INFO); in qlcnic_83xx_set_nic_info()
2397 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_set_nic_info()
2400 dev_err(&adapter->pdev->dev, "Failed to set nic info%d\n", in qlcnic_83xx_set_nic_info()
2410 int qlcnic_83xx_get_nic_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_nic_info() argument
2417 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_nic_info()
2419 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_NIC_INFO); in qlcnic_83xx_get_nic_info()
2429 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_nic_info()
2431 dev_info(&adapter->pdev->dev, in qlcnic_83xx_get_nic_info()
2463 int qlcnic_get_pci_func_type(struct qlcnic_adapter *adapter, u16 type, in qlcnic_get_pci_func_type() argument
2466 struct device *dev = &adapter->pdev->dev; in qlcnic_get_pci_func_type()
2488 int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_pci_info() argument
2491 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_pci_info()
2492 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_get_pci_info()
2498 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_PCI_INFO); in qlcnic_83xx_get_pci_info()
2502 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_get_pci_info()
2516 err = qlcnic_get_pci_func_type(adapter, pci_info->type, in qlcnic_83xx_get_pci_info()
2547 int qlcnic_83xx_config_intrpt(struct qlcnic_adapter *adapter, bool op_type) in qlcnic_83xx_config_intrpt() argument
2554 max_ints = adapter->ahw->num_msix - 1; in qlcnic_83xx_config_intrpt()
2555 err = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTRPT); in qlcnic_83xx_config_intrpt()
2561 if (qlcnic_sriov_vf_check(adapter)) in qlcnic_83xx_config_intrpt()
2562 cmd.req.arg[1] |= (adapter->ahw->pci_func << 8) | BIT_16; in qlcnic_83xx_config_intrpt()
2566 val = type | (adapter->ahw->intr_tbl[i].type << 4); in qlcnic_83xx_config_intrpt()
2567 if (adapter->ahw->intr_tbl[i].type == QLCNIC_INTRPT_MSIX) in qlcnic_83xx_config_intrpt()
2568 val |= (adapter->ahw->intr_tbl[i].id << 16); in qlcnic_83xx_config_intrpt()
2571 err = qlcnic_issue_cmd(adapter, &cmd); in qlcnic_83xx_config_intrpt()
2573 dev_err(&adapter->pdev->dev, in qlcnic_83xx_config_intrpt()
2582 dev_info(&adapter->pdev->dev, in qlcnic_83xx_config_intrpt()
2584 adapter->ahw->intr_tbl[i].id); in qlcnic_83xx_config_intrpt()
2588 adapter->ahw->intr_tbl[i].id = MSW(val); in qlcnic_83xx_config_intrpt()
2589 adapter->ahw->intr_tbl[i].enabled = 1; in qlcnic_83xx_config_intrpt()
2591 adapter->ahw->intr_tbl[i].src = temp; in qlcnic_83xx_config_intrpt()
2593 adapter->ahw->intr_tbl[i].id = i; in qlcnic_83xx_config_intrpt()
2594 adapter->ahw->intr_tbl[i].enabled = 0; in qlcnic_83xx_config_intrpt()
2595 adapter->ahw->intr_tbl[i].src = 0; in qlcnic_83xx_config_intrpt()
2603 int qlcnic_83xx_lock_flash(struct qlcnic_adapter *adapter) in qlcnic_83xx_lock_flash() argument
2609 status = QLC_SHARED_REG_RD32(adapter, QLCNIC_FLASH_LOCK); in qlcnic_83xx_lock_flash()
2614 id = QLC_SHARED_REG_RD32(adapter, in qlcnic_83xx_lock_flash()
2616 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_flash()
2623 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, adapter->portnum); in qlcnic_83xx_lock_flash()
2627 void qlcnic_83xx_unlock_flash(struct qlcnic_adapter *adapter) in qlcnic_83xx_unlock_flash() argument
2629 QLC_SHARED_REG_RD32(adapter, QLCNIC_FLASH_UNLOCK); in qlcnic_83xx_unlock_flash()
2630 QLC_SHARED_REG_WR32(adapter, QLCNIC_FLASH_LOCK_OWNER, 0xFF); in qlcnic_83xx_unlock_flash()
2633 int qlcnic_83xx_lockless_flash_read32(struct qlcnic_adapter *adapter, in qlcnic_83xx_lockless_flash_read32() argument
2643 dev_err(&adapter->pdev->dev, "Illegal addr = 0x%x\n", addr); in qlcnic_83xx_lockless_flash_read32()
2647 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_DIRECT_WINDOW, in qlcnic_83xx_lockless_flash_read32()
2657 ret = QLCRD32(adapter, indirect_add, &err); in qlcnic_83xx_lockless_flash_read32()
2670 qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_lockless_flash_read32()
2680 ret = QLCRD32(adapter, indirect_add, &err); in qlcnic_83xx_lockless_flash_read32()
2694 static int qlcnic_83xx_poll_flash_status_reg(struct qlcnic_adapter *adapter) in qlcnic_83xx_poll_flash_status_reg() argument
2701 status = QLCRD32(adapter, QLC_83XX_FLASH_STATUS, &err); in qlcnic_83xx_poll_flash_status_reg()
2718 int qlcnic_83xx_enable_flash_write(struct qlcnic_adapter *adapter) in qlcnic_83xx_enable_flash_write() argument
2722 cmd = adapter->ahw->fdt.write_statusreg_cmd; in qlcnic_83xx_enable_flash_write()
2723 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_enable_flash_write()
2725 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_enable_flash_write()
2726 adapter->ahw->fdt.write_enable_bits); in qlcnic_83xx_enable_flash_write()
2727 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_enable_flash_write()
2729 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_enable_flash_write()
2736 int qlcnic_83xx_disable_flash_write(struct qlcnic_adapter *adapter) in qlcnic_83xx_disable_flash_write() argument
2740 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_disable_flash_write()
2742 adapter->ahw->fdt.write_statusreg_cmd)); in qlcnic_83xx_disable_flash_write()
2743 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_disable_flash_write()
2744 adapter->ahw->fdt.write_disable_bits); in qlcnic_83xx_disable_flash_write()
2745 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_disable_flash_write()
2747 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_disable_flash_write()
2754 int qlcnic_83xx_read_flash_mfg_id(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_mfg_id() argument
2759 if (qlcnic_83xx_lock_flash(adapter)) in qlcnic_83xx_read_flash_mfg_id()
2762 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_read_flash_mfg_id()
2764 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_read_flash_mfg_id()
2766 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_read_flash_mfg_id()
2768 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2772 mfg_id = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err); in qlcnic_83xx_read_flash_mfg_id()
2774 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2778 adapter->flash_mfg_id = (mfg_id & 0xFF); in qlcnic_83xx_read_flash_mfg_id()
2779 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_mfg_id()
2784 int qlcnic_83xx_read_flash_descriptor_table(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_descriptor_table() argument
2791 if (qlcnic_83xx_lock_flash(adapter)) in qlcnic_83xx_read_flash_descriptor_table()
2794 memset(&adapter->ahw->fdt, 0, fdt_size); in qlcnic_83xx_read_flash_descriptor_table()
2795 ret = qlcnic_83xx_lockless_flash_read32(adapter, QLCNIC_FDT_LOCATION, in qlcnic_83xx_read_flash_descriptor_table()
2796 (u8 *)&adapter->ahw->fdt, in qlcnic_83xx_read_flash_descriptor_table()
2798 qlcnic_swap32_buffer((u32 *)&adapter->ahw->fdt, count); in qlcnic_83xx_read_flash_descriptor_table()
2799 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_read_flash_descriptor_table()
2803 int qlcnic_83xx_erase_flash_sector(struct qlcnic_adapter *adapter, in qlcnic_83xx_erase_flash_sector() argument
2809 if (qlcnic_83xx_lock_flash(adapter) != 0) in qlcnic_83xx_erase_flash_sector()
2812 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) { in qlcnic_83xx_erase_flash_sector()
2813 ret = qlcnic_83xx_enable_flash_write(adapter); in qlcnic_83xx_erase_flash_sector()
2815 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2816 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2823 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_erase_flash_sector()
2825 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2826 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2835 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_erase_flash_sector()
2837 cmd = QLC_83XX_FLASH_FDT_ERASE_DEF_SIG | adapter->ahw->fdt.erase_cmd; in qlcnic_83xx_erase_flash_sector()
2838 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) in qlcnic_83xx_erase_flash_sector()
2839 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, cmd); in qlcnic_83xx_erase_flash_sector()
2841 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_erase_flash_sector()
2843 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_erase_flash_sector()
2846 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_erase_flash_sector()
2848 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2849 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2854 if (adapter->ahw->fdt.mfg_id == adapter->flash_mfg_id) { in qlcnic_83xx_erase_flash_sector()
2855 ret = qlcnic_83xx_disable_flash_write(adapter); in qlcnic_83xx_erase_flash_sector()
2857 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2858 dev_err(&adapter->pdev->dev, in qlcnic_83xx_erase_flash_sector()
2864 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_erase_flash_sector()
2869 int qlcnic_83xx_flash_write32(struct qlcnic_adapter *adapter, u32 addr, in qlcnic_83xx_flash_write32() argument
2875 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, addr1); in qlcnic_83xx_flash_write32()
2876 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data); in qlcnic_83xx_flash_write32()
2877 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_write32()
2879 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_write32()
2881 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_write32()
2889 int qlcnic_83xx_flash_bulk_write(struct qlcnic_adapter *adapter, u32 addr, in qlcnic_83xx_flash_bulk_write() argument
2897 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2902 temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err); in qlcnic_83xx_flash_bulk_write()
2906 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_SPI_CONTROL, in qlcnic_83xx_flash_bulk_write()
2908 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2912 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data++); in qlcnic_83xx_flash_bulk_write()
2913 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2915 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2917 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2923 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2927 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, in qlcnic_83xx_flash_bulk_write()
2929 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2931 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2933 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2940 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_flash_bulk_write()
2944 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_WRDATA, *p_data++); in qlcnic_83xx_flash_bulk_write()
2945 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_flash_bulk_write()
2947 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_flash_bulk_write()
2949 dev_err(&adapter->pdev->dev, in qlcnic_83xx_flash_bulk_write()
2954 ret = QLCRD32(adapter, QLC_83XX_FLASH_SPI_STATUS, &err); in qlcnic_83xx_flash_bulk_write()
2959 dev_err(&adapter->pdev->dev, "%s: failed at %d\n", in qlcnic_83xx_flash_bulk_write()
2962 temp = QLCRD32(adapter, QLC_83XX_FLASH_SPI_CONTROL, &err); in qlcnic_83xx_flash_bulk_write()
2966 qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_flash_bulk_write()
2974 static void qlcnic_83xx_recover_driver_lock(struct qlcnic_adapter *adapter) in qlcnic_83xx_recover_driver_lock() argument
2978 val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); in qlcnic_83xx_recover_driver_lock()
2983 val = val | ((adapter->portnum << 2) | in qlcnic_83xx_recover_driver_lock()
2985 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
2986 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
2989 val = QLCRDX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK); in qlcnic_83xx_recover_driver_lock()
2991 if (id == adapter->portnum) { in qlcnic_83xx_recover_driver_lock()
2994 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
2996 QLCRDX(adapter->ahw, QLC_83XX_DRV_UNLOCK); in qlcnic_83xx_recover_driver_lock()
2999 QLCWRX(adapter->ahw, QLC_83XX_RECOVER_DRV_LOCK, val); in qlcnic_83xx_recover_driver_lock()
3000 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3003 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3008 dev_info(&adapter->pdev->dev, in qlcnic_83xx_recover_driver_lock()
3014 int qlcnic_83xx_lock_driver(struct qlcnic_adapter *adapter) in qlcnic_83xx_lock_driver() argument
3020 status = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK); in qlcnic_83xx_lock_driver()
3028 temp = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3031 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3034 dev_info(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3037 qlcnic_83xx_recover_driver_lock(adapter); in qlcnic_83xx_lock_driver()
3041 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3049 dev_err(&adapter->pdev->dev, in qlcnic_83xx_lock_driver()
3055 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_lock_driver()
3058 val = lock_alive_counter << 8 | adapter->portnum; in qlcnic_83xx_lock_driver()
3059 QLCWRX(adapter->ahw, QLC_83XX_DRV_LOCK_ID, val); in qlcnic_83xx_lock_driver()
3064 void qlcnic_83xx_unlock_driver(struct qlcnic_adapter *adapter) in qlcnic_83xx_unlock_driver() argument
3068 val = QLCRDX(adapter->ahw, QLC_83XX_DRV_LOCK_ID); in qlcnic_83xx_unlock_driver()
3072 if (id != adapter->portnum) in qlcnic_83xx_unlock_driver()
3073 dev_err(&adapter->pdev->dev, in qlcnic_83xx_unlock_driver()
3075 __func__, adapter->portnum, id); in qlcnic_83xx_unlock_driver()
3078 QLCWRX(adapter->ahw, QLC_83XX_DRV_LOCK_ID, val); in qlcnic_83xx_unlock_driver()
3079 QLCRDX(adapter->ahw, QLC_83XX_DRV_UNLOCK); in qlcnic_83xx_unlock_driver()
3082 int qlcnic_ms_mem_write128(struct qlcnic_adapter *adapter, u64 addr, in qlcnic_ms_mem_write128() argument
3092 mutex_lock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3093 qlcnic_ind_wr(adapter, QLCNIC_MS_ADDR_HI, 0); in qlcnic_ms_mem_write128()
3100 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3104 qlcnic_ind_wr(adapter, QLCNIC_MS_ADDR_LO, addr); in qlcnic_ms_mem_write128()
3105 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_LO, *data++); in qlcnic_ms_mem_write128()
3106 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_HI, *data++); in qlcnic_ms_mem_write128()
3107 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_ULO, *data++); in qlcnic_ms_mem_write128()
3108 qlcnic_ind_wr(adapter, QLCNIC_MS_WRTDATA_UHI, *data++); in qlcnic_ms_mem_write128()
3109 qlcnic_ind_wr(adapter, QLCNIC_MS_CTRL, QLCNIC_TA_WRITE_ENABLE); in qlcnic_ms_mem_write128()
3110 qlcnic_ind_wr(adapter, QLCNIC_MS_CTRL, QLCNIC_TA_WRITE_START); in qlcnic_ms_mem_write128()
3113 temp = qlcnic_ind_rd(adapter, QLCNIC_MS_CTRL); in qlcnic_ms_mem_write128()
3123 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3128 mutex_unlock(&adapter->ahw->mem_lock); in qlcnic_ms_mem_write128()
3133 int qlcnic_83xx_flash_read32(struct qlcnic_adapter *adapter, u32 flash_addr, in qlcnic_83xx_flash_read32() argument
3140 if (qlcnic_83xx_lock_flash(adapter) != 0) in qlcnic_83xx_flash_read32()
3144 dev_err(&adapter->pdev->dev, "Illegal addr = 0x%x\n", addr); in qlcnic_83xx_flash_read32()
3145 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_flash_read32()
3150 if (qlcnic_83xx_wrt_reg_indirect(adapter, in qlcnic_83xx_flash_read32()
3153 qlcnic_83xx_unlock_flash(adapter); in qlcnic_83xx_flash_read32()
3158 ret = QLCRD32(adapter, indirect_addr, &err); in qlcnic_83xx_flash_read32()
3160 qlcnic_83xx_unlock_flash(adapter); 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()
3689 adapter->drv_sds_rings = drv_sds_rings; in qlcnic_83xx_interrupt_test()
3690 adapter->drv_tx_rings = drv_tx_rings; in qlcnic_83xx_interrupt_test()
3691 qlcnic_release_diag_lock(adapter); in qlcnic_83xx_interrupt_test()
3695 void qlcnic_83xx_get_pauseparam(struct qlcnic_adapter *adapter, in qlcnic_83xx_get_pauseparam() argument
3698 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_get_pauseparam()
3702 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_get_pauseparam()
3704 dev_err(&adapter->pdev->dev, in qlcnic_83xx_get_pauseparam()
3731 int qlcnic_83xx_set_pauseparam(struct qlcnic_adapter *adapter, in qlcnic_83xx_set_pauseparam() argument
3734 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_set_pauseparam()
3738 status = qlcnic_83xx_get_port_config(adapter); in qlcnic_83xx_set_pauseparam()
3740 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_pauseparam()
3770 status = qlcnic_83xx_set_port_config(adapter); in qlcnic_83xx_set_pauseparam()
3772 dev_err(&adapter->pdev->dev, in qlcnic_83xx_set_pauseparam()
3779 static int qlcnic_83xx_read_flash_status_reg(struct qlcnic_adapter *adapter) in qlcnic_83xx_read_flash_status_reg() argument
3784 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_ADDR, in qlcnic_83xx_read_flash_status_reg()
3786 qlcnic_83xx_wrt_reg_indirect(adapter, QLC_83XX_FLASH_CONTROL, in qlcnic_83xx_read_flash_status_reg()
3788 ret = qlcnic_83xx_poll_flash_status_reg(adapter); in qlcnic_83xx_read_flash_status_reg()
3792 temp = QLCRD32(adapter, QLC_83XX_FLASH_RDDATA, &err); in qlcnic_83xx_read_flash_status_reg()
3799 int qlcnic_83xx_flash_test(struct qlcnic_adapter *adapter) in qlcnic_83xx_flash_test() argument
3803 status = qlcnic_83xx_read_flash_status_reg(adapter); in qlcnic_83xx_flash_test()
3805 dev_info(&adapter->pdev->dev, "%s: EEPROM test failed.\n", in qlcnic_83xx_flash_test()
3814 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_shutdown() local
3815 struct net_device *netdev = adapter->netdev; in qlcnic_83xx_shutdown()
3818 qlcnic_cancel_idc_work(adapter); in qlcnic_83xx_shutdown()
3821 qlcnic_down(adapter, netdev); in qlcnic_83xx_shutdown()
3823 qlcnic_83xx_disable_mbx_intr(adapter); in qlcnic_83xx_shutdown()
3824 cancel_delayed_work_sync(&adapter->idc_aen_work); in qlcnic_83xx_shutdown()
3829 static int qlcnic_83xx_resume(struct qlcnic_adapter *adapter) in qlcnic_83xx_resume() argument
3831 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_resume()
3835 err = qlcnic_83xx_idc_init(adapter); in qlcnic_83xx_resume()
3841 qlcnic_83xx_set_vnic_opmode(adapter); in qlcnic_83xx_resume()
3843 err = qlcnic_83xx_check_vnic_state(adapter); in qlcnic_83xx_resume()
3849 err = qlcnic_83xx_idc_reattach_driver(adapter); in qlcnic_83xx_resume()
3853 qlcnic_schedule_work(adapter, qlcnic_83xx_idc_poll_dev_state, in qlcnic_83xx_resume()
3874 qlcnic_83xx_notify_cmd_completion(struct qlcnic_adapter *adapter, in qlcnic_83xx_notify_cmd_completion() argument
3887 static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter) in qlcnic_83xx_flush_mbx_queue() argument
3889 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue()
3897 dev_info(&adapter->pdev->dev, "%s: Mailbox command 0x%x\n", in qlcnic_83xx_flush_mbx_queue()
3901 qlcnic_83xx_notify_cmd_completion(adapter, cmd); in qlcnic_83xx_flush_mbx_queue()
3907 static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter) in qlcnic_83xx_check_mbx_status() argument
3909 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_check_mbx_status()
3926 static inline void qlcnic_83xx_signal_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_signal_mbx_cmd() argument
3930 QLCWRX(adapter->ahw, QLCNIC_HOST_MBX_CTRL, QLCNIC_SET_OWNER); in qlcnic_83xx_signal_mbx_cmd()
3932 QLCWRX(adapter->ahw, QLCNIC_FW_MBX_CTRL, QLCNIC_CLR_OWNER); in qlcnic_83xx_signal_mbx_cmd()
3935 static void qlcnic_83xx_dequeue_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_dequeue_mbx_cmd() argument
3938 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd()
3947 qlcnic_83xx_notify_cmd_completion(adapter, cmd); in qlcnic_83xx_dequeue_mbx_cmd()
3950 static void qlcnic_83xx_encode_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_encode_mbx_cmd() argument
3954 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_encode_mbx_cmd()
3973 if (qlcnic_sriov_pf_check(adapter)) in qlcnic_83xx_encode_mbx_cmd()
3985 void qlcnic_83xx_detach_mailbox_work(struct qlcnic_adapter *adapter) in qlcnic_83xx_detach_mailbox_work() argument
3987 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work()
3996 qlcnic_83xx_flush_mbx_queue(adapter); in qlcnic_83xx_detach_mailbox_work()
3999 static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter, in qlcnic_83xx_enqueue_mbx_cmd() argument
4003 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd()
4026 static int qlcnic_83xx_check_mac_rcode(struct qlcnic_adapter *adapter, in qlcnic_83xx_check_mac_rcode() argument
4033 fw_data = readl(QLCNIC_MBX_FW(adapter->ahw, 2)); in qlcnic_83xx_check_mac_rcode()
4046 static void qlcnic_83xx_decode_mbx_rsp(struct qlcnic_adapter *adapter, in qlcnic_83xx_decode_mbx_rsp() argument
4049 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_decode_mbx_rsp()
4050 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_decode_mbx_rsp()
4056 qlcnic_83xx_get_mbx_data(adapter, cmd); in qlcnic_83xx_decode_mbx_rsp()
4064 if (!qlcnic_83xx_check_mac_rcode(adapter, cmd)) in qlcnic_83xx_decode_mbx_rsp()
4071 qlcnic_dump_mbx(adapter, cmd); in qlcnic_83xx_decode_mbx_rsp()
4077 static inline void qlcnic_dump_mailbox_registers(struct qlcnic_adapter *adapter) in qlcnic_dump_mailbox_registers() argument
4079 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_dump_mailbox_registers()
4083 …dev_info(&adapter->pdev->dev, "Mbx interrupt mask=0x%x, Mbx interrupt enable=0x%x, Host mbx contro… in qlcnic_dump_mailbox_registers()
4094 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker() local
4096 struct device *dev = &adapter->pdev->dev; in qlcnic_83xx_mailbox_worker()
4102 ahw = adapter->ahw; in qlcnic_83xx_mailbox_worker()
4105 if (qlcnic_83xx_check_mbx_status(adapter)) { in qlcnic_83xx_mailbox_worker()
4106 qlcnic_83xx_flush_mbx_queue(adapter); in qlcnic_83xx_mailbox_worker()
4124 mbx_ops->encode_cmd(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4125 mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST); in qlcnic_83xx_mailbox_worker()
4129 mbx_ops->decode_resp(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4130 mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_COMPLETION); in qlcnic_83xx_mailbox_worker()
4136 qlcnic_dump_mailbox_registers(adapter); in qlcnic_83xx_mailbox_worker()
4137 qlcnic_83xx_get_mbx_data(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4138 qlcnic_dump_mbx(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4139 qlcnic_83xx_idc_request_reset(adapter, in qlcnic_83xx_mailbox_worker()
4143 mbx_ops->dequeue_cmd(adapter, cmd); in qlcnic_83xx_mailbox_worker()
4155 int qlcnic_83xx_init_mailbox_work(struct qlcnic_adapter *adapter) in qlcnic_83xx_init_mailbox_work() argument
4157 struct qlcnic_hardware_context *ahw = adapter->ahw; in qlcnic_83xx_init_mailbox_work()
4166 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4187 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_error_detected() local
4195 set_bit(__QLCNIC_AER, &adapter->state); in qlcnic_83xx_io_error_detected()
4196 set_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_83xx_io_error_detected()
4198 qlcnic_83xx_aer_stop_poll_work(adapter); in qlcnic_83xx_io_error_detected()
4208 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_slot_reset() local
4220 err = qlcnic_83xx_aer_reset(adapter); in qlcnic_83xx_io_slot_reset()
4224 clear_bit(__QLCNIC_AER, &adapter->state); in qlcnic_83xx_io_slot_reset()
4225 clear_bit(__QLCNIC_RESETTING, &adapter->state); in qlcnic_83xx_io_slot_reset()
4231 struct qlcnic_adapter *adapter = pci_get_drvdata(pdev); in qlcnic_83xx_io_resume() local
4233 if (test_and_clear_bit(__QLCNIC_AER, &adapter->state)) in qlcnic_83xx_io_resume()
4234 qlcnic_83xx_aer_start_poll_work(adapter); in qlcnic_83xx_io_resume()