Commit 0305b443 authored by Lipeng's avatar Lipeng Committed by David S. Miller
Browse files

net: hns3: Fixes ring-to-vector map-and-unmap command



This patch fixes the vector-to-ring map and unmap command and adds
INT_GL(for, Gap Limiting Interrupts) and VF id to it as required
by the hardware interface.

Fixes: 6427264ef330 ("net: hns3: Add HNS3 Acceleration Engine &
Compatibility Layer Support")
Signed-off-by: default avatarLipeng <lipeng321@huawei.com>
Signed-off-by: default avatarMingguang Qu <qumingguang@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c5b1b975
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ struct hclge_tqp_map {
	u8 rsv[18];
};

#define HCLGE_VECTOR_ELEMENTS_PER_CMD	11
#define HCLGE_VECTOR_ELEMENTS_PER_CMD	10

enum hclge_int_type {
	HCLGE_INT_TX,
@@ -252,8 +252,12 @@ struct hclge_ctrl_vector_chain {
#define HCLGE_INT_TYPE_S	0
#define HCLGE_INT_TYPE_M	0x3
#define HCLGE_TQP_ID_S		2
#define HCLGE_TQP_ID_M		(0x3fff << HCLGE_TQP_ID_S)
#define HCLGE_TQP_ID_M		(0x7ff << HCLGE_TQP_ID_S)
#define HCLGE_INT_GL_IDX_S	13
#define HCLGE_INT_GL_IDX_M	(0x3 << HCLGE_INT_GL_IDX_S)
	__le16 tqp_type_and_id[HCLGE_VECTOR_ELEMENTS_PER_CMD];
	u8 vfid;
	u8 rsv;
};

#define HCLGE_TC_NUM		8
+8 −0
Original line number Diff line number Diff line
@@ -2680,7 +2680,11 @@ int hclge_map_vport_ring_to_vector(struct hclge_vport *vport, int vector_id,
			       hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
		hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,
			       HCLGE_TQP_ID_S,	node->tqp_index);
		hnae_set_field(req->tqp_type_and_id[i], HCLGE_INT_GL_IDX_M,
			       HCLGE_INT_GL_IDX_S,
			       hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
		req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);
		req->vfid = vport->vport_id;

		if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
			req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;
@@ -2764,8 +2768,12 @@ static int hclge_unmap_ring_from_vector(
			       hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));
		hnae_set_field(req->tqp_type_and_id[i], HCLGE_TQP_ID_M,
			       HCLGE_TQP_ID_S,	node->tqp_index);
		hnae_set_field(req->tqp_type_and_id[i], HCLGE_INT_GL_IDX_M,
			       HCLGE_INT_GL_IDX_S,
			       hnae_get_bit(node->flag, HNAE3_RING_TYPE_B));

		req->tqp_type_and_id[i] = cpu_to_le16(req->tqp_type_and_id[i]);
		req->vfid = vport->vport_id;

		if (++i >= HCLGE_VECTOR_ELEMENTS_PER_CMD) {
			req->int_cause_num = HCLGE_VECTOR_ELEMENTS_PER_CMD;