qtnfmac: decode error codes from firmware replies
authorIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Tue, 29 May 2018 11:59:59 +0000 (14:59 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 30 May 2018 19:20:03 +0000 (22:20 +0300)
Introduce a function that will map an error code reported in reply
to a firmware command, into one of standard errno codes.
Use additional error codes to improve error reporting
for MAC address changes.

Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/commands.c
drivers/net/wireless/quantenna/qtnfmac/qlink.h

index deca0060eb27098116cde375b92e7831a452feb2..9dc4560be5d84059380a8353c1924ae3b846d9a9 100644 (file)
@@ -55,6 +55,28 @@ static int qtnf_cmd_check_reply_header(const struct qlink_resp *resp,
        return 0;
 }
 
+static int qtnf_cmd_resp_result_decode(enum qlink_cmd_result qcode)
+{
+       switch (qcode) {
+       case QLINK_CMD_RESULT_OK:
+               return 0;
+       case QLINK_CMD_RESULT_INVALID:
+               return -EINVAL;
+       case QLINK_CMD_RESULT_ENOTSUPP:
+               return -ENOTSUPP;
+       case QLINK_CMD_RESULT_ENOTFOUND:
+               return -ENOENT;
+       case QLINK_CMD_RESULT_EALREADY:
+               return -EALREADY;
+       case QLINK_CMD_RESULT_EADDRINUSE:
+               return -EADDRINUSE;
+       case QLINK_CMD_RESULT_EADDRNOTAVAIL:
+               return -EADDRNOTAVAIL;
+       default:
+               return -EFAULT;
+       }
+}
+
 static int qtnf_cmd_send_with_reply(struct qtnf_bus *bus,
                                    struct sk_buff *cmd_skb,
                                    struct sk_buff **response_skb,
@@ -810,10 +832,10 @@ static int qtnf_cmd_send_add_change_intf(struct qtnf_vif *vif,
        if (unlikely(ret))
                goto out;
 
-       if (unlikely(res_code != QLINK_CMD_RESULT_OK)) {
+       ret = qtnf_cmd_resp_result_decode(res_code);
+       if (ret) {
                pr_err("VIF%u.%u: CMD %d failed: %u\n", vif->mac->macid,
                       vif->vifid, cmd_type, res_code);
-               ret = -EFAULT;
                goto out;
        }
 
index 9ab27e158023cef6c5aba6b8c2238514ffd87037..f85deda703fb705675759f3241cd4ae1df2ecc98 100644 (file)
@@ -674,6 +674,8 @@ enum qlink_cmd_result {
        QLINK_CMD_RESULT_ENOTSUPP,
        QLINK_CMD_RESULT_ENOTFOUND,
        QLINK_CMD_RESULT_EALREADY,
+       QLINK_CMD_RESULT_EADDRINUSE,
+       QLINK_CMD_RESULT_EADDRNOTAVAIL,
 };
 
 /**