diff options
| author | Peng Li <lipeng321@huawei.com> | 2021-02-12 06:21:02 +0300 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2021-02-13 00:13:15 +0300 | 
| commit | 433e2802775c370604b74378c00977b86623fa12 (patch) | |
| tree | 9883b67fb29f4fe79f8955de320c66b6fcebe10e | |
| parent | 1c9a98b0ba1f16490ea0d492a1cd606f3a4b1bee (diff) | |
| download | linux-433e2802775c370604b74378c00977b86623fa12.tar.xz | |
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: Peng Li <lipeng321@huawei.com>
Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c | 55 | 
1 files changed, 27 insertions, 28 deletions
| diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c index 0f93c2dd890d..603665e5bf39 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_cmd.c @@ -176,36 +176,35 @@ 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: -		return -EIO; -	} +	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 | 
