summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-09-28 09:51:34 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2011-09-28 09:51:34 -0700
commit19d2c55e9022469221d9dad7fb8d82dcf84a5893 (patch)
tree779c55b5ddffa51a1783873725c72f3a6d4c3e6a
parent7119f025f7c249abb40f2e409e54f6241dfe42b6 (diff)
parentd7edab78ddecd5492c22006c1b1e23c6c6b2a479 (diff)
downloadhardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.zip
hardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.tar.gz
hardware_broadcom_wlan-19d2c55e9022469221d9dad7fb8d82dcf84a5893.tar.bz2
am d7edab78: bcm4329: bcmdhd: Add signal_poll command support
* commit 'd7edab78ddecd5492c22006c1b1e23c6c6b2a479': bcm4329: bcmdhd: Add signal_poll command support
-rw-r--r--bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c39
-rw-r--r--bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h4
-rw-r--r--bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c32
3 files changed, 67 insertions, 8 deletions
diff --git a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c
index 9a691a3..8aa45d6 100644
--- a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c
+++ b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.c
@@ -115,7 +115,10 @@ int wpa_driver_wext_combo_scan(void *priv, struct wpa_driver_scan_params *params
iwr.u.data.length = bp;
if ((ret = ioctl(drv->ioctl_sock, SIOCSIWPRIV, &iwr)) < 0) {
- wpa_printf(MSG_ERROR, "ioctl[SIOCSIWPRIV] (cscan): %d", ret);
+ if (!drv->bgscan_enabled)
+ wpa_printf(MSG_ERROR, "ioctl[SIOCSIWPRIV] (cscan): %d", ret);
+ else
+ ret = 0; /* Hide error in case of bg scan */
}
return ret;
}
@@ -217,7 +220,7 @@ static int wpa_driver_set_backgroundscan_params(void *priv)
bp = WEXT_PNOSETUP_HEADER_SIZE;
os_memcpy(buf, WEXT_PNOSETUP_HEADER, bp);
- buf[bp++] = 'S';
+ buf[bp++] = WEXT_PNO_TLV_PREFIX;
buf[bp++] = WEXT_PNO_TLV_VERSION;
buf[bp++] = WEXT_PNO_TLV_SUBVERSION;
buf[bp++] = WEXT_PNO_TLV_RESERVED;
@@ -285,7 +288,7 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
}
if (os_strcasecmp(cmd, "RSSI-APPROX") == 0) {
- os_strncpy(cmd, "RSSI", MAX_DRV_CMD_SIZE);
+ os_strncpy(cmd, RSSI_CMD, MAX_DRV_CMD_SIZE);
} else if( os_strncasecmp(cmd, "SCAN-CHANNELS", 13) == 0 ) {
int no_of_chan;
@@ -338,8 +341,8 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
} else {
drv->errors = 0;
ret = 0;
- if ((os_strcasecmp(cmd, "RSSI") == 0) ||
- (os_strcasecmp(cmd, "LINKSPEED") == 0) ||
+ if ((os_strcasecmp(cmd, RSSI_CMD) == 0) ||
+ (os_strcasecmp(cmd, LINKSPEED_CMD) == 0) ||
(os_strcasecmp(cmd, "MACADDR") == 0) ||
(os_strcasecmp(cmd, "GETPOWER") == 0) ||
(os_strcasecmp(cmd, "GETBAND") == 0)) {
@@ -360,3 +363,29 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
}
return ret;
}
+
+int wpa_driver_signal_poll(void *priv, struct wpa_signal_info *si)
+{
+ char buf[MAX_DRV_CMD_SIZE];
+ struct wpa_driver_wext_data *drv = priv;
+ char *prssi;
+ int res;
+
+ os_memset(si, 0, sizeof(*si));
+ res = wpa_driver_wext_driver_cmd(priv, RSSI_CMD, buf, sizeof(buf));
+ /* Answer: SSID rssi -Val */
+ if (res < 0)
+ return res;
+ prssi = strcasestr(buf, RSSI_CMD);
+ if (!prssi)
+ return -1;
+ si->current_signal = atoi(prssi + strlen(RSSI_CMD) + 1);
+
+ res = wpa_driver_wext_driver_cmd(priv, LINKSPEED_CMD, buf, sizeof(buf));
+ /* Answer: LinkSpeed Val */
+ if (res < 0)
+ return res;
+ si->current_txrate = atoi(buf + strlen(LINKSPEED_CMD) + 1) * 1000;
+
+ return 0;
+}
diff --git a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h
index a952d7e..d121b2c 100644
--- a/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h
+++ b/bcm4329/wpa_supplicant_8_lib/driver_cmd_wext.h
@@ -16,6 +16,9 @@
#define WEXT_NUMBER_SCAN_CHANNELS_ETSI 13
#define WEXT_NUMBER_SCAN_CHANNELS_MKK1 14
+#define RSSI_CMD "RSSI"
+#define LINKSPEED_CMD "LINKSPEED"
+
#define WPA_DRIVER_WEXT_WAIT_US 400000
#define MAX_DRV_CMD_SIZE 248
#define WEXT_NUMBER_SEQUENTIAL_ERRORS 4
@@ -39,6 +42,7 @@
#define WEXT_PNOSETUP_HEADER "PNOSETUP "
#define WEXT_PNOSETUP_HEADER_SIZE 9
+#define WEXT_PNO_TLV_PREFIX 'S'
#define WEXT_PNO_TLV_VERSION '1'
#define WEXT_PNO_TLV_SUBVERSION '2'
#define WEXT_PNO_TLV_RESERVED '0'
diff --git a/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c b/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c
index aa2fb4a..70a8157 100644
--- a/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c
+++ b/bcmdhd/wpa_supplicant_8_lib/driver_cmd_wext.c
@@ -289,7 +289,7 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
}
if (os_strcasecmp(cmd, "RSSI-APPROX") == 0) {
- os_strncpy(cmd, "RSSI", MAX_DRV_CMD_SIZE);
+ os_strncpy(cmd, RSSI_CMD, MAX_DRV_CMD_SIZE);
} else if( os_strncasecmp(cmd, "SCAN-CHANNELS", 13) == 0 ) {
int no_of_chan;
@@ -342,8 +342,8 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
} else {
drv->errors = 0;
ret = 0;
- if ((os_strcasecmp(cmd, "RSSI") == 0) ||
- (os_strcasecmp(cmd, "LINKSPEED") == 0) ||
+ if ((os_strcasecmp(cmd, RSSI_CMD) == 0) ||
+ (os_strcasecmp(cmd, LINKSPEED_CMD) == 0) ||
(os_strcasecmp(cmd, "MACADDR") == 0) ||
(os_strcasecmp(cmd, "GETPOWER") == 0) ||
(os_strcasecmp(cmd, "GETBAND") == 0)) {
@@ -364,3 +364,29 @@ int wpa_driver_wext_driver_cmd( void *priv, char *cmd, char *buf, size_t buf_len
}
return ret;
}
+
+int wpa_driver_signal_poll(void *priv, struct wpa_signal_info *si)
+{
+ char buf[MAX_DRV_CMD_SIZE];
+ struct wpa_driver_wext_data *drv = priv;
+ char *prssi;
+ int res;
+
+ os_memset(si, 0, sizeof(*si));
+ res = wpa_driver_wext_driver_cmd(priv, RSSI_CMD, buf, sizeof(buf));
+ /* Answer: SSID rssi -Val */
+ if (res < 0)
+ return res;
+ prssi = strcasestr(buf, RSSI_CMD);
+ if (!prssi)
+ return -1;
+ si->current_signal = atoi(prssi + strlen(RSSI_CMD) + 1);
+
+ res = wpa_driver_wext_driver_cmd(priv, LINKSPEED_CMD, buf, sizeof(buf));
+ /* Answer: LinkSpeed Val */
+ if (res < 0)
+ return res;
+ si->current_txrate = atoi(buf + strlen(LINKSPEED_CMD) + 1) * 1000;
+
+ return 0;
+}