diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp b/android/frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp index 3089ee0a4c..9ab9cbfd54 100644 --- a/android/frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp +++ b/android/frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp @@ -44,8 +44,8 @@ bool DriverTool::TakeOwnershipOfFirmwareReload() { return true; } -bool DriverTool::LoadDriver() { - return ::wifi_load_driver() == 0; +bool DriverTool::LoadDriver(int mode) { + return ::wifi_load_driver(mode) == 0; } bool DriverTool::UnloadDriver() { diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/include/hardware_legacy/wifi.h b/android/frameworks/opt/net/wifi/libwifi_hal/include/hardware_legacy/wifi.h index 3d67850c79..007cdc2de8 100644 --- a/android/frameworks/opt/net/wifi/libwifi_hal/include/hardware_legacy/wifi.h +++ b/android/frameworks/opt/net/wifi/libwifi_hal/include/hardware_legacy/wifi.h @@ -27,7 +27,7 @@ extern "C" * * @return 0 on success, < 0 on failure. */ -int wifi_load_driver(); +int wifi_load_driver(int mode); /** * Unload the Wi-Fi driver. diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/include/wifi_hal/driver_tool.h b/android/frameworks/opt/net/wifi/libwifi_hal/include/wifi_hal/driver_tool.h index a27641bd9e..ea1d077221 100644 --- a/android/frameworks/opt/net/wifi/libwifi_hal/include/wifi_hal/driver_tool.h +++ b/android/frameworks/opt/net/wifi/libwifi_hal/include/wifi_hal/driver_tool.h @@ -36,7 +36,7 @@ class DriverTool { // These methods allow manipulation of the WiFi driver. // They all return true on success, and false otherwise. - virtual bool LoadDriver(); + virtual bool LoadDriver(int mode); virtual bool UnloadDriver(); virtual bool IsDriverLoaded(); diff --git a/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp b/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp index 96a4c7f3ae..953517db73 100755 --- a/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp +++ b/android/frameworks/opt/net/wifi/libwifi_hal/wifi_hal_common.cpp @@ -140,7 +140,7 @@ int is_wifi_driver_loaded(const char* wifi_driver_name) { #endif } -int wifi_load_driver() { +int wifi_load_driver(int mode) { #ifdef WIFI_DRIVER_MODULE_PATH char module_path[128] = {0}; char module_arg[128] = {0}; @@ -149,7 +149,7 @@ int wifi_load_driver() { return 0; } LOG(ERROR) << "wifi_load_driver: Start to insmod " << wifi_driver_name << ".ko"; - get_driver_module_arg(module_arg); + get_driver_module_arg(module_arg, mode); LOG(ERROR) << "module_arg= " << module_arg; if (!strstr(WIFI_DRIVER_MODULE_PATH, ".ko")) { snprintf(module_path, sizeof(module_path), "%s%s.ko", WIFI_DRIVER_MODULE_PATH, wifi_driver_name); diff --git a/android/hardware/interfaces/wifi/1.1/default/wifi_mode_controller.cpp b/android/hardware/interfaces/wifi/1.1/default/wifi_mode_controller.cpp index b8a44c2531..c90f32b204 100644 --- a/android/hardware/interfaces/wifi/1.1/default/wifi_mode_controller.cpp +++ b/android/hardware/interfaces/wifi/1.1/default/wifi_mode_controller.cpp @@ -60,7 +60,7 @@ bool WifiModeController::isFirmwareModeChangeNeeded(IfaceType type) { } bool WifiModeController::changeFirmwareMode(IfaceType type) { - if (!driver_tool_->LoadDriver()) { + if (!driver_tool_->LoadDriver(convertIfaceTypeToFirmwareMode(type))) { LOG(ERROR) << "Failed to load WiFi driver"; return false; } diff --git a/android/hardware/libhardware_legacy/include/hardware_legacy/wifi_hardware_info.h b/android/hardware/libhardware_legacy/include/hardware_legacy/wifi_hardware_info.h index 8701136b8d..61da8e6ab0 100755 --- a/android/hardware/libhardware_legacy/include/hardware_legacy/wifi_hardware_info.h +++ b/android/hardware/libhardware_legacy/include/hardware_legacy/wifi_hardware_info.h @@ -27,7 +27,7 @@ const char *get_wifi_driver_name(); const char *get_fw_path_sta(); const char *get_fw_path_ap(); const char *get_fw_path_p2p(); -void get_driver_module_arg(char* arg); +void get_driver_module_arg(char* arg, int mode); const char *get_supplicant_para(int set_p2p_supported); #if __cplusplus diff --git a/android/hardware/libhardware_legacy/wifi_hardware_info/wifi_hardware_info.c b/android/hardware/libhardware_legacy/wifi_hardware_info/wifi_hardware_info.c index 29977caccb..257f0a0b22 100644 --- a/android/hardware/libhardware_legacy/wifi_hardware_info/wifi_hardware_info.c +++ b/android/hardware/libhardware_legacy/wifi_hardware_info/wifi_hardware_info.c @@ -705,18 +705,21 @@ const char *get_fw_path_p2p() return selected_wifi.fw_path_p2p; } -void get_driver_module_arg(char* arg) +void get_driver_module_arg(char* arg, int mode) { char module_arg[256] = {0}; const char *vendor_name = get_wifi_vendor_name(); + ALOGE("get_driver_module_arg mode=%d", mode); + if(strcmp(vendor_name, "realtek") == 0) { const char *driver_module_arg = "ifname=wlan0 if2name=p2p0"; snprintf(module_arg, sizeof(module_arg), "%s", driver_module_arg); } else if(strcmp(vendor_name, "broadcom") == 0) { const char *nvram_path = "nvram_path=/system/vendor/modules/nvram"; const char *config_path = "config_path=/system/vendor/modules/config"; - snprintf(module_arg, sizeof(module_arg), "%s_%s.txt %s_%s.txt", + snprintf(module_arg, sizeof(module_arg), "%s %s_%s.txt %s_%s.txt", + (mode == 1) ? "op_mode=2" : "", nvram_path, get_wifi_module_name(), config_path, get_wifi_module_name()); }else if(strcmp(get_wifi_vendor_name(), "xradio") == 0) { const char *driver_module_arg = "";