net: hns3: add all IMP return code
Currently, the HNS3 driver just defines part of IMP return code, This patch supplements all the remaining IMP return code, and adds a function to convert this code to the error number. 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>
This commit is contained in:
parent
49b1255603
commit
9e1511fb80
|
@ -188,12 +188,43 @@ static bool hclge_is_special_opcode(u16 opcode)
|
|||
return false;
|
||||
}
|
||||
|
||||
static int hclge_cmd_convert_err_code(u16 desc_ret)
|
||||
{
|
||||
switch (desc_ret) {
|
||||
case HCLGE_CMD_EXEC_SUCCESS:
|
||||
return 0;
|
||||
case HCLGE_CMD_NO_AUTH:
|
||||
return -EPERM;
|
||||
case HCLGE_CMD_NOT_SUPPORTED:
|
||||
return -EOPNOTSUPP;
|
||||
case HCLGE_CMD_QUEUE_FULL:
|
||||
return -EXFULL;
|
||||
case HCLGE_CMD_NEXT_ERR:
|
||||
return -ENOSR;
|
||||
case HCLGE_CMD_UNEXE_ERR:
|
||||
return -ENOTBLK;
|
||||
case HCLGE_CMD_PARA_ERR:
|
||||
return -EINVAL;
|
||||
case HCLGE_CMD_RESULT_ERR:
|
||||
return -ERANGE;
|
||||
case HCLGE_CMD_TIMEOUT:
|
||||
return -ETIME;
|
||||
case HCLGE_CMD_HILINK_ERR:
|
||||
return -ENOLINK;
|
||||
case HCLGE_CMD_QUEUE_ILLEGAL:
|
||||
return -ENXIO;
|
||||
case HCLGE_CMD_INVALID:
|
||||
return -EBADR;
|
||||
default:
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
static int hclge_cmd_check_retval(struct hclge_hw *hw, struct hclge_desc *desc,
|
||||
int num, int ntc)
|
||||
{
|
||||
u16 opcode, desc_ret;
|
||||
int handle;
|
||||
int retval;
|
||||
|
||||
opcode = le16_to_cpu(desc[0].opcode);
|
||||
for (handle = 0; handle < num; handle++) {
|
||||
|
@ -207,17 +238,9 @@ static int hclge_cmd_check_retval(struct hclge_hw *hw, struct hclge_desc *desc,
|
|||
else
|
||||
desc_ret = le16_to_cpu(desc[0].retval);
|
||||
|
||||
if (desc_ret == HCLGE_CMD_EXEC_SUCCESS)
|
||||
retval = 0;
|
||||
else if (desc_ret == HCLGE_CMD_NO_AUTH)
|
||||
retval = -EPERM;
|
||||
else if (desc_ret == HCLGE_CMD_NOT_SUPPORTED)
|
||||
retval = -EOPNOTSUPP;
|
||||
else
|
||||
retval = -EIO;
|
||||
hw->cmq.last_status = desc_ret;
|
||||
|
||||
return retval;
|
||||
return hclge_cmd_convert_err_code(desc_ret);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -41,6 +41,14 @@ enum hclge_cmd_return_status {
|
|||
HCLGE_CMD_NO_AUTH = 1,
|
||||
HCLGE_CMD_NOT_SUPPORTED = 2,
|
||||
HCLGE_CMD_QUEUE_FULL = 3,
|
||||
HCLGE_CMD_NEXT_ERR = 4,
|
||||
HCLGE_CMD_UNEXE_ERR = 5,
|
||||
HCLGE_CMD_PARA_ERR = 6,
|
||||
HCLGE_CMD_RESULT_ERR = 7,
|
||||
HCLGE_CMD_TIMEOUT = 8,
|
||||
HCLGE_CMD_HILINK_ERR = 9,
|
||||
HCLGE_CMD_QUEUE_ILLEGAL = 10,
|
||||
HCLGE_CMD_INVALID = 11,
|
||||
};
|
||||
|
||||
enum hclge_cmd_status {
|
||||
|
|
|
@ -177,6 +177,38 @@ void hclgevf_cmd_setup_basic_desc(struct hclgevf_desc *desc,
|
|||
desc->flag &= cpu_to_le16(~HCLGEVF_CMD_FLAG_WR);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/* hclgevf_cmd_send - send command to command queue
|
||||
* @hw: pointer to the hw struct
|
||||
* @desc: prefilled descriptor for describing the command
|
||||
|
@ -259,11 +291,7 @@ int hclgevf_cmd_send(struct hclgevf_hw *hw, struct hclgevf_desc *desc, int num)
|
|||
else
|
||||
retval = le16_to_cpu(desc[0].retval);
|
||||
|
||||
if ((enum hclgevf_cmd_return_status)retval ==
|
||||
HCLGEVF_CMD_EXEC_SUCCESS)
|
||||
status = 0;
|
||||
else
|
||||
status = -EIO;
|
||||
status = hclgevf_cmd_convert_err_code(retval);
|
||||
hw->cmq.last_status = (enum hclgevf_cmd_status)retval;
|
||||
ntc++;
|
||||
handle++;
|
||||
|
|
|
@ -46,9 +46,17 @@ struct hclgevf_cmq_ring {
|
|||
|
||||
enum hclgevf_cmd_return_status {
|
||||
HCLGEVF_CMD_EXEC_SUCCESS = 0,
|
||||
HCLGEVF_CMD_NO_AUTH = 1,
|
||||
HCLGEVF_CMD_NOT_EXEC = 2,
|
||||
HCLGEVF_CMD_QUEUE_FULL = 3,
|
||||
HCLGEVF_CMD_NO_AUTH = 1,
|
||||
HCLGEVF_CMD_NOT_SUPPORTED = 2,
|
||||
HCLGEVF_CMD_QUEUE_FULL = 3,
|
||||
HCLGEVF_CMD_NEXT_ERR = 4,
|
||||
HCLGEVF_CMD_UNEXE_ERR = 5,
|
||||
HCLGEVF_CMD_PARA_ERR = 6,
|
||||
HCLGEVF_CMD_RESULT_ERR = 7,
|
||||
HCLGEVF_CMD_TIMEOUT = 8,
|
||||
HCLGEVF_CMD_HILINK_ERR = 9,
|
||||
HCLGEVF_CMD_QUEUE_ILLEGAL = 10,
|
||||
HCLGEVF_CMD_INVALID = 11,
|
||||
};
|
||||
|
||||
enum hclgevf_cmd_status {
|
||||
|
|
Loading…
Reference in New Issue