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 void 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_error(adapter)) in be_mcc_notify()
103 iowrite32(val, adapter->db + DB_MCCQ_OFFSET); in be_mcc_notify()
154 static void be_async_cmd_process(struct be_adapter *adapter, in be_async_cmd_process() argument
168 complete(&adapter->et_cmd_compl); in be_async_cmd_process()
175 adapter->flash_status = compl->status; in be_async_cmd_process()
176 complete(&adapter->et_cmd_compl); in be_async_cmd_process()
184 be_parse_stats(adapter); in be_async_cmd_process()
185 adapter->stats_cmd_sent = false; in be_async_cmd_process()
194 adapter->drv_stats.be_on_die_temperature = in be_async_cmd_process()
197 adapter->be_get_temp_freq = 0; in be_async_cmd_process()
203 static int be_mcc_compl_process(struct be_adapter *adapter, in be_mcc_compl_process() argument
224 be_async_cmd_process(adapter, compl, resp_hdr); in be_mcc_compl_process()
229 dev_warn(&adapter->pdev->dev, in be_mcc_compl_process()
233 dev_err(&adapter->pdev->dev, in be_mcc_compl_process()
242 static void be_async_link_state_process(struct be_adapter *adapter, in be_async_link_state_process() argument
249 adapter->phy.link_speed = -1; in be_async_link_state_process()
256 if (!BEx_chip(adapter) && in be_async_link_state_process()
263 if (adapter->flags & BE_FLAGS_LINK_STATUS_INIT) in be_async_link_state_process()
264 be_link_status_update(adapter, in be_async_link_state_process()
268 static void be_async_port_misconfig_event_process(struct be_adapter *adapter, in be_async_port_misconfig_event_process() argument
274 struct device *dev = &adapter->pdev->dev; in be_async_port_misconfig_event_process()
278 ((sfp_mismatch_evt >> (adapter->hba_port_num * 8)) & 0xff); in be_async_port_misconfig_event_process()
283 dev_info(dev, "Port %c: %s %s", adapter->port_name, in be_async_port_misconfig_event_process()
288 adapter->flags |= BE_FLAGS_EVT_INCOMPATIBLE_SFP; in be_async_port_misconfig_event_process()
292 static void be_async_grp5_cos_priority_process(struct be_adapter *adapter, in be_async_grp5_cos_priority_process() argument
299 adapter->vlan_prio_bmap = evt->available_priority_bmap; in be_async_grp5_cos_priority_process()
300 adapter->recommended_prio &= ~VLAN_PRIO_MASK; in be_async_grp5_cos_priority_process()
301 adapter->recommended_prio = in be_async_grp5_cos_priority_process()
307 static void be_async_grp5_qos_speed_process(struct be_adapter *adapter, in be_async_grp5_qos_speed_process() argument
313 if (adapter->phy.link_speed >= 0 && in be_async_grp5_qos_speed_process()
314 evt->physical_port == adapter->port_num) in be_async_grp5_qos_speed_process()
315 adapter->phy.link_speed = le16_to_cpu(evt->qos_link_speed) * 10; in be_async_grp5_qos_speed_process()
319 static void be_async_grp5_pvid_state_process(struct be_adapter *adapter, in be_async_grp5_pvid_state_process() argument
326 adapter->pvid = le16_to_cpu(evt->tag) & VLAN_VID_MASK; in be_async_grp5_pvid_state_process()
327 dev_info(&adapter->pdev->dev, "LPVID: %d\n", adapter->pvid); in be_async_grp5_pvid_state_process()
329 adapter->pvid = 0; in be_async_grp5_pvid_state_process()
333 static void be_async_grp5_evt_process(struct be_adapter *adapter, in be_async_grp5_evt_process() argument
341 be_async_grp5_cos_priority_process(adapter, compl); in be_async_grp5_evt_process()
344 be_async_grp5_qos_speed_process(adapter, compl); in be_async_grp5_evt_process()
347 be_async_grp5_pvid_state_process(adapter, compl); in be_async_grp5_evt_process()
354 static void be_async_dbg_evt_process(struct be_adapter *adapter, in be_async_dbg_evt_process() argument
366 adapter->qnq_vid = le16_to_cpu(evt->vlan_tag); in be_async_dbg_evt_process()
367 adapter->flags |= BE_FLAGS_QNQ_ASYNC_EVT_RCVD; in be_async_dbg_evt_process()
370 dev_warn(&adapter->pdev->dev, "Unknown debug event 0x%x!\n", in be_async_dbg_evt_process()
376 static void be_async_sliport_evt_process(struct be_adapter *adapter, in be_async_sliport_evt_process() argument
383 be_async_port_misconfig_event_process(adapter, cmp); in be_async_sliport_evt_process()
410 static void be_mcc_event_process(struct be_adapter *adapter, in be_mcc_event_process() argument
414 be_async_link_state_process(adapter, compl); in be_mcc_event_process()
416 be_async_grp5_evt_process(adapter, compl); in be_mcc_event_process()
418 be_async_dbg_evt_process(adapter, compl); in be_mcc_event_process()
420 be_async_sliport_evt_process(adapter, compl); in be_mcc_event_process()
423 static struct be_mcc_compl *be_mcc_compl_get(struct be_adapter *adapter) in be_mcc_compl_get() argument
425 struct be_queue_info *mcc_cq = &adapter->mcc_obj.cq; in be_mcc_compl_get()
435 void be_async_mcc_enable(struct be_adapter *adapter) in be_async_mcc_enable() argument
437 spin_lock_bh(&adapter->mcc_cq_lock); in be_async_mcc_enable()
439 be_cq_notify(adapter, adapter->mcc_obj.cq.id, true, 0); in be_async_mcc_enable()
440 adapter->mcc_obj.rearm_cq = true; in be_async_mcc_enable()
442 spin_unlock_bh(&adapter->mcc_cq_lock); in be_async_mcc_enable()
445 void be_async_mcc_disable(struct be_adapter *adapter) in be_async_mcc_disable() argument
447 spin_lock_bh(&adapter->mcc_cq_lock); in be_async_mcc_disable()
449 adapter->mcc_obj.rearm_cq = false; in be_async_mcc_disable()
450 be_cq_notify(adapter, adapter->mcc_obj.cq.id, false, 0); in be_async_mcc_disable()
452 spin_unlock_bh(&adapter->mcc_cq_lock); in be_async_mcc_disable()
455 int be_process_mcc(struct be_adapter *adapter) in be_process_mcc() argument
459 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_process_mcc()
461 spin_lock(&adapter->mcc_cq_lock); in be_process_mcc()
463 while ((compl = be_mcc_compl_get(adapter))) { in be_process_mcc()
465 be_mcc_event_process(adapter, compl); in be_process_mcc()
467 status = be_mcc_compl_process(adapter, compl); in be_process_mcc()
475 be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num); in be_process_mcc()
477 spin_unlock(&adapter->mcc_cq_lock); in be_process_mcc()
482 static int be_mcc_wait_compl(struct be_adapter *adapter) in be_mcc_wait_compl() argument
486 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_mcc_wait_compl()
489 if (be_error(adapter)) in be_mcc_wait_compl()
493 status = be_process_mcc(adapter); in be_mcc_wait_compl()
501 dev_err(&adapter->pdev->dev, "FW not responding\n"); in be_mcc_wait_compl()
502 adapter->fw_timeout = true; in be_mcc_wait_compl()
509 static int be_mcc_notify_wait(struct be_adapter *adapter) in be_mcc_notify_wait() argument
513 struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; in be_mcc_notify_wait()
522 be_mcc_notify(adapter); in be_mcc_notify_wait()
524 status = be_mcc_wait_compl(adapter); in be_mcc_notify_wait()
535 static int be_mbox_db_ready_wait(struct be_adapter *adapter, void __iomem *db) in be_mbox_db_ready_wait() argument
541 if (be_error(adapter)) in be_mbox_db_ready_wait()
553 dev_err(&adapter->pdev->dev, "FW not responding\n"); in be_mbox_db_ready_wait()
554 adapter->fw_timeout = true; in be_mbox_db_ready_wait()
555 be_detect_error(adapter); in be_mbox_db_ready_wait()
570 static int be_mbox_notify_wait(struct be_adapter *adapter) in be_mbox_notify_wait() argument
574 void __iomem *db = adapter->db + MPU_MAILBOX_DB_OFFSET; in be_mbox_notify_wait()
575 struct be_dma_mem *mbox_mem = &adapter->mbox_mem; in be_mbox_notify_wait()
580 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
590 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
599 status = be_mbox_db_ready_wait(adapter, db); in be_mbox_notify_wait()
605 status = be_mcc_compl_process(adapter, &mbox->compl); in be_mbox_notify_wait()
610 dev_err(&adapter->pdev->dev, "invalid mailbox completion\n"); in be_mbox_notify_wait()
616 static u16 be_POST_stage_get(struct be_adapter *adapter) in be_POST_stage_get() argument
620 if (BEx_chip(adapter)) in be_POST_stage_get()
621 sem = ioread32(adapter->csr + SLIPORT_SEMAPHORE_OFFSET_BEx); in be_POST_stage_get()
623 pci_read_config_dword(adapter->pdev, in be_POST_stage_get()
629 static int lancer_wait_ready(struct be_adapter *adapter) in lancer_wait_ready() argument
636 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET); in lancer_wait_ready()
650 int be_fw_wait_ready(struct be_adapter *adapter) in be_fw_wait_ready() argument
654 struct device *dev = &adapter->pdev->dev; in be_fw_wait_ready()
656 if (lancer_chip(adapter)) { in be_fw_wait_ready()
657 status = lancer_wait_ready(adapter); in be_fw_wait_ready()
667 if (BEx_chip(adapter) && be_virtfn(adapter)) in be_fw_wait_ready()
670 stage = be_POST_stage_get(adapter); in be_fw_wait_ready()
738 static inline struct be_mcc_wrb *wrb_from_mbox(struct be_adapter *adapter) in wrb_from_mbox() argument
740 struct be_dma_mem *mbox_mem = &adapter->mbox_mem; in wrb_from_mbox()
747 static struct be_mcc_wrb *wrb_from_mccq(struct be_adapter *adapter) in wrb_from_mccq() argument
749 struct be_queue_info *mccq = &adapter->mcc_obj.q; in wrb_from_mccq()
765 static bool use_mcc(struct be_adapter *adapter) in use_mcc() argument
767 return adapter->mcc_obj.q.created; in use_mcc()
771 static int be_cmd_lock(struct be_adapter *adapter) in be_cmd_lock() argument
773 if (use_mcc(adapter)) { in be_cmd_lock()
774 spin_lock_bh(&adapter->mcc_lock); in be_cmd_lock()
777 return mutex_lock_interruptible(&adapter->mbox_lock); in be_cmd_lock()
782 static void be_cmd_unlock(struct be_adapter *adapter) in be_cmd_unlock() argument
784 if (use_mcc(adapter)) in be_cmd_unlock()
785 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_unlock()
787 return mutex_unlock(&adapter->mbox_lock); in be_cmd_unlock()
790 static struct be_mcc_wrb *be_cmd_copy(struct be_adapter *adapter, in be_cmd_copy() argument
795 if (use_mcc(adapter)) { in be_cmd_copy()
796 dest_wrb = wrb_from_mccq(adapter); in be_cmd_copy()
800 dest_wrb = wrb_from_mbox(adapter); in be_cmd_copy()
811 static int be_cmd_notify_wait(struct be_adapter *adapter, in be_cmd_notify_wait() argument
817 status = be_cmd_lock(adapter); in be_cmd_notify_wait()
821 dest_wrb = be_cmd_copy(adapter, wrb); in be_cmd_notify_wait()
825 if (use_mcc(adapter)) in be_cmd_notify_wait()
826 status = be_mcc_notify_wait(adapter); in be_cmd_notify_wait()
828 status = be_mbox_notify_wait(adapter); in be_cmd_notify_wait()
833 be_cmd_unlock(adapter); in be_cmd_notify_wait()
840 int be_cmd_fw_init(struct be_adapter *adapter) in be_cmd_fw_init() argument
845 if (lancer_chip(adapter)) in be_cmd_fw_init()
848 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_fw_init()
851 wrb = (u8 *)wrb_from_mbox(adapter); in be_cmd_fw_init()
861 status = be_mbox_notify_wait(adapter); in be_cmd_fw_init()
863 mutex_unlock(&adapter->mbox_lock); in be_cmd_fw_init()
870 int be_cmd_fw_clean(struct be_adapter *adapter) in be_cmd_fw_clean() argument
875 if (lancer_chip(adapter)) in be_cmd_fw_clean()
878 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_fw_clean()
881 wrb = (u8 *)wrb_from_mbox(adapter); in be_cmd_fw_clean()
891 status = be_mbox_notify_wait(adapter); in be_cmd_fw_clean()
893 mutex_unlock(&adapter->mbox_lock); in be_cmd_fw_clean()
897 int be_cmd_eq_create(struct be_adapter *adapter, struct be_eq_obj *eqo) in be_cmd_eq_create() argument
904 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_eq_create()
907 wrb = wrb_from_mbox(adapter); in be_cmd_eq_create()
915 if (!(BEx_chip(adapter) || lancer_chip(adapter))) in be_cmd_eq_create()
930 status = be_mbox_notify_wait(adapter); in be_cmd_eq_create()
940 mutex_unlock(&adapter->mbox_lock); in be_cmd_eq_create()
945 int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr, in be_cmd_mac_addr_query() argument
952 spin_lock_bh(&adapter->mcc_lock); in be_cmd_mac_addr_query()
954 wrb = wrb_from_mccq(adapter); in be_cmd_mac_addr_query()
973 status = be_mcc_notify_wait(adapter); in be_cmd_mac_addr_query()
981 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_mac_addr_query()
986 int be_cmd_pmac_add(struct be_adapter *adapter, u8 *mac_addr, in be_cmd_pmac_add() argument
993 spin_lock_bh(&adapter->mcc_lock); in be_cmd_pmac_add()
995 wrb = wrb_from_mccq(adapter); in be_cmd_pmac_add()
1010 status = be_mcc_notify_wait(adapter); in be_cmd_pmac_add()
1018 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_pmac_add()
1027 int be_cmd_pmac_del(struct be_adapter *adapter, u32 if_id, int pmac_id, u32 dom) in be_cmd_pmac_del() argument
1036 spin_lock_bh(&adapter->mcc_lock); in be_cmd_pmac_del()
1038 wrb = wrb_from_mccq(adapter); in be_cmd_pmac_del()
1053 status = be_mcc_notify_wait(adapter); in be_cmd_pmac_del()
1056 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_pmac_del()
1061 int be_cmd_cq_create(struct be_adapter *adapter, struct be_queue_info *cq, in be_cmd_cq_create() argument
1070 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_cq_create()
1073 wrb = wrb_from_mbox(adapter); in be_cmd_cq_create()
1083 if (BEx_chip(adapter)) { in be_cmd_cq_create()
1100 if (!lancer_chip(adapter)) in be_cmd_cq_create()
1116 status = be_mbox_notify_wait(adapter); in be_cmd_cq_create()
1124 mutex_unlock(&adapter->mbox_lock); in be_cmd_cq_create()
1138 static int be_cmd_mccq_ext_create(struct be_adapter *adapter, in be_cmd_mccq_ext_create() argument
1148 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_mccq_ext_create()
1151 wrb = wrb_from_mbox(adapter); in be_cmd_mccq_ext_create()
1160 if (BEx_chip(adapter)) { in be_cmd_mccq_ext_create()
1191 status = be_mbox_notify_wait(adapter); in be_cmd_mccq_ext_create()
1198 mutex_unlock(&adapter->mbox_lock); in be_cmd_mccq_ext_create()
1203 static int be_cmd_mccq_org_create(struct be_adapter *adapter, in be_cmd_mccq_org_create() argument
1213 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_mccq_org_create()
1216 wrb = wrb_from_mbox(adapter); in be_cmd_mccq_org_create()
1235 status = be_mbox_notify_wait(adapter); in be_cmd_mccq_org_create()
1243 mutex_unlock(&adapter->mbox_lock); in be_cmd_mccq_org_create()
1247 int be_cmd_mccq_create(struct be_adapter *adapter, in be_cmd_mccq_create() argument
1252 status = be_cmd_mccq_ext_create(adapter, mccq, cq); in be_cmd_mccq_create()
1253 if (status && BEx_chip(adapter)) { in be_cmd_mccq_create()
1254 dev_warn(&adapter->pdev->dev, "Upgrade to F/W ver 2.102.235.0 " in be_cmd_mccq_create()
1257 status = be_cmd_mccq_org_create(adapter, mccq, cq); in be_cmd_mccq_create()
1262 int be_cmd_txq_create(struct be_adapter *adapter, struct be_tx_obj *txo) in be_cmd_txq_create() argument
1275 if (lancer_chip(adapter)) { in be_cmd_txq_create()
1277 } else if (BEx_chip(adapter)) { in be_cmd_txq_create()
1278 if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) in be_cmd_txq_create()
1285 req->if_id = cpu_to_le16(adapter->if_handle); in be_cmd_txq_create()
1294 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_txq_create()
1310 int be_cmd_rxq_create(struct be_adapter *adapter, in be_cmd_rxq_create() argument
1319 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rxq_create()
1321 wrb = wrb_from_mccq(adapter); in be_cmd_rxq_create()
1339 status = be_mcc_notify_wait(adapter); in be_cmd_rxq_create()
1349 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rxq_create()
1356 int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q, in be_cmd_q_destroy() argument
1364 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_q_destroy()
1367 wrb = wrb_from_mbox(adapter); in be_cmd_q_destroy()
1399 status = be_mbox_notify_wait(adapter); in be_cmd_q_destroy()
1402 mutex_unlock(&adapter->mbox_lock); in be_cmd_q_destroy()
1407 int be_cmd_rxq_destroy(struct be_adapter *adapter, struct be_queue_info *q) in be_cmd_rxq_destroy() argument
1413 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rxq_destroy()
1415 wrb = wrb_from_mccq(adapter); in be_cmd_rxq_destroy()
1426 status = be_mcc_notify_wait(adapter); in be_cmd_rxq_destroy()
1430 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rxq_destroy()
1437 int be_cmd_if_create(struct be_adapter *adapter, u32 cap_flags, u32 en_flags, in be_cmd_if_create() argument
1453 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_if_create()
1460 if (BE3_chip(adapter) && !be_physfn(adapter)) in be_cmd_if_create()
1461 adapter->pmac_id[0] = le32_to_cpu(resp->pmac_id); in be_cmd_if_create()
1467 int be_cmd_if_destroy(struct be_adapter *adapter, int interface_id, u32 domain) in be_cmd_if_destroy() argument
1476 spin_lock_bh(&adapter->mcc_lock); in be_cmd_if_destroy()
1478 wrb = wrb_from_mccq(adapter); in be_cmd_if_destroy()
1491 status = be_mcc_notify_wait(adapter); in be_cmd_if_destroy()
1493 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_if_destroy()
1501 int be_cmd_get_stats(struct be_adapter *adapter, struct be_dma_mem *nonemb_cmd) in be_cmd_get_stats() argument
1507 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_stats()
1509 wrb = wrb_from_mccq(adapter); in be_cmd_get_stats()
1521 if (BE2_chip(adapter)) in be_cmd_get_stats()
1523 if (BE3_chip(adapter) || lancer_chip(adapter)) in be_cmd_get_stats()
1528 be_mcc_notify(adapter); in be_cmd_get_stats()
1529 adapter->stats_cmd_sent = true; in be_cmd_get_stats()
1532 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_stats()
1537 int lancer_cmd_get_pport_stats(struct be_adapter *adapter, in lancer_cmd_get_pport_stats() argument
1544 if (!be_cmd_allowed(adapter, OPCODE_ETH_GET_PPORT_STATS, in lancer_cmd_get_pport_stats()
1548 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_get_pport_stats()
1550 wrb = wrb_from_mccq(adapter); in lancer_cmd_get_pport_stats()
1561 req->cmd_params.params.pport_num = cpu_to_le16(adapter->hba_port_num); in lancer_cmd_get_pport_stats()
1564 be_mcc_notify(adapter); in lancer_cmd_get_pport_stats()
1565 adapter->stats_cmd_sent = true; in lancer_cmd_get_pport_stats()
1568 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_get_pport_stats()
1598 int be_cmd_link_status_query(struct be_adapter *adapter, u16 *link_speed, in be_cmd_link_status_query() argument
1605 spin_lock_bh(&adapter->mcc_lock); in be_cmd_link_status_query()
1610 wrb = wrb_from_mccq(adapter); in be_cmd_link_status_query()
1622 if (!BE2_chip(adapter)) in be_cmd_link_status_query()
1627 status = be_mcc_notify_wait(adapter); in be_cmd_link_status_query()
1644 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_link_status_query()
1649 int be_cmd_get_die_temperature(struct be_adapter *adapter) in be_cmd_get_die_temperature() argument
1655 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_die_temperature()
1657 wrb = wrb_from_mccq(adapter); in be_cmd_get_die_temperature()
1668 be_mcc_notify(adapter); in be_cmd_get_die_temperature()
1671 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_die_temperature()
1676 int be_cmd_get_reg_len(struct be_adapter *adapter, u32 *log_size) in be_cmd_get_reg_len() argument
1682 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_reg_len()
1684 wrb = wrb_from_mccq(adapter); in be_cmd_get_reg_len()
1695 status = be_mcc_notify_wait(adapter); in be_cmd_get_reg_len()
1704 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_reg_len()
1708 int be_cmd_get_regs(struct be_adapter *adapter, u32 buf_len, void *buf) in be_cmd_get_regs() argument
1723 get_fat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_regs()
1727 dev_err(&adapter->pdev->dev, in be_cmd_get_regs()
1732 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_regs()
1738 wrb = wrb_from_mccq(adapter); in be_cmd_get_regs()
1755 status = be_mcc_notify_wait(adapter); in be_cmd_get_regs()
1763 dev_err(&adapter->pdev->dev, "FAT Table Retrieve error\n"); in be_cmd_get_regs()
1770 dma_free_coherent(&adapter->pdev->dev, get_fat_cmd.size, in be_cmd_get_regs()
1772 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_regs()
1777 int be_cmd_get_fw_ver(struct be_adapter *adapter) in be_cmd_get_fw_ver() argument
1783 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_fw_ver()
1785 wrb = wrb_from_mccq(adapter); in be_cmd_get_fw_ver()
1796 status = be_mcc_notify_wait(adapter); in be_cmd_get_fw_ver()
1800 strlcpy(adapter->fw_ver, resp->firmware_version_string, in be_cmd_get_fw_ver()
1801 sizeof(adapter->fw_ver)); in be_cmd_get_fw_ver()
1802 strlcpy(adapter->fw_on_flash, resp->fw_on_flash_version_string, in be_cmd_get_fw_ver()
1803 sizeof(adapter->fw_on_flash)); in be_cmd_get_fw_ver()
1806 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_fw_ver()
1813 static int __be_cmd_modify_eqd(struct be_adapter *adapter, in __be_cmd_modify_eqd() argument
1820 spin_lock_bh(&adapter->mcc_lock); in __be_cmd_modify_eqd()
1822 wrb = wrb_from_mccq(adapter); in __be_cmd_modify_eqd()
1841 be_mcc_notify(adapter); in __be_cmd_modify_eqd()
1843 spin_unlock_bh(&adapter->mcc_lock); in __be_cmd_modify_eqd()
1847 int be_cmd_modify_eqd(struct be_adapter *adapter, struct be_set_eqd *set_eqd, in be_cmd_modify_eqd() argument
1854 __be_cmd_modify_eqd(adapter, &set_eqd[i], num_eqs); in be_cmd_modify_eqd()
1863 int be_cmd_vlan_config(struct be_adapter *adapter, u32 if_id, u16 *vtag_array, in be_cmd_vlan_config() argument
1870 spin_lock_bh(&adapter->mcc_lock); in be_cmd_vlan_config()
1872 wrb = wrb_from_mccq(adapter); in be_cmd_vlan_config()
1885 req->untagged = BE_IF_FLAGS_UNTAGGED & be_if_cap_flags(adapter) ? 1 : 0; in be_cmd_vlan_config()
1890 status = be_mcc_notify_wait(adapter); in be_cmd_vlan_config()
1892 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_vlan_config()
1896 static int __be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value) in __be_cmd_rx_filter() argument
1899 struct be_dma_mem *mem = &adapter->rx_filter; in __be_cmd_rx_filter()
1903 spin_lock_bh(&adapter->mcc_lock); in __be_cmd_rx_filter()
1905 wrb = wrb_from_mccq(adapter); in __be_cmd_rx_filter()
1915 req->if_id = cpu_to_le32(adapter->if_handle); in __be_cmd_rx_filter()
1928 be_if_cap_flags(adapter)); in __be_cmd_rx_filter()
1929 req->mcast_num = cpu_to_le32(netdev_mc_count(adapter->netdev)); in __be_cmd_rx_filter()
1930 netdev_for_each_mc_addr(ha, adapter->netdev) in __be_cmd_rx_filter()
1934 status = be_mcc_notify_wait(adapter); in __be_cmd_rx_filter()
1936 spin_unlock_bh(&adapter->mcc_lock); in __be_cmd_rx_filter()
1940 int be_cmd_rx_filter(struct be_adapter *adapter, u32 flags, u32 value) in be_cmd_rx_filter() argument
1942 struct device *dev = &adapter->pdev->dev; in be_cmd_rx_filter()
1944 if ((flags & be_if_cap_flags(adapter)) != flags) { in be_cmd_rx_filter()
1947 be_if_cap_flags(adapter)); in be_cmd_rx_filter()
1949 flags &= be_if_cap_flags(adapter); in be_cmd_rx_filter()
1951 return __be_cmd_rx_filter(adapter, flags, value); in be_cmd_rx_filter()
1955 int be_cmd_set_flow_control(struct be_adapter *adapter, u32 tx_fc, u32 rx_fc) in be_cmd_set_flow_control() argument
1961 if (!be_cmd_allowed(adapter, OPCODE_COMMON_SET_FLOW_CONTROL, in be_cmd_set_flow_control()
1965 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_flow_control()
1967 wrb = wrb_from_mccq(adapter); in be_cmd_set_flow_control()
1982 status = be_mcc_notify_wait(adapter); in be_cmd_set_flow_control()
1985 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_flow_control()
1994 int be_cmd_get_flow_control(struct be_adapter *adapter, u32 *tx_fc, u32 *rx_fc) in be_cmd_get_flow_control() argument
2000 if (!be_cmd_allowed(adapter, OPCODE_COMMON_GET_FLOW_CONTROL, in be_cmd_get_flow_control()
2004 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_flow_control()
2006 wrb = wrb_from_mccq(adapter); in be_cmd_get_flow_control()
2017 status = be_mcc_notify_wait(adapter); in be_cmd_get_flow_control()
2027 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_flow_control()
2032 int be_cmd_query_fw_cfg(struct be_adapter *adapter) in be_cmd_query_fw_cfg() argument
2038 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_query_fw_cfg()
2041 wrb = wrb_from_mbox(adapter); in be_cmd_query_fw_cfg()
2048 status = be_mbox_notify_wait(adapter); in be_cmd_query_fw_cfg()
2052 adapter->port_num = le32_to_cpu(resp->phys_port); in be_cmd_query_fw_cfg()
2053 adapter->function_mode = le32_to_cpu(resp->function_mode); in be_cmd_query_fw_cfg()
2054 adapter->function_caps = le32_to_cpu(resp->function_caps); in be_cmd_query_fw_cfg()
2055 adapter->asic_rev = le32_to_cpu(resp->asic_revision) & 0xFF; in be_cmd_query_fw_cfg()
2056 dev_info(&adapter->pdev->dev, in be_cmd_query_fw_cfg()
2058 adapter->function_mode, adapter->function_caps); in be_cmd_query_fw_cfg()
2061 mutex_unlock(&adapter->mbox_lock); in be_cmd_query_fw_cfg()
2066 int be_cmd_reset_function(struct be_adapter *adapter) in be_cmd_reset_function() argument
2072 if (lancer_chip(adapter)) { in be_cmd_reset_function()
2074 adapter->db + SLIPORT_CONTROL_OFFSET); in be_cmd_reset_function()
2075 status = lancer_wait_ready(adapter); in be_cmd_reset_function()
2077 dev_err(&adapter->pdev->dev, in be_cmd_reset_function()
2082 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_reset_function()
2085 wrb = wrb_from_mbox(adapter); in be_cmd_reset_function()
2092 status = be_mbox_notify_wait(adapter); in be_cmd_reset_function()
2094 mutex_unlock(&adapter->mbox_lock); in be_cmd_reset_function()
2098 int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, in be_cmd_rss_config() argument
2105 if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS)) in be_cmd_rss_config()
2108 spin_lock_bh(&adapter->mcc_lock); in be_cmd_rss_config()
2110 wrb = wrb_from_mccq(adapter); in be_cmd_rss_config()
2120 req->if_id = cpu_to_le32(adapter->if_handle); in be_cmd_rss_config()
2124 if (!BEx_chip(adapter)) in be_cmd_rss_config()
2131 status = be_mcc_notify_wait(adapter); in be_cmd_rss_config()
2133 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_rss_config()
2138 int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, in be_cmd_set_beacon_state() argument
2145 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_beacon_state()
2147 wrb = wrb_from_mccq(adapter); in be_cmd_set_beacon_state()
2163 status = be_mcc_notify_wait(adapter); in be_cmd_set_beacon_state()
2166 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_beacon_state()
2171 int be_cmd_get_beacon_state(struct be_adapter *adapter, u8 port_num, u32 *state) in be_cmd_get_beacon_state() argument
2177 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_beacon_state()
2179 wrb = wrb_from_mccq(adapter); in be_cmd_get_beacon_state()
2192 status = be_mcc_notify_wait(adapter); in be_cmd_get_beacon_state()
2201 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_beacon_state()
2206 int be_cmd_read_port_transceiver_data(struct be_adapter *adapter, in be_cmd_read_port_transceiver_data() argument
2218 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_read_port_transceiver_data()
2221 dev_err(&adapter->pdev->dev, "Memory allocation failed\n"); in be_cmd_read_port_transceiver_data()
2225 spin_lock_bh(&adapter->mcc_lock); in be_cmd_read_port_transceiver_data()
2227 wrb = wrb_from_mccq(adapter); in be_cmd_read_port_transceiver_data()
2238 req->port = cpu_to_le32(adapter->hba_port_num); in be_cmd_read_port_transceiver_data()
2240 status = be_mcc_notify_wait(adapter); in be_cmd_read_port_transceiver_data()
2247 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_read_port_transceiver_data()
2248 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_read_port_transceiver_data()
2252 int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd, in lancer_cmd_write_object() argument
2263 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2264 adapter->flash_status = 0; in lancer_cmd_write_object()
2266 wrb = wrb_from_mccq(adapter); in lancer_cmd_write_object()
2301 be_mcc_notify(adapter); in lancer_cmd_write_object()
2302 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2304 if (!wait_for_completion_timeout(&adapter->et_cmd_compl, in lancer_cmd_write_object()
2308 status = adapter->flash_status; in lancer_cmd_write_object()
2321 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_write_object()
2325 int be_cmd_query_cable_type(struct be_adapter *adapter) in be_cmd_query_cable_type() argument
2330 status = be_cmd_read_port_transceiver_data(adapter, TR_PAGE_A0, in be_cmd_query_cable_type()
2333 switch (adapter->phy.interface_type) { in be_cmd_query_cable_type()
2335 adapter->phy.cable_type = in be_cmd_query_cable_type()
2339 adapter->phy.cable_type = in be_cmd_query_cable_type()
2343 adapter->phy.cable_type = 0; in be_cmd_query_cable_type()
2350 int be_cmd_query_sfp_info(struct be_adapter *adapter) in be_cmd_query_sfp_info() argument
2355 status = be_cmd_read_port_transceiver_data(adapter, TR_PAGE_A0, in be_cmd_query_sfp_info()
2358 strlcpy(adapter->phy.vendor_name, page_data + in be_cmd_query_sfp_info()
2360 strlcpy(adapter->phy.vendor_pn, in be_cmd_query_sfp_info()
2368 int lancer_cmd_delete_object(struct be_adapter *adapter, const char *obj_name) in lancer_cmd_delete_object() argument
2374 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_delete_object()
2376 wrb = wrb_from_mccq(adapter); in lancer_cmd_delete_object()
2390 status = be_mcc_notify_wait(adapter); in lancer_cmd_delete_object()
2392 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_delete_object()
2396 int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd, in lancer_cmd_read_object() argument
2405 spin_lock_bh(&adapter->mcc_lock); in lancer_cmd_read_object()
2407 wrb = wrb_from_mccq(adapter); in lancer_cmd_read_object()
2428 status = be_mcc_notify_wait(adapter); in lancer_cmd_read_object()
2439 spin_unlock_bh(&adapter->mcc_lock); in lancer_cmd_read_object()
2443 int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, in be_cmd_write_flashrom() argument
2451 spin_lock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2452 adapter->flash_status = 0; in be_cmd_write_flashrom()
2454 wrb = wrb_from_mccq(adapter); in be_cmd_write_flashrom()
2472 be_mcc_notify(adapter); in be_cmd_write_flashrom()
2473 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2475 if (!wait_for_completion_timeout(&adapter->et_cmd_compl, in be_cmd_write_flashrom()
2479 status = adapter->flash_status; in be_cmd_write_flashrom()
2484 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_write_flashrom()
2488 int be_cmd_get_flash_crc(struct be_adapter *adapter, u8 *flashed_crc, in be_cmd_get_flash_crc() argument
2495 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_flash_crc()
2497 wrb = wrb_from_mccq(adapter); in be_cmd_get_flash_crc()
2517 status = be_mcc_notify_wait(adapter); in be_cmd_get_flash_crc()
2522 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_flash_crc()
2526 int be_cmd_enable_magic_wol(struct be_adapter *adapter, u8 *mac, in be_cmd_enable_magic_wol() argument
2533 spin_lock_bh(&adapter->mcc_lock); in be_cmd_enable_magic_wol()
2535 wrb = wrb_from_mccq(adapter); in be_cmd_enable_magic_wol()
2547 status = be_mcc_notify_wait(adapter); in be_cmd_enable_magic_wol()
2550 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_enable_magic_wol()
2554 int be_cmd_set_loopback(struct be_adapter *adapter, u8 port_num, in be_cmd_set_loopback() argument
2561 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_loopback()
2563 wrb = wrb_from_mccq(adapter); in be_cmd_set_loopback()
2580 status = be_mcc_notify_wait(adapter); in be_cmd_set_loopback()
2582 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_loopback()
2586 int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num, in be_cmd_loopback_test() argument
2595 spin_lock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2597 wrb = wrb_from_mccq(adapter); in be_cmd_loopback_test()
2617 be_mcc_notify(adapter); in be_cmd_loopback_test()
2619 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2621 wait_for_completion(&adapter->et_cmd_compl); in be_cmd_loopback_test()
2627 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_loopback_test()
2631 int be_cmd_ddr_dma_test(struct be_adapter *adapter, u64 pattern, in be_cmd_ddr_dma_test() argument
2639 spin_lock_bh(&adapter->mcc_lock); in be_cmd_ddr_dma_test()
2641 wrb = wrb_from_mccq(adapter); in be_cmd_ddr_dma_test()
2660 status = be_mcc_notify_wait(adapter); in be_cmd_ddr_dma_test()
2673 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_ddr_dma_test()
2677 int be_cmd_get_seeprom_data(struct be_adapter *adapter, in be_cmd_get_seeprom_data() argument
2684 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_seeprom_data()
2686 wrb = wrb_from_mccq(adapter); in be_cmd_get_seeprom_data()
2697 status = be_mcc_notify_wait(adapter); in be_cmd_get_seeprom_data()
2700 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_seeprom_data()
2704 int be_cmd_get_phy_info(struct be_adapter *adapter) in be_cmd_get_phy_info() argument
2711 if (!be_cmd_allowed(adapter, OPCODE_COMMON_GET_PHY_DETAILS, in be_cmd_get_phy_info()
2715 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_phy_info()
2717 wrb = wrb_from_mccq(adapter); in be_cmd_get_phy_info()
2723 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_phy_info()
2726 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); in be_cmd_get_phy_info()
2737 status = be_mcc_notify_wait(adapter); in be_cmd_get_phy_info()
2742 adapter->phy.phy_type = le16_to_cpu(resp_phy_info->phy_type); in be_cmd_get_phy_info()
2743 adapter->phy.interface_type = in be_cmd_get_phy_info()
2745 adapter->phy.auto_speeds_supported = in be_cmd_get_phy_info()
2747 adapter->phy.fixed_speeds_supported = in be_cmd_get_phy_info()
2749 adapter->phy.misc_params = in be_cmd_get_phy_info()
2752 if (BE2_chip(adapter)) { in be_cmd_get_phy_info()
2753 adapter->phy.fixed_speeds_supported = in be_cmd_get_phy_info()
2758 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_get_phy_info()
2760 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_phy_info()
2764 static int be_cmd_set_qos(struct be_adapter *adapter, u32 bps, u32 domain) in be_cmd_set_qos() argument
2770 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_qos()
2772 wrb = wrb_from_mccq(adapter); in be_cmd_set_qos()
2787 status = be_mcc_notify_wait(adapter); in be_cmd_set_qos()
2790 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_qos()
2794 int be_cmd_get_cntl_attributes(struct be_adapter *adapter) in be_cmd_get_cntl_attributes() argument
2804 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_cntl_attributes()
2809 attribs_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_cntl_attributes()
2813 dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); in be_cmd_get_cntl_attributes()
2818 wrb = wrb_from_mbox(adapter); in be_cmd_get_cntl_attributes()
2829 status = be_mbox_notify_wait(adapter); in be_cmd_get_cntl_attributes()
2832 adapter->hba_port_num = attribs->hba_attribs.phy_port; in be_cmd_get_cntl_attributes()
2836 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_cntl_attributes()
2838 dma_free_coherent(&adapter->pdev->dev, attribs_cmd.size, in be_cmd_get_cntl_attributes()
2844 int be_cmd_req_native_mode(struct be_adapter *adapter) in be_cmd_req_native_mode() argument
2850 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_req_native_mode()
2853 wrb = wrb_from_mbox(adapter); in be_cmd_req_native_mode()
2869 status = be_mbox_notify_wait(adapter); in be_cmd_req_native_mode()
2873 adapter->be3_native = le32_to_cpu(resp->cap_flags) & in be_cmd_req_native_mode()
2875 if (!adapter->be3_native) in be_cmd_req_native_mode()
2876 dev_warn(&adapter->pdev->dev, in be_cmd_req_native_mode()
2880 mutex_unlock(&adapter->mbox_lock); in be_cmd_req_native_mode()
2885 int be_cmd_get_fn_privileges(struct be_adapter *adapter, u32 *privilege, in be_cmd_get_fn_privileges() argument
2892 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_fn_privileges()
2894 wrb = wrb_from_mccq(adapter); in be_cmd_get_fn_privileges()
2908 status = be_mcc_notify_wait(adapter); in be_cmd_get_fn_privileges()
2918 if (BEx_chip(adapter) && be_is_mc(adapter) && in be_cmd_get_fn_privileges()
2919 be_physfn(adapter)) in be_cmd_get_fn_privileges()
2924 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_fn_privileges()
2929 int be_cmd_set_fn_privileges(struct be_adapter *adapter, u32 privileges, in be_cmd_set_fn_privileges() argument
2936 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_fn_privileges()
2938 wrb = wrb_from_mccq(adapter); in be_cmd_set_fn_privileges()
2949 if (lancer_chip(adapter)) in be_cmd_set_fn_privileges()
2954 status = be_mcc_notify_wait(adapter); in be_cmd_set_fn_privileges()
2956 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_fn_privileges()
2964 int be_cmd_get_mac_from_list(struct be_adapter *adapter, u8 *mac, in be_cmd_get_mac_from_list() argument
2977 get_mac_list_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_mac_from_list()
2983 dev_err(&adapter->pdev->dev, in be_cmd_get_mac_from_list()
2988 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_mac_from_list()
2990 wrb = wrb_from_mccq(adapter); in be_cmd_get_mac_from_list()
3011 status = be_mcc_notify_wait(adapter); in be_cmd_get_mac_from_list()
3052 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_mac_from_list()
3053 dma_free_coherent(&adapter->pdev->dev, get_mac_list_cmd.size, in be_cmd_get_mac_from_list()
3058 int be_cmd_get_active_mac(struct be_adapter *adapter, u32 curr_pmac_id, in be_cmd_get_active_mac() argument
3062 be_cmd_get_mac_from_list(adapter, mac, &active, &curr_pmac_id, in be_cmd_get_active_mac()
3064 if (BEx_chip(adapter)) in be_cmd_get_active_mac()
3065 return be_cmd_mac_addr_query(adapter, mac, false, in be_cmd_get_active_mac()
3069 return be_cmd_get_mac_from_list(adapter, mac, &active, in be_cmd_get_active_mac()
3074 int be_cmd_get_perm_mac(struct be_adapter *adapter, u8 *mac) in be_cmd_get_perm_mac() argument
3081 if (BEx_chip(adapter)) { in be_cmd_get_perm_mac()
3082 if (be_physfn(adapter)) in be_cmd_get_perm_mac()
3083 status = be_cmd_mac_addr_query(adapter, mac, true, 0, in be_cmd_get_perm_mac()
3086 status = be_cmd_mac_addr_query(adapter, mac, false, in be_cmd_get_perm_mac()
3087 adapter->if_handle, 0); in be_cmd_get_perm_mac()
3089 status = be_cmd_get_mac_from_list(adapter, mac, &pmac_valid, in be_cmd_get_perm_mac()
3090 NULL, adapter->if_handle, 0); in be_cmd_get_perm_mac()
3097 int be_cmd_set_mac_list(struct be_adapter *adapter, u8 *mac_array, in be_cmd_set_mac_list() argument
3107 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_set_mac_list()
3112 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_mac_list()
3114 wrb = wrb_from_mccq(adapter); in be_cmd_set_mac_list()
3130 status = be_mcc_notify_wait(adapter); in be_cmd_set_mac_list()
3133 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma); in be_cmd_set_mac_list()
3134 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_mac_list()
3142 int be_cmd_set_mac(struct be_adapter *adapter, u8 *mac, int if_id, u32 dom) in be_cmd_set_mac() argument
3149 status = be_cmd_get_mac_from_list(adapter, old_mac, &active_mac, in be_cmd_set_mac()
3153 be_cmd_pmac_del(adapter, if_id, pmac_id, dom); in be_cmd_set_mac()
3155 return be_cmd_set_mac_list(adapter, mac, mac ? 1 : 0, dom); in be_cmd_set_mac()
3158 int be_cmd_set_hsw_config(struct be_adapter *adapter, u16 pvid, in be_cmd_set_hsw_config() argument
3166 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_hsw_config()
3168 wrb = wrb_from_mccq(adapter); in be_cmd_set_hsw_config()
3187 if (!BEx_chip(adapter) && hsw_mode) { in be_cmd_set_hsw_config()
3189 ctxt, adapter->hba_port_num); in be_cmd_set_hsw_config()
3196 status = be_mcc_notify_wait(adapter); in be_cmd_set_hsw_config()
3199 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_hsw_config()
3204 int be_cmd_get_hsw_config(struct be_adapter *adapter, u16 *pvid, in be_cmd_get_hsw_config() argument
3213 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_hsw_config()
3215 wrb = wrb_from_mccq(adapter); in be_cmd_get_hsw_config()
3233 if (!BEx_chip(adapter) && mode) { in be_cmd_get_hsw_config()
3235 ctxt, adapter->hba_port_num); in be_cmd_get_hsw_config()
3240 status = be_mcc_notify_wait(adapter); in be_cmd_get_hsw_config()
3256 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_hsw_config()
3260 static bool be_is_wol_excluded(struct be_adapter *adapter) in be_is_wol_excluded() argument
3262 struct pci_dev *pdev = adapter->pdev; in be_is_wol_excluded()
3264 if (!be_physfn(adapter)) in be_is_wol_excluded()
3278 int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) in be_cmd_get_acpi_wol_cap() argument
3285 if (!be_cmd_allowed(adapter, OPCODE_ETH_ACPI_WOL_MAGIC_CONFIG, in be_cmd_get_acpi_wol_cap()
3289 if (be_is_wol_excluded(adapter)) in be_cmd_get_acpi_wol_cap()
3292 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_acpi_wol_cap()
3297 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_acpi_wol_cap()
3300 dev_err(&adapter->pdev->dev, "Memory allocation failure\n"); in be_cmd_get_acpi_wol_cap()
3305 wrb = wrb_from_mbox(adapter); in be_cmd_get_acpi_wol_cap()
3320 status = be_mbox_notify_wait(adapter); in be_cmd_get_acpi_wol_cap()
3326 adapter->wol_cap = resp->wol_settings; in be_cmd_get_acpi_wol_cap()
3327 if (adapter->wol_cap & BE_WOL_CAP) in be_cmd_get_acpi_wol_cap()
3328 adapter->wol_en = true; in be_cmd_get_acpi_wol_cap()
3331 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_acpi_wol_cap()
3333 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_acpi_wol_cap()
3339 int be_cmd_set_fw_log_level(struct be_adapter *adapter, u32 level) in be_cmd_set_fw_log_level() argument
3348 extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_set_fw_log_level()
3354 status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd); in be_cmd_set_fw_log_level()
3370 status = be_cmd_set_ext_fat_capabilites(adapter, &extfat_cmd, cfgs); in be_cmd_set_fw_log_level()
3372 dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, in be_cmd_set_fw_log_level()
3377 int be_cmd_get_fw_log_level(struct be_adapter *adapter) in be_cmd_get_fw_log_level() argument
3386 extfat_cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, in be_cmd_get_fw_log_level()
3391 dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n", in be_cmd_get_fw_log_level()
3396 status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd); in be_cmd_get_fw_log_level()
3406 dma_free_coherent(&adapter->pdev->dev, extfat_cmd.size, extfat_cmd.va, in be_cmd_get_fw_log_level()
3412 int be_cmd_get_ext_fat_capabilites(struct be_adapter *adapter, in be_cmd_get_ext_fat_capabilites() argument
3419 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_ext_fat_capabilites()
3422 wrb = wrb_from_mbox(adapter); in be_cmd_get_ext_fat_capabilites()
3434 status = be_mbox_notify_wait(adapter); in be_cmd_get_ext_fat_capabilites()
3436 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_ext_fat_capabilites()
3440 int be_cmd_set_ext_fat_capabilites(struct be_adapter *adapter, in be_cmd_set_ext_fat_capabilites() argument
3448 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_ext_fat_capabilites()
3450 wrb = wrb_from_mccq(adapter); in be_cmd_set_ext_fat_capabilites()
3462 status = be_mcc_notify_wait(adapter); in be_cmd_set_ext_fat_capabilites()
3464 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_ext_fat_capabilites()
3468 int be_cmd_query_port_name(struct be_adapter *adapter) in be_cmd_query_port_name() argument
3474 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_query_port_name()
3477 wrb = wrb_from_mbox(adapter); in be_cmd_query_port_name()
3483 if (!BEx_chip(adapter)) in be_cmd_query_port_name()
3486 status = be_mbox_notify_wait(adapter); in be_cmd_query_port_name()
3490 adapter->port_name = resp->port_name[adapter->hba_port_num]; in be_cmd_query_port_name()
3492 adapter->port_name = adapter->hba_port_num + '0'; in be_cmd_query_port_name()
3495 mutex_unlock(&adapter->mbox_lock); in be_cmd_query_port_name()
3593 int be_cmd_get_func_config(struct be_adapter *adapter, struct be_resources *res) in be_cmd_get_func_config() argument
3600 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_func_config()
3605 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_func_config()
3608 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); in be_cmd_get_func_config()
3613 wrb = wrb_from_mbox(adapter); in be_cmd_get_func_config()
3625 if (skyhawk_chip(adapter)) in be_cmd_get_func_config()
3628 status = be_mbox_notify_wait(adapter); in be_cmd_get_func_config()
3640 adapter->pf_number = desc->pf_num; in be_cmd_get_func_config()
3644 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_func_config()
3646 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_func_config()
3652 int be_cmd_get_profile_config(struct be_adapter *adapter, in be_cmd_get_profile_config() argument
3668 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_get_profile_config()
3679 if (!lancer_chip(adapter)) in be_cmd_get_profile_config()
3690 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_get_profile_config()
3697 pcie = be_get_pcie_desc(adapter->pdev->devfn, resp->func_param, in be_cmd_get_profile_config()
3704 adapter->mc_type = port->mc_type; in be_cmd_get_profile_config()
3715 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_get_profile_config()
3721 static int be_cmd_set_profile_config(struct be_adapter *adapter, void *desc, in be_cmd_set_profile_config() argument
3731 cmd.va = dma_zalloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma, in be_cmd_set_profile_config()
3745 status = be_cmd_notify_wait(adapter, &wrb); in be_cmd_set_profile_config()
3748 dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, in be_cmd_set_profile_config()
3789 int be_cmd_config_qos(struct be_adapter *adapter, u32 max_rate, u16 link_speed, in be_cmd_config_qos() argument
3796 if (BE3_chip(adapter)) in be_cmd_config_qos()
3797 return be_cmd_set_qos(adapter, max_rate / 10, domain); in be_cmd_config_qos()
3800 nic_desc.pf_num = adapter->pf_number; in be_cmd_config_qos()
3803 if (lancer_chip(adapter)) { in be_cmd_config_qos()
3818 return be_cmd_set_profile_config(adapter, &nic_desc, in be_cmd_config_qos()
3823 static void be_fill_vf_res_template(struct be_adapter *adapter, in be_fill_vf_res_template() argument
3834 be_cmd_get_profile_config(adapter, &res_mod, RESOURCE_MODIFIABLE, 0); in be_fill_vf_res_template()
3883 int be_cmd_set_sriov_config(struct be_adapter *adapter, in be_cmd_set_sriov_config() argument
3897 desc.pcie.pf_num = adapter->pdev->devfn; in be_cmd_set_sriov_config()
3906 desc.nic_vft.pf_num = adapter->pdev->devfn; in be_cmd_set_sriov_config()
3909 be_fill_vf_res_template(adapter, pool_res, num_vfs, num_vf_qs, in be_cmd_set_sriov_config()
3912 return be_cmd_set_profile_config(adapter, &desc, in be_cmd_set_sriov_config()
3916 int be_cmd_manage_iface(struct be_adapter *adapter, u32 iface, u8 op) in be_cmd_manage_iface() argument
3925 spin_lock_bh(&adapter->mcc_lock); in be_cmd_manage_iface()
3927 wrb = wrb_from_mccq(adapter); in be_cmd_manage_iface()
3940 status = be_mcc_notify_wait(adapter); in be_cmd_manage_iface()
3942 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_manage_iface()
3946 int be_cmd_set_vxlan_port(struct be_adapter *adapter, __be16 port) in be_cmd_set_vxlan_port() argument
3954 port_desc.link_num = adapter->hba_port_num; in be_cmd_set_vxlan_port()
3964 return be_cmd_set_profile_config(adapter, &port_desc, in be_cmd_set_vxlan_port()
3968 int be_cmd_get_if_id(struct be_adapter *adapter, struct be_vf_cfg *vf_cfg, in be_cmd_get_if_id() argument
3976 spin_lock_bh(&adapter->mcc_lock); in be_cmd_get_if_id()
3978 wrb = wrb_from_mccq(adapter); in be_cmd_get_if_id()
3990 status = be_mcc_notify_wait(adapter); in be_cmd_get_if_id()
3997 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_get_if_id()
4001 static int lancer_wait_idle(struct be_adapter *adapter) in lancer_wait_idle() argument
4008 reg_val = ioread32(adapter->db + PHYSDEV_CONTROL_OFFSET); in lancer_wait_idle()
4021 int lancer_physdev_ctrl(struct be_adapter *adapter, u32 mask) in lancer_physdev_ctrl() argument
4025 status = lancer_wait_idle(adapter); in lancer_physdev_ctrl()
4029 iowrite32(mask, adapter->db + PHYSDEV_CONTROL_OFFSET); in lancer_physdev_ctrl()
4035 bool dump_present(struct be_adapter *adapter) in dump_present() argument
4039 sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET); in dump_present()
4043 int lancer_initiate_dump(struct be_adapter *adapter) in lancer_initiate_dump() argument
4045 struct device *dev = &adapter->pdev->dev; in lancer_initiate_dump()
4048 if (dump_present(adapter)) { in lancer_initiate_dump()
4054 status = lancer_physdev_ctrl(adapter, PHYSDEV_CONTROL_FW_RESET_MASK | in lancer_initiate_dump()
4061 status = lancer_wait_idle(adapter); in lancer_initiate_dump()
4065 if (!dump_present(adapter)) { in lancer_initiate_dump()
4073 int lancer_delete_dump(struct be_adapter *adapter) in lancer_delete_dump() argument
4077 status = lancer_cmd_delete_object(adapter, LANCER_FW_DUMP_FILE); in lancer_delete_dump()
4082 int be_cmd_enable_vf(struct be_adapter *adapter, u8 domain) in be_cmd_enable_vf() argument
4088 if (BEx_chip(adapter)) in be_cmd_enable_vf()
4091 spin_lock_bh(&adapter->mcc_lock); in be_cmd_enable_vf()
4093 wrb = wrb_from_mccq(adapter); in be_cmd_enable_vf()
4107 status = be_mcc_notify_wait(adapter); in be_cmd_enable_vf()
4109 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_enable_vf()
4113 int be_cmd_intr_set(struct be_adapter *adapter, bool intr_enable) in be_cmd_intr_set() argument
4119 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_intr_set()
4122 wrb = wrb_from_mbox(adapter); in be_cmd_intr_set()
4132 status = be_mbox_notify_wait(adapter); in be_cmd_intr_set()
4134 mutex_unlock(&adapter->mbox_lock); in be_cmd_intr_set()
4139 int be_cmd_get_active_profile(struct be_adapter *adapter, u16 *profile_id) in be_cmd_get_active_profile() argument
4145 if (mutex_lock_interruptible(&adapter->mbox_lock)) in be_cmd_get_active_profile()
4148 wrb = wrb_from_mbox(adapter); in be_cmd_get_active_profile()
4160 status = be_mbox_notify_wait(adapter); in be_cmd_get_active_profile()
4169 mutex_unlock(&adapter->mbox_lock); in be_cmd_get_active_profile()
4173 int be_cmd_set_logical_link_config(struct be_adapter *adapter, in be_cmd_set_logical_link_config() argument
4180 if (BEx_chip(adapter) || lancer_chip(adapter)) in be_cmd_set_logical_link_config()
4183 spin_lock_bh(&adapter->mcc_lock); in be_cmd_set_logical_link_config()
4185 wrb = wrb_from_mccq(adapter); in be_cmd_set_logical_link_config()
4206 status = be_mcc_notify_wait(adapter); in be_cmd_set_logical_link_config()
4208 spin_unlock_bh(&adapter->mcc_lock); in be_cmd_set_logical_link_config()
4215 struct be_adapter *adapter = netdev_priv(netdev_handle); in be_roce_mcc_cmd() local
4222 spin_lock_bh(&adapter->mcc_lock); in be_roce_mcc_cmd()
4224 wrb = wrb_from_mccq(adapter); in be_roce_mcc_cmd()
4237 status = be_mcc_notify_wait(adapter); in be_roce_mcc_cmd()
4245 spin_unlock_bh(&adapter->mcc_lock); in be_roce_mcc_cmd()