* [PATCH 2/3] ieee80211: fix vht cap definitions
From: Johannes Berg @ 2013-08-30 8:49 UTC (permalink / raw)
To: linux-wireless; +Cc: Eliad Peller
In-Reply-To: <1377852561-16754-1-git-send-email-johannes@sipsolutions.net>
From: Eliad Peller <eliad@wizery.com>
VHT_CAP_BEAMFORMER_ANTENNAS cap is actually defined in the draft as
VHT_CAP_BEAMFORMEE_STS_MAX, and its size is 3 bits long.
VHT_CAP_SOUNDING_DIMENSIONS is also 3 bits long.
Fix the definitions and change the cap masking accordingly.
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
include/linux/ieee80211.h | 4 ++--
net/mac80211/vht.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 23a8877..57b699e 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -1390,8 +1390,8 @@ struct ieee80211_vht_operation {
#define IEEE80211_VHT_CAP_RXSTBC_MASK 0x00000700
#define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE 0x00000800
#define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE 0x00001000
-#define IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX 0x00006000
-#define IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MAX 0x00030000
+#define IEEE80211_VHT_CAP_BEAMFORMEE_STS_MAX 0x0000e000
+#define IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MAX 0x00070000
#define IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE 0x00080000
#define IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE 0x00100000
#define IEEE80211_VHT_CAP_VHT_TXOP_PS 0x00200000
diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c
index 97c28941..de01127 100644
--- a/net/mac80211/vht.c
+++ b/net/mac80211/vht.c
@@ -185,13 +185,13 @@ ieee80211_vht_cap_ie_to_sta_vht_cap(struct ieee80211_sub_if_data *sdata,
if (own_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) {
vht_cap->cap |= cap_info &
(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
- IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX |
IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MAX);
}
if (own_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE)
vht_cap->cap |= cap_info &
- IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE;
+ (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
+ IEEE80211_VHT_CAP_BEAMFORMEE_STS_MAX);
if (own_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)
vht_cap->cap |= cap_info &
--
1.8.4.rc3
^ permalink raw reply related
* [PATCH 3/3] mac80211: allow configuring smps_mode_in_ps
From: Johannes Berg @ 2013-08-30 8:49 UTC (permalink / raw)
To: linux-wireless; +Cc: Eliad Peller
In-Reply-To: <1377852561-16754-1-git-send-email-johannes@sipsolutions.net>
From: Eliad Peller <eliad@wizery.com>
When in automatic smps mode (default for station mode),
mac80211 configures dynamic smps when the station enters
powersave.
However, drivers might prefer using different modes in this
case (e.g. due to major throughput degradation).
Add a new hw->smps_mode_in_ps field that can be configured
by the driver in order to override the default smps dynamic mode.
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
include/net/mac80211.h | 5 +++++
net/mac80211/cfg.c | 2 +-
net/mac80211/debugfs_netdev.c | 11 +++++++----
net/mac80211/main.c | 1 +
net/mac80211/mlme.c | 7 ++++++-
5 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 3ecf635..637b797 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1615,6 +1615,10 @@ enum ieee80211_hw_flags {
* @uapsd_max_sp_len: maximum number of total buffered frames the WMM AP may
* deliver to a WMM STA during any Service Period triggered by the WMM STA.
* Use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
+ *
+ * @smps_mode_in_ps: smps mode to use when automatic smps mode is configured.
+ * The default is _DYNAMIC.
+ * Use the %IEEE80211_SMPS_* values.
*/
struct ieee80211_hw {
struct ieee80211_conf conf;
@@ -1642,6 +1646,7 @@ struct ieee80211_hw {
netdev_features_t netdev_features;
u8 uapsd_queues;
u8 uapsd_max_sp_len;
+ enum ieee80211_smps_mode smps_mode_in_ps;
};
/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 7aa38ce..1932126 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2364,7 +2364,7 @@ int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
if (smps_mode == IEEE80211_SMPS_AUTOMATIC) {
if (sdata->u.mgd.powersave)
- smps_mode = IEEE80211_SMPS_DYNAMIC;
+ smps_mode = sdata->local->hw.smps_mode_in_ps;
else
smps_mode = IEEE80211_SMPS_OFF;
}
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index cafe614..66dff46 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -212,16 +212,19 @@ static int ieee80211_set_smps(struct ieee80211_sub_if_data *sdata,
enum ieee80211_smps_mode smps_mode)
{
struct ieee80211_local *local = sdata->local;
+ enum ieee80211_smps_mode target_mode = smps_mode;
int err;
+ /* in case of auto, hw.smps_mode_in_ps will be configured when in psm */
+ if (smps_mode == IEEE80211_SMPS_AUTOMATIC)
+ target_mode = local->hw.smps_mode_in_ps;
+
if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_STATIC_SMPS) &&
- smps_mode == IEEE80211_SMPS_STATIC)
+ target_mode == IEEE80211_SMPS_STATIC)
return -EINVAL;
- /* auto should be dynamic if in PS mode */
if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS) &&
- (smps_mode == IEEE80211_SMPS_DYNAMIC ||
- smps_mode == IEEE80211_SMPS_AUTOMATIC))
+ target_mode == IEEE80211_SMPS_DYNAMIC)
return -EINVAL;
/* supported only on managed interfaces for now */
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 21d5d44..885c8e3 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -585,6 +585,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES;
local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
+ local->hw.smps_mode_in_ps = IEEE80211_SMPS_DYNAMIC;
local->user_power_level = IEEE80211_UNSET_POWER_LEVEL;
wiphy->ht_capa_mod_mask = &mac80211_ht_capa_mod_mask;
wiphy->vht_capa_mod_mask = &mac80211_vht_capa_mod_mask;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 45a87ee..007cc4d 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -3700,7 +3700,12 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata)
ifmgd->uapsd_max_sp_len = sdata->local->hw.uapsd_max_sp_len;
ifmgd->p2p_noa_index = -1;
- if (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS)
+ /* set automatic smps by default, if hw.smps_mode_in_ps is supported */
+ if (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS &&
+ sdata->local->hw.smps_mode_in_ps == IEEE80211_SMPS_DYNAMIC)
+ ifmgd->req_smps = IEEE80211_SMPS_AUTOMATIC;
+ else if (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_STATIC_SMPS &&
+ sdata->local->hw.smps_mode_in_ps == IEEE80211_SMPS_STATIC)
ifmgd->req_smps = IEEE80211_SMPS_AUTOMATIC;
else
ifmgd->req_smps = IEEE80211_SMPS_OFF;
--
1.8.4.rc3
^ permalink raw reply related
* [PATCH 1/3] mac80211: fix some snprintf misuses
From: Johannes Berg @ 2013-08-30 8:49 UTC (permalink / raw)
To: linux-wireless; +Cc: Eliad Peller
From: Eliad Peller <eliad@wizery.com>
In some debugfs related functions snprintf was used
while scnprintf should have been used instead.
(blindly adding the return value of snprintf and supplying
it to the next snprintf might result in buffer overflow when
the input is too big)
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
net/mac80211/debugfs.c | 55 ++++++++++++++++++++------------------
net/mac80211/rc80211_pid_debugfs.c | 26 +++++++++---------
net/wireless/debugfs.c | 24 +++++++++--------
3 files changed, 55 insertions(+), 50 deletions(-)
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
index b0e32d6..5c090e4 100644
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
@@ -103,54 +103,57 @@ static ssize_t hwflags_read(struct file *file, char __user *user_buf,
if (!buf)
return 0;
- sf += snprintf(buf, mxln - sf, "0x%x\n", local->hw.flags);
+ sf += scnprintf(buf, mxln - sf, "0x%x\n", local->hw.flags);
if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)
- sf += snprintf(buf + sf, mxln - sf, "HAS_RATE_CONTROL\n");
+ sf += scnprintf(buf + sf, mxln - sf, "HAS_RATE_CONTROL\n");
if (local->hw.flags & IEEE80211_HW_RX_INCLUDES_FCS)
- sf += snprintf(buf + sf, mxln - sf, "RX_INCLUDES_FCS\n");
+ sf += scnprintf(buf + sf, mxln - sf, "RX_INCLUDES_FCS\n");
if (local->hw.flags & IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING)
- sf += snprintf(buf + sf, mxln - sf,
- "HOST_BCAST_PS_BUFFERING\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "HOST_BCAST_PS_BUFFERING\n");
if (local->hw.flags & IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE)
- sf += snprintf(buf + sf, mxln - sf,
- "2GHZ_SHORT_SLOT_INCAPABLE\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "2GHZ_SHORT_SLOT_INCAPABLE\n");
if (local->hw.flags & IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE)
- sf += snprintf(buf + sf, mxln - sf,
- "2GHZ_SHORT_PREAMBLE_INCAPABLE\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "2GHZ_SHORT_PREAMBLE_INCAPABLE\n");
if (local->hw.flags & IEEE80211_HW_SIGNAL_UNSPEC)
- sf += snprintf(buf + sf, mxln - sf, "SIGNAL_UNSPEC\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SIGNAL_UNSPEC\n");
if (local->hw.flags & IEEE80211_HW_SIGNAL_DBM)
- sf += snprintf(buf + sf, mxln - sf, "SIGNAL_DBM\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SIGNAL_DBM\n");
if (local->hw.flags & IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC)
- sf += snprintf(buf + sf, mxln - sf, "NEED_DTIM_BEFORE_ASSOC\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "NEED_DTIM_BEFORE_ASSOC\n");
if (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT)
- sf += snprintf(buf + sf, mxln - sf, "SPECTRUM_MGMT\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SPECTRUM_MGMT\n");
if (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION)
- sf += snprintf(buf + sf, mxln - sf, "AMPDU_AGGREGATION\n");
+ sf += scnprintf(buf + sf, mxln - sf, "AMPDU_AGGREGATION\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_PS)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_PS\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SUPPORTS_PS\n");
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)
- sf += snprintf(buf + sf, mxln - sf, "PS_NULLFUNC_STACK\n");
+ sf += scnprintf(buf + sf, mxln - sf, "PS_NULLFUNC_STACK\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_PS)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_DYNAMIC_PS\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SUPPORTS_DYNAMIC_PS\n");
if (local->hw.flags & IEEE80211_HW_MFP_CAPABLE)
- sf += snprintf(buf + sf, mxln - sf, "MFP_CAPABLE\n");
+ sf += scnprintf(buf + sf, mxln - sf, "MFP_CAPABLE\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_STATIC_SMPS)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_STATIC_SMPS\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SUPPORTS_STATIC_SMPS\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_DYNAMIC_SMPS\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "SUPPORTS_DYNAMIC_SMPS\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_UAPSD\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SUPPORTS_UAPSD\n");
if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
- sf += snprintf(buf + sf, mxln - sf, "REPORTS_TX_ACK_STATUS\n");
+ sf += scnprintf(buf + sf, mxln - sf,
+ "REPORTS_TX_ACK_STATUS\n");
if (local->hw.flags & IEEE80211_HW_CONNECTION_MONITOR)
- sf += snprintf(buf + sf, mxln - sf, "CONNECTION_MONITOR\n");
+ sf += scnprintf(buf + sf, mxln - sf, "CONNECTION_MONITOR\n");
if (local->hw.flags & IEEE80211_HW_SUPPORTS_PER_STA_GTK)
- sf += snprintf(buf + sf, mxln - sf, "SUPPORTS_PER_STA_GTK\n");
+ sf += scnprintf(buf + sf, mxln - sf, "SUPPORTS_PER_STA_GTK\n");
if (local->hw.flags & IEEE80211_HW_AP_LINK_PS)
- sf += snprintf(buf + sf, mxln - sf, "AP_LINK_PS\n");
+ sf += scnprintf(buf + sf, mxln - sf, "AP_LINK_PS\n");
if (local->hw.flags & IEEE80211_HW_TX_AMPDU_SETUP_IN_HW)
- sf += snprintf(buf + sf, mxln - sf, "TX_AMPDU_SETUP_IN_HW\n");
+ sf += scnprintf(buf + sf, mxln - sf, "TX_AMPDU_SETUP_IN_HW\n");
rv = simple_read_from_buffer(user_buf, count, ppos, buf, strlen(buf));
kfree(buf);
diff --git a/net/mac80211/rc80211_pid_debugfs.c b/net/mac80211/rc80211_pid_debugfs.c
index c97a065..6ff1346 100644
--- a/net/mac80211/rc80211_pid_debugfs.c
+++ b/net/mac80211/rc80211_pid_debugfs.c
@@ -167,29 +167,29 @@ static ssize_t rate_control_pid_events_read(struct file *file, char __user *buf,
* provide large enough buffers. */
length = length < RC_PID_PRINT_BUF_SIZE ?
length : RC_PID_PRINT_BUF_SIZE;
- p = snprintf(pb, length, "%u %lu ", ev->id, ev->timestamp);
+ p = scnprintf(pb, length, "%u %lu ", ev->id, ev->timestamp);
switch (ev->type) {
case RC_PID_EVENT_TYPE_TX_STATUS:
- p += snprintf(pb + p, length - p, "tx_status %u %u",
- !(ev->data.flags & IEEE80211_TX_STAT_ACK),
- ev->data.tx_status.status.rates[0].idx);
+ p += scnprintf(pb + p, length - p, "tx_status %u %u",
+ !(ev->data.flags & IEEE80211_TX_STAT_ACK),
+ ev->data.tx_status.status.rates[0].idx);
break;
case RC_PID_EVENT_TYPE_RATE_CHANGE:
- p += snprintf(pb + p, length - p, "rate_change %d %d",
- ev->data.index, ev->data.rate);
+ p += scnprintf(pb + p, length - p, "rate_change %d %d",
+ ev->data.index, ev->data.rate);
break;
case RC_PID_EVENT_TYPE_TX_RATE:
- p += snprintf(pb + p, length - p, "tx_rate %d %d",
- ev->data.index, ev->data.rate);
+ p += scnprintf(pb + p, length - p, "tx_rate %d %d",
+ ev->data.index, ev->data.rate);
break;
case RC_PID_EVENT_TYPE_PF_SAMPLE:
- p += snprintf(pb + p, length - p,
- "pf_sample %d %d %d %d",
- ev->data.pf_sample, ev->data.prop_err,
- ev->data.int_err, ev->data.der_err);
+ p += scnprintf(pb + p, length - p,
+ "pf_sample %d %d %d %d",
+ ev->data.pf_sample, ev->data.prop_err,
+ ev->data.int_err, ev->data.der_err);
break;
}
- p += snprintf(pb + p, length - p, "\n");
+ p += scnprintf(pb + p, length - p, "\n");
spin_unlock_irqrestore(&events->lock, status);
diff --git a/net/wireless/debugfs.c b/net/wireless/debugfs.c
index 90d0500..4541577 100644
--- a/net/wireless/debugfs.c
+++ b/net/wireless/debugfs.c
@@ -47,17 +47,19 @@ static int ht_print_chan(struct ieee80211_channel *chan,
return 0;
if (chan->flags & IEEE80211_CHAN_DISABLED)
- return snprintf(buf + offset,
- buf_size - offset,
- "%d Disabled\n",
- chan->center_freq);
-
- return snprintf(buf + offset,
- buf_size - offset,
- "%d HT40 %c%c\n",
- chan->center_freq,
- (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) ? ' ' : '-',
- (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) ? ' ' : '+');
+ return scnprintf(buf + offset,
+ buf_size - offset,
+ "%d Disabled\n",
+ chan->center_freq);
+
+ return scnprintf(buf + offset,
+ buf_size - offset,
+ "%d HT40 %c%c\n",
+ chan->center_freq,
+ (chan->flags & IEEE80211_CHAN_NO_HT40MINUS) ?
+ ' ' : '-',
+ (chan->flags & IEEE80211_CHAN_NO_HT40PLUS) ?
+ ' ' : '+');
}
static ssize_t ht40allow_map_read(struct file *file,
--
1.8.4.rc3
^ permalink raw reply related
* [PATCH] ath10k: check chip id from the soc register during probe
From: Kalle Valo @ 2013-08-30 7:17 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
ath10k doesn't support qca988x hw1.0 boards anymore. Unfortunately
the PCI id is the same in hw1.0 and hw2.0 so ath10k tries to use
hw1.0 boards anyway. But without hw1.0 workarounds in place
ath10k just crashes horribly.
To avoid using hw1.0 boards at all add a chip id detection
to ath10k_pci_probe() and fail the probe if hw1.0 id is found.
Also add a warning if there's an unknown chip id but continue
the boot process normally anyway.
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/hw.h | 5 +++++
drivers/net/wireless/ath/ath10k/pci.c | 26 +++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h
index 5708888..933d05d 100644
--- a/drivers/net/wireless/ath/ath10k/hw.h
+++ b/drivers/net/wireless/ath/ath10k/hw.h
@@ -26,8 +26,12 @@
#define SUPPORTED_FW_RELEASE 0
#define SUPPORTED_FW_BUILD 636
+/* QCA988X 1.0 definitions (unsupported) */
+#define QCA988X_HW_1_0_CHIP_ID 0x043000ff
+
/* QCA988X 2.0 definitions */
#define QCA988X_HW_2_0_VERSION 0x4100016c
+#define QCA988X_HW_2_0_CHIP_ID 0x043002ff
#define QCA988X_HW_2_0_FW_DIR "ath10k/QCA988X/hw2.0"
#define QCA988X_HW_2_0_FW_FILE "firmware.bin"
#define QCA988X_HW_2_0_OTP_FILE "otp.bin"
@@ -163,6 +167,7 @@ enum ath10k_mcast2ucast_mode {
#define SOC_LPO_CAL_OFFSET 0x000000e0
#define SOC_LPO_CAL_ENABLE_LSB 20
#define SOC_LPO_CAL_ENABLE_MASK 0x00100000
+#define SOC_CHIP_ID_ADDRESS 0x000000ec
#define WLAN_RESET_CONTROL_COLD_RST_MASK 0x00000008
#define WLAN_RESET_CONTROL_WARM_RST_MASK 0x00000004
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 996efdd..c9e5741a 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -2290,7 +2290,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
int ret = 0;
struct ath10k *ar;
struct ath10k_pci *ar_pci;
- u32 lcr_val;
+ u32 lcr_val, chip_id;
ath10k_dbg(ATH10K_DBG_PCI, "%s\n", __func__);
@@ -2394,6 +2394,30 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
ar_pci->cacheline_sz = dma_get_cache_alignment();
+ ath10k_do_pci_wake(ar);
+ chip_id = ath10k_pci_read32(ar, RTC_SOC_BASE_ADDRESS + SOC_CHIP_ID_ADDRESS);
+ ath10k_do_pci_sleep(ar);
+
+ /* Check that we are not using hw1.0 (some of them have same pci id
+ * as hw2.0) before doing anything else as ath10k crashes horribly
+ * due to missing hw1.0 workarounds. */
+ switch (chip_id) {
+ case QCA988X_HW_1_0_CHIP_ID:
+ ath10k_err("ERROR: qca988x hw1.0 (0x%08x) is not supported\n",
+ chip_id);
+ ret = -EOPNOTSUPP;
+ goto err_iomap;
+
+ case QCA988X_HW_2_0_CHIP_ID:
+ /* known chip id, continue normally */
+ break;
+
+ default:
+ ath10k_warn("Warning: chip id 0x%08x is not known, expect problems\n",
+ chip_id);
+ break;
+ }
+
ret = ath10k_core_register(ar);
if (ret) {
ath10k_err("could not register driver core (%d)\n", ret);
^ permalink raw reply related
* Re: [PATCH net-next] drivers:net: Convert dma_alloc_coherent(...__GFP_ZERO) to dma_zalloc_coherent
From: Joe Perches @ 2013-08-30 4:14 UTC (permalink / raw)
To: David Miller
Cc: netdev, linux-kernel, e1000-devel, linux-wireless, b43-dev, users
In-Reply-To: <20130829.220926.226210132086755040.davem@davemloft.net>
On Thu, 2013-08-29 at 22:09 -0400, David Miller wrote:
> Applied, thanks a lot Joe.
Too bad I didn't know there was a dma_zalloc_coherent
the first time...
cheers, Joe
^ permalink raw reply
* Re: [PATCH net-next] drivers:net: Convert dma_alloc_coherent(...__GFP_ZERO) to dma_zalloc_coherent
From: David Miller @ 2013-08-30 2:09 UTC (permalink / raw)
To: joe; +Cc: netdev, linux-kernel, e1000-devel, linux-wireless, b43-dev, users
In-Reply-To: <1377582323.2658.10.camel@joe-AO722>
From: Joe Perches <joe@perches.com>
Date: Mon, 26 Aug 2013 22:45:23 -0700
> __GFP_ZERO is an uncommon flag and perhaps is better
> not used. static inline dma_zalloc_coherent exists
> so convert the uses of dma_alloc_coherent with __GFP_ZERO
> to the more common kernel style with zalloc.
>
> Remove memset from the static inline dma_zalloc_coherent
> and add just one use of __GFP_ZERO instead.
>
> Trivially reduces the size of the existing uses of
> dma_zalloc_coherent.
>
> Realign arguments as appropriate.
>
> Signed-off-by: Joe Perches <joe@perches.com>
Applied, thanks a lot Joe.
^ permalink raw reply
* (no subject)
From: Blaise Gassend @ 2013-08-30 0:33 UTC (permalink / raw)
To: linux-wireless; +Cc: Catalin Drula
Hi,
Tracking down a customer problem, I recently discovered that Linux
does not currently support hidden SSIDs on DFS channels. As far as I
can tell, there isn't a fundamental reason for this. You could switch
to a frequency, listen for a beacon, once you see the beacon send a
directed probe, and listen for responses. I'm sure there are folks on
this list who have thought about this issue...
- Are there any reasons you know of why my proposed strategy would not
work from a regulatory or technical point of view?
- If a patch were prepared, is this something that would be considered
for mainstream inclusion?
I know that hidden SSIDs are a bad idea. But some customers can be
hard to convince, and dealing with customers who have hidden SSIDs on
DFS channels can be a support burden. If we can make it just work for
them then our life is that much easier.
Regards,
Blaise
^ permalink raw reply
* [PATCH v2 4/4] iw: Print out HotSpot2 IE information.
From: greearb @ 2013-08-29 22:23 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
In-Reply-To: <1377815027-3736-1-git-send-email-greearb@candelatech.com>
From: Ben Greear <greearb@candelatech.com>
Example:
HotSpot 2.0 Indication:
DGAF: 0
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 14a4272... 2686ff3... M scan.c
scan.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index 14a4272..2686ff3 100644
--- a/scan.c
+++ b/scan.c
@@ -1390,8 +1390,21 @@ static inline void print_p2p(const uint8_t type, uint8_t len, const uint8_t *dat
}
}
+static inline void print_hs20_ind(const uint8_t type, uint8_t len, const uint8_t *data)
+{
+ /* I can't find the spec for this...just going off what wireshark uses. */
+ printf("\n");
+ if (len > 0) {
+ printf("\t\tDGAF: %i\n", (int)(data[0] & 0x1));
+ }
+ else {
+ printf("\t\tUnexpected length: %i\n", len);
+ }
+}
+
static const struct ie_print wfa_printers[] = {
[9] = { "P2P", print_p2p, 2, 255, BIT(PRINT_SCAN), },
+ [16] = { "HotSpot 2.0 Indication", print_hs20_ind, 1, 255, BIT(PRINT_SCAN), },
};
static void print_vendor(unsigned char len, unsigned char *data,
--
1.7.3.4
^ permalink raw reply related
* [PATCH v2 3/4] iw: Print 802.11u roaming consortium IE in scan results.
From: greearb @ 2013-08-29 22:23 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
In-Reply-To: <1377815027-3736-1-git-send-email-greearb@candelatech.com>
From: Ben Greear <greearb@candelatech.com>
Example output:
802.11u Roaming Consortium:
ANQP OIs: 0
OI 1: 01010101
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 53cef39... 14a4272... M scan.c
scan.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index 53cef39..14a4272 100644
--- a/scan.c
+++ b/scan.c
@@ -711,6 +711,58 @@ static void print_11u_advert(const uint8_t type, uint8_t len, const uint8_t *dat
}
}
+static void print_11u_rcon(const uint8_t type, uint8_t len, const uint8_t *data)
+{
+ /* See Section 7.3.2.96 in the 802.11u spec. */
+ int idx = 0;
+ int ln0 = data[1] & 0xf;
+ int ln1 = ((data[1] & 0xf0) >> 4);
+ int ln2 = 0;
+ printf("\n");
+
+ if (ln1) {
+ ln2 = len - 2 - ln0 - ln1;
+ }
+ printf("\t\tANQP OIs: %i\n", data[0]);
+
+ if (ln0 > 0) {
+ printf("\t\tOI 1: ");
+ if (2 + ln0 > len) {
+ printf("Invalid IE length.\n");
+ }
+ else {
+ for (idx = 0; idx < ln0; idx++) {
+ printf("%02hx", data[2 + idx]);
+ }
+ printf("\n");
+ }
+ }
+ if (ln1 > 0) {
+ printf("\t\tOI 2: ");
+ if (2 + ln0 + ln1 > len) {
+ printf("Invalid IE length.\n");
+ }
+ else {
+ for (idx = 0; idx < ln1; idx++) {
+ printf("%02hx", data[2 + ln0 + idx]);
+ }
+ printf("\n");
+ }
+ }
+ if (ln2 > 0) {
+ printf("\t\tOI 3: ");
+ if (2 + ln0 + ln1 + ln2 > len) {
+ printf("Invalid IE length.\n");
+ }
+ else {
+ for (idx = 0; idx < ln2; idx++) {
+ printf("%02hx", data[2 + ln0 + ln1 + idx]);
+ }
+ printf("\n");
+ }
+ }
+}
+
static const char *ht_secondary_offset[4] = {
"no secondary",
"above",
@@ -990,6 +1042,7 @@ static const struct ie_print ieprinters[] = {
[127] = { "Extended capabilities", print_capabilities, 0, 255, BIT(PRINT_SCAN), },
[107] = { "802.11u Interworking", print_interworking, 0, 255, BIT(PRINT_SCAN), },
[108] = { "802.11u Advertisement", print_11u_advert, 0, 255, BIT(PRINT_SCAN), },
+ [111] = { "802.11u Roaming Consortium", print_11u_rcon, 0, 255, BIT(PRINT_SCAN), },
};
static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data)
--
1.7.3.4
^ permalink raw reply related
* [PATCH v2 2/4] iw: Print 802.11u Advertisement IE info in scan results.
From: greearb @ 2013-08-29 22:23 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
In-Reply-To: <1377815027-3736-1-git-send-email-greearb@candelatech.com>
From: Ben Greear <greearb@candelatech.com>
Sample output looks like:
802.11u Advertisement:
Query Response Info: 0x7f
Query Response Length Limit: 127
ANQP
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 e8957d1... 53cef39... M scan.c
scan.c | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index e8957d1..53cef39 100644
--- a/scan.c
+++ b/scan.c
@@ -679,6 +679,38 @@ static void print_interworking(const uint8_t type, uint8_t len, const uint8_t *d
data[1], data[2], data[3], data[4], data[5], data[6]);
}
+static void print_11u_advert(const uint8_t type, uint8_t len, const uint8_t *data)
+{
+ /* See Section 7.3.2.93 in the 802.11u spec. */
+ /* TODO: This code below does not decode private protocol IDs */
+ int idx = 0;
+ printf("\n");
+ while (idx < (len - 1)) {
+ uint8_t qri = data[idx];
+ uint8_t proto_id = data[idx + 1];
+ printf("\t\tQuery Response Info: 0x%hx\n", (unsigned short)(qri));
+ printf("\t\t\tQuery Response Length Limit: %i\n",
+ (qri & 0x7f));
+ if (qri & (1<<7))
+ printf("\t\t\tPAME-BI\n");
+ switch(proto_id) {
+ case 0:
+ printf("\t\t\tANQP\n"); break;
+ case 1:
+ printf("\t\t\tMIH Information Service\n"); break;
+ case 2:
+ printf("\t\t\tMIH Command and Event Services Capability Discovery\n"); break;
+ case 3:
+ printf("\t\t\tEmergency Alert System (EAS)\n"); break;
+ case 221:
+ printf("\t\t\tVendor Specific\n"); break;
+ default:
+ printf("\t\t\tReserved: %i\n", proto_id); break;
+ }
+ idx += 2;
+ }
+}
+
static const char *ht_secondary_offset[4] = {
"no secondary",
"above",
@@ -957,6 +989,7 @@ static const struct ie_print ieprinters[] = {
[114] = { "MESH ID", print_ssid, 0, 32, BIT(PRINT_SCAN) | BIT(PRINT_LINK), },
[127] = { "Extended capabilities", print_capabilities, 0, 255, BIT(PRINT_SCAN), },
[107] = { "802.11u Interworking", print_interworking, 0, 255, BIT(PRINT_SCAN), },
+ [108] = { "802.11u Advertisement", print_11u_advert, 0, 255, BIT(PRINT_SCAN), },
};
static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data)
--
1.7.3.4
^ permalink raw reply related
* [PATCH v2 1/4] iw: Print Interworking IE details in scan results.
From: greearb @ 2013-08-29 22:23 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
From: Ben Greear <greearb@candelatech.com>
Output looks like:
802.11u Interworking:
Network Options: 0xf1
Network Type: 1 (Private with Guest)
Internet
ASRA
ESR
UESA
Venue Group: 2 (Business)
Venue Type: 1
HESSID: 00:00:00:00:00:01
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
v2: Fix bracket whitespace as requested.
Fix typo in patch description.
:100644 100644 af21cbc... e8957d1... M scan.c
scan.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/scan.c b/scan.c
index af21cbc..e8957d1 100644
--- a/scan.c
+++ b/scan.c
@@ -614,6 +614,71 @@ static void print_ht_capa(const uint8_t type, uint8_t len, const uint8_t *data)
print_ht_mcs(data + 3);
}
+static const char* ntype_11u(uint8_t t)
+{
+ switch (t) {
+ case 0: return "Private";
+ case 1: return "Private with Guest";
+ case 2: return "Chargeable Public";
+ case 3: return "Free Public";
+ case 4: return "Personal Device";
+ case 5: return "Emergency Services Only";
+ case 14: return "Test or Experimental";
+ case 15: return "Wildcard";
+ default: return "Reserved";
+ }
+}
+
+static const char* vgroup_11u(uint8_t t)
+{
+ switch (t) {
+ case 0: return "Unspecified";
+ case 1: return "Assembly";
+ case 2: return "Business";
+ case 3: return "Educational";
+ case 4: return "Factory and Industrial";
+ case 5: return "Institutional";
+ case 6: return "Mercantile";
+ case 7: return "Residential";
+ case 8: return "Storage";
+ case 9: return "Utility and Miscellaneous";
+ case 10: return "Vehicular";
+ case 11: return "Outdoor";
+ default: return "Reserved";
+ }
+}
+
+static void print_interworking(const uint8_t type, uint8_t len, const uint8_t *data)
+{
+ /* See Section 7.3.2.92 in the 802.11u spec. */
+ printf("\n");
+ if (len >= 1) {
+ uint8_t ano = data[0];
+ printf("\t\tNetwork Options: 0x%hx\n", (unsigned short)(ano));
+ printf("\t\t\tNetwork Type: %i (%s)\n",
+ (int)(ano & 0xf), ntype_11u(ano & 0xf));
+ if (ano & (1<<4))
+ printf("\t\t\tInternet\n");
+ if (ano & (1<<5))
+ printf("\t\t\tASRA\n");
+ if (ano & (1<<6))
+ printf("\t\t\tESR\n");
+ if (ano & (1<<7))
+ printf("\t\t\tUESA\n");
+ }
+ if ((len == 3) || (len == 9)) {
+ printf("\t\tVenue Group: %i (%s)\n",
+ (int)(data[1]), vgroup_11u(data[1]));
+ printf("\t\tVenue Type: %i\n", (int)(data[2]));
+ }
+ if (len == 9)
+ printf("\t\tHESSID: %02hx:%02hx:%02hx:%02hx:%02hx:%02hx\n",
+ data[3], data[4], data[5], data[6], data[7], data[8]);
+ else if (len == 7)
+ printf("\t\tHESSID: %02hx:%02hx:%02hx:%02hx:%02hx:%02hx\n",
+ data[1], data[2], data[3], data[4], data[5], data[6]);
+}
+
static const char *ht_secondary_offset[4] = {
"no secondary",
"above",
@@ -891,6 +956,7 @@ static const struct ie_print ieprinters[] = {
[113] = { "MESH Configuration", print_mesh_conf, 7, 7, BIT(PRINT_SCAN), },
[114] = { "MESH ID", print_ssid, 0, 32, BIT(PRINT_SCAN) | BIT(PRINT_LINK), },
[127] = { "Extended capabilities", print_capabilities, 0, 255, BIT(PRINT_SCAN), },
+ [107] = { "802.11u Interworking", print_interworking, 0, 255, BIT(PRINT_SCAN), },
};
static void print_wifi_wpa(const uint8_t type, uint8_t len, const uint8_t *data)
--
1.7.3.4
^ permalink raw reply related
* [PATCH] mac80211: Remove superfluous is_multicast_ether_addr() call
From: Sergey Ryazanov @ 2013-08-29 21:35 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg, Sergey Ryazanov
Remove superfluous call and use locally stored previous result.
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
---
net/mac80211/tx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 3456c04..102ce8a 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1981,7 +1981,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
* EAPOL frames from the local station.
*/
if (unlikely(!ieee80211_vif_is_mesh(&sdata->vif) &&
- !is_multicast_ether_addr(hdr.addr1) && !authorized &&
+ !multicast && !authorized &&
(cpu_to_be16(ethertype) != sdata->control_port_protocol ||
!ether_addr_equal(sdata->vif.addr, skb->data + ETH_ALEN)))) {
#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
--
1.8.1.5
^ permalink raw reply related
* pull request: wireless-next 2013-08-29
From: John W. Linville @ 2013-08-29 18:53 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev
[-- Attachment #1: Type: text/plain, Size: 32630 bytes --]
Dave,
Please accept this batch of updates intended for the 3.12 stream.
For the mac80211 bits, Johannes says this:
"This time I have various improvements all over the place: IBSS, mesh,
testmode, AP client powersave handling, one of the rare rfkill patches
and some code cleanup."
Also for mac80211:
"And I also have some more changes for -next, just a few small fixes and
improvements, nothing really stands out."
And for iwlwifi:
"This time I have some powersave work (notably uAPSD support), CQM
offloads, support for a new firmware API and various code cleanups."
Regarding the Bluetooth bits, Gustavo says:
"Patches to 3.12, here we have:
* implementation of a proper tty_port for RFCOMM devices, this fixes some
issues people were seeing lately in the kernel.
* Add voice_setting option for SCO, it is used for SCO Codec selection
* bugfixes, small improvements and clean ups"
For the NFC bits, Samuel says:
"With this one we have:
- A few pn533 improvements and minor fixes. Testing our pn533 driver
against Google's NCI stack triggered a few issues that we fixed now.
We also added Tx fragmentation support to this driver.
- More NFC secure element handling. We added a GET_SE netlink command
for getting all the discovered secure elements, and we defined 2
additional secure element netlink event (transaction and connectivity).
We also fixed a couple of typos and copy-paste bugs from the secure
element handling code.
- Firmware download support for the pn544 driver. This chipset can enter a
special mode where it's waiting for firmware blobs to replace the
already flashed one. We now support that mode."
With repect to the ath tree, Kalle says:
"New features in ath10k are rx/tx checsumming in hw and survey scan
implemented by Michal. Also he made fixes to different areas of the
driver, most notable being fixing the case when using two streams and
reducing the number of interface combinations to avoid firmware crashes.
Bartosz did a clean related to how we handle SoC power save in PCI
layer.
For ath6kl Mohammed and Vasanth sent each a patch to fix two infrequent
crashes."
I also pulled the wireless tree into wireless-next to support a
request from Johannes. On top of all that, there are the usual
sort of driver updates. The mwifiex, brcmfmac, brcmsmac, ath9k,
and rt2x00 drivers all get some attention, as does the bcma bus and
a few other random bits here and there.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit 4c9d546f6c522f541dfb01e192ab7101eca0053b:
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/bwh/sfc-next (2013-08-29 01:56:01 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next.git for-davem
for you to fetch changes up to 0d8165e9fca119b804de2cf35674e07c36c9704f:
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem (2013-08-29 14:08:24 -0400)
----------------------------------------------------------------
Alexander Bondar (3):
iwlwifi: mvm: Fix beacon filtering enablement via debugfs
iwlwifi: mvm: Add basic uAPSD client support
iwlwifi: mvm: Add PBW snoozing enablement
Amitkumar Karwar (1):
mwifiex: fix driver unload problem for usb chipsets
Andrea Merello (1):
Update e-mail address for Andrea Merello (resubmit)
Andrei Otcheretianski (1):
iwlwifi: mvm: Implement CQM offloading
Andy Shevchenko (1):
Bluetooth: use DIV_ROUND_UP in suitable places in btmrvl_sdio
Antonio Quartulli (1):
mac80211: ibss - do not scan if not needed when creating an IBSS
Arend van Spriel (17):
brcmfmac: use irq safe spinlock in brcmf_sdbrcm_txdata()
brcmfmac: .txdata() bus callback should not call brcmf_txcomplete()
brcmfmac: add AMPDU reordering functionality
brcmfmac: ignore IF event if firmware indicates it
brcmfmac: add support for manual TDLS operations
brcmsmac: cosmetic change in phy_lcn.c
brcmsmac: change pa_gain for bcm4313 iPA
brcmsmac: use ARRAY_SIZE in phytbl_lcn.c
brcmsmac: add debug info message providing phy and radio info
brcmsmac: update transmit gain table for lcn phy
brcmsmac: change lcnphy receive i/q calibration routine
brcmsmac: fix TSSI idle estimation
brcmsmac: avoid calling set_txpwr_by_index() twice
brcmsmac: rework switch control table init including iPA BT-combo
brcmsmac: correct phy registers for TSSI-based power control
brcmsmac: reinitialize TSSI power control upon channel switch
brcmsmac: add support for BCM4313 iPA variant
Arron Wang (2):
NFC: Fix secure element state check
NFC: Update secure element state
Avinash Patil (2):
mwifiex: fix ext_capab IE structure definition
mwifiex: drop gratuitous ARP frames
Bartosz Markowski (1):
ath10k: add SoC power save option to PCI features map
Benjamin Tissoires (2):
Bluetooth: hidp: implement hidinput_input_event callback
Bluetooth: hidp: remove wrong send_report at init
Bing Zhao (2):
mwifiex: do not create AP and P2P interfaces upon driver loading
mwifiex: break a long line into two lines
Bob Copeland (1):
mac80211: assign seqnums for group QoS frames
Chun-Yeow Yeoh (2):
mac80211: allow lowest basic rate for unicast management for mesh
mac80211: only respond to probe request with mesh ID
Dan Carpenter (2):
iwlwifi: pcie: returning positive instead of negative
NFC: hci: Fix enable/disable confusion
David Spinadel (2):
cfg80211: add wdev to testmode cmd
mac80211: add vif to testmode cmd
Djalal Harouni (1):
ath5k: debugfs: NULL-terminate strings
Eliad Peller (1):
iwlwifi: mvm: don't clear tbl->win mistakenly
Eric Lapuyade (5):
NFC: Move nfc_fw_download_done() definition from private to public
NFC: pn544: i2c: Add firmware download mode power-on support
NFC: netlink: Add result of firmware operation to completion event
NFC: pn544: Add firmware operations hci ops
NFC: pn544: i2c: Add firmware download implementation for pn544
Eyal Shapira (4):
iwlwifi: mvm: remove rate_scale_data debugfs entry
iwlwifi: mvm: remove unused fields of iwl_rs_rate_info
iwlwifi: mvm: remove MIMO3 from rate scale code
iwlwifi: mvm: remove unused param of rs_dbgfs_set_mcs
Eytan Lifshitz (1):
iwlwifi: mvm: add support to the new FW time event API
Felix Fietkau (8):
ath9k: fix rx descriptor related race condition
ath9k: shrink a few data structures by reordering fields
ath9k: remove ath9k_sta_remove_debugfs
ath9k: simplify debugfs chainmask handling
ath9k: avoid accessing MRC registers on single-chain devices
ath9k: simplify ath_tid_drain
ath9k: reset buffer stale flag in ath_tx_get_tid_subframe
mac80211: add a flag to indicate CCK support for HT clients
Franky Lin (4):
brcmfmac: abstract tx packet processing functions
brcmfmac: remove align from brcmf_bus structure
brcmfmac: streamline sdio bus header code
brcmfmac: use configurable sdio bus header length for tx packet
Frédéric Dalleau (10):
Bluetooth: Use hci_connect_sco directly
Bluetooth: Remove unused mask parameter in sco_conn_defer_accept
Bluetooth: Add Bluetooth socket voice option
Bluetooth: Add constants for SCO airmode
Bluetooth: Use voice setting in deferred SCO connection request
Bluetooth: Parameters for outgoing SCO connections
Bluetooth: Add constants and macro declaration for transparent data
Bluetooth: Prevent transparent SCO on older devices
Bluetooth: Handle specific error for SCO connection fallback
Bluetooth: Add SCO connection fallback
Gabor Juhos (12):
rt2x00: rt2800lib: introduce rt2800_get_txwi_rxwi_size helper
rt2x00: rt2800pci: fix AUX_CTRL register setup for RT3090/3390/3593/5592
rt2x00: rt2800: rename HW_BEACON_OFFSET macro
rt2x00: rt2800lib: pass beacon index to rt2800_clear_beacon_register
rt2x00: rt2800lib: fix frequency offset boundary calculation
rt2x00: rt2800lib: optimize frequency offset adjustment
rt2x00: rt2800lib: use a MCU command for frequency adjustment on USB devices
rt2x00: rt2800lib: use step-by-step frequency offset adjustment on MMIO devices
rt2x00: rt2800lib: move rt2800_adjust_freq_offset function
rt2x00: rt2800lib: adjust frequency offset for RF3053
rt2x00: rt2800lib: add rt2800_hw_beacon_base helper
rt2x00: rt2800lib: don't hardcode beacon offsets
Gianluca Anzolin (6):
Bluetooth: Take proper tty_struct references
Bluetooth: Remove the device from the list in the destructor
Bluetooth: Move the tty initialization and cleanup out of open/close
Bluetooth: Implement .activate, .shutdown and .carrier_raised methods
Bluetooth: Fix the reference counting of tty_port
Bluetooth: Purge the dlc->tx_queue to avoid circular dependency
Gustavo Padovan (1):
Bluetooth: Add missing braces to an "else if"
Hante Meuleman (2):
brcmfmac: always use worker thread for tx data.
brcmfmac: no fws locking outside fws module.
Hauke Mehrtens (6):
bcma: change max PCI read request size to 128
bcma: add method to power up and down the PCIe core by wifi driver
brcmsmac: use bcma PCIe up and down functions
bcma: do not export bcma_core_pci_extend_L1timer()
bcma: add bcma_core_pci_power_save()
b43: call PCIe up and down functions
Helmut Schaa (1):
ath9k_htc: Restore skb headroom when returning skb to mac80211
Ido Yariv (3):
iwlwifi: pcie: Refactor iwl_queue_space
iwlwifi: pcie: Refactor iwl_rxq_space
iwlwifi: pcie: Remove duplicate code from pcie irq handlers
Jingoo Han (1):
Bluetooth: replace strict_strtol() with kstrtol()
Johan Almbladh (1):
mac80211: perform power save processing before decryption
Johan Hedberg (1):
Bluetooth: Fix getting SCO socket options in deferred state
Johannes Berg (10):
wireless: make TU conversion macros available
nl80211: clean up CQM settings code
mac80211: add control port protocol TX control flag
iwlwifi: mvm: refactor resume from WoWLAN code
mac80211: add APIs to allow keeping connections after WoWLAN
mac80211: add missing channel context release
mac80211: minstrel_ht: don't use control.flags in TX status path
mac80211: move setting WIPHY_FLAG_SUPPORTS_SCHED_SCAN into drivers
mac80211: ignore (E)CSA in probe response frames
mac80211: fix change_interface queue assignments
John W. Linville (12):
Merge branch 'for-linville' of git://github.com/kvalo/ath
Merge tag 'nfc-next-3.12-1' of git://git.kernel.org/.../sameo/nfc-next
brcmsmac: Fix WARNING caused by lack of calls to dma_mapping_error()
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211-next
Merge branch 'for-john' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211
Merge branch 'master' of git://git.kernel.org/.../bluetooth/bluetooth-next
Merge branch 'master' of git://git.kernel.org/.../linville/wireless
ath9k: ar9003_eeprom.c:3618 fix variable name typo
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211
Merge branch 'for-john' of git://git.kernel.org/.../jberg/mac80211-next
Merge branch 'master' of git://git.kernel.org/.../linville/wireless-next into for-davem
Luciano Coelho (4):
iwlwifi: pcie: don't swallow error codes in iwl_trans_pcie_alloc()
iwlwifi: use a macro for default probe length
iwlwifi: Kconfig: fix help texts wrt 7260 and 3160 devices
iwlwifi: return -ENOMEM instead of NULL when OOM in iwl_drv_start()
Luis Henriques (1):
net: rfkill: Do not ignore errors from regulator_enable()
Marcel Holtmann (2):
Bluetooth: Fix simple whitespace vs tab style issue
Bluetooth: Set different event mask for LE-only controllers
Mark Schulte (1):
rtlwifi: sparse warnings: cast to restricted type
Masami Ichikawa (1):
rt2800usb: Add WLI-UC-G300HP's Product ID.
Matti Gottlieb (1):
iwlwifi: introduce external debug level
Michal Kazior (11):
ath10k: improve tx throughput on slow machines
ath10k: detect the number of spatial streams supported by hw
ath10k: implement rx checksum offloading
ath10k: implement tx checksum offloading
ath10k: implement get_survey()
ath10k: prevent using invalid ringbuffer indexes
ath10k: make sure to use passive scan when n_ssids is 0
ath10k: advertise more conservative intf combinations
ath10k: zero arvif memory on add_interface()
ath10k: fix failpath in MSI-X setup
ath10k: fix device teardown
Mikel Astiz (3):
Bluetooth: Add HCI authentication capabilities macros
Bluetooth: Use defines in in hci_get_auth_req()
Bluetooth: Use defines instead of integer literals
Mohammed Shafi Shajakhan (1):
ath6kl: Fix invalid pointer access on fuzz testing with AP mode
Oleksij Rempel (1):
ath9k_htc: do not use bulk on EP3 and EP4
Olivier Guiter (3):
NFC: pn533: Add extended information frame decoding support
NFC: pn533: Split large Tx frames in chunks
NFC: pn533: Store the correct frame size (normal vs ext)
Samuel Ortiz (12):
MAINTAINERS: Change the NFC subsystem status to Supported
NFC: Document secure element addition/removal netlink events
NFC: Define secure element connectivity and transaction events
NFC: pn533: Fix hardware busy loop when establishing the LLCP link
NFC: pn533: Fix the pn533 polling loop
NFC: pn533: Request System code from SENSF_REQ
NFC: pn533: Unconditionaly select the highest p2p bit rate
NFC: pn533: Enable AUTO RFCA
NFC: Fix SE discovery failure warning condition
NFC: Add a GET_SE netlink API
NFC: pn533: Add delay between each poll frame
NFC: pn533: Add some polling entropy
Simon Wunderlich (12):
mac80211: fix ieee80211_sta_process_chanswitch for 5/10 MHz channels
mac80211: move ibss presp generation in own function
ath9k: always use SIFS times from OFDM for 5/10 MHz
ath9k: use chandef instead of channel_type
ath9k: report 5/10 MHz channels
ath9k: set 5/10 MHz supported channels and fix bitrate
ath9k: announce that ath9k supports 5/10 MHz
ath5k: report 5/10 MHz channels
ath5k: set 5/10 MHz supported channels and fix duration
ath5k: enable support for 5 MHz and 10 MHz channels
ath9k: enable CSA functionality in ath9k
mac80211: ibss: fix ignored channel parameter
Solomon Peachy (2):
cw1200: Display the correct default reference clock.
cw1200: When debug is enabled, display all wakeup conditions for the wait_event_interruptible_timeout() call.
Stanislaw Gruszka (2):
iwl4965: fix rfkill set state regression
rt2800: fix wrong TX power compensation
Sujith Manoharan (28):
ath9k: Use a subroutine to check for "mybeacon"
ath9k: Fix phy error handling for DFS
ath9k: Discard invalid frames early
ath9k: Fix RX crypto processing
ath9k: Fix TSF processing
ath9k: Reorder some functions
ath9k: Fix PHY error processing
ath9k: Fix RX debug statistics
ath9k: Fix RX packet counter
ath9k: Fix RX beacon processing
ath9k: Move the RX poll check to preprocess()
ath9k: Handle corrupt descriptors properly
ath9k: Fix error condition for corrupt descriptors
ath9k: Remove unused function argument
ath9k: Handle invalid RSSI
ath9k: Identify first subframe in an A-MPDU
ath9k: Optimize LNA check
ath9k: Use lockless variant to initialize RX fifo
ath9k: Enable PLL fix only for AR9340/AR9330
ath9k: Add support for AR9485 1.2
ath9k: Add antenna diversity tweak for CUS198
ath9k: Add one more PCI ID for CUS198
ath9k: Fix ASPM for AR9462
ath9k: Fix ASPM workaround usage
ath9k: Fix TX poll work locking
ath9k: Fix DEBUG_FS dependency for ath9k
ath9k: Remove unused ANI commands
ath9k: Enable D3/L1 ASPM fix for AR9462
Thierry Escande (1):
NFC: Fix missing static declarations
Tobias Waldekranz (1):
mwifiex: add missing endian conversions
Vasanthakumar Thiagarajan (1):
ath6kl: Fix race in heart beat polling
Vladimir Kondratiev (2):
wil6210: let IP stack re-check HW TCP/UDP csum errors
cfg80211: add flags to cfg80211_rx_mgmt()
Wei Yongjun (2):
mac80211_hwsim: fix error return code in init_mac80211_hwsim()
zd1201: fix error return code
Documentation/DocBook/80211.tmpl | 1 +
MAINTAINERS | 2 +-
drivers/bcma/driver_pci.c | 65 ++-
drivers/bcma/driver_pci_host.c | 6 +
drivers/bluetooth/btmrvl_debugfs.c | 6 +-
drivers/bluetooth/btmrvl_sdio.c | 4 +-
drivers/net/wireless/ath/ath10k/ce.c | 5 +
drivers/net/wireless/ath/ath10k/core.h | 8 +
drivers/net/wireless/ath/ath10k/htt_rx.c | 40 ++
drivers/net/wireless/ath/ath10k/htt_tx.c | 2 +
drivers/net/wireless/ath/ath10k/mac.c | 79 +++-
drivers/net/wireless/ath/ath10k/pci.c | 70 ++-
drivers/net/wireless/ath/ath10k/pci.h | 11 +-
drivers/net/wireless/ath/ath10k/wmi.c | 87 +++-
drivers/net/wireless/ath/ath10k/wmi.h | 5 +
drivers/net/wireless/ath/ath5k/ath5k.h | 1 +
drivers/net/wireless/ath/ath5k/base.c | 59 ++-
drivers/net/wireless/ath/ath5k/base.h | 2 +-
drivers/net/wireless/ath/ath5k/debug.c | 24 +-
drivers/net/wireless/ath/ath5k/mac80211-ops.c | 2 +-
drivers/net/wireless/ath/ath5k/pcu.c | 2 +
drivers/net/wireless/ath/ath5k/qcu.c | 25 +-
drivers/net/wireless/ath/ath6kl/init.c | 3 +
drivers/net/wireless/ath/ath6kl/main.c | 3 +
drivers/net/wireless/ath/ath6kl/testmode.c | 3 +-
drivers/net/wireless/ath/ath6kl/testmode.h | 7 +-
drivers/net/wireless/ath/ath6kl/wmi.c | 7 +-
drivers/net/wireless/ath/ath9k/Kconfig | 2 +-
drivers/net/wireless/ath/ath9k/ani.c | 3 -
drivers/net/wireless/ath/ath9k/ani.h | 13 +-
drivers/net/wireless/ath/ath9k/ar5008_phy.c | 2 -
drivers/net/wireless/ath/ath9k/ar9002_hw.c | 29 +-
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 9 +-
drivers/net/wireless/ath/ath9k/ar9003_hw.c | 39 +-
drivers/net/wireless/ath/ath9k/ar9003_mac.c | 1 +
drivers/net/wireless/ath/ath9k/ar9003_phy.c | 8 +-
drivers/net/wireless/ath/ath9k/ar9003_phy.h | 2 +
drivers/net/wireless/ath/ath9k/ath9k.h | 24 +-
drivers/net/wireless/ath/ath9k/beacon.c | 21 +
drivers/net/wireless/ath/ath9k/common.c | 67 +--
drivers/net/wireless/ath/ath9k/common.h | 3 +-
drivers/net/wireless/ath/ath9k/debug.c | 104 +----
drivers/net/wireless/ath/ath9k/debug.h | 4 -
drivers/net/wireless/ath/ath9k/hif_usb.c | 38 +-
drivers/net/wireless/ath/ath9k/htc_drv_main.c | 5 +-
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 10 +
drivers/net/wireless/ath/ath9k/hw.c | 19 +-
drivers/net/wireless/ath/ath9k/hw.h | 2 +
drivers/net/wireless/ath/ath9k/init.c | 39 +-
drivers/net/wireless/ath/ath9k/link.c | 2 +-
drivers/net/wireless/ath/ath9k/mac.c | 4 +-
drivers/net/wireless/ath/ath9k/mac.h | 2 +
drivers/net/wireless/ath/ath9k/main.c | 29 +-
drivers/net/wireless/ath/ath9k/pci.c | 67 +++
drivers/net/wireless/ath/ath9k/rc.c | 9 +-
drivers/net/wireless/ath/ath9k/recv.c | 506 ++++++++++++---------
drivers/net/wireless/ath/ath9k/reg.h | 6 +-
drivers/net/wireless/ath/ath9k/xmit.c | 32 +-
drivers/net/wireless/ath/carl9170/main.c | 3 +-
drivers/net/wireless/ath/wil6210/txrx.c | 12 +-
drivers/net/wireless/ath/wil6210/wmi.c | 2 +-
drivers/net/wireless/b43/main.c | 14 +
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 16 +-
.../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 1 -
drivers/net/wireless/brcm80211/brcmfmac/dhd.h | 31 +-
drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h | 8 +-
.../net/wireless/brcm80211/brcmfmac/dhd_linux.c | 279 ++++++++++--
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 481 ++++++++++++--------
drivers/net/wireless/brcm80211/brcmfmac/fweh.c | 4 +
.../net/wireless/brcm80211/brcmfmac/fwil_types.h | 21 +
drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c | 228 +++++-----
drivers/net/wireless/brcm80211/brcmfmac/p2p.c | 4 +-
.../net/wireless/brcm80211/brcmfmac/sdio_host.h | 2 +-
drivers/net/wireless/brcm80211/brcmfmac/usb.c | 1 -
.../net/wireless/brcm80211/brcmfmac/wl_cfg80211.c | 61 ++-
drivers/net/wireless/brcm80211/brcmsmac/aiutils.c | 21 -
drivers/net/wireless/brcm80211/brcmsmac/aiutils.h | 3 -
drivers/net/wireless/brcm80211/brcmsmac/dma.c | 15 +-
drivers/net/wireless/brcm80211/brcmsmac/main.c | 12 +-
.../net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 399 ++++++++++------
.../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.c | 405 +++++++++--------
.../wireless/brcm80211/brcmsmac/phy/phytbl_lcn.h | 1 +
drivers/net/wireless/cw1200/bh.c | 4 +-
drivers/net/wireless/cw1200/main.c | 2 +-
drivers/net/wireless/iwlegacy/4965-mac.c | 2 +-
drivers/net/wireless/iwlwifi/Kconfig | 13 +-
drivers/net/wireless/iwlwifi/dvm/tx.c | 2 +-
drivers/net/wireless/iwlwifi/iwl-debug.h | 2 +
drivers/net/wireless/iwlwifi/iwl-devtrace.h | 7 +-
drivers/net/wireless/iwlwifi/iwl-drv.c | 10 +-
drivers/net/wireless/iwlwifi/iwl-fw.h | 5 +
drivers/net/wireless/iwlwifi/mvm/constants.h | 9 +
drivers/net/wireless/iwlwifi/mvm/d3.c | 151 +++---
drivers/net/wireless/iwlwifi/mvm/debugfs.c | 17 +-
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h | 24 +-
drivers/net/wireless/iwlwifi/mvm/fw-api.h | 228 +++++++---
drivers/net/wireless/iwlwifi/mvm/mac80211.c | 29 +-
drivers/net/wireless/iwlwifi/mvm/mvm.h | 27 +-
drivers/net/wireless/iwlwifi/mvm/power.c | 199 +++++++-
drivers/net/wireless/iwlwifi/mvm/rs.c | 474 +++----------------
drivers/net/wireless/iwlwifi/mvm/rs.h | 64 +--
drivers/net/wireless/iwlwifi/mvm/rx.c | 61 ++-
drivers/net/wireless/iwlwifi/mvm/time-event.c | 103 +++--
drivers/net/wireless/iwlwifi/mvm/tx.c | 9 +-
drivers/net/wireless/iwlwifi/pcie/drv.c | 6 +-
drivers/net/wireless/iwlwifi/pcie/rx.c | 43 +-
drivers/net/wireless/iwlwifi/pcie/trans.c | 31 +-
drivers/net/wireless/iwlwifi/pcie/tx.c | 38 +-
drivers/net/wireless/mac80211_hwsim.c | 5 +-
drivers/net/wireless/mwifiex/11n.c | 16 +-
drivers/net/wireless/mwifiex/11n_aggr.c | 3 +-
drivers/net/wireless/mwifiex/cfg80211.c | 1 +
drivers/net/wireless/mwifiex/decl.h | 9 +
drivers/net/wireless/mwifiex/fw.h | 2 +-
drivers/net/wireless/mwifiex/init.c | 1 +
drivers/net/wireless/mwifiex/main.c | 14 -
drivers/net/wireless/mwifiex/main.h | 3 +-
drivers/net/wireless/mwifiex/sdio.c | 6 +-
drivers/net/wireless/mwifiex/sta_cmdresp.c | 2 +-
drivers/net/wireless/mwifiex/sta_rx.c | 49 ++
drivers/net/wireless/mwifiex/usb.c | 50 +-
drivers/net/wireless/mwifiex/util.c | 4 +-
drivers/net/wireless/rt2x00/rt2800.h | 5 +-
drivers/net/wireless/rt2x00/rt2800lib.c | 142 ++++--
drivers/net/wireless/rt2x00/rt2800lib.h | 4 +
drivers/net/wireless/rt2x00/rt2800pci.c | 19 +-
drivers/net/wireless/rt2x00/rt2800usb.c | 12 +-
drivers/net/wireless/rtl818x/rtl8180/dev.c | 6 +-
drivers/net/wireless/rtl818x/rtl8180/grf5101.c | 2 +-
drivers/net/wireless/rtl818x/rtl8180/grf5101.h | 2 +-
drivers/net/wireless/rtl818x/rtl8180/max2820.c | 2 +-
drivers/net/wireless/rtl818x/rtl8180/max2820.h | 2 +-
drivers/net/wireless/rtl818x/rtl8180/rtl8225.c | 4 +-
drivers/net/wireless/rtl818x/rtl8180/sa2400.c | 2 +-
drivers/net/wireless/rtl818x/rtl8180/sa2400.h | 2 +-
drivers/net/wireless/rtl818x/rtl8187/dev.c | 6 +-
drivers/net/wireless/rtl818x/rtl8187/rtl8187.h | 4 +-
drivers/net/wireless/rtl818x/rtl8187/rtl8225.c | 4 +-
drivers/net/wireless/rtl818x/rtl8187/rtl8225.h | 4 +-
drivers/net/wireless/rtl818x/rtl818x.h | 4 +-
drivers/net/wireless/rtlwifi/ps.c | 16 +-
drivers/net/wireless/ti/wlcore/main.c | 3 +-
drivers/net/wireless/ti/wlcore/testmode.c | 3 +-
drivers/net/wireless/ti/wlcore/testmode.h | 3 +-
drivers/net/wireless/zd1201.c | 8 +-
drivers/nfc/nfcsim.c | 6 +-
drivers/nfc/pn533.c | 389 ++++++++++++----
drivers/nfc/pn544/i2c.c | 360 ++++++++++++++-
drivers/nfc/pn544/mei.c | 2 +-
drivers/nfc/pn544/pn544.c | 20 +-
drivers/nfc/pn544/pn544.h | 7 +-
drivers/staging/rtl8187se/ieee80211/ieee80211.h | 2 +-
drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c | 2 +-
.../rtl8187se/ieee80211/ieee80211_softmac.c | 2 +-
.../rtl8187se/ieee80211/ieee80211_softmac_wx.c | 2 +-
drivers/staging/rtl8187se/ieee80211/ieee80211_tx.c | 2 +-
drivers/staging/rtl8187se/r8180.h | 2 +-
drivers/staging/rtl8187se/r8180_93cx6.h | 2 +-
drivers/staging/rtl8187se/r8180_core.c | 4 +-
drivers/staging/rtl8187se/r8180_hw.h | 2 +-
drivers/staging/rtl8187se/r8180_rtl8225.h | 2 +-
drivers/staging/rtl8187se/r8180_rtl8225z2.c | 2 +-
drivers/staging/rtl8187se/r8180_wx.c | 2 +-
drivers/staging/rtl8187se/r8180_wx.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_cam.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_cam.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_core.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_eeprom.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_eeprom.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_ethtool.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_pci.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_pci.h | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_ps.c | 2 +-
drivers/staging/rtl8192e/rtl8192e/rtl_ps.h | 2 +-
drivers/staging/rtl8192e/rtllib.h | 2 +-
drivers/staging/rtl8192e/rtllib_debug.h | 2 +-
drivers/staging/rtl8192e/rtllib_rx.c | 2 +-
drivers/staging/rtl8192e/rtllib_softmac.c | 2 +-
drivers/staging/rtl8192e/rtllib_softmac_wx.c | 2 +-
drivers/staging/rtl8192e/rtllib_tx.c | 2 +-
drivers/staging/rtl8192u/authors | 2 +-
drivers/staging/rtl8192u/ieee80211/ieee80211.h | 2 +-
drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c | 2 +-
.../staging/rtl8192u/ieee80211/ieee80211_softmac.c | 2 +-
.../rtl8192u/ieee80211/ieee80211_softmac_wx.c | 2 +-
drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c | 2 +-
drivers/staging/rtl8192u/r8180_93cx6.c | 2 +-
drivers/staging/rtl8192u/r8180_93cx6.h | 2 +-
drivers/staging/rtl8192u/r8180_pm.c | 2 +-
drivers/staging/rtl8192u/r8180_pm.h | 2 +-
drivers/staging/rtl8192u/r8190_rtl8256.h | 2 +-
drivers/staging/rtl8192u/r8192U.h | 2 +-
drivers/staging/rtl8192u/r8192U_core.c | 2 +-
drivers/staging/rtl8192u/r8192U_hw.h | 2 +-
drivers/staging/rtl8192u/r8192U_wx.c | 2 +-
drivers/staging/rtl8192u/r8192U_wx.h | 2 +-
include/linux/bcma/bcma_driver_pci.h | 24 +-
include/linux/ieee80211.h | 4 +
include/linux/platform_data/brcmfmac-sdio.h | 6 +
include/net/bluetooth/bluetooth.h | 8 +
include/net/bluetooth/hci.h | 7 +
include/net/bluetooth/hci_core.h | 10 +-
include/net/bluetooth/sco.h | 1 +
include/net/cfg80211.h | 8 +-
include/net/mac80211.h | 110 ++++-
include/net/nfc/nfc.h | 3 +
include/uapi/linux/nfc.h | 20 +
include/uapi/linux/nl80211.h | 16 +
net/bluetooth/hci_conn.c | 62 ++-
net/bluetooth/hci_core.c | 14 +-
net/bluetooth/hci_event.c | 29 +-
net/bluetooth/hidp/core.c | 40 +-
net/bluetooth/l2cap_core.c | 3 +-
net/bluetooth/rfcomm/tty.c | 271 +++++------
net/bluetooth/sco.c | 85 +++-
net/mac80211/cfg.c | 15 +-
net/mac80211/ibss.c | 226 +++++----
net/mac80211/ieee80211_i.h | 3 -
net/mac80211/iface.c | 19 +-
net/mac80211/key.c | 154 ++++++-
net/mac80211/main.c | 3 -
net/mac80211/mesh.c | 3 +
net/mac80211/mlme.c | 20 +-
net/mac80211/rate.c | 23 +-
net/mac80211/rc80211_minstrel_ht.c | 5 +-
net/mac80211/rx.c | 407 +++++++++--------
net/mac80211/tx.c | 14 +-
net/mac80211/util.c | 2 +-
net/nfc/core.c | 22 +-
net/nfc/hci/core.c | 2 +-
net/nfc/netlink.c | 95 +++-
net/nfc/nfc.h | 5 +-
net/rfkill/rfkill-regulator.c | 8 +-
net/wireless/mlme.c | 4 +-
net/wireless/nl80211.c | 80 ++--
net/wireless/nl80211.h | 2 +-
net/wireless/rdev-ops.h | 5 +-
net/wireless/trace.h | 8 +-
241 files changed, 5440 insertions(+), 2926 deletions(-)
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply
* Re: [BUG] iwlwifi Microcode SW error (firmware version: 18.168.6.1)
From: adam.gradzki @ 2013-08-29 16:35 UTC (permalink / raw)
To: Luciano Coelho, linux-wireless
In-Reply-To: <1377751965.4418.4.camel@porter.coelho.fi>
Hi Luca,
I have been having wireless connectivity problems indoors on campus with this
Intel card since I bought this laptop in September 2012. Quite often the
wireless is completely unusable.
I can reliably reproduce this problem whenever I attempt to connect to the
University of Pittsburgh network in several locations indoors around campus.
The problem is very prominent when I am around APs with 6+ clients around me.
I have attached a link to my complete system log dump over 3 reboot cycles
today.
I can connect sporadically and send a few bytes here and there before the
wireless becomes completely unusable
I have tried connecting in Windows 8 x64 and I also experience the same
issues, except that my network adapter goes into "Limited connectivity" mode
and gives me a 169.x.x.x address with no IPv4 gateway.
Here is the link to my logs:
http://paste.ubuntu.com/6040891/
~ Adam
On Thursday, August 29, 2013 07:52:45 AM Luciano Coelho wrote:
> On Thu, 2013-08-29 at 00:38 -0400, adam.gradzki@gmail.com wrote:
> > Hi Luca,
> >
> > I was browsing the web while in a large hall with many connected wireless
> > clients. There were also several routers sharing a common SSID. I remember
> > playing with various RTS and fragmentation thresholds so this may have
> > been
> > the trigger. The connection itself involved WPA2 Enterprise PEAP w/
> > MSCHAPv2 authentication. I wish I could go into more detail but I was
> > browsing the system log long after the fact so I'm having trouble
> > remembering things off the top of my head.
> >
> > Linux laptop 3.10.9-1-ARCH #1 SMP PREEMPT Wed Aug 21 13:49:35 CEST 2013
> > x86_64 GNU/Linux
>
> Thanks again! I'll follow this up internally.
>
> --
> Cheers,
> Luca.
^ permalink raw reply
* [PATCH v3 2/2] ath10k: implement per-VDEV FW statistics
From: Bartosz Markowski @ 2013-08-29 12:07 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless, Bartosz Markowski
In-Reply-To: <1377778061-22331-1-git-send-email-bartosz.markowski@tieto.com>
The WMI_REQUEST_PEER_STAT command with latst (1.0.0.716) FW
can return per-VDEV statistics. Using debugfs we can fetch this info now.
This is a backward compatible change. In case of older FW the VDEV
statistics are simply not returned.
Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com>
---
drivers/net/wireless/ath/ath10k/core.h | 27 ++++++++++
drivers/net/wireless/ath/ath10k/debug.c | 78 ++++++++++++++++++++++-----
drivers/net/wireless/ath/ath10k/wmi.c | 4 +-
drivers/net/wireless/ath/ath10k/wmi.h | 87 ++++++++++++++++++++++++++-----
4 files changed, 170 insertions(+), 26 deletions(-)
diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
index ab05c4c..523c79d 100644
--- a/drivers/net/wireless/ath/ath10k/core.h
+++ b/drivers/net/wireless/ath/ath10k/core.h
@@ -119,10 +119,32 @@ struct ath10k_wmi {
struct work_struct wmi_event_work;
};
+struct ath10k_snr_info {
+ s32 beacon_snr;
+ s32 data_snr;
+};
+
+struct ath10k_vdev_stat {
+ u32 vdev_id;
+ struct ath10k_snr_info vdev_snr;
+ u32 tx_frames_count[MAX_AC];
+ u32 rx_frames_count;
+ u32 multiple_retry_cnt[MAX_AC];
+ u32 fail_count[MAX_AC];
+ u32 rts_fail_count;
+ u32 rts_success_count;
+ u32 rts_err_count;
+ u32 rx_discard_count;
+ u32 ack_fail_count;
+ u32 tx_rate_history[MAX_TX_RATE_VALUES];
+ u32 bcn_rssi_history[MAX_RSSI_VALUES];
+};
+
struct ath10k_peer_stat {
u8 peer_macaddr[ETH_ALEN];
u32 peer_rssi;
u32 peer_tx_rate;
+ u32 peer_rx_rate;
};
struct ath10k_target_stats {
@@ -176,6 +198,8 @@ struct ath10k_target_stats {
s32 mpdu_errs;
/* VDEV STATS */
+ struct ath10k_vdev_stat vdev_stat[TARGET_NUM_VDEVS];
+ u8 vdevs;
/* PEER STATS */
u8 peers;
@@ -274,6 +298,9 @@ enum ath10k_fw_features {
/* wmi_mgmt_rx_hdr contains extra RSSI information */
ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX = 0,
+ /* firmware support per-VEDV statistics */
+ ATH10K_FW_FEATURE_VDEV_STATS = 1,
+
/* keep last */
ATH10K_FW_FEATURE_COUNT,
};
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
index fcb40cc..0f2b169 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -228,34 +228,59 @@ void ath10k_debug_read_target_stats(struct ath10k *ar,
tmp += sizeof(struct wmi_pdev_stats);
}
- /* 0 or max vdevs */
- /* Currently firmware does not support VDEV stats */
if (num_vdev_stats) {
struct wmi_vdev_stats *vdev_stats;
+ struct ath10k_vdev_stat *s;
+
+ stats->vdevs = num_vdev_stats;
for (i = 0; i < num_vdev_stats; i++) {
vdev_stats = (struct wmi_vdev_stats *)tmp;
+ s = &stats->vdev_stat[i];
+
+ s->vdev_id = __le32_to_cpu(vdev_stats->vdev_id);
+ s->vdev_snr.beacon_snr =
+ __le32_to_cpu(vdev_stats->vdev_snr.beacon_snr);
+ s->vdev_snr.data_snr =
+ __le32_to_cpu(vdev_stats->vdev_snr.data_snr);
+
+ /* TODO:read remaining vdev stats */
+
tmp += sizeof(struct wmi_vdev_stats);
}
}
if (num_peer_stats) {
- struct wmi_peer_stats *peer_stats;
struct ath10k_peer_stat *s;
+ struct wmi_peer_stats_1 *peer_stats_1;
+ struct wmi_peer_stats_2 *peer_stats_2;
stats->peers = num_peer_stats;
for (i = 0; i < num_peer_stats; i++) {
- peer_stats = (struct wmi_peer_stats *)tmp;
+ peer_stats_1 = (struct wmi_peer_stats_1 *)tmp;
+
s = &stats->peer_stat[i];
- WMI_MAC_ADDR_TO_CHAR_ARRAY(&peer_stats->peer_macaddr,
- s->peer_macaddr);
- s->peer_rssi = __le32_to_cpu(peer_stats->peer_rssi);
+ WMI_MAC_ADDR_TO_CHAR_ARRAY(
+ &peer_stats_1->common.peer_macaddr,
+ s->peer_macaddr);
+ s->peer_rssi =
+ __le32_to_cpu(peer_stats_1->common.peer_rssi);
s->peer_tx_rate =
- __le32_to_cpu(peer_stats->peer_tx_rate);
-
- tmp += sizeof(struct wmi_peer_stats);
+ __le32_to_cpu(peer_stats_1->common.peer_tx_rate);
+
+ if (test_bit(ATH10K_FW_FEATURE_VDEV_STATS,
+ ar->fw_features)) {
+ peer_stats_2 = (struct wmi_peer_stats_2 *)tmp;
+ s->peer_rx_rate =
+ __le32_to_cpu(peer_stats_2->peer_rx_rate);
+
+ tmp += sizeof(struct wmi_peer_stats_2);
+ }
+ else {
+ tmp += sizeof(struct wmi_peer_stats_1);
+ }
}
}
@@ -269,7 +294,7 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
struct ath10k *ar = file->private_data;
struct ath10k_target_stats *fw_stats;
char *buf = NULL;
- unsigned int len = 0, buf_len = 2500;
+ unsigned int len = 0, buf_len = 3000;
ssize_t ret_cnt = 0;
long left;
int i;
@@ -407,6 +432,27 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
len += scnprintf(buf + len, buf_len - len, "%30s %10d\n",
"MPDU errors (FCS, MIC, ENC)", fw_stats->mpdu_errs);
+ if (fw_stats->vdevs) {
+ len += scnprintf(buf + len, buf_len - len, "\n");
+ len += scnprintf(buf + len, buf_len - len, "%30s\n",
+ "ath10k VDEV stats");
+ len += scnprintf(buf + len, buf_len - len, "%30s\n\n",
+ "=================");
+ }
+
+ for (i = 0; i < fw_stats->vdevs; i++) {
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+ "VDEV ID", fw_stats->vdev_stat[i].vdev_id);
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+ "Beacon SNR",
+ fw_stats->vdev_stat[i].vdev_snr.beacon_snr);
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+ "Data SNR",
+ fw_stats->vdev_stat[i].vdev_snr.data_snr);
+ len += scnprintf(buf + len, buf_len - len, "\n");
+ }
+
+
len += scnprintf(buf + len, buf_len - len, "\n");
len += scnprintf(buf + len, buf_len - len, "%30s\n",
"ath10k PEER stats");
@@ -417,11 +463,17 @@ static ssize_t ath10k_read_fw_stats(struct file *file, char __user *user_buf,
len += scnprintf(buf + len, buf_len - len, "%30s %pM\n",
"Peer MAC address",
fw_stats->peer_stat[i].peer_macaddr);
- len += scnprintf(buf + len, buf_len - len, "%30s %u\n",
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
"Peer RSSI", fw_stats->peer_stat[i].peer_rssi);
- len += scnprintf(buf + len, buf_len - len, "%30s %u\n",
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
"Peer TX rate",
fw_stats->peer_stat[i].peer_tx_rate);
+
+ if (test_bit(ATH10K_FW_FEATURE_VDEV_STATS, ar->fw_features))
+ len += scnprintf(buf + len, buf_len - len, "%30s %10u\n",
+ "Peer RX rate",
+ fw_stats->peer_stat[i].peer_rx_rate);
+
len += scnprintf(buf + len, buf_len - len, "\n");
}
spin_unlock_bh(&ar->data_lock);
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 32fd5e7..3ebab3d 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -957,8 +957,10 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar,
ar->phy_capability = __le32_to_cpu(ev->phy_capability);
ar->num_rf_chains = __le32_to_cpu(ev->num_rf_chains);
- if (ar->fw_version_build > 636)
+ if (ar->fw_version_build > 636) {
set_bit(ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX, ar->fw_features);
+ set_bit(ATH10K_FW_FEATURE_VDEV_STATS, ar->fw_features);
+ }
if (ar->num_rf_chains > WMI_MAX_SPATIAL_STREAM) {
ath10k_warn("hardware advertises support for more spatial streams than it should (%d > %d)\n",
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 5b94707..99c7ba1 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -60,6 +60,11 @@
*
*/
+#define MAX_AC 4 /* Maximum value of access category */
+
+#define MAX_TX_RATE_VALUES 10 /* Max Tx rates */
+#define MAX_RSSI_VALUES 10 /* Max RSSI values */
+
/* Control Path */
struct wmi_cmd_hdr {
__le32 cmd_id;
@@ -1828,11 +1833,10 @@ enum wmi_stats_id {
struct wmi_request_stats_cmd {
__le32 stats_id;
-
- /*
- * Space to add parameters like
- * peer mac addr
- */
+ /* unique id identifying the VDEV, generated by the caller */
+ __le32 vdev_id;
+ /* peer MAC address */
+ struct wmi_mac_addr peer_macaddr;
} __packed;
/* Suspend option */
@@ -1881,7 +1885,6 @@ struct wmi_stats_event {
/*
* PDEV statistics
- * TODO: add all PDEV stats here
*/
struct wmi_pdev_stats {
__le32 chan_nf; /* Channel noise floor */
@@ -1894,24 +1897,84 @@ struct wmi_pdev_stats {
struct wal_dbg_stats wal; /* WAL dbg stats */
} __packed;
-/*
- * VDEV statistics
- * TODO: add all VDEV stats here
- */
+struct wmi_snr_info {
+ __le32 beacon_snr;
+ __le32 data_snr;
+} __packed;
+
struct wmi_vdev_stats {
+ /* unique id identifying the VDEV, generated by the caller */
__le32 vdev_id;
+ struct wmi_snr_info vdev_snr;
+ /*
+ * Total number of packets(per AC) that were successfully transmitted
+ * (with and without retries, including multi-cast, broadcast)
+ */
+ __le32 tx_frm_cnt[MAX_AC];
+ /*
+ * Total number of packets that were successfully received
+ * (after appropriate filter rules including multi-cast, broadcast)
+ */
+ __le32 rx_frm_cnt;
+ /*
+ * The number of MSDU packets and MMPDU frames per AC that the 802.11
+ * station successfully transmitted after more than one retransmission
+ * attempt
+ */
+ __le32 multiple_retry_cnt[MAX_AC];
+ /* Total number packets(per AC) failed to transmit */
+ __le32 fail_cnt[MAX_AC];
+ /*
+ * Total number of RTS/CTS sequence failures for transmission of a
+ * packet
+ */
+ __le32 rts_fail_cnt;
+ /*
+ * Total number of RTS/CTS sequence success for transmission of a
+ * packet
+ */
+ __le32 rts_succ_cnt;
+ /*
+ * The receive error count.
+ * HAL will provide the RxP FCS error global
+ */
+ __le32 rx_err_cnt;
+ /*
+ * The sum of the receive error count and dropped-receive-buffer
+ * error count. (FCS error)
+ */
+ __le32 rx_discard_cnt;
+ /*
+ * Total number packets failed transmit because of no ACK
+ * from the remote entity
+ */
+ __le32 ack_fail_cnt;
+ /* History of last ten transmit rate, in units of 500 kbit/sec */
+ __le32 tx_rate_history[MAX_TX_RATE_VALUES];
+ /* History of last ten Beacon rssi of the connected Bss */
+ __le32 bcn_rssi_history[MAX_RSSI_VALUES];
} __packed;
/*
* peer statistics.
- * TODO: add more stats
*/
-struct wmi_peer_stats {
+struct wmi_peer_stats_common {
struct wmi_mac_addr peer_macaddr;
__le32 peer_rssi;
__le32 peer_tx_rate;
} __packed;
+struct wmi_peer_stats_1 {
+ struct wmi_peer_stats_common common;
+} __packed;
+
+
+struct wmi_peer_stats_2 {
+ struct wmi_peer_stats_common common;
+ __le32 peer_rx_rate;
+} __packed;
+
+
struct wmi_vdev_create_cmd {
__le32 vdev_id;
__le32 vdev_type;
--
1.7.10
^ permalink raw reply related
* [PATCH v3 0/2] add per-VDEV FW statistics
From: Bartosz Markowski @ 2013-08-29 12:07 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless, Bartosz Markowski
FW 1.0.0.716 brings per-VDEV statistics. This patch-set implements
debugfs mechanism to fetch those. There's still few more fileds we
can read from the FW stats event, which are not covered here.
Changes:
V2:
* introduce wmi_peer_stats_common struct
* fetch and print peer RX rates
* break up wmi_peer_stats_common update into separate patch
V3:
* rebase
* fix sparse endianness warnings
Bartosz Markowski (2):
ath10k: update wal_dbg_tx_stats structure with missing parameter.
ath10k: implement per-VDEV FW statistics
drivers/net/wireless/ath/ath10k/core.h | 27 ++++++++++
drivers/net/wireless/ath/ath10k/debug.c | 78 ++++++++++++++++++++++-----
drivers/net/wireless/ath/ath10k/wmi.c | 4 +-
drivers/net/wireless/ath/ath10k/wmi.h | 90 ++++++++++++++++++++++++++-----
4 files changed, 173 insertions(+), 26 deletions(-)
--
1.7.10
^ permalink raw reply
* [PATCH v3 1/2] ath10k: update wal_dbg_tx_stats structure with missing parameter.
From: Bartosz Markowski @ 2013-08-29 12:07 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless, Bartosz Markowski
In-Reply-To: <1377778061-22331-1-git-send-email-bartosz.markowski@tieto.com>
It's very imporatant to keep these structs up to date with FW abi,
due to the arithmetic we use while read the fw_stats.
Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com>
---
drivers/net/wireless/ath/ath10k/wmi.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 08860c4..5b94707 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -1767,6 +1767,9 @@ struct wal_dbg_tx_stats {
/* wal pdev resets */
__le32 pdev_resets;
+ /* frames dropped due to non-availability of stateless TIDs */
+ __le32 stateless_tid_alloc_failure;
+
__le32 phy_underrun;
/* MPDU is more than txop limit */
--
1.7.10
^ permalink raw reply related
* [PATCH] cfg80211: use the correct macro to check for active monitor support
From: Luciano Coelho @ 2013-08-29 10:26 UTC (permalink / raw)
To: johannes; +Cc: linux-wireless
Use MONITOR_FLAG_ACTIVE, which is a flag mask, instead of
NL80211_MNTR_FLAG_ACTIVE, which is a flag index, when checking if the
hardware supports active monitoring.
Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
---
net/wireless/nl80211.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index af8d84a..626dc3b 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -2421,7 +2421,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
change = true;
}
- if (flags && (*flags & NL80211_MNTR_FLAG_ACTIVE) &&
+ if (flags && (*flags & MONITOR_FLAG_ACTIVE) &&
!(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
return -EOPNOTSUPP;
@@ -2483,7 +2483,7 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
&flags);
- if (!err && (flags & NL80211_MNTR_FLAG_ACTIVE) &&
+ if (!err && (flags & MONITOR_FLAG_ACTIVE) &&
!(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
return -EOPNOTSUPP;
--
1.7.10.4
^ permalink raw reply related
* Re: [BUG] iwlwifi Microcode SW error (firmware version: 18.168.6.1)
From: Luciano Coelho @ 2013-08-29 4:52 UTC (permalink / raw)
To: adam.gradzki; +Cc: linux-wireless
In-Reply-To: <2449090.W0ZgYRKzHN@nuclearreactor>
On Thu, 2013-08-29 at 00:38 -0400, adam.gradzki@gmail.com wrote:
> Hi Luca,
>
> I was browsing the web while in a large hall with many connected wireless
> clients. There were also several routers sharing a common SSID. I remember
> playing with various RTS and fragmentation thresholds so this may have been
> the trigger. The connection itself involved WPA2 Enterprise PEAP w/ MSCHAPv2
> authentication. I wish I could go into more detail but I was browsing the
> system log long after the fact so I'm having trouble remembering things off the
> top of my head.
>
> Linux laptop 3.10.9-1-ARCH #1 SMP PREEMPT Wed Aug 21 13:49:35 CEST 2013 x86_64
> GNU/Linux
Thanks again! I'll follow this up internally.
--
Cheers,
Luca.
^ permalink raw reply
* Re: [BUG] iwlwifi Microcode SW error (firmware version: 18.168.6.1)
From: adam.gradzki @ 2013-08-29 4:38 UTC (permalink / raw)
To: Luciano Coelho; +Cc: linux-wireless
In-Reply-To: <1377750599.4418.3.camel@porter.coelho.fi>
Hi Luca,
I was browsing the web while in a large hall with many connected wireless
clients. There were also several routers sharing a common SSID. I remember
playing with various RTS and fragmentation thresholds so this may have been
the trigger. The connection itself involved WPA2 Enterprise PEAP w/ MSCHAPv2
authentication. I wish I could go into more detail but I was browsing the
system log long after the fact so I'm having trouble remembering things off the
top of my head.
Linux laptop 3.10.9-1-ARCH #1 SMP PREEMPT Wed Aug 21 13:49:35 CEST 2013 x86_64
GNU/Linux
Regards,
Adam
On Thursday, August 29, 2013 07:29:59 AM you wrote:
> Hi Adam,
>
> On Thu, 2013-08-29 at 00:17 -0400, adam.gradzki@gmail.com wrote:
> > I would like to report a problem with the Intel iwlwifi driver
> > Here is what I found in my system log:
> >
> > http://pastebin.com/j5cVsqzz
>
> Thanks for reporting! Could you please give a bit more details on what
> you were doing when this happened? Just a simple connection to an AP?
> Heavy traffic?
>
> --
> Cheers,
> Luca.
^ permalink raw reply
* Re: [BUG] iwlwifi Microcode SW error (firmware version: 18.168.6.1)
From: Luciano Coelho @ 2013-08-29 4:29 UTC (permalink / raw)
To: adam.gradzki; +Cc: linux-wireless
In-Reply-To: <7144869.jC5clVvrrO@nuclearreactor>
Hi Adam,
On Thu, 2013-08-29 at 00:17 -0400, adam.gradzki@gmail.com wrote:
> I would like to report a problem with the Intel iwlwifi driver
> Here is what I found in my system log:
>
> http://pastebin.com/j5cVsqzz
Thanks for reporting! Could you please give a bit more details on what
you were doing when this happened? Just a simple connection to an AP?
Heavy traffic?
--
Cheers,
Luca.
^ permalink raw reply
* [BUG] iwlwifi Microcode SW error (firmware version: 18.168.6.1)
From: adam.gradzki @ 2013-08-29 4:17 UTC (permalink / raw)
To: linux-wireless
I would like to report a problem with the Intel iwlwifi driver
Here is what I found in my system log:
http://pastebin.com/j5cVsqzz
^ permalink raw reply
* Re: [PATCH] ath9k: ar9003_eeprom.c:3618 fix variable name typo
From: Sujith Manoharan @ 2013-08-29 2:22 UTC (permalink / raw)
To: John W. Linville; +Cc: linux-wireless
In-Reply-To: <1377702550-11734-1-git-send-email-linville@tuxdriver.com>
John W. Linville wrote:
> From: "John W. Linville" <linville@tuxdriver.com>
>
> drivers/net/wireless/ath/ath9k/ar9003_eeprom.c: In function 'ar9003_hw_ant_ctrl_apply':
> >> drivers/net/wireless/ath/ath9k/ar9003_eeprom.c:3618: warning: 'regval' is used uninitialized in this function
>
> It seems obvious that 'regval' should have been 'value'...
Good catch and thanks for the fix !
Sujith
^ permalink raw reply
* RE: sd8787 (mwifiex) on big endian system
From: Bing Zhao @ 2013-08-29 0:00 UTC (permalink / raw)
To: Tobias Waldekranz; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <20130828115251.GA3504@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 491 bytes --]
Hi Tobias,
> mwifiex_sdio mmc0:0001:1: event: 1142011.264553: cause: 0x2e
> mwifiex_sdio mmc0:0001:1: AP EVENT: event id: 0x2e
> mwifiex_sdio mmc0:0001:1: cmd_wait_q terminated: -512
> mwifiex_sdio mmc0:0001:1: mwifiex_cmd_timeout_func: Timeout cmd id (1142021.275294) = 0xb1, act = 0x0
The SDIO_INT of the command response might have been missing for some reason.
Could you please apply the debug patch attached for checking the read_bitmap after a timeout?
Thanks,
Bing
[-- Attachment #2: int_missing.diff --]
[-- Type: application/octet-stream, Size: 2772 bytes --]
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
index 2d76147..88fd41f 100644
--- a/drivers/net/wireless/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/mwifiex/cmdevt.c
@@ -25,6 +25,7 @@
#include "wmm.h"
#include "11n.h"
#include "11ac.h"
+#include "sdio.h"
/*
* This function initializes a command node.
@@ -902,8 +903,11 @@ mwifiex_cmd_timeout_func(unsigned long function_context)
{
struct mwifiex_adapter *adapter =
(struct mwifiex_adapter *) function_context;
+ struct sdio_mmc_card *card = adapter->card;
+ const struct mwifiex_sdio_card_reg *reg = card->reg;
struct cmd_ctrl_node *cmd_node;
struct timeval tstamp;
+ u32 bitmap;
adapter->num_cmd_timeout++;
adapter->dbg.num_cmd_timeout++;
@@ -961,6 +965,21 @@ mwifiex_cmd_timeout_func(unsigned long function_context)
dev_err(adapter->dev, "ps_mode=%d ps_state=%d\n",
adapter->ps_mode, adapter->ps_state);
+ bitmap = (u32) card->mp_regs[reg->rd_bitmap_l];
+ bitmap |= ((u32) card->mp_regs[reg->rd_bitmap_u]) << 8;
+ dev_err(adapter->dev, "DBG: old: rd_bitmap=0x%x 0x%x\n",
+ card->mp_rd_bitmap, bitmap);
+ if (adapter->if_ops.read_data_sync) {
+ if (adapter->if_ops.read_data_sync(adapter, card->mp_regs,
+ card->reg->max_mp_regs,
+ REG_PORT | MWIFIEX_SDIO_BYTE_MODE_MASK, 0))
+ dev_err(adapter->dev, "DBG: read mp_regs failed\n");
+ }
+ bitmap = (u32) card->mp_regs[reg->rd_bitmap_l];
+ bitmap |= ((u32) card->mp_regs[reg->rd_bitmap_u]) << 8;
+ dev_err(adapter->dev, "DBG: new: rd_bitmap=0x%x int=0x%x\n",
+ bitmap, card->mp_regs[HOST_INTSTATUS_REG]);
+
if (cmd_node->wait_q_enabled) {
adapter->cmd_wait_q.status = -ETIMEDOUT;
wake_up_interruptible(&adapter->cmd_wait_q.wait);
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h
index 1d72f13..a55d2fb 100644
--- a/drivers/net/wireless/mwifiex/main.h
+++ b/drivers/net/wireless/mwifiex/main.h
@@ -620,6 +620,8 @@ struct mwifiex_if_ops {
int (*dnld_fw) (struct mwifiex_adapter *, struct mwifiex_fw_image *);
void (*card_reset) (struct mwifiex_adapter *);
int (*clean_pcie_ring) (struct mwifiex_adapter *adapter);
+ int (*read_data_sync) (struct mwifiex_adapter *adapter, u8 *buffer,
+ u32 len, u32 port, u8 claim);
};
struct mwifiex_adapter {
diff --git a/drivers/net/wireless/mwifiex/sdio.c b/drivers/net/wireless/mwifiex/sdio.c
index 1576104..58c0641 100644
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -1958,6 +1958,7 @@ static struct mwifiex_if_ops sdio_ops = {
.cmdrsp_complete = mwifiex_sdio_cmdrsp_complete,
.event_complete = mwifiex_sdio_event_complete,
.card_reset = mwifiex_sdio_card_reset,
+ .read_data_sync = mwifiex_read_data_sync,
};
/*
^ permalink raw reply related
* [PATCH v2 rebased] staging: vt6656: device.h Replace typedef struct _RCB
From: Malcolm Priestley @ 2013-08-28 20:12 UTC (permalink / raw)
To: gregkh; +Cc: linux-wireless
Replace with struct vnt_rcb
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
---
drivers/staging/vt6656/device.h | 20 +++++++++-----------
drivers/staging/vt6656/dpc.c | 10 +++++-----
drivers/staging/vt6656/dpc.h | 4 ++--
drivers/staging/vt6656/main_usb.c | 14 ++++++++------
drivers/staging/vt6656/usbpipe.c | 4 ++--
drivers/staging/vt6656/usbpipe.h | 2 +-
6 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h
index 3151c8f..8e39634 100644
--- a/drivers/staging/vt6656/device.h
+++ b/drivers/staging/vt6656/device.h
@@ -166,8 +166,7 @@ typedef enum _CONTEXT_TYPE {
} CONTEXT_TYPE;
/* RCB (Receive Control Block) */
-typedef struct _RCB
-{
+struct vnt_rcb {
void *Next;
signed long Ref;
void *pDevice;
@@ -175,8 +174,7 @@ typedef struct _RCB
struct vnt_rx_mgmt sMngPacket;
struct sk_buff *skb;
int bBoolInUse;
-
-} RCB, *PRCB;
+};
/* used to track bulk out irps */
struct vnt_usb_send_context {
@@ -416,14 +414,14 @@ struct vnt_private {
u32 int_interval;
/* Variables to track resources for the BULK In Pipe */
- PRCB pRCBMem;
- PRCB apRCB[CB_MAX_RX_DESC];
+ struct vnt_rcb *pRCBMem;
+ struct vnt_rcb *apRCB[CB_MAX_RX_DESC];
u32 cbRD;
- PRCB FirstRecvFreeList;
- PRCB LastRecvFreeList;
+ struct vnt_rcb *FirstRecvFreeList;
+ struct vnt_rcb *LastRecvFreeList;
u32 NumRecvFreeList;
- PRCB FirstRecvMngList;
- PRCB LastRecvMngList;
+ struct vnt_rcb *FirstRecvMngList;
+ struct vnt_rcb *LastRecvMngList;
u32 NumRecvMngList;
int bIsRxWorkItemQueued;
int bIsRxMngWorkItemQueued;
@@ -774,7 +772,7 @@ struct vnt_private {
#define DequeueRCB(Head, Tail) \
{ \
- PRCB RCB = Head; \
+ struct vnt_rcb *RCB = Head; \
if (!RCB->Next) { \
Tail = NULL; \
} \
diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c
index 4bc362f..ea7d443 100644
--- a/drivers/staging/vt6656/dpc.c
+++ b/drivers/staging/vt6656/dpc.c
@@ -246,7 +246,7 @@ s_vGetDASA (
*pcbHeaderSize = cbHeaderSize;
}
-int RXbBulkInProcessData(struct vnt_private *pDevice, PRCB pRCB,
+int RXbBulkInProcessData(struct vnt_private *pDevice, struct vnt_rcb *pRCB,
unsigned long BytesToIndicate)
{
struct net_device_stats *pStats = &pDevice->stats;
@@ -271,7 +271,7 @@ int RXbBulkInProcessData(struct vnt_private *pDevice, PRCB pRCB,
/* signed long ldBm = 0; */
int bIsWEP = false; int bExtIV = false;
u32 dwWbkStatus;
- PRCB pRCBIndicate = pRCB;
+ struct vnt_rcb *pRCBIndicate = pRCB;
u8 *pbyDAddress;
u16 *pwPLCP_Length;
u8 abyVaildRate[MAX_RATE]
@@ -1336,7 +1336,7 @@ static int s_bAPModeRxData(struct vnt_private *pDevice, struct sk_buff *skb,
void RXvWorkItem(struct vnt_private *pDevice)
{
int ntStatus;
- PRCB pRCB = NULL;
+ struct vnt_rcb *pRCB = NULL;
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Rx Polling Thread\n");
spin_lock_irq(&pDevice->lock);
@@ -1354,7 +1354,7 @@ void RXvWorkItem(struct vnt_private *pDevice)
}
-void RXvFreeRCB(PRCB pRCB, int bReAllocSkb)
+void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb)
{
struct vnt_private *pDevice = pRCB->pDevice;
@@ -1391,7 +1391,7 @@ void RXvFreeRCB(PRCB pRCB, int bReAllocSkb)
void RXvMngWorkItem(struct vnt_private *pDevice)
{
- PRCB pRCB = NULL;
+ struct vnt_rcb *pRCB = NULL;
struct vnt_rx_mgmt *pRxPacket;
int bReAllocSkb = false;
diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h
index 876468f..95388dc 100644
--- a/drivers/staging/vt6656/dpc.h
+++ b/drivers/staging/vt6656/dpc.h
@@ -36,9 +36,9 @@ void RXvWorkItem(void *Context);
void RXvMngWorkItem(void *Context);
-void RXvFreeRCB(PRCB pRCB, int bReAllocSkb);
+void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb);
-int RXbBulkInProcessData(struct vnt_private *, PRCB pRCB,
+int RXbBulkInProcessData(struct vnt_private *, struct vnt_rcb *pRCB,
unsigned long BytesToIndicate);
#endif /* __RXTX_H__ */
diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
index 37d66a3..5369717 100644
--- a/drivers/staging/vt6656/main_usb.c
+++ b/drivers/staging/vt6656/main_usb.c
@@ -751,8 +751,8 @@ static void device_free_tx_bufs(struct vnt_private *pDevice)
static void device_free_rx_bufs(struct vnt_private *pDevice)
{
- PRCB pRCB;
- int ii;
+ struct vnt_rcb *pRCB;
+ int ii;
for (ii = 0; ii < pDevice->cbRD; ii++) {
@@ -789,8 +789,8 @@ static void device_free_int_bufs(struct vnt_private *pDevice)
static bool device_alloc_bufs(struct vnt_private *pDevice)
{
struct vnt_usb_send_context *pTxContext;
- PRCB pRCB;
- int ii;
+ struct vnt_rcb *pRCB;
+ int ii;
for (ii = 0; ii < pDevice->cbTD; ii++) {
@@ -811,7 +811,8 @@ static bool device_alloc_bufs(struct vnt_private *pDevice)
}
/* allocate RCB mem */
- pDevice->pRCBMem = kzalloc((sizeof(RCB) * pDevice->cbRD), GFP_KERNEL);
+ pDevice->pRCBMem = kzalloc((sizeof(struct vnt_rcb) * pDevice->cbRD),
+ GFP_KERNEL);
if (pDevice->pRCBMem == NULL) {
DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : alloc rx usb context failed\n", pDevice->dev->name);
goto free_tx;
@@ -822,7 +823,8 @@ static bool device_alloc_bufs(struct vnt_private *pDevice)
pDevice->FirstRecvMngList = NULL;
pDevice->LastRecvMngList = NULL;
pDevice->NumRecvFreeList = 0;
- pRCB = (PRCB) pDevice->pRCBMem;
+
+ pRCB = (struct vnt_rcb *)pDevice->pRCBMem;
for (ii = 0; ii < pDevice->cbRD; ii++) {
diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c
index 78749ef..3a03f1d 100644
--- a/drivers/staging/vt6656/usbpipe.c
+++ b/drivers/staging/vt6656/usbpipe.c
@@ -421,7 +421,7 @@ static void s_nsInterruptUsbIoCompleteRead(struct urb *urb)
*
*/
-int PIPEnsBulkInUsbRead(struct vnt_private *pDevice, PRCB pRCB)
+int PIPEnsBulkInUsbRead(struct vnt_private *pDevice, struct vnt_rcb *pRCB)
{
int ntStatus = 0;
struct urb *pUrb;
@@ -479,7 +479,7 @@ int PIPEnsBulkInUsbRead(struct vnt_private *pDevice, PRCB pRCB)
static void s_nsBulkInUsbIoCompleteRead(struct urb *urb)
{
- PRCB pRCB = (PRCB)urb->context;
+ struct vnt_rcb *pRCB = (struct vnt_rcb *)urb->context;
struct vnt_private *pDevice = pRCB->pDevice;
unsigned long bytesRead;
int bIndicateReceive = false;
diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h
index e2a2bce..f537703 100644
--- a/drivers/staging/vt6656/usbpipe.h
+++ b/drivers/staging/vt6656/usbpipe.h
@@ -40,7 +40,7 @@ int PIPEnsControlIn(struct vnt_private *, u8 byRequest, u16 wValue,
u16 wIndex, u16 wLength, u8 *pbyBuffer);
int PIPEnsInterruptRead(struct vnt_private *);
-int PIPEnsBulkInUsbRead(struct vnt_private *, PRCB pRCB);
+int PIPEnsBulkInUsbRead(struct vnt_private *, struct vnt_rcb *pRCB);
int PIPEnsSendBulkOut(struct vnt_private *,
struct vnt_usb_send_context *pContext);
--
1.8.1.2
^ 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