summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/bcmdhd/wl_android.c
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-09-13 15:51:00 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:39:05 -0800
commit09a6b855bd70cca4bcbb1b4602b079b27ea369c8 (patch)
tree7fa8a9ab7cdc6eadaae85f5d6f0300b128b39d46 /drivers/net/wireless/bcmdhd/wl_android.c
parent7ca8f00d682d3a73250b415ddd96fb34624742f2 (diff)
net: wireless: bcmdhd: Update to Version 5.90.125.84
- Fix no scan problem for cfg80211 when Scan Event missed - Improve logic to generate Event via cfg80211 when FW hangs - Fix a crash on Android driver removal - DHD read has chance to crash under long stress : fix (dhd_sdio.c) - Fix power consumption issue as sending disassoc explicitly - Change the logic for listen timer to solve memory leak and guarantee listen timing - Adding wl_cfg80211_get_station for HostAPD Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'drivers/net/wireless/bcmdhd/wl_android.c')
-rw-r--r--drivers/net/wireless/bcmdhd/wl_android.c54
1 files changed, 49 insertions, 5 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_android.c b/drivers/net/wireless/bcmdhd/wl_android.c
index 36110f954b5f..8bc6b361e868 100644
--- a/drivers/net/wireless/bcmdhd/wl_android.c
+++ b/drivers/net/wireless/bcmdhd/wl_android.c
@@ -110,7 +110,8 @@ void dhd_dev_init_ioctl(struct net_device *dev);
int wl_cfg80211_get_p2p_dev_addr(struct net_device *net, struct ether_addr *p2pdev_addr);
int wl_cfg80211_set_btcoex_dhcp(struct net_device *dev, char *command);
#else
-int wl_cfg80211_get_p2p_dev_addr(struct net_device *net, struct ether_addr *p2pdev_addr) { return 0; }
+int wl_cfg80211_get_p2p_dev_addr(struct net_device *net, struct ether_addr *p2pdev_addr)
+{ return 0; }
#endif
extern bool ap_fw_loaded;
@@ -158,6 +159,7 @@ static int wl_android_get_rssi(struct net_device *net, char *command, int total_
error = wldev_get_rssi(net, &rssi);
if (error)
return -1;
+
error = wldev_get_ssid(net, &ssid);
if (error)
return -1;
@@ -187,7 +189,7 @@ static int wl_android_set_suspendopt(struct net_device *dev, char *command, int
if (ret_now != suspend_flag) {
if (!(ret = net_os_set_suspend(dev, ret_now)))
DHD_INFO(("%s: Suspend Flag %d -> %d\n",
- __FUNCTION__, ret_now, suspend_flag));
+ __FUNCTION__, ret_now, suspend_flag));
else
DHD_ERROR(("%s: failed %d\n", __FUNCTION__, ret));
}
@@ -220,6 +222,27 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
int pno_repeat = 0;
int pno_freq_expo_max = 0;
+#ifdef PNO_SET_DEBUG
+ int i;
+ char pno_in_example[] = {
+ 'P', 'N', 'O', 'S', 'E', 'T', 'U', 'P', ' ',
+ 'S', '1', '2', '0',
+ 'S',
+ 0x05,
+ 'd', 'l', 'i', 'n', 'k',
+ 'S',
+ 0x04,
+ 'G', 'O', 'O', 'G',
+ 'T',
+ '0', 'B',
+ 'R',
+ '2',
+ 'M',
+ '2',
+ 0x00
+ };
+#endif /* PNO_SET_DEBUG */
+
DHD_INFO(("%s: command=%s, len=%d\n", __FUNCTION__, command, total_len));
if (total_len < (strlen(CMD_PNOSETUP_SET) + sizeof(cmd_tlv_t))) {
@@ -227,6 +250,14 @@ static int wl_android_set_pno_setup(struct net_device *dev, char *command, int t
goto exit_proc;
}
+#ifdef PNO_SET_DEBUG
+ memcpy(command, pno_in_example, sizeof(pno_in_example));
+ for (i = 0; i < sizeof(pno_in_example); i++)
+ printf("%02X ", command[i]);
+ printf("\n");
+ total_len = sizeof(pno_in_example);
+#endif
+
str_ptr = command + strlen(CMD_PNOSETUP_SET);
tlv_size_left = total_len - strlen(CMD_PNOSETUP_SET);
@@ -448,7 +479,6 @@ int wl_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
/* TBD: BTCOEXSCAN-STOP */
}
else if (strnicmp(command, CMD_BTCOEXMODE, strlen(CMD_BTCOEXMODE)) == 0) {
- /* TBD: BTCOEXMODE */
uint mode = *(command + strlen(CMD_BTCOEXMODE) + 1) - '0';
if (mode == 1)
@@ -527,8 +557,10 @@ int wl_android_init(void)
dhd_download_fw_on_driverload = FALSE;
#endif /* ENABLE_INSMOD_NO_FW_LOAD */
#ifdef CUSTOMER_HW2
- if (!iface_name[0])
+ if (!iface_name[0]) {
+ memset(iface_name, 0, IFNAMSIZ);
bcm_strncpy_s(iface_name, IFNAMSIZ, "wlan", IFNAMSIZ);
+ }
#endif /* CUSTOMER_HW2 */
return ret;
}
@@ -542,12 +574,24 @@ int wl_android_exit(void)
int wl_android_post_init(void)
{
+ struct net_device *ndev;
int ret = 0;
+ char buf[IFNAMSIZ];
if (!dhd_download_fw_on_driverload) {
/* Call customer gpio to turn off power with WL_REG_ON signal */
dhd_customer_gpio_wlan_ctrl(WLAN_RESET_OFF);
g_wifi_on = 0;
-
+ } else {
+ memset(buf, 0, IFNAMSIZ);
+#ifdef CUSTOMER_HW2
+ snprintf(buf, IFNAMSIZ, "%s%d", iface_name, 0);
+#else
+ snprintf(buf, IFNAMSIZ, "%s%d", "eth", 0);
+#endif
+ if ((ndev = dev_get_by_name (&init_net, buf)) != NULL) {
+ dhd_dev_init_ioctl(ndev);
+ dev_put(ndev);
+ }
}
return ret;
}