diff options
author | Veerendranath Jakkam <quic_vjakkam@quicinc.com> | 2020-06-10 01:43:02 +0530 |
---|---|---|
committer | Kumar Anand <kumaranand@google.com> | 2020-08-11 18:54:02 +0000 |
commit | 8996467be9cb5d5ce95dffb156b07fa62fe496cb (patch) | |
tree | ca4334ff51d202e59687c22c2b5301ec2f52e0e3 | |
parent | 71545a3b82f3065182b7ebc97d86c98016cb8cdc (diff) | |
download | wlan-8996467be9cb5d5ce95dffb156b07fa62fe496cb.tar.gz |
wifihal: Update driver control param to check driver is readyandroid-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r30android11-qpr2-releaseandroid11-qpr1-c-release
Write driver control param and wait for successful update to make sure
driver is ready in LONU model.
Bug: 157090295
Test: Basic function test, SSR test
Change-Id: Ia1a690305266baafabe4c2557723f464ca858db1
-rw-r--r-- | qcwcn/wifi_hal/Android.mk | 14 | ||||
-rw-r--r-- | qcwcn/wifi_hal/wifi_hal.cpp | 43 |
2 files changed, 57 insertions, 0 deletions
diff --git a/qcwcn/wifi_hal/Android.mk b/qcwcn/wifi_hal/Android.mk index 3d872bb..5c77639 100644 --- a/qcwcn/wifi_hal/Android.mk +++ b/qcwcn/wifi_hal/Android.mk @@ -50,6 +50,13 @@ LOCAL_CFLAGS += -Wall -Werror # Allow implicit fallthrough in nan_ind.cpp:834 until it is fixed. LOCAL_CFLAGS += -Wno-implicit-fallthrough +ifdef WIFI_DRIVER_STATE_CTRL_PARAM +LOCAL_CFLAGS += -DWIFI_DRIVER_STATE_CTRL_PARAM=\"$(WIFI_DRIVER_STATE_CTRL_PARAM)\" +ifdef WIFI_DRIVER_STATE_ON +LOCAL_CFLAGS += -DWIFI_DRIVER_STATE_ON=\"$(WIFI_DRIVER_STATE_ON)\" +endif +endif + LOCAL_C_INCLUDES += \ $(LOCAL_PATH) \ external/libnl/include \ @@ -114,6 +121,13 @@ LOCAL_CLANG_CFLAGS := -Wno-pointer-bool-conversion # Allow implicit fallthrough in nan_ind.cpp:834 until it is fixed. LOCAL_CFLAGS += -Wno-implicit-fallthrough +ifdef WIFI_DRIVER_STATE_CTRL_PARAM +LOCAL_CFLAGS += -DWIFI_DRIVER_STATE_CTRL_PARAM=\"$(WIFI_DRIVER_STATE_CTRL_PARAM)\" +ifdef WIFI_DRIVER_STATE_ON +LOCAL_CFLAGS += -DWIFI_DRIVER_STATE_ON=\"$(WIFI_DRIVER_STATE_ON)\" +endif +endif + LOCAL_C_INCLUDES += \ $(LOCAL_PATH) \ external/libnl/include \ diff --git a/qcwcn/wifi_hal/wifi_hal.cpp b/qcwcn/wifi_hal/wifi_hal.cpp index 7b85099..6ab0e64 100644 --- a/qcwcn/wifi_hal/wifi_hal.cpp +++ b/qcwcn/wifi_hal/wifi_hal.cpp @@ -919,6 +919,43 @@ unload: return ret; } +#ifdef WIFI_DRIVER_STATE_CTRL_PARAM +static int wifi_update_driver_state(const char *state) { + struct timespec ts; + int len, fd, ret = 0, count = 5; + ts.tv_sec = 0; + ts.tv_nsec = 200 * 1000000L; + + do { + if (access(WIFI_DRIVER_STATE_CTRL_PARAM, R_OK|W_OK) == 0) + break; + nanosleep(&ts, (struct timespec *)NULL); + } while (--count > 0); /* wait at most 1 second for completion. */ + if (count == 0) { + ALOGE("Failed to access driver state control param %s, %d at %s", + strerror(errno), errno, WIFI_DRIVER_STATE_CTRL_PARAM); + return -1; + } + + fd = TEMP_FAILURE_RETRY(open(WIFI_DRIVER_STATE_CTRL_PARAM, O_WRONLY)); + if (fd < 0) { + ALOGE("Failed to open driver state control param at %s", + WIFI_DRIVER_STATE_CTRL_PARAM); + return -1; + } + + len = strlen(state) + 1; + if (TEMP_FAILURE_RETRY(write(fd, state, len)) != len) { + ALOGE("Failed to write driver state control param at %s", + WIFI_DRIVER_STATE_CTRL_PARAM); + ret = -1; + } + + close(fd); + return ret; +} +#endif + wifi_error wifi_wait_for_driver_ready(void) { // This function will wait to make sure basic client netdev is created @@ -926,6 +963,12 @@ wifi_error wifi_wait_for_driver_ready(void) int count = (POLL_DRIVER_MAX_TIME_MS * 1000) / POLL_DRIVER_DURATION_US; FILE *fd; +#if defined(WIFI_DRIVER_STATE_CTRL_PARAM) && defined(WIFI_DRIVER_STATE_ON) + if (wifi_update_driver_state(WIFI_DRIVER_STATE_ON) < 0) { + return WIFI_ERROR_UNKNOWN; + } +#endif + do { if ((fd = fopen("/sys/class/net/wlan0", "r")) != NULL) { fclose(fd); |