Commit 433e2802 authored by Peng Li's avatar Peng Li Committed by David S. Miller
Browse files

net: hns3: refactor out hclgevf_cmd_convert_err_code()



To improve code readability and maintainability, refactor
hclgevf_cmd_convert_err_code() with an array of imp_errcode
and common_errno mapping, instead of a bloated switch/case.

Signed-off-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1c9a98b0
Loading
Loading
Loading
Loading
+27 −28
Original line number Diff line number Diff line
@@ -176,37 +176,36 @@ void hclgevf_cmd_setup_basic_desc(struct hclgevf_desc *desc,
		desc->flag &= cpu_to_le16(~HCLGEVF_CMD_FLAG_WR);
}

struct vf_errcode {
	u32 imp_errcode;
	int common_errno;
};

static int hclgevf_cmd_convert_err_code(u16 desc_ret)
{
	switch (desc_ret) {
	case HCLGEVF_CMD_EXEC_SUCCESS:
		return 0;
	case HCLGEVF_CMD_NO_AUTH:
		return -EPERM;
	case HCLGEVF_CMD_NOT_SUPPORTED:
		return -EOPNOTSUPP;
	case HCLGEVF_CMD_QUEUE_FULL:
		return -EXFULL;
	case HCLGEVF_CMD_NEXT_ERR:
		return -ENOSR;
	case HCLGEVF_CMD_UNEXE_ERR:
		return -ENOTBLK;
	case HCLGEVF_CMD_PARA_ERR:
		return -EINVAL;
	case HCLGEVF_CMD_RESULT_ERR:
		return -ERANGE;
	case HCLGEVF_CMD_TIMEOUT:
		return -ETIME;
	case HCLGEVF_CMD_HILINK_ERR:
		return -ENOLINK;
	case HCLGEVF_CMD_QUEUE_ILLEGAL:
		return -ENXIO;
	case HCLGEVF_CMD_INVALID:
		return -EBADR;
	default:
	struct vf_errcode hclgevf_cmd_errcode[] = {
		{HCLGEVF_CMD_EXEC_SUCCESS, 0},
		{HCLGEVF_CMD_NO_AUTH, -EPERM},
		{HCLGEVF_CMD_NOT_SUPPORTED, -EOPNOTSUPP},
		{HCLGEVF_CMD_QUEUE_FULL, -EXFULL},
		{HCLGEVF_CMD_NEXT_ERR, -ENOSR},
		{HCLGEVF_CMD_UNEXE_ERR, -ENOTBLK},
		{HCLGEVF_CMD_PARA_ERR, -EINVAL},
		{HCLGEVF_CMD_RESULT_ERR, -ERANGE},
		{HCLGEVF_CMD_TIMEOUT, -ETIME},
		{HCLGEVF_CMD_HILINK_ERR, -ENOLINK},
		{HCLGEVF_CMD_QUEUE_ILLEGAL, -ENXIO},
		{HCLGEVF_CMD_INVALID, -EBADR},
	};
	u32 errcode_count = ARRAY_SIZE(hclgevf_cmd_errcode);
	u32 i;

	for (i = 0; i < errcode_count; i++)
		if (hclgevf_cmd_errcode[i].imp_errcode == desc_ret)
			return hclgevf_cmd_errcode[i].common_errno;

	return -EIO;
}
}

/* hclgevf_cmd_send - send command to command queue
 * @hw: pointer to the hw struct