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>
This commit is contained in:
Dmitry Shmidt
2012-08-27 13:55:15 -07:00
parent 26ae87e169
commit 8b056ddc94
9 changed files with 60 additions and 78 deletions

View 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;
}

View 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__));

View 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
}
}

View 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;

View File

@@ -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

View 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

View 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) {

View 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;
}

View 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,