* [PATCH 6/6] brcmfmac: use dev_err to print errors
From: Rafał Miłecki @ 2017-01-24 15:06 UTC (permalink / raw)
To: Kalle Valo
Cc: Arend van Spriel, Franky Lin, Hante Meuleman,
Pieter-Paul Giesberts, Franky Lin, linux-wireless,
brcm80211-dev-list.pdl, Rafał Miłecki
In-Reply-To: <20170124150612.25138-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
This adds a nice prefix to all error messages making it possible to
identify device they are related to. It's really useful for e.g. home
routers commonly having 2 or even 3 wireless devices.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 3 ++-
drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index 9ad9bd652ca2..28b08cba7dbe 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -223,6 +223,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
#ifndef CONFIG_BRCM_TRACING
void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
{
+ struct device *dev = pub && pub->bus_if ? pub->bus_if->dev : NULL;
struct va_format vaf;
va_list args;
@@ -233,7 +234,7 @@ void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
vaf.fmt = fmt;
vaf.va = &args;
- pr_err("%s: %pV", func, &vaf);
+ dev_err(dev, "%s: %pV", func, &vaf);
va_end(args);
}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
index 329cb65eb78b..393c1b31ed28 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
@@ -25,6 +25,7 @@
void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
{
+ struct device *dev = pub && pub->bus_if ? pub->bus_if->dev : NULL;
struct va_format vaf = {
.fmt = fmt,
};
@@ -32,7 +33,7 @@ void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
va_start(args, fmt);
vaf.va = &args;
- pr_err("%s: %pV", func, &vaf);
+ dev_err(dev, "%s: %pV", func, &vaf);
trace_brcmf_err(func, &vaf);
va_end(args);
}
--
2.11.0
^ permalink raw reply related
* [PATCH 3/6] brcmfmac: pcie: store private pointer to struct brcmf_pub
From: Rafał Miłecki @ 2017-01-24 15:06 UTC (permalink / raw)
To: Kalle Valo
Cc: Arend van Spriel, Franky Lin, Hante Meuleman,
Pieter-Paul Giesberts, Franky Lin, linux-wireless,
brcm80211-dev-list.pdl, Rafał Miłecki
In-Reply-To: <20170124150612.25138-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
Getting this pointer in PCIe code is not trivial and requires using
dev_get_drvdata helper which adds extra line of code. Having access to
this struct is useful for using generic stuff and e.g. improving logging
messages.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index 19db8f26729a..a6e7f670d893 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -265,6 +265,7 @@ struct brcmf_pciedev_info {
void (*write_ptr)(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
u16 value);
struct brcmf_mp_device *settings;
+ struct brcmf_pub *pub;
};
struct brcmf_pcie_ringbuf {
@@ -1565,14 +1566,18 @@ static void brcmf_pcie_release_resource(struct brcmf_pciedev_info *devinfo)
static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo)
{
+ struct device *dev = &devinfo->pdev->dev;
+ struct brcmf_bus *bus = dev_get_drvdata(dev);
int ret;
/* Attach to the common driver interface */
- ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings);
+ ret = brcmf_attach(dev, devinfo->settings);
if (ret) {
brcmf_err("brcmf_attach failed\n");
} else {
- ret = brcmf_bus_started(&devinfo->pdev->dev);
+ devinfo->pub = bus->drvr;
+
+ ret = brcmf_bus_started(dev);
if (ret)
brcmf_err("dongle is not responding\n");
}
--
2.11.0
^ permalink raw reply related
* [PATCH 2/6] brcmfmac: add struct brcmf_pub parameter to the __brcmf_err
From: Rafał Miłecki @ 2017-01-24 15:06 UTC (permalink / raw)
To: Kalle Valo
Cc: Arend van Spriel, Franky Lin, Hante Meuleman,
Pieter-Paul Giesberts, Franky Lin, linux-wireless,
brcm80211-dev-list.pdl, Rafał Miłecki
In-Reply-To: <20170124150612.25138-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
This will allow getting struct device reference from the passed
brcmf_pub for the needs of dev_err. More detailed messages are really
important for home routers which frequently have 2 (or even 3) wireless
cards supported by brcmfmac.
Note that all calls are yet to be updated as for now brcmf_err macro
always passes NULL. This will be handled in following patch to make this
change easier to review.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 2 +-
drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 9 +++++----
drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c | 4 +++-
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index 05fb778ddd0f..0978fb4c9066 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -219,7 +219,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
}
#ifndef CONFIG_BRCM_TRACING
-void __brcmf_err(const char *func, const char *fmt, ...)
+void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
{
struct va_format vaf;
va_list args;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
index 5fef79473c87..012401e6be74 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
@@ -19,6 +19,8 @@
#include <linux/net.h> /* net_ratelimit() */
+struct brcmf_pub;
+
/* message levels */
#define BRCMF_TRACE_VAL 0x00000002
#define BRCMF_INFO_VAL 0x00000004
@@ -45,10 +47,10 @@
#undef pr_fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-__printf(2, 3)
-void __brcmf_err(const char *func, const char *fmt, ...);
+__printf(3, 4)
+void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...);
#define brcmf_err(fmt, ...) \
- __brcmf_err(__func__, fmt, ##__VA_ARGS__)
+ __brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__)
#if defined(DEBUG) || defined(CONFIG_BRCM_TRACING)
__printf(3, 4)
@@ -91,7 +93,6 @@ do { \
extern int brcmf_msg_level;
-struct brcmf_pub;
#ifdef DEBUG
void brcmf_debugfs_init(void);
void brcmf_debugfs_exit(void);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
index fe6755944b7b..329cb65eb78b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/tracepoint.c
@@ -18,10 +18,12 @@
#ifndef __CHECKER__
#define CREATE_TRACE_POINTS
+#include "bus.h"
+#include "core.h"
#include "tracepoint.h"
#include "debug.h"
-void __brcmf_err(const char *func, const char *fmt, ...)
+void __brcmf_err(struct brcmf_pub *pub, const char *func, const char *fmt, ...)
{
struct va_format vaf = {
.fmt = fmt,
--
2.11.0
^ permalink raw reply related
* [PATCH 1/6] brcmfmac: switch to C function (__brcmf_err) for printing errors
From: Rafał Miłecki @ 2017-01-24 15:06 UTC (permalink / raw)
To: Kalle Valo
Cc: Arend van Spriel, Franky Lin, Hante Meuleman,
Pieter-Paul Giesberts, Franky Lin, linux-wireless,
brcm80211-dev-list.pdl, Rafał Miłecki
From: Rafał Miłecki <rafal@milecki.pl>
This will allow extending code and using more detailed messages e.g.
with the help of dev_err. Note that *two separated* brcmf_err macros
were replaced thanks to using a simple CONFIG_BRCMDBG symbol check in
the body.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
.../net/wireless/broadcom/brcm80211/brcmfmac/common.c | 19 +++++++++++++++++++
.../net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 16 ----------------
2 files changed, 19 insertions(+), 16 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index f7c8c2e80349..05fb778ddd0f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -218,6 +218,25 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
return err;
}
+#ifndef CONFIG_BRCM_TRACING
+void __brcmf_err(const char *func, const char *fmt, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ if (!net_ratelimit() && !IS_ENABLED(CONFIG_BRCMDBG))
+ return;
+
+ va_start(args, fmt);
+
+ vaf.fmt = fmt;
+ vaf.va = &args;
+ pr_err("%s: %pV", func, &vaf);
+
+ va_end(args);
+}
+#endif
+
#if defined(CONFIG_BRCM_TRACING) || defined(CONFIG_BRCMDBG)
void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...)
{
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
index 6687812770cc..5fef79473c87 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
@@ -45,26 +45,10 @@
#undef pr_fmt
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-/* Macro for error messages. net_ratelimit() is used when driver
- * debugging is not selected. When debugging the driver error
- * messages are as important as other tracing or even more so.
- */
-#ifndef CONFIG_BRCM_TRACING
-#ifdef CONFIG_BRCMDBG
-#define brcmf_err(fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__)
-#else
-#define brcmf_err(fmt, ...) \
- do { \
- if (net_ratelimit()) \
- pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \
- } while (0)
-#endif
-#else
__printf(2, 3)
void __brcmf_err(const char *func, const char *fmt, ...);
#define brcmf_err(fmt, ...) \
__brcmf_err(__func__, fmt, ##__VA_ARGS__)
-#endif
#if defined(DEBUG) || defined(CONFIG_BRCM_TRACING)
__printf(3, 4)
--
2.11.0
^ permalink raw reply related
* [PATCH 2/2] mwifiex: use pci_dma_sync_single* APIs
From: Amitkumar Karwar @ 2017-01-24 13:35 UTC (permalink / raw)
To: linux-wireless
Cc: Cathy Luo, Nishant Sarmukadam, rajatja, briannorris,
dmitry.torokhov, Amitkumar Karwar
In-Reply-To: <1485264945-1248-1-git-send-email-akarwar@marvell.com>
On some platforms, driver is unable read sleep cookie signature even
if firmware has written it through DMA. The problem is fixed by using
pci_dma_sync_single* APIs while reading DMA buffer shared with firmware.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
---
drivers/net/wireless/marvell/mwifiex/pcie.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
index 3f4ca28..a0d9180 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -439,9 +439,14 @@ static void mwifiex_delay_for_sleep_cookie(struct mwifiex_adapter *adapter,
struct pcie_service_card *card = adapter->card;
u8 *buffer;
u32 sleep_cookie, count;
+ struct sk_buff *cmdrsp = card->cmdrsp_buf;
for (count = 0; count < max_delay_loop_cnt; count++) {
- buffer = card->cmdrsp_buf->data;
+ pci_dma_sync_single_for_cpu(card->dev,
+ MWIFIEX_SKB_DMA_ADDR(cmdrsp),
+ sizeof(sleep_cookie),
+ PCI_DMA_FROMDEVICE);
+ buffer = cmdrsp->data;
sleep_cookie = READ_ONCE(*(u32 *)buffer);
if (sleep_cookie == MWIFIEX_DEF_SLEEP_COOKIE) {
@@ -449,6 +454,10 @@ static void mwifiex_delay_for_sleep_cookie(struct mwifiex_adapter *adapter,
"sleep cookie found at count %d\n", count);
break;
}
+ pci_dma_sync_single_for_device(card->dev,
+ MWIFIEX_SKB_DMA_ADDR(cmdrsp),
+ sizeof(sleep_cookie),
+ PCI_DMA_FROMDEVICE);
usleep_range(20, 30);
}
--
1.9.1
^ permalink raw reply related
* [PATCH 1/2] mwifiex: mwifiex_unmap_pci_memory() handling for sleep confirm
From: Amitkumar Karwar @ 2017-01-24 13:35 UTC (permalink / raw)
To: linux-wireless
Cc: Cathy Luo, Nishant Sarmukadam, rajatja, briannorris,
dmitry.torokhov, Amitkumar Karwar
Sleep confirm is a special command for which "adapter->cur_cmd" pointer
is not set. When it's response is received, host writes SLEEP confirm done
to a register. Firmware will perform DMA for writing sleep cookie signature
on same buffer after this.
Let's not immediately call mwifiex_unmap_pci_memory() for this special
command. Unmapping will be done when firmware completes writing sleep
cookie signature.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
---
drivers/net/wireless/marvell/mwifiex/pcie.c | 19 ++++++++++++++++---
drivers/net/wireless/marvell/mwifiex/pcie.h | 1 +
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
index ca51411..3f4ca28 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -441,7 +441,7 @@ static void mwifiex_delay_for_sleep_cookie(struct mwifiex_adapter *adapter,
u32 sleep_cookie, count;
for (count = 0; count < max_delay_loop_cnt; count++) {
- buffer = card->cmdrsp_buf->data - INTF_HEADER_LEN;
+ buffer = card->cmdrsp_buf->data;
sleep_cookie = READ_ONCE(*(u32 *)buffer);
if (sleep_cookie == MWIFIEX_DEF_SLEEP_COOKIE) {
@@ -1690,7 +1690,13 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
mwifiex_dbg(adapter, CMD,
"info: Rx CMD Response\n");
- mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_FROMDEVICE);
+ if (adapter->curr_cmd)
+ mwifiex_unmap_pci_memory(adapter, skb, PCI_DMA_FROMDEVICE);
+ else
+ pci_dma_sync_single_for_cpu(card->dev,
+ MWIFIEX_SKB_DMA_ADDR(skb),
+ MWIFIEX_UPLD_SIZE,
+ PCI_DMA_FROMDEVICE);
/* Unmap the command as a response has been received. */
if (card->cmd_buf) {
@@ -1703,10 +1709,13 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
rx_len = le16_to_cpu(pkt_len);
skb_put(skb, MWIFIEX_UPLD_SIZE - skb->len);
skb_trim(skb, rx_len);
- skb_pull(skb, INTF_HEADER_LEN);
if (!adapter->curr_cmd) {
if (adapter->ps_state == PS_STATE_SLEEP_CFM) {
+ pci_dma_sync_single_for_device(card->dev,
+ MWIFIEX_SKB_DMA_ADDR(skb),
+ MWIFIEX_SLEEP_COOKIE_SIZE,
+ PCI_DMA_FROMDEVICE);
if (mwifiex_write_reg(adapter,
PCIE_CPU_INT_EVENT,
CPU_INTR_SLEEP_CFM_DONE)) {
@@ -1716,6 +1725,9 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
}
mwifiex_delay_for_sleep_cookie(adapter,
MWIFIEX_MAX_DELAY_COUNT);
+ mwifiex_unmap_pci_memory(adapter, skb,
+ PCI_DMA_FROMDEVICE);
+ skb_pull(skb, INTF_HEADER_LEN);
while (reg->sleep_cookie && (count++ < 10) &&
mwifiex_pcie_ok_to_access_hw(adapter))
usleep_range(50, 60);
@@ -1733,6 +1745,7 @@ static int mwifiex_pcie_process_cmd_complete(struct mwifiex_adapter *adapter)
PCI_DMA_FROMDEVICE))
return -1;
} else if (mwifiex_pcie_ok_to_access_hw(adapter)) {
+ skb_pull(skb, INTF_HEADER_LEN);
adapter->curr_cmd->resp_skb = skb;
adapter->cmd_resp_received = true;
/* Take the pointer and set it to CMD node and will
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.h b/drivers/net/wireless/marvell/mwifiex/pcie.h
index 21ba5e6..00e8ee5 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.h
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.h
@@ -116,6 +116,7 @@
/* FW awake cookie after FW ready */
#define FW_AWAKE_COOKIE (0xAA55AA55)
#define MWIFIEX_DEF_SLEEP_COOKIE 0xBEEFBEEF
+#define MWIFIEX_SLEEP_COOKIE_SIZE 4
#define MWIFIEX_MAX_DELAY_COUNT 100
struct mwifiex_pcie_card_reg {
--
1.9.1
^ permalink raw reply related
* Re: pull-request: iwlwifi 2017-01-23
From: Kalle Valo @ 2017-01-24 12:30 UTC (permalink / raw)
To: Luca Coelho; +Cc: linux-wireless
In-Reply-To: <1485204642.2774.60.camel@coelho.fi>
Luca Coelho <luca@coelho.fi> writes:
> Hi Kalle,
>
> After a long time (too long time, I admit), here comes a pull request
> with two fixes intended for v4.10. Nothing major, just two small fixes
> that were pending in our internal trees. I have some more, but I'm
> keeping this small for the -rc series. More details in the tag
> description.
>
> I have sent this out before and kbuildbot didn't find any issues.
>
> Cheers,
> Luca.
>
>
>
> The following changes since commit 92549cdc288f47f3a98cf80ac5890c91f5876a=
06:
>
> =C2=A0 iwlwifi: fix kernel crash when unregistering thermal zone
> (2017-01-21 14:58:37 +0200)
>
> are available in the git repository at:
>
> =C2=A0
> git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git
> tags/iwlwifi-for-kalle-2017-01-23
>
> for you to fetch changes up to 03c902bff524e0cf664737a33f2365f7837040bf:
>
> =C2=A0 iwlwifi: mvm: avoid crash on restart w/o reserved queues (2017-01-=
23 12:55:32 +0200)
>
> ----------------------------------------------------------------
> * Remove an extra hyphen from a string that was preventing the firmware t=
o load
> * Avoid a crash when the firmware is restarted in certain scenarios with =
DQA
>
> ----------------------------------------------------------------
Pulled, thanks.
--=20
Kalle Valo
^ permalink raw reply
* Re: [PATCH 2/3] ath10k: use dma_zalloc_coherent()
From: Valo, Kalle @ 2017-01-24 12:13 UTC (permalink / raw)
To: Joe Perches
Cc: Srinivas Kandagatla, ath10k@lists.infradead.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <1485235529.12563.39.camel@perches.com>
Sm9lIFBlcmNoZXMgPGpvZUBwZXJjaGVzLmNvbT4gd3JpdGVzOg0KDQo+IE9uIFR1ZSwgMjAxNy0w
MS0yNCBhdCAwNToxOCArMDAwMCwgVmFsbywgS2FsbGUgd3JvdGU6DQo+PiBKb2UgUGVyY2hlcyA8
am9lQHBlcmNoZXMuY29tPiB3cml0ZXM6DQo+PiANCj4+ID4gT24gTW9uLCAyMDE3LTAxLTIzIGF0
IDE1OjA0ICswMDAwLCBTcmluaXZhcyBLYW5kYWdhdGxhIHdyb3RlOg0KPj4gPiA+IHVzZSBkbWFf
emFsbG9jX2NvaGVyZW50KCkgaW5zdGVhZCBvZiBkbWFfYWxsb2NfY29oZXJlbnQgYW5kIG1lbXNl
dCgpLg0KPj4gPiANCj4+ID4gW10NCj4+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvYXRoL2F0aDEway9wY2kuYw0KPj4gPiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRo
L2F0aDEway9wY2kuYw0KPj4gPiANCj4+ID4gW10NCj4+ID4gPiBAQCAtODk2LDcgKzg5Niw3IEBA
IHN0YXRpYyBpbnQgYXRoMTBrX3BjaV9kaWFnX3JlYWRfbWVtKHN0cnVjdCBhdGgxMGsgKmFyLCB1
MzIgYWRkcmVzcywgdm9pZCAqZGF0YSwNCj4+ID4gPiAgCSAqLw0KPj4gPiA+ICAJYWxsb2NfbmJ5
dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBuYnl0ZXMsIERJQUdfVFJBTlNGRVJfTElNSVQpOw0K
Pj4gPiA+ICANCj4+ID4gPiAtCWRhdGFfYnVmID0gKHVuc2lnbmVkIGNoYXIgKilkbWFfYWxsb2Nf
Y29oZXJlbnQoYXItPmRldiwNCj4+ID4gPiArCWRhdGFfYnVmID0gKHVuc2lnbmVkIGNoYXIgKilk
bWFfemFsbG9jX2NvaGVyZW50KGFyLT5kZXYsDQo+PiA+ID4gIAkJCQkJCSAgICAgICBhbGxvY19u
Ynl0ZXMsDQo+PiA+ID4gIAkJCQkJCSAgICAgICAmY2VfZGF0YV9iYXNlLA0KPj4gPiA+ICAJCQkJ
CQkgICAgICAgR0ZQX0FUT01JQyk7DQo+PiA+IA0KPj4gPiB0cml2aWE6DQo+PiA+IA0KPj4gPiBO
aWNlciB0byByZWFsaWduIGFyZ3VtZW50cyBhbmQgcmVtb3ZlIHRoZSB1bm5lY2Vzc2FyeSBjYXN0
Lg0KPj4gPiANCj4+ID4gUGVyaGFwczoNCj4+ID4gDQo+PiA+IAlkYXRhX2J1ZiA9IGRtYV96YWxs
b2NfY29oZXJlbnQoYXItPmRldizCoGFsbG9jX25ieXRlcywgJmNlX2RhdGFfYmFzZSwNCj4+ID4g
CQkJCSAgICAgIMKgR0ZQX0FUT01JQyk7DQo+PiANCj4+IFN1cmUsIGJ1dCB0aGF0IHNob3VsZCBi
ZSBpbiBhIHNlcGFyYXRlIHBhdGNoLg0KPg0KPiBJIGRvbid0IHRoaW5rIHNvLCB0cml2aWFsIHBh
dGNoZXMgY2FuIGJlIGNvbWJpbmVkLg0KPg0KPiBJdCdzIGFsc28gbmljZXIgdG8gcmVhbGlnbiBh
bGwgbW9kaWZpZWQgbXVsdGlsaW5lDQo+IGFyZ3VtZW50cyB3aGVuIHBlcmZvcm1pbmcgdGhlc2Ug
Y2hhbmdlcy4NCj4NCj4gQ29jY2luZWxsZSBnZW5lcmFsbHkgZG9lcyBpdCBhdXRvbWF0aWNhbGx5
Lg0KDQpBIG1hdHRlciBvZiBwcmVmZXJlbmNlIHJlYWxseS4gSSBwcmVmZXIga2VlcGluZyBzdHls
ZSBhbmQgZnVuY3Rpb25hbA0KY2hhbmdlcyBpbiBzZXBhcmF0ZSBwYXRjaGVzLCBrZWVwcyB0aGUg
cmV2aWV3IHNpbXBsZS4gQW5kIHN0eWxlIGNoYW5nZXMNCmNhbiBoaWRlIGJ1Z3MuDQoNCi0tIA0K
S2FsbGUgVmFsbw==
^ permalink raw reply
* Re: [PATCH] nl80211: fix validation of scheduled scan info for wowlan netdetect
From: Arend Van Spriel @ 2017-01-24 11:28 UTC (permalink / raw)
To: Johannes Berg, Luca Coelho; +Cc: linux-wireless
In-Reply-To: <1485248251.7244.3.camel@sipsolutions.net>
On 24-1-2017 9:57, Johannes Berg wrote:
> On Thu, 2017-01-19 at 14:08 +0100, Arend Van Spriel wrote:
>>
>> On 19-1-2017 13:00, Luca Coelho wrote:
>>> On Thu, 2017-01-19 at 10:01 +0000, Arend van Spriel wrote:
>>>> For wowlan netdetect a separate limit is defined for the number
>>>> of
>>>> matchsets. Currently, this limit is ignored and the regular limit
>>>> for scheduled scan matchsets, ie. struct wiphy::max_match_sets,
>>>> is
>>>> used for the net-detect case as well.
>>>>
>>>> Cc: Luciano Coelho <luciano.coelho@intel.com>
>>>> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
>>>> ---
>>>
>>> What?! You don't have the same number of matchsets for both? :P
>>
>> Actually I have, but your comment mentioned they do not have to be
>> the
>> same. brcmfmac actually did not set max_nd_match_sets so I was
>> surprised
>> it worked. That said this patch will result in regression in brcmfmac
>> :-p Not sure about other drivers supporting net-detect.
>
> So do you want to submit a patch to brcmfmac first, and then I'll apply
> this later? I can apply it and break it, but now that we already know
> ...?
I have a brcmfmac patch in the queue. I will look at the other scheduled
scan supporting drivers.
Regards,
Arend
^ permalink raw reply
* RE: [PATCH] rtlwifi: rtl8192x: Enabling and disabling hardware interrupts after enabling local irq flags
From: Bharat Kumar Gogada @ 2017-01-24 10:03 UTC (permalink / raw)
To: Larry Finger, chaoming_li@realsil.com.cn,
linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: kvalo@codeaurora.org, netdev@vger.kernel.org, Ravikiran Gummaluri
In-Reply-To: <07fff87e-4dc2-f7b1-76f1-263be2410905@lwfinger.net>
> Subject: Re: [PATCH] rtlwifi: rtl8192x: Enabling and disabling hardware i=
nterrupts
> after enabling local irq flags
>=20
> On 01/20/2017 08:14 AM, Bharat Kumar Gogada wrote:
> > > On 01/19/2017 04:14 AM, Bharat Kumar Gogada wrote:
> >>> -Realtek 8192CE chipset maintains local irq flags after
> >>> enabling/disabling hardware interrupts.
> >>> -Hardware interrupts are enabled before enabling the local irq
> >>> flags(these flags are being checked in interrupt handler), leading
> >>> to race condition on some RP, where the irq line between bridge and
> >>> GIC goes high at ASSERT_INTx and goes low only at DEASSERT_INTx. In
> >>> this kind of RP by the time ASSERT_INTx is seen irq_enable flag is
> >>> still set to false, resulting in continuous interrupts seen by CPU
> >>> as DEASSERT_INTx cannot be sent since flag is still false and making
> >>> CPU stall.
> >>> -Changing the sequence of setting these irq flags.
> >>>
> >>> Signed-off-by: Bharat Kumar Gogada <bharatku@xilinx.com>
> >>> ---
> >>
> >> This patch should be enhanced with the smb_xx() calls as suggested by =
by
> Lino.
> >>
> >> The subject should be changed. I would suggest something like "rtlwifi=
:
> >> rtl8192ce: Prevent race condition when enabling interrupts", as it
> >> explains the condition you are preventing.
> >>
> >> The other PCI drivers also have the same problem. Do you want to
> >> prepare the patches, or should I do it?
> >>
> > Thanks Larry. Please send out the patches adding the above enhancements
> suggested by Lino.
>=20
> I have prepared a patch fixing all the drivers. By the way, what CPU hard=
ware
> showed this problem?
>=20
Thanks Larry, it was showed in ZynqUltrascalePlus Root Port hardware.
^ permalink raw reply
* Re: [PATCH v2 3/4] cfg80211: Accept multiple RSSI thresholds for CQM
From: Johannes Berg @ 2017-01-24 9:44 UTC (permalink / raw)
To: Andrew Zaborowski; +Cc: linux-wireless
In-Reply-To: <CAOq732JhLoeMQSwadM=ReBv7gAy9zb1uQ9RZAzEtvyDo7je+ww@mail.gmail.com>
On Sat, 2017-01-07 at 04:43 -0500, Andrew Zaborowski wrote:
> With the basic mac80211 implementation in my patch 4/4 this feature
> should be set when IEEE80211_VIF_BEACON_FILTER is not set. The
> problem with a nl80211_ext_feature is that it's per wiphy instead of
> per interface. So in the case mac80211, it would need to be set if
> all interfaces can accept lists of thresholds and that can change
> dynamically as interfaces are added. And nl80211 has no per-
> interface features.
Right - it doesn't even have that concept, and I'm not sure that really
makes sense.
> I wonder if it's better to add a ieee80211_hw_flags flag to advertise
> this feature per wiphy, or, as an approximation, set the flag based
> on the default interface that is created in ieee80211_register_hw.
I think we should just leave the new flag up to the driver then. The
only driver using per-interface beacon filtering (iwlwifi, afaik) will
either need to convert to actually handle it in the beacon filtering
case (which is the normal case anyway).
johannes
^ permalink raw reply
* Re: [RFC V2 1/5] nl80211: allow multiple active scheduled scan requests
From: Johannes Berg @ 2017-01-24 9:40 UTC (permalink / raw)
To: Arend van Spriel; +Cc: linux-wireless
In-Reply-To: <1484566941-27000-2-git-send-email-arend.vanspriel@broadcom.com>
> + * @max_sched_scan_reqs: maximum number of scheduled scan requests
> that
> + * the device can run concurrently.
Perhaps we should get rid of WIPHY_FLAG_SUPPORTS_SCHED_SCAN and just
set this to 1 for such devices? Otherwise we have two different
requirements, and we need to track that 0 is an invalid value here if
WIPHY_FLAG_SUPPORTS_SCHED_SCAN is set, or something like that?
> + * @NL80211_ATTR_SCHED_SCAN_MAX_REQS: indicates maximum number of
> scheduled
> + * scan request that may be active for the device (u8).
I'd make that a u32 - not that I believe we'll ever want to change this
in the future, but there's simply no value in making it a u8 since it
uses the same amount of space in a netlink message.
> + list_for_each_entry_safe(pos, tmp, &rdev-
> >sched_scan_req_list, list) {
> + cfg80211_stop_sched_scan_req(rdev, pos, false);
> + }
nit: don't really need braces here.
> + if ((wiphy->flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) &&
> + !wiphy->max_sched_scan_reqs)
> + wiphy->max_sched_scan_reqs = 1;
Yeah, this. Why bother?
(should even be simple to come up with an spatch to change all the
drivers, but there are only five anyway)
> + nla_put_u8(msg,
> NL80211_ATTR_SCHED_SCAN_MAX_REQS,
> + rdev->wiphy.max_sched_scan_reqs) ||
> nla_put_u8(msg,
> NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS,
> rdev->wiphy.max_sched_scan_ssids) ||
This might break older userspace - you'll have to put it in a later
portion of the code.
I'm also a bit surprised the attributes aren't actually optional for
when sched scan isn't supported, I'd make the new one optional and I
guess we can fix the others later too, if desired.
> + bool want_multi;
That's bool
> + want_multi = !!info->attrs[NL80211_ATTR_SCHED_SCAN_MULTI];
so you don't really need the !! as it's implied by the rules for bool
:)
> + /* leave request id zero for legacy request
> + * or if driver does not support multi-scheduled scan
> + */
> + if (want_multi && rdev->wiphy.max_sched_scan_reqs > 1) {
Why do the >1 check here? It probably doesn't really make a difference
since only one can be running at a time, but it might be nicer - at
least for debug in userspace - to have a real value for all multi
scans?
> + while (!sched_scan_req->reqid)
Pretty sure we won't run over the u64 ... but I guess it doesn't matter
much :)
I don't see you sending the reqid/cookie back to userspace here though,
that's missing?
> static int nl80211_stop_sched_scan(struct sk_buff *skb,
> struct genl_info *info)
> {
> + struct cfg80211_sched_scan_request *req;
> struct cfg80211_registered_device *rdev = info->user_ptr[0];
> + u64 cookie;
>
> if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) ||
> !rdev->ops->sched_scan_stop)
> return -EOPNOTSUPP;
>
> - return __cfg80211_stop_sched_scan(rdev, false);
> + if (info->attrs[NL80211_ATTR_COOKIE]) {
> + cookie = nla_get_u64(info-
> >attrs[NL80211_ATTR_COOKIE]);
> + return __cfg80211_stop_sched_scan(rdev, cookie,
> false);
> + } else {
> + req = list_first_or_null_rcu(&rdev-
> >sched_scan_req_list,
> + struct
> cfg80211_sched_scan_request,
> + list);
> + if (!req || req->reqid ||
> + (req->owner_nlportid &&
> + req->owner_nlportid != info->snd_portid))
> + return -ENOENT;
Shouldn't this also check that it's non-multi?
> +void cfg80211_add_sched_scan_req(struct cfg80211_registered_device
> *rdev,
> + struct cfg80211_sched_scan_request
> *req)
> +{
> + list_add_rcu(&req->list, &rdev->sched_scan_req_list);
> +}
> +
> +static void cfg80211_del_sched_scan_req(struct
> cfg80211_registered_device *rdev,
> + struct
> cfg80211_sched_scan_request *req)
> +{
> + list_del_rcu(&req->list);
> + kfree_rcu(req, rcu_head);
> +}
Some locking assertions in these would be good, I think.
> +static struct cfg80211_sched_scan_request *
> +cfg80211_find_sched_scan_req(struct cfg80211_registered_device
> *rdev, u64 reqid)
> +{
> + struct cfg80211_sched_scan_request *pos;
> +
> + list_for_each_entry(pos, &rdev->sched_scan_req_list, list) {
> + if (pos->reqid == reqid)
> + return pos;
> + }
> + return ERR_PTR(-ENOENT);
> +}
Here too, I guess, since you don't actually use RCU.
johannes
^ permalink raw reply
* Re: [PATCH] nl80211: fix validation of scheduled scan info for wowlan netdetect
From: Johannes Berg @ 2017-01-24 8:57 UTC (permalink / raw)
To: Arend Van Spriel, Luca Coelho; +Cc: linux-wireless
In-Reply-To: <bde55d09-6f3e-1f90-4aef-0e1169c11cf6@broadcom.com>
On Thu, 2017-01-19 at 14:08 +0100, Arend Van Spriel wrote:
>
> On 19-1-2017 13:00, Luca Coelho wrote:
> > On Thu, 2017-01-19 at 10:01 +0000, Arend van Spriel wrote:
> > > For wowlan netdetect a separate limit is defined for the number
> > > of
> > > matchsets. Currently, this limit is ignored and the regular limit
> > > for scheduled scan matchsets, ie. struct wiphy::max_match_sets,
> > > is
> > > used for the net-detect case as well.
> > >
> > > Cc: Luciano Coelho <luciano.coelho@intel.com>
> > > Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> > > ---
> >
> > What?! You don't have the same number of matchsets for both? :P
>
> Actually I have, but your comment mentioned they do not have to be
> the
> same. brcmfmac actually did not set max_nd_match_sets so I was
> surprised
> it worked. That said this patch will result in regression in brcmfmac
> :-p Not sure about other drivers supporting net-detect.
So do you want to submit a patch to brcmfmac first, and then I'll apply
this later? I can apply it and break it, but now that we already know
...?
johannes
^ permalink raw reply
* Re: [PATCH 2/3] ath10k: use dma_zalloc_coherent()
From: Joe Perches @ 2017-01-24 5:25 UTC (permalink / raw)
To: Valo, Kalle
Cc: Srinivas Kandagatla, ath10k@lists.infradead.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <8737g9ox1k.fsf@qca.qualcomm.com>
On Tue, 2017-01-24 at 05:18 +0000, Valo, Kalle wrote:
> Joe Perches <joe@perches.com> writes:
>
> > On Mon, 2017-01-23 at 15:04 +0000, Srinivas Kandagatla wrote:
> > > use dma_zalloc_coherent() instead of dma_alloc_coherent and memset().
> >
> > []
> > > diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
> >
> > []
> > > @@ -896,7 +896,7 @@ static int ath10k_pci_diag_read_mem(struct ath10k *ar, u32 address, void *data,
> > > */
> > > alloc_nbytes = min_t(unsigned int, nbytes, DIAG_TRANSFER_LIMIT);
> > >
> > > - data_buf = (unsigned char *)dma_alloc_coherent(ar->dev,
> > > + data_buf = (unsigned char *)dma_zalloc_coherent(ar->dev,
> > > alloc_nbytes,
> > > &ce_data_base,
> > > GFP_ATOMIC);
> >
> > trivia:
> >
> > Nicer to realign arguments and remove the unnecessary cast.
> >
> > Perhaps:
> >
> > data_buf = dma_zalloc_coherent(ar->dev, alloc_nbytes, &ce_data_base,
> > GFP_ATOMIC);
>
> Sure, but that should be in a separate patch.
I don't think so, trivial patches can be combined.
It's also nicer to realign all modified multiline
arguments when performing these changes.
Coccinelle generally does it automatically.
^ permalink raw reply
* Re: [PATCH 2/3] ath10k: use dma_zalloc_coherent()
From: Valo, Kalle @ 2017-01-24 5:18 UTC (permalink / raw)
To: Joe Perches
Cc: Srinivas Kandagatla, ath10k@lists.infradead.org,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <1485213569.12563.32.camel@perches.com>
Sm9lIFBlcmNoZXMgPGpvZUBwZXJjaGVzLmNvbT4gd3JpdGVzOg0KDQo+IE9uIE1vbiwgMjAxNy0w
MS0yMyBhdCAxNTowNCArMDAwMCwgU3Jpbml2YXMgS2FuZGFnYXRsYSB3cm90ZToNCj4+IHVzZSBk
bWFfemFsbG9jX2NvaGVyZW50KCkgaW5zdGVhZCBvZiBkbWFfYWxsb2NfY29oZXJlbnQgYW5kIG1l
bXNldCgpLg0KPiBbXQ0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9h
dGgxMGsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3BjaS5jDQo+IFtd
DQo+PiBAQCAtODk2LDcgKzg5Niw3IEBAIHN0YXRpYyBpbnQgYXRoMTBrX3BjaV9kaWFnX3JlYWRf
bWVtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgYWRkcmVzcywgdm9pZCAqZGF0YSwNCj4+ICAJICov
DQo+PiAgCWFsbG9jX25ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbmJ5dGVzLCBESUFHX1RS
QU5TRkVSX0xJTUlUKTsNCj4+ICANCj4+IC0JZGF0YV9idWYgPSAodW5zaWduZWQgY2hhciAqKWRt
YV9hbGxvY19jb2hlcmVudChhci0+ZGV2LA0KPj4gKwlkYXRhX2J1ZiA9ICh1bnNpZ25lZCBjaGFy
ICopZG1hX3phbGxvY19jb2hlcmVudChhci0+ZGV2LA0KPj4gIAkJCQkJCSAgICAgICBhbGxvY19u
Ynl0ZXMsDQo+PiAgCQkJCQkJICAgICAgICZjZV9kYXRhX2Jhc2UsDQo+PiAgCQkJCQkJICAgICAg
IEdGUF9BVE9NSUMpOw0KPg0KPiB0cml2aWE6DQo+DQo+IE5pY2VyIHRvIHJlYWxpZ24gYXJndW1l
bnRzIGFuZCByZW1vdmUgdGhlIHVubmVjZXNzYXJ5IGNhc3QuDQo+DQo+IFBlcmhhcHM6DQo+DQo+
IAlkYXRhX2J1ZiA9IGRtYV96YWxsb2NfY29oZXJlbnQoYXItPmRldizCoGFsbG9jX25ieXRlcywg
JmNlX2RhdGFfYmFzZSwNCj4gCQkJCSAgICAgIMKgR0ZQX0FUT01JQyk7DQoNClN1cmUsIGJ1dCB0
aGF0IHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHBhdGNoLg0KDQotLSANCkthbGxlIFZhbG8=
^ permalink raw reply
* Re: [PATCH 2/3] ath10k: use dma_zalloc_coherent()
From: Joe Perches @ 2017-01-23 23:19 UTC (permalink / raw)
To: Srinivas Kandagatla, Kalle Valo
Cc: ath10k, linux-wireless, netdev, linux-kernel
In-Reply-To: <1485183876-27080-2-git-send-email-srinivas.kandagatla@linaro.org>
On Mon, 2017-01-23 at 15:04 +0000, Srinivas Kandagatla wrote:
> use dma_zalloc_coherent() instead of dma_alloc_coherent and memset().
[]
> diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
[]
> @@ -896,7 +896,7 @@ static int ath10k_pci_diag_read_mem(struct ath10k *ar, u32 address, void *data,
> */
> alloc_nbytes = min_t(unsigned int, nbytes, DIAG_TRANSFER_LIMIT);
>
> - data_buf = (unsigned char *)dma_alloc_coherent(ar->dev,
> + data_buf = (unsigned char *)dma_zalloc_coherent(ar->dev,
> alloc_nbytes,
> &ce_data_base,
> GFP_ATOMIC);
trivia:
Nicer to realign arguments and remove the unnecessary cast.
Perhaps:
data_buf = dma_zalloc_coherent(ar->dev, alloc_nbytes, &ce_data_base,
GFP_ATOMIC);
^ permalink raw reply
* [PATCH 19/25] iwlwifi: dvm: make rs_tl_get_load() return void
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Luca Coelho <luciano.coelho@intel.com>
The return value from this function is never used, so make it return
void to avoid getting the following warning when compiling wiht W=1:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/dvm/rs.c: In function ‘rs_tl_turn_on_agg_for_tid’:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/dvm/rs.c:400:6: warning: variable ‘load’ set but not used [-Wunused-but-set-variable]
u32 load;
^
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
index b95c2d76db33..710dbbefd551 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rs.c
@@ -364,7 +364,7 @@ static void rs_program_fix_rate(struct iwl_priv *priv,
/*
get the traffic load value for tid
*/
-static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)
+static void rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)
{
u32 curr_time = jiffies_to_msecs(jiffies);
u32 time_diff;
@@ -372,14 +372,14 @@ static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)
struct iwl_traffic_load *tl = NULL;
if (tid >= IWL_MAX_TID_COUNT)
- return 0;
+ return;
tl = &(lq_data->load[tid]);
curr_time -= curr_time % TID_ROUND_VALUE;
if (!(tl->queue_count))
- return 0;
+ return;
time_diff = TIME_WRAP_AROUND(tl->time_stamp, curr_time);
index = time_diff / TID_QUEUE_CELL_SPACING;
@@ -388,8 +388,6 @@ static u32 rs_tl_get_load(struct iwl_lq_sta *lq_data, u8 tid)
/* TID_MAX_TIME_DIFF */
if (index >= TID_QUEUE_MAX_SIZE)
rs_tl_rm_old_stats(tl, curr_time);
-
- return tl->total;
}
static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
@@ -397,7 +395,6 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
struct ieee80211_sta *sta)
{
int ret = -EAGAIN;
- u32 load;
/*
* Don't create TX aggregation sessions when in high
@@ -410,7 +407,7 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
return ret;
}
- load = rs_tl_get_load(lq_data, tid);
+ rs_tl_get_load(lq_data, tid);
IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n",
sta->addr, tid);
--
2.11.0
^ permalink raw reply related
* [PATCH 25/25] iwlwifi: mvm: cleanup redundant assignment
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho, Sara Sharon
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Sara Sharon <sara.sharon@intel.com>
This set of station id is redundant - it is being initialised
above.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/utils.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
index 2beea3b98e52..26b853ef195f 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/utils.c
@@ -693,10 +693,6 @@ void iwl_mvm_enable_txq(struct iwl_mvm *mvm, int queue, int mac80211_queue,
.tid = cfg->tid,
};
- /* Set sta_id in the command, if it exists */
- if (iwl_mvm_is_dqa_supported(mvm))
- cmd.sta_id = cfg->sta_id;
-
iwl_trans_txq_enable_cfg(mvm->trans, queue, ssn, NULL,
wdg_timeout);
WARN(iwl_mvm_send_cmd_pdu(mvm, SCD_QUEUE_CFG, 0, sizeof(cmd),
--
2.11.0
^ permalink raw reply related
* [PATCH 10/25] iwlwifi: enlarge number of ucode sections
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho, Sara Sharon
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Sara Sharon <sara.sharon@intel.com>
The maximum number of firmware sections is now 32 instead of 16 for
a000 devices. Set the appropriate define. Avoid out of bounds access
in case there are more sections than the maximum set by driver.
Make the driver extensible to FW size changes by allocating the
section memory dynamically.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | 2 +-
drivers/net/wireless/intel/iwlwifi/dvm/ucode.c | 2 +-
drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 31 ++++++++++++++++++-----
drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h | 1 -
drivers/net/wireless/intel/iwlwifi/iwl-fw.h | 3 ++-
drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 4 +--
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 2 +-
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 4 +--
8 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
index 8c0719468d00..2a04d0cd71ae 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
@@ -163,7 +163,7 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
REGULATORY_DISABLE_BEACON_HINTS;
#ifdef CONFIG_PM_SLEEP
- if (priv->fw->img[IWL_UCODE_WOWLAN].sec[0].len &&
+ if (priv->fw->img[IWL_UCODE_WOWLAN].num_sec &&
priv->trans->ops->d3_suspend &&
priv->trans->ops->d3_resume &&
device_can_wakeup(priv->trans->dev)) {
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/ucode.c b/drivers/net/wireless/intel/iwlwifi/dvm/ucode.c
index c7509c51e9d9..d6013bfe991c 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/ucode.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/ucode.c
@@ -407,7 +407,7 @@ int iwl_run_init_ucode(struct iwl_priv *priv)
lockdep_assert_held(&priv->mutex);
/* No init ucode required? Curious, but maybe ok */
- if (!priv->fw->img[IWL_UCODE_INIT].sec[0].len)
+ if (!priv->fw->img[IWL_UCODE_INIT].num_sec)
return 0;
iwl_init_notification_wait(&priv->notif_wait, &calib_wait,
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
index a6719d67ac00..1d1af4bc1530 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
@@ -166,8 +166,9 @@ static void iwl_free_fw_desc(struct iwl_drv *drv, struct fw_desc *desc)
static void iwl_free_fw_img(struct iwl_drv *drv, struct fw_img *img)
{
int i;
- for (i = 0; i < IWL_UCODE_SECTION_MAX; i++)
+ for (i = 0; i < img->num_sec; i++)
iwl_free_fw_desc(drv, &img->sec[i]);
+ kfree(img->sec);
}
static void iwl_dealloc_ucode(struct iwl_drv *drv)
@@ -240,7 +241,7 @@ static int iwl_request_firmware(struct iwl_drv *drv, bool first)
}
struct fw_img_parsing {
- struct fw_sec sec[IWL_UCODE_SECTION_MAX];
+ struct fw_sec *sec;
int sec_counter;
};
@@ -383,6 +384,7 @@ static int iwl_store_ucode_sec(struct iwl_firmware_pieces *pieces,
struct fw_img_parsing *img;
struct fw_sec *sec;
struct fw_sec_parsing *sec_parse;
+ size_t alloc_size;
if (WARN_ON(!pieces || !data || type >= IWL_UCODE_TYPE_MAX))
return -1;
@@ -390,6 +392,13 @@ static int iwl_store_ucode_sec(struct iwl_firmware_pieces *pieces,
sec_parse = (struct fw_sec_parsing *)data;
img = &pieces->img[type];
+
+ alloc_size = sizeof(*img->sec) * (img->sec_counter + 1);
+ sec = krealloc(img->sec, alloc_size, GFP_KERNEL);
+ if (!sec)
+ return -ENOMEM;
+ img->sec = sec;
+
sec = &img->sec[img->sec_counter];
sec->offset = le32_to_cpu(sec_parse->offset);
@@ -1089,12 +1098,18 @@ static int iwl_alloc_ucode(struct iwl_drv *drv,
enum iwl_ucode_type type)
{
int i;
- for (i = 0;
- i < IWL_UCODE_SECTION_MAX && get_sec_size(pieces, type, i);
- i++)
- if (iwl_alloc_fw_desc(drv, &(drv->fw.img[type].sec[i]),
- get_sec(pieces, type, i)))
+ struct fw_desc *sec;
+
+ sec = kcalloc(pieces->img[type].sec_counter, sizeof(*sec), GFP_KERNEL);
+ if (!sec)
+ return -ENOMEM;
+ drv->fw.img[type].sec = sec;
+ drv->fw.img[type].num_sec = pieces->img[type].sec_counter;
+
+ for (i = 0; i < pieces->img[type].sec_counter; i++)
+ if (iwl_alloc_fw_desc(drv, &sec[i], get_sec(pieces, type, i)))
return -ENOMEM;
+
return 0;
}
@@ -1457,6 +1472,8 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
complete(&drv->request_firmware_complete);
device_release_driver(drv->trans->dev);
free:
+ for (i = 0; i < ARRAY_SIZE(pieces->img); i++)
+ kfree(pieces->img[i].sec);
kfree(pieces->dbg_mem_tlv);
kfree(pieces);
}
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h b/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
index c84207576587..d01701ee4777 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-fw-file.h
@@ -379,7 +379,6 @@ enum iwl_ucode_tlv_capa {
* For 16.0 uCode and above, there is no differentiation between sections,
* just an offset to the HW address.
*/
-#define IWL_UCODE_SECTION_MAX 16
#define CPU1_CPU2_SEPARATOR_SECTION 0xFFFFCCCC
#define PAGING_SEPARATOR_SECTION 0xAAAABBBB
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-fw.h b/drivers/net/wireless/intel/iwlwifi/iwl-fw.h
index 710ecb490bfc..d323b70b510a 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-fw.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-fw.h
@@ -132,7 +132,8 @@ struct fw_desc {
};
struct fw_img {
- struct fw_desc sec[IWL_UCODE_SECTION_MAX];
+ struct fw_desc *sec;
+ int num_sec;
bool is_dual_cpus;
u32 paging_mem_size;
};
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
index 606b3fc18d46..b278e44e97ad 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
@@ -190,7 +190,7 @@ static int iwl_fill_paging_mem(struct iwl_mvm *mvm, const struct fw_img *image)
* CPU2 paging CSS
* CPU2 paging image (including instruction and data)
*/
- for (sec_idx = 0; sec_idx < IWL_UCODE_SECTION_MAX; sec_idx++) {
+ for (sec_idx = 0; sec_idx < image->num_sec; sec_idx++) {
if (image->sec[sec_idx].offset == PAGING_SEPARATOR_SECTION) {
sec_idx++;
break;
@@ -201,7 +201,7 @@ static int iwl_fill_paging_mem(struct iwl_mvm *mvm, const struct fw_img *image)
* If paging is enabled there should be at least 2 more sections left
* (one for CSS and one for Paging data)
*/
- if (sec_idx >= ARRAY_SIZE(image->sec) - 1) {
+ if (sec_idx >= image->num_sec - 1) {
IWL_ERR(mvm, "Paging: Missing CSS and/or paging sections\n");
iwl_free_fw_paging(mvm);
return -EINVAL;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 039cb2ad2d3e..71f9aa9f7c7d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -677,7 +677,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
hw->wiphy->wowlan = &mvm->wowlan;
}
- if (mvm->fw->img[IWL_UCODE_WOWLAN].sec[0].len &&
+ if (mvm->fw->img[IWL_UCODE_WOWLAN].num_sec &&
mvm->trans->ops->d3_suspend &&
mvm->trans->ops->d3_resume &&
device_can_wakeup(mvm->trans->dev)) {
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index b10e3633df1a..bf0ecdcf7402 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -805,7 +805,7 @@ static int iwl_pcie_load_cpu_sections_8000(struct iwl_trans *trans,
(*first_ucode_section)++;
}
- for (i = *first_ucode_section; i < IWL_UCODE_SECTION_MAX; i++) {
+ for (i = *first_ucode_section; i < image->num_sec; i++) {
last_read_idx = i;
/*
@@ -880,7 +880,7 @@ static int iwl_pcie_load_cpu_sections(struct iwl_trans *trans,
(*first_ucode_section)++;
}
- for (i = *first_ucode_section; i < IWL_UCODE_SECTION_MAX; i++) {
+ for (i = *first_ucode_section; i < image->num_sec; i++) {
last_read_idx = i;
/*
--
2.11.0
^ permalink raw reply related
* [PATCH 14/25] iwlwifi: fix MODULE_FIRMWARE for 6030
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho, Jürg Billeter
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Jürg Billeter <j@bitron.ch>
IWL6000G2B_UCODE_API_MAX is not defined. ucode_api_max of
IWL_DEVICE_6030 uses IWL6000G2_UCODE_API_MAX. Use this also for
MODULE_FIRMWARE.
Fixes: 9d9b21d1b616 ("iwlwifi: remove IWL_*_UCODE_API_OK")
Signed-off-by: Jürg Billeter <j@bitron.ch>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/iwl-6000.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-6000.c b/drivers/net/wireless/intel/iwlwifi/iwl-6000.c
index 0b9f6a7bc834..39335b7b0c16 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-6000.c
@@ -371,4 +371,4 @@ const struct iwl_cfg iwl6000_3agn_cfg = {
MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
MODULE_FIRMWARE(IWL6050_MODULE_FIRMWARE(IWL6050_UCODE_API_MAX));
MODULE_FIRMWARE(IWL6005_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
-MODULE_FIRMWARE(IWL6030_MODULE_FIRMWARE(IWL6000G2B_UCODE_API_MAX));
+MODULE_FIRMWARE(IWL6030_MODULE_FIRMWARE(IWL6000G2_UCODE_API_MAX));
--
2.11.0
^ permalink raw reply related
* [PATCH 22/25] iwlwifi: dvm: remove unused variable compiler warning in debugfs.c
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Luca Coelho <luciano.coelho@intel.com>
When compiling with W=1, we get the following warning in debugfs.c:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c: In function ‘iwl_dbgfs_fw_restart_write’:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c:2313:6: warning: variable ‘ret’ set but not used [-Wunused-but-set-variable]
int ret;
^
Fix it by ignoring the return value in this case.
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
index affe760c8c22..376c79337a0e 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/debugfs.c
@@ -2310,7 +2310,7 @@ static ssize_t iwl_dbgfs_fw_restart_write(struct file *file,
{
struct iwl_priv *priv = file->private_data;
bool restart_fw = iwlwifi_mod_params.restart_fw;
- int ret;
+ int __maybe_unused ret;
iwlwifi_mod_params.restart_fw = true;
--
2.11.0
^ permalink raw reply related
* [PATCH 23/25] iwlwifi: mvm: mark ret as maybe_unused in iwl_dbgfs_fw_restart_write()
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Luca Coelho <luciano.coelho@intel.com>
The value returned from iwl_mvm_send_cmd_pdu() in this function is not
used and always returns an error (which is the whole point of the
call). Tag the ret variable with __maybe_unused to avoid this compile
warning when W=1 is used:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c: In function ‘iwl_dbgfs_fw_restart_write’:
/home/luca/iwlwifi/stack-dev/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c:875:6: warning: variable ‘ret’ set but not used [-Wunused-but-set-variable]
int ret;
^
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
index 7b7d2a146e30..a260cd503200 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c
@@ -798,7 +798,7 @@ static ssize_t iwl_dbgfs_drv_rx_stats_read(struct file *file,
static ssize_t iwl_dbgfs_fw_restart_write(struct iwl_mvm *mvm, char *buf,
size_t count, loff_t *ppos)
{
- int ret;
+ int __maybe_unused ret;
mutex_lock(&mvm->mutex);
--
2.11.0
^ permalink raw reply related
* [PATCH 17/25] iwlwifi: mvm: rs: Remove unused 'mcs' variable
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless
Cc: kvalo, luciano.coelho, Kirtika Ruchandani, Kirtika Ruchandani,
Eyal Shapira
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Kirtika Ruchandani <kirtika.ruchandani@gmail.com>
Commit 5fc0f76c4 introduced Rx stats from debugfs, the function
iwl_mvm_reset_frame_stats from that commit defines and sets mcs but
does not use it. Compiling iwlwifi with W=1 gives this warning -
iwlwifi/mvm/rs.c: In function ‘iwl_mvm_update_frame_stats’:
iwlwifi/mvm/rs.c:3074:14: warning: variable ‘mcs’ set but not used [-Wunused-but-set-variable]
Fixes: 5fc0f76c43bd (iwlwifi: mvm: add Rx frames statistics via debugfs)
Signed-off-by: Kirtika Ruchandani <kirtika@google.com>
Cc: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
index 0b79f4a43eaf..80f99c365b6a 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
@@ -3065,7 +3065,7 @@ static void iwl_mvm_reset_frame_stats(struct iwl_mvm *mvm)
void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg)
{
- u8 nss = 0, mcs = 0;
+ u8 nss = 0;
spin_lock(&mvm->drv_stats_lock);
@@ -3093,11 +3093,9 @@ void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg)
if (rate & RATE_MCS_HT_MSK) {
mvm->drv_rx_stats.ht_frames++;
- mcs = rate & RATE_HT_MCS_RATE_CODE_MSK;
nss = ((rate & RATE_HT_MCS_NSS_MSK) >> RATE_HT_MCS_NSS_POS) + 1;
} else if (rate & RATE_MCS_VHT_MSK) {
mvm->drv_rx_stats.vht_frames++;
- mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK;
nss = ((rate & RATE_VHT_MCS_NSS_MSK) >>
RATE_VHT_MCS_NSS_POS) + 1;
} else {
--
2.11.0
^ permalink raw reply related
* [PATCH 18/25] iwlwifi: pcie: trans: Remove unused 'shift_param'
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless
Cc: kvalo, luciano.coelho, Kirtika Ruchandani, Kirtika Ruchandani,
Sara Sharon, Liad Kaufman, Emmanuel Grumbach
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Kirtika Ruchandani <kirtika.ruchandani@gmail.com>
shift_param is defined and set in iwl_pcie_load_cpu_sections but not
used. Fix this to avoid -Wunused-but-set-variable warning.
The code using it turned into dead code with commit dcab8ecd5617
("iwlwifi: mvm: support ucode load for family_8000 B0 only") which
added a separate function iwl_pcie_load_given_ucode_8000 (then 8000b)
for IWL_DEVICE_FAMILY_8000. Commit 76f8c0e17edc ("iwlwifi: pcie:
remove dead code") removed the dead code but left shift_param as is.
iwlwifi/pcie/trans.c: In function ‘iwl_pcie_load_cpu_sections’:
iwlwifi/pcie/trans.c:871:6: warning: variable ‘shift_param’ set but not used [-Wunused-but-set-variable]
Fixes: dcab8ecd5617 ("iwlwifi: mvm: support ucode load for family_8000 B0 only")
Fixes: 76f8c0e17edc ("iwlwifi: pcie: remove dead code")
Signed-off-by: Kirtika Ruchandani <kirtika@google.com>
Cc: Sara Sharon <sara.sharon@intel.com>
Cc: Luca Coelho <luciano.coelho@intel.com>
Cc: Liad Kaufman <liad.kaufman@intel.com>
Cc: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
[removed some unnecessary braces]
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index bf0ecdcf7402..16790db650c1 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -868,17 +868,13 @@ static int iwl_pcie_load_cpu_sections(struct iwl_trans *trans,
int cpu,
int *first_ucode_section)
{
- int shift_param;
int i, ret = 0;
u32 last_read_idx = 0;
- if (cpu == 1) {
- shift_param = 0;
+ if (cpu == 1)
*first_ucode_section = 0;
- } else {
- shift_param = 16;
+ else
(*first_ucode_section)++;
- }
for (i = *first_ucode_section; i < image->num_sec; i++) {
last_read_idx = i;
--
2.11.0
^ permalink raw reply related
* [PATCH 13/25] iwlwifi: mvm: support version 2 of stored beacon notification
From: Luca Coelho @ 2017-01-23 22:03 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, luciano.coelho, Sara Sharon
In-Reply-To: <20170123220350.25305-1-luca@coelho.fi>
From: Sara Sharon <sara.sharon@intel.com>
For 9000 devices withg upload, FW cannot send the entire phy
flags, and will send only the band - which is what we really
care about anyway. Change is backward compatible.
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h | 6 +++---
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
index ae12badc0c2a..567597c26115 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
@@ -2075,7 +2075,7 @@ struct iwl_mu_group_mgmt_notif {
* @system_time: system time on air rise
* @tsf: TSF on air rise
* @beacon_timestamp: beacon on air rise
- * @phy_flags: general phy flags: band, modulation, etc.
+ * @band: band, matches &RX_RES_PHY_FLAGS_BAND_24 definition
* @channel: channel this beacon was received on
* @rates: rate in ucode internal format
* @byte_count: frame's byte count
@@ -2084,12 +2084,12 @@ struct iwl_stored_beacon_notif {
__le32 system_time;
__le64 tsf;
__le32 beacon_timestamp;
- __le16 phy_flags;
+ __le16 band;
__le16 channel;
__le32 rates;
__le32 byte_count;
u8 data[MAX_STORED_BEACON_SIZE];
-} __packed; /* WOWLAN_STROED_BEACON_INFO_S_VER_1 */
+} __packed; /* WOWLAN_STROED_BEACON_INFO_S_VER_2 */
#define LQM_NUMBER_OF_STATIONS_IN_REPORT 16
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
index 4a0874e40731..ebf6c071eb36 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
@@ -1565,7 +1565,7 @@ void iwl_mvm_rx_stored_beacon_notif(struct iwl_mvm *mvm,
rx_status.flag |= RX_FLAG_MACTIME_PLCP_START;
rx_status.device_timestamp = le32_to_cpu(sb->system_time);
rx_status.band =
- (sb->phy_flags & cpu_to_le16(RX_RES_PHY_FLAGS_BAND_24)) ?
+ (sb->band & cpu_to_le16(RX_RES_PHY_FLAGS_BAND_24)) ?
NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
rx_status.freq =
ieee80211_channel_to_frequency(le16_to_cpu(sb->channel),
--
2.11.0
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox