net: wireless: bcmdhd: Update to version 5.90.195.104
authorDmitry Shmidt <dimitrysh@google.com>
Mon, 27 Aug 2012 20:55:15 +0000 (13:55 -0700)
committerDmitry Shmidt <dimitrysh@google.com>
Mon, 27 Aug 2012 22:30:27 +0000 (15:30 -0700)
- Fix p2p support for new wpa_supplicant
- Propagate disconnect error code for cfg80211

Change-Id: I9643fbad7b6170b0e794fd7854201931d5eefb22
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
drivers/net/wireless/bcmdhd/bcmsdh_linux.c
drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c
drivers/net/wireless/bcmdhd/dhd_linux.c
drivers/net/wireless/bcmdhd/dhd_sdio.c
drivers/net/wireless/bcmdhd/include/epivers.h
drivers/net/wireless/bcmdhd/include/wlioctl.h
drivers/net/wireless/bcmdhd/wl_android.c
drivers/net/wireless/bcmdhd/wl_cfg80211.c
drivers/net/wireless/bcmdhd/wl_cfg80211.h

index edecb5f2f4c8cb42755879b3442b6ae72e56b995..91232bdb2755083a0089aeb60aa045e13cc8a5ac 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: bcmsdh_linux.c 343302 2012-07-06 13:07:38Z $
+ * $Id: bcmsdh_linux.c 352863 2012-08-24 04:48:50Z $
  */
 
 /**
@@ -404,6 +404,10 @@ bcmsdh_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* match this pci device with what we support */
        /* we can't solely rely on this to believe it is our SDIO Host Controller! */
        if (!bcmsdh_chipmatch(pdev->vendor, pdev->device)) {
+               if (pdev->vendor == VENDOR_BROADCOM) {
+                       SDLX_MSG(("%s: Unknown Broadcom device (vendor: %#x, device: %#x).\n",
+                               __FUNCTION__, pdev->vendor, pdev->device));
+               }
                return -ENODEV;
        }
 
index 67c2fbf5ea18cd008216743509d3792d0c6148da..db051a41f7b995a29b93171c88d157bdede266b0 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: bcmsdh_sdmmc.c 344243 2012-07-12 00:06:23Z $
+ * $Id: bcmsdh_sdmmc.c 351910 2012-08-21 22:39:46Z $
  */
 #include <typedefs.h>
 
@@ -1020,7 +1020,13 @@ sdioh_request_packet(sdioh_info_t *sd, uint fix_inc, uint write, uint func,
                                pkt_len -= xfred_len;
                                xfred_len = 0;
                        }
-                       pkt_len = (pkt_len + 3) & 0xFFFFFFFC;
+
+                       /* Align Patch */
+                       if (!write || pkt_len < 32)
+                               pkt_len = (pkt_len + 3) & 0xFFFFFFFC;
+                       else if (pkt_len % DHD_SDALIGN)
+                               pkt_len += DHD_SDALIGN - (pkt_len % DHD_SDALIGN);
+
 #ifdef CONFIG_MMC_MSM7X00A
                        if ((pkt_len % 64) == 32) {
                                sd_trace(("%s: Rounding up TX packet +=32\n", __FUNCTION__));
index 4faef154f57c2d86b179ea7100990610e896449e..cf6d2269f40535538cd879ab6b06ddd2819695d0 100644 (file)
@@ -22,7 +22,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_linux.c 344350 2012-07-12 08:35:03Z $
+ * $Id: dhd_linux.c 352789 2012-08-24 00:01:33Z $
  */
 
 #include <typedefs.h>
@@ -327,8 +327,8 @@ uint dhd_console_ms = 0;
 module_param(dhd_console_ms, uint, 0644);
 #endif /* defined(DHD_DEBUG) */
 
-/* ARP offload agent mode : Enable ARP Host Auto-Reply and ARP Peer Auto-Reply */
-uint dhd_arp_mode = 0xb;
+/* ARP offload agent mode : enable ARP Peer Auto-Reply */
+uint dhd_arp_mode = ARP_OL_AGENT | ARP_OL_PEER_AUTO_REPLY;
 module_param(dhd_arp_mode, uint, 0);
 
 /* ARP offload enable */
@@ -1361,10 +1361,11 @@ dhd_start_xmit(struct sk_buff *skb, struct net_device *net)
 
 
 done:
-       if (ret)
+       if (ret) {
                dhd->pub.dstats.tx_dropped++;
-       else
+       } else {
                dhd->pub.tx_packets++;
+       }
 
        DHD_OS_WAKE_UNLOCK(&dhd->pub);
 
@@ -4330,6 +4331,13 @@ dhd_dev_reset(struct net_device *dev, uint8 flag)
 
        dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(dev);
 
+       if (flag == TRUE) {
+               /* Issue wl down command before resetting the chip */
+               if (dhd_wl_ioctl_cmd(&dhd->pub, WLC_DOWN, NULL, 0, TRUE, 0) < 0) {
+                       DHD_TRACE(("%s: wl down failed\n", __FUNCTION__));
+               }
+       }
+
        ret = dhd_bus_devreset(&dhd->pub, flag);
        if (ret) {
                DHD_ERROR(("%s: dhd_bus_devreset: %d\n", __FUNCTION__, ret));
@@ -4510,7 +4518,7 @@ static void dhd_hang_process(struct work_struct *work)
                wl_iw_send_priv_event(dev, "HANG");
 #endif
 #if defined(WL_CFG80211)
-               wl_cfg80211_hang(dev, WLAN_REASON_UNSPECIFIED);
+               wl_cfg80211_hang(dev, WLAN_REASON_DRIVER_ERROR);
 #endif
        }
 }
index ed3da83604b5c739728aa2e8a9cc5a75dcc080e7..6049e16abb5d48270530236077453e0500172bf8 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_sdio.c 338148 2012-06-11 20:35:45Z $
+ * $Id: dhd_sdio.c 352730 2012-08-23 20:55:11Z $
  */
 
 #include <typedefs.h>
@@ -1487,7 +1487,7 @@ dhd_bus_rxctl(struct dhd_bus *bus, uchar *msg, uint msglen)
                dhd_os_sdunlock(bus->dhd);
 #endif /* DHD_DEBUG */
        } else if (pending == TRUE) {
-               /* signal pending */
+               /* possibly fw hangs so never responsed back */
                DHD_ERROR(("%s: signal pending\n", __FUNCTION__));
                return -EINTR;
        } else {
@@ -5192,7 +5192,7 @@ done:
 }
 #endif /* DHD_DEBUG */
 
-#ifdef DHD_DEBUG
+#if (defined DHD_DEBUG)
 static void
 dhd_dump_cis(uint fn, uint8 *cis)
 {
@@ -5468,12 +5468,11 @@ dhdsdio_probe_attach(struct dhd_bus *bus, osl_t *osh, void *sdh, void *regsva,
                clkctl = bcmsdh_cfg_read(sdh, SDIO_FUNC_1, SBSDIO_FUNC1_CHIPCLKCSR, &err);
 
        if (err || ((clkctl & ~SBSDIO_AVBITS) != DHD_INIT_CLKCTL1)) {
-               DHD_ERROR(("dhdsdio_probe: ChipClkCSR access: err %d wrote 0x%02x read 0x%02x\n",
-                          err, DHD_INIT_CLKCTL1, clkctl));
+               DHD_ERROR(("%s: ChipClkCSR access: err %d wrote 0x%02x read 0x%02x\n",
+                          __FUNCTION__, err, DHD_INIT_CLKCTL1, clkctl));
                goto fail;
        }
 
-
 #ifdef DHD_DEBUG
        if (DHD_INFO_ON()) {
                uint fn, numfn;
index 19da8f28bc7e8827b9635746317123c8b7d26874..37c07e6ec371e8b8378ccd404161760cd6a64eed 100644 (file)
 
 #define        EPI_RC_NUMBER           195
 
-#define        EPI_INCREMENTAL_NUMBER  98
+#define        EPI_INCREMENTAL_NUMBER  104
 
 #define        EPI_BUILD_NUMBER        0
 
-#define        EPI_VERSION             5, 90, 195, 98
+#define        EPI_VERSION             5, 90, 195, 104
 
-#define        EPI_VERSION_NUM         0x055ac362
+#define        EPI_VERSION_NUM         0x055ac368
 
 #define EPI_VERSION_DEV                5.90.195
 
 
-#define        EPI_VERSION_STR         "5.90.195.98"
+#define        EPI_VERSION_STR         "5.90.195.104"
 
 #endif 
index e543bfa6d17591571ebcecee67292afa70b4385a..2038e202a46b169fe42b7ca3951f48e261621301 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: wlioctl.h 331292 2012-05-04 09:04:23Z $
+ * $Id: wlioctl.h 353331 2012-08-27 06:04:47Z $
  */
 
 
@@ -83,44 +83,6 @@ typedef struct wl_af_params {
 #include <packed_section_start.h>
 
 
-
-
-
-#define LEGACY2_WL_BSS_INFO_VERSION 108     
-
-
-typedef struct wl_bss_info_108 {
-       uint32      version;        
-       uint32      length;         
-       struct ether_addr BSSID;
-       uint16      beacon_period;      
-       uint16      capability;     
-       uint8       SSID_len;
-       uint8       SSID[32];
-       struct {
-               uint    count;          
-               uint8   rates[16];      
-       } rateset;              
-       chanspec_t  chanspec;       
-       uint16      atim_window;        
-       uint8       dtim_period;        
-       int16       RSSI;           
-       int8        phy_noise;      
-
-       uint8       n_cap;          
-       uint32      nbss_cap;       
-       uint8       ctl_ch;         
-       uint32      reserved32[1];      
-       uint8       flags;          
-       uint8       reserved[3];        
-       uint8       basic_mcs[MCSSET_LEN];  
-
-       uint16      ie_offset;      
-       uint32      ie_length;      
-       
-       
-} wl_bss_info_108_t;
-
 #define WL_BSS_INFO_VERSION 109     
 
 
@@ -157,30 +119,19 @@ typedef struct wl_bss_info {
        
 } wl_bss_info_t;
 
-typedef struct wl_bsscfg {
-       uint32  wsec;
-       uint32  WPA_auth;
-       uint32  wsec_index;
-       uint32  associated;
-       uint32  BSS;
-       uint32  phytest_on;
-       struct ether_addr   prev_BSSID;
-       struct ether_addr   BSSID;
-} wl_bsscfg_t;
 
-typedef struct wl_bss_config {
-       uint32  atim_window;
-       uint32  beacon_period;
-       uint32  chanspec;
-} wl_bss_config_t;
+#define WL_BSS_FLAGS_FROM_BEACON       0x01
+#define WL_BSS_FLAGS_FROM_CACHE                0x02
+#define WL_BSS_FLAGS_RSSI_ONCHANNEL    0x04
+
 
+#define VHT_BI_SGI_80MHZ                       0x00000100
 
 typedef struct wlc_ssid {
        uint32      SSID_len;
        uchar       SSID[32];
 } wlc_ssid_t;
 
-#define WL_BSS_FLAGS_FROM_BEACON    0x01
 
 #define WL_BSSTYPE_INFRA 1
 #define WL_BSSTYPE_INDEP 0
index 4fcdcd32a3ff8117ff68daab5a2a30f2b409e4c7..ce74f0f94619da5074490ef67a35f16c99beccfa 100644 (file)
@@ -736,7 +736,7 @@ int wifi_set_power(int on, unsigned long msec)
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
 int wifi_get_mac_addr(unsigned char *buf)
 {
-       DHD_ERROR(("%s\n", __FUNCTION__));
+       DHD_TRACE(("%s\n", __FUNCTION__));
        if (!buf)
                return -EINVAL;
        if (wifi_control_data && wifi_control_data->get_mac_addr) {
index 9af2c1b41f5aa9882d7f83b136632705f47292be..548cc0512d33a742207dc3f21272a6434011e52a 100644 (file)
@@ -188,6 +188,8 @@ static s32 wl_cfg80211_get_key(struct wiphy *wiphy, struct net_device *dev,
 static s32 wl_cfg80211_config_default_mgmt_key(struct wiphy *wiphy,
        struct net_device *dev, u8 key_idx);
 static s32 wl_cfg80211_resume(struct wiphy *wiphy);
+static s32 wl_cfg80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
+       struct net_device *dev, u64 cookie);
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
 static s32 wl_cfg80211_suspend(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
 #else
@@ -952,7 +954,7 @@ wl_cfg80211_del_virtual_iface(struct wiphy *wiphy, struct net_device *dev)
                                struct net_device *ndev = wl_to_prmry_ndev(wl);
                                WL_ERR(("Firmware returned an error (%d) from p2p_ifdel"
                                        "HANG Notification sent to %s\n", ret, ndev->name));
-                               wl_cfg80211_hang(ndev, WLAN_REASON_UNSPECIFIED);
+                               wl_cfg80211_hang(ndev, WLAN_REASON_DRIVER_ERROR);
                        }
 
                        /* Wait for any pending scan req to get aborted from the sysioc context */
@@ -2663,7 +2665,7 @@ wl_cfg80211_config_default_key(struct wiphy *wiphy, struct net_device *dev,
                WL_ERR(("WLC_GET_WSEC error (%d)\n", err));
                return err;
        }
-       if (wsec & WEP_ENABLED) {
+       if (wsec == WEP_ENABLED) {
                /* Just select a new current key */
                index = (u32) key_idx;
                index = htod32(index);
@@ -4582,6 +4584,7 @@ static struct cfg80211_ops wl_cfg80211_ops = {
        .set_channel = wl_cfg80211_set_channel,
        .set_beacon = wl_cfg80211_add_set_beacon,
        .add_beacon = wl_cfg80211_add_set_beacon,
+       .mgmt_tx_cancel_wait = wl_cfg80211_mgmt_tx_cancel_wait,
 #ifdef WL_SCHED_SCAN
        .sched_scan_start = wl_cfg80211_sched_scan_start,
        .sched_scan_stop = wl_cfg80211_sched_scan_stop,
@@ -4652,6 +4655,8 @@ static s32 wl_setup_wiphy(struct wireless_dev *wdev, struct device *sdiofunc_dev
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
        /* wdev->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM; */
 #endif
+       /* AP_SME flag can be advertised to remove patch from wpa_supplicant */
+       wdev->wiphy->flags |= WIPHY_FLAG_HAVE_AP_SME;
        WL_DBG(("Registering custom regulatory)\n"));
        wdev->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY;
        wiphy_apply_custom_regulatory(wdev->wiphy, &brcm_regdom);
@@ -5449,7 +5454,7 @@ wl_bss_connect_done(struct wl_priv *wl, struct net_device *ndev,
                        conn_info->req_ie_len,
                        conn_info->resp_ie,
                        conn_info->resp_ie_len,
-                       completed ? WLAN_STATUS_SUCCESS : WLAN_STATUS_AUTH_TIMEOUT,
+                       completed ? WLAN_STATUS_SUCCESS : e->reason,
                        GFP_KERNEL);
                if (completed)
                        WL_INFO(("Report connect result - connection succeeded\n"));
@@ -7825,3 +7830,10 @@ void wl_cfg80211_enable_trace(int level)
 {
        wl_dbg_level |= WL_DBG_DBG;
 }
+
+static s32
+wl_cfg80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
+       struct net_device *dev, u64 cookie)
+{
+       return 0;
+}
index 974770e0e899db31405a5aa730733c70dc2b402c..888696895f2e01e198483e434bd549b52284c407 100644 (file)
@@ -153,6 +153,8 @@ do {                                                                        \
 #define WL_SCB_TIMEOUT 20
 #endif
 
+#define WLAN_REASON_DRIVER_ERROR       WLAN_REASON_UNSPECIFIED
+
 /* driver status */
 enum wl_status {
        WL_STATUS_READY = 0,