Lines Matching defs:bd

16 int bnge_hwrm_ver_get(struct bnge_dev *bd)
24 rc = bnge_hwrm_req_init(bd, req, HWRM_VER_GET);
28 bnge_hwrm_req_flags(bd, req, BNGE_HWRM_FULL_WAIT);
29 bd->hwrm_max_req_len = HWRM_MAX_REQ_LEN;
34 resp = bnge_hwrm_req_hold(bd, req);
35 rc = bnge_hwrm_req_send(bd, req);
39 memcpy(&bd->ver_resp, resp, sizeof(struct hwrm_ver_get_output));
48 snprintf(bd->hwrm_ver_supp, FW_VER_STR_LEN, "%d.%d.%d",
52 snprintf(bd->hwrm_ver_supp, FW_VER_STR_LEN, "%d.%d.%d",
61 bd->fw_ver_code = BNGE_FW_VER_CODE(fw_maj, fw_min, fw_bld, fw_rsv);
62 snprintf(bd->fw_ver_str, FW_VER_STR_LEN, "%d.%d.%d.%d",
66 int fw_ver_len = strlen(bd->fw_ver_str);
68 snprintf(bd->fw_ver_str + fw_ver_len,
71 bd->fw_cap |= BNGE_FW_CAP_PKG_VER;
74 bd->hwrm_cmd_timeout = le16_to_cpu(resp->def_req_timeout);
75 if (!bd->hwrm_cmd_timeout)
76 bd->hwrm_cmd_timeout = BNGE_DFLT_HWRM_CMD_TIMEOUT;
77 bd->hwrm_cmd_max_timeout = le16_to_cpu(resp->max_req_timeout) * 1000;
78 if (!bd->hwrm_cmd_max_timeout)
79 bd->hwrm_cmd_max_timeout = BNGE_HWRM_CMD_MAX_TIMEOUT;
80 else if (bd->hwrm_cmd_max_timeout > BNGE_HWRM_CMD_MAX_TIMEOUT)
81 dev_warn(bd->dev, "Default HWRM commands max timeout increased to %d seconds\n",
82 bd->hwrm_cmd_max_timeout / 1000);
84 bd->hwrm_max_req_len = le16_to_cpu(resp->max_req_win_len);
85 bd->hwrm_max_ext_req_len = le16_to_cpu(resp->max_ext_req_len);
87 if (bd->hwrm_max_ext_req_len < HWRM_MAX_REQ_LEN)
88 bd->hwrm_max_ext_req_len = HWRM_MAX_REQ_LEN;
90 bd->chip_num = le16_to_cpu(resp->chip_num);
91 bd->chip_rev = resp->chip_rev;
96 bd->fw_cap |= BNGE_FW_CAP_SHORT_CMD;
99 bd->fw_cap |= BNGE_FW_CAP_KONG_MB_CHNL;
103 bd->fw_cap |= BNGE_FW_CAP_CFA_ADV_FLOW;
106 bnge_hwrm_req_drop(bd, req);
111 bnge_hwrm_nvm_dev_info(struct bnge_dev *bd,
118 rc = bnge_hwrm_req_init(bd, req, HWRM_NVM_GET_DEV_INFO);
122 resp = bnge_hwrm_req_hold(bd, req);
123 rc = bnge_hwrm_req_send(bd, req);
126 bnge_hwrm_req_drop(bd, req);
130 int bnge_hwrm_func_reset(struct bnge_dev *bd)
135 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_RESET);
140 bnge_hwrm_req_timeout(bd, req, BNGE_HWRM_RESET_TIMEOUT);
141 return bnge_hwrm_req_send(bd, req);
144 int bnge_hwrm_fw_set_time(struct bnge_dev *bd)
152 rc = bnge_hwrm_req_init(bd, req, HWRM_FW_SET_TIME);
162 return bnge_hwrm_req_send(bd, req);
165 int bnge_hwrm_func_drv_rgtr(struct bnge_dev *bd)
172 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_DRV_RGTR);
191 resp = bnge_hwrm_req_hold(bd, req);
192 rc = bnge_hwrm_req_send(bd, req);
194 set_bit(BNGE_STATE_DRV_REGISTERED, &bd->state);
197 bd->fw_cap |= BNGE_FW_CAP_IF_CHANGE;
199 bnge_hwrm_req_drop(bd, req);
203 int bnge_hwrm_func_drv_unrgtr(struct bnge_dev *bd)
208 if (!test_and_clear_bit(BNGE_STATE_DRV_REGISTERED, &bd->state))
211 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_DRV_UNRGTR);
214 return bnge_hwrm_req_send(bd, req);
229 static int bnge_alloc_all_ctx_pg_info(struct bnge_dev *bd, int ctx_max)
231 struct bnge_ctx_mem_info *ctx = bd->ctx;
255 int bnge_hwrm_func_backing_store_qcaps(struct bnge_dev *bd)
263 if (bd->ctx)
266 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_BACKING_STORE_QCAPS_V2);
273 bd->ctx = ctx;
275 resp = bnge_hwrm_req_hold(bd, req);
284 rc = bnge_hwrm_req_send(bd, req);
310 rc = bnge_alloc_all_ctx_pg_info(bd, BNGE_CTX_V2_MAX);
313 bnge_hwrm_req_drop(bd, req);
335 int bnge_hwrm_func_backing_store(struct bnge_dev *bd,
352 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_BACKING_STORE_CFG_V2);
355 bnge_hwrm_req_hold(bd, req);
377 rc = bnge_hwrm_req_send(bd, req);
379 bnge_hwrm_req_drop(bd, req);
384 static int bnge_hwrm_get_rings(struct bnge_dev *bd)
386 struct bnge_hw_resc *hw_resc = &bd->hw_resc;
393 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_QCFG);
398 resp = bnge_hwrm_req_hold(bd, req);
399 rc = bnge_hwrm_req_send(bd, req);
401 bnge_hwrm_req_drop(bd, req);
416 if (bnge_is_agg_reqd(bd))
422 if (bnge_is_agg_reqd(bd))
433 bnge_hwrm_req_drop(bd, req);
438 __bnge_hwrm_reserve_pf_rings(struct bnge_dev *bd, struct bnge_hw_rings *hwr)
443 if (bnge_hwrm_req_init(bd, req, HWRM_FUNC_QCFG))
469 bnge_hwrm_reserve_pf_rings(struct bnge_dev *bd, struct bnge_hw_rings *hwr)
474 req = __bnge_hwrm_reserve_pf_rings(bd, hwr);
479 bnge_hwrm_req_drop(bd, req);
483 rc = bnge_hwrm_req_send(bd, req);
487 return bnge_hwrm_get_rings(bd);
490 int bnge_hwrm_reserve_rings(struct bnge_dev *bd, struct bnge_hw_rings *hwr)
492 return bnge_hwrm_reserve_pf_rings(bd, hwr);
495 int bnge_hwrm_func_qcfg(struct bnge_dev *bd)
501 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_QCFG);
506 resp = bnge_hwrm_req_hold(bd, req);
507 rc = bnge_hwrm_req_send(bd, req);
511 bd->max_mtu = le16_to_cpu(resp->max_mtu_configured);
512 if (!bd->max_mtu)
513 bd->max_mtu = BNGE_MAX_MTU;
515 if (bd->db_size)
518 bd->db_offset = le16_to_cpu(resp->legacy_l2_db_size_kb) * 1024;
519 bd->db_size = PAGE_ALIGN(le16_to_cpu(resp->l2_doorbell_bar_size_kb) *
521 if (!bd->db_size || bd->db_size > pci_resource_len(bd->pdev, 2) ||
522 bd->db_size <= bd->db_offset)
523 bd->db_size = pci_resource_len(bd->pdev, 2);
526 bnge_hwrm_req_drop(bd, req);
530 int bnge_hwrm_func_resc_qcaps(struct bnge_dev *bd)
533 struct bnge_hw_resc *hw_resc = &bd->hw_resc;
537 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_RESOURCE_QCAPS);
542 resp = bnge_hwrm_req_hold(bd, req);
543 rc = bnge_hwrm_req_send_silent(bd, req);
569 bnge_hwrm_req_drop(bd, req);
573 int bnge_hwrm_func_qcaps(struct bnge_dev *bd)
577 struct bnge_pf_info *pf = &bd->pf;
581 rc = bnge_hwrm_req_init(bd, req, HWRM_FUNC_QCAPS);
586 resp = bnge_hwrm_req_hold(bd, req);
587 rc = bnge_hwrm_req_send(bd, req);
593 bd->flags |= BNGE_EN_ROCE_V1;
595 bd->flags |= BNGE_EN_ROCE_V2;
601 bd->tso_max_segs = le16_to_cpu(resp->max_tso_segs);
604 bnge_hwrm_req_drop(bd, req);
608 int bnge_hwrm_vnic_qcaps(struct bnge_dev *bd)
614 bd->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
615 bd->rss_cap &= ~BNGE_RSS_CAP_NEW_RSS_CAP;
617 rc = bnge_hwrm_req_init(bd, req, HWRM_VNIC_QCAPS);
621 resp = bnge_hwrm_req_hold(bd, req);
622 rc = bnge_hwrm_req_send(bd, req);
627 bd->fw_cap |= BNGE_FW_CAP_VLAN_RX_STRIP;
629 bd->rss_cap |= BNGE_RSS_CAP_RSS_HASH_TYPE_DELTA;
631 bd->rss_cap |= BNGE_RSS_CAP_RSS_TCAM;
632 bd->max_tpa_v2 = le16_to_cpu(resp->max_aggs_supported);
633 if (bd->max_tpa_v2)
634 bd->hw_ring_stats_size = BNGE_RING_STATS_SIZE;
636 bd->fw_cap |= BNGE_FW_CAP_VNIC_TUNNEL_TPA;
638 bd->rss_cap |= BNGE_RSS_CAP_AH_V4_RSS_CAP;
640 bd->rss_cap |= BNGE_RSS_CAP_AH_V6_RSS_CAP;
642 bd->rss_cap |= BNGE_RSS_CAP_ESP_V4_RSS_CAP;
644 bd->rss_cap |= BNGE_RSS_CAP_ESP_V6_RSS_CAP;
646 bnge_hwrm_req_drop(bd, req);
655 int bnge_hwrm_queue_qportcfg(struct bnge_dev *bd)
663 rc = bnge_hwrm_req_init(bd, req, HWRM_QUEUE_QPORTCFG);
667 resp = bnge_hwrm_req_hold(bd, req);
668 rc = bnge_hwrm_req_send(bd, req);
676 bd->max_tc = resp->max_configurable_queues;
677 bd->max_lltc = resp->max_configurable_lossless_queues;
678 if (bd->max_tc > BNGE_MAX_QUEUE)
679 bd->max_tc = BNGE_MAX_QUEUE;
681 no_rdma = !bnge_is_roce_en(bd);
683 for (i = 0, j = 0; i < bd->max_tc; i++) {
684 bd->q_info[j].queue_id = *qptr;
685 bd->q_ids[i] = *qptr++;
686 bd->q_info[j].queue_profile = *qptr++;
687 bd->tc_to_qidx[j] = j;
688 if (!BNGE_CNPQ(bd->q_info[j].queue_profile) || no_rdma)
691 bd->max_q = bd->max_tc;
692 bd->max_tc = max_t(u8, j, 1);
695 bd->max_tc = 1;
697 if (bd->max_lltc > bd->max_tc)
698 bd->max_lltc = bd->max_tc;
701 bnge_hwrm_req_drop(bd, req);