[RAMEN9610-8687][9610] wlbt: Fix warning in nan code
[GitHub/LineageOS/android_hardware_samsung_slsi_scsc_wifibt_wifi_hal.git] / common.cpp
index 751c7824269bad3a24c930ca7f005b8f0662ca42..e0de0bc184ab584d24891bc5869e4be05628d30c 100755 (executable)
-\r
-#include <stdlib.h>\r
-#include <netlink/object-api.h>\r
-#include <netlink/handlers.h>\r
-\r
-#include "wifi_hal.h"\r
-#include "common.h"\r
-\r
-interface_info *getIfaceInfo(wifi_interface_handle handle)\r
-{\r
-    return (interface_info *)handle;\r
-}\r
-\r
-wifi_handle getWifiHandle(wifi_interface_handle handle)\r
-{\r
-    return getIfaceInfo(handle)->handle;\r
-}\r
-\r
-hal_info *getHalInfo(wifi_handle handle)\r
-{\r
-    return (hal_info *)handle;\r
-}\r
-\r
-hal_info *getHalInfo(wifi_interface_handle handle)\r
-{\r
-    return getHalInfo(getWifiHandle(handle));\r
-}\r
-\r
-wifi_handle getWifiHandle(hal_info *info)\r
-{\r
-    return (wifi_handle)info;\r
-}\r
-\r
-wifi_interface_handle getIfaceHandle(interface_info *info)\r
-{\r
-    return (wifi_interface_handle)info;\r
-}\r
-\r
-wifi_error wifi_register_handler(wifi_handle handle, int cmd, nl_recvmsg_msg_cb_t func, void *arg)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    /* TODO: check for multiple handlers? */\r
-    pthread_mutex_lock(&info->cb_lock);\r
-\r
-    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;\r
-\r
-    if (info->num_event_cb < info->alloc_event_cb) {\r
-        info->event_cb[info->num_event_cb].nl_cmd  = cmd;\r
-        info->event_cb[info->num_event_cb].vendor_id  = 0;\r
-        info->event_cb[info->num_event_cb].vendor_subcmd  = 0;\r
-        info->event_cb[info->num_event_cb].cb_func = func;\r
-        info->event_cb[info->num_event_cb].cb_arg  = arg;\r
-        ALOGI("Successfully added event handler %p:%p for command %d at %d",\r
-                arg, func, cmd, info->num_event_cb);\r
-        info->num_event_cb++;\r
-        result = WIFI_SUCCESS;\r
-    }\r
-\r
-    pthread_mutex_unlock(&info->cb_lock);\r
-    return result;\r
-}\r
-\r
-wifi_error wifi_register_vendor_handler(wifi_handle handle,\r
-        uint32_t id, int subcmd, nl_recvmsg_msg_cb_t func, void *arg)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-//ALOGD("GSCAN register handle wifi_register_vendor_handler %p", handle);\r
-    /* TODO: check for multiple handlers? */\r
-    pthread_mutex_lock(&info->cb_lock);\r
-        ALOGI("Added event handler %p", info);\r
-\r
-    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;\r
-\r
-       //    ALOGD("register_vendor_handler: handle = %p", handle);\r
-    if (info->num_event_cb < info->alloc_event_cb) {\r
-        info->event_cb[info->num_event_cb].nl_cmd  = NL80211_CMD_VENDOR;\r
-        info->event_cb[info->num_event_cb].vendor_id  = id;\r
-        info->event_cb[info->num_event_cb].vendor_subcmd  = subcmd;\r
-        info->event_cb[info->num_event_cb].cb_func = func;\r
-        info->event_cb[info->num_event_cb].cb_arg  = arg;\r
-        ALOGI("Added event handler %p:%p for vendor 0x%0x and subcmd 0x%0x at %d",\r
-                arg, func, id, subcmd, info->num_event_cb);\r
-        info->num_event_cb++;\r
-        result = WIFI_SUCCESS;\r
-    }\r
-\r
-    pthread_mutex_unlock(&info->cb_lock);\r
-    return result;\r
-}\r
-\r
-void wifi_unregister_handler(wifi_handle handle, int cmd)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    if (cmd == NL80211_CMD_VENDOR) {\r
-        ALOGE("Must use wifi_unregister_vendor_handler to remove vendor handlers");\r
-        return;\r
-    }\r
-\r
-    pthread_mutex_lock(&info->cb_lock);\r
-\r
-    for (int i = 0; i < info->num_event_cb; i++) {\r
-        if (info->event_cb[i].nl_cmd == cmd) {\r
-            ALOGI("Successfully removed event handler %p:%p for cmd = 0x%0x from %d",\r
-                    info->event_cb[i].cb_arg, info->event_cb[i].cb_func, cmd, i);\r
-\r
-            memmove(&info->event_cb[i], &info->event_cb[i+1],\r
-                (info->num_event_cb - i - 1) * sizeof(cb_info));\r
-            info->num_event_cb--;\r
-            break;\r
-        }\r
-    }\r
-\r
-    pthread_mutex_unlock(&info->cb_lock);\r
-}\r
-\r
-void wifi_unregister_vendor_handler(wifi_handle handle, uint32_t id, int subcmd)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    pthread_mutex_lock(&info->cb_lock);\r
-\r
-    for (int i = 0; i < info->num_event_cb; i++) {\r
-\r
-        if (info->event_cb[i].nl_cmd == NL80211_CMD_VENDOR\r
-                && info->event_cb[i].vendor_id == id\r
-                && info->event_cb[i].vendor_subcmd == subcmd) {\r
-            ALOGI("Successfully removed event handler %p:%p for vendor 0x%0x, subcmd 0x%0x from %d",\r
-                    info->event_cb[i].cb_arg, info->event_cb[i].cb_func, id, subcmd, i);\r
-            memmove(&info->event_cb[i], &info->event_cb[i+1],\r
-                (info->num_event_cb - i - 1) * sizeof(cb_info));\r
-            info->num_event_cb--;\r
-            break;\r
-        }\r
-    }\r
-\r
-    pthread_mutex_unlock(&info->cb_lock);\r
-}\r
-\r
-\r
-wifi_error wifi_register_cmd(wifi_handle handle, int id, WifiCommand *cmd)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    ALOGD("registering command %d", id);\r
-\r
-    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;\r
-\r
-    if (info->num_cmd < info->alloc_cmd) {\r
-        info->cmd[info->num_cmd].id   = id;\r
-        info->cmd[info->num_cmd].cmd  = cmd;\r
-        ALOGI("Successfully added command %d: %p at %d", id, cmd, info->num_cmd);\r
-        info->num_cmd++;\r
-        result = WIFI_SUCCESS;\r
-    }\r
-\r
-    return result;\r
-}\r
-\r
-WifiCommand *wifi_unregister_cmd(wifi_handle handle, int id)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    ALOGD("un-registering command %d", id);\r
-\r
-    WifiCommand *cmd = NULL;\r
-\r
-    for (int i = 0; i < info->num_cmd; i++) {\r
-        if (info->cmd[i].id == id) {\r
-            cmd = info->cmd[i].cmd;\r
-            memmove(&info->cmd[i], &info->cmd[i+1], (info->num_cmd - i) * sizeof(cmd_info));\r
-            info->num_cmd--;\r
-            ALOGI("Successfully removed command %d: %p from %d", id, cmd, i);\r
-            break;\r
-        }\r
-    }\r
-\r
-    return cmd;\r
-}\r
-\r
-WifiCommand *wifi_get_cmd(wifi_handle handle, int id)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    WifiCommand *cmd = NULL;\r
-\r
-    for (int i = 0; i < info->num_cmd; i++) {\r
-        if (info->cmd[i].id == id) {\r
-            cmd = info->cmd[i].cmd;\r
-            break;\r
-        }\r
-    }\r
-\r
-    return cmd;\r
-}\r
-\r
-void wifi_unregister_cmd(wifi_handle handle, WifiCommand *cmd)\r
-{\r
-    hal_info *info = (hal_info *)handle;\r
-\r
-    for (int i = 0; i < info->num_cmd; i++) {\r
-        if (info->cmd[i].cmd == cmd) {\r
-            int id = info->cmd[i].id;\r
-            memmove(&info->cmd[i], &info->cmd[i+1], (info->num_cmd - i) * sizeof(cmd_info));\r
-            info->num_cmd--;\r
-            ALOGI("Successfully removed command %d: %p from %d", id, cmd, i);\r
-            break;\r
-        }\r
-    }\r
-}\r
+
+#include <stdint.h>
+#include <fcntl.h>
+#include <sys/socket.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/family.h>
+#include <netlink/genl/ctrl.h>
+#include <linux/rtnetlink.h>
+#include <netpacket/packet.h>
+#include <linux/filter.h>
+#include <linux/errqueue.h>
+
+#include <linux/pkt_sched.h>
+#include <netlink/object-api.h>
+#include <netlink/netlink.h>
+#include <netlink/socket.h>
+#include <netlink/handlers.h>
+
+#include "wifi_hal.h"
+#include "common.h"
+#include "cpp_bindings.h"
+
+interface_info *getIfaceInfo(wifi_interface_handle handle)
+{
+    return (interface_info *)handle;
+}
+
+wifi_handle getWifiHandle(wifi_interface_handle handle)
+{
+    return getIfaceInfo(handle)->handle;
+}
+
+hal_info *getHalInfo(wifi_handle handle)
+{
+    return (hal_info *)handle;
+}
+
+hal_info *getHalInfo(wifi_interface_handle handle)
+{
+    return getHalInfo(getWifiHandle(handle));
+}
+
+wifi_handle getWifiHandle(hal_info *info)
+{
+    return (wifi_handle)info;
+}
+
+wifi_interface_handle getIfaceHandle(interface_info *info)
+{
+    return (wifi_interface_handle)info;
+}
+
+wifi_error wifi_register_handler(wifi_handle handle, int cmd, nl_recvmsg_msg_cb_t func, void *arg)
+{
+    hal_info *info = (hal_info *)handle;
+
+    /* TODO: check for multiple handlers? */
+    pthread_mutex_lock(&info->cb_lock);
+
+    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;
+
+    if (info->num_event_cb < info->alloc_event_cb) {
+        info->event_cb[info->num_event_cb].nl_cmd  = cmd;
+        info->event_cb[info->num_event_cb].vendor_id  = 0;
+        info->event_cb[info->num_event_cb].vendor_subcmd  = 0;
+        info->event_cb[info->num_event_cb].cb_func = func;
+        info->event_cb[info->num_event_cb].cb_arg  = arg;
+        /*
+        ALOGI("Successfully added event handler %p:%p for command %d at %d",
+                arg, func, cmd, info->num_event_cb);*/
+        info->num_event_cb++;
+        result = WIFI_SUCCESS;
+    }
+
+    pthread_mutex_unlock(&info->cb_lock);
+    return result;
+}
+
+wifi_error wifi_register_vendor_handler(wifi_handle handle,
+        uint32_t id, int subcmd, nl_recvmsg_msg_cb_t func, void *arg)
+{
+    hal_info *info = (hal_info *)handle;
+
+//ALOGD("GSCAN register handle wifi_register_vendor_handler %p", handle);
+    /* TODO: check for multiple handlers? */
+    pthread_mutex_lock(&info->cb_lock);
+    //ALOGI("Added event handler %p", info);
+
+    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;
+
+    //    ALOGD("register_vendor_handler: handle = %p", handle);
+    if (info->num_event_cb < info->alloc_event_cb) {
+        info->event_cb[info->num_event_cb].nl_cmd  = NL80211_CMD_VENDOR;
+        info->event_cb[info->num_event_cb].vendor_id  = id;
+        info->event_cb[info->num_event_cb].vendor_subcmd  = subcmd;
+        info->event_cb[info->num_event_cb].cb_func = func;
+        info->event_cb[info->num_event_cb].cb_arg  = arg;
+        /*
+        ALOGI("Added event handler %p:%p for vendor 0x%0x and subcmd 0x%0x at %d",
+                arg, func, id, subcmd, info->num_event_cb);*/
+        info->num_event_cb++;
+        result = WIFI_SUCCESS;
+    }
+
+    pthread_mutex_unlock(&info->cb_lock);
+    return result;
+}
+
+void wifi_unregister_handler(wifi_handle handle, int cmd)
+{
+    hal_info *info = (hal_info *)handle;
+
+    if (cmd == NL80211_CMD_VENDOR) {
+        ALOGE("Must use wifi_unregister_vendor_handler to remove vendor handlers");
+        return;
+    }
+
+    pthread_mutex_lock(&info->cb_lock);
+
+    for (int i = 0; i < info->num_event_cb; i++) {
+        if (info->event_cb[i].nl_cmd == cmd) {
+            /*
+            ALOGI("Successfully removed event handler %p:%p for cmd = 0x%0x from %d",
+                    info->event_cb[i].cb_arg, info->event_cb[i].cb_func, cmd, i);*/
+
+            memmove(&info->event_cb[i], &info->event_cb[i+1],
+                (info->num_event_cb - i - 1) * sizeof(cb_info));
+            info->num_event_cb--;
+            break;
+        }
+    }
+
+    pthread_mutex_unlock(&info->cb_lock);
+}
+
+void wifi_unregister_vendor_handler(wifi_handle handle, uint32_t id, int subcmd)
+{
+    hal_info *info = (hal_info *)handle;
+
+    pthread_mutex_lock(&info->cb_lock);
+
+    for (int i = 0; i < info->num_event_cb; i++) {
+
+        if (info->event_cb[i].nl_cmd == NL80211_CMD_VENDOR
+                && info->event_cb[i].vendor_id == id
+                && info->event_cb[i].vendor_subcmd == subcmd) {
+            /*
+            ALOGI("Successfully removed event handler %p:%p for vendor 0x%0x, subcmd 0x%0x from %d",
+                    info->event_cb[i].cb_arg, info->event_cb[i].cb_func, id, subcmd, i);*/
+            memmove(&info->event_cb[i], &info->event_cb[i+1],
+                (info->num_event_cb - i - 1) * sizeof(cb_info));
+            info->num_event_cb--;
+            break;
+        }
+    }
+
+    pthread_mutex_unlock(&info->cb_lock);
+}
+
+
+wifi_error wifi_register_cmd(wifi_handle handle, int id, WifiCommand *cmd)
+{
+    hal_info *info = (hal_info *)handle;
+
+    //ALOGD("registering command %d", id);
+
+    wifi_error result = WIFI_ERROR_OUT_OF_MEMORY;
+
+    if (info->num_cmd < info->alloc_cmd) {
+        info->cmd[info->num_cmd].id   = id;
+        info->cmd[info->num_cmd].cmd  = cmd;
+        //ALOGI("Successfully added command %d: %p at %d", id, cmd, info->num_cmd);
+        info->num_cmd++;
+        result = WIFI_SUCCESS;
+    }
+
+    return result;
+}
+
+WifiCommand *wifi_unregister_cmd(wifi_handle handle, int id)
+{
+    hal_info *info = (hal_info *)handle;
+
+    //ALOGD("un-registering command %d", id);
+
+    WifiCommand *cmd = NULL;
+
+    for (int i = 0; i < info->num_cmd; i++) {
+        if (info->cmd[i].id == id) {
+            cmd = info->cmd[i].cmd;
+            memmove(&info->cmd[i], &info->cmd[i+1], (info->num_cmd - i) * sizeof(cmd_info));
+            info->num_cmd--;
+            //ALOGI("Successfully removed command %d: %p from %d", id, cmd, i);
+            break;
+        }
+    }
+
+    return cmd;
+}
+
+WifiCommand *wifi_get_cmd(wifi_handle handle, int id)
+{
+    hal_info *info = (hal_info *)handle;
+
+    WifiCommand *cmd = NULL;
+
+    for (int i = 0; i < info->num_cmd; i++) {
+        if (info->cmd[i].id == id) {
+            cmd = info->cmd[i].cmd;
+            break;
+        }
+    }
+
+    return cmd;
+}
+
+void wifi_unregister_cmd(wifi_handle handle, WifiCommand *cmd)
+{
+    hal_info *info = (hal_info *)handle;
+
+    for (int i = 0; i < info->num_cmd; i++) {
+        if (info->cmd[i].cmd == cmd) {
+            memmove(&info->cmd[i], &info->cmd[i+1], (info->num_cmd - i) * sizeof(cmd_info));
+            info->num_cmd--;
+            //ALOGI("Successfully removed command %d: %p from %d", id, cmd, i);
+            break;
+        }
+    }
+}
+
+wifi_error wifi_cancel_cmd(wifi_request_id id, wifi_interface_handle iface)
+{
+       wifi_handle handle = getWifiHandle(iface);
+
+       WifiCommand *cmd = wifi_unregister_cmd(handle, id);
+       //ALOGD("Cancel WifiCommand = %p", cmd);
+       if (cmd) {
+               cmd->cancel();
+               cmd->releaseRef();
+               return WIFI_SUCCESS;
+       }
+
+    return WIFI_ERROR_INVALID_ARGS;
+}