Map error to correct error code

This patch has been provided by the vendor.

Test: VtsHalWifiV1_3TargetTest passes all tests now
Bug: 186692129

Signed-off-by: mullerf <mullerf@google.com>
Change-Id: I9a4e9398f6fb1e95a9c314fca30c3e066acfd459
(cherry picked from commit 8b051c25bb8dcf644ebe90121473cd49d4c13fde)
diff --git a/bcmdhd/wifi_hal/cpp_bindings.cpp b/bcmdhd/wifi_hal/cpp_bindings.cpp
index 698789d..5311e6e 100755
--- a/bcmdhd/wifi_hal/cpp_bindings.cpp
+++ b/bcmdhd/wifi_hal/cpp_bindings.cpp
@@ -579,27 +579,56 @@
     }
 }
 
+static int mapErrorCodes(int err)
+{
+    int ret;
+    if (!err) {
+        return WIFI_SUCCESS;
+    }
+    switch (err) {
+        case -EOPNOTSUPP:
+            ret = WIFI_ERROR_NOT_SUPPORTED;
+            break;
+        case -ETIMEDOUT:
+            ret = WIFI_ERROR_TIMED_OUT;
+            break;
+        case -EINVAL:
+            ret = WIFI_ERROR_INVALID_ARGS;
+            break;
+        case -ENOMEM:
+            ret = WIFI_ERROR_OUT_OF_MEMORY;
+            break;
+        case -EBUSY:
+            ret = WIFI_ERROR_BUSY;
+            break;
+        default:
+            ret = WIFI_ERROR_UNKNOWN;
+    }
+    ALOGD("error code %d mapped to %d", err, ret);
+    return ret;
+}
+
 int WifiRequest::create(uint32_t id, int subcmd) {
     int res = create(NL80211_CMD_VENDOR);
     if (res < 0) {
-        return res;
+        return mapErrorCodes(res);
     }
 
     res = put_u32(NL80211_ATTR_VENDOR_ID, id);
     if (res < 0) {
-        return res;
+        return mapErrorCodes(res);
     }
 
     res = put_u32(NL80211_ATTR_VENDOR_SUBCMD, subcmd);
     if (res < 0) {
-        return res;
+        return mapErrorCodes(res);
     }
 
     if (mIface != -1) {
         res = set_iface_id(mIface);
     }
 
-    return res;
+    return mapErrorCodes(res);
 }
 
 
@@ -646,7 +675,7 @@
 out:
     nl_cb_put(cb);
     pthread_mutex_unlock(&ResponseMutex);
-    return err;
+    return mapErrorCodes(err);
 }
 
 int WifiCommand::requestEvent(int cmd) {
@@ -675,7 +704,7 @@
 
 out:
     wifi_unregister_handler(wifiHandle(), cmd);
-    return res;
+    return mapErrorCodes(res);
 }
 
 int WifiCommand::requestVendorEvent(uint32_t id, int subcmd) {
@@ -699,7 +728,7 @@
 
 out:
     wifi_unregister_vendor_handler(wifiHandle(), id, subcmd);
-    return res;
+    return mapErrorCodes(res);
 }
 
 /* Event handlers */