* [PATCH 2/9] iwmc3200wifi: Set WEP key from connect
From: Samuel Ortiz @ 2009-09-01 13:13 UTC (permalink / raw)
To: John Linville; +Cc: linux-wireless, Zhu Yi, Samuel Ortiz
In-Reply-To: <cover.1251809163.git.sameo@linux.intel.com>
When connect is called with the LEGACY_PSK authentication type set, and a
proper sme->key, we need to set the WEP key straight after setting the
profile otherwise the authentication will never start.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
---
drivers/net/wireless/iwmc3200wifi/cfg80211.c | 44 +++++++++++++++++++++++++-
1 files changed, 43 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/iwmc3200wifi/cfg80211.c b/drivers/net/wireless/iwmc3200wifi/cfg80211.c
index 789ef5c..d8bb723 100644
--- a/drivers/net/wireless/iwmc3200wifi/cfg80211.c
+++ b/drivers/net/wireless/iwmc3200wifi/cfg80211.c
@@ -562,6 +562,7 @@ static int iwm_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
{
struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
struct ieee80211_channel *chan = sme->channel;
+ struct key_params key_param;
int ret;
if (!test_bit(IWM_STATUS_READY, &iwm->status))
@@ -619,7 +620,48 @@ static int iwm_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
return ret;
}
- return iwm_send_mlme_profile(iwm);
+ /*
+ * We save the WEP key in case we want to do shared authentication.
+ * We have to do it so because UMAC will assert whenever it gets a
+ * key before a profile.
+ */
+ if (sme->key) {
+ key_param.key = kmemdup(sme->key, sme->key_len, GFP_KERNEL);
+ if (key_param.key == NULL)
+ return -ENOMEM;
+ key_param.key_len = sme->key_len;
+ key_param.seq_len = 0;
+ key_param.cipher = sme->crypto.ciphers_pairwise[0];
+
+ ret = iwm_key_init(&iwm->keys[sme->key_idx], sme->key_idx,
+ NULL, &key_param);
+ kfree(key_param.key);
+ if (ret < 0) {
+ IWM_ERR(iwm, "Invalid key_params\n");
+ return ret;
+ }
+
+ iwm->default_key = sme->key_idx;
+ }
+
+ ret = iwm_send_mlme_profile(iwm);
+
+ if (iwm->umac_profile->sec.auth_type != UMAC_AUTH_TYPE_LEGACY_PSK ||
+ sme->key == NULL)
+ return ret;
+
+ /*
+ * We want to do shared auth.
+ * We need to actually set the key we previously cached,
+ * and then tell the UMAC it's the default one.
+ * That will trigger the auth+assoc UMAC machinery, and again,
+ * this must be done after setting the profile.
+ */
+ ret = iwm_set_key(iwm, 0, &iwm->keys[sme->key_idx]);
+ if (ret < 0)
+ return ret;
+
+ return iwm_set_tx_key(iwm, iwm->default_key);
}
static int iwm_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev,
--
1.6.3.3
^ permalink raw reply related
* Re: zd1211rw on ppc (iBook G4)
From: Michael Buesch @ 2009-09-01 12:56 UTC (permalink / raw)
To: Hin-Tak Leung; +Cc: Leonardo H. Souza Hamada, linux-wireless
In-Reply-To: <3ace41890908311235i62ab0510neb8b2021c3f2945e@mail.gmail.com>
On Monday 31 August 2009 21:35:31 Hin-Tak Leung wrote:
> On Mon, Aug 31, 2009 at 8:27 PM, Michael Buesch<mb@bu3sch.de> wrote:
> > On Monday 31 August 2009 20:26:22 Hin-Tak Leung wrote:
> >> It would appear that the rw driver's ieee80211->mac80211 conversion
> >> has broken big- endian platforms, at a first guess.
> >
> > Last time I tested the device worked fine on my powerbook with zd1211rw/mac80211.
> > But that's maybe two or three release cycles in the past.
> >
> > --
> > Greetings, Michael.
> >
>
> The rw ieee80211->mac80211 conversion happens in 2.6.27->26.28 ...
> Iguess the question is whether it was 2.6.28 or 2.6.27 you had success
> with? That's unfortunately two *and* three cycles in the past,
> respectively :-).
>
>
I certainly used zd1211rw/mac80211 and it worked.
--
Greetings, Michael.
^ permalink raw reply
* Re: [PATCH v2] b43: LP-PHY: Begin implementing calibration & software RFKILL support
From: Michael Buesch @ 2009-09-01 12:55 UTC (permalink / raw)
To: Gábor Stefanik
Cc: John W. Linville, Larry Finger, Mark Huijgen, Broadcom Wireless,
linux-wireless
In-Reply-To: <69e28c910908311238r51222506j7bd21e3b7af5b4ad@mail.gmail.com>
On Monday 31 August 2009 21:38:28 Gábor Stefanik wrote:
> On Mon, Aug 31, 2009 at 9:17 PM, Michael Buesch<mb@bu3sch.de> wrote:
> > On Monday 31 August 2009 19:53:31 John W. Linville wrote:
> >> On Sun, Aug 30, 2009 at 05:55:40PM +0200, Michael Buesch wrote:
> >> > On Sunday 30 August 2009 17:10:23 Larry Finger wrote:
> >> > > Michael Buesch wrote:
> >> > > > On Sunday 30 August 2009 02:15:55 Gábor Stefanik wrote:
> >> > > >> static void lpphy_pr41573_workaround(struct b43_wldev *dev)
> >> > > >> {
> >> > > >> struct b43_phy_lp *lpphy = dev->phy.lp;
> >> > > >> @@ -1357,28 +1488,440 @@ static void lpphy_pr41573_workaround(struct b43_wldev *dev)
> >> > > >> b43_lptab_read_bulk(dev, B43_LPTAB32(7, 0x140),
> >> > > >> saved_tab_size, saved_tab);
> >> > > >> }
> >> > > >> + b43_put_phy_into_reset(dev);
> >> > > >
> >> > > > Are you sure you really want this?
> >> > > > This function completely disables the PHY on the backplane and keeps the physical
> >> > > > PHY reset pin asserted (even after return from the function).
> >> > > > So the PHY will physically be powered down from this point on. The following
> >> > > > PHY accesses could even hang the machine, because the PHY won't respond to
> >> > > > register accesses anymore.
> >> > > >
> >> > > > We currently only use this function on A/G Multi-PHY devices to permanently
> >> > > > hard-disable the PHY that's not used.
> >> > >
> >> > > The PHY reset routine in
> >> > > http://bcm-v4.sipsolutions.net/802.11/PHY/Reset, which I just updated
> >> > > for the latest N PHY changes, appears to be a different routine than
> >> > > b43_put_phy_into_reset(). The names are confusing.
> >> >
> >> > b43_put_phy_into_reset() is opencoded in the specifications in various init
> >> > routines. There's no separate specs page for that function.
> >> > But I think the code is straightforward and easy to understand.
> >>
> >> So is this patch right or not? Should I hold onto it for 2.6.33
> >> (i.e. after the 2.6.32 merge window)?
> >
> > I'm pretty sure it's incorrect.
> >
> > --
> > Greetings, Michael.
> >
>
> Do we have the correct reset routine implemented somewhere, or is it a
> new routine to add?
>
We opencode something similar (N stuff and so on not included) in wireless_core_reset.
So we should probably implement http://bcm-v4.sipsolutions.net/802.11/PHY/Reset
in a separate function and also call that from wireless_core_reset (and your workaround
code).
--
Greetings, Michael.
^ permalink raw reply
* [PATCH 4/4] rndis_wlan: remove 'select WIRELESS_EXT' in Kconfig
From: Jussi Kivilinna @ 2009-09-01 12:33 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
In-Reply-To: <20090901123255.9213.57970.stgit@fate.lan>
Since rndis_wlan is now converted to cfg80211, WIRELESS_EXT isn't
required anymore.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
---
drivers/net/wireless/Kconfig | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index dda7cc2..623897f 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -337,7 +337,6 @@ config USB_NET_RNDIS_WLAN
select USB_USBNET
select USB_NET_CDCETHER
select USB_NET_RNDIS_HOST
- select WIRELESS_EXT
---help---
This is a driver for wireless RNDIS devices.
These are USB based adapters found in devices such as:
^ permalink raw reply related
* [PATCH 3/4] rndis_wlan: fix sparse endianess warnings
From: Jussi Kivilinna @ 2009-09-01 12:33 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
In-Reply-To: <20090901123255.9213.57970.stgit@fate.lan>
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
---
drivers/net/wireless/rndis_wlan.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index add2eb8..54175b6 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -253,8 +253,8 @@ struct ndis_80211_pmkid_cand_list {
struct ndis_80211_status_indication {
__le32 status_type;
union {
- enum ndis_80211_media_stream_mode media_stream_mode;
- enum ndis_80211_radio_status radio_status;
+ __le32 media_stream_mode;
+ __le32 radio_status;
struct ndis_80211_auth_request auth_request[0];
struct ndis_80211_pmkid_cand_list cand_list;
} u;
@@ -1296,7 +1296,7 @@ static int add_wep_key(struct usbnet *usbdev, const u8 *key, int key_len,
static int add_wpa_key(struct usbnet *usbdev, const u8 *key, int key_len,
int index, const u8 *addr, const u8 *rx_seq,
- int seq_len, u32 cipher, int flags)
+ int seq_len, u32 cipher, __le32 flags)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
struct ndis_80211_key ndis_key;
@@ -2023,7 +2023,7 @@ static int rndis_add_key(struct wiphy *wiphy, struct net_device *netdev,
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
struct usbnet *usbdev = priv->usbdev;
- int flags;
+ __le32 flags;
devdbg(usbdev, "rndis_add_key(%i, %pM, %08x)", key_index, mac_addr,
params->cipher);
^ permalink raw reply related
* [PATCH 2/4] rndis_wlan: cleanup
From: Jussi Kivilinna @ 2009-09-01 12:33 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
In-Reply-To: <20090901123255.9213.57970.stgit@fate.lan>
- remove double newlines between functions
- remove commented out function (rndis_set_config_parameter_u32())
- coding style fix in rndis_set_config_parameter_str()
- add comment banners between function sections
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
---
drivers/net/wireless/rndis_wlan.c | 62 ++++---------------------------------
1 files changed, 7 insertions(+), 55 deletions(-)
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index dc2804f..add2eb8 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -560,7 +560,6 @@ static struct rndis_wlan_private *get_rndis_wlan_priv(struct usbnet *dev)
return (struct rndis_wlan_private *)dev->driver_priv;
}
-
static u32 get_bcm4320_power_dbm(struct rndis_wlan_private *priv)
{
switch (priv->param_power_output) {
@@ -576,7 +575,6 @@ static u32 get_bcm4320_power_dbm(struct rndis_wlan_private *priv)
}
}
-
static bool is_wpa_key(struct rndis_wlan_private *priv, int idx)
{
int cipher = priv->encr_keys[idx].cipher;
@@ -585,7 +583,6 @@ static bool is_wpa_key(struct rndis_wlan_private *priv, int idx)
cipher == WLAN_CIPHER_SUITE_TKIP);
}
-
static int rndis_cipher_to_alg(u32 cipher)
{
switch (cipher) {
@@ -613,7 +610,6 @@ static int rndis_akm_suite_to_key_mgmt(u32 akm_suite)
}
}
-
#ifdef DEBUG
static const char *oid_to_string(__le32 oid)
{
@@ -675,7 +671,6 @@ static const char *oid_to_string(__le32 oid)
}
#endif
-
/* translate error code */
static int rndis_error_status(__le32 rndis_status)
{
@@ -699,7 +694,6 @@ static int rndis_error_status(__le32 rndis_status)
return ret;
}
-
static int rndis_query_oid(struct usbnet *dev, __le32 oid, void *data, int *len)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(dev);
@@ -758,7 +752,6 @@ static int rndis_query_oid(struct usbnet *dev, __le32 oid, void *data, int *len)
return ret;
}
-
static int rndis_set_oid(struct usbnet *dev, __le32 oid, void *data, int len)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(dev);
@@ -817,7 +810,6 @@ static int rndis_set_oid(struct usbnet *dev, __le32 oid, void *data, int len)
return ret;
}
-
static int rndis_reset(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -840,7 +832,6 @@ static int rndis_reset(struct usbnet *usbdev)
return 0;
}
-
/*
* Specs say that we can only set config parameters only soon after device
* initialization.
@@ -927,16 +918,9 @@ static int rndis_set_config_parameter(struct usbnet *dev, char *param,
static int rndis_set_config_parameter_str(struct usbnet *dev,
char *param, char *value)
{
- return(rndis_set_config_parameter(dev, param, 2, value));
+ return rndis_set_config_parameter(dev, param, 2, value);
}
-/*static int rndis_set_config_parameter_u32(struct usbnet *dev,
- char *param, u32 value)
-{
- return(rndis_set_config_parameter(dev, param, 0, &value));
-}*/
-
-
/*
* data conversion functions
*/
@@ -946,7 +930,6 @@ static int level_to_qual(int level)
return qual >= 0 ? (qual <= 100 ? qual : 100) : 0;
}
-
/*
* common functions
*/
@@ -1027,7 +1010,6 @@ static bool is_associated(struct usbnet *usbdev)
return (ret == 0 && !is_zero_ether_addr(bssid));
}
-
static int disassociate(struct usbnet *usbdev, bool reset_ssid)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1064,7 +1046,6 @@ static int disassociate(struct usbnet *usbdev, bool reset_ssid)
return ret;
}
-
static int set_auth_mode(struct usbnet *usbdev, u32 wpa_version,
enum nl80211_auth_type auth_type, int keymgmt)
{
@@ -1109,7 +1090,6 @@ static int set_auth_mode(struct usbnet *usbdev, u32 wpa_version,
return 0;
}
-
static int set_priv_filter(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1127,7 +1107,6 @@ static int set_priv_filter(struct usbnet *usbdev)
sizeof(tmp));
}
-
static int set_encr_mode(struct usbnet *usbdev, int pairwise, int groupwise)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1163,7 +1142,6 @@ static int set_encr_mode(struct usbnet *usbdev, int pairwise, int groupwise)
return 0;
}
-
static int set_infra_mode(struct usbnet *usbdev, int mode)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1189,7 +1167,6 @@ static int set_infra_mode(struct usbnet *usbdev, int mode)
return 0;
}
-
static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold)
{
__le32 tmp;
@@ -1204,7 +1181,6 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold)
sizeof(tmp));
}
-
static int set_frag_threshold(struct usbnet *usbdev, u32 frag_threshold)
{
__le32 tmp;
@@ -1219,7 +1195,6 @@ static int set_frag_threshold(struct usbnet *usbdev, u32 frag_threshold)
sizeof(tmp));
}
-
static void set_default_iw_params(struct usbnet *usbdev)
{
set_infra_mode(usbdev, NDIS_80211_INFRA_INFRA);
@@ -1229,7 +1204,6 @@ static void set_default_iw_params(struct usbnet *usbdev)
set_encr_mode(usbdev, RNDIS_WLAN_ALG_NONE, RNDIS_WLAN_ALG_NONE);
}
-
static int deauthenticate(struct usbnet *usbdev)
{
int ret;
@@ -1239,7 +1213,6 @@ static int deauthenticate(struct usbnet *usbdev)
return ret;
}
-
static int set_channel(struct usbnet *usbdev, int channel)
{
struct ndis_80211_conf config;
@@ -1270,7 +1243,6 @@ static int set_channel(struct usbnet *usbdev, int channel)
return ret;
}
-
/* index must be 0 - N, as per NDIS */
static int add_wep_key(struct usbnet *usbdev, const u8 *key, int key_len,
int index)
@@ -1322,7 +1294,6 @@ static int add_wep_key(struct usbnet *usbdev, const u8 *key, int key_len,
return 0;
}
-
static int add_wpa_key(struct usbnet *usbdev, const u8 *key, int key_len,
int index, const u8 *addr, const u8 *rx_seq,
int seq_len, u32 cipher, int flags)
@@ -1417,7 +1388,6 @@ static int add_wpa_key(struct usbnet *usbdev, const u8 *key, int key_len,
return 0;
}
-
static int restore_key(struct usbnet *usbdev, int key_idx)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1436,7 +1406,6 @@ static int restore_key(struct usbnet *usbdev, int key_idx)
return add_wep_key(usbdev, key.material, key.len, key_idx);
}
-
static void restore_keys(struct usbnet *usbdev)
{
int i;
@@ -1445,13 +1414,11 @@ static void restore_keys(struct usbnet *usbdev)
restore_key(usbdev, i);
}
-
static void clear_key(struct rndis_wlan_private *priv, int idx)
{
memset(&priv->encr_keys[idx], 0, sizeof(priv->encr_keys[idx]));
}
-
/* remove_key is for both wep and wpa */
static int remove_key(struct usbnet *usbdev, int index, const u8 *bssid)
{
@@ -1508,7 +1475,6 @@ static int remove_key(struct usbnet *usbdev, int index, const u8 *bssid)
return 0;
}
-
static void set_multicast_list(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -1568,7 +1534,6 @@ static void set_multicast_list(struct usbnet *usbdev)
le32_to_cpu(filter), ret);
}
-
/*
* cfg80211 ops
*/
@@ -1597,7 +1562,6 @@ static int rndis_change_virtual_intf(struct wiphy *wiphy,
return set_infra_mode(usbdev, mode);
}
-
static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed)
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
@@ -1619,7 +1583,6 @@ static int rndis_set_wiphy_params(struct wiphy *wiphy, u32 changed)
return 0;
}
-
static int rndis_set_tx_power(struct wiphy *wiphy, enum tx_power_setting type,
int dbm)
{
@@ -1642,7 +1605,6 @@ static int rndis_set_tx_power(struct wiphy *wiphy, enum tx_power_setting type,
return -ENOTSUPP;
}
-
static int rndis_get_tx_power(struct wiphy *wiphy, int *dbm)
{
struct rndis_wlan_private *priv = wiphy_priv(wiphy);
@@ -1655,7 +1617,6 @@ static int rndis_get_tx_power(struct wiphy *wiphy, int *dbm)
return 0;
}
-
#define SCAN_DELAY_JIFFIES (6 * HZ)
static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_scan_request *request)
@@ -1692,7 +1653,6 @@ static int rndis_scan(struct wiphy *wiphy, struct net_device *dev,
return ret;
}
-
static struct cfg80211_bss *rndis_bss_info_update(struct usbnet *usbdev,
struct ndis_80211_bssid_ex *bssid)
{
@@ -1741,7 +1701,6 @@ static struct cfg80211_bss *rndis_bss_info_update(struct usbnet *usbdev,
GFP_KERNEL);
}
-
static int rndis_check_bssid_list(struct usbnet *usbdev)
{
void *buf = NULL;
@@ -1790,7 +1749,6 @@ out:
return ret;
}
-
static void rndis_get_scan_results(struct work_struct *work)
{
struct rndis_wlan_private *priv =
@@ -2175,7 +2133,9 @@ static int rndis_dump_station(struct wiphy *wiphy, struct net_device *dev,
return 0;
}
-
+/*
+ * workers, indication handlers, device poller
+ */
static void rndis_wlan_do_link_up_work(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2293,7 +2253,6 @@ static void rndis_wlan_set_multicast_list(struct net_device *dev)
queue_work(priv->workqueue, &priv->work);
}
-
static void rndis_wlan_auth_indication(struct usbnet *usbdev,
struct ndis_80211_status_indication *indication,
int len)
@@ -2476,7 +2435,6 @@ static void rndis_wlan_media_specific_indication(struct usbnet *usbdev,
}
}
-
static void rndis_wlan_indication(struct usbnet *usbdev, void *ind, int buflen)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2523,7 +2481,6 @@ static void rndis_wlan_indication(struct usbnet *usbdev, void *ind, int buflen)
}
}
-
static int rndis_wlan_get_caps(struct usbnet *usbdev)
{
struct {
@@ -2560,7 +2517,6 @@ static int rndis_wlan_get_caps(struct usbnet *usbdev)
return retval;
}
-
#define DEVICE_POLLER_JIFFIES (HZ)
static void rndis_device_poller(struct work_struct *work)
{
@@ -2632,7 +2588,9 @@ end:
update_jiffies);
}
-
+/*
+ * driver/device initialization
+ */
static int bcm4320a_early_init(struct usbnet *usbdev)
{
/* bcm4320a doesn't handle configuration parameters well. Try
@@ -2642,7 +2600,6 @@ static int bcm4320a_early_init(struct usbnet *usbdev)
return 0;
}
-
static int bcm4320b_early_init(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2721,7 +2678,6 @@ static const struct net_device_ops rndis_wlan_netdev_ops = {
.ndo_set_multicast_list = rndis_wlan_set_multicast_list,
};
-
static int rndis_wlan_bind(struct usbnet *usbdev, struct usb_interface *intf)
{
struct wiphy *wiphy;
@@ -2840,7 +2796,6 @@ fail:
return retval;
}
-
static void rndis_wlan_unbind(struct usbnet *usbdev, struct usb_interface *intf)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2863,7 +2818,6 @@ static void rndis_wlan_unbind(struct usbnet *usbdev, struct usb_interface *intf)
wiphy_free(priv->wdev.wiphy);
}
-
static int rndis_wlan_reset(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2885,7 +2839,6 @@ static int rndis_wlan_reset(struct usbnet *usbdev)
return deauthenticate(usbdev);
}
-
static int rndis_wlan_stop(struct usbnet *usbdev)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
@@ -2916,7 +2869,6 @@ static int rndis_wlan_stop(struct usbnet *usbdev)
return retval;
}
-
static const struct driver_info bcm4320b_info = {
.description = "Wireless RNDIS device, BCM4320b based",
.flags = FLAG_WLAN | FLAG_FRAMING_RN | FLAG_NO_SETINT |
^ permalink raw reply related
* [PATCH 1/4] rndis_wlan: use bool for on/off switches
From: Jussi Kivilinna @ 2009-09-01 12:32 UTC (permalink / raw)
To: linux-wireless; +Cc: John W. Linville
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
---
drivers/net/wireless/rndis_wlan.c | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index 402d367..dc2804f 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -466,7 +466,7 @@ struct rndis_wlan_private {
u32 param_workaround_interval;
/* hardware state */
- int radio_on;
+ bool radio_on;
int infra_mode;
bool connected;
u8 bssid[ETH_ALEN];
@@ -966,8 +966,8 @@ static int set_essid(struct usbnet *usbdev, struct ndis_80211_ssid *ssid)
}
if (ret == 0) {
memcpy(&priv->essid, ssid, sizeof(priv->essid));
- priv->radio_on = 1;
- devdbg(usbdev, "set_essid: radio_on = 1");
+ priv->radio_on = true;
+ devdbg(usbdev, "set_essid: radio_on = true");
}
return ret;
@@ -1028,7 +1028,7 @@ static bool is_associated(struct usbnet *usbdev)
}
-static int disassociate(struct usbnet *usbdev, int reset_ssid)
+static int disassociate(struct usbnet *usbdev, bool reset_ssid)
{
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
struct ndis_80211_ssid ssid;
@@ -1037,8 +1037,8 @@ static int disassociate(struct usbnet *usbdev, int reset_ssid)
if (priv->radio_on) {
ret = rndis_set_oid(usbdev, OID_802_11_DISASSOCIATE, NULL, 0);
if (ret == 0) {
- priv->radio_on = 0;
- devdbg(usbdev, "disassociate: radio_on = 0");
+ priv->radio_on = false;
+ devdbg(usbdev, "disassociate: radio_on = false");
if (reset_ssid)
msleep(100);
@@ -1234,7 +1234,7 @@ static int deauthenticate(struct usbnet *usbdev)
{
int ret;
- ret = disassociate(usbdev, 1);
+ ret = disassociate(usbdev, true);
set_default_iw_params(usbdev);
return ret;
}
@@ -1634,7 +1634,7 @@ static int rndis_set_tx_power(struct wiphy *wiphy, enum tx_power_setting type,
*/
if (type == TX_POWER_AUTOMATIC || dbm == get_bcm4320_power_dbm(priv)) {
if (!priv->radio_on)
- disassociate(usbdev, 1); /* turn on radio */
+ disassociate(usbdev, true); /* turn on radio */
return 0;
}
@@ -1923,7 +1923,7 @@ static int rndis_connect(struct wiphy *wiphy, struct net_device *dev,
return ret;
err_turn_radio_on:
- disassociate(usbdev, 1);
+ disassociate(usbdev, true);
return ret;
}
@@ -2031,7 +2031,7 @@ static int rndis_join_ibss(struct wiphy *wiphy, struct net_device *dev,
return ret;
err_turn_radio_on:
- disassociate(usbdev, 1);
+ disassociate(usbdev, true);
return ret;
}
@@ -2823,8 +2823,8 @@ static int rndis_wlan_bind(struct usbnet *usbdev, struct usb_interface *intf)
WIPHY_PARAM_FRAG_THRESHOLD | WIPHY_PARAM_RTS_THRESHOLD);
/* turn radio on */
- priv->radio_on = 1;
- disassociate(usbdev, 1);
+ priv->radio_on = true;
+ disassociate(usbdev, true);
netif_carrier_off(usbdev->net);
return 0;
@@ -2846,7 +2846,7 @@ static void rndis_wlan_unbind(struct usbnet *usbdev, struct usb_interface *intf)
struct rndis_wlan_private *priv = get_rndis_wlan_priv(usbdev);
/* turn radio off */
- disassociate(usbdev, 0);
+ disassociate(usbdev, false);
cancel_delayed_work_sync(&priv->dev_poller_work);
cancel_delayed_work_sync(&priv->scan_work);
@@ -2894,7 +2894,7 @@ static int rndis_wlan_stop(struct usbnet *usbdev)
devdbg(usbdev, "rndis_wlan_stop");
- retval = disassociate(usbdev, 0);
+ retval = disassociate(usbdev, false);
priv->work_pending = 0;
cancel_delayed_work_sync(&priv->dev_poller_work);
^ permalink raw reply related
* [PATCH 2/2] ath9k: Call spin_lock_bh() on btcoex_lock
From: Vasanthakumar Thiagarajan @ 2009-09-01 12:16 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Luis.Rodriguez, Jouni.Malinen, ath9k-devel
In-Reply-To: <1251807393-8262-1-git-send-email-vasanth@atheros.com>
As generic hw timer interrupt handler is moved to tasklet,
we no more need to call spin_lock_irqsave().
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
---
drivers/net/wireless/ath/ath9k/btcoex.c | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/btcoex.c b/drivers/net/wireless/ath/ath9k/btcoex.c
index 8fb3567..e8bfb01 100644
--- a/drivers/net/wireless/ath/ath9k/btcoex.c
+++ b/drivers/net/wireless/ath/ath9k/btcoex.c
@@ -84,15 +84,14 @@ static void ath_btcoex_period_timer(unsigned long data)
{
struct ath_softc *sc = (struct ath_softc *) data;
struct ath_btcoex_info *btinfo = &sc->btcoex_info;
- unsigned long flags;
ath_detect_bt_priority(sc);
- spin_lock_irqsave(&btinfo->btcoex_lock, flags);
+ spin_lock_bh(&btinfo->btcoex_lock);
ath_btcoex_bt_stomp(sc, btinfo, btinfo->bt_stomp_type);
- spin_unlock_irqrestore(&btinfo->btcoex_lock, flags);
+ spin_unlock_bh(&btinfo->btcoex_lock);
if (btinfo->btcoex_period != btinfo->btcoex_no_stomp) {
if (btinfo->hw_timer_enabled)
@@ -119,18 +118,17 @@ static void ath_btcoex_no_stomp_timer(void *arg)
{
struct ath_softc *sc = (struct ath_softc *)arg;
struct ath_btcoex_info *btinfo = &sc->btcoex_info;
- unsigned long flags;
DPRINTF(sc, ATH_DBG_BTCOEX, "no stomp timer running \n");
- spin_lock_irqsave(&btinfo->btcoex_lock, flags);
+ spin_lock_bh(&btinfo->btcoex_lock);
if (btinfo->bt_stomp_type == ATH_BTCOEX_STOMP_LOW)
ath_btcoex_bt_stomp(sc, btinfo, ATH_BTCOEX_STOMP_NONE);
else if (btinfo->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
ath_btcoex_bt_stomp(sc, btinfo, ATH_BTCOEX_STOMP_LOW);
- spin_unlock_irqrestore(&btinfo->btcoex_lock, flags);
+ spin_unlock_bh(&btinfo->btcoex_lock);
}
static int ath_init_btcoex_info(struct ath_hw *hw,
--
1.5.5.1
^ permalink raw reply related
* [PATCH 1/2] ath9k: Move generic hw timer intr handler to bottom-half
From: Vasanthakumar Thiagarajan @ 2009-09-01 12:16 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Luis.Rodriguez, Jouni.Malinen, ath9k-devel
There is no point handling this in hard irq, move it to
tasklet.
Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com>
---
drivers/net/wireless/ath/ath9k/main.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 4fae699..efee193 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -506,6 +506,10 @@ static void ath9k_tasklet(unsigned long data)
sc->sc_flags |= SC_OP_WAIT_FOR_BEACON | SC_OP_BEACON_SYNC;
}
+ if (sc->btcoex_info.btcoex_scheme == ATH_BTCOEX_CFG_3WIRE)
+ if (status & ATH9K_INT_GENTIMER)
+ ath_gen_timer_isr(sc->sc_ah);
+
/* re-enable hardware interrupt */
ath9k_hw_set_interrupts(sc->sc_ah, sc->imask);
ath9k_ps_restore(sc);
@@ -521,7 +525,8 @@ irqreturn_t ath_isr(int irq, void *dev)
ATH9K_INT_TX | \
ATH9K_INT_BMISS | \
ATH9K_INT_CST | \
- ATH9K_INT_TSFOOR)
+ ATH9K_INT_TSFOOR | \
+ ATH9K_INT_GENTIMER)
struct ath_softc *sc = dev;
struct ath_hw *ah = sc->sc_ah;
@@ -602,10 +607,6 @@ irqreturn_t ath_isr(int irq, void *dev)
sc->sc_flags |= SC_OP_WAIT_FOR_BEACON;
}
- if (sc->btcoex_info.btcoex_scheme == ATH_BTCOEX_CFG_3WIRE)
- if (status & ATH9K_INT_GENTIMER)
- ath_gen_timer_isr(ah);
-
chip_reset:
ath_debug_stat_interrupt(sc, status);
--
1.5.5.1
^ permalink raw reply related
* soft lockup in cfg80211 find_ie()
From: Bob Copeland @ 2009-09-01 12:17 UTC (permalink / raw)
To: linux-wireless
Hi,
My laptop was on all night and at some point got stuck in a loop.
Unfortunately I don't know exactly what happened since dmesg buffer
filled up and there was nothing incriminating in /var/log, but
here's my interpretation:
EIP points to line 146:
while (len > 2 && ies[0] != num) ...
ECX holds len, which is negative (unfortunately size_t is unsigned)
EDX holds ies, looks like a valid pointer
EBX holds num, which is 0.
This looks like this is a DoS-able bug if there are any malformed
packets, no? I think we should change 'len' to int here.
[38442.105007] BUG: soft lockup - CPU#0 stuck for 61s! [phy0:2230]
[38442.105007] Modules linked in: aes_i586 aes_generic fuse af_packet ipt_REJECT xt_tcpudp nf_conntrack_ipv4 nf_defrag_ipv4 xt_state iptable_filter ip_tables x_tables acpi_cpufreq binfmt_misc dm_mirror dm_region_hash dm_log dm_multipath dm_mod kvm_intel kvm uinput i915 arc4 ecb drm snd_hda_codec_idt ath5k snd_hda_intel hid_apple mac80211 usbhid appletouch snd_hda_codec snd_pcm ath cfg80211 snd_timer i2c_algo_bit ohci1394 video snd processor ieee1394 rfkill ehci_hcd sg sky2 backlight snd_page_alloc uhci_hcd joydev output ac thermal button battery sr_mod applesmc cdrom input_polldev evdev unix [last unloaded: scsi_wait_scan]
[38442.105007] irq event stamp: 2044208759
[38442.105007] hardirqs last enabled at (2044208758): [<c1002ffc>] restore_all_notrace+0x0/0x18
[38442.105007] hardirqs last disabled at (2044208759): [<c10038f4>] apic_timer_interrupt+0x28/0x34
[38442.105007] softirqs last enabled at (92950144): [<c103ab48>] __do_softirq+0x108/0x210
[38442.105007] softirqs last disabled at (92950274): [<c1348e74>] _spin_lock_bh+0x14/0x80
[38442.105007]
[38442.105007] Pid: 2230, comm: phy0 Tainted: G W (2.6.31-rc7-wl #8) MacBook1,1
[38442.105007] EIP: 0060:[<f8ea2d50>] EFLAGS: 00010292 CPU: 0
[38442.105007] EIP is at cmp_ies+0x30/0x180 [cfg80211]
[38442.105007] EAX: 00000082 EBX: 00000000 ECX: ffffffc1 EDX: d8efd014
[38442.105007] ESI: ffffff7c EDI: 0000004d EBP: eee2dc50 ESP: eee2dc3c
[38442.105007] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[38442.105007] CR0: 8005003b CR2: d8efd014 CR3: 01694000 CR4: 000026d0
[38442.105007] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[38442.105007] DR6: ffff0ff0 DR7: 00000400
[38442.105007] Call Trace:
[38442.105007] [<f8ea2f8d>] cmp_bss+0xed/0x100 [cfg80211]
[38442.105007] [<f8ea33e4>] cfg80211_bss_update+0x84/0x410 [cfg80211]
[38442.105007] [<f8ea3884>] cfg80211_inform_bss_frame+0x114/0x180 [cfg80211]
[38442.105007] [<f97255ff>] ieee80211_bss_info_update+0x4f/0x180 [mac80211]
[38442.105007] [<f972b118>] ieee80211_rx_bss_info+0x88/0xf0 [mac80211]
[38442.105007] [<f9739297>] ? ieee802_11_parse_elems+0x27/0x30 [mac80211]
[38442.105007] [<f972b224>] ieee80211_rx_mgmt_probe_resp+0xa4/0x1c0 [mac80211]
[38442.105007] [<f972bc59>] ieee80211_sta_rx_queued_mgmt+0x919/0xc50 [mac80211]
[38442.105007] [<c1009707>] ? sched_clock+0x27/0xa0
[38442.105007] [<c1009707>] ? sched_clock+0x27/0xa0
[38442.105007] [<c105ffd0>] ? mark_held_locks+0x60/0x80
[38442.105007] [<c1348be5>] ? _spin_unlock_irqrestore+0x55/0x70
[38442.105007] [<c134baa5>] ? sub_preempt_count+0x85/0xc0
[38442.105007] [<c1348bce>] ? _spin_unlock_irqrestore+0x3e/0x70
[38442.105007] [<c12c1c0f>] ? skb_dequeue+0x4f/0x70
[38442.105007] [<f972c021>] ieee80211_sta_work+0x91/0xb80 [mac80211]
[38442.105007] [<c1009707>] ? sched_clock+0x27/0xa0
[38442.105007] [<c134baa5>] ? sub_preempt_count+0x85/0xc0
[38442.105007] [<c10479af>] worker_thread+0x18f/0x320
[38442.105007] [<c104794e>] ? worker_thread+0x12e/0x320
[38442.105007] [<c1348be5>] ? _spin_unlock_irqrestore+0x55/0x70
[38442.105007] [<f972bf90>] ? ieee80211_sta_work+0x0/0xb80 [mac80211]
[38442.105007] [<c104cbb0>] ? autoremove_wake_function+0x0/0x50
[38442.105007] [<c1047820>] ? worker_thread+0x0/0x320
[38442.105007] [<c104c854>] kthread+0x84/0x90
[38442.105007] [<c104c7d0>] ? kthread+0x0/0x90
[38442.105007] [<c1003ab7>] kernel_thread_helper+0x7/0x10
[38507.604007] BUG: soft lockup - CPU#0 stuck for 61s! [phy0:2230]
[38507.604007] Modules linked in: aes_i586 aes_generic fuse af_packet ipt_REJECT xt_tcpudp nf_conntrack_ipv4 nf_defrag_ipv4 xt_state iptable_filter ip_tables x_tables acpi_cpufreq binfmt_misc dm_mirror dm_region_hash dm_log dm_multipath dm_mod kvm_intel kvm uinput i915 arc4 ecb drm snd_hda_codec_idt ath5k snd_hda_intel hid_apple mac80211 usbhid appletouch snd_hda_codec snd_pcm ath cfg80211 snd_timer i2c_algo_bit ohci1394 video snd processor ieee1394 rfkill ehci_hcd sg sky2 backlight snd_page_alloc uhci_hcd joydev output ac thermal button battery sr_mod applesmc cdrom input_polldev evdev unix [last unloaded: scsi_wait_scan]
[38507.604007] irq event stamp: 2295973181
[38507.604007] hardirqs last enabled at (2295973180): [<c1002ffc>] restore_all_notrace+0x0/0x18
[38507.604007] hardirqs last disabled at (2295973181): [<c10038f4>] apic_timer_interrupt+0x28/0x34
[38507.604007] softirqs last enabled at (92950144): [<c103ab48>] __do_softirq+0x108/0x210
[38507.604007] softirqs last disabled at (92950274): [<c1348e74>] _spin_lock_bh+0x14/0x80
[38507.604007]
[38507.604007] Pid: 2230, comm: phy0 Tainted: G W (2.6.31-rc7-wl #8) MacBook1,1
[38507.604007] EIP: 0060:[<f8ea2d50>] EFLAGS: 00010292 CPU: 0
[38507.604007] EIP is at cmp_ies+0x30/0x180 [cfg80211]
[38507.604007] EAX: 00000082 EBX: 00000000 ECX: ffffffc1 EDX: d8efd014
[38507.604007] ESI: ffffff7c EDI: 0000004d EBP: eee2dc50 ESP: eee2dc3c
[38507.604007] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[38507.604007] CR0: 8005003b CR2: d8efd014 CR3: 01694000 CR4: 000026d0
[38507.604007] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[38507.604007] DR6: ffff0ff0 DR7: 00000400
[38507.604007] Call Trace:
[38507.604007] [<f8ea2f8d>] cmp_bss+0xed/0x100 [cfg80211]
[38507.604007] [<f8ea33e4>] cfg80211_bss_update+0x84/0x410 [cfg80211]
[38507.604007] [<f8ea3884>] cfg80211_inform_bss_frame+0x114/0x180 [cfg80211]
[38507.604007] [<f97255ff>] ieee80211_bss_info_update+0x4f/0x180 [mac80211]
[38507.604007] [<f972b118>] ieee80211_rx_bss_info+0x88/0xf0 [mac80211]
[38507.604007] [<f9739297>] ? ieee802_11_parse_elems+0x27/0x30 [mac80211]
[38507.604007] [<f972b224>] ieee80211_rx_mgmt_probe_resp+0xa4/0x1c0 [mac80211]
[38507.604007] [<f972bc59>] ieee80211_sta_rx_queued_mgmt+0x919/0xc50 [mac80211]
[38507.604007] [<c1009707>] ? sched_clock+0x27/0xa0
[38507.604007] [<c1009707>] ? sched_clock+0x27/0xa0
[38507.604007] [<c105ffd0>] ? mark_held_locks+0x60/0x80
[38507.604007] [<c1348be5>] ? _spin_unlock_irqrestore+0x55/0x70
[38507.604007] [<c134baa5>] ? sub_preempt_count+0x85/0xc0
[38507.604007] [<c1348bce>] ? _spin_unlock_irqrestore+0x3e/0x70
[38507.604007] [<c12c1c0f>] ? skb_dequeue+0x4f/0x70
[38507.604007] [<f972c021>] ieee80211_sta_work+0x91/0xb80 [mac80211]
[38507.604007] [<c1009707>] ? sched_clock+0x27/0xa0
[38507.604007] [<c134baa5>] ? sub_preempt_count+0x85/0xc0
[38507.604007] [<c10479af>] worker_thread+0x18f/0x320
[38507.604007] [<c104794e>] ? worker_thread+0x12e/0x320
[38507.604007] [<c1348be5>] ? _spin_unlock_irqrestore+0x55/0x70
[38507.604007] [<f972bf90>] ? ieee80211_sta_work+0x0/0xb80 [mac80211]
[38507.604007] [<c104cbb0>] ? autoremove_wake_function+0x0/0x50
[38507.604007] [<c1047820>] ? worker_thread+0x0/0x320
[38507.604007] [<c104c854>] kthread+0x84/0x90
[38507.604007] [<c104c7d0>] ? kthread+0x0/0x90
[38507.604007] [<c1003ab7>] kernel_thread_helper+0x7/0x10
--
Bob Copeland %% www.bobcopeland.com
^ permalink raw reply
* Re: [PATCH v2] mac80211: Fix output of minstrels rc_stats
From: Arnd Hannemann @ 2009-09-01 8:05 UTC (permalink / raw)
To: Julian Calaby
Cc: Arnd Hannemann, linux-wireless@vger.kernel.org, joe@perches.com,
proski@gnu.org
In-Reply-To: <646765f40908311754l7bd16185pe21182cdba6e6ac8@mail.gmail.com>
Julian Calaby wrote:
> On Tue, Aug 25, 2009 at 04:51, Arnd
> Hannemann<hannemann@nets.rwth-aachen.de> wrote:
>> An integer overflow in the minstrel debug code prevented the
>> throughput to be displayed correctly. This patch fixes that,
>> by permutating operations like proposed by Pavel Roskin.
>>
>> Signed-off-by: Arnd Hannemann <hannemann@nets.rwth-aachen.de>
>> ---
>> net/mac80211/rc80211_minstrel_debugfs.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/net/mac80211/rc80211_minstrel_debugfs.c b/net/mac80211/rc80211_minstrel_debugfs.c
>> index 98f4807..3d72ec5 100644
>> --- a/net/mac80211/rc80211_minstrel_debugfs.c
>> +++ b/net/mac80211/rc80211_minstrel_debugfs.c
>> @@ -83,7 +83,7 @@ minstrel_stats_open(struct inode *inode, struct file *file)
>> p += sprintf(p, "%3u%s", mr->bitrate / 2,
>> (mr->bitrate & 1 ? ".5" : " "));
>>
>> - tp = ((mr->cur_tp * 96) / 18000) >> 10;
>> + tp = mr->cur_tp / ((18000 << 10) / 96);
>
> Sorry about being so late, but wouldn't:
>
> tp = ((mr->cur_tp * 2) / 375) >> 10;
>
> also work? (Assuming that the numbers in the constant aren't important)
I needed a while to figure out why those constants are used, but finally
they made some sense, so I think its best to preserve them.
mr->cur_tp is the time to send one 1200 byte packet (9600 bits),
the loss probelity is scaled between 0-18000 to reduce rounding error.
>
> or even:
>
> tp = (mr->cur_tp / 375) >> 9;
See above.
Best regards,
Arnd
^ permalink raw reply
* [PATCH 18/19] wireless: convert drivers to netdev_tx_t
From: Stephen Hemminger @ 2009-09-01 5:50 UTC (permalink / raw)
To: David Miller; +Cc: netdev, linux-wireless
In-Reply-To: <20090901055039.824876937@vyatta.com>
Mostly just simple conversions:
* ray_cs had bogus return of NET_TX_LOCKED but driver
was not using NETIF_F_LLTX
* hostap and ipw2x00 had some code that returned value
from a called function that also had to change to return netdev_tx_t
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
drivers/net/wimax/i2400m/netdev.c | 12 ++++++------
drivers/net/wireless/airo.c | 12 +++++++++---
drivers/net/wireless/arlan-main.c | 4 ++--
drivers/net/wireless/atmel.c | 2 +-
drivers/net/wireless/hostap/hostap_80211.h | 10 +++++++---
drivers/net/wireless/hostap/hostap_80211_tx.c | 11 +++++++----
drivers/net/wireless/ipw2x00/ipw2100.c | 10 +++++-----
drivers/net/wireless/ipw2x00/ipw2200.c | 9 +++++----
drivers/net/wireless/ipw2x00/libipw.h | 7 ++++---
drivers/net/wireless/ipw2x00/libipw_tx.c | 6 +++---
drivers/net/wireless/libertas/decl.h | 5 +++--
drivers/net/wireless/libertas/main.c | 3 ++-
drivers/net/wireless/libertas/tx.c | 6 ++----
drivers/net/wireless/mac80211_hwsim.c | 3 ++-
drivers/net/wireless/netwave_cs.c | 6 ++++--
drivers/net/wireless/orinoco/main.c | 2 +-
drivers/net/wireless/prism54/islpci_eth.c | 2 +-
drivers/net/wireless/prism54/islpci_eth.h | 2 +-
drivers/net/wireless/ray_cs.c | 14 +++++++++-----
drivers/net/wireless/strip.c | 2 +-
drivers/net/wireless/wavelan.c | 3 ++-
drivers/net/wireless/wavelan.p.h | 2 +-
drivers/net/wireless/wavelan_cs.c | 2 +-
drivers/net/wireless/wavelan_cs.p.h | 2 +-
drivers/net/wireless/wl3501_cs.c | 3 ++-
drivers/net/wireless/zd1201.c | 3 ++-
net/mac80211/ieee80211_i.h | 6 ++++--
net/mac80211/tx.c | 8 ++++----
28 files changed, 92 insertions(+), 65 deletions(-)
--- a/drivers/net/wireless/hostap/hostap_80211.h 2009-08-31 16:17:52.221080855 -0700
+++ b/drivers/net/wireless/hostap/hostap_80211.h 2009-08-31 16:33:06.481101881 -0700
@@ -3,6 +3,7 @@
#include <linux/types.h>
#include <linux/skbuff.h>
+#include <linux/netdevice.h>
struct hostap_ieee80211_mgmt {
__le16 frame_control;
@@ -85,8 +86,11 @@ void hostap_dump_rx_80211(const char *na
struct hostap_80211_rx_status *rx_stats);
void hostap_dump_tx_80211(const char *name, struct sk_buff *skb);
-int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev);
-int hostap_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev);
-int hostap_master_start_xmit(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t hostap_data_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
+netdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
+netdev_tx_t hostap_master_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
#endif /* HOSTAP_80211_H */
--- a/drivers/net/wireless/hostap/hostap_80211_tx.c 2009-08-31 16:17:52.221080855 -0700
+++ b/drivers/net/wireless/hostap/hostap_80211_tx.c 2009-08-31 16:33:42.131158031 -0700
@@ -53,7 +53,8 @@ void hostap_dump_tx_80211(const char *na
/* hard_start_xmit function for data interfaces (wlan#, wlan#wds#, wlan#sta)
* Convert Ethernet header into a suitable IEEE 802.11 header depending on
* device configuration. */
-int hostap_data_start_xmit(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t hostap_data_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct hostap_interface *iface;
local_info_t *local;
@@ -261,7 +262,8 @@ int hostap_data_start_xmit(struct sk_buf
/* hard_start_xmit function for hostapd wlan#ap interfaces */
-int hostap_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t hostap_mgmt_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct hostap_interface *iface;
local_info_t *local;
@@ -373,11 +375,12 @@ static struct sk_buff * hostap_tx_encryp
/* hard_start_xmit function for master radio interface wifi#.
* AP processing (TX rate control, power save buffering, etc.).
* Use hardware TX function to send the frame. */
-int hostap_master_start_xmit(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t hostap_master_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct hostap_interface *iface;
local_info_t *local;
- int ret = NETDEV_TX_BUSY;
+ netdev_tx_t ret = NETDEV_TX_BUSY;
u16 fc;
struct hostap_tx_data tx;
ap_tx_ret tx_ret;
--- a/drivers/net/wireless/ipw2x00/ipw2200.c 2009-08-31 16:17:52.321081485 -0700
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c 2009-08-31 16:34:38.021326615 -0700
@@ -10459,12 +10459,12 @@ static void ipw_handle_promiscuous_tx(st
}
#endif
-static int ipw_net_hard_start_xmit(struct libipw_txb *txb,
- struct net_device *dev, int pri)
+static netdev_tx_t ipw_net_hard_start_xmit(struct libipw_txb *txb,
+ struct net_device *dev, int pri)
{
struct ipw_priv *priv = libipw_priv(dev);
unsigned long flags;
- int ret;
+ netdev_tx_t ret;
IPW_DEBUG_TX("dev->xmit(%d bytes)\n", txb->payload_size);
spin_lock_irqsave(&priv->lock, flags);
@@ -11602,7 +11602,8 @@ static int ipw_prom_stop(struct net_devi
return 0;
}
-static int ipw_prom_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t ipw_prom_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
IPW_DEBUG_INFO("prom dev->xmit\n");
dev_kfree_skb(skb);
--- a/drivers/net/wireless/ipw2x00/libipw.h 2009-08-31 16:17:52.301107927 -0700
+++ b/drivers/net/wireless/ipw2x00/libipw.h 2009-08-31 16:34:56.121117022 -0700
@@ -867,8 +867,8 @@ struct libipw_device {
/* Callback functions */
void (*set_security) (struct net_device * dev,
struct libipw_security * sec);
- int (*hard_start_xmit) (struct libipw_txb * txb,
- struct net_device * dev, int pri);
+ netdev_tx_t (*hard_start_xmit) (struct libipw_txb * txb,
+ struct net_device * dev, int pri);
int (*reset_port) (struct net_device * dev);
int (*is_queue_full) (struct net_device * dev, int pri);
@@ -1028,7 +1028,8 @@ extern void libipw_networks_age(struct l
extern int libipw_set_encryption(struct libipw_device *ieee);
/* libipw_tx.c */
-extern int libipw_xmit(struct sk_buff *skb, struct net_device *dev);
+extern netdev_tx_t libipw_xmit(struct sk_buff *skb,
+ struct net_device *dev);
extern void libipw_txb_free(struct libipw_txb *);
/* libipw_rx.c */
--- a/drivers/net/wireless/ipw2x00/libipw_tx.c 2009-08-31 16:17:52.301107927 -0700
+++ b/drivers/net/wireless/ipw2x00/libipw_tx.c 2009-08-31 16:35:03.781105301 -0700
@@ -252,7 +252,7 @@ static int libipw_classify(struct sk_buf
/* Incoming skb is converted to a txb which consists of
* a block of 802.11 fragment packets (stored as skbs) */
-int libipw_xmit(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t libipw_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct libipw_device *ieee = netdev_priv(dev);
struct libipw_txb *txb = NULL;
@@ -523,8 +523,8 @@ int libipw_xmit(struct sk_buff *skb, str
dev_kfree_skb_any(skb);
if (txb) {
- int ret = (*ieee->hard_start_xmit) (txb, dev, priority);
- if (ret == 0) {
+ netdev_tx_t ret = (*ieee->hard_start_xmit)(txb, dev, priority);
+ if (ret == NETDEV_TX_OK) {
dev->stats.tx_packets++;
dev->stats.tx_bytes += txb->payload_size;
return NETDEV_TX_OK;
--- a/drivers/net/wimax/i2400m/netdev.c 2009-08-31 16:17:52.191080883 -0700
+++ b/drivers/net/wimax/i2400m/netdev.c 2009-08-31 16:32:16.163627458 -0700
@@ -334,12 +334,12 @@ int i2400m_net_tx(struct i2400m *i2400m,
* that will sleep. See i2400m_net_wake_tx() for details.
*/
static
-int i2400m_hard_start_xmit(struct sk_buff *skb,
- struct net_device *net_dev)
+netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *net_dev)
{
- int result;
struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
struct device *dev = i2400m_dev(i2400m);
+ int result;
d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev);
if (i2400m->state == I2400M_SS_IDLE)
@@ -353,9 +353,9 @@ int i2400m_hard_start_xmit(struct sk_buf
net_dev->stats.tx_bytes += skb->len;
}
kfree_skb(skb);
- result = NETDEV_TX_OK;
- d_fnend(3, dev, "(skb %p net_dev %p) = %d\n", skb, net_dev, result);
- return result;
+
+ d_fnend(3, dev, "(skb %p net_dev %p)\n", skb, net_dev);
+ return NETDEV_TX_OK;
}
--- a/drivers/net/wireless/airo.c 2009-08-31 16:17:52.251122313 -0700
+++ b/drivers/net/wireless/airo.c 2009-08-31 16:32:16.163627458 -0700
@@ -1920,7 +1920,9 @@ static int airo_open(struct net_device *
return 0;
}
-static int mpi_start_xmit(struct sk_buff *skb, struct net_device *dev) {
+static netdev_tx_t mpi_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
+{
int npacks, pending;
unsigned long flags;
struct airo_info *ai = dev->ml_priv;
@@ -2119,7 +2121,9 @@ static void airo_end_xmit(struct net_dev
dev_kfree_skb(skb);
}
-static int airo_start_xmit(struct sk_buff *skb, struct net_device *dev) {
+static netdev_tx_t airo_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
+{
s16 len;
int i, j;
struct airo_info *priv = dev->ml_priv;
@@ -2184,7 +2188,9 @@ static void airo_end_xmit11(struct net_d
dev_kfree_skb(skb);
}
-static int airo_start_xmit11(struct sk_buff *skb, struct net_device *dev) {
+static netdev_tx_t airo_start_xmit11(struct sk_buff *skb,
+ struct net_device *dev)
+{
s16 len;
int i, j;
struct airo_info *priv = dev->ml_priv;
--- a/drivers/net/wireless/arlan-main.c 2009-08-31 16:17:52.201081246 -0700
+++ b/drivers/net/wireless/arlan-main.c 2009-08-31 16:32:16.173591015 -0700
@@ -77,7 +77,7 @@ struct arlan_conf_stru arlan_conf[MAX_AR
static int arlans_found;
static int arlan_open(struct net_device *dev);
-static int arlan_tx(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev);
static irqreturn_t arlan_interrupt(int irq, void *dev_id);
static int arlan_close(struct net_device *dev);
static struct net_device_stats *
@@ -1169,7 +1169,7 @@ static void arlan_tx_timeout (struct net
}
-static int arlan_tx(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev)
{
short length;
unsigned char *buf;
--- a/drivers/net/wireless/atmel.c 2009-08-31 16:17:52.351091725 -0700
+++ b/drivers/net/wireless/atmel.c 2009-08-31 16:32:16.173591015 -0700
@@ -781,7 +781,7 @@ static void tx_update_descriptor(struct
priv->tx_free_mem -= len;
}
-static int start_tx(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
{
static const u8 SNAP_RFC1024[6] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
struct atmel_private *priv = netdev_priv(dev);
--- a/drivers/net/wireless/libertas/decl.h 2009-08-31 16:17:52.281153994 -0700
+++ b/drivers/net/wireless/libertas/decl.h 2009-08-31 16:35:07.071275355 -0700
@@ -6,7 +6,7 @@
#ifndef _LBS_DECL_H_
#define _LBS_DECL_H_
-#include <linux/device.h>
+#include <linux/netdevice.h>
#include "defs.h"
@@ -41,7 +41,8 @@ u8 lbs_data_rate_to_fw_index(u32 rate);
int lbs_process_command_response(struct lbs_private *priv, u8 *data, u32 len);
void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd,
int result);
-int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t lbs_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band);
int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *);
--- a/drivers/net/wireless/libertas/main.c 2009-08-31 16:17:52.291081163 -0700
+++ b/drivers/net/wireless/libertas/main.c 2009-08-31 16:35:10.491118027 -0700
@@ -1647,7 +1647,8 @@ static int lbs_rtap_stop(struct net_devi
return 0;
}
-static int lbs_rtap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t lbs_rtap_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
netif_stop_queue(dev);
return NETDEV_TX_BUSY;
--- a/drivers/net/wireless/libertas/tx.c 2009-08-31 16:17:52.281153994 -0700
+++ b/drivers/net/wireless/libertas/tx.c 2009-08-31 16:35:15.351107216 -0700
@@ -57,19 +57,17 @@ static u32 convert_radiotap_rate_to_mv(u
* @param skb A pointer to skb which includes TX packet
* @return 0 or -1
*/
-int lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+netdev_tx_t lbs_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
unsigned long flags;
struct lbs_private *priv = dev->ml_priv;
struct txpd *txpd;
char *p802x_hdr;
uint16_t pkt_len;
- int ret;
+ netdev_tx_t ret = NETDEV_TX_OK;
lbs_deb_enter(LBS_DEB_TX);
- ret = NETDEV_TX_OK;
-
/* We need to protect against the queues being restarted before
we get round to stopping them */
spin_lock_irqsave(&priv->driver_lock, flags);
--- a/drivers/net/wireless/mac80211_hwsim.c 2009-08-31 16:17:52.331108249 -0700
+++ b/drivers/net/wireless/mac80211_hwsim.c 2009-08-31 16:32:16.173591015 -0700
@@ -312,7 +312,8 @@ struct hwsim_radiotap_hdr {
} __attribute__ ((packed));
-static int hwsim_mon_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t hwsim_mon_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
/* TODO: allow packet injection */
dev_kfree_skb(skb);
--- a/drivers/net/wireless/netwave_cs.c 2009-08-31 16:17:52.241107004 -0700
+++ b/drivers/net/wireless/netwave_cs.c 2009-08-31 16:32:16.173591015 -0700
@@ -203,7 +203,8 @@ static int netwave_open(struct net_devic
static int netwave_close(struct net_device *dev); /* Close the device */
/* Packet transmission and Packet reception */
-static int netwave_start_xmit( struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t netwave_start_xmit( struct sk_buff *skb,
+ struct net_device *dev);
static int netwave_rx( struct net_device *dev);
/* Interrupt routines */
@@ -1026,7 +1027,8 @@ static int netwave_hw_xmit(unsigned char
return 0;
}
-static int netwave_start_xmit(struct sk_buff *skb, struct net_device *dev) {
+static netdev_tx_t netwave_start_xmit(struct sk_buff *skb,
+ struct net_device *dev) {
/* This flag indicate that the hardware can't perform a transmission.
* Theoritically, NET3 check it before sending a packet to the driver,
* but in fact it never do that and pool continuously.
--- a/drivers/net/wireless/orinoco/main.c 2009-08-31 16:17:52.291081163 -0700
+++ b/drivers/net/wireless/orinoco/main.c 2009-08-31 16:35:20.123589613 -0700
@@ -337,7 +337,7 @@ static int orinoco_change_mtu(struct net
/* Tx path */
/********************************************************************/
-static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct orinoco_private *priv = ndev_priv(dev);
struct net_device_stats *stats = &priv->stats;
--- a/drivers/net/wireless/prism54/islpci_eth.c 2009-08-31 16:17:52.261081191 -0700
+++ b/drivers/net/wireless/prism54/islpci_eth.c 2009-08-31 16:32:16.173591015 -0700
@@ -72,7 +72,7 @@ islpci_eth_cleanup_transmit(islpci_priva
}
}
-int
+netdev_tx_t
islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
{
islpci_private *priv = netdev_priv(ndev);
--- a/drivers/net/wireless/prism54/islpci_eth.h 2009-08-31 16:17:52.271108094 -0700
+++ b/drivers/net/wireless/prism54/islpci_eth.h 2009-08-31 16:32:16.173591015 -0700
@@ -64,7 +64,7 @@ struct avs_80211_1_header {
};
void islpci_eth_cleanup_transmit(islpci_private *, isl38xx_control_block *);
-int islpci_eth_transmit(struct sk_buff *, struct net_device *);
+netdev_tx_t islpci_eth_transmit(struct sk_buff *, struct net_device *);
int islpci_eth_receive(islpci_private *);
void islpci_eth_tx_timeout(struct net_device *);
void islpci_do_reset_and_wake(struct work_struct *);
--- a/drivers/net/wireless/ray_cs.c 2009-08-31 16:17:52.361105988 -0700
+++ b/drivers/net/wireless/ray_cs.c 2009-08-31 16:32:16.173591015 -0700
@@ -104,7 +104,8 @@ static int ray_dev_init(struct net_devic
static const struct ethtool_ops netdev_ethtool_ops;
static int ray_open(struct net_device *dev);
-static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t ray_dev_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
static void set_multicast_list(struct net_device *dev);
static void ray_update_multi_list(struct net_device *dev, int all);
static int translate_frame(ray_dev_t *local, struct tx_msg __iomem *ptx,
@@ -915,16 +916,19 @@ static int ray_dev_config(struct net_dev
}
/*===========================================================================*/
-static int ray_dev_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t ray_dev_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
ray_dev_t *local = netdev_priv(dev);
struct pcmcia_device *link = local->finder;
short length = skb->len;
- if (!(pcmcia_dev_present(link))) {
+ if (!pcmcia_dev_present(link)) {
DEBUG(2, "ray_dev_start_xmit - device not present\n");
- return NETDEV_TX_LOCKED;
+ dev_kfree_skb(skb);
+ return NETDEV_TX_OK;
}
+
DEBUG(3, "ray_dev_start_xmit(skb=%p, dev=%p)\n", skb, dev);
if (local->authentication_state == NEED_TO_AUTH) {
DEBUG(0, "ray_cs Sending authentication request.\n");
@@ -951,8 +955,8 @@ static int ray_dev_start_xmit(struct sk_
default:
dev->trans_start = jiffies;
dev_kfree_skb(skb);
- return NETDEV_TX_OK;
}
+
return NETDEV_TX_OK;
} /* ray_dev_start_xmit */
--- a/drivers/net/wireless/strip.c 2009-08-31 16:17:52.201081246 -0700
+++ b/drivers/net/wireless/strip.c 2009-08-31 16:32:16.183606045 -0700
@@ -1533,7 +1533,7 @@ static void strip_send(struct strip *str
}
/* Encapsulate a datagram and kick it into a TTY queue. */
-static int strip_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t strip_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct strip *strip_info = netdev_priv(dev);
--- a/drivers/net/wireless/wavelan.c 2009-08-31 16:17:52.211107939 -0700
+++ b/drivers/net/wireless/wavelan.c 2009-08-31 16:32:16.183606045 -0700
@@ -2841,7 +2841,8 @@ static int wv_packet_write(struct net_de
* the packet. We also prevent reentrance. Then we call the function
* to send the packet.
*/
-static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
+static netdev_tx_t wavelan_packet_xmit(struct sk_buff *skb,
+ struct net_device * dev)
{
net_local *lp = netdev_priv(dev);
unsigned long flags;
--- a/drivers/net/wireless/wavelan_cs.c 2009-08-31 16:17:52.231081009 -0700
+++ b/drivers/net/wireless/wavelan_cs.c 2009-08-31 16:32:16.183606045 -0700
@@ -3078,7 +3078,7 @@ wv_packet_write(struct net_device * dev,
* the packet. We also prevent reentrance. Then, we call the function
* to send the packet...
*/
-static int
+static netdev_tx_t
wavelan_packet_xmit(struct sk_buff * skb,
struct net_device * dev)
{
--- a/drivers/net/wireless/wl3501_cs.c 2009-08-31 16:17:52.331108249 -0700
+++ b/drivers/net/wireless/wl3501_cs.c 2009-08-31 16:32:16.183606045 -0700
@@ -1333,7 +1333,8 @@ static void wl3501_tx_timeout(struct net
* 1 - Could not transmit (dev_queue_xmit will queue it)
* and try to sent it later
*/
-static int wl3501_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t wl3501_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
int enabled, rc;
struct wl3501_card *this = netdev_priv(dev);
--- a/drivers/net/wireless/zd1201.c 2009-08-31 16:17:52.341091082 -0700
+++ b/drivers/net/wireless/zd1201.c 2009-08-31 16:32:16.183606045 -0700
@@ -779,7 +779,8 @@ static int zd1201_net_stop(struct net_de
(llc+snap+type+payload)
zd 1 null byte, zd1201 packet type
*/
-static int zd1201_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t zd1201_hard_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct zd1201 *zd = netdev_priv(dev);
unsigned char *txbuf = zd->txdata;
--- a/drivers/net/wireless/wavelan.p.h 2009-08-31 16:17:52.251122313 -0700
+++ b/drivers/net/wireless/wavelan.p.h 2009-08-31 16:32:16.183606045 -0700
@@ -611,7 +611,7 @@ static inline int
wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer. */
void *,
short);
-static int
+static netdev_tx_t
wavelan_packet_xmit(struct sk_buff *, /* Send a packet. */
struct net_device *);
/* -------------------- HARDWARE CONFIGURATION -------------------- */
--- a/drivers/net/wireless/wavelan_cs.p.h 2009-08-31 16:17:52.341091082 -0700
+++ b/drivers/net/wireless/wavelan_cs.p.h 2009-08-31 16:32:16.183606045 -0700
@@ -707,7 +707,7 @@ static void
wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer */
void *,
short);
-static int
+static netdev_tx_t
wavelan_packet_xmit(struct sk_buff *, /* Send a packet */
struct net_device *);
/* -------------------- HARDWARE CONFIGURATION -------------------- */
--- a/drivers/net/wireless/ipw2x00/ipw2100.c 2009-08-31 16:17:52.311180087 -0700
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c 2009-08-31 16:34:41.791081639 -0700
@@ -3330,8 +3330,8 @@ static irqreturn_t ipw2100_interrupt(int
return IRQ_NONE;
}
-static int ipw2100_tx(struct libipw_txb *txb, struct net_device *dev,
- int pri)
+static netdev_tx_t ipw2100_tx(struct libipw_txb *txb,
+ struct net_device *dev, int pri)
{
struct ipw2100_priv *priv = libipw_priv(dev);
struct list_head *element;
@@ -3369,12 +3369,12 @@ static int ipw2100_tx(struct libipw_txb
ipw2100_tx_send_data(priv);
spin_unlock_irqrestore(&priv->low_lock, flags);
- return 0;
+ return NETDEV_TX_OK;
- fail_unlock:
+fail_unlock:
netif_stop_queue(dev);
spin_unlock_irqrestore(&priv->low_lock, flags);
- return 1;
+ return NETDEV_TX_BUSY;
}
static int ipw2100_msg_allocate(struct ipw2100_priv *priv)
--- a/net/mac80211/ieee80211_i.h 2009-08-31 16:17:52.181107339 -0700
+++ b/net/mac80211/ieee80211_i.h 2009-08-31 16:36:09.011107509 -0700
@@ -1050,8 +1050,10 @@ void ieee80211_recalc_idle(struct ieee80
/* tx handling */
void ieee80211_clear_tx_pending(struct ieee80211_local *local);
void ieee80211_tx_pending(unsigned long data);
-int ieee80211_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);
-int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
+netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
+ struct net_device *dev);
/* HT */
void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband,
--- a/net/mac80211/tx.c 2009-08-31 16:17:52.191080883 -0700
+++ b/net/mac80211/tx.c 2009-08-31 16:36:13.706387007 -0700
@@ -1483,8 +1483,8 @@ static void ieee80211_xmit(struct ieee80
dev_put(sdata->dev);
}
-int ieee80211_monitor_start_xmit(struct sk_buff *skb,
- struct net_device *dev)
+netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
struct ieee80211_channel *chan = local->hw.conf.channel;
@@ -1568,8 +1568,8 @@ fail:
* encapsulated packet will then be passed to master interface, wlan#.11, for
* transmission (through low-level driver).
*/
-int ieee80211_subif_start_xmit(struct sk_buff *skb,
- struct net_device *dev)
+netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
{
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_local *local = sdata->local;
--
^ permalink raw reply
* Re: memleaks, acpi + ext4 + tty
From: Zhu Yi @ 2009-09-01 6:33 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Eric Paris, John W. Linville, Eric Paris, Catalin Marinas,
H. Peter Anvin, linux-kernel@vger.kernel.org, Aneesh Kumar K.V,
Greg Kroah-Hartman, linux-wireless
In-Reply-To: <43e72e890908311731h626a5b9bu486653c755cda2fa@mail.gmail.com>
On Tue, 2009-09-01 at 08:31 +0800, Luis R. Rodriguez wrote:
> >>
> http://git.infradead.org/users/eparis/notify.git/commit/b962e7312ae87006aed6f68ceee94bdf8db08338
> >>
> >> FWIW for that patch:
> >>
> >> Tested-by: Luis R. Rodriguez <lrodriguez@atheros.com>
> >>
> >> So -- you if you're like me and had issues with bootup lag on
> >> wireless-testing, you can probably fix your wireless-testing by
> >> pulling his patches:
> >>
> >> git pull git://git.infradead.org/users/eparis/notify.git for-linus
> >>
> >> I saw Linus had some other fixes but I'll wait for rc9 for that as
> my
> >> box seems reasonably stable right now.
> >
> > Yes, -rc8 broke pretty badly for a number of people. Linus did pull
> all
> > of the fixes that I know of. I wouldn't suggest pulling just that
> one
> > commit. All 3 of the post -rc8 patches in my tree fix -rc8
> > regressions :(
>
> Thanks, the note -- so I guess best is to just pull from Linus ontop
> of wireless-testing.
I confirm I'm also suffered with the problem on today's wireless-testing
tip (udevadm --settle hangs on boot) and the above patch does fix the
issue for me. Thanks both for identify and fix the problem.
Thanks,
-yi
^ permalink raw reply
* Re: [PATCH] rfkill: relicense header file
From: Jaswinder Singh Rajput @ 2009-09-01 3:57 UTC (permalink / raw)
To: John W. Linville
Cc: Johannes Berg, linux-wireless, Alan Jenkins,
Henrique de Moraes Holschuh, Iñaky Pérez-González,
Ivo van Doorn, Michael Buesch, Tomas Winkler
In-Reply-To: <20090831174542.GA5631@tuxdriver.com>
On Mon, 2009-08-31 at 13:45 -0400, John W. Linville wrote:
> On Wed, Aug 26, 2009 at 06:13:17PM +0200, Johannes Berg wrote:
> > This header file is copied into userspace tools that
> > need not be GPLv2 licensed, make that easier.
> >
> > Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> > Cc: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
> > Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> > Cc: Iñaky Pérez-González <inaky.perez-gonzalez@intel.com>
> > Cc: Ivo van Doorn <IvDoorn@gmail.com>
> > Cc: Jaswinder Singh Rajput <jaswinder@kernel.org>
> > Cc: John W. Linville <linville@tuxdriver.com>
> > Cc: Michael Buesch <mb@bu3sch.de>
> > Cc: Tomas Winkler <tomas.winkler@intel.com>
> > ---
> > Need ACK from everybody listed who ever touched this
> > file according to git. Please?
>
> Michael? Jaswinder?
>
Acked-by: Jaswinder Singh Rajput <jaswinderrajput@gmail.com>
--
JSR
^ permalink raw reply
* Re: [PATCH] rfkill: relicense header file
From: Jaswinder Singh Rajput @ 2009-09-01 3:49 UTC (permalink / raw)
To: John W. Linville
Cc: Johannes Berg, linux-wireless, Alan Jenkins,
Henrique de Moraes Holschuh, Iñaky Pérez-González,
Ivo van Doorn, Michael Buesch, Tomas Winkler
In-Reply-To: <20090831174542.GA5631@tuxdriver.com>
On Mon, 2009-08-31 at 13:45 -0400, John W. Linville wrote:
> On Wed, Aug 26, 2009 at 06:13:17PM +0200, Johannes Berg wrote:
> > This header file is copied into userspace tools that
> > need not be GPLv2 licensed, make that easier.
> >
> > Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
> > Cc: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
> > Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> > Cc: Iñaky Pérez-González <inaky.perez-gonzalez@intel.com>
> > Cc: Ivo van Doorn <IvDoorn@gmail.com>
> > Cc: Jaswinder Singh Rajput <jaswinder@kernel.org>
> > Cc: John W. Linville <linville@tuxdriver.com>
> > Cc: Michael Buesch <mb@bu3sch.de>
> > Cc: Tomas Winkler <tomas.winkler@intel.com>
> > ---
> > Need ACK from everybody listed who ever touched this
> > file according to git. Please?
>
> Michael? Jaswinder?
>
No Problem, sorry for delay.
Thanks,
--
JSR
^ permalink raw reply
* Re: [PATCH v2] mac80211: Fix output of minstrels rc_stats
From: Julian Calaby @ 2009-09-01 0:54 UTC (permalink / raw)
To: Arnd Hannemann; +Cc: linux-wireless, joe, proski
In-Reply-To: <1251139906-31813-1-git-send-email-hannemann@nets.rwth-aachen.de>
On Tue, Aug 25, 2009 at 04:51, Arnd
Hannemann<hannemann@nets.rwth-aachen.de> wrote:
> An integer overflow in the minstrel debug code prevented the
> throughput to be displayed correctly. This patch fixes that,
> by permutating operations like proposed by Pavel Roskin.
>
> Signed-off-by: Arnd Hannemann <hannemann@nets.rwth-aachen.de>
> ---
> net/mac80211/rc80211_minstrel_debugfs.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/net/mac80211/rc80211_minstrel_debugfs.c b/net/mac80211/rc80211_minstrel_debugfs.c
> index 98f4807..3d72ec5 100644
> --- a/net/mac80211/rc80211_minstrel_debugfs.c
> +++ b/net/mac80211/rc80211_minstrel_debugfs.c
> @@ -83,7 +83,7 @@ minstrel_stats_open(struct inode *inode, struct file *file)
> p += sprintf(p, "%3u%s", mr->bitrate / 2,
> (mr->bitrate & 1 ? ".5" : " "));
>
> - tp = ((mr->cur_tp * 96) / 18000) >> 10;
> + tp = mr->cur_tp / ((18000 << 10) / 96);
Sorry about being so late, but wouldn't:
tp = ((mr->cur_tp * 2) / 375) >> 10;
also work? (Assuming that the numbers in the constant aren't important)
or even:
tp = (mr->cur_tp / 375) >> 9;
Thanks,
--
Julian Calaby
Email: julian.calaby@gmail.com
.Plan: http://sites.google.com/site/juliancalaby/
^ permalink raw reply
* Re: memleaks, acpi + ext4 + tty
From: Luis R. Rodriguez @ 2009-09-01 0:31 UTC (permalink / raw)
To: Eric Paris
Cc: John W. Linville, Eric Paris, Catalin Marinas, H. Peter Anvin,
linux-kernel, Aneesh Kumar K.V, Greg Kroah-Hartman,
linux-wireless
In-Reply-To: <1251764791.2158.7.camel@dhcp231-106.rdu.redhat.com>
On Mon, Aug 31, 2009 at 5:26 PM, Eric Paris<eparis@redhat.com> wrote:
> On Mon, 2009-08-31 at 16:54 -0700, Luis R. Rodriguez wrote:
>> On Mon, Aug 31, 2009 at 1:02 PM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
>> > On Mon, Aug 31, 2009 at 12:47 PM, John W.
>> > Linville<linville@tuxdriver.com> wrote:
>> >> On Mon, Aug 31, 2009 at 12:43:01PM -0700, Luis R. Rodriguez wrote:
>> >>> On Mon, Aug 31, 2009 at 12:33 PM, John W.
>> >>> Linville<linville@tuxdriver.com> wrote:
>> >>
>> >>> > My guess is that the culprit is between
>> >>> > v2.6.31-rc8 and whatever is at the head of linux-2.6-allstable.
>> >>>
>> >>> But the issue is *not* in linux-2.6-allstable, it is only present on
>> >>> wireless-testing, and I went as far back as merge-2009-08-28. I was
>> >>> using whatever tag was available prior to you moving to rc8, and that
>> >>> worked.
>> >>
>> >> OK, then I can only guess that something went wrong in your bisection
>> >> (e.g. dirty build, something not marked properly, etc).
>> >
>> > Well so remember I did a clean git clone of wireless-testing and the
>> > issue was still there, but I determined just now it seems rc8 from
>> > Linus does indeed also have the issue. For some reason the issue was
>> > not present on hpa's rc8 on linux-2.6-allstable. Will double check on
>> > that again.
>>
>> OK so hpa's tree just had all of Linus' stuff pulled, not just rc8. It
>> turns out Eric Paris' inotify patches are required to fix 2.6.31-rc8
>> for me.. I tested just one patch and it fixed my bootup lag:
>>
>> http://git.infradead.org/users/eparis/notify.git/commit/b962e7312ae87006aed6f68ceee94bdf8db08338
>>
>> FWIW for that patch:
>>
>> Tested-by: Luis R. Rodriguez <lrodriguez@atheros.com>
>>
>> So -- you if you're like me and had issues with bootup lag on
>> wireless-testing, you can probably fix your wireless-testing by
>> pulling his patches:
>>
>> git pull git://git.infradead.org/users/eparis/notify.git for-linus
>>
>> I saw Linus had some other fixes but I'll wait for rc9 for that as my
>> box seems reasonably stable right now.
>
> Yes, -rc8 broke pretty badly for a number of people. Linus did pull all
> of the fixes that I know of. I wouldn't suggest pulling just that one
> commit. All 3 of the post -rc8 patches in my tree fix -rc8
> regressions :(
Thanks, the note -- so I guess best is to just pull from Linus ontop
of wireless-testing.
Luis
^ permalink raw reply
* Re: memleaks, acpi + ext4 + tty
From: Eric Paris @ 2009-09-01 0:26 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: John W. Linville, Eric Paris, Catalin Marinas, H. Peter Anvin,
linux-kernel, Aneesh Kumar K.V, Greg Kroah-Hartman,
linux-wireless
In-Reply-To: <43e72e890908311654t5d9489d3w9a817cffab5cb8f8@mail.gmail.com>
On Mon, 2009-08-31 at 16:54 -0700, Luis R. Rodriguez wrote:
> On Mon, Aug 31, 2009 at 1:02 PM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
> > On Mon, Aug 31, 2009 at 12:47 PM, John W.
> > Linville<linville@tuxdriver.com> wrote:
> >> On Mon, Aug 31, 2009 at 12:43:01PM -0700, Luis R. Rodriguez wrote:
> >>> On Mon, Aug 31, 2009 at 12:33 PM, John W.
> >>> Linville<linville@tuxdriver.com> wrote:
> >>
> >>> > My guess is that the culprit is between
> >>> > v2.6.31-rc8 and whatever is at the head of linux-2.6-allstable.
> >>>
> >>> But the issue is *not* in linux-2.6-allstable, it is only present on
> >>> wireless-testing, and I went as far back as merge-2009-08-28. I was
> >>> using whatever tag was available prior to you moving to rc8, and that
> >>> worked.
> >>
> >> OK, then I can only guess that something went wrong in your bisection
> >> (e.g. dirty build, something not marked properly, etc).
> >
> > Well so remember I did a clean git clone of wireless-testing and the
> > issue was still there, but I determined just now it seems rc8 from
> > Linus does indeed also have the issue. For some reason the issue was
> > not present on hpa's rc8 on linux-2.6-allstable. Will double check on
> > that again.
>
> OK so hpa's tree just had all of Linus' stuff pulled, not just rc8. It
> turns out Eric Paris' inotify patches are required to fix 2.6.31-rc8
> for me.. I tested just one patch and it fixed my bootup lag:
>
> http://git.infradead.org/users/eparis/notify.git/commit/b962e7312ae87006aed6f68ceee94bdf8db08338
>
> FWIW for that patch:
>
> Tested-by: Luis R. Rodriguez <lrodriguez@atheros.com>
>
> So -- you if you're like me and had issues with bootup lag on
> wireless-testing, you can probably fix your wireless-testing by
> pulling his patches:
>
> git pull git://git.infradead.org/users/eparis/notify.git for-linus
>
> I saw Linus had some other fixes but I'll wait for rc9 for that as my
> box seems reasonably stable right now.
Yes, -rc8 broke pretty badly for a number of people. Linus did pull all
of the fixes that I know of. I wouldn't suggest pulling just that one
commit. All 3 of the post -rc8 patches in my tree fix -rc8
regressions :(
^ permalink raw reply
* Re: rtl8187b Problem with tx level
From: Greg KH @ 2009-09-01 0:21 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Gábor Stefanik, John W. Linville, Larry Finger,
Hin-Tak Leung, Tobias Schlemmer, linux-wireless
In-Reply-To: <43e72e890908311656o6f4a4157k6f967dc4934e6dd0@mail.gmail.com>
On Mon, Aug 31, 2009 at 04:56:11PM -0700, Luis R. Rodriguez wrote:
> 2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
> > On Tue, Sep 1, 2009 at 1:37 AM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
> >> 2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
> >>> On Mon, Aug 31, 2009 at 11:10 PM, Larry Finger<Larry.Finger@lwfinger.net> wrote:
> >>>> Hin-Tak Leung wrote:
> >>>>>
> >>>>> I just took a look at the history - there aren't obvious bug fixes, a
> >>>>> bunch of work queue-related changes from you & Johannes; feature-wise,
> >>>>> Larry added LED blinking after 2.6.30, and Herton added rfkill support
> >>>>> quite recently after 2.6.31-rc7 . But no, there isn't any change that
> >>>>> would affect tx level beyond 2.6.31-rc7, I think.
> >>>>
> >>>> Your analysis matches my recollection.
> >>>>
> >>>> Apparently RealTek is supplying a closed-source driver for RTL8187B
> >>>> these days. There are no sources for the B on their web site. In
> >>>> addition, the one that Tobias loaded tainted his kernel.
> >>>>
> >>>> Larry
> >>>
> >>> The driver is not actually closed-source; they just don't provide any
> >>> drivers on their site anymore, instead they send their reference
> >>> drivers to OEMs, expecting the OEMs to release their own versions
> >>> (with sources - most vendors who do release Linux drivers in fact only
> >>> release sources, without binaries). The reason for this appears to be
> >>> that Realtek now encourages vendors to sell RTL81xx wireless chips
> >>> with modified USB IDs. (Or are you seeing a binary-only driver on
> >>> realtek.com.tw? That would definitely be a GPL violation, given that
> >>> they use a modified version of the GPLed libipw stack.)
> >>
> >> Gabor, do you speak to RealkTek folks? It seems what may be best for
> >> OEMs and RealTek themselves is to post drivers for inclusion into
> >> staging first and then for interested parties to port them properly.
> >>
> >> Luis
> >
> > Not yet, I haven't tried contacting them. I simply based my comments
> > on the fact that OEMs are releasing sources. However, contacting them
> > about work to include their drivers in the kernel is a good idea -
> > apparently there is nothing keeping Realtek from taking community
> > contributions (unlike e.g. Zydas - the vendor driver is based on
> > Andrea Merello's old r8180-sa2400 driver, and was not developed
> > in-house by Realtek).
>
> If anyone has contacts that does indeed seem reasonable to do, seems
> like it could help them and their customers.
I do have a few contacts there, and have been trying to work with them
to do this, but it is slow going :(
thanks,
greg k-h
^ permalink raw reply
* Re: hal, rfkill and compat-wireless (Re: [RFC/RFT] rtl8187: Implement rfkill support)
From: Inaky Perez-Gonzalez @ 2009-09-01 0:09 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: Marcel Holtmann, Hin-Tak Leung, linux-wireless
In-Reply-To: <43e72e890908311634y5643818ate9d1b28cbbefa2b2@mail.gmail.com>
On Mon, 2009-08-31 at 17:34 -0600, Luis R. Rodriguez wrote:
> On Mon, Aug 31, 2009 at 4:10 PM, Inaky
> Perez-Gonzalez<inaky.perez-gonzalez@intel.com> wrote:
> > On Mon, 2009-08-31 at 17:05 -0600, Luis R. Rodriguez wrote:
> >> On Mon, Aug 31, 2009 at 2:45 PM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
> >> > On Mon, Aug 31, 2009 at 1:40 PM, Marcel Holtmann<marcel@holtmann.org> wrote:
> >> >> Hi Luis,
> >> >>
> >> >>> > OK not so bad except for:
> >> >>> >
> >> >>> > > kernel/net/wimax/wimax.ko
> >> >>> >
> >> >>> > That's touching another subsystem but we could technically merge wimax
> >> >>> > into compat-wireless if Inaky thinks that's a good idea. the point
> >> >>> > here is to unify anything that uses rfkill for backport usage.
> >> >>>
> >> >>> Oh boy, can of worms
> >> >>>
> >> >>> I have my own compat-wimax already, which already handles things for
> >> >>> backwards compat (many #ifdef hacks to simplify life) and which is
> >> >>> heavily used internally.
> >> >>>
> >> >>> I don't really know how much worth it might be and I know I don't have
> >> >>> resources to support both.
> >> >>
> >> >> for the wireless-compat tree, I would just remove the RFKILL support for
> >> >> WiMAX. It is really not worth to support it.
> >> >
> >> > Works for me, we then still need to address (if we really care) the
> >> > platform stuff. If someone is interested feel free to send patches to
> >> > add those, I figure as long we get down to the latest supported stable
> >> > kernel it should be good. The latest supported stable kernel is always
> >> > on display on kernel,org, today being 2.6.27.
> >>
> >> BTW inaky -- this is actually up to you, are you wiling to live with
> >> no rfkill for compat?
> >
> > I don't really mind -- but it could be a problem for anyone trying to
> > use it.
>
> Hm sure and there is still also the issue of users of wimax enabled on
> older kernels and using rfkill there. That is, users not using
> compat-wimax but using just compat-wireless and expecting rfkill to
> work smoothly between wimax and compat-wireless.
>
> I am not sure of the details of the platform rfkill drivers or how
> wimax or wireless drivers use these.. Perhaps there are no issues, I
> haven't really cared to look into it.
>
> > Not that I recommend not being able to switch the radio off :)
> > however, the WiMAX stack has APIs for it too, so at least there is a
> > workaround.
>
> You mean a way to rfkill without rfkill?
the wimax_rfkill() call at the end gets at the same point as the rfkill
call to toggle the radio.
> > But remember, I won't be able to support it at all.
>
> To support what specifically?
non-trivial bug reports. I always love to hear them, but I am really up
to my neck. I just don't want to create the wrong expectations from
users.
--
-- Inaky
^ permalink raw reply
* Re: rtl8187b Problem with tx level
From: Luis R. Rodriguez @ 2009-08-31 23:56 UTC (permalink / raw)
To: Gábor Stefanik
Cc: John W. Linville, Greg KH, Larry Finger, Hin-Tak Leung,
Tobias Schlemmer, linux-wireless
In-Reply-To: <69e28c910908311646w315bef9eo43d3342c13e38fca@mail.gmail.com>
2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
> On Tue, Sep 1, 2009 at 1:37 AM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
>> 2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
>>> On Mon, Aug 31, 2009 at 11:10 PM, Larry Finger<Larry.Finger@lwfinger.net> wrote:
>>>> Hin-Tak Leung wrote:
>>>>>
>>>>> I just took a look at the history - there aren't obvious bug fixes, a
>>>>> bunch of work queue-related changes from you & Johannes; feature-wise,
>>>>> Larry added LED blinking after 2.6.30, and Herton added rfkill support
>>>>> quite recently after 2.6.31-rc7 . But no, there isn't any change that
>>>>> would affect tx level beyond 2.6.31-rc7, I think.
>>>>
>>>> Your analysis matches my recollection.
>>>>
>>>> Apparently RealTek is supplying a closed-source driver for RTL8187B
>>>> these days. There are no sources for the B on their web site. In
>>>> addition, the one that Tobias loaded tainted his kernel.
>>>>
>>>> Larry
>>>
>>> The driver is not actually closed-source; they just don't provide any
>>> drivers on their site anymore, instead they send their reference
>>> drivers to OEMs, expecting the OEMs to release their own versions
>>> (with sources - most vendors who do release Linux drivers in fact only
>>> release sources, without binaries). The reason for this appears to be
>>> that Realtek now encourages vendors to sell RTL81xx wireless chips
>>> with modified USB IDs. (Or are you seeing a binary-only driver on
>>> realtek.com.tw? That would definitely be a GPL violation, given that
>>> they use a modified version of the GPLed libipw stack.)
>>
>> Gabor, do you speak to RealkTek folks? It seems what may be best for
>> OEMs and RealTek themselves is to post drivers for inclusion into
>> staging first and then for interested parties to port them properly.
>>
>> Luis
>
> Not yet, I haven't tried contacting them. I simply based my comments
> on the fact that OEMs are releasing sources. However, contacting them
> about work to include their drivers in the kernel is a good idea -
> apparently there is nothing keeping Realtek from taking community
> contributions (unlike e.g. Zydas - the vendor driver is based on
> Andrea Merello's old r8180-sa2400 driver, and was not developed
> in-house by Realtek).
If anyone has contacts that does indeed seem reasonable to do, seems
like it could help them and their customers.
Luis
^ permalink raw reply
* Re: memleaks, acpi + ext4 + tty
From: Luis R. Rodriguez @ 2009-08-31 23:54 UTC (permalink / raw)
To: John W. Linville, Eric Paris
Cc: Catalin Marinas, H. Peter Anvin, linux-kernel, Aneesh Kumar K.V,
Greg Kroah-Hartman, linux-wireless
In-Reply-To: <43e72e890908311302s58743978wd8950f167a871cfb@mail.gmail.com>
On Mon, Aug 31, 2009 at 1:02 PM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
> On Mon, Aug 31, 2009 at 12:47 PM, John W.
> Linville<linville@tuxdriver.com> wrote:
>> On Mon, Aug 31, 2009 at 12:43:01PM -0700, Luis R. Rodriguez wrote:
>>> On Mon, Aug 31, 2009 at 12:33 PM, John W.
>>> Linville<linville@tuxdriver.com> wrote:
>>
>>> > My guess is that the culprit is between
>>> > v2.6.31-rc8 and whatever is at the head of linux-2.6-allstable.
>>>
>>> But the issue is *not* in linux-2.6-allstable, it is only present on
>>> wireless-testing, and I went as far back as merge-2009-08-28. I was
>>> using whatever tag was available prior to you moving to rc8, and that
>>> worked.
>>
>> OK, then I can only guess that something went wrong in your bisection
>> (e.g. dirty build, something not marked properly, etc).
>
> Well so remember I did a clean git clone of wireless-testing and the
> issue was still there, but I determined just now it seems rc8 from
> Linus does indeed also have the issue. For some reason the issue was
> not present on hpa's rc8 on linux-2.6-allstable. Will double check on
> that again.
OK so hpa's tree just had all of Linus' stuff pulled, not just rc8. It
turns out Eric Paris' inotify patches are required to fix 2.6.31-rc8
for me.. I tested just one patch and it fixed my bootup lag:
http://git.infradead.org/users/eparis/notify.git/commit/b962e7312ae87006aed6f68ceee94bdf8db08338
FWIW for that patch:
Tested-by: Luis R. Rodriguez <lrodriguez@atheros.com>
So -- you if you're like me and had issues with bootup lag on
wireless-testing, you can probably fix your wireless-testing by
pulling his patches:
git pull git://git.infradead.org/users/eparis/notify.git for-linus
I saw Linus had some other fixes but I'll wait for rc9 for that as my
box seems reasonably stable right now.
Luis
^ permalink raw reply
* Re: rtl8187b Problem with tx level
From: Gábor Stefanik @ 2009-08-31 23:46 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: John W. Linville, Greg KH, Larry Finger, Hin-Tak Leung,
Tobias Schlemmer, linux-wireless
In-Reply-To: <43e72e890908311637r7b079e9fj2ac6b77f2b59eb79@mail.gmail.com>
On Tue, Sep 1, 2009 at 1:37 AM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
> 2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
>> On Mon, Aug 31, 2009 at 11:10 PM, Larry Finger<Larry.Finger@lwfinger.net> wrote:
>>> Hin-Tak Leung wrote:
>>>>
>>>> I just took a look at the history - there aren't obvious bug fixes, a
>>>> bunch of work queue-related changes from you & Johannes; feature-wise,
>>>> Larry added LED blinking after 2.6.30, and Herton added rfkill support
>>>> quite recently after 2.6.31-rc7 . But no, there isn't any change that
>>>> would affect tx level beyond 2.6.31-rc7, I think.
>>>
>>> Your analysis matches my recollection.
>>>
>>> Apparently RealTek is supplying a closed-source driver for RTL8187B
>>> these days. There are no sources for the B on their web site. In
>>> addition, the one that Tobias loaded tainted his kernel.
>>>
>>> Larry
>>
>> The driver is not actually closed-source; they just don't provide any
>> drivers on their site anymore, instead they send their reference
>> drivers to OEMs, expecting the OEMs to release their own versions
>> (with sources - most vendors who do release Linux drivers in fact only
>> release sources, without binaries). The reason for this appears to be
>> that Realtek now encourages vendors to sell RTL81xx wireless chips
>> with modified USB IDs. (Or are you seeing a binary-only driver on
>> realtek.com.tw? That would definitely be a GPL violation, given that
>> they use a modified version of the GPLed libipw stack.)
>
> Gabor, do you speak to RealkTek folks? It seems what may be best for
> OEMs and RealTek themselves is to post drivers for inclusion into
> staging first and then for interested parties to port them properly.
>
> Luis
Not yet, I haven't tried contacting them. I simply based my comments
on the fact that OEMs are releasing sources. However, contacting them
about work to include their drivers in the kernel is a good idea -
apparently there is nothing keeping Realtek from taking community
contributions (unlike e.g. Zydas - the vendor driver is based on
Andrea Merello's old r8180-sa2400 driver, and was not developed
in-house by Realtek).
--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)
^ permalink raw reply
* Re: rtl8187b Problem with tx level
From: Luis R. Rodriguez @ 2009-08-31 23:37 UTC (permalink / raw)
To: Gábor Stefanik, John W. Linville, Greg KH
Cc: Larry Finger, Hin-Tak Leung, Tobias Schlemmer, linux-wireless
In-Reply-To: <69e28c910908311418l7f033b5bp7a9b443cd253304@mail.gmail.com>
2009/8/31 Gábor Stefanik <netrolller.3d@gmail.com>:
> On Mon, Aug 31, 2009 at 11:10 PM, Larry Finger<Larry.Finger@lwfinger.net> wrote:
>> Hin-Tak Leung wrote:
>>>
>>> I just took a look at the history - there aren't obvious bug fixes, a
>>> bunch of work queue-related changes from you & Johannes; feature-wise,
>>> Larry added LED blinking after 2.6.30, and Herton added rfkill support
>>> quite recently after 2.6.31-rc7 . But no, there isn't any change that
>>> would affect tx level beyond 2.6.31-rc7, I think.
>>
>> Your analysis matches my recollection.
>>
>> Apparently RealTek is supplying a closed-source driver for RTL8187B
>> these days. There are no sources for the B on their web site. In
>> addition, the one that Tobias loaded tainted his kernel.
>>
>> Larry
>
> The driver is not actually closed-source; they just don't provide any
> drivers on their site anymore, instead they send their reference
> drivers to OEMs, expecting the OEMs to release their own versions
> (with sources - most vendors who do release Linux drivers in fact only
> release sources, without binaries). The reason for this appears to be
> that Realtek now encourages vendors to sell RTL81xx wireless chips
> with modified USB IDs. (Or are you seeing a binary-only driver on
> realtek.com.tw? That would definitely be a GPL violation, given that
> they use a modified version of the GPLed libipw stack.)
Gabor, do you speak to RealkTek folks? It seems what may be best for
OEMs and RealTek themselves is to post drivers for inclusion into
staging first and then for interested parties to port them properly.
Luis
^ permalink raw reply
* Re: hal, rfkill and compat-wireless (Re: [RFC/RFT] rtl8187: Implement rfkill support)
From: Luis R. Rodriguez @ 2009-08-31 23:34 UTC (permalink / raw)
To: Inaky Perez-Gonzalez; +Cc: Marcel Holtmann, Hin-Tak Leung, linux-wireless
In-Reply-To: <1251760232.5165.28.camel@localhost.localdomain>
On Mon, Aug 31, 2009 at 4:10 PM, Inaky
Perez-Gonzalez<inaky.perez-gonzalez@intel.com> wrote:
> On Mon, 2009-08-31 at 17:05 -0600, Luis R. Rodriguez wrote:
>> On Mon, Aug 31, 2009 at 2:45 PM, Luis R. Rodriguez<mcgrof@gmail.com> wrote:
>> > On Mon, Aug 31, 2009 at 1:40 PM, Marcel Holtmann<marcel@holtmann.org> wrote:
>> >> Hi Luis,
>> >>
>> >>> > OK not so bad except for:
>> >>> >
>> >>> > > kernel/net/wimax/wimax.ko
>> >>> >
>> >>> > That's touching another subsystem but we could technically merge wimax
>> >>> > into compat-wireless if Inaky thinks that's a good idea. the point
>> >>> > here is to unify anything that uses rfkill for backport usage.
>> >>>
>> >>> Oh boy, can of worms
>> >>>
>> >>> I have my own compat-wimax already, which already handles things for
>> >>> backwards compat (many #ifdef hacks to simplify life) and which is
>> >>> heavily used internally.
>> >>>
>> >>> I don't really know how much worth it might be and I know I don't have
>> >>> resources to support both.
>> >>
>> >> for the wireless-compat tree, I would just remove the RFKILL support for
>> >> WiMAX. It is really not worth to support it.
>> >
>> > Works for me, we then still need to address (if we really care) the
>> > platform stuff. If someone is interested feel free to send patches to
>> > add those, I figure as long we get down to the latest supported stable
>> > kernel it should be good. The latest supported stable kernel is always
>> > on display on kernel,org, today being 2.6.27.
>>
>> BTW inaky -- this is actually up to you, are you wiling to live with
>> no rfkill for compat?
>
> I don't really mind -- but it could be a problem for anyone trying to
> use it.
Hm sure and there is still also the issue of users of wimax enabled on
older kernels and using rfkill there. That is, users not using
compat-wimax but using just compat-wireless and expecting rfkill to
work smoothly between wimax and compat-wireless.
I am not sure of the details of the platform rfkill drivers or how
wimax or wireless drivers use these.. Perhaps there are no issues, I
haven't really cared to look into it.
> Not that I recommend not being able to switch the radio off :)
> however, the WiMAX stack has APIs for it too, so at least there is a
> workaround.
You mean a way to rfkill without rfkill?
> But remember, I won't be able to support it at all.
To support what specifically?
Luis
^ 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