aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2012-08-27 13:55:15 -0700
committerDmitry Shmidt <dimitrysh@google.com>2012-08-27 15:30:27 -0700
commit8b056ddc94d30fdb5bc5cd981c050b25cd5eabc7 (patch)
treeeee527e641c5ce82b28bdf67ea8e67e3645b74ff /drivers/net
parent26ae87e169689d445bcaed699e38875bc1134790 (diff)
downloadkernel_samsung_crespo-8b056ddc94d30fdb5bc5cd981c050b25cd5eabc7.zip
kernel_samsung_crespo-8b056ddc94d30fdb5bc5cd981c050b25cd5eabc7.tar.gz
kernel_samsung_crespo-8b056ddc94d30fdb5bc5cd981c050b25cd5eabc7.tar.bz2
net: wireless: bcmdhd: Update to version 5.90.195.104
- Fix p2p support for new wpa_supplicant - Propagate disconnect error code for cfg80211 Change-Id: I9643fbad7b6170b0e794fd7854201931d5eefb22 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/bcmdhd/bcmsdh_linux.c6
-rw-r--r--drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c10
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c20
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_sdio.c11
-rw-r--r--drivers/net/wireless/bcmdhd/include/epivers.h8
-rw-r--r--drivers/net/wireless/bcmdhd/include/wlioctl.h61
-rw-r--r--drivers/net/wireless/bcmdhd/wl_android.c2
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c18
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.h2
9 files changed, 60 insertions, 78 deletions
diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
index edecb5f..91232bd 100644
--- a/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
+++ b/drivers/net/wireless/bcmdhd/bcmsdh_linux.c
@@ -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;
}
diff --git a/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c b/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c
index 67c2fbf..db051a4 100644
--- a/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c
+++ b/drivers/net/wireless/bcmdhd/bcmsdh_sdmmc.c
@@ -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__));
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index 4faef15..cf6d226 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -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
}
}
diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c
index ed3da83..6049e16 100644
--- a/drivers/net/wireless/bcmdhd/dhd_sdio.c
+++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c
@@ -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;
diff --git a/drivers/net/wireless/bcmdhd/include/epivers.h b/drivers/net/wireless/bcmdhd/include/epivers.h
index 19da8f2..37c07e6 100644
--- a/drivers/net/wireless/bcmdhd/include/epivers.h
+++ b/drivers/net/wireless/bcmdhd/include/epivers.h
@@ -33,17 +33,17 @@
#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
diff --git a/drivers/net/wireless/bcmdhd/include/wlioctl.h b/drivers/net/wireless/bcmdhd/include/wlioctl.h
index e543bfa..2038e20 100644
--- a/drivers/net/wireless/bcmdhd/include/wlioctl.h
+++ b/drivers/net/wireless/bcmdhd/include/wlioctl.h
@@ -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
diff --git a/drivers/net/wireless/bcmdhd/wl_android.c b/drivers/net/wireless/bcmdhd/wl_android.c
index 4fcdcd3..ce74f0f 100644
--- a/drivers/net/wireless/bcmdhd/wl_android.c
+++ b/drivers/net/wireless/bcmdhd/wl_android.c
@@ -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) {
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index 9af2c1b..548cc05 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -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;
+}
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.h b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
index 974770e..8886968 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.h
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
@@ -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,