Lines Matching refs:adapter
71 static bool be_cmd_allowed(struct be_adapter *adapter, u8 opcode, u8 subsystem) in be_cmd_allowed() argument
75 u32 cmd_privileges = adapter->cmd_privileges; in be_cmd_allowed()
91 static int be_mcc_notify(struct be_adapter *adapter) in be_mcc_notify() argument
93 struct be_queue_info *mccq = &adapter->mcc_obj.q; in be_mcc_notify()
96 if (be_check_error(adapter, BE_ERROR_ANY)) in be_mcc_notify()
103 iowrite32(val, adapter->db + DB_MCCQ_OFFSET); in be_mcc_notify()
157 static void be_async_cmd_process(struct be_adapter *adapter, in be_async_cmd_process() argument
171 complete(&adapter->et_cmd_compl); in be_async_cmd_process()
177 complete(&adapter->et_cmd_compl); in be_async_cmd_process()
184 adapter->flash_status = compl->status; in be_async_cmd_process()
185 complete(&adapter->et_cmd_compl); in be_async_cmd_process()
193 be_parse_stats(adapter); in be_async_cmd_process()
194 adapter->stats_cmd_sent = false; in be_async_cmd_process()
203 adapter->hwmon_info.be_on_die_temp = in be_async_cmd_process()
206 adapter->be_get_temp_freq = 0; in be_async_cmd_process()
207 adapter->hwmon_info.be_on_die_temp = in be_async_cmd_process()
214 static int be_mcc_compl_process(struct be_adapter *adapter, in be_mcc_compl_process() argument
235 be_async_cmd_process(adapter, compl, resp_hdr); in be_mcc_compl_process()
240 dev_warn(&adapter->pdev->dev, in be_mcc_compl_process()
244 dev_err(&adapter->pdev->dev, in be_mcc_compl_process()
253 static void be_async_link_state_process(struct be_adapter *adapter, in be_async_link_state_process() argument
260 adapter->phy.link_speed = -1; in be_async_link_state_process()
267 if (!BEx_chip(adapter) && in be_async_link_state_process()
274 if (adapter->flags & BE_FLAGS_LINK_STATUS_INIT) in be_async_link_state_process()
275 be_link_status_update(adapter, in be_async_link_state_process()
279 static void be_async_port_misconfig_event_process(struct be_adapter *adapter, in be_async_port_misconfig_event_process() argument
285 struct device *dev = &adapter->pdev->dev; in be_async_port_misconfig_event_process()
289 ((sfp_mismatch_evt >> (adapter->hba_port_num * 8)) & 0xff); in be_async_port_misconfig_event_process()
294 dev_info(dev, "Port %c: %s %s", adapter->port_name, in be_async_port_misconfig_event_process()
299 adapter->flags |= BE_FLAGS_EVT_INCOMPATIBLE_SFP; in be_async_port_misconfig_event_process()
303 static void be_async_grp5_cos_priority_process(struct be_adapter *adapter, in be_async_grp5_cos_priority_process() argument
310 adapter->vlan_prio_bmap = evt->available_priority_bmap; in be_async_grp5_cos_priority_process()
311 adapter->recommended_prio &= ~VLAN_PRIO_MASK; in be_async_grp5_cos_priority_process()
312 adapter->recommended_prio = in be_async_grp5_cos_priority_process()
318 static void be_async_grp5_qos_speed_process(struct be_adapter *adapter, in be_async_grp5_qos_speed_process() argument
324 if (adapter->phy.link_speed >= 0 && in be_async_grp5_qos_speed_process()
325 evt->physical_port == adapter->port_num) in be_async_grp5_qos_speed_process()
326 adapter->phy.link_speed = le16_to_cpu(evt->qos_link_speed) * 10; in be_async_grp5_qos_speed_process()
330 static void be_async_grp5_pvid_state_process(struct be_adapter *adapter, in be_async_grp5_pvid_state_process() argument
337 adapter->pvid = le16_to_cpu(evt->tag) & VLAN_VID_MASK; in be_async_grp5_pvid_state_process()
338 dev_info(&adapter->pdev->dev, "LPVID: %d\n", adapter->pvid); in be_async_grp5_pvid_state_process()
340 adapter->pvid = 0; in be_async_grp5_pvid_state_process()
345 static void be_async_grp5_fw_control_process(struct be_adapter *adapter, in be_async_grp5_fw_control_process() argument
352 adapter->flags |= BE_FLAGS_OS2BMC; in be_async_grp5_fw_control_process()
353 adapter->bmc_filt_mask = le32_to_cpu(evt->event_data_word2); in be_async_grp5_fw_control_process()
355 adapter->flags &= ~BE_FLAGS_OS2BMC; in be_async_grp5_fw_control_process()
359 static void be_async_grp5_evt_process(struct be_adapter *adapter, in be_async_grp5_evt_process() argument
367 be_async_grp5_cos_priority_process(adapter, compl); in be_async_grp5_evt_process()
370 be_async_grp5_qos_speed_process(adapter, compl); in be_async_grp5_evt_process()
373 be_async_grp5_pvid_state_process(adapter, compl); in be_async_grp5_evt_process()
377 be_async_grp5_fw_control_process(adapter, compl); in be_async_grp5_evt_process()
384 static void be_async_dbg_evt_process(struct be_adapter *adapter, in be_async_dbg_evt_process() argument
396 adapter->qnq_vid = le16_to_cpu(evt->vlan_tag); in be_async_dbg_evt_process()
397 adapter->flags |= BE_FLAGS_QNQ_ASYNC_EVT_RCVD; in be_async_dbg_evt_process()
400 dev_warn(&adapter->pdev->dev, "Unknown debug event 0x%x!\n", in be_async_dbg_evt_process()
406 static void be_async_sliport_evt_process(struct be_adapter *adapter, in be_async_sliport_evt_process() argument
413 be_async_port_misconfig_event_process(adapter, cmp); in be_async_sliport_evt_process()
440 static void be_mcc_event_process(struct be_adapter *adapter, in be_mcc_event_process() argument
444 be_async_link_state_process(adapter, compl); in be_mcc_event_process()
446 be_async_grp5_evt_process(adapter, compl); in be_mcc_event_process()
448 be_async_dbg_evt_process(adapter, compl); in be_mcc_event_process()
450 be_async_sliport_evt_process(adapter, compl); in be_mcc_event_process()
453 static struct be_mcc_compl *be_mcc_compl_get(struct be_adapter *adapter) in be_mcc_compl_get() argument
455 struct be_queue_info *mcc_cq = &adapter->mcc_obj.cq; in be_mcc_compl_get()
465 void be_async_mcc_enable(struct be_adapter *adapter) in be_async_mcc_enable() argument
467 spin_lock_bh(&adapter->mcc_cq_lock); in be_async_mcc_enable()
469 be_cq_notify(adapter, adapter->mcc_obj.cq.id, true, 0); in be_async_mcc_enable()
470 adapter->mcc_obj.rearm_cq = true; in be_async_mcc_enable()
472 spin_unlock_bh(&adapter->mcc_cq_lock); in be_async_mcc_enable()
475 void be_async_mcc_disable(struct be_adapter *adapter) in be_async_mcc_disable() argument
477 spin_lock_bh(&adapter->mcc_cq_lock); in be_async_mcc_disable()
479 adapter->mcc_obj.rearm_cq = false; in be_async_mcc_disable()
480 be_cq_notify(adapter, adapter->mcc_obj.cq.id, false, 0); in be_async_mcc_disable()
482 spin_unlock_bh(&adapter->mcc_cq_lock); in be_async_mcc_disable()
485 int be_process_mcc(struct be_adapter *adapter) in be_process_mcc() argument
489 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_process_mcc()
491 spin_lock(&adapter->mcc_cq_lock); in be_process_mcc()
493 while ((compl = be_mcc_compl_get(adapter))) { in be_process_mcc()
495 be_mcc_event_process(adapter, compl); in be_process_mcc()
497 status = be_mcc_compl_process(adapter, compl); in be_process_mcc()
505 be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num); in be_process_mcc()
507 spin_unlock(&adapter->mcc_cq_lock); in be_process_mcc()
512 static int be_mcc_wait_compl(struct be_adapter *adapter) in be_mcc_wait_compl() argument
516 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_mcc_wait_compl()
519 if (be_check_error(adapter, BE_ERROR_ANY)) in be_mcc_wait_compl()
523 status = be_process_mcc(adapter); in be_mcc_wait_compl()
531 dev_err(&adapter->pdev->dev, "FW not responding\n"); in be_mcc_wait_compl()
532 be_set_error(adapter, BE_ERROR_FW); in be_mcc_wait_compl()
539 static int be_mcc_notify_wait(struct be_adapter *adapter) in be_mcc_notify_wait() argument
543 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_mcc_notify_wait()
552 status = be_mcc_notify(adapter); in be_mcc_notify_wait()
556 status = be_mcc_wait_compl(adapter); in be_mcc_notify_wait()
567 static int be_mbox_db_ready_wait(struct be_adapter *adapter, void __iomem *db) in be_mbox_db_ready_wait() argument
573 if (be_check_error(adapter, BE_ERROR_ANY)) in be_mbox_db_ready_wait()
585 dev_err(&adapter->pdev->dev, "FW not responding\n"); in be_mbox_db_ready_wait()
586 be_set_error(adapter, BE_ERROR_FW); in be_mbox_db_ready_wait()
587 be_detect_error(adapter); in be_mbox_db_ready_wait()
602 static int be_mbox_notify_wait(struct be_adapter *adapter) in be_mbox_notify_wait() argument
606 void __iomem *db = adapter->db + MPU_MAILBOX_DB_OFFSET; in be_mbox_notify_wait()
607 struct be_dma_mem *mbox_mem = &adapter->mbox_mem; in be_mbox_notify_wait()
612 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
622 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
631 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
637 status = be_mcc_compl_process(adapter, &mbox->compl); in be_mbox_notify_wait()
642 dev_err(&adapter->pdev->dev, "invalid mailbox completion\n"); in be_mbox_notify_wait()
648 static u16 be_POST_stage_get(struct be_adapter *adapter) in be_POST_stage_get() argument
652 if (BEx_chip(adapter)) in be_POST_stage_get()
653 sem = ioread32(adapter->csr + SLIPORT_SEMAPHORE_OFFSET_BEx); in be_POST_stage_get()
655 pci_read_config_dword(adapter->pdev, in be_POST_stage_get()
661 static int lancer_wait_ready(struct be_adapter *adapter) in lancer_wait_ready() argument
668 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET); in lancer_wait_ready()
682 int be_fw_wait_ready(struct be_adapter *adapter) in be_fw_wait_ready() argument
686 struct device *dev = &adapter->pdev->dev; in be_fw_wait_ready()
688 if (lancer_chip(adapter)) { in be_fw_wait_ready()
689 status = lancer_wait_ready(adapter); in be_fw_wait_ready()
699 if (BEx_chip(adapter) && be_virtfn(adapter)) in be_fw_wait_ready()
702 stage = be_POST_stage_get(adapter); in be_fw_wait_ready()
770 static inline struct be_mcc_wrb *wrb_from_mbox(struct be_adapter *adapter) in wrb_from_mbox() argument
772 struct be_dma_mem *mbox_mem = &adapter->mbox_mem; in wrb_from_mbox()
779 static struct be_mcc_wrb *wrb_from_mccq(struct be_adapter *adapter) in wrb_from_mccq() argument
781 struct be_queue_info *mccq = &adapter->mcc_obj.q; in wrb_from_mccq()
797 static bool use_mcc(struct be_adapter *adapter) in use_mcc() argument
799 return adapter->mcc_obj.q.created; in use_mcc()
803 static int be_cmd_lock(struct be_adapter *adapter) in be_cmd_lock() argument
805 if (use_mcc(adapter)) { in be_cmd_lock()
806 spin_lock_bh(&adapter->mcc_lock); in be_cmd_lock()
809 return mutex_lock_interruptible(&adapter->mbox_lock); in be_cmd_lock()
814 static void be_cmd_unlock(struct be_adapter *adapter) in be_cmd_unlock() argument
816 if (use_mcc(adapter)) in be_cmd_unlock()
817 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_unlock()
819 return mutex_unlock(&adapter->mbox_lock); in be_cmd_unlock()
822 static struct be_mcc_wrb *be_cmd_copy(struct be_adapter *adapter, in be_cmd_copy() argument
827 if (use_mcc(adapter)) { in be_cmd_copy()
828 dest_wrb = wrb_from_mccq(adapter); in be_cmd_copy()
832 dest_wrb = wrb_from_mbox(adapter); in be_cmd_copy()
843 static int be_cmd_notify_wait(struct be_adapter *adapter, in be_cmd_notify_wait() argument
849 status = be_cmd_lock(adapter); in be_cmd_notify_wait()
853 dest_wrb = be_cmd_copy(adapter, wrb); in be_cmd_notify_wait()
859 if (use_mcc(adapter)) in be_cmd_notify_wait()
860 status = be_mcc_notify_wait(adapter); in be_cmd_notify_wait()
862 status = be_mbox_notify_wait(adapter); in be_cmd_notify_wait()
868 be_cmd_unlock(adapter); in be_cmd_notify_wait()
875 int be_cmd_fw_init(struct be_adapter *adapter) in be_cmd_fw_init() argument
880 if (lancer_chip(adapter)) in be_cmd_fw_init()
883 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_fw_init()
886 wrb = (u8 *)wrb_from_mbox(adapter); in be_cmd_fw_init()
896 status = be_mbox_notify_wait(adapter); in be_cmd_fw_init()
898 mutex_unlock(&adapter->mbox_lock); in be_cmd_fw_init()
905 int be_cmd_fw_clean(struct be_adapter *adapter) in be_cmd_fw_clean() argument
910 if (lancer_chip(adapter)) in be_cmd_fw_clean()
913 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_fw_clean()
916 wrb = (u8 *)wrb_from_mbox(adapter); in be_cmd_fw_clean()
926 status = be_mbox_notify_wait(adapter); in be_cmd_fw_clean()
928 mutex_unlock(&adapter->mbox_lock); in be_cmd_fw_clean()
932 int be_cmd_eq_create(struct be_adapter *adapter, struct be_eq_obj *eqo) in be_cmd_eq_create() argument
939 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_eq_create()
942 wrb = wrb_from_mbox(adapter); in be_cmd_eq_create()
950 if (!(BEx_chip(adapter) || lancer_chip(adapter))) in be_cmd_eq_create()
965 status = be_mbox_notify_wait(adapter); in be_cmd_eq_create()
975 mutex_unlock(&adapter->mbox_lock); in be_cmd_eq_create()
980 int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr, in be_cmd_mac_addr_query() argument
987 spin_lock_bh(&adapter->mcc_lock); in be_cmd_mac_addr_query()
989 wrb = wrb_from_mccq(adapter); in be_cmd_mac_addr_query()
1008 status = be_mcc_notify_wait(adapter); in be_cmd_mac_addr_query()
1016 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_mac_addr_query()
1021 int be_cmd_pmac_add(struct be_adapter *adapter, u8 *mac_addr, in be_cmd_pmac_add() argument
1028 spin_lock_bh(&adapter->mcc_lock); in be_cmd_pmac_add()
1030 wrb = wrb_from_mccq(adapter); in be_cmd_pmac_add()
1045 status = be_mcc_notify_wait(adapter); in be_cmd_pmac_add()
1053 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_pmac_add()
1062 int be_cmd_pmac_del(struct be_adapter *adapter, u32 if_id, int pmac_id, u32 dom) in be_cmd_pmac_del() argument
1071 spin_lock_bh(&adapter->mcc_lock); in be_cmd_pmac_del()
1073 wrb = wrb_from_mccq(adapter); in be_cmd_pmac_del()
1088 status = be_mcc_notify_wait(adapter); in be_cmd_pmac_del()
1091 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_pmac_del()
1096 int be_cmd_cq_create(struct be_adapter *adapter, struct be_queue_info *cq, in be_cmd_cq_create() argument
1105 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_cq_create()
1108 wrb = wrb_from_mbox(adapter); in be_cmd_cq_create()
1118 if (BEx_chip(adapter)) { in be_cmd_cq_create()
1135 if (!lancer_chip(adapter)) in be_cmd_cq_create()
1151 status = be_mbox_notify_wait(adapter); in be_cmd_cq_create()
1159 mutex_unlock(&adapter->mbox_lock); in be_cmd_cq_create()
1173 static int be_cmd_mccq_ext_create(struct be_adapter *adapter, in be_cmd_mccq_ext_create() argument
1183 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_mccq_ext_create()
1186 wrb = wrb_from_mbox(adapter); in be_cmd_mccq_ext_create()
1195 if (BEx_chip(adapter)) { in be_cmd_mccq_ext_create()
1226 status = be_mbox_notify_wait(adapter); in be_cmd_mccq_ext_create()
1233 mutex_unlock(&adapter->mbox_lock); in be_cmd_mccq_ext_create()
1238 static int be_cmd_mccq_org_create(struct be_adapter *adapter, in be_cmd_mccq_org_create() argument
1248 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_mccq_org_create()
1251 wrb = wrb_from_mbox(adapter); in be_cmd_mccq_org_create()
1270 status = be_mbox_notify_wait(adapter); in be_cmd_mccq_org_create()
1278 mutex_unlock(&adapter->mbox_lock); in be_cmd_mccq_org_create()
1282 int be_cmd_mccq_create(struct be_adapter *adapter, in be_cmd_mccq_create() argument
1287 status = be_cmd_mccq_ext_create(adapter, mccq, cq); in be_cmd_mccq_create()
1288 if (status && BEx_chip(adapter)) { in be_cmd_mccq_create()
1289 dev_warn(&adapter->pdev->dev, "Upgrade to F/W ver 2.102.235.0 " in be_cmd_mccq_create()
1292 status = be_cmd_mccq_org_create(adapter, mccq, cq); in be_cmd_mccq_create()
1297 int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo) in be_cmd_txq_create() argument
1310 if (lancer_chip(adapter)) { in be_cmd_txq_create()
1312 } else if (BEx_chip(adapter)) { in be_cmd_txq_create()
1313 if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) in be_cmd_txq_create()
1320 req->if_id = cpu_to_le16(adapter->if_handle); in be_cmd_txq_create()
1329 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_txq_create()
1345 int be_cmd_rxq_create(struct be_adapter *adapter, in be_cmd_rxq_create() argument
1354 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rxq_create()
1356 wrb = wrb_from_mccq(adapter); in be_cmd_rxq_create()
1374 status = be_mcc_notify_wait(adapter); in be_cmd_rxq_create()
1384 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rxq_create()
1391 int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q, in be_cmd_q_destroy() argument
1399 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_q_destroy()
1402 wrb = wrb_from_mbox(adapter); in be_cmd_q_destroy()
1434 status = be_mbox_notify_wait(adapter); in be_cmd_q_destroy()
1437 mutex_unlock(&adapter->mbox_lock); in be_cmd_q_destroy()
1442 int be_cmd_rxq_destroy(struct be_adapter *adapter, struct be_queue_info *q) in be_cmd_rxq_destroy() argument
1448 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rxq_destroy()
1450 wrb = wrb_from_mccq(adapter); in be_cmd_rxq_destroy()
1461 status = be_mcc_notify_wait(adapter); in be_cmd_rxq_destroy()
1465 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rxq_destroy()
1472 int be_cmd_if_create(struct be_adapter *adapter, u32 cap_flags, u32 en_flags, in be_cmd_if_create() argument
1488 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_if_create()
1495 if (BE3_chip(adapter) && be_virtfn(adapter)) in be_cmd_if_create()
1496 adapter->pmac_id[0] = le32_to_cpu(resp->pmac_id); in be_cmd_if_create()
1502 int be_cmd_if_destroy(struct be_adapter *adapter, int interface_id, u32 domain) in be_cmd_if_destroy() argument
1511 spin_lock_bh(&adapter->mcc_lock); in be_cmd_if_destroy()
1513 wrb = wrb_from_mccq(adapter); in be_cmd_if_destroy()
1526 status = be_mcc_notify_wait(adapter); in be_cmd_if_destroy()
1528 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_if_destroy()
1536 int be_cmd_get_stats(struct be_adapter *adapter, struct be_dma_mem *nonemb_cmd) in be_cmd_get_stats() argument
1542 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_stats()
1544 wrb = wrb_from_mccq(adapter); in be_cmd_get_stats()
1556 if (BE2_chip(adapter)) in be_cmd_get_stats()
1558 if (BE3_chip(adapter) || lancer_chip(adapter)) in be_cmd_get_stats()
1563 status = be_mcc_notify(adapter); in be_cmd_get_stats()
1567 adapter->stats_cmd_sent = true; in be_cmd_get_stats()
1570 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_stats()
1575 int lancer_cmd_get_pport_stats(struct be_adapter *adapter, in lancer_cmd_get_pport_stats() argument
1582 if (!be_cmd_allowed(adapter, OPCODE_ETH_GET_PPORT_STATS, in lancer_cmd_get_pport_stats()
1586 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_get_pport_stats()
1588 wrb = wrb_from_mccq(adapter); in lancer_cmd_get_pport_stats()
1599 req->cmd_params.params.pport_num = cpu_to_le16(adapter->hba_port_num); in lancer_cmd_get_pport_stats()
1602 status = be_mcc_notify(adapter); in lancer_cmd_get_pport_stats()
1606 adapter->stats_cmd_sent = true; in lancer_cmd_get_pport_stats()
1609 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_get_pport_stats()
1639 int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed, in be_cmd_link_status_query() argument
1646 spin_lock_bh(&adapter->mcc_lock); in be_cmd_link_status_query()
1651 wrb = wrb_from_mccq(adapter); in be_cmd_link_status_query()
1663 if (!BE2_chip(adapter)) in be_cmd_link_status_query()
1668 status = be_mcc_notify_wait(adapter); in be_cmd_link_status_query()
1685 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_link_status_query()
1690 int be_cmd_get_die_temperature(struct be_adapter *adapter) in be_cmd_get_die_temperature() argument
1696 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_die_temperature()
1698 wrb = wrb_from_mccq(adapter); in be_cmd_get_die_temperature()
1709 status = be_mcc_notify(adapter); in be_cmd_get_die_temperature()
1711 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_die_temperature()
1716 int be_cmd_get_reg_len(struct be_adapter *adapter, u32 *log_size) in be_cmd_get_reg_len() argument
1722 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_reg_len()
1724 wrb = wrb_from_mccq(adapter); in be_cmd_get_reg_len()
1735 status = be_mcc_notify_wait(adapter); in be_cmd_get_reg_len()
1744 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_reg_len()
1748 int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf) in be_cmd_get_regs() argument
1763 get_fat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_regs()
1767 dev_err(&adapter->pdev->dev, in be_cmd_get_regs()
1772 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_regs()
1778 wrb = wrb_from_mccq(adapter); in be_cmd_get_regs()
1795 status = be_mcc_notify_wait(adapter); in be_cmd_get_regs()
1803 dev_err(&adapter->pdev->dev, "FAT Table Retrieve error\n"); in be_cmd_get_regs()
1810 dma_free_coherent(&adapter->pdev->dev, get_fat_cmd.size, in be_cmd_get_regs()
1812 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_regs()
1817 int be_cmd_get_fw_ver(struct be_adapter *adapter) in be_cmd_get_fw_ver() argument
1823 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_fw_ver()
1825 wrb = wrb_from_mccq(adapter); in be_cmd_get_fw_ver()
1836 status = be_mcc_notify_wait(adapter); in be_cmd_get_fw_ver()
1840 strlcpy(adapter->fw_ver, resp->firmware_version_string, in be_cmd_get_fw_ver()
1841 sizeof(adapter->fw_ver)); in be_cmd_get_fw_ver()
1842 strlcpy(adapter->fw_on_flash, resp->fw_on_flash_version_string, in be_cmd_get_fw_ver()
1843 sizeof(adapter->fw_on_flash)); in be_cmd_get_fw_ver()
1846 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_fw_ver()
1853 static int __be_cmd_modify_eqd(struct be_adapter *adapter, in __be_cmd_modify_eqd() argument
1860 spin_lock_bh(&adapter->mcc_lock); in __be_cmd_modify_eqd()
1862 wrb = wrb_from_mccq(adapter); in __be_cmd_modify_eqd()
1881 status = be_mcc_notify(adapter); in __be_cmd_modify_eqd()
1883 spin_unlock_bh(&adapter->mcc_lock); in __be_cmd_modify_eqd()
1887 int be_cmd_modify_eqd(struct be_adapter *adapter, struct be_set_eqd *set_eqd, in be_cmd_modify_eqd() argument
1894 __be_cmd_modify_eqd(adapter, &set_eqd[i], num_eqs); in be_cmd_modify_eqd()
1903 int be_cmd_vlan_config(struct be_adapter *adapter, u32 if_id, u16 *vtag_array, in be_cmd_vlan_config() argument
1910 spin_lock_bh(&adapter->mcc_lock); in be_cmd_vlan_config()
1912 wrb = wrb_from_mccq(adapter); in be_cmd_vlan_config()
1925 req->untagged = BE_IF_FLAGS_UNTAGGED & be_if_cap_flags(adapter) ? 1 : 0; in be_cmd_vlan_config()
1930 status = be_mcc_notify_wait(adapter); in be_cmd_vlan_config()
1932 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_vlan_config()
1936 static int __be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value) in __be_cmd_rx_filter() argument
1939 struct be_dma_mem *mem = &adapter->rx_filter; in __be_cmd_rx_filter()
1943 spin_lock_bh(&adapter->mcc_lock); in __be_cmd_rx_filter()
1945 wrb = wrb_from_mccq(adapter); in __be_cmd_rx_filter()
1955 req->if_id = cpu_to_le32(adapter->if_handle); in __be_cmd_rx_filter()
1968 be_if_cap_flags(adapter)); in __be_cmd_rx_filter()
1969 req->mcast_num = cpu_to_le32(netdev_mc_count(adapter->netdev)); in __be_cmd_rx_filter()
1970 netdev_for_each_mc_addr(ha, adapter->netdev) in __be_cmd_rx_filter()
1974 status = be_mcc_notify_wait(adapter); in __be_cmd_rx_filter()
1976 spin_unlock_bh(&adapter->mcc_lock); in __be_cmd_rx_filter()
1980 int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value) in be_cmd_rx_filter() argument
1982 struct device *dev = &adapter->pdev->dev; in be_cmd_rx_filter()
1984 if ((flags & be_if_cap_flags(adapter)) != flags) { in be_cmd_rx_filter()
1987 be_if_cap_flags(adapter)); in be_cmd_rx_filter()
1989 flags &= be_if_cap_flags(adapter); in be_cmd_rx_filter()
1993 return __be_cmd_rx_filter(adapter, flags, value); in be_cmd_rx_filter()
1997 int be_cmd_set_flow_control(struct be_adapter *adapter, u32 tx_fc, u32 rx_fc) in be_cmd_set_flow_control() argument
2003 if (!be_cmd_allowed(adapter, OPCODE_COMMON_SET_FLOW_CONTROL, in be_cmd_set_flow_control()
2007 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_flow_control()
2009 wrb = wrb_from_mccq(adapter); in be_cmd_set_flow_control()
2024 status = be_mcc_notify_wait(adapter); in be_cmd_set_flow_control()
2027 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_flow_control()
2036 int be_cmd_get_flow_control(struct be_adapter *adapter, u32 *tx_fc, u32 *rx_fc) in be_cmd_get_flow_control() argument
2042 if (!be_cmd_allowed(adapter, OPCODE_COMMON_GET_FLOW_CONTROL, in be_cmd_get_flow_control()
2046 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_flow_control()
2048 wrb = wrb_from_mccq(adapter); in be_cmd_get_flow_control()
2059 status = be_mcc_notify_wait(adapter); in be_cmd_get_flow_control()
2069 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_flow_control()
2074 int be_cmd_query_fw_cfg(struct be_adapter *adapter) in be_cmd_query_fw_cfg() argument
2080 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_query_fw_cfg()
2083 wrb = wrb_from_mbox(adapter); in be_cmd_query_fw_cfg()
2090 status = be_mbox_notify_wait(adapter); in be_cmd_query_fw_cfg()
2094 adapter->port_num = le32_to_cpu(resp->phys_port); in be_cmd_query_fw_cfg()
2095 adapter->function_mode = le32_to_cpu(resp->function_mode); in be_cmd_query_fw_cfg()
2096 adapter->function_caps = le32_to_cpu(resp->function_caps); in be_cmd_query_fw_cfg()
2097 adapter->asic_rev = le32_to_cpu(resp->asic_revision) & 0xFF; in be_cmd_query_fw_cfg()
2098 dev_info(&adapter->pdev->dev, in be_cmd_query_fw_cfg()
2100 adapter->function_mode, adapter->function_caps); in be_cmd_query_fw_cfg()
2103 mutex_unlock(&adapter->mbox_lock); in be_cmd_query_fw_cfg()
2108 int be_cmd_reset_function(struct be_adapter *adapter) in be_cmd_reset_function() argument
2114 if (lancer_chip(adapter)) { in be_cmd_reset_function()
2116 adapter->db + SLIPORT_CONTROL_OFFSET); in be_cmd_reset_function()
2117 status = lancer_wait_ready(adapter); in be_cmd_reset_function()
2119 dev_err(&adapter->pdev->dev, in be_cmd_reset_function()
2124 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_reset_function()
2127 wrb = wrb_from_mbox(adapter); in be_cmd_reset_function()
2134 status = be_mbox_notify_wait(adapter); in be_cmd_reset_function()
2136 mutex_unlock(&adapter->mbox_lock); in be_cmd_reset_function()
2140 int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, in be_cmd_rss_config() argument
2147 if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS)) in be_cmd_rss_config()
2150 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rss_config()
2152 wrb = wrb_from_mccq(adapter); in be_cmd_rss_config()
2162 req->if_id = cpu_to_le32(adapter->if_handle); in be_cmd_rss_config()
2166 if (!BEx_chip(adapter)) in be_cmd_rss_config()
2173 status = be_mcc_notify_wait(adapter); in be_cmd_rss_config()
2175 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rss_config()
2180 int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, in be_cmd_set_beacon_state() argument
2187 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_beacon_state()
2189 wrb = wrb_from_mccq(adapter); in be_cmd_set_beacon_state()
2205 status = be_mcc_notify_wait(adapter); in be_cmd_set_beacon_state()
2208 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_beacon_state()
2213 int be_cmd_get_beacon_state(struct be_adapter *adapter, u8 port_num, u32 *state) in be_cmd_get_beacon_state() argument
2219 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_beacon_state()
2221 wrb = wrb_from_mccq(adapter); in be_cmd_get_beacon_state()
2234 status = be_mcc_notify_wait(adapter); in be_cmd_get_beacon_state()
2243 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_beacon_state()
2248 int be_cmd_read_port_transceiver_data(struct be_adapter *adapter, in be_cmd_read_port_transceiver_data() argument
2260 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_read_port_transceiver_data()
2263 dev_err(&adapter->pdev->dev, "Memory allocation failed\n"); in be_cmd_read_port_transceiver_data()
2267 spin_lock_bh(&adapter->mcc_lock); in be_cmd_read_port_transceiver_data()
2269 wrb = wrb_from_mccq(adapter); in be_cmd_read_port_transceiver_data()
2280 req->port = cpu_to_le32(adapter->hba_port_num); in be_cmd_read_port_transceiver_data()
2282 status = be_mcc_notify_wait(adapter); in be_cmd_read_port_transceiver_data()
2289 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_read_port_transceiver_data()
2290 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_read_port_transceiver_data()
2294 int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd, in lancer_cmd_write_object() argument
2305 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2306 adapter->flash_status = 0; in lancer_cmd_write_object()
2308 wrb = wrb_from_mccq(adapter); in lancer_cmd_write_object()
2343 status = be_mcc_notify(adapter); in lancer_cmd_write_object()
2347 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2349 if (!wait_for_completion_timeout(&adapter->et_cmd_compl, in lancer_cmd_write_object()
2353 status = adapter->flash_status; in lancer_cmd_write_object()
2366 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2370 int be_cmd_query_cable_type(struct be_adapter *adapter) in be_cmd_query_cable_type() argument
2375 status = be_cmd_read_port_transceiver_data(adapter, TR_PAGE_A0, in be_cmd_query_cable_type()
2378 switch (adapter->phy.interface_type) { in be_cmd_query_cable_type()
2380 adapter->phy.cable_type = in be_cmd_query_cable_type()
2384 adapter->phy.cable_type = in be_cmd_query_cable_type()
2388 adapter->phy.cable_type = 0; in be_cmd_query_cable_type()
2395 int be_cmd_query_sfp_info(struct be_adapter *adapter) in be_cmd_query_sfp_info() argument
2400 status = be_cmd_read_port_transceiver_data(adapter, TR_PAGE_A0, in be_cmd_query_sfp_info()
2403 strlcpy(adapter->phy.vendor_name, page_data + in be_cmd_query_sfp_info()
2405 strlcpy(adapter->phy.vendor_pn, in be_cmd_query_sfp_info()
2413 int lancer_cmd_delete_object(struct be_adapter *adapter, const char *obj_name) in lancer_cmd_delete_object() argument
2419 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_delete_object()
2421 wrb = wrb_from_mccq(adapter); in lancer_cmd_delete_object()
2435 status = be_mcc_notify_wait(adapter); in lancer_cmd_delete_object()
2437 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_delete_object()
2441 int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd, in lancer_cmd_read_object() argument
2450 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_read_object()
2452 wrb = wrb_from_mccq(adapter); in lancer_cmd_read_object()
2473 status = be_mcc_notify_wait(adapter); in lancer_cmd_read_object()
2484 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_read_object()
2488 int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, in be_cmd_write_flashrom() argument
2496 spin_lock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2497 adapter->flash_status = 0; in be_cmd_write_flashrom()
2499 wrb = wrb_from_mccq(adapter); in be_cmd_write_flashrom()
2517 status = be_mcc_notify(adapter); in be_cmd_write_flashrom()
2521 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2523 if (!wait_for_completion_timeout(&adapter->et_cmd_compl, in be_cmd_write_flashrom()
2527 status = adapter->flash_status; in be_cmd_write_flashrom()
2532 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2536 int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, in be_cmd_get_flash_crc() argument
2543 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_flash_crc()
2545 wrb = wrb_from_mccq(adapter); in be_cmd_get_flash_crc()
2565 status = be_mcc_notify_wait(adapter); in be_cmd_get_flash_crc()
2570 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_flash_crc()
2574 int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac, in be_cmd_enable_magic_wol() argument
2581 spin_lock_bh(&adapter->mcc_lock); in be_cmd_enable_magic_wol()
2583 wrb = wrb_from_mccq(adapter); in be_cmd_enable_magic_wol()
2595 status = be_mcc_notify_wait(adapter); in be_cmd_enable_magic_wol()
2598 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_enable_magic_wol()
2602 int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num, in be_cmd_set_loopback() argument
2609 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_loopback()
2611 wrb = wrb_from_mccq(adapter); in be_cmd_set_loopback()
2628 status = be_mcc_notify(adapter); in be_cmd_set_loopback()
2632 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_loopback()
2634 if (!wait_for_completion_timeout(&adapter->et_cmd_compl, in be_cmd_set_loopback()
2641 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_loopback()
2645 int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num, in be_cmd_loopback_test() argument
2654 spin_lock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2656 wrb = wrb_from_mccq(adapter); in be_cmd_loopback_test()
2676 status = be_mcc_notify(adapter); in be_cmd_loopback_test()
2680 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2682 wait_for_completion(&adapter->et_cmd_compl); in be_cmd_loopback_test()
2688 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2692 int be_cmd_ddr_dma_test(struct be_adapter *adapter, u64 pattern, in be_cmd_ddr_dma_test() argument
2700 spin_lock_bh(&adapter->mcc_lock); in be_cmd_ddr_dma_test()
2702 wrb = wrb_from_mccq(adapter); in be_cmd_ddr_dma_test()
2721 status = be_mcc_notify_wait(adapter); in be_cmd_ddr_dma_test()
2734 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_ddr_dma_test()
2738 int be_cmd_get_seeprom_data(struct be_adapter *adapter, in be_cmd_get_seeprom_data() argument
2745 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_seeprom_data()
2747 wrb = wrb_from_mccq(adapter); in be_cmd_get_seeprom_data()
2758 status = be_mcc_notify_wait(adapter); in be_cmd_get_seeprom_data()
2761 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_seeprom_data()
2765 int be_cmd_get_phy_info(struct be_adapter *adapter) in be_cmd_get_phy_info() argument
2772 if (!be_cmd_allowed(adapter, OPCODE_COMMON_GET_PHY_DETAILS, in be_cmd_get_phy_info()
2776 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_phy_info()
2778 wrb = wrb_from_mccq(adapter); in be_cmd_get_phy_info()
2784 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_phy_info()
2787 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); in be_cmd_get_phy_info()
2798 status = be_mcc_notify_wait(adapter); in be_cmd_get_phy_info()
2803 adapter->phy.phy_type = le16_to_cpu(resp_phy_info->phy_type); in be_cmd_get_phy_info()
2804 adapter->phy.interface_type = in be_cmd_get_phy_info()
2806 adapter->phy.auto_speeds_supported = in be_cmd_get_phy_info()
2808 adapter->phy.fixed_speeds_supported = in be_cmd_get_phy_info()
2810 adapter->phy.misc_params = in be_cmd_get_phy_info()
2813 if (BE2_chip(adapter)) { in be_cmd_get_phy_info()
2814 adapter->phy.fixed_speeds_supported = in be_cmd_get_phy_info()
2819 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_get_phy_info()
2821 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_phy_info()
2825 static int be_cmd_set_qos(struct be_adapter *adapter, u32 bps, u32 domain) in be_cmd_set_qos() argument
2831 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_qos()
2833 wrb = wrb_from_mccq(adapter); in be_cmd_set_qos()
2848 status = be_mcc_notify_wait(adapter); in be_cmd_set_qos()
2851 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_qos()
2855 int be_cmd_get_cntl_attributes(struct be_adapter *adapter) in be_cmd_get_cntl_attributes() argument
2866 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_cntl_attributes()
2871 attribs_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_cntl_attributes()
2875 dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); in be_cmd_get_cntl_attributes()
2880 wrb = wrb_from_mbox(adapter); in be_cmd_get_cntl_attributes()
2891 status = be_mbox_notify_wait(adapter); in be_cmd_get_cntl_attributes()
2894 adapter->hba_port_num = attribs->hba_attribs.phy_port; in be_cmd_get_cntl_attributes()
2895 adapter->pci_func_num = attribs->pci_func_num; in be_cmd_get_cntl_attributes()
2898 adapter->serial_num[i] = le32_to_cpu(serial_num[i]) & in be_cmd_get_cntl_attributes()
2903 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_cntl_attributes()
2905 dma_free_coherent(&adapter->pdev->dev, attribs_cmd.size, in be_cmd_get_cntl_attributes()
2911 int be_cmd_req_native_mode(struct be_adapter *adapter) in be_cmd_req_native_mode() argument
2917 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_req_native_mode()
2920 wrb = wrb_from_mbox(adapter); in be_cmd_req_native_mode()
2936 status = be_mbox_notify_wait(adapter); in be_cmd_req_native_mode()
2940 adapter->be3_native = le32_to_cpu(resp->cap_flags) & in be_cmd_req_native_mode()
2942 if (!adapter->be3_native) in be_cmd_req_native_mode()
2943 dev_warn(&adapter->pdev->dev, in be_cmd_req_native_mode()
2947 mutex_unlock(&adapter->mbox_lock); in be_cmd_req_native_mode()
2952 int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege, in be_cmd_get_fn_privileges() argument
2959 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_fn_privileges()
2961 wrb = wrb_from_mccq(adapter); in be_cmd_get_fn_privileges()
2975 status = be_mcc_notify_wait(adapter); in be_cmd_get_fn_privileges()
2985 if (BEx_chip(adapter) && be_is_mc(adapter) && in be_cmd_get_fn_privileges()
2986 be_physfn(adapter)) in be_cmd_get_fn_privileges()
2991 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_fn_privileges()
2996 int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges, in be_cmd_set_fn_privileges() argument
3003 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_fn_privileges()
3005 wrb = wrb_from_mccq(adapter); in be_cmd_set_fn_privileges()
3016 if (lancer_chip(adapter)) in be_cmd_set_fn_privileges()
3021 status = be_mcc_notify_wait(adapter); in be_cmd_set_fn_privileges()
3023 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_fn_privileges()
3031 int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, in be_cmd_get_mac_from_list() argument
3044 get_mac_list_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_mac_from_list()
3050 dev_err(&adapter->pdev->dev, in be_cmd_get_mac_from_list()
3055 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_mac_from_list()
3057 wrb = wrb_from_mccq(adapter); in be_cmd_get_mac_from_list()
3078 status = be_mcc_notify_wait(adapter); in be_cmd_get_mac_from_list()
3119 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_mac_from_list()
3120 dma_free_coherent(&adapter->pdev->dev, get_mac_list_cmd.size, in be_cmd_get_mac_from_list()
3125 int be_cmd_get_active_mac(struct be_adapter *adapter, u32 curr_pmac_id, in be_cmd_get_active_mac() argument
3129 be_cmd_get_mac_from_list(adapter, mac, &active, &curr_pmac_id, in be_cmd_get_active_mac()
3131 if (BEx_chip(adapter)) in be_cmd_get_active_mac()
3132 return be_cmd_mac_addr_query(adapter, mac, false, in be_cmd_get_active_mac()
3136 return be_cmd_get_mac_from_list(adapter, mac, &active, in be_cmd_get_active_mac()
3141 int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) in be_cmd_get_perm_mac() argument
3148 if (BEx_chip(adapter)) { in be_cmd_get_perm_mac()
3149 if (be_physfn(adapter)) in be_cmd_get_perm_mac()
3150 status = be_cmd_mac_addr_query(adapter, mac, true, 0, in be_cmd_get_perm_mac()
3153 status = be_cmd_mac_addr_query(adapter, mac, false, in be_cmd_get_perm_mac()
3154 adapter->if_handle, 0); in be_cmd_get_perm_mac()
3156 status = be_cmd_get_mac_from_list(adapter, mac, &pmac_valid, in be_cmd_get_perm_mac()
3157 NULL, adapter->if_handle, 0); in be_cmd_get_perm_mac()
3164 int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, in be_cmd_set_mac_list() argument
3174 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_set_mac_list()
3179 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_mac_list()
3181 wrb = wrb_from_mccq(adapter); in be_cmd_set_mac_list()
3197 status = be_mcc_notify_wait(adapter); in be_cmd_set_mac_list()
3200 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_set_mac_list()
3201 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_mac_list()
3209 int be_cmd_set_mac(struct be_adapter *adapter, u8 *mac, int if_id, u32 dom) in be_cmd_set_mac() argument
3216 status = be_cmd_get_mac_from_list(adapter, old_mac, &active_mac, in be_cmd_set_mac()
3220 be_cmd_pmac_del(adapter, if_id, pmac_id, dom); in be_cmd_set_mac()
3222 return be_cmd_set_mac_list(adapter, mac, mac ? 1 : 0, dom); in be_cmd_set_mac()
3225 int be_cmd_set_hsw_config(struct be_adapter *adapter, u16 pvid, in be_cmd_set_hsw_config() argument
3233 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_hsw_config()
3235 wrb = wrb_from_mccq(adapter); in be_cmd_set_hsw_config()
3254 if (!BEx_chip(adapter) && hsw_mode) { in be_cmd_set_hsw_config()
3256 ctxt, adapter->hba_port_num); in be_cmd_set_hsw_config()
3263 if (!BEx_chip(adapter) && spoofchk) { in be_cmd_set_hsw_config()
3271 status = be_mcc_notify_wait(adapter); in be_cmd_set_hsw_config()
3274 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_hsw_config()
3279 int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, in be_cmd_get_hsw_config() argument
3288 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_hsw_config()
3290 wrb = wrb_from_mccq(adapter); in be_cmd_get_hsw_config()
3308 if (!BEx_chip(adapter) && mode) { in be_cmd_get_hsw_config()
3310 ctxt, adapter->hba_port_num); in be_cmd_get_hsw_config()
3315 status = be_mcc_notify_wait(adapter); in be_cmd_get_hsw_config()
3335 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_hsw_config()
3339 static bool be_is_wol_excluded(struct be_adapter *adapter) in be_is_wol_excluded() argument
3341 struct pci_dev *pdev = adapter->pdev; in be_is_wol_excluded()
3343 if (be_virtfn(adapter)) in be_is_wol_excluded()
3357 int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) in be_cmd_get_acpi_wol_cap() argument
3364 if (!be_cmd_allowed(adapter, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG, in be_cmd_get_acpi_wol_cap()
3368 if (be_is_wol_excluded(adapter)) in be_cmd_get_acpi_wol_cap()
3371 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_acpi_wol_cap()
3376 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_acpi_wol_cap()
3379 dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); in be_cmd_get_acpi_wol_cap()
3384 wrb = wrb_from_mbox(adapter); in be_cmd_get_acpi_wol_cap()
3399 status = be_mbox_notify_wait(adapter); in be_cmd_get_acpi_wol_cap()
3405 adapter->wol_cap = resp->wol_settings; in be_cmd_get_acpi_wol_cap()
3406 if (adapter->wol_cap & BE_WOL_CAP) in be_cmd_get_acpi_wol_cap()
3407 adapter->wol_en = true; in be_cmd_get_acpi_wol_cap()
3410 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_acpi_wol_cap()
3412 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_acpi_wol_cap()
3418 int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level) in be_cmd_set_fw_log_level() argument
3427 extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_set_fw_log_level()
3433 status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd); in be_cmd_set_fw_log_level()
3449 status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs); in be_cmd_set_fw_log_level()
3451 dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, in be_cmd_set_fw_log_level()
3456 int be_cmd_get_fw_log_level(struct be_adapter *adapter) in be_cmd_get_fw_log_level() argument
3465 extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_fw_log_level()
3470 dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n", in be_cmd_get_fw_log_level()
3475 status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd); in be_cmd_get_fw_log_level()
3485 dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, in be_cmd_get_fw_log_level()
3491 int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter, in be_cmd_get_ext_fat_capabilites() argument
3498 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_ext_fat_capabilites()
3501 wrb = wrb_from_mbox(adapter); in be_cmd_get_ext_fat_capabilites()
3513 status = be_mbox_notify_wait(adapter); in be_cmd_get_ext_fat_capabilites()
3515 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_ext_fat_capabilites()
3519 int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter, in be_cmd_set_ext_fat_capabilites() argument
3527 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_ext_fat_capabilites()
3529 wrb = wrb_from_mccq(adapter); in be_cmd_set_ext_fat_capabilites()
3541 status = be_mcc_notify_wait(adapter); in be_cmd_set_ext_fat_capabilites()
3543 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_ext_fat_capabilites()
3547 int be_cmd_query_port_name(struct be_adapter *adapter) in be_cmd_query_port_name() argument
3553 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_query_port_name()
3556 wrb = wrb_from_mbox(adapter); in be_cmd_query_port_name()
3562 if (!BEx_chip(adapter)) in be_cmd_query_port_name()
3565 status = be_mbox_notify_wait(adapter); in be_cmd_query_port_name()
3569 adapter->port_name = resp->port_name[adapter->hba_port_num]; in be_cmd_query_port_name()
3571 adapter->port_name = adapter->hba_port_num + '0'; in be_cmd_query_port_name()
3574 mutex_unlock(&adapter->mbox_lock); in be_cmd_query_port_name()
3672 int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res) in be_cmd_get_func_config() argument
3679 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_func_config()
3684 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_func_config()
3687 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); in be_cmd_get_func_config()
3692 wrb = wrb_from_mbox(adapter); in be_cmd_get_func_config()
3704 if (skyhawk_chip(adapter)) in be_cmd_get_func_config()
3707 status = be_mbox_notify_wait(adapter); in be_cmd_get_func_config()
3718 adapter->pf_number = desc->pf_num; in be_cmd_get_func_config()
3722 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_func_config()
3724 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_func_config()
3733 int be_cmd_get_profile_config(struct be_adapter *adapter, in be_cmd_get_profile_config() argument
3749 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_profile_config()
3759 if (!lancer_chip(adapter)) in be_cmd_get_profile_config()
3767 req->hdr.pf_num = adapter->pci_func_num + 1; in be_cmd_get_profile_config()
3776 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_get_profile_config()
3783 pcie = be_get_pcie_desc(adapter->pdev->devfn, resp->func_param, in be_cmd_get_profile_config()
3790 adapter->mc_type = port->mc_type; in be_cmd_get_profile_config()
3801 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_profile_config()
3807 static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc, in be_cmd_set_profile_config() argument
3817 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_set_profile_config()
3831 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_set_profile_config()
3834 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_set_profile_config()
3875 int be_cmd_config_qos(struct be_adapter *adapter, u32 max_rate, u16 link_speed, in be_cmd_config_qos() argument
3882 if (BE3_chip(adapter)) in be_cmd_config_qos()
3883 return be_cmd_set_qos(adapter, max_rate / 10, domain); in be_cmd_config_qos()
3886 nic_desc.pf_num = adapter->pf_number; in be_cmd_config_qos()
3889 if (lancer_chip(adapter)) { in be_cmd_config_qos()
3904 return be_cmd_set_profile_config(adapter, &nic_desc, in be_cmd_config_qos()
3909 static void be_fill_vf_res_template(struct be_adapter *adapter, in be_fill_vf_res_template() argument
3920 be_cmd_get_profile_config(adapter, &res_mod, RESOURCE_MODIFIABLE, 0); in be_fill_vf_res_template()
3973 int be_cmd_set_sriov_config(struct be_adapter *adapter, in be_cmd_set_sriov_config() argument
3987 desc.pcie.pf_num = adapter->pdev->devfn; in be_cmd_set_sriov_config()
3996 desc.nic_vft.pf_num = adapter->pdev->devfn; in be_cmd_set_sriov_config()
3999 be_fill_vf_res_template(adapter, pool_res, num_vfs, num_vf_qs, in be_cmd_set_sriov_config()
4002 return be_cmd_set_profile_config(adapter, &desc, in be_cmd_set_sriov_config()
4006 int be_cmd_manage_iface(struct be_adapter *adapter, u32 iface, u8 op) in be_cmd_manage_iface() argument
4015 spin_lock_bh(&adapter->mcc_lock); in be_cmd_manage_iface()
4017 wrb = wrb_from_mccq(adapter); in be_cmd_manage_iface()
4030 status = be_mcc_notify_wait(adapter); in be_cmd_manage_iface()
4032 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_manage_iface()
4036 int be_cmd_set_vxlan_port(struct be_adapter *adapter, __be16 port) in be_cmd_set_vxlan_port() argument
4044 port_desc.link_num = adapter->hba_port_num; in be_cmd_set_vxlan_port()
4054 return be_cmd_set_profile_config(adapter, &port_desc, in be_cmd_set_vxlan_port()
4058 int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg, in be_cmd_get_if_id() argument
4066 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_if_id()
4068 wrb = wrb_from_mccq(adapter); in be_cmd_get_if_id()
4080 status = be_mcc_notify_wait(adapter); in be_cmd_get_if_id()
4087 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_if_id()
4091 static int lancer_wait_idle(struct be_adapter *adapter) in lancer_wait_idle() argument
4098 reg_val = ioread32(adapter->db + PHYSDEV_CONTROL_OFFSET); in lancer_wait_idle()
4111 int lancer_physdev_ctrl(struct be_adapter *adapter, u32 mask) in lancer_physdev_ctrl() argument
4115 status = lancer_wait_idle(adapter); in lancer_physdev_ctrl()
4119 iowrite32(mask, adapter->db + PHYSDEV_CONTROL_OFFSET); in lancer_physdev_ctrl()
4125 bool dump_present(struct be_adapter *adapter) in dump_present() argument
4129 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET); in dump_present()
4133 int lancer_initiate_dump(struct be_adapter *adapter) in lancer_initiate_dump() argument
4135 struct device *dev = &adapter->pdev->dev; in lancer_initiate_dump()
4138 if (dump_present(adapter)) { in lancer_initiate_dump()
4144 status = lancer_physdev_ctrl(adapter, PHYSDEV_CONTROL_FW_RESET_MASK | in lancer_initiate_dump()
4151 status = lancer_wait_idle(adapter); in lancer_initiate_dump()
4155 if (!dump_present(adapter)) { in lancer_initiate_dump()
4163 int lancer_delete_dump(struct be_adapter *adapter) in lancer_delete_dump() argument
4167 status = lancer_cmd_delete_object(adapter, LANCER_FW_DUMP_FILE); in lancer_delete_dump()
4172 int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain) in be_cmd_enable_vf() argument
4178 if (BEx_chip(adapter)) in be_cmd_enable_vf()
4181 spin_lock_bh(&adapter->mcc_lock); in be_cmd_enable_vf()
4183 wrb = wrb_from_mccq(adapter); in be_cmd_enable_vf()
4197 status = be_mcc_notify_wait(adapter); in be_cmd_enable_vf()
4199 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_enable_vf()
4203 int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable) in be_cmd_intr_set() argument
4209 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_intr_set()
4212 wrb = wrb_from_mbox(adapter); in be_cmd_intr_set()
4222 status = be_mbox_notify_wait(adapter); in be_cmd_intr_set()
4224 mutex_unlock(&adapter->mbox_lock); in be_cmd_intr_set()
4229 int be_cmd_get_active_profile(struct be_adapter *adapter, u16 *profile_id) in be_cmd_get_active_profile() argument
4235 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_active_profile()
4238 wrb = wrb_from_mbox(adapter); in be_cmd_get_active_profile()
4250 status = be_mbox_notify_wait(adapter); in be_cmd_get_active_profile()
4259 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_active_profile()
4263 int be_cmd_set_logical_link_config(struct be_adapter *adapter, in be_cmd_set_logical_link_config() argument
4270 if (BEx_chip(adapter) || lancer_chip(adapter)) in be_cmd_set_logical_link_config()
4273 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_logical_link_config()
4275 wrb = wrb_from_mccq(adapter); in be_cmd_set_logical_link_config()
4296 status = be_mcc_notify_wait(adapter); in be_cmd_set_logical_link_config()
4298 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_logical_link_config()
4305 struct be_adapter *adapter = netdev_priv(netdev_handle); in be_roce_mcc_cmd() local
4312 spin_lock_bh(&adapter->mcc_lock); in be_roce_mcc_cmd()
4314 wrb = wrb_from_mccq(adapter); in be_roce_mcc_cmd()
4327 status = be_mcc_notify_wait(adapter); in be_roce_mcc_cmd()
4335 spin_unlock_bh(&adapter->mcc_lock); in be_roce_mcc_cmd()