summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libwifi_hal/Android.mk1
-rw-r--r--libwifi_hal/driver_tool.cpp19
-rw-r--r--libwifi_hal/include/wifi_hal/driver_tool.h4
3 files changed, 22 insertions, 2 deletions
diff --git a/libwifi_hal/Android.mk b/libwifi_hal/Android.mk
index f93015902..1ed59882f 100644
--- a/libwifi_hal/Android.mk
+++ b/libwifi_hal/Android.mk
@@ -106,6 +106,7 @@ LOCAL_EXPORT_C_INCLUDE_DIRS := \
$(LOCAL_PATH)/include \
$(call include-path-for, libhardware_legacy)
LOCAL_SHARED_LIBRARIES := \
+ libbase \
libcutils \
liblog \
libnl \
diff --git a/libwifi_hal/driver_tool.cpp b/libwifi_hal/driver_tool.cpp
index 6b0b7522b..c05c00080 100644
--- a/libwifi_hal/driver_tool.cpp
+++ b/libwifi_hal/driver_tool.cpp
@@ -16,6 +16,9 @@
#include "wifi_hal/driver_tool.h"
+#include <android-base/logging.h>
+#include <private/android_filesystem_config.h>
+
#include "hardware_legacy/wifi.h"
namespace android {
@@ -25,7 +28,21 @@ const int DriverTool::kFirmwareModeSta = WIFI_GET_FW_PATH_STA;
const int DriverTool::kFirmwareModeAp = WIFI_GET_FW_PATH_AP;
const int DriverTool::kFirmwareModeP2p = WIFI_GET_FW_PATH_P2P;
-const char DriverTool::kFirmwareReloadPath[] = WIFI_DRIVER_FW_PATH_PARAM;
+bool DriverTool::TakeOwnershipOfFirmwareReload() {
+ if (!wifi_get_fw_path(kFirmwareModeSta) &&
+ !wifi_get_fw_path(kFirmwareModeAp) &&
+ !wifi_get_fw_path(kFirmwareModeP2p)) {
+ return true; // HAL doesn't think we need to load firmware for any mode.
+ }
+
+ if (chown(WIFI_DRIVER_FW_PATH_PARAM, AID_WIFI, AID_WIFI) != 0) {
+ PLOG(ERROR) << "Error changing ownership of '" << WIFI_DRIVER_FW_PATH_PARAM
+ << "' to wifi:wifi";
+ return false;
+ }
+
+ return true;
+}
bool DriverTool::LoadDriver() {
return ::wifi_load_driver() == 0;
diff --git a/libwifi_hal/include/wifi_hal/driver_tool.h b/libwifi_hal/include/wifi_hal/driver_tool.h
index 376d17d93..e0941c0f9 100644
--- a/libwifi_hal/include/wifi_hal/driver_tool.h
+++ b/libwifi_hal/include/wifi_hal/driver_tool.h
@@ -27,7 +27,9 @@ class DriverTool {
static const int kFirmwareModeAp;
static const int kFirmwareModeP2p;
- static const char kFirmwareReloadPath[];
+ // Change the owner of the firmware reload path to wifi:wifi if
+ // firmware reload is supported.
+ static bool TakeOwnershipOfFirmwareReload();
DriverTool() = default;
virtual ~DriverTool() = default;