* [PATCH V2 19/31] ath6kl: Remove net_device from ath6kl
From: Vasanthakumar Thiagarajan @ 2011-10-25 14:04 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
Use one which is available in vif structure instead.
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 1 -
drivers/net/wireless/ath/ath6kl/core.h | 1 -
drivers/net/wireless/ath/ath6kl/init.c | 6 +++---
drivers/net/wireless/ath/ath6kl/main.c | 6 +++---
drivers/net/wireless/ath/ath6kl/txrx.c | 16 ++++++++--------
5 files changed, 14 insertions(+), 16 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index e870c9c..636b64e 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -2115,7 +2115,6 @@ struct net_device *ath6kl_interface_add(struct ath6kl *ar, char *name,
vif->wdev.iftype = type;
vif->fw_vif_idx = fw_vif_idx;
ar->wdev = &vif->wdev;
- ar->net_dev = ndev;
init_netdev(ndev);
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 3fb8898..4db0b15 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -446,7 +446,6 @@ enum ath6kl_dev_state {
struct ath6kl {
struct device *dev;
- struct net_device *net_dev;
struct wiphy *wiphy;
struct ath6kl_bmi bmi;
const struct ath6kl_hif_ops *hif_ops;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index fb78a2a..a874665 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -521,7 +521,7 @@ void ath6kl_core_free(struct ath6kl *ar)
int ath6kl_unavail_ev(struct ath6kl *ar)
{
- ath6kl_destroy(ar->net_dev, 1);
+ ath6kl_destroy(ar->vif->ndev, 1);
return 0;
}
@@ -1417,7 +1417,7 @@ static int ath6kl_init(struct ath6kl *ar)
ath6kl_dbg(ATH6KL_DBG_TRC, "%s: name=%s dev=0x%p, ar=0x%p\n",
- __func__, ar->net_dev->name, ar->net_dev, ar);
+ __func__, ndev->name, ndev, ar);
/*
* The reason we have to wait for the target here is that the
@@ -1579,8 +1579,8 @@ err_wq:
void ath6kl_stop_txrx(struct ath6kl *ar)
{
- struct net_device *ndev = ar->net_dev;
struct ath6kl_vif *vif = ar->vif;
+ struct net_device *ndev = vif->ndev;
if (!ndev)
return;
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index 19b64ae..023624d 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -938,7 +938,7 @@ void ath6kl_deep_sleep_enable(struct ath6kl *ar)
switch (vif->sme_state) {
case SME_CONNECTING:
- cfg80211_connect_result(ar->net_dev, vif->bssid, NULL, 0,
+ cfg80211_connect_result(vif->ndev, vif->bssid, NULL, 0,
NULL, 0,
WLAN_STATUS_UNSPECIFIED_FAILURE,
GFP_KERNEL);
@@ -950,7 +950,7 @@ void ath6kl_deep_sleep_enable(struct ath6kl *ar)
* suspend, why? Need to send disconnected event in that
* state.
*/
- cfg80211_disconnected(ar->net_dev, 0, NULL, 0, GFP_KERNEL);
+ cfg80211_disconnected(vif->ndev, 0, NULL, 0, GFP_KERNEL);
break;
}
@@ -995,7 +995,7 @@ static const char *get_hw_id_string(u32 id)
void ath6kl_ready_event(void *devt, u8 *datap, u32 sw_ver, u32 abi_ver)
{
struct ath6kl *ar = devt;
- struct net_device *dev = ar->net_dev;
+ struct net_device *dev = ar->vif->ndev;
memcpy(dev->dev_addr, datap, ETH_ALEN);
ath6kl_dbg(ATH6KL_DBG_TRC, "%s: mac addr = %pM\n",
diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
index 50ff9a4..7e2d601 100644
--- a/drivers/net/wireless/ath/ath6kl/txrx.c
+++ b/drivers/net/wireless/ath/ath6kl/txrx.c
@@ -478,7 +478,7 @@ stop_net_queues:
spin_lock_bh(&ar->lock);
set_bit(NETQ_STOPPED, &vif->flags);
spin_unlock_bh(&ar->lock);
- netif_stop_queue(ar->net_dev);
+ netif_stop_queue(vif->ndev);
return HTC_SEND_FULL_KEEP;
}
@@ -619,7 +619,7 @@ void ath6kl_tx_complete(void *context, struct list_head *packet_queue)
if (test_bit(CONNECTED, &vif->flags)) {
if (!flushing)
- netif_wake_queue(ar->net_dev);
+ netif_wake_queue(vif->ndev);
}
if (wake_event)
@@ -1086,12 +1086,12 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
ath6kl_dbg_dump(ATH6KL_DBG_RAW_BYTES, __func__, "rx ",
skb->data, skb->len);
- skb->dev = ar->net_dev;
+ skb->dev = vif->ndev;
if (!test_bit(WMI_ENABLED, &ar->flag)) {
if (EPPING_ALIGNMENT_PAD > 0)
skb_pull(skb, EPPING_ALIGNMENT_PAD);
- ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
+ ath6kl_deliver_frames_to_nw_stack(vif->ndev, skb);
return;
}
@@ -1174,7 +1174,7 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
while ((skbuff = skb_dequeue(&conn->psq))
!= NULL) {
spin_unlock_bh(&conn->psq_lock);
- ath6kl_data_tx(skbuff, ar->net_dev);
+ ath6kl_data_tx(skbuff, vif->ndev);
spin_lock_bh(&conn->psq_lock);
}
spin_unlock_bh(&conn->psq_lock);
@@ -1230,7 +1230,7 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
return;
}
- if (!(ar->net_dev->flags & IFF_UP)) {
+ if (!(vif->ndev->flags & IFF_UP)) {
dev_kfree_skb(skb);
return;
}
@@ -1261,7 +1261,7 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
}
}
if (skb1)
- ath6kl_data_tx(skb1, ar->net_dev);
+ ath6kl_data_tx(skb1, vif->ndev);
if (skb == NULL) {
/* nothing to deliver up the stack */
@@ -1277,7 +1277,7 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
/* aggregation code will handle the skb */
return;
- ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
+ ath6kl_deliver_frames_to_nw_stack(vif->ndev, skb);
}
static void aggr_timeout(unsigned long arg)
--
1.7.0.4
^ permalink raw reply related
* [PATCH V2 29/31] ath6kl: Add a modparam to enable multi normal interface support
From: Vasanthakumar Thiagarajan @ 2011-10-25 14:04 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
This option lets operate more than one vif in normal mode (AP/STA/IBSS)
when support for multiple vif is enabled. This modparam needs to be used
as
modprobe ath6kl multi_norm_if_support=1
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 23 ++++++++++++++++++++++-
drivers/net/wireless/ath/ath6kl/core.h | 1 +
drivers/net/wireless/ath/ath6kl/init.c | 24 +++++++++++++-----------
3 files changed, 36 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 7713ab4..ae58d9a 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -21,8 +21,10 @@
#include "testmode.h"
static unsigned int ath6kl_p2p;
+static unsigned int multi_norm_if_support;
module_param(ath6kl_p2p, uint, 0644);
+module_param(multi_norm_if_support, uint, 0644);
#define RATETAB_ENT(_rate, _rateid, _flags) { \
.bitrate = (_rate), \
@@ -341,6 +343,16 @@ static bool ath6kl_is_valid_iftype(struct ath6kl *ar, enum nl80211_iftype type,
}
}
+ if (type == NL80211_IFTYPE_P2P_CLIENT ||
+ type == NL80211_IFTYPE_P2P_GO) {
+ for (i = ar->max_norm_iface; i < MAX_NUM_VIF; i++) {
+ if ((ar->avail_idx_map >> i) & BIT(0)) {
+ *if_idx = i;
+ return true;
+ }
+ }
+ }
+
return false;
}
@@ -2094,10 +2106,19 @@ struct ath6kl *ath6kl_core_alloc(struct device *dev)
}
ar = wiphy_priv(wiphy);
- ar->p2p = !!ath6kl_p2p;
+ if (!multi_norm_if_support)
+ ar->p2p = !!ath6kl_p2p;
ar->wiphy = wiphy;
ar->dev = dev;
+ if (multi_norm_if_support)
+ ar->max_norm_iface = 2;
+ else
+ ar->max_norm_iface = 1;
+
+ /* FIXME: Remove this once the multivif support is enabled */
+ ar->max_norm_iface = 1;
+
spin_lock_init(&ar->lock);
spin_lock_init(&ar->mcastpsq_lock);
spin_lock_init(&ar->list_lock);
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 6933fb6..427db08 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -461,6 +461,7 @@ struct ath6kl {
/* Lock to avoid race in vif_list entries among add/del/traverse */
spinlock_t list_lock;
u8 num_vif;
+ u8 max_norm_iface;
u8 avail_idx_map;
spinlock_t lock;
struct semaphore sem;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 2780170..6f5bdff 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -428,7 +428,7 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
int ath6kl_configure_target(struct ath6kl *ar)
{
u32 param, ram_reserved_size;
- u8 fw_iftype, fw_mode = 0, fw_submode;
+ u8 fw_iftype, fw_mode = 0, fw_submode = 0;
int i;
/*
@@ -445,15 +445,19 @@ int ath6kl_configure_target(struct ath6kl *ar)
fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS);
/*
- * submodes : vif[0] - AP/STA/IBSS
- * vif[1] - "P2P dev"/"P2P GO"/"P2P Client"
- * vif[2] - "P2P dev"/"P2P GO"/"P2P Client"
+ * By default, submodes :
+ * vif[0] - AP/STA/IBSS
+ * vif[1] - "P2P dev"/"P2P GO"/"P2P Client"
+ * vif[2] - "P2P dev"/"P2P GO"/"P2P Client"
*/
- fw_submode = HI_OPTION_FW_SUBMODE_NONE |
- (HI_OPTION_FW_SUBMODE_P2PDEV <<
- (1 * HI_OPTION_FW_SUBMODE_BITS)) |
- (HI_OPTION_FW_SUBMODE_P2PDEV <<
- (2 * HI_OPTION_FW_SUBMODE_BITS));
+
+ for (i = 0; i < ar->max_norm_iface; i++)
+ fw_submode |= HI_OPTION_FW_SUBMODE_NONE <<
+ (i * HI_OPTION_FW_SUBMODE_BITS);
+
+ for (i = ar->max_norm_iface; i < MAX_NUM_VIF; i++)
+ fw_submode |= HI_OPTION_FW_SUBMODE_P2PDEV <<
+ (i * HI_OPTION_FW_SUBMODE_BITS);
/*
* FIXME: This needs to be removed once the multivif
@@ -461,8 +465,6 @@ int ath6kl_configure_target(struct ath6kl *ar)
*/
if (ar->p2p)
fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV;
- else
- fw_submode = HI_OPTION_FW_SUBMODE_NONE;
param = HTC_PROTOCOL_VERSION;
if (ath6kl_bmi_write(ar,
--
1.7.0.4
^ permalink raw reply related
* [PATCH V2 30/31] ath6kl: Initialize target wlan values for every vif
From: Vasanthakumar Thiagarajan @ 2011-10-25 14:04 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
Wlan parameters need to be configured for every vif
in target.
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/debug.c | 4 +-
drivers/net/wireless/ath/ath6kl/init.c | 34 +++++++++++++++++++----------
drivers/net/wireless/ath/ath6kl/wmi.c | 35 ++++++++++++++++--------------
drivers/net/wireless/ath/ath6kl/wmi.h | 18 ++++++++-------
4 files changed, 53 insertions(+), 38 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c
index e515c83..725d598 100644
--- a/drivers/net/wireless/ath/ath6kl/debug.c
+++ b/drivers/net/wireless/ath/ath6kl/debug.c
@@ -1188,7 +1188,7 @@ static ssize_t ath6kl_keepalive_write(struct file *file,
if (ret)
return ret;
- ret = ath6kl_wmi_set_keepalive_cmd(ar->wmi, val);
+ ret = ath6kl_wmi_set_keepalive_cmd(ar->wmi, 0, val);
if (ret)
return ret;
@@ -1233,7 +1233,7 @@ static ssize_t ath6kl_disconnect_timeout_write(struct file *file,
if (ret)
return ret;
- ret = ath6kl_wmi_disctimeout_cmd(ar->wmi, val);
+ ret = ath6kl_wmi_disctimeout_cmd(ar->wmi, 0, val);
if (ret)
return ret;
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index 6f5bdff..49f1a94 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -352,7 +352,7 @@ void ath6kl_target_failure(struct ath6kl *ar)
}
-static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
+static int ath6kl_target_config_wlan_params(struct ath6kl *ar, int idx)
{
int status = 0;
int ret;
@@ -362,46 +362,50 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
* default values. Required if checksum offload is needed. Set
* RxMetaVersion to 2.
*/
- if (ath6kl_wmi_set_rx_frame_format_cmd(ar->wmi,
+ if (ath6kl_wmi_set_rx_frame_format_cmd(ar->wmi, idx,
ar->rx_meta_ver, 0, 0)) {
ath6kl_err("unable to set the rx frame format\n");
status = -EIO;
}
if (ar->conf_flags & ATH6KL_CONF_IGNORE_PS_FAIL_EVT_IN_SCAN)
- if ((ath6kl_wmi_pmparams_cmd(ar->wmi, 0, 1, 0, 0, 1,
+ if ((ath6kl_wmi_pmparams_cmd(ar->wmi, idx, 0, 1, 0, 0, 1,
IGNORE_POWER_SAVE_FAIL_EVENT_DURING_SCAN)) != 0) {
ath6kl_err("unable to set power save fail event policy\n");
status = -EIO;
}
if (!(ar->conf_flags & ATH6KL_CONF_IGNORE_ERP_BARKER))
- if ((ath6kl_wmi_set_lpreamble_cmd(ar->wmi, 0,
+ if ((ath6kl_wmi_set_lpreamble_cmd(ar->wmi, idx, 0,
WMI_DONOT_IGNORE_BARKER_IN_ERP)) != 0) {
ath6kl_err("unable to set barker preamble policy\n");
status = -EIO;
}
- if (ath6kl_wmi_set_keepalive_cmd(ar->wmi,
+ if (ath6kl_wmi_set_keepalive_cmd(ar->wmi, idx,
WLAN_CONFIG_KEEP_ALIVE_INTERVAL)) {
ath6kl_err("unable to set keep alive interval\n");
status = -EIO;
}
- if (ath6kl_wmi_disctimeout_cmd(ar->wmi,
+ if (ath6kl_wmi_disctimeout_cmd(ar->wmi, idx,
WLAN_CONFIG_DISCONNECT_TIMEOUT)) {
ath6kl_err("unable to set disconnect timeout\n");
status = -EIO;
}
if (!(ar->conf_flags & ATH6KL_CONF_ENABLE_TX_BURST))
- if (ath6kl_wmi_set_wmm_txop(ar->wmi, WMI_TXOP_DISABLED)) {
+ if (ath6kl_wmi_set_wmm_txop(ar->wmi, idx, WMI_TXOP_DISABLED)) {
ath6kl_err("unable to set txop bursting\n");
status = -EIO;
}
+ /*
+ * FIXME: Make sure p2p configurations are not applied to
+ * non-p2p capable interfaces when multivif support is enabled.
+ */
if (ar->p2p) {
- ret = ath6kl_wmi_info_req_cmd(ar->wmi,
+ ret = ath6kl_wmi_info_req_cmd(ar->wmi, idx,
P2P_FLAG_CAPABILITIES_REQ |
P2P_FLAG_MACADDR_REQ |
P2P_FLAG_HMODEL_REQ);
@@ -413,9 +417,13 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
}
}
+ /*
+ * FIXME: Make sure p2p configurations are not applied to
+ * non-p2p capable interfaces when multivif support is enabled.
+ */
if (ar->p2p) {
/* Enable Probe Request reporting for P2P */
- ret = ath6kl_wmi_probe_report_req_cmd(ar->wmi, true);
+ ret = ath6kl_wmi_probe_report_req_cmd(ar->wmi, idx, true);
if (ret) {
ath6kl_dbg(ATH6KL_DBG_TRC, "failed to enable Probe "
"Request reporting (%d)\n", ret);
@@ -1542,9 +1550,11 @@ static int ath6kl_init(struct ath6kl *ar)
ar->wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM;
- status = ath6kl_target_config_wlan_params(ar);
- if (status)
- goto err_htc_stop;
+ for (i = 0; i < MAX_NUM_VIF; i++) {
+ status = ath6kl_target_config_wlan_params(ar, i);
+ if (status)
+ goto err_htc_stop;
+ }
/*
* Set mac address which is received in ready event
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 1fada31..e6b0960 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -1940,7 +1940,7 @@ int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode)
return ret;
}
-int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u16 idle_period,
+int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
u16 ps_poll_num, u16 dtim_policy,
u16 tx_wakeup_policy, u16 num_tx_to_wakeup,
u16 ps_fail_event_policy)
@@ -1961,12 +1961,12 @@ int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u16 idle_period,
pm->num_tx_to_wakeup = cpu_to_le16(num_tx_to_wakeup);
pm->ps_fail_event_policy = cpu_to_le16(ps_fail_event_policy);
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_POWER_PARAMS_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_POWER_PARAMS_CMDID,
NO_SYNC_WMIFLAG);
return ret;
}
-int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 timeout)
+int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout)
{
struct sk_buff *skb;
struct wmi_disc_timeout_cmd *cmd;
@@ -1979,7 +1979,7 @@ int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 timeout)
cmd = (struct wmi_disc_timeout_cmd *) skb->data;
cmd->discon_timeout = timeout;
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_DISC_TIMEOUT_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_DISC_TIMEOUT_CMDID,
NO_SYNC_WMIFLAG);
if (ret == 0)
@@ -2500,7 +2500,8 @@ int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi)
return ath6kl_wmi_simple_cmd(wmi, 0, WMI_GET_ROAM_TBL_CMDID);
}
-int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 status, u8 preamble_policy)
+int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
+ u8 preamble_policy)
{
struct sk_buff *skb;
struct wmi_set_lpreamble_cmd *cmd;
@@ -2514,7 +2515,7 @@ int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 status, u8 preamble_policy)
cmd->status = status;
cmd->preamble_policy = preamble_policy;
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_LPREAMBLE_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_LPREAMBLE_CMDID,
NO_SYNC_WMIFLAG);
return ret;
}
@@ -2537,7 +2538,7 @@ int ath6kl_wmi_set_rts_cmd(struct wmi *wmi, u16 threshold)
return ret;
}
-int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, enum wmi_txop_cfg cfg)
+int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg)
{
struct sk_buff *skb;
struct wmi_set_wmm_txop_cmd *cmd;
@@ -2553,12 +2554,13 @@ int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, enum wmi_txop_cfg cfg)
cmd = (struct wmi_set_wmm_txop_cmd *) skb->data;
cmd->txop_enable = cfg;
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_WMM_TXOP_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_WMM_TXOP_CMDID,
NO_SYNC_WMIFLAG);
return ret;
}
-int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 keep_alive_intvl)
+int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
+ u8 keep_alive_intvl)
{
struct sk_buff *skb;
struct wmi_set_keepalive_cmd *cmd;
@@ -2571,7 +2573,7 @@ int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 keep_alive_intvl)
cmd = (struct wmi_set_keepalive_cmd *) skb->data;
cmd->keep_alive_intvl = keep_alive_intvl;
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_SET_KEEPALIVE_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_KEEPALIVE_CMDID,
NO_SYNC_WMIFLAG);
if (ret == 0)
@@ -2734,7 +2736,8 @@ int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid,
return 0;
}
-int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 rx_meta_ver,
+int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
+ u8 rx_meta_ver,
bool rx_dot11_hdr, bool defrag_on_host)
{
struct sk_buff *skb;
@@ -2751,7 +2754,7 @@ int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 rx_meta_ver,
cmd->meta_ver = rx_meta_ver;
/* Delete the local aggr state, on host */
- ret = ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_RX_FRAME_FORMAT_CMDID,
+ ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_RX_FRAME_FORMAT_CMDID,
NO_SYNC_WMIFLAG);
return ret;
@@ -2872,7 +2875,7 @@ int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
NO_SYNC_WMIFLAG);
}
-int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, bool enable)
+int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable)
{
struct sk_buff *skb;
struct wmi_probe_req_report_cmd *p;
@@ -2885,11 +2888,11 @@ int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, bool enable)
enable);
p = (struct wmi_probe_req_report_cmd *) skb->data;
p->enable = enable ? 1 : 0;
- return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_PROBE_REQ_REPORT_CMDID,
+ return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_PROBE_REQ_REPORT_CMDID,
NO_SYNC_WMIFLAG);
}
-int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u32 info_req_flags)
+int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags)
{
struct sk_buff *skb;
struct wmi_get_p2p_info *p;
@@ -2902,7 +2905,7 @@ int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u32 info_req_flags)
info_req_flags);
p = (struct wmi_get_p2p_info *) skb->data;
p->info_req_flags = cpu_to_le32(info_req_flags);
- return ath6kl_wmi_cmd_send(wmi, 0, skb, WMI_GET_P2P_INFO_CMDID,
+ return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_GET_P2P_INFO_CMDID,
NO_SYNC_WMIFLAG);
}
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h
index e2f3304..495d2e5 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.h
+++ b/drivers/net/wireless/ath/ath6kl/wmi.h
@@ -2230,18 +2230,18 @@ int ath6kl_wmi_listeninterval_cmd(struct wmi *wmi, u8 if_idx,
u16 listen_interval,
u16 listen_beacons);
int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode);
-int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u16 idle_period,
+int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
u16 ps_poll_num, u16 dtim_policy,
u16 tx_wakup_policy, u16 num_tx_to_wakeup,
u16 ps_fail_event_policy);
-int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 timeout);
int ath6kl_wmi_create_pstream_cmd(struct wmi *wmi, u8 if_idx,
struct wmi_create_pstream_cmd *pstream);
int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
u8 tsid);
+int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout);
int ath6kl_wmi_set_rts_cmd(struct wmi *wmi, u16 threshold);
-int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 status,
+int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
u8 preamble_policy);
int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source);
@@ -2262,8 +2262,9 @@ int ath6kl_wmi_set_tx_pwr_cmd(struct wmi *wmi, u8 if_idx, u8 dbM);
int ath6kl_wmi_get_tx_pwr_cmd(struct wmi *wmi, u8 if_idx);
int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi);
-int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, enum wmi_txop_cfg cfg);
-int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 keep_alive_intvl);
+int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg);
+int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
+ u8 keep_alive_intvl);
int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len);
s32 ath6kl_wmi_get_rate(s8 rate_index);
@@ -2282,7 +2283,8 @@ int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd,
int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid, bool flag);
-int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 rx_meta_version,
+int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
+ u8 rx_meta_version,
bool rx_dot11_hdr, bool defrag_on_host);
int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
@@ -2301,9 +2303,9 @@ int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
const u8 *dst, const u8 *data,
u16 data_len);
-int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, bool enable);
+int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable);
-int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u32 info_req_flags);
+int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags);
int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx);
--
1.7.0.4
^ permalink raw reply related
* [PATCH V2 27/31] ath6kl: Configure inteface information at init time
From: Vasanthakumar Thiagarajan @ 2011-10-25 14:04 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
Virtual interface information need to be configured during
init time to the target. With MAX_NUM_VIF is restricted to
1, currently only a single vif is being configured.
Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/init.c | 45 ++++++++++++++++++++++++-----
drivers/net/wireless/ath/ath6kl/target.h | 3 ++
2 files changed, 40 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c
index d541dc9..e76d118 100644
--- a/drivers/net/wireless/ath/ath6kl/init.c
+++ b/drivers/net/wireless/ath/ath6kl/init.c
@@ -429,11 +429,42 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar)
int ath6kl_configure_target(struct ath6kl *ar)
{
u32 param, ram_reserved_size;
- u8 fw_iftype;
+ u8 fw_iftype, fw_mode = 0, fw_submode;
+ int i;
+ /*
+ * Note: Even though the firmware interface type is
+ * chosen as BSS_STA for all three interfaces, can
+ * be configured to IBSS/AP as long as the fw submode
+ * remains normal mode (0 - AP, STA and IBSS). But
+ * due to an target assert in firmware only one interface is
+ * configured for now.
+ */
fw_iftype = HI_OPTION_FW_MODE_BSS_STA;
- /* Tell target which HTC version it is used*/
+ for (i = 0; i < MAX_NUM_VIF; i++)
+ fw_mode |= fw_iftype << (i * HI_OPTION_FW_MODE_BITS);
+
+ /*
+ * submodes : vif[0] - AP/STA/IBSS
+ * vif[1] - "P2P dev"/"P2P GO"/"P2P Client"
+ * vif[2] - "P2P dev"/"P2P GO"/"P2P Client"
+ */
+ fw_submode = HI_OPTION_FW_SUBMODE_NONE |
+ (HI_OPTION_FW_SUBMODE_P2PDEV <<
+ (1 * HI_OPTION_FW_SUBMODE_BITS)) |
+ (HI_OPTION_FW_SUBMODE_P2PDEV <<
+ (2 * HI_OPTION_FW_SUBMODE_BITS));
+
+ /*
+ * FIXME: This needs to be removed once the multivif
+ * support is enabled.
+ */
+ if (ar->p2p)
+ fw_submode = HI_OPTION_FW_SUBMODE_P2PDEV;
+ else
+ fw_submode = HI_OPTION_FW_SUBMODE_NONE;
+
param = HTC_PROTOCOL_VERSION;
if (ath6kl_bmi_write(ar,
ath6kl_get_hi_item_addr(ar,
@@ -454,12 +485,10 @@ int ath6kl_configure_target(struct ath6kl *ar)
return -EIO;
}
- param |= (1 << HI_OPTION_NUM_DEV_SHIFT);
- param |= (fw_iftype << HI_OPTION_FW_MODE_SHIFT);
- if (ar->p2p && fw_iftype == HI_OPTION_FW_MODE_BSS_STA) {
- param |= HI_OPTION_FW_SUBMODE_P2PDEV <<
- HI_OPTION_FW_SUBMODE_SHIFT;
- }
+ param |= (MAX_NUM_VIF << HI_OPTION_NUM_DEV_SHIFT);
+ param |= fw_mode << HI_OPTION_FW_MODE_SHIFT;
+ param |= fw_submode << HI_OPTION_FW_SUBMODE_SHIFT;
+
param |= (0 << HI_OPTION_MAC_ADDR_METHOD_SHIFT);
param |= (0 << HI_OPTION_FW_BRIDGE_SHIFT);
diff --git a/drivers/net/wireless/ath/ath6kl/target.h b/drivers/net/wireless/ath/ath6kl/target.h
index c9a7605..687e2b3 100644
--- a/drivers/net/wireless/ath/ath6kl/target.h
+++ b/drivers/net/wireless/ath/ath6kl/target.h
@@ -320,7 +320,10 @@ struct host_interest {
| (2) | (2) | (2) | (2) | (2) | (2) | (2) | (2)
|------------------------------------------------------------------------------|
*/
+#define HI_OPTION_FW_MODE_BITS 0x2
#define HI_OPTION_FW_MODE_SHIFT 0xC
+
+#define HI_OPTION_FW_SUBMODE_BITS 0x2
#define HI_OPTION_FW_SUBMODE_SHIFT 0x14
/* Convert a Target virtual address into a Target physical address */
--
1.7.0.4
^ permalink raw reply related
* Re: [PATCH v3 2/2] mac80211: fix race condition between assoc_done and first EAP packet
From: Jouni Malinen @ 2011-10-25 15:55 UTC (permalink / raw)
To: Guy Eilam; +Cc: johannes, linux-wireless
In-Reply-To: <1313583495-9695-2-git-send-email-guy@wizery.com>
On Wed, Aug 17, 2011 at 03:18:15PM +0300, Guy Eilam wrote:
> Allocation of the relevant station info struct before actually
> sending the association request and setting it with a new
> dummy_sta flag solve this problem.
> This dummy station entry is not seen by normal sta_info_get()
> calls, only by sta_info_get_bss_rx().
> The driver is not notified for the first insertion of the
> dummy station. The driver is notified only after the association
> is complete and the dummy flag is removed from the station entry.
I'm seeing issues with that dummy entry not getting removed and every
consecutive association attempt failing since ieee80211_pre_assoc()
fails to insert the new dummy station entry (sta_info_insert() returns
-EEXIST).
This happens at least in the case where association comeback mechanism
is used and the association fails:
[17726.918932] wlan0: authenticate with 00:03:7f:12:2a:14 (try 1)
[17726.921063] wlan0: authenticated
[17726.921079] ieee80211 phy0: device now idle
[17726.922992] ieee80211 phy0: Allocated STA 00:03:7f:12:2a:14
[17726.923000] ieee80211 phy0: Inserted dummy STA 00:03:7f:12:2a:14
[17726.930772] ieee80211 phy0: device no longer idle - working
[17726.941184] wlan0: associate with 00:03:7f:12:2a:14 (try 1)
[17726.945652] wlan0: RX ReassocResp from 00:03:7f:12:2a:14 (capab=0x411 status=30 aid=1)
[17726.945657] wlan0: 00:03:7f:12:2a:14 rejected association temporarily; comeback duration 1000 TU (1024 ms)
[17727.968031] wlan0: associate with 00:03:7f:12:2a:14 (try 2)
[17727.970915] wlan0: deauthenticated from 00:03:7f:12:2a:14 (Reason: 6)
Note: There is no "Removed STA" message here, i.e., __sta_info_destroy()
does not get called because we do not get to the ieee80211_assoc_done()
work in this case.. Is that the main issue here? Or should that dummy
STA entry be removed somewhere else in this type of case? Or should
ieee80211_pre_assoc() just accept -EEXIST and allow the new association
to continue?
The next connection attempt fails:
[18016.942906] wlan0: authenticate with 00:03:7f:12:2a:14 (try 1)
[18016.945114] wlan0: authenticated
[18016.945130] ieee80211 phy0: device now idle
[18016.945344] ieee80211 phy0: Allocated STA 00:03:7f:12:2a:14
[18016.945353] ieee80211 phy0: Destroyed STA 00:03:7f:12:2a:14
[18016.945356] wlan0: failed to insert Dummy STA entry for the AP (error -17)
and the dummy entry gets finally removed only when the interface is set
down:
[18036.716235] wlan0: deauthenticating from 00:03:7f:12:2a:14 by local choice (reason=3)
[18036.780038] ieee80211 phy0: Removed STA 00:03:7f:12:2a:14
[18036.780050] ieee80211 phy0: Destroyed STA 00:03:7f:12:2a:14
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index d6470c7..60a6f27 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
>
> +/* create and insert a dummy station entry */
> +static int ieee80211_pre_assoc(struct ieee80211_sub_if_data *sdata,
> + u8 *bssid) {
> + struct sta_info *sta;
> + int err;
> +
> + sta = sta_info_alloc(sdata, bssid, GFP_KERNEL);
> + if (!sta) {
> + printk(KERN_DEBUG "%s: failed to alloc STA entry for"
> + " the AP\n", sdata->name);
> + return -ENOMEM;
> + }
> +
> + sta->dummy = true;
> +
> + err = sta_info_insert(sta);
> + sta = NULL;
> + if (err) {
> + printk(KERN_DEBUG "%s: failed to insert Dummy STA entry for"
> + " the AP (error %d)\n", sdata->name, err);
> + return err;
> + }
This is the place where the consecutive connections fail..
> @@ -2468,12 +2501,16 @@ static enum work_done_result ieee80211_assoc_done(struct ieee80211_work *wk,
> if (!ieee80211_assoc_success(wk, mgmt, skb->len)) {
> mutex_unlock(&wk->sdata->u.mgd.mtx);
> /* oops -- internal error -- send timeout for now */
> + sta_info_destroy_addr(wk->sdata, cbss->bssid);
> cfg80211_send_assoc_timeout(wk->sdata->dev,
> wk->filter_ta);
> return WORK_DONE_DESTROY;
> }
>
> mutex_unlock(&wk->sdata->u.mgd.mtx);
> + } else {
> + /* assoc failed - destroy the dummy station entry */
> + sta_info_destroy_addr(wk->sdata, cbss->bssid);
> }
And this is the place where I guess the dummy entry was supposed to get
removed, but it wasn't in the assoc comeback case.
This makes it quite painful to run any IEEE 802.11w testing.. Making
ieee80211_pre_assoc() ignore EEXIST works around the issues, but a more
proper fix could be to make sure that the dummy entry gets removed when
we stop trying to associate in whatever ways that may happen.
--
Jouni Malinen PGP id EFC895FA
^ permalink raw reply
* Measuring TX service time in ath9k
From: Ignacy Gawedzki @ 2011-10-25 16:17 UTC (permalink / raw)
To: linux-wireless
Hi all,
After having played around with carl9170 and implementing TX service time
measurement in the firmware itself (thanks to Christian Lamparter for his
precious help), we're trying to achieve something equivalent, but in the
driver, for ath9k.
The idea is to measure, for each outgoing unicast frame, the time required to
transmit it, from the moment the interface considers the frame for
transmission and waits for the medium to be clear for at least a DIFS, up to
the moment the interface receives the corresponding ACK frame or gives up
trying because of not receiving any ACK after too many retransmissions.
The way we used to measure that, first in madwifi and then in ath5k, was the
following: take the system current time at the moment the frame is sent to the
interface by the driver and store that (let's call it "start") in the tx
descriptor, which is kept until the "tx complete" interrupt arrives from the
interface. When the "tx complete" interrupt arrives, take the system time
again (let's call it "now"). When the tx buffers are empty, i.e., when we are
sending frames "slowly", the difference now - start is the value we want to
measure plus some overhead. When the tx buffers are not empty (we are sending
fast), the overhead is too big, so instead of considering now - start, we
consider now - last, "last" being the "now" from the previous "tx complete"
interrupt. So in a nutshell, service_time = now - max(start, last).
In practice, the average measured values for the service time when sending
fast were pretty realistic, whereas those when sending slowly were exagerated
by some notable factor.
By implementing the measurements in the firmware, when we started to play with
carl9170, the overhead when sending slowly was small enough for the measured
service time to be realistic both when sending slowly and when sending fast.
Now we ported back the measurements in the ath9k driver and to our surprise,
the measurements when sending slowly are *smaller* and more stable than the
measurements when sending fast. Nevertheless, it appears that measurements
when sending fast are the most realistic, as usual (when we divide the number
of bytes sent by the sum of service times, we get something very close to what
iperf outputs when asked to send a flow of UDP packets at full speed).
The way we do it in ath9k is the following. We take the "start" time in
ath_tx_txqaddbuf(), for each entry in the head list and save it into an added
field of the struct ath_buf pointed to by bf. We take the "now" time as soon
as possible in ath_isr() and save it into an added field of the struct
ath_softc pointed by sc just before calling tasklet_schedule(&sc->intr_tq).
The calculation is performed in ath_tx_complete(), by taking the "start" from
bf (that we passed additionally from the caller), "now" from sc and "last"
also from sc.
If I understand correctly, no call to ath_isr is possible while in
ath_tx_tasklet, since the interrupts are disabled before scheduling it and
re-enabled by it before returning.
Could someone be kind to explain what could be the reason of this
counterintuitive "underhead" in the measurements when sending slowly? Is it
the management of TX queues that makes the service times larger when sending
fast vs. when sending slowly?
Note that we're testing this only in ad-hoc mode, so no aggregation takes
place, and all user traffic is sent via queue number 2, as far as I know.
Thanks for your help again.
Ignacy
--
/* This is not a comment */
^ permalink raw reply
* [PATCH] ath6kl: add support for WPS
From: Aarthi Thiruvengadam @ 2011-10-25 18:25 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, Aarthi Thiruvengadam, Aarthi Thiruvengadam
Add control flag CONNECT_WPS_FLAG if a WPS IE is present in the
Association Request IEs. This flag is needed when the station must
connect to a WPS-enabled AP.
Signed-off-by: Aarthi Thiruvengadam <athiruve@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 18 ++++++++++++++++++
drivers/net/wireless/ath/ath6kl/wmi.h | 1 +
2 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 0680d2b..11dd401 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -256,6 +256,14 @@ static bool ath6kl_is_rsn_ie(const u8 *pos)
return pos[0] == WLAN_EID_RSN;
}
+static bool ath6kl_is_wps_ie(const u8 *pos)
+{
+ return (pos[0] == WLAN_EID_VENDOR_SPECIFIC &&
+ pos[1] >= 4 &&
+ pos[2] == 0x00 && pos[3] == 0x50 && pos[4] == 0xf2 &&
+ pos[5] == 0x04);
+}
+
static int ath6kl_set_assoc_req_ies(struct ath6kl *ar, const u8 *ies,
size_t ies_len)
{
@@ -265,6 +273,12 @@ static int ath6kl_set_assoc_req_ies(struct ath6kl *ar, const u8 *ies,
int ret;
/*
+ * Clear previously set flag
+ */
+
+ ar->connect_ctrl_flags &= ~CONNECT_WPS_FLAG;
+
+ /*
* Filter out RSN/WPA IE(s)
*/
@@ -281,6 +295,10 @@ static int ath6kl_set_assoc_req_ies(struct ath6kl *ar, const u8 *ies,
memcpy(buf + len, pos, 2 + pos[1]);
len += 2 + pos[1];
}
+
+ if (ath6kl_is_wps_ie(pos))
+ ar->connect_ctrl_flags |= CONNECT_WPS_FLAG;
+
pos += 2 + pos[1];
}
}
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h
index f0ca899..37847cf 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.h
+++ b/drivers/net/wireless/ath/ath6kl/wmi.h
@@ -606,6 +606,7 @@ enum wmi_connect_ctrl_flags_bits {
CONNECT_CSA_FOLLOW_BSS = 0x0020,
CONNECT_DO_WPA_OFFLOAD = 0x0040,
CONNECT_DO_NOT_DEAUTH = 0x0080,
+ CONNECT_WPS_FLAG = 0x0100,
};
struct wmi_connect_cmd {
--
1.7.0.4
^ permalink raw reply related
* How to find the phy's associated with a wireless dev
From: David Goodenough @ 2011-10-25 18:10 UTC (permalink / raw)
To: linux-wireless
I notice that if I remove the kernel module for a wireless
interface and reload it, that a new phy is defined. This is
confusing my script that sets up interfaces, in particular I
need to set the distance for a long distance link and that has
to be done on the phy not the dev.
I am doing this from a script so I guess it has to be a query
using iw, but I can not see which one to use.
David
^ permalink raw reply
* Re: How to find the phy's associated with a wireless dev
From: Ben Greear @ 2011-10-25 18:47 UTC (permalink / raw)
To: David Goodenough; +Cc: linux-wireless
In-Reply-To: <201110251910.37638.david.goodenough@btconnect.com>
On 10/25/2011 11:10 AM, David Goodenough wrote:
> I notice that if I remove the kernel module for a wireless
> interface and reload it, that a new phy is defined. This is
> confusing my script that sets up interfaces, in particular I
> need to set the distance for a long distance link and that has
> to be done on the phy not the dev.
>
> I am doing this from a script so I guess it has to be a query
> using iw, but I can not see which one to use.
On a recent kernel:
cat /sys/class/net/wlan0/phy80211/name
Thanks,
Ben
>
> David
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply
* Compat-wireless release for 2011-10-25 is baked
From: Compat-wireless cronjob account @ 2011-10-25 19:06 UTC (permalink / raw)
To: linux-wireless
>From git://github.com/sfrothwell/linux-next
+ 0bb9d7e...c0ba0e9 akpm-end -> origin/akpm-end (forced update)
37cf951..c3b92c8 akpm-start -> origin/akpm-start
+ 970cc26...65a31eb master -> origin/master (forced update)
37cf951..c3b92c8 stable -> origin/stable
* [new tag] next-20111025 -> next-20111025
* [new tag] v3.1 -> v3.1
>From git://github.com/sfrothwell/linux-next
* [new tag] v3.1-rc10 -> v3.1-rc10
Checking out files: 47% (842/1765)
Checking out files: 48% (848/1765)
Checking out files: 49% (865/1765)
Checking out files: 50% (883/1765)
Checking out files: 51% (901/1765)
Checking out files: 52% (918/1765)
Checking out files: 53% (936/1765)
Checking out files: 54% (954/1765)
Checking out files: 55% (971/1765)
Checking out files: 56% (989/1765)
Checking out files: 57% (1007/1765)
Checking out files: 58% (1024/1765)
Checking out files: 59% (1042/1765)
Checking out files: 60% (1059/1765)
Checking out files: 61% (1077/1765)
Checking out files: 62% (1095/1765)
Checking out files: 63% (1112/1765)
Checking out files: 64% (1130/1765)
Checking out files: 65% (1148/1765)
Checking out files: 66% (1165/1765)
Checking out files: 67% (1183/1765)
Checking out files: 68% (1201/1765)
Checking out files: 69% (1218/1765)
Checking out files: 70% (1236/1765)
Checking out files: 71% (1254/1765)
Checking out files: 72% (1271/1765)
Checking out files: 73% (1289/1765)
Checking out files: 74% (1307/1765)
Checking out files: 75% (1324/1765)
Checking out files: 76% (1342/1765)
Checking out files: 77% (1360/1765)
Checking out files: 78% (1377/1765)
Checking out files: 79% (1395/1765)
Checking out files: 80% (1412/1765)
Checking out files: 81% (1430/1765)
Checking out files: 82% (1448/1765)
Checking out files: 83% (1465/1765)
Checking out files: 84% (1483/1765)
Checking out files: 85% (1501/1765)
Checking out files: 86% (1518/1765)
Checking out files: 87% (1536/1765)
Checking out files: 88% (1554/1765)
Checking out files: 89% (1571/1765)
Checking out files: 90% (1589/1765)
Checking out files: 91% (1607/1765)
Checking out files: 92% (1624/1765)
Checking out files: 93% (1642/1765)
Checking out files: 94% (1660/1765)
Checking out files: 95% (1677/1765)
Checking out files: 96% (169
5/1765)
Checking out files: 97% (1713/1765)
Checking out files: 98% (1730/1765)
Checking out files: 99% (1748/1765)
Checking out files: 100% (1765/1765)
Checking out files: 100% (1765/1765), done.
compat-wireless code metrics
814862 - Total upstream lines of code being pulled
2431 - backport code changes
2113 - backport code additions
318 - backport code deletions
8588 - backport from compat module
11019 - total backport code
1.3523 - % of code consists of backport work
^ permalink raw reply
* [RFC] wifi: Allow forcing lower mcs (/n) rates.
From: greearb @ 2011-10-25 23:48 UTC (permalink / raw)
To: linux-wireless; +Cc: Ben Greear
From: Ben Greear <greearb@candelatech.com>
Allow user to set the HT information and mask. This
can be used to remove rates from consideration, ie to
force use of lower rates.
Probably still need some work, as I think all of the rates
are advertised, and probably they should be masked out as
well.
Signed-off-by: Ben Greear <greearb@candelatech.com>
---
:100644 100644 2397bfb... 270fab3... M include/linux/nl80211.h
:100644 100644 8d6e90e... 4a71d18... M include/net/cfg80211.h
:100644 100644 d514f5c... fefd4c4... M net/mac80211/cfg.c
:100644 100644 aebc697... e5b54ea... M net/mac80211/ieee80211_i.h
:100644 100644 58e5e1b... c4a25a2... M net/mac80211/mlme.c
:100644 100644 37f35fe... f4f4397... M net/wireless/nl80211.c
include/linux/nl80211.h | 3 +++
include/net/cfg80211.h | 4 ++++
net/mac80211/cfg.c | 28 ++++++++++++++++++++++++++++
net/mac80211/ieee80211_i.h | 3 +++
net/mac80211/mlme.c | 23 ++++++++++++++++++++++-
net/wireless/nl80211.c | 14 ++++++++++++++
6 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index 2397bfb..270fab3 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -1000,6 +1000,8 @@ enum nl80211_commands {
* function as /a/b/g stations.
* @NL80211_ATTR_DISABLE_HT40: Disable HT-40 even if AP and hardware
* support it.
+ * @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the HT_CAPs
+ * to pay attention to.
*
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
@@ -1230,6 +1232,7 @@ enum nl80211_attrs {
NL80211_ATTR_DISABLE_11N,
NL80211_ATTR_DISABLE_HT40,
+ NL80211_ATTR_HT_CAPABILITY_MASK,
/* add attributes here, update the policy in nl80211.c */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 8d6e90e..4a71d18 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -261,11 +261,15 @@ struct ieee80211_supported_band {
* @use_4addr: use 4-address frames
* @disable_11n: Don't use 11n features (HT, etc)
* @disable_ht40: Don't use HT40, even if hardware & AP support it.
+ * @ht_capa: HT Capabilities for this interface.
+ * @ht_capa_mask: Bits of ht_capa that are to be used.
*/
struct vif_params {
int use_4addr;
int disable_11n;
int disable_ht40;
+ struct ieee80211_ht_cap *ht_capa;
+ struct ieee80211_ht_cap *ht_capa_mask;
};
/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index d514f5c..fefd4c4 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -104,6 +104,34 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
}
}
+ if (params->ht_capa) {
+ u8 *caps = (u8*)(params->ht_capa);
+ u8 *mask = (u8*)(params->ht_capa_mask);
+ u8 *scaps = (u8*)(&sdata->ht_capa);
+ u8 *smask = (u8*)(&sdata->ht_capa_mask);
+ int i;
+
+ BUILD_BUG_ON(sizeof(*(params->ht_capa)) != sizeof(sdata->ht_capa));
+
+ for (i = 0; i<sizeof(sdata->ht_capa); i++) {
+ if (mask[i]) {
+ int q;
+ smask[i] |= mask[i];
+ for (q = 0; q<8; q++) {
+ if (mask[i] & (1<<q)) {
+ if (caps[i] & (1<<q))
+ scaps[i] |= (1<<q);
+ else
+ scaps[i] &= ~(1<<q);
+ }
+ }
+ }
+ }
+ }
+ else if (params->ht_capa_mask) {
+ memcpy(&sdata->ht_capa_mask, params->ht_capa_mask, sizeof(sdata->ht_capa_mask));
+ }
+
return 0;
}
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index aebc697..e5b54ea 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -567,6 +567,9 @@ struct ieee80211_sub_if_data {
bool cfg_disable_11n; /* configured to disable 11n? */
bool cfg_disable_ht40; /* configured to not use HT-40 */
+ struct ieee80211_ht_cap ht_capa; /* configured ht-cap over-rides */
+ struct ieee80211_ht_cap ht_capa_mask; /* What parts of ht_capa are valid */
+
/* Fragment table for host-based reassembly */
struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX];
unsigned int fragment_next;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 58e5e1b..c4a25a2 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1553,10 +1553,31 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
else
sdata->flags &= ~IEEE80211_SDATA_OPERATING_GMODE;
- if (elems.ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
+ if (elems.ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_11N)) {
+ u8 *scaps = (u8*)(&sdata->ht_capa.mcs.rx_mask);
+ u8 *smask = (u8*)(&sdata->ht_capa_mask.mcs.rx_mask);
+ int i;
+
ieee80211_ht_cap_ie_to_sta_ht_cap(sband,
elems.ht_cap_elem, &sta->sta.ht_cap);
+ /* check for HT over-rides, mcs rates only at this time,
+ * and can only disable them, not force new ones to be
+ * made available.
+ */
+ for (i = 0; i<IEEE80211_HT_MCS_MASK_LEN; i++) {
+ int q;
+ for (q = 0; q<8; q++) {
+ if (smask[i] & (1<<q)) {
+ if (!(scaps[i] & (1<<q))) {
+ /* can only disable rates, not force new ones */
+ sta->sta.ht_cap.mcs.rx_mask[i] &= ~(1<<q);
+ }
+ }
+ }
+ }
+ }
+
ap_ht_cap_flags = sta->sta.ht_cap.cap;
rate_control_rate_init(sta);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 37f35fe..f4f4397 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -1584,7 +1584,21 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
else {
params.disable_ht40 = -1;
}
+
+ if (info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]) {
+ params.ht_capa_mask =
+ nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY_MASK]);
+ change = true;
+ }
+ if (info->attrs[NL80211_ATTR_HT_CAPABILITY]) {
+ if (!params.ht_capa_mask)
+ return -EINVAL;
+ params.ht_capa =
+ nla_data(info->attrs[NL80211_ATTR_HT_CAPABILITY]);
+ change = true;
+ }
+
if (change)
err = cfg80211_change_iface(rdev, dev, ntype, flags, ¶ms);
else
--
1.7.3.4
^ permalink raw reply related
* [PATCH v3] ath6kl: Implement support for listen interval from userspace
From: Rishi Panjwani @ 2011-10-26 0:26 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, Rishi Panjwani
In-Reply-To: <1319588789-17632-1-git-send-email-rpanjwan@qca.qualcomm.com>
In order to allow user space based control of listen interval, we use
available debugfs infrastructure. Listen interval implies how frequently
we want the WLAN chip to wake up and synchronize the beacons in case it
is in sleep mode. The command requires two parameters in the following order:
1) listen_interval_time
2) listen_interval_beacons
The user has to write the listen interval_time (in msecs) and
listen_interval_beacons (in no. of beacons) to the listen_interval file in
ath6kl debug directory.
Example:
echo "30 1" > listen_interval
Signed-off-by: Rishi Panjwani <rpanjwan@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/debug.c | 63 +++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c
index 3eaa291..2f865a0 100644
--- a/drivers/net/wireless/ath/ath6kl/debug.c
+++ b/drivers/net/wireless/ath/ath6kl/debug.c
@@ -1489,6 +1489,69 @@ static const struct file_operations fops_bgscan_int = {
.llseek = default_llseek,
};
+static ssize_t ath6kl_listen_int_write(struct file *file,
+ const char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ struct ath6kl *ar = file->private_data;
+ u16 listen_int_t, listen_int_b;
+ char buf[32];
+ char *sptr, *token;
+ ssize_t len;
+
+ len = min(count, sizeof(buf) - 1);
+ if (copy_from_user(buf, user_buf, len))
+ return -EFAULT;
+
+ buf[len] = '\0';
+ sptr = buf;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+
+ if (kstrtou16(token, 0, &listen_int_t))
+ return -EINVAL;
+
+ if (kstrtou16(sptr, 0, &listen_int_b))
+ return -EINVAL;
+
+ if ((listen_int_t < 15) || (listen_int_t > 5000))
+ return -EINVAL;
+
+ if ((listen_int_b < 1) || (listen_int_b > 50))
+ return -EINVAL;
+
+ ar->listen_intvl_t = listen_int_t;
+ ar->listen_intvl_b = listen_int_b;
+ ath6kl_wmi_listeninterval_cmd(ar->wmi, ar->listen_intvl_t,
+ ar->listen_intvl_b);
+
+ return count;
+}
+
+static ssize_t ath6kl_listen_int_read(struct file *file,
+ char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ struct ath6kl *ar = file->private_data;
+ char buf[16];
+ int len;
+
+ len = snprintf(buf, sizeof(buf), "%u %u\n", ar->listen_intvl_t,
+ ar->listen_intvl_b);
+
+ return simple_read_from_buffer(user_buf, count, ppos, buf, len);
+}
+
+static const struct file_operations fops_listen_int = {
+ .read = ath6kl_listen_int_read,
+ .write = ath6kl_listen_int_write,
+ .open = ath6kl_debugfs_open,
+ .owner = THIS_MODULE,
+ .llseek = default_llseek,
+};
+
int ath6kl_debug_init(struct ath6kl *ar)
{
ar->debug.fwlog_buf.buf = vmalloc(ATH6KL_FWLOG_SIZE);
--
1.7.0.4
^ permalink raw reply related
* [PATCH v3] ath6kl: Implement support for listen interval from userspace
From: Rishi Panjwani @ 2011-10-26 0:26 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, Rishi Panjwani
The patch allows modification of listen interval thereby allowing change
in sleep/awake cycle causing change in power consumption numbers.
Rishi Panjwani (1):
ath6kl: Implement support for listen interval from userspace
drivers/net/wireless/ath/ath6kl/debug.c | 63 +++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 0 deletions(-)
^ permalink raw reply
* Re: iwlagn is getting very shaky
From: Norbert Preining @ 2011-10-26 2:50 UTC (permalink / raw)
To: David Rientjes
Cc: wwguy, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <alpine.DEB.2.00.1110231424500.17218@chino.kir.corp.google.com>
Hi David,
On So, 23 Okt 2011, David Rientjes wrote:
> It'd be interesting to see if this problem still exists in linux-next
> since some wireless changes went into that recently. Please try the tree
> at git://github.com/sfrothwell/linux-next.git
I didn't try that by now, but I tried current linux git where
a lot of things went into, I am running on top of 7670c7010c.
With that I get:
- two different kernel bugs, the first one actually appearing several
times
- after a short time no package goes out, but the addapter still believes
to be associated.
Here is the dmesg output of the two kernel bugs and the following
hard reset.
BTW, that happened at the *critical* access point at the university.
At home I was before running hte same kernel without problem.
BUt it might be a suspend/resume problem, too, as I suspended the
computer and woke it up here.
[ 3279.808204] ------------[ cut here ]------------
[ 3279.808246] WARNING: at include/net/mac80211.h:3570 rate_control_send_low+0xa5/0x165 [mac80211]()
[ 3279.808254] Hardware name: VGN-Z11VN_B
[ 3279.808258] Modules linked in: rfcomm bnep vboxpci vboxnetadp vboxnetflt vboxdrv snd_hrtimer binfmt_misc dm_crypt dm_mod isofs btrfs zlib_deflate crc32c libcrc32c vfat fat fuse loop uinput snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm arc4 snd_seq_dummy snd_seq_oss iwlwifi snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq mac80211 btusb snd_timer bluetooth snd_seq_device firewire_ohci snd firewire_core sony_laptop crc16 soundcore mxm_wmi cfg80211 snd_page_alloc crc_itu_t rfkill joydev tpm_infineon
[ 3279.808379] Pid: 4956, comm: kworker/u:11 Tainted: G W 3.1.0+ #40
[ 3279.808385] Call Trace:
[ 3279.808400] [<ffffffff810376c1>] warn_slowpath_common+0x83/0x9b
[ 3279.808411] [<ffffffff810376f3>] warn_slowpath_null+0x1a/0x1c
[ 3279.808438] [<ffffffffa0158149>] rate_control_send_low+0xa5/0x165 [mac80211]
[ 3279.808459] [<ffffffffa01b01c2>] rs_get_rate+0x146/0x254 [iwlwifi]
[ 3279.808486] [<ffffffffa01585b1>] rate_control_get_rate+0x86/0x14c [mac80211]
[ 3279.808516] [<ffffffffa015f632>] ieee80211_tx_h_rate_ctrl+0x1cb/0x3e4 [mac80211]
[ 3279.808546] [<ffffffffa015fac9>] invoke_tx_handlers+0x69/0xf5 [mac80211]
[ 3279.808575] [<ffffffffa015fcd2>] ieee80211_tx+0x7f/0xaf [mac80211]
[ 3279.808605] [<ffffffffa0160172>] ieee80211_xmit+0x89/0x97 [mac80211]
[ 3279.808634] [<ffffffffa0160d10>] ieee80211_tx_skb+0x57/0x5f [mac80211]
[ 3279.808659] [<ffffffffa0152098>] ieee80211_send_nullfunc+0x5f/0x64 [mac80211]
[ 3279.808684] [<ffffffffa01520ff>] ieee80211_mgd_probe_ap_send+0x62/0xe6 [mac80211]
[ 3279.808709] [<ffffffffa01522fb>] ? ieee80211_recalc_ps+0x10/0x250 [mac80211]
[ 3279.808734] [<ffffffffa0152960>] ieee80211_mgd_probe_ap+0xc9/0xd9 [mac80211]
[ 3279.808759] [<ffffffffa0152a6b>] ieee80211_beacon_connection_loss_work+0xe2/0xed [mac80211]
[ 3279.808785] [<ffffffffa0152989>] ? ieee80211_sta_monitor_work+0x19/0x19 [mac80211]
[ 3279.808797] [<ffffffff8104d9cc>] process_one_work+0x17b/0x2bd
[ 3279.808807] [<ffffffff8104c011>] ? need_to_create_worker+0x12/0x26
[ 3279.808818] [<ffffffff8104eac7>] worker_thread+0xdb/0x15f
[ 3279.808829] [<ffffffff8104e9ec>] ? manage_workers.isra.24+0x171/0x171
[ 3279.808839] [<ffffffff81051ef2>] kthread+0x84/0x8c
[ 3279.808851] [<ffffffff81401394>] kernel_thread_helper+0x4/0x10
[ 3279.808862] [<ffffffff81051e6e>] ? kthread_worker_fn+0x148/0x148
[ 3279.808872] [<ffffffff81401390>] ? gs_change+0xb/0xb
[ 3279.808879] ---[ end trace b7620f873182e7e3 ]---
[ 3284.284925] wlan0: deauthenticating from 00:24:c4:ab:bd:ef by local choice (reason=2)
[ 3284.344356] cfg80211: Calling CRDA to update world regulatory domain
[ 3284.351319] wlan0: authenticate with 00:24:c4:ab:bd:ef (try 1)
[ 3284.445310] wlan0: authenticated
[ 3284.447486] wlan0: associate with 00:24:c4:ab:bd:ef (try 1)
[ 3284.449486] wlan0: RX ReassocResp from 00:24:c4:ab:bd:ef (capab=0x1 status=0 aid=2)
[ 3284.449489] wlan0: associated
[ 3314.515741] iwlwifi 0000:06:00.0: Tx aggregation enabled on ra = 00:24:c4:ab:bd:ef tid = 0
[ 3314.515762] ------------[ cut here ]------------
[ 3314.515800] WARNING: at drivers/net/wireless/iwlwifi/iwl-trans-pcie.c:1101 iwl_trans_pcie_tx+0x180/0x661 [iwlwifi]()
[ 3314.515808] Hardware name: VGN-Z11VN_B
[ 3314.515813] Modules linked in: rfcomm bnep vboxpci vboxnetadp vboxnetflt vboxdrv snd_hrtimer binfmt_misc dm_crypt dm_mod isofs btrfs zlib_deflate crc32c libcrc32c vfat fat fuse loop uinput snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm arc4 snd_seq_dummy snd_seq_oss iwlwifi snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq mac80211 btusb snd_timer bluetooth snd_seq_device firewire_ohci snd firewire_core sony_laptop crc16 soundcore mxm_wmi cfg80211 snd_page_alloc crc_itu_t rfkill joydev tpm_infineon
[ 3314.515937] Pid: 4954, comm: kworker/u:9 Tainted: G W 3.1.0+ #40
[ 3314.515943] Call Trace:
[ 3314.515948] <IRQ> [<ffffffff810376c1>] warn_slowpath_common+0x83/0x9b
[ 3314.515973] [<ffffffff810376f3>] warn_slowpath_null+0x1a/0x1c
[ 3314.515996] [<ffffffffa01cdb0e>] iwl_trans_pcie_tx+0x180/0x661 [iwlwifi]
[ 3314.516009] [<ffffffff810d14b3>] ? kmem_cache_alloc+0x44/0xb9
[ 3314.516030] [<ffffffffa01b59f8>] iwlagn_tx_skb+0x862/0x901 [iwlwifi]
[ 3314.516048] [<ffffffffa01abf8c>] iwlagn_mac_tx+0x131/0x1a2 [iwlwifi]
[ 3314.516069] [<ffffffffa016abd6>] ? ieee80211_tx_h_fragment+0x16/0x22c [mac80211]
[ 3314.516098] [<ffffffffa015ef24>] __ieee80211_tx+0x176/0x1cf [mac80211]
[ 3314.516117] [<ffffffffa016ab48>] ? ieee80211_tx_h_calculate_duration+0x4c/0x65 [mac80211]
[ 3314.516147] [<ffffffffa015fcea>] ieee80211_tx+0x97/0xaf [mac80211]
[ 3314.516178] [<ffffffffa0160be6>] ieee80211_tx_pending+0xf0/0x1c3 [mac80211]
[ 3314.516191] [<ffffffff8103cdd2>] tasklet_action+0x77/0xc2
[ 3314.516201] [<ffffffff8103cf13>] __do_softirq+0xbc/0x1a5
[ 3314.516212] [<ffffffff8103cb4f>] ? test_ti_thread_flag.constprop.16+0x9/0x16
[ 3314.516225] [<ffffffff8140148c>] call_softirq+0x1c/0x30
[ 3314.516230] <EOI> [<ffffffff8100371a>] do_softirq+0x38/0x6e
[ 3314.516248] [<ffffffff8103cbd9>] _local_bh_enable_ip.isra.12+0x7d/0xa0
[ 3314.516259] [<ffffffff8103cc0a>] local_bh_enable_ip+0xe/0x10
[ 3314.516268] [<ffffffff813ff657>] _raw_spin_unlock_bh+0x23/0x25
[ 3314.516291] [<ffffffffa014ec70>] ieee80211_agg_tx_operational+0x99/0xa4 [mac80211]
[ 3314.516316] [<ffffffffa014f7bf>] ieee80211_process_addba_resp+0xb8/0xf1 [mac80211]
[ 3314.516329] [<ffffffff81064040>] ? arch_read_unlock+0xe/0xe
[ 3314.516355] [<ffffffffa0156a38>] ieee80211_iface_work+0x130/0x2b5 [mac80211]
[ 3314.516381] [<ffffffffa0156908>] ? ieee80211_teardown_sdata+0xcc/0xcc [mac80211]
[ 3314.516394] [<ffffffff8104d9cc>] process_one_work+0x17b/0x2bd
[ 3314.516404] [<ffffffff8104c011>] ? need_to_create_worker+0x12/0x26
[ 3314.516415] [<ffffffff8104eac7>] worker_thread+0xdb/0x15f
[ 3314.516426] [<ffffffff8104e9ec>] ? manage_workers.isra.24+0x171/0x171
[ 3314.516436] [<ffffffff81051ef2>] kthread+0x84/0x8c
[ 3314.516447] [<ffffffff81401394>] kernel_thread_helper+0x4/0x10
[ 3314.516458] [<ffffffff81051e6e>] ? kthread_worker_fn+0x148/0x148
[ 3314.516467] [<ffffffff81401390>] ? gs_change+0xb/0xb
[ 3314.516474] ---[ end trace b7620f873182e7e4 ]---
[ 3324.128094] iwlwifi 0000:06:00.0: Queue 11 stuck for 10000 ms.
[ 3324.128105] iwlwifi 0000:06:00.0: Current read_ptr 14 write_ptr 31
[ 3324.128113] iwlwifi 0000:06:00.0: On demand firmware reload
[ 3324.128548] ieee80211 phy0: Hardware restart was requested
[ 3324.128657] iwlwifi 0000:06:00.0: L1 Enabled; Disabling L0S
[ 3324.131680] iwlwifi 0000:06:00.0: Radio type=0x1-0x2-0x0
Best wishes
Norbert
------------------------------------------------------------------------
Norbert Preining preining@{jaist.ac.jp, logic.at, debian.org}
JAIST, Japan TeX Live & Debian Developer
DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
------------------------------------------------------------------------
PODE HOLE (n.)
A hole drilled in chipboard lavatory walls by homosexuals for any one
of a number of purposes.
--- Douglas Adams, The Meaning of Liff
^ permalink raw reply
* [PATCH] ath6kl: Implement support for power parameter control from userspace
From: Rishi Panjwani @ 2011-10-26 2:52 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, Rishi Panjwani
The patch allows modification of parameters which alter the sleep/awake mechanism like
ps-poll, thereby allowing control of power consumption
Rishi Panjwani (1):
ath6kl: Implement support for power parameter control from userspace
drivers/net/wireless/ath/ath6kl/debug.c | 65 +++++++++++++++++++++++++++++++
1 files changed, 65 insertions(+), 0 deletions(-)
^ permalink raw reply
* [PATCH v2] ath6kl: Implement support for power parameter control from userspace
From: Rishi Panjwani @ 2011-10-26 2:52 UTC (permalink / raw)
To: kvalo; +Cc: linux-wireless, Rishi Panjwani
In-Reply-To: <1319597561-20454-1-git-send-email-rpanjwan@qca.qualcomm.com>
In order to allow user space based control of power parameters, we use
available debugfs infrastructure. With these features user can control
power consumption by adjusting various sleep/wake up related parameters.
The feature has been added for testing purposes. All 5 parameters are
mandatory in correct order. They have to be written to the power_params
file. These are:
1) idle_period
2) no_of_pspoll
3) dtim_policy
4) tx_wakeup_policy
5) no_tx_to_wakeup
Example:
echo "200 1 0 1 1" > power_params
Signed-off-by: Rishi Panjwani <rpanjwan@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath6kl/debug.c | 65 +++++++++++++++++++++++++++++++
1 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/debug.c b/drivers/net/wireless/ath/ath6kl/debug.c
index 67254ca..dbf2aa6 100644
--- a/drivers/net/wireless/ath/ath6kl/debug.c
+++ b/drivers/net/wireless/ath/ath6kl/debug.c
@@ -1520,6 +1520,68 @@ static const struct file_operations fops_listen_int = {
.llseek = default_llseek,
};
+
+static ssize_t ath6kl_power_params_write(struct file *file,
+ const char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ struct ath6kl *ar = file->private_data;
+ u8 buf[100];
+ unsigned int len = 0;
+ char *sptr, *token;
+ u16 idle_period, ps_poll_num, dtim,
+ tx_wakeup, num_tx;
+
+ len = min(count, sizeof(buf) - 1);
+ if (copy_from_user(buf, user_buf, len))
+ return -EFAULT;
+ buf[len] = '\0';
+ sptr = buf;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+ if (kstrtou16(token, 0, &idle_period))
+ return -EINVAL;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+ if (kstrtou16(token, 0, &ps_poll_num))
+ return -EINVAL;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+ if (kstrtou16(token, 0, &dtim))
+ return -EINVAL;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+ if (kstrtou16(token, 0, &tx_wakeup))
+ return -EINVAL;
+
+ token = strsep(&sptr, " ");
+ if (!token)
+ return -EINVAL;
+ if (kstrtou16(token, 0, &num_tx))
+ return -EINVAL;
+
+ ath6kl_wmi_pmparams_cmd(ar->wmi, idle_period, ps_poll_num,
+ dtim, tx_wakeup, num_tx, 0);
+
+ return count;
+}
+
+
+static const struct file_operations fops_power_params = {
+ .write = ath6kl_power_params_write,
+ .open = ath6kl_debugfs_open,
+ .owner = THIS_MODULE,
+ .llseek = default_llseek,
+};
+
int ath6kl_debug_init(struct ath6kl *ar)
{
ar->debug.fwlog_buf.buf = vmalloc(ATH6KL_FWLOG_SIZE);
@@ -1605,6 +1667,9 @@ int ath6kl_debug_init(struct ath6kl *ar)
debugfs_create_file("listen_interval", S_IWUSR, ar->debugfs_phy, ar,
&fops_listen_int);
+ debugfs_create_file("power_params", S_IWUSR, ar->debugfs_phy, ar,
+ &fops_power_params);
+
return 0;
}
--
1.7.0.4
^ permalink raw reply related
* Re: iwlagn is getting very shaky
From: wwguy @ 2011-10-26 3:55 UTC (permalink / raw)
To: Norbert Preining
Cc: David Rientjes, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <20111026025014.GB24956@gamma.logic.tuwien.ac.at>
Norbert,
On Tue, 2011-10-25 at 19:50 -0700, Norbert Preining wrote:
> Hi David,
>
> On So, 23 Okt 2011, David Rientjes wrote:
> > It'd be interesting to see if this problem still exists in linux-next
> > since some wireless changes went into that recently. Please try the tree
> > at git://github.com/sfrothwell/linux-next.git
>
> I didn't try that by now, but I tried current linux git where
> a lot of things went into, I am running on top of 7670c7010c.
> With that I get:
> - two different kernel bugs, the first one actually appearing several
> times
> - after a short time no package goes out, but the addapter still believes
> to be associated.
>
> Here is the dmesg output of the two kernel bugs and the following
> hard reset.
>
> BTW, that happened at the *critical* access point at the university.
> At home I was before running hte same kernel without problem.
> BUt it might be a suspend/resume problem, too, as I suspended the
> computer and woke it up here.
>
>
so this is different problem, right? it looks different compare to what
you described before which is cause by queue stopped.
Thanks
Wey
> [ 3279.808204] ------------[ cut here ]------------
> [ 3279.808246] WARNING: at include/net/mac80211.h:3570 rate_control_send_low+0xa5/0x165 [mac80211]()
> [ 3279.808254] Hardware name: VGN-Z11VN_B
> [ 3279.808258] Modules linked in: rfcomm bnep vboxpci vboxnetadp vboxnetflt vboxdrv snd_hrtimer binfmt_misc dm_crypt dm_mod isofs btrfs zlib_deflate crc32c libcrc32c vfat fat fuse loop uinput snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm arc4 snd_seq_dummy snd_seq_oss iwlwifi snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq mac80211 btusb snd_timer bluetooth snd_seq_device firewire_ohci snd firewire_core sony_laptop crc16 soundcore mxm_wmi cfg80211 snd_page_alloc crc_itu_t rfkill joydev tpm_infineon
> [ 3279.808379] Pid: 4956, comm: kworker/u:11 Tainted: G W 3.1.0+ #40
> [ 3279.808385] Call Trace:
> [ 3279.808400] [<ffffffff810376c1>] warn_slowpath_common+0x83/0x9b
> [ 3279.808411] [<ffffffff810376f3>] warn_slowpath_null+0x1a/0x1c
> [ 3279.808438] [<ffffffffa0158149>] rate_control_send_low+0xa5/0x165 [mac80211]
> [ 3279.808459] [<ffffffffa01b01c2>] rs_get_rate+0x146/0x254 [iwlwifi]
> [ 3279.808486] [<ffffffffa01585b1>] rate_control_get_rate+0x86/0x14c [mac80211]
> [ 3279.808516] [<ffffffffa015f632>] ieee80211_tx_h_rate_ctrl+0x1cb/0x3e4 [mac80211]
> [ 3279.808546] [<ffffffffa015fac9>] invoke_tx_handlers+0x69/0xf5 [mac80211]
> [ 3279.808575] [<ffffffffa015fcd2>] ieee80211_tx+0x7f/0xaf [mac80211]
> [ 3279.808605] [<ffffffffa0160172>] ieee80211_xmit+0x89/0x97 [mac80211]
> [ 3279.808634] [<ffffffffa0160d10>] ieee80211_tx_skb+0x57/0x5f [mac80211]
> [ 3279.808659] [<ffffffffa0152098>] ieee80211_send_nullfunc+0x5f/0x64 [mac80211]
> [ 3279.808684] [<ffffffffa01520ff>] ieee80211_mgd_probe_ap_send+0x62/0xe6 [mac80211]
> [ 3279.808709] [<ffffffffa01522fb>] ? ieee80211_recalc_ps+0x10/0x250 [mac80211]
> [ 3279.808734] [<ffffffffa0152960>] ieee80211_mgd_probe_ap+0xc9/0xd9 [mac80211]
> [ 3279.808759] [<ffffffffa0152a6b>] ieee80211_beacon_connection_loss_work+0xe2/0xed [mac80211]
> [ 3279.808785] [<ffffffffa0152989>] ? ieee80211_sta_monitor_work+0x19/0x19 [mac80211]
> [ 3279.808797] [<ffffffff8104d9cc>] process_one_work+0x17b/0x2bd
> [ 3279.808807] [<ffffffff8104c011>] ? need_to_create_worker+0x12/0x26
> [ 3279.808818] [<ffffffff8104eac7>] worker_thread+0xdb/0x15f
> [ 3279.808829] [<ffffffff8104e9ec>] ? manage_workers.isra.24+0x171/0x171
> [ 3279.808839] [<ffffffff81051ef2>] kthread+0x84/0x8c
> [ 3279.808851] [<ffffffff81401394>] kernel_thread_helper+0x4/0x10
> [ 3279.808862] [<ffffffff81051e6e>] ? kthread_worker_fn+0x148/0x148
> [ 3279.808872] [<ffffffff81401390>] ? gs_change+0xb/0xb
> [ 3279.808879] ---[ end trace b7620f873182e7e3 ]---
> [ 3284.284925] wlan0: deauthenticating from 00:24:c4:ab:bd:ef by local choice (reason=2)
> [ 3284.344356] cfg80211: Calling CRDA to update world regulatory domain
> [ 3284.351319] wlan0: authenticate with 00:24:c4:ab:bd:ef (try 1)
> [ 3284.445310] wlan0: authenticated
> [ 3284.447486] wlan0: associate with 00:24:c4:ab:bd:ef (try 1)
> [ 3284.449486] wlan0: RX ReassocResp from 00:24:c4:ab:bd:ef (capab=0x1 status=0 aid=2)
> [ 3284.449489] wlan0: associated
> [ 3314.515741] iwlwifi 0000:06:00.0: Tx aggregation enabled on ra = 00:24:c4:ab:bd:ef tid = 0
> [ 3314.515762] ------------[ cut here ]------------
> [ 3314.515800] WARNING: at drivers/net/wireless/iwlwifi/iwl-trans-pcie.c:1101 iwl_trans_pcie_tx+0x180/0x661 [iwlwifi]()
> [ 3314.515808] Hardware name: VGN-Z11VN_B
> [ 3314.515813] Modules linked in: rfcomm bnep vboxpci vboxnetadp vboxnetflt vboxdrv snd_hrtimer binfmt_misc dm_crypt dm_mod isofs btrfs zlib_deflate crc32c libcrc32c vfat fat fuse loop uinput snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm_oss snd_mixer_oss snd_pcm arc4 snd_seq_dummy snd_seq_oss iwlwifi snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq mac80211 btusb snd_timer bluetooth snd_seq_device firewire_ohci snd firewire_core sony_laptop crc16 soundcore mxm_wmi cfg80211 snd_page_alloc crc_itu_t rfkill joydev tpm_infineon
> [ 3314.515937] Pid: 4954, comm: kworker/u:9 Tainted: G W 3.1.0+ #40
> [ 3314.515943] Call Trace:
> [ 3314.515948] <IRQ> [<ffffffff810376c1>] warn_slowpath_common+0x83/0x9b
> [ 3314.515973] [<ffffffff810376f3>] warn_slowpath_null+0x1a/0x1c
> [ 3314.515996] [<ffffffffa01cdb0e>] iwl_trans_pcie_tx+0x180/0x661 [iwlwifi]
> [ 3314.516009] [<ffffffff810d14b3>] ? kmem_cache_alloc+0x44/0xb9
> [ 3314.516030] [<ffffffffa01b59f8>] iwlagn_tx_skb+0x862/0x901 [iwlwifi]
> [ 3314.516048] [<ffffffffa01abf8c>] iwlagn_mac_tx+0x131/0x1a2 [iwlwifi]
> [ 3314.516069] [<ffffffffa016abd6>] ? ieee80211_tx_h_fragment+0x16/0x22c [mac80211]
> [ 3314.516098] [<ffffffffa015ef24>] __ieee80211_tx+0x176/0x1cf [mac80211]
> [ 3314.516117] [<ffffffffa016ab48>] ? ieee80211_tx_h_calculate_duration+0x4c/0x65 [mac80211]
> [ 3314.516147] [<ffffffffa015fcea>] ieee80211_tx+0x97/0xaf [mac80211]
> [ 3314.516178] [<ffffffffa0160be6>] ieee80211_tx_pending+0xf0/0x1c3 [mac80211]
> [ 3314.516191] [<ffffffff8103cdd2>] tasklet_action+0x77/0xc2
> [ 3314.516201] [<ffffffff8103cf13>] __do_softirq+0xbc/0x1a5
> [ 3314.516212] [<ffffffff8103cb4f>] ? test_ti_thread_flag.constprop.16+0x9/0x16
> [ 3314.516225] [<ffffffff8140148c>] call_softirq+0x1c/0x30
> [ 3314.516230] <EOI> [<ffffffff8100371a>] do_softirq+0x38/0x6e
> [ 3314.516248] [<ffffffff8103cbd9>] _local_bh_enable_ip.isra.12+0x7d/0xa0
> [ 3314.516259] [<ffffffff8103cc0a>] local_bh_enable_ip+0xe/0x10
> [ 3314.516268] [<ffffffff813ff657>] _raw_spin_unlock_bh+0x23/0x25
> [ 3314.516291] [<ffffffffa014ec70>] ieee80211_agg_tx_operational+0x99/0xa4 [mac80211]
> [ 3314.516316] [<ffffffffa014f7bf>] ieee80211_process_addba_resp+0xb8/0xf1 [mac80211]
> [ 3314.516329] [<ffffffff81064040>] ? arch_read_unlock+0xe/0xe
> [ 3314.516355] [<ffffffffa0156a38>] ieee80211_iface_work+0x130/0x2b5 [mac80211]
> [ 3314.516381] [<ffffffffa0156908>] ? ieee80211_teardown_sdata+0xcc/0xcc [mac80211]
> [ 3314.516394] [<ffffffff8104d9cc>] process_one_work+0x17b/0x2bd
> [ 3314.516404] [<ffffffff8104c011>] ? need_to_create_worker+0x12/0x26
> [ 3314.516415] [<ffffffff8104eac7>] worker_thread+0xdb/0x15f
> [ 3314.516426] [<ffffffff8104e9ec>] ? manage_workers.isra.24+0x171/0x171
> [ 3314.516436] [<ffffffff81051ef2>] kthread+0x84/0x8c
> [ 3314.516447] [<ffffffff81401394>] kernel_thread_helper+0x4/0x10
> [ 3314.516458] [<ffffffff81051e6e>] ? kthread_worker_fn+0x148/0x148
> [ 3314.516467] [<ffffffff81401390>] ? gs_change+0xb/0xb
> [ 3314.516474] ---[ end trace b7620f873182e7e4 ]---
> [ 3324.128094] iwlwifi 0000:06:00.0: Queue 11 stuck for 10000 ms.
> [ 3324.128105] iwlwifi 0000:06:00.0: Current read_ptr 14 write_ptr 31
> [ 3324.128113] iwlwifi 0000:06:00.0: On demand firmware reload
> [ 3324.128548] ieee80211 phy0: Hardware restart was requested
> [ 3324.128657] iwlwifi 0000:06:00.0: L1 Enabled; Disabling L0S
> [ 3324.131680] iwlwifi 0000:06:00.0: Radio type=0x1-0x2-0x0
>
>
> Best wishes
>
> Norbert
> ------------------------------------------------------------------------
> Norbert Preining preining@{jaist.ac.jp, logic.at, debian.org}
> JAIST, Japan TeX Live & Debian Developer
> DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
> ------------------------------------------------------------------------
> PODE HOLE (n.)
> A hole drilled in chipboard lavatory walls by homosexuals for any one
> of a number of purposes.
> --- Douglas Adams, The Meaning of Liff
^ permalink raw reply
* Re: iwlagn is getting very shaky
From: Norbert Preining @ 2011-10-26 4:03 UTC (permalink / raw)
To: wwguy
Cc: David Rientjes, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <1319601333.14693.19.camel@wwguy-ubuntu>
On Di, 25 Okt 2011, wwguy wrote:
> so this is different problem, right? it looks different compare to what
> you described before which is cause by queue stopped.
I assume that this is a different regression concerning 3.1.0 released.
But *I* cannot be sure about it ;-)
Best wishes
Norbert
------------------------------------------------------------------------
Norbert Preining preining@{jaist.ac.jp, logic.at, debian.org}
JAIST, Japan TeX Live & Debian Developer
DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
------------------------------------------------------------------------
ROCHESTER (n.)
One who is able to gain occupation of the armrest on both sides of
their cinema or aircraft seat.
--- Douglas Adams, The Meaning of Liff
^ permalink raw reply
* Re: iwlagn is getting very shaky
From: wwguy @ 2011-10-26 4:00 UTC (permalink / raw)
To: Norbert Preining
Cc: David Rientjes, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <20111026040332.GF24956@gamma.logic.tuwien.ac.at>
On Tue, 2011-10-25 at 21:03 -0700, Norbert Preining wrote:
> On Di, 25 Okt 2011, wwguy wrote:
> > so this is different problem, right? it looks different compare to what
> > you described before which is cause by queue stopped.
>
> I assume that this is a different regression concerning 3.1.0 released.
>
> But *I* cannot be sure about it ;-)
>
Are you seeing this without suspend/resume?
Thanks
Wey
^ permalink raw reply
* Re: iwlagn is getting very shaky
From: Norbert Preining @ 2011-10-26 4:34 UTC (permalink / raw)
To: wwguy
Cc: David Rientjes, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <1319601654.14693.20.camel@wwguy-ubuntu>
On Di, 25 Okt 2011, wwguy wrote:
> > But *I* cannot be sure about it ;-)
> >
> Are you seeing this without suspend/resume?
Yes. I just shut down and started, and the same happens again. If you
need the dmesg output let me know.
Best wishes
Norbert
------------------------------------------------------------------------
Norbert Preining preining@{jaist.ac.jp, logic.at, debian.org}
JAIST, Japan TeX Live & Debian Developer
DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
------------------------------------------------------------------------
RUNCORN (n.)
A peeble (q.v.) which is larger that a belper (q.v.)
--- Douglas Adams, The Meaning of Liff
^ permalink raw reply
* Re: iwlagn is getting very shaky
From: Richard Yao @ 2011-10-26 4:54 UTC (permalink / raw)
To: Norbert Preining
Cc: David Rientjes, linux-kernel@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net, ilw@linux.intel.com,
linux-wireless@vger.kernel.org, Pekka Enberg
In-Reply-To: <20111026043419.GA30368@gamma.logic.tuwien.ac.at>
Dear Norbert,
Try doing "iwconfig wlan0 rts 0". As I said less than an hour ago in
my rather lengthy post to the Linux mailing list, that made things
better for me, but not perfect.
Speaking of which, that post described my findings on why I was having
wireless issues that I did not post several weeks ago because I didn't
think anyone would care. Since people do seem to care, I probably
should have CCed that email to everyone else that was on people's CC
lists, but I am new to mailing lists (and to Linux), so I did not
think of it until now.
Yours truly,
Richard Yao
On Wed, Oct 26, 2011 at 12:34 AM, Norbert Preining <preining@logic.at> wrote:
> On Di, 25 Okt 2011, wwguy wrote:
>> > But *I* cannot be sure about it ;-)
>> >
>> Are you seeing this without suspend/resume?
>
> Yes. I just shut down and started, and the same happens again. If you
> need the dmesg output let me know.
>
> Best wishes
>
> Norbert
> ------------------------------------------------------------------------
> Norbert Preining preining@{jaist.ac.jp, logic.at, debian.org}
> JAIST, Japan TeX Live & Debian Developer
> DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
> ------------------------------------------------------------------------
> RUNCORN (n.)
> A peeble (q.v.) which is larger that a belper (q.v.)
> --- Douglas Adams, The Meaning of Liff
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply
* Re: wifi iwlagn fails to authenticate after wake from suspend
From: David Rientjes @ 2011-10-26 6:27 UTC (permalink / raw)
To: Gene Smith; +Cc: wwguy, ilw, linux-kernel, linux-wireless
In-Reply-To: <j881g5$tdf$1@dough.gmane.org>
On Wed, 26 Oct 2011, Gene Smith wrote:
> Now after upgrade to Ubuntu 11.10 when resume from suspend, wifi fails to
> reconnect saying waiting for authentication. When I use older kernel, 2.4.38
> instead of the new 3.0.0, it still works OK. If using ethernet, after wake
> from suspend it always works OK.
>
So we need to bisect between 2.4.38 and 3.0.0? :) I'm running ubuntu
11.10 on a home laptop so I'll give this a try as well when I can if I can
put up with unity for that long.
> More details on this bug are here
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/880648
> and here
> https://bugzilla.redhat.com/show_bug.cgi?id=7374
>
> Tried new Ubuntu kernel 3.1-rc10 did not help. Did not try an alternate kernel
> with Fedora 15.
>
> The common failure messages seen with Ubuntu and Fedora is this:
>
> <info> (wlan0): device state change: need-auth -> failed (reason 'no-secrets')
> [60 120 7]
> Oct 24 01:20:00 hplt NetworkManager[1016]: <warn> Activation (wlan0) failed
> for access point (dbnet)
>
> After this occurs, no further attempt to authenticate wifi occur and a red X
> appears over the wifi icon. I must then use ethernet (or reboot).
>
Adding wireless folks to the cc.
^ permalink raw reply
* Re: [PATCH V2 00/31] ath6kl Add multiple vif support
From: Kalle Valo @ 2011-10-26 7:22 UTC (permalink / raw)
To: Vasanthakumar Thiagarajan; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
On 10/25/2011 05:03 PM, Vasanthakumar Thiagarajan wrote:
> This patch set adds basic infrastructure for multiple
> virtual interface. As configuring the firmware with more than one
> vif causes random target assert, the number of supported vifs is
> restricted to 1 for now. I would like to thank Vivek Natarajan
> (nataraja@qca.qualcomm.com) for his inital work in this area and
> Arthi Thiruvengadam (athiruve@qca.qualcomm.com) for finding some
> critical bugs.
I saw the lockdep warning below after I loaded the module and connected
to an AP. But the driver still functioned normally.
Kalle
[ 73.439849] ath6kl: hw 2.1.1 fw 3.1.1.609
[ 75.408050]
[ 75.408081] =========================================================
[ 75.416320] [ INFO: possible irq lock inversion dependency detected ]
[ 75.423004] 3.1.0-rc9-wl+ #44
[ 75.426086] ---------------------------------------------------------
[ 75.432800] swapper/0 just changed the state of lock:
[ 75.438049] (&(&ar->lock)->rlock){+.-...}, at: [<bf011b94>]
ath6kl_indicate_tx_activity+0x38/0xb8 [ath6kl]
[ 75.448303] but this lock took another, SOFTIRQ-unsafe lock in the past:
[ 75.455261] (&(&ar->list_lock)->rlock){+.+...}
[ 75.459808]
[ 75.459808] and interrupts could create inverse lock ordering between
them.
[ 75.459808]
[ 75.470306]
[ 75.470306] other info that might help us debug this:
[ 75.477081] Possible interrupt unsafe locking scenario:
[ 75.477081]
[ 75.484130] CPU0 CPU1
[ 75.488861] ---- ----
[ 75.493560] lock(&(&ar->list_lock)->rlock);
[ 75.498107] local_irq_disable();
[ 75.504241] lock(&(&ar->lock)->rlock);
[ 75.510955]
lock(&(&ar->list_lock)->rlock);
[ 75.518096] <Interrupt>
[ 75.520812] lock(&(&ar->lock)->rlock);
[ 75.525085]
[ 75.525085] *** DEADLOCK ***
[ 75.525085]
[ 75.531249] 3 locks held by swapper/0:
[ 75.535156] #0: (&n->timer){+.-...}, at: [<c004ebe0>]
run_timer_softirq+0x244/0x564
[ 75.543334] #1: (rcu_read_lock_bh){.+....}, at: [<c03175e4>]
dev_queue_xmit+0x0/0x714
[ 75.551696] #2: (_xmit_ETHER#2){+.-...}, at: [<c032bfc4>]
sch_direct_xmit+0x38/0x2dc
[ 75.559936]
[ 75.559967] the shortest dependencies between 2nd lock and 1st lock:
[ 75.568115] -> (&(&ar->list_lock)->rlock){+.+...} ops: 60 {
[ 75.574035] HARDIRQ-ON-W at:
[ 75.577392] [<c0078004>]
__lock_acquire+0x7b0/0x1a8c
[ 75.586273] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 75.594879] [<c03e272c>]
_raw_spin_lock+0x4c/0x84
[ 75.603485] [<bf00898c>]
ath6kl_interface_add+0x184/0x1e0 [ath6kl]
[ 75.613677] [<bf00d204>]
ath6kl_core_init+0xe9c/0x1760 [ath6kl]
[ 75.623565] [<bf01859c>]
ath6kl_sdio_probe+0x324/0x3bc [ath6kl]
[ 75.633483] [<c02ed524>]
sdio_bus_probe+0x100/0x164
[ 75.642272] [<c0274de0>]
driver_probe_device+0x14c/0x290
[ 75.651519] [<c0274f8c>]
__driver_attach+0x68/0x8c
[ 75.660217] [<c0274458>]
bus_for_each_dev+0x4c/0x8c
[ 75.669006] [<c0273c9c>]
bus_add_driver+0xc4/0x250
[ 75.677703] [<c02755f0>]
driver_register+0xc0/0x150
[ 75.686462] [<bf02700c>]
0xbf02700c
[ 75.693817] [<c00086c0>]
do_one_initcall+0x94/0x160
[ 75.702606] [<c0084670>]
sys_init_module+0x1220/0x13e0
[ 75.711669] [<c00139e0>]
ret_fast_syscall+0x0/0x3c
[ 75.720367] SOFTIRQ-ON-W at:
[ 75.723724] [<c0078028>]
__lock_acquire+0x7d4/0x1a8c
[ 75.732604] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 75.741180] [<c03e272c>]
_raw_spin_lock+0x4c/0x84
[ 75.749786] [<bf00898c>]
ath6kl_interface_add+0x184/0x1e0 [ath6kl]
[ 75.759979] [<bf00d204>]
ath6kl_core_init+0xe9c/0x1760 [ath6kl]
[ 75.769897] [<bf01859c>]
ath6kl_sdio_probe+0x324/0x3bc [ath6kl]
[ 75.779785] [<c02ed524>]
sdio_bus_probe+0x100/0x164
[ 75.788574] [<c0274de0>]
driver_probe_device+0x14c/0x290
[ 75.797821] [<c0274f8c>]
__driver_attach+0x68/0x8c
[ 75.806518] [<c0274458>]
bus_for_each_dev+0x4c/0x8c
[ 75.815307] [<c0273c9c>]
bus_add_driver+0xc4/0x250
[ 75.824005] [<c02755f0>]
driver_register+0xc0/0x150
[ 75.832794] [<bf02700c>]
0xbf02700c
[ 75.840118] [<c00086c0>]
do_one_initcall+0x94/0x160
[ 75.848907] [<c0084670>]
sys_init_module+0x1220/0x13e0
[ 75.857940] [<c00139e0>]
ret_fast_syscall+0x0/0x3c
[ 75.866638] INITIAL USE at:
[ 75.869903] [<c007808c>]
__lock_acquire+0x838/0x1a8c
[ 75.878692] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 75.887207] [<c03e272c>]
_raw_spin_lock+0x4c/0x84
[ 75.895721] [<bf00898c>]
ath6kl_interface_add+0x184/0x1e0 [ath6kl]
[ 75.905792] [<bf00d204>]
ath6kl_core_init+0xe9c/0x1760 [ath6kl]
[ 75.915618] [<bf01859c>]
ath6kl_sdio_probe+0x324/0x3bc [ath6kl]
[ 75.925445] [<c02ed524>]
sdio_bus_probe+0x100/0x164
[ 75.934143] [<c0274de0>]
driver_probe_device+0x14c/0x290
[ 75.943298] [<c0274f8c>]
__driver_attach+0x68/0x8c
[ 75.951904] [<c0274458>]
bus_for_each_dev+0x4c/0x8c
[ 75.960571] [<c0273c9c>]
bus_add_driver+0xc4/0x250
[ 75.969177] [<c02755f0>]
driver_register+0xc0/0x150
[ 75.977874] [<bf02700c>]
0xbf02700c
[ 75.985107] [<c00086c0>]
do_one_initcall+0x94/0x160
[ 75.993804] [<c0084670>]
sys_init_module+0x1220/0x13e0
[ 76.002777] [<c00139e0>]
ret_fast_syscall+0x0/0x3c
[ 76.011383] }
[ 76.013183] ... key at: [<bf020544>]
__key.38763+0x0/0xffff848c [ath6kl]
[ 76.020843] ... acquired at:
[ 76.024017] [<c00799d4>] lock_acquire+0x158/0x1a8
[ 76.029174] [<c03e272c>] _raw_spin_lock+0x4c/0x84
[ 76.034362] [<bf015410>] ath6kl_get_vif_by_index+0x68/0x78 [ath6kl]
[ 76.041198] [<bf0116b0>] ath6kl_tx_complete+0x178/0x4c0 [ath6kl]
[ 76.047760] [<bf0046ec>] htc_tx_comp_handler+0x4c/0x54 [ath6kl]
[ 76.054229] [<bf0030a8>] ath6kl_hif_rw_comp_handler+0x48/0x60 [ath6kl]
[ 76.061340] [<bf0186c4>] ath6kl_sdio_write_async_work+0x90/0xbc
[ath6kl]
[ 76.068634] [<c005a8c4>] process_one_work+0x354/0x628
[ 76.074157] [<c005cb74>] worker_thread+0x1f4/0x3c0
[ 76.079437] [<c006147c>] kthread+0x80/0x88
[ 76.083953] [<c001496c>] kernel_thread_exit+0x0/0x8
[ 76.089324]
[ 76.090850] -> (&(&ar->lock)->rlock){+.-...} ops: 23 {
[ 76.096221] HARDIRQ-ON-W at:
[ 76.099487] [<c0078004>]
__lock_acquire+0x7b0/0x1a8c
[ 76.108184] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 76.116607] [<c03e2aa0>]
_raw_spin_lock_bh+0x54/0x8c
[ 76.125305] [<bf0112d8>]
ath6kl_refill_amsdu_rxbufs+0x68/0x94 [ath6kl]
[ 76.135681] [<bf00da98>]
ath6kl_core_init+0x1730/0x1760 [ath6kl]
[ 76.145477] [<bf01859c>]
ath6kl_sdio_probe+0x324/0x3bc [ath6kl]
[ 76.155212] [<c02ed524>]
sdio_bus_probe+0x100/0x164
[ 76.163818] [<c0274de0>]
driver_probe_device+0x14c/0x290
[ 76.172882] [<c0274f8c>]
__driver_attach+0x68/0x8c
[ 76.181396] [<c0274458>]
bus_for_each_dev+0x4c/0x8c
[ 76.190002] [<c0273c9c>]
bus_add_driver+0xc4/0x250
[ 76.198516] [<c02755f0>]
driver_register+0xc0/0x150
[ 76.207122] [<bf02700c>]
0xbf02700c
[ 76.214263] [<c00086c0>]
do_one_initcall+0x94/0x160
[ 76.222869] [<c0084670>]
sys_init_module+0x1220/0x13e0
[ 76.231750] [<c00139e0>]
ret_fast_syscall+0x0/0x3c
[ 76.240264] IN-SOFTIRQ-W at:
[ 76.243530] [<c0077f9c>]
__lock_acquire+0x748/0x1a8c
[ 76.252227] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 76.260650] [<c03e2aa0>]
_raw_spin_lock_bh+0x54/0x8c
[ 76.269348] [<bf011b94>]
ath6kl_indicate_tx_activity+0x38/0xb8 [ath6kl]
[ 76.279785] [<bf014460>]
ath6kl_wmi_create_pstream_cmd+0x1e0/0x224 [ath6kl]
[ 76.290618] [<bf0145a4>]
ath6kl_wmi_implicit_create_pstream+0x100/0x138 [ath6kl]
[ 76.301910] [<bf012020>]
ath6kl_data_tx+0x2d0/0x5fc [ath6kl]
[ 76.311370] [<c03172a8>]
dev_hard_start_xmit+0x504/0x840
[ 76.320404] [<c032bfe8>]
sch_direct_xmit+0x5c/0x2dc
[ 76.329010] [<c0317a08>]
dev_queue_xmit+0x424/0x714
[ 76.337615] [<c0363864>]
arp_solicit+0x214/0x254
[ 76.345977] [<c0323c30>]
neigh_timer_handler+0x22c/0x2a8
[ 76.355010] [<c004ed08>]
run_timer_softirq+0x36c/0x564
[ 76.363891] [<c0047e48>]
__do_softirq+0x138/0x314
[ 76.372314] [<c00481d4>]
irq_exit+0x54/0xb4
[ 76.380187] [<c00148f8>]
handle_IRQ+0x68/0x8c
[ 76.388244] [<c03e34b8>]
__irq_svc+0x38/0xa0
[ 76.396240] [<c007673c>]
trace_hardirqs_on_caller+0x1c/0x19c
[ 76.405639] [<c0015018>]
cpu_idle+0x7c/0xcc
[ 76.413513] [<c05687f8>]
start_kernel+0x2ac/0x30c
[ 76.421936] INITIAL USE at:
[ 76.425109] [<c007808c>]
__lock_acquire+0x838/0x1a8c
[ 76.433715] [<c00799d4>]
lock_acquire+0x158/0x1a8
[ 76.442047] [<c03e2aa0>]
_raw_spin_lock_bh+0x54/0x8c
[ 76.450653] [<bf0112d8>]
ath6kl_refill_amsdu_rxbufs+0x68/0x94 [ath6kl]
[ 76.460937] [<bf00da98>]
ath6kl_core_init+0x1730/0x1760 [ath6kl]
[ 76.470672] [<bf01859c>]
ath6kl_sdio_probe+0x324/0x3bc [ath6kl]
[ 76.480316] [<c02ed524>]
sdio_bus_probe+0x100/0x164
[ 76.488830] [<c0274de0>]
driver_probe_device+0x14c/0x290
[ 76.497802] [<c0274f8c>]
__driver_attach+0x68/0x8c
[ 76.506225] [<c0274458>]
bus_for_each_dev+0x4c/0x8c
[ 76.514739] [<c0273c9c>]
bus_add_driver+0xc4/0x250
[ 76.523162] [<c02755f0>]
driver_register+0xc0/0x150
[ 76.531677] [<bf02700c>] 0xbf02700c
[ 76.538757] [<c00086c0>]
do_one_initcall+0x94/0x160
[ 76.547241] [<c0084670>]
sys_init_module+0x1220/0x13e0
[ 76.556030] [<c00139e0>]
ret_fast_syscall+0x0/0x3c
[ 76.564453] }
[ 76.566192] ... key at: [<bf020554>] __key.38761+0x0/0xffff847c
[ath6kl]
[ 76.573730] ... acquired at:
[ 76.576812] [<c0076ea4>] check_usage_forwards+0xd8/0xfc
[ 76.582519] [<c007618c>] mark_lock+0x388/0x618
[ 76.587432] [<c0077f9c>] __lock_acquire+0x748/0x1a8c
[ 76.592864] [<c00799d4>] lock_acquire+0x158/0x1a8
[ 76.598022] [<c03e2aa0>] _raw_spin_lock_bh+0x54/0x8c
[ 76.603485] [<bf011b94>] ath6kl_indicate_tx_activity+0x38/0xb8
[ath6kl]
[ 76.610687] [<bf014460>] ath6kl_wmi_create_pstream_cmd+0x1e0/0x224
[ath6kl]
[ 76.618255] [<bf0145a4>]
ath6kl_wmi_implicit_create_pstream+0x100/0x138 [ath6kl]
[ 76.626251] [<bf012020>] ath6kl_data_tx+0x2d0/0x5fc [ath6kl]
[ 76.632476] [<c03172a8>] dev_hard_start_xmit+0x504/0x840
[ 76.638275] [<c032bfe8>] sch_direct_xmit+0x5c/0x2dc
[ 76.643615] [<c0317a08>] dev_queue_xmit+0x424/0x714
[ 76.648956] [<c0363864>] arp_solicit+0x214/0x254
[ 76.654052] [<c0323c30>] neigh_timer_handler+0x22c/0x2a8
[ 76.659851] [<c004ed08>] run_timer_softirq+0x36c/0x564
[ 76.665466] [<c0047e48>] __do_softirq+0x138/0x314
[ 76.670654] [<c00481d4>] irq_exit+0x54/0xb4
[ 76.675262] [<c00148f8>] handle_IRQ+0x68/0x8c
[ 76.680084] [<c03e34b8>] __irq_svc+0x38/0xa0
[ 76.684814] [<c007673c>] trace_hardirqs_on_caller+0x1c/0x19c
[ 76.690979] [<c0015018>] cpu_idle+0x7c/0xcc
[ 76.695587] [<c05687f8>] start_kernel+0x2ac/0x30c
[ 76.700775]
[ 76.702301]
[ 76.702301] stack backtrace:
[ 76.706878] [<c0019998>] (unwind_backtrace+0x0/0x128) from
[<c0076d88>] (print_irq_inversion_bug+0x194/0x1d8)
[ 76.717193] [<c0076d88>] (print_irq_inversion_bug+0x194/0x1d8) from
[<c0076ea4>] (check_usage_forwards+0xd8/0xfc)
[ 76.727874] [<c0076ea4>] (check_usage_forwards+0xd8/0xfc) from
[<c007618c>] (mark_lock+0x388/0x618)
[ 76.737274] [<c007618c>] (mark_lock+0x388/0x618) from [<c0077f9c>]
(__lock_acquire+0x748/0x1a8c)
[ 76.746429] [<c0077f9c>] (__lock_acquire+0x748/0x1a8c) from
[<c00799d4>] (lock_acquire+0x158/0x1a8)
[ 76.755859] [<c00799d4>] (lock_acquire+0x158/0x1a8) from [<c03e2aa0>]
(_raw_spin_lock_bh+0x54/0x8c)
[ 76.765319] [<c03e2aa0>] (_raw_spin_lock_bh+0x54/0x8c) from
[<bf011b94>] (ath6kl_indicate_tx_activity+0x38/0xb8 [ath6kl])
[ 76.776824] [<bf011b94>] (ath6kl_indicate_tx_activity+0x38/0xb8
[ath6kl]) from [<bf014460>] (ath6kl_wmi_create_pstream_cmd+0x1e0/0x224
[ath6kl])
[ 76.790405] [<bf014460>] (ath6kl_wmi_create_pstream_cmd+0x1e0/0x224
[ath6kl]) from [<bf0145a4>]
(ath6kl_wmi_implicit_create_pstream+0x100/0x138 [ath6kl])
[ 76.804809] [<bf0145a4>]
(ath6kl_wmi_implicit_create_pstream+0x100/0x138 [ath6kl]) from
[<bf012020>] (ath6kl_data_tx+0x2d0/0x5fc [ath6kl])
[ 76.817779] [<bf012020>] (ath6kl_data_tx+0x2d0/0x5fc [ath6kl]) from
[<c03172a8>] (dev_hard_start_xmit+0x504/0x840)
[ 76.828552] [<c03172a8>] (dev_hard_start_xmit+0x504/0x840) from
[<c032bfe8>] (sch_direct_xmit+0x5c/0x2dc)
[ 76.838531] [<c032bfe8>] (sch_direct_xmit+0x5c/0x2dc) from
[<c0317a08>] (dev_queue_xmit+0x424/0x714)
[ 76.848022] [<c0317a08>] (dev_queue_xmit+0x424/0x714) from
[<c0363864>] (arp_solicit+0x214/0x254)
[ 76.857269] [<c0363864>] (arp_solicit+0x214/0x254) from [<c0323c30>]
(neigh_timer_handler+0x22c/0x2a8)
[ 76.866973] [<c0323c30>] (neigh_timer_handler+0x22c/0x2a8) from
[<c004ed08>] (run_timer_softirq+0x36c/0x564)
[ 76.877197] [<c004ed08>] (run_timer_softirq+0x36c/0x564) from
[<c0047e48>] (__do_softirq+0x138/0x314)
[ 76.886779] [<c0047e48>] (__do_softirq+0x138/0x314) from [<c00481d4>]
(irq_exit+0x54/0xb4)
[ 76.895385] [<c00481d4>] (irq_exit+0x54/0xb4) from [<c00148f8>]
(handle_IRQ+0x68/0x8c)
[ 76.903625] [<c00148f8>] (handle_IRQ+0x68/0x8c) from [<c03e34b8>]
(__irq_svc+0x38/0xa0)
[ 76.911987] [<c03e34b8>] (__irq_svc+0x38/0xa0) from [<c007673c>]
(trace_hardirqs_on_caller+0x1c/0x19c)
[ 76.921661] [<c007673c>] (trace_hardirqs_on_caller+0x1c/0x19c) from
[<c0015018>] (cpu_idle+0x7c/0xcc)
[ 76.931243] [<c0015018>] (cpu_idle+0x7c/0xcc) from [<c05687f8>]
(start_kernel+0x2ac/0x30c)
^ permalink raw reply
* Re: [PATCH V2 00/31] ath6kl Add multiple vif support
From: Kalle Valo @ 2011-10-26 8:24 UTC (permalink / raw)
To: Vasanthakumar Thiagarajan; +Cc: linux-wireless
In-Reply-To: <1319551466-29070-1-git-send-email-vthiagar@qca.qualcomm.com>
On 10/25/2011 05:03 PM, Vasanthakumar Thiagarajan wrote:
> This patch set adds basic infrastructure for multiple
> virtual interface. As configuring the firmware with more than one
> vif causes random target assert, the number of supported vifs is
> restricted to 1 for now. I would like to thank Vivek Natarajan
> (nataraja@qca.qualcomm.com) for his inital work in this area and
> Arthi Thiruvengadam (athiruve@qca.qualcomm.com) for finding some
> critical bugs.
Thanks, app patches applied. But please do take a look at the lockdep
warning I saw.
Kalle
^ permalink raw reply
* Re: [PATCH 1/9] ath6kl: remove unused A_CACHE_LINE_PAD
From: Kalle Valo @ 2011-10-26 8:33 UTC (permalink / raw)
To: Kalle Valo; +Cc: linux-wireless
In-Reply-To: <20111024091644.5004.2767.stgit@localhost6.localdomain6>
On 10/24/2011 12:16 PM, Kalle Valo wrote:
> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
All nine patches applied. There were some conflicts but git was able to
handle that.
Kalle
^ permalink raw reply
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