net: wireless: bcmdhd: Update to version 5.90.195.114
authorDmitry Shmidt <dimitrysh@google.com>
Tue, 29 Jan 2013 21:57:51 +0000 (13:57 -0800)
committerDmitry Shmidt <dimitrysh@google.com>
Tue, 29 Jan 2013 21:57:51 +0000 (13:57 -0800)
- Get AP beacon and DTIM to set proper DTIM skipping

Change-Id: I6bc23f050c144bf8361078ad587bcadbfe3a37fc
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
drivers/net/wireless/bcmdhd/dhd.h
drivers/net/wireless/bcmdhd/dhd_common.c
drivers/net/wireless/bcmdhd/include/epivers.h

index 5160ee12796aa6cca9f8a0ba6ce6921f1d7f0e74..c5a74cde1fe523ed5ff4c320cfc8e721a9470df1 100644 (file)
@@ -24,7 +24,7 @@
  * software in any way with any other Broadcom software provided under a license
  * other than the GPL, without Broadcom's express prior written consent.
  *
- * $Id: dhd.h 344123 2012-07-11 09:33:49Z $
+ * $Id: dhd.h 357954 2012-09-20 18:22:31Z $
  */
 
 /****************
@@ -611,9 +611,14 @@ extern uint dhd_pktgen_len;
 #define MAX_PKTGEN_LEN 1800
 #endif
 
+/* hooks for custom glom setting option via Makefile */
+#define DEFAULT_GLOM_VALUE     -1
+#ifndef CUSTOM_GLOM_SETTING
+#define CUSTOM_GLOM_SETTING    DEFAULT_GLOM_VALUE
+#endif
 
 /* hooks for custom Roaming Trigger  setting via Makefile */
-#define DEFAULT_ROAM_TRIGGER_VALUE -75 /* dBm default roam trigger all band */
+#define DEFAULT_ROAM_TRIGGER_VALUE -65 /* dBm default roam trigger all band */
 #define DEFAULT_ROAM_TRIGGER_SETTING   -1
 #ifndef CUSTOM_ROAM_TRIGGER_SETTING
 #define CUSTOM_ROAM_TRIGGER_SETTING    DEFAULT_ROAM_TRIGGER_VALUE
index d5af27f40b76a237400651a981320f0bc29ab01a..d46864c3a2a8ecf64a2f1fb544a1e570c743f43f 100644 (file)
@@ -21,7 +21,7 @@
  * software in any way with any other Broadcom software provided under a license
  * other than the GPL, without Broadcom's express prior written consent.
  *
- * $Id: dhd_common.c 331276 2012-05-04 08:05:57Z $
+ * $Id: dhd_common.c 380760 2013-01-23 21:59:27Z $
  */
 #include <typedefs.h>
 #include <osl.h>
@@ -1767,14 +1767,11 @@ bool dhd_is_associated(dhd_pub_t *dhd, void *bss_buf, int *retval)
 int
 dhd_get_dtim_skip(dhd_pub_t *dhd)
 {
-       int bcn_li_dtim;
+       int bcn_li_dtim = 1;
+       char buf[128];
        int ret = -1;
        int dtim_assoc = 0;
-
-       if ((dhd->dtim_skip == 0) || (dhd->dtim_skip == 1))
-               bcn_li_dtim = 3;
-       else
-               bcn_li_dtim = dhd->dtim_skip;
+       int ap_beacon = 0;
 
        /* Check if associated */
        if (dhd_is_associated(dhd, NULL, NULL) == FALSE) {
@@ -1782,15 +1779,34 @@ dhd_get_dtim_skip(dhd_pub_t *dhd)
                goto exit;
        }
 
-       /* if assoc grab ap's dtim value */
-       if ((ret = dhd_wl_ioctl_cmd(dhd, WLC_GET_DTIMPRD,
-               &dtim_assoc, sizeof(dtim_assoc), FALSE, 0)) < 0) {
+       /* read AP beacon if do nother if APs Beacon more  that 100msec */
+       bcm_mkiovar("bi_assoc", 0, 0, buf, sizeof(buf));
+       if ((ret = dhd_wl_ioctl_cmd(dhd, WLC_GET_VAR, buf, sizeof(buf), FALSE, 0)) < 0) {
+               DHD_ERROR(("%s failed code %d\n", __FUNCTION__, ret));
+               goto exit;
+       }
+
+       ap_beacon = dtoh32(*(int *)buf);
+
+       /* if APs Beacon more  that 100msec do no dtim skip */
+       if (ap_beacon > 100) {
+               DHD_ERROR(("%s no dtim skip for AP with %d beacon\n", __FUNCTION__, ap_beacon));
+               goto exit;
+       }
+
+
+       /* Read DTIM value if associated */
+       memset(buf, 0, sizeof(buf));
+       bcm_mkiovar("dtim_assoc", 0, 0, buf, sizeof(buf));
+       if ((ret = dhd_wl_ioctl_cmd(dhd, WLC_GET_VAR, buf, sizeof(buf), FALSE, 0)) < 0) {
                DHD_ERROR(("%s failed code %d\n", __FUNCTION__, ret));
                goto exit;
        }
 
-       DHD_ERROR(("%s bcn_li_dtim=%d DTIM=%d Listen=%d\n",
-               __FUNCTION__, bcn_li_dtim, dtim_assoc, LISTEN_INTERVAL));
+       dtim_assoc = dtoh32(*(int *)buf);
+
+       DHD_ERROR(("%s beacom=%d msec bcn_li_dtim=%d DTIM=%d Listen=%d\n",
+               __FUNCTION__, ap_beacon, bcn_li_dtim, dtim_assoc, LISTEN_INTERVAL));
 
        /* if not assocated just eixt */
        if (dtim_assoc == 0) {
@@ -1800,12 +1816,16 @@ dhd_get_dtim_skip(dhd_pub_t *dhd)
        /* check if sta listen interval fits into AP dtim */
        if (dtim_assoc > LISTEN_INTERVAL) {
                /* AP DTIM to big for our Listen Interval : no dtim skiping */
-               bcn_li_dtim = 1;
                DHD_ERROR(("%s DTIM=%d > Listen=%d : too big ...\n",
                        __FUNCTION__, dtim_assoc, LISTEN_INTERVAL));
                goto exit;
        }
 
+       if ((dhd->dtim_skip == 0) || (dhd->dtim_skip == 1))
+               bcn_li_dtim = 3;
+       else
+               bcn_li_dtim = dhd->dtim_skip;
+
        if ((bcn_li_dtim * dtim_assoc) > LISTEN_INTERVAL) {
                /* Round up dtim_skip to fit into STAs Listen Interval */
                bcn_li_dtim = (int)(LISTEN_INTERVAL / dtim_assoc);
index 37c07e6ec371e8b8378ccd404161760cd6a64eed..fac87f500d157fb0e6ba3865e3a6da8f68e57606 100644 (file)
 
 #define        EPI_RC_NUMBER           195
 
-#define        EPI_INCREMENTAL_NUMBER  104
+#define        EPI_INCREMENTAL_NUMBER  114
 
 #define        EPI_BUILD_NUMBER        0
 
-#define        EPI_VERSION             5, 90, 195, 104
+#define        EPI_VERSION             5, 90, 195, 114
 
-#define        EPI_VERSION_NUM         0x055ac368
+#define        EPI_VERSION_NUM         0x055ac372
 
 #define EPI_VERSION_DEV                5.90.195
 
 
-#define        EPI_VERSION_STR         "5.90.195.104"
+#define        EPI_VERSION_STR         "5.90.195.114"
 
 #endif