qed: Share additional information with qedf
Share several new tidbits with qedf: - wwpn & wwnn - Absolute pf-id [this one is actually meant for qedi as well] - Number of available CQs While we're at it, now that qedf will be aware of the available CQs we can add some validation on the inputs it provides. Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
5779675912
Коммит
3c5da94278
|
@ -2071,16 +2071,22 @@ static void qed_hw_set_feat(struct qed_hwfn *p_hwfn)
|
||||||
QED_VF_L2_QUE));
|
QED_VF_L2_QUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p_hwfn->hw_info.personality == QED_PCI_FCOE)
|
||||||
|
feat_num[QED_FCOE_CQ] = min_t(u32, sb_cnt.cnt,
|
||||||
|
RESC_NUM(p_hwfn,
|
||||||
|
QED_CMDQS_CQS));
|
||||||
|
|
||||||
if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
|
if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
|
||||||
feat_num[QED_ISCSI_CQ] = min_t(u32, sb_cnt.cnt,
|
feat_num[QED_ISCSI_CQ] = min_t(u32, sb_cnt.cnt,
|
||||||
RESC_NUM(p_hwfn,
|
RESC_NUM(p_hwfn,
|
||||||
QED_CMDQS_CQS));
|
QED_CMDQS_CQS));
|
||||||
DP_VERBOSE(p_hwfn,
|
DP_VERBOSE(p_hwfn,
|
||||||
NETIF_MSG_PROBE,
|
NETIF_MSG_PROBE,
|
||||||
"#PF_L2_QUEUES=%d VF_L2_QUEUES=%d #ROCE_CNQ=%d ISCSI_CQ=%d #SBS=%d\n",
|
"#PF_L2_QUEUES=%d VF_L2_QUEUES=%d #ROCE_CNQ=%d FCOE_CQ=%d ISCSI_CQ=%d #SBS=%d\n",
|
||||||
(int)FEAT_NUM(p_hwfn, QED_PF_L2_QUE),
|
(int)FEAT_NUM(p_hwfn, QED_PF_L2_QUE),
|
||||||
(int)FEAT_NUM(p_hwfn, QED_VF_L2_QUE),
|
(int)FEAT_NUM(p_hwfn, QED_VF_L2_QUE),
|
||||||
(int)FEAT_NUM(p_hwfn, QED_RDMA_CNQ),
|
(int)FEAT_NUM(p_hwfn, QED_RDMA_CNQ),
|
||||||
|
(int)FEAT_NUM(p_hwfn, QED_FCOE_CQ),
|
||||||
(int)FEAT_NUM(p_hwfn, QED_ISCSI_CQ),
|
(int)FEAT_NUM(p_hwfn, QED_ISCSI_CQ),
|
||||||
(int)sb_cnt.cnt);
|
(int)sb_cnt.cnt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,15 @@ qed_sp_fcoe_func_start(struct qed_hwfn *p_hwfn,
|
||||||
p_data = &p_ramrod->init_ramrod_data;
|
p_data = &p_ramrod->init_ramrod_data;
|
||||||
fcoe_pf_params = &p_hwfn->pf_params.fcoe_pf_params;
|
fcoe_pf_params = &p_hwfn->pf_params.fcoe_pf_params;
|
||||||
|
|
||||||
|
/* Sanity */
|
||||||
|
if (fcoe_pf_params->num_cqs > p_hwfn->hw_info.feat_num[QED_FCOE_CQ]) {
|
||||||
|
DP_ERR(p_hwfn,
|
||||||
|
"Cannot satisfy CQ amount. CQs requested %d, CQs available %d. Aborting function start\n",
|
||||||
|
fcoe_pf_params->num_cqs,
|
||||||
|
p_hwfn->hw_info.feat_num[QED_FCOE_CQ]);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
p_data->mtu = cpu_to_le16(fcoe_pf_params->mtu);
|
p_data->mtu = cpu_to_le16(fcoe_pf_params->mtu);
|
||||||
tmp = cpu_to_le16(fcoe_pf_params->sq_num_pbl_pages);
|
tmp = cpu_to_le16(fcoe_pf_params->sq_num_pbl_pages);
|
||||||
p_data->sq_num_pages_in_pbl = tmp;
|
p_data->sq_num_pages_in_pbl = tmp;
|
||||||
|
@ -739,6 +748,11 @@ static int qed_fill_fcoe_dev_info(struct qed_dev *cdev,
|
||||||
info->secondary_bdq_rq_addr =
|
info->secondary_bdq_rq_addr =
|
||||||
qed_fcoe_get_secondary_bdq_prod(hwfn, BDQ_ID_RQ);
|
qed_fcoe_get_secondary_bdq_prod(hwfn, BDQ_ID_RQ);
|
||||||
|
|
||||||
|
info->wwpn = hwfn->mcp_info->func_info.wwn_port;
|
||||||
|
info->wwnn = hwfn->mcp_info->func_info.wwn_node;
|
||||||
|
|
||||||
|
info->num_cqs = FEAT_NUM(hwfn, QED_FCOE_CQ);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -269,6 +269,8 @@ int qed_fill_dev_info(struct qed_dev *cdev,
|
||||||
if (QED_LEADING_HWFN(cdev)->hw_info.b_wol_support ==
|
if (QED_LEADING_HWFN(cdev)->hw_info.b_wol_support ==
|
||||||
QED_WOL_SUPPORT_PME)
|
QED_WOL_SUPPORT_PME)
|
||||||
dev_info->wol_support = true;
|
dev_info->wol_support = true;
|
||||||
|
|
||||||
|
dev_info->abs_pf_id = QED_LEADING_HWFN(cdev)->abs_pf_id;
|
||||||
} else {
|
} else {
|
||||||
qed_vf_get_fw_version(&cdev->hwfns[0], &dev_info->fw_major,
|
qed_vf_get_fw_version(&cdev->hwfns[0], &dev_info->fw_major,
|
||||||
&dev_info->fw_minor, &dev_info->fw_rev,
|
&dev_info->fw_minor, &dev_info->fw_rev,
|
||||||
|
|
|
@ -24,6 +24,11 @@ struct qed_dev_fcoe_info {
|
||||||
|
|
||||||
void __iomem *primary_dbq_rq_addr;
|
void __iomem *primary_dbq_rq_addr;
|
||||||
void __iomem *secondary_bdq_rq_addr;
|
void __iomem *secondary_bdq_rq_addr;
|
||||||
|
|
||||||
|
u64 wwpn;
|
||||||
|
u64 wwnn;
|
||||||
|
|
||||||
|
u8 num_cqs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qed_fcoe_params_offload {
|
struct qed_fcoe_params_offload {
|
||||||
|
|
|
@ -360,6 +360,8 @@ struct qed_dev_info {
|
||||||
bool vxlan_enable;
|
bool vxlan_enable;
|
||||||
bool gre_enable;
|
bool gre_enable;
|
||||||
bool geneve_enable;
|
bool geneve_enable;
|
||||||
|
|
||||||
|
u8 abs_pf_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum qed_sb_type {
|
enum qed_sb_type {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче