mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
Merge tag 'master-2014-09-16' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
John W. Linville says: ==================== pull request: wireless 2014-09-17 Please pull this batch of fixes intended for the 3.17 stream... Arend van Spriel sends a trio of minor brcmfmac fixes, including a fix for a Kconfig/build issue, a fix for a crash (null reference), and a regression fix related to event handling on a P2P interface. Hante Meuleman follows-up with a brcmfmac fix for a memory leak. Johannes Stezenbach brings an ath9k_htc fix for a regression related to hardware decryption offload. Marcel Holtmann delivers a one-liner to properly mark a device ID table in rfkill-gpio. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
8f665f6cb7
9 changed files with 50 additions and 14 deletions
|
@ -978,7 +978,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
|
|||
struct ath_hw *ah = common->ah;
|
||||
struct ath_htc_rx_status *rxstatus;
|
||||
struct ath_rx_status rx_stats;
|
||||
bool decrypt_error;
|
||||
bool decrypt_error = false;
|
||||
|
||||
if (skb->len < HTC_RX_FRAME_HEADER_SIZE) {
|
||||
ath_err(common, "Corrupted RX frame, dropping (len: %d)\n",
|
||||
|
|
|
@ -27,10 +27,17 @@ config BRCMFMAC
|
|||
one of the bus interface support. If you choose to build a module,
|
||||
it'll be called brcmfmac.ko.
|
||||
|
||||
config BRCMFMAC_PROTO_BCDC
|
||||
bool
|
||||
|
||||
config BRCMFMAC_PROTO_MSGBUF
|
||||
bool
|
||||
|
||||
config BRCMFMAC_SDIO
|
||||
bool "SDIO bus interface support for FullMAC driver"
|
||||
depends on (MMC = y || MMC = BRCMFMAC)
|
||||
depends on BRCMFMAC
|
||||
select BRCMFMAC_PROTO_BCDC
|
||||
select FW_LOADER
|
||||
default y
|
||||
---help---
|
||||
|
@ -42,6 +49,7 @@ config BRCMFMAC_USB
|
|||
bool "USB bus interface support for FullMAC driver"
|
||||
depends on (USB = y || USB = BRCMFMAC)
|
||||
depends on BRCMFMAC
|
||||
select BRCMFMAC_PROTO_BCDC
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This option enables the USB bus interface support for Broadcom
|
||||
|
@ -52,6 +60,8 @@ config BRCMFMAC_PCIE
|
|||
bool "PCIE bus interface support for FullMAC driver"
|
||||
depends on BRCMFMAC
|
||||
depends on PCI
|
||||
depends on HAS_DMA
|
||||
select BRCMFMAC_PROTO_MSGBUF
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This option enables the PCIE bus interface support for Broadcom
|
||||
|
|
|
@ -30,16 +30,18 @@ brcmfmac-objs += \
|
|||
fwsignal.o \
|
||||
p2p.o \
|
||||
proto.o \
|
||||
bcdc.o \
|
||||
commonring.o \
|
||||
flowring.o \
|
||||
msgbuf.o \
|
||||
dhd_common.o \
|
||||
dhd_linux.o \
|
||||
firmware.o \
|
||||
feature.o \
|
||||
btcoex.o \
|
||||
vendor.o
|
||||
brcmfmac-$(CONFIG_BRCMFMAC_PROTO_BCDC) += \
|
||||
bcdc.o
|
||||
brcmfmac-$(CONFIG_BRCMFMAC_PROTO_MSGBUF) += \
|
||||
commonring.o \
|
||||
flowring.o \
|
||||
msgbuf.o
|
||||
brcmfmac-$(CONFIG_BRCMFMAC_SDIO) += \
|
||||
dhd_sdio.o \
|
||||
bcmsdh.o
|
||||
|
|
|
@ -16,9 +16,12 @@
|
|||
#ifndef BRCMFMAC_BCDC_H
|
||||
#define BRCMFMAC_BCDC_H
|
||||
|
||||
|
||||
#ifdef CONFIG_BRCMFMAC_PROTO_BCDC
|
||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||
|
||||
#else
|
||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||
#endif
|
||||
|
||||
#endif /* BRCMFMAC_BCDC_H */
|
||||
|
|
|
@ -185,7 +185,13 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
|
|||
ifevent->action, ifevent->ifidx, ifevent->bssidx,
|
||||
ifevent->flags, ifevent->role);
|
||||
|
||||
if (ifevent->flags & BRCMF_E_IF_FLAG_NOIF) {
|
||||
/* The P2P Device interface event must not be ignored
|
||||
* contrary to what firmware tells us. The only way to
|
||||
* distinguish the P2P Device is by looking at the ifidx
|
||||
* and bssidx received.
|
||||
*/
|
||||
if (!(ifevent->ifidx == 0 && ifevent->bssidx == 1) &&
|
||||
(ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) {
|
||||
brcmf_dbg(EVENT, "event can be ignored\n");
|
||||
return;
|
||||
}
|
||||
|
@ -210,12 +216,12 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
|
|||
return;
|
||||
}
|
||||
|
||||
if (ifevent->action == BRCMF_E_IF_CHANGE)
|
||||
if (ifp && ifevent->action == BRCMF_E_IF_CHANGE)
|
||||
brcmf_fws_reset_interface(ifp);
|
||||
|
||||
err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data);
|
||||
|
||||
if (ifevent->action == BRCMF_E_IF_DEL) {
|
||||
if (ifp && ifevent->action == BRCMF_E_IF_DEL) {
|
||||
brcmf_fws_del_interface(ifp);
|
||||
brcmf_del_if(drvr, ifevent->bssidx);
|
||||
}
|
||||
|
|
|
@ -172,6 +172,8 @@ enum brcmf_fweh_event_code {
|
|||
#define BRCMF_E_IF_ROLE_STA 0
|
||||
#define BRCMF_E_IF_ROLE_AP 1
|
||||
#define BRCMF_E_IF_ROLE_WDS 2
|
||||
#define BRCMF_E_IF_ROLE_P2P_GO 3
|
||||
#define BRCMF_E_IF_ROLE_P2P_CLIENT 4
|
||||
|
||||
/**
|
||||
* definitions for event packet validation.
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#ifndef BRCMFMAC_MSGBUF_H
|
||||
#define BRCMFMAC_MSGBUF_H
|
||||
|
||||
#ifdef CONFIG_BRCMFMAC_PROTO_MSGBUF
|
||||
|
||||
#define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM 20
|
||||
#define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_MAX_ITEM 256
|
||||
|
@ -32,9 +33,15 @@
|
|||
|
||||
|
||||
int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
|
||||
void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
|
||||
int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr);
|
||||
void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr);
|
||||
void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u8 flowid);
|
||||
|
||||
#else
|
||||
static inline int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void brcmf_proto_msgbuf_detach(struct brcmf_pub *drvr) {}
|
||||
#endif
|
||||
|
||||
#endif /* BRCMFMAC_MSGBUF_H */
|
||||
|
|
|
@ -497,8 +497,11 @@ brcmf_configure_arp_offload(struct brcmf_if *ifp, bool enable)
|
|||
static void
|
||||
brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev)
|
||||
{
|
||||
struct net_device *ndev = wdev->netdev;
|
||||
struct brcmf_if *ifp = netdev_priv(ndev);
|
||||
struct brcmf_cfg80211_vif *vif;
|
||||
struct brcmf_if *ifp;
|
||||
|
||||
vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
|
||||
ifp = vif->ifp;
|
||||
|
||||
if ((wdev->iftype == NL80211_IFTYPE_ADHOC) ||
|
||||
(wdev->iftype == NL80211_IFTYPE_AP) ||
|
||||
|
@ -5143,6 +5146,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
|
|||
|
||||
ch.band = BRCMU_CHAN_BAND_2G;
|
||||
ch.bw = BRCMU_CHAN_BW_40;
|
||||
ch.sb = BRCMU_CHAN_SB_NONE;
|
||||
ch.chnum = 0;
|
||||
cfg->d11inf.encchspec(&ch);
|
||||
|
||||
|
@ -5176,6 +5180,7 @@ static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
|
|||
|
||||
brcmf_update_bw40_channel_flag(&band->channels[j], &ch);
|
||||
}
|
||||
kfree(pbuf);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -163,6 +163,7 @@ static const struct acpi_device_id rfkill_acpi_match[] = {
|
|||
{ "LNV4752", RFKILL_TYPE_GPS },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, rfkill_acpi_match);
|
||||
#endif
|
||||
|
||||
static struct platform_driver rfkill_gpio_driver = {
|
||||
|
|
Loading…
Reference in a new issue