Linux wireless drivers development
 help / color / mirror / Atom feed
* Re: [patch -next] wl1251: wl12xx_get_platform_data() returns an ERR_PTR
From: Kalle Valo @ 2010-12-18  9:12 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: John W. Linville, linux-wireless, kernel-janitors
In-Reply-To: <20101218085210.GO1639@bicker>

Dan Carpenter <error27@gmail.com> writes:

> wl12xx_get_platform_data() returns an ERR_PTR on failure and it never
> returns a NULL.

Yes, that's true. Good that you found this.

> Signed-off-by: Dan Carpenter <error27@gmail.com>

Acked-by: Kalle Valo <kvalo@adurom.com>

-- 
Kalle Valo

^ permalink raw reply

* [PATCH 2/2] ath9k_htc: Fix unnecessary warnings on card removal
From: Rajkumar Manoharan @ 2010-12-18  9:29 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

Avoid register read/write operations when
the card is unplaugged. Otherwise results in
unnecessary warnings.

usb 1-1: USB disconnect, address 10
ath: Failed to wakeup in 500us
------------[ cut here ]------------
WARNING: at drivers/net/wireless/ath/ath9k/hw.c:1616
ath9k_hw_setpower+0x61f/0x630 [ath9k_hw]()
Pid: 1830, comm: khubd Tainted: G        W   2.6.37-rc5-wl #33
Call Trace:
[<ffffffff8105018a>] warn_slowpath_common+0x7a/0xb0
[<ffffffffa0621c90>] ? ath9k_regwrite+0x0/0x190 [ath9k_htc]
[<ffffffff810501d5>] warn_slowpath_null+0x15/0x20
[<ffffffffa05d06ef>] ath9k_hw_setpower+0x61f/0x630 [ath9k_hw]
[<ffffffffa061f25c>] ath9k_htc_ps_wakeup+0x5c/0x60 [ath9k_htc]
[<ffffffffa062082e>] ath9k_htc_remove_interface+0x4e/0xe0 [ath9k_htc]
[<ffffffff81345329>] ? mutex_unlock+0x9/0x10
[<ffffffffa055bbe7>] ? ieee80211_free_keys+0x87/0xa0 [mac80211]
[<ffffffffa054e845>] ieee80211_do_stop+0x4f5/0x540 [mac80211]
[<ffffffff8134678f>] ? _raw_spin_unlock_bh+0x1f/0x30
[<ffffffff812b6983>] ? dev_deactivate+0x1c3/0x1e0
[<ffffffffa054e8a5>] ieee80211_stop+0x15/0x20 [mac80211]
[<ffffffff8129d226>] __dev_close+0x56/0x90
[<ffffffff8129d27a>] dev_close+0x1a/0x50

Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/htc.h          |    1 -
 drivers/net/wireless/ath/ath9k/htc_drv_init.c |    6 ++----
 drivers/net/wireless/ath/ath9k/htc_drv_main.c |   24 +++++++++++++++++++++++-
 drivers/net/wireless/ath/ath9k/wmi.c          |    2 +-
 4 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index fdf9d5f..d90838a 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -339,7 +339,6 @@ void ath_htc_cancel_btcoex_work(struct ath9k_htc_priv *priv);
 #define OP_ASSOCIATED		   BIT(7)
 #define OP_ENABLE_BEACON	   BIT(8)
 #define OP_LED_DEINIT		   BIT(9)
-#define OP_UNPLUGGED		   BIT(10)
 #define OP_BT_PRIORITY_DETECTED	   BIT(11)
 #define OP_BT_SCAN		   BIT(12)
 
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 0f6be35..8a73dc2 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -632,6 +632,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
 	ah->hw_version.subsysid = 0; /* FIXME */
 	ah->hw_version.usbdev = drv_info;
 	ah->ah_flags |= AH_USE_EEPROM;
+	ah->ah_flags &= ~AH_UNPLUGGED;
 	priv->ah = ah;
 
 	common = ath9k_hw_common(ah);
@@ -851,9 +852,6 @@ int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
 	if (ret)
 		goto err_init;
 
-	/* The device may have been unplugged earlier. */
-	priv->op_flags &= ~OP_UNPLUGGED;
-
 	ret = ath9k_init_device(priv, devid, product, drv_info);
 	if (ret)
 		goto err_init;
@@ -873,7 +871,7 @@ void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug)
 
 		/* Check if the device has been yanked out. */
 		if (hotunplug)
-			htc_handle->drv_priv->op_flags |= OP_UNPLUGGED;
+			htc_handle->drv_priv->ah->ah_flags |= AH_UNPLUGGED;
 
 		ath9k_deinit_device(htc_handle->drv_priv);
 		ath9k_deinit_wmi(htc_handle->drv_priv);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
index dd17909..f6e64c9 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
@@ -1110,6 +1110,11 @@ static int ath9k_htc_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
 	struct ath9k_htc_priv *priv = hw->priv;
 	int padpos, padsize, ret;
 
+	if (priv->ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(ath9k_hw_common(priv->ah), ATH_DBG_ANY,
+			"Device no present, can not xmit\n");
+		goto fail_tx;
+	}
 	hdr = (struct ieee80211_hdr *) skb->data;
 
 	/* Add the padding after the header if this is not already done */
@@ -1231,6 +1236,12 @@ static void ath9k_htc_stop(struct ieee80211_hw *hw)
 	cancel_delayed_work_sync(&priv->ath9k_led_blink_work);
 	ath9k_led_stop_brightness(priv);
 
+	if (ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(common, ATH_DBG_ANY, "Device not present\n");
+		mutex_unlock(&priv->mutex);
+		return;
+	}
+
 	ath9k_htc_ps_wakeup(priv);
 	htc_stop(priv->htc);
 	WMI_CMD(WMI_DISABLE_INTR_CMDID);
@@ -1348,6 +1359,11 @@ static void ath9k_htc_remove_interface(struct ieee80211_hw *hw,
 	ath_dbg(common, ATH_DBG_CONFIG, "Detach Interface\n");
 
 	mutex_lock(&priv->mutex);
+	if (priv->ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(common, ATH_DBG_ANY, "Device not present\n");
+		mutex_unlock(&priv->mutex);
+		return;
+	}
 	ath9k_htc_ps_wakeup(priv);
 
 	memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
@@ -1471,11 +1487,17 @@ static void ath9k_htc_configure_filter(struct ieee80211_hw *hw,
 	u32 rfilt;
 
 	mutex_lock(&priv->mutex);
-	ath9k_htc_ps_wakeup(priv);
 
 	changed_flags &= SUPPORTED_FILTERS;
 	*total_flags &= SUPPORTED_FILTERS;
 
+	if (priv->ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(ath9k_hw_common(priv->ah), ATH_DBG_ANY,
+			"Device not present\n");
+		mutex_unlock(&priv->mutex);
+		return;
+	}
+	ath9k_htc_ps_wakeup(priv);
 	priv->rxfilter = *total_flags;
 	rfilt = ath9k_htc_calcrxfilter(priv);
 	ath9k_hw_setrxfilter(priv->ah, rfilt);
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index 8f42ea7..8f42d42 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -250,7 +250,7 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
 	int time_left, ret = 0;
 	unsigned long flags;
 
-	if (wmi->drv_priv->op_flags & OP_UNPLUGGED)
+	if (wmi->drv_priv->ah->ah_flags & AH_UNPLUGGED)
 		return 0;
 
 	skb = alloc_skb(headroom + cmd_len, GFP_ATOMIC);
-- 
1.7.3.3


^ permalink raw reply related

* [patch -next] wl1251: wl12xx_get_platform_data() returns an ERR_PTR
From: Dan Carpenter @ 2010-12-18  8:52 UTC (permalink / raw)
  To: Kalle Valo; +Cc: John W. Linville, linux-wireless, kernel-janitors

wl12xx_get_platform_data() returns an ERR_PTR on failure and it never
returns a NULL.

Signed-off-by: Dan Carpenter <error27@gmail.com>

diff --git a/drivers/net/wireless/wl1251/sdio.c b/drivers/net/wireless/wl1251/sdio.c
index 596d90e..d550b5e 100644
--- a/drivers/net/wireless/wl1251/sdio.c
+++ b/drivers/net/wireless/wl1251/sdio.c
@@ -252,7 +252,7 @@ static int wl1251_sdio_probe(struct sdio_func *func,
 	wl->if_ops = &wl1251_sdio_ops;
 
 	wl12xx_board_data = wl12xx_get_platform_data();
-	if (wl12xx_board_data != NULL) {
+	if (!IS_ERR(wl12xx_board_data)) {
 		wl->set_power = wl12xx_board_data->set_power;
 		wl->irq = wl12xx_board_data->irq;
 		wl->use_eeprom = wl12xx_board_data->use_eeprom;

^ permalink raw reply related

* [PATCH 1/2] ath9k: Fix warnings on card removal
From: Rajkumar Manoharan @ 2010-12-18  8:17 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Rajkumar Manoharan

There is no point in doing register read/write operations
when is hardware is not present. This leads to unnecessary
warnings on log. This patch resolves the following
warnings on card removal.

ath: Failed to wakeup in 500us
------------[ cut here ]------------
WARNING: at drivers/net/wireless/ath/ath9k/hw.c:1618
ath9k_hw_setpower+0x61f/0x630 [ath9k_hw]()
Hardware name: 64756D6
Pid: 540, comm: kworker/u:3 Not tainted 2.6.37-rc6-wl #37
Call Trace:
 [<ffffffff810501aa>] warn_slowpath_common+0x7a/0xb0
 [<ffffffffa056e280>] ? ath9k_iowrite32+0x0/0x90 [ath9k]
 [<ffffffff810501f5>] warn_slowpath_null+0x15/0x20
 [<ffffffffa05226ef>] ath9k_hw_setpower+0x61f/0x630 [ath9k_hw]
 [<ffffffffa05700e5>] ath9k_ps_wakeup+0x85/0xd0 [ath9k]
 [<ffffffffa0570685>] ath9k_configure_filter+0x25/0x80 [ath9k]
 [<ffffffffa04dde43>] ieee80211_configure_filter+0x133/0x190 [mac80211]
 [<ffffffffa04ee502>] ieee80211_do_stop+0x132/0x540 [mac80211]
 [<ffffffff813466ff>] ? _raw_spin_unlock_bh+0x1f/0x30
 [<ffffffff812b6923>] ? dev_deactivate+0x1c3/0x1e0
 [<ffffffffa04ee925>] ieee80211_stop+0x15/0x20 [mac80211]
 [<ffffffff8129d1b6>] __dev_close+0x56/0x90
 [<ffffffff8129d20a>] dev_close+0x1a/0x50
 [<ffffffff8129d57a>] rollback_registered_many+0x6a/0x250
 [<ffffffff8129d776>] unregister_netdevice_many+0x16/0x80
 [<ffffffffa04ee0f4>] ieee80211_remove_interfaces+0xb4/0xf0 [mac80211]
 [<ffffffffa04dd0be>] ieee80211_unregister_hw+0x4e/0x110 [mac80211]
 [<ffffffffa056f467>] ath9k_deinit_device+0x87/0xd0 [ath9k]
 [<ffffffffa057d029>] ath_pci_remove+0x49/0x90 [ath9k]

ath: Could not stop RX, we could be confusing the DMA engine when we
start RX up
------------[ cut here ]------------
WARNING: at drivers/net/wireless/ath/ath9k/recv.c:535
ath_stoprecv+0xdc/0xf0 [ath9k]()
Hardware name: 64756D6
Pid: 5493, comm: kworker/u:0 Tainted: G        W   2.6.37-rc5-wl+ #34
Call Trace:
 [<ffffffff8105018a>] warn_slowpath_common+0x7a/0xb0
 [<ffffffff810501d5>] warn_slowpath_null+0x15/0x20
 [<ffffffffa030806c>] ath_stoprecv+0xdc/0xf0 [ath9k]
 [<ffffffffa0306891>] ath9k_stop+0x221/0x260 [ath9k]
 [<ffffffffa052e387>] ieee80211_stop_device+0x57/0x90 [mac80211]
 [<ffffffffa051f63f>] ieee80211_do_stop+0x26f/0x540 [mac80211]
 [<ffffffff8134678f>] ? _raw_spin_unlock_bh+0x1f/0x30
 [<ffffffff812b6983>] ? dev_deactivate+0x1c3/0x1e0
 [<ffffffffa051f925>] ieee80211_stop+0x15/0x20 [mac80211]
 [<ffffffff8129d226>] __dev_close+0x56/0x90
 [<ffffffff8129d27a>] dev_close+0x1a/0x50

Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com>
---
 drivers/net/wireless/ath/ath9k/eeprom.h |    3 ++-
 drivers/net/wireless/ath/ath9k/gpio.c   |    3 ++-
 drivers/net/wireless/ath/ath9k/init.c   |    5 +++--
 drivers/net/wireless/ath/ath9k/main.c   |   20 ++++++++++++++++++++
 drivers/net/wireless/ath/ath9k/pci.c    |    1 +
 5 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/eeprom.h b/drivers/net/wireless/ath/ath9k/eeprom.h
index f6f09d1..c0942f7 100644
--- a/drivers/net/wireless/ath/ath9k/eeprom.h
+++ b/drivers/net/wireless/ath/ath9k/eeprom.h
@@ -23,7 +23,8 @@
 #include <net/cfg80211.h>
 #include "ar9003_eeprom.h"
 
-#define AH_USE_EEPROM   0x1
+#define AH_USE_EEPROM   0x00000001
+#define AH_UNPLUGGED    0x00000002
 
 #ifdef __BIG_ENDIAN
 #define AR5416_EEPROM_MAGIC 0x5aa5
diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c
index 1337640..978a223 100644
--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -125,7 +125,8 @@ void ath_deinit_leds(struct ath_softc *sc)
 	ath_unregister_led(&sc->tx_led);
 	ath_unregister_led(&sc->rx_led);
 	ath_unregister_led(&sc->radio_led);
-	ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
+	if (!(sc->sc_ah->ah_flags & AH_UNPLUGGED))
+		ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
 }
 
 void ath_init_leds(struct ath_softc *sc)
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 1238795..8cf2414 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -542,6 +542,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
 	if (!sc->dev->platform_data)
 		ah->ah_flags |= AH_USE_EEPROM;
 
+	sc->sc_ah->ah_flags &= ~AH_UNPLUGGED;
 	common = ath9k_hw_common(ah);
 	common->ops = &ath9k_common_ops;
 	common->bus_ops = bus_ops;
@@ -818,8 +819,8 @@ void ath9k_deinit_device(struct ath_softc *sc)
 	struct ieee80211_hw *hw = sc->hw;
 	int i = 0;
 
-	ath9k_ps_wakeup(sc);
-
+	if (!(sc->sc_ah->ah_flags & AH_UNPLUGGED))
+		ath9k_ps_wakeup(sc);
 	wiphy_rfkill_stop_polling(sc->hw->wiphy);
 	ath_deinit_leds(sc);
 
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index cb53fbb..e06a44e 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1220,6 +1220,12 @@ static int ath9k_tx(struct ieee80211_hw *hw,
 	struct ath_tx_control txctl;
 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
 
+	if (sc->sc_ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(common, ATH_DBG_ANY,
+			"Device not present, can not xmit\n");
+		goto exit;
+	}
+
 	if (aphy->state != ATH_WIPHY_ACTIVE && aphy->state != ATH_WIPHY_SCAN) {
 		ath_dbg(common, ATH_DBG_XMIT,
 			"ath9k: %s: TX in unexpected wiphy state %d\n",
@@ -1318,6 +1324,12 @@ static void ath9k_stop(struct ieee80211_hw *hw)
 		return;
 	}
 
+	if (ah->ah_flags & AH_UNPLUGGED) {
+		ath_dbg(common, ATH_DBG_ANY, "Device not present\n");
+		mutex_unlock(&sc->mutex);
+		return;
+	}
+
 	if (ath9k_wiphy_started(sc)) {
 		mutex_unlock(&sc->mutex);
 		return; /* another wiphy still in use */
@@ -1585,6 +1597,11 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
 
 	mutex_lock(&sc->mutex);
 
+	if (ah->ah_flags & AH_UNPLUGGED) {
+		mutex_unlock(&sc->mutex);
+		return 0;
+	}
+
 	/*
 	 * Leave this as the first check because we need to turn on the
 	 * radio if it was disabled before prior to processing the rest
@@ -1765,6 +1782,9 @@ static void ath9k_configure_filter(struct ieee80211_hw *hw,
 	changed_flags &= SUPPORTED_FILTERS;
 	*total_flags &= SUPPORTED_FILTERS;
 
+	if (sc->sc_ah->ah_flags & AH_UNPLUGGED)
+		return;
+
 	sc->rx.rxfilter = *total_flags;
 	ath9k_ps_wakeup(sc);
 	rfilt = ath_calcrxfilter(sc);
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
index 7ca8499..96c6005 100644
--- a/drivers/net/wireless/ath/ath9k/pci.c
+++ b/drivers/net/wireless/ath/ath9k/pci.c
@@ -264,6 +264,7 @@ static void ath_pci_remove(struct pci_dev *pdev)
 	struct ath_softc *sc = aphy->sc;
 	void __iomem *mem = sc->mem;
 
+	sc->sc_ah->ah_flags |= AH_UNPLUGGED;
 	ath9k_deinit_device(sc);
 	free_irq(sc->irq, sc);
 	ieee80211_free_hw(sc->hw);
-- 
1.7.3.3


^ permalink raw reply related

* Re: [RFT] rtlwifi: use alloc_workqueue
From: Tejun Heo @ 2010-12-18  7:13 UTC (permalink / raw)
  To: Larry Finger; +Cc: John W. Linville, linux-wireless
In-Reply-To: <4D0C0E5F.4030605@lwfinger.net>

Hello,

On 12/18/2010 02:29 AM, Larry Finger wrote:
> After further testing, this patch is OK. The problem I saw had another source.
> 
> Add Tested-by: Larry Finger

Thanks for verifying.

Acked-by: Tejun Heo <tj@kernel.org>

-- 
tejun

^ permalink raw reply

* Re: [RFC][PATCH] b43: N-PHY: prepare for 2056 radio tables writing
From: Michael Büsch @ 2010-12-18  6:10 UTC (permalink / raw)
  To: Rafał Miłecki; +Cc: linux-wireless, b43-dev
In-Reply-To: <1292628161-6201-1-git-send-email-zajec5@gmail.com>

On Sat, 2010-12-18 at 00:22 +0100, Rafał Miłecki wrote: 
> ---
> Here is the way I'd like to handle many different tables, 3 for every PHY rev.
> 
> This adds some helper structure, pointers and magic macro. I understand this
> but is this readable for others?
> 
> Advantage of this crazy layout is that we avoid mess like:
> b2056_find_syn_table()
> {
> 	if (phy == 3)
> 		return table_phy3;
> 	else if (phy == 4)
> 		return table_phy4;
> 	...
> 	else if (phy == 9)
> 		return table_phy9;
> }
> ... same for tx and rx.
> 
> Any objections?
> ---
>  drivers/net/wireless/b43/radio_2056.c |   82 +++++++++++++++++++++++++++++++++
>  drivers/net/wireless/b43/radio_2056.h |    3 +
>  2 files changed, 85 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/wireless/b43/radio_2056.c b/drivers/net/wireless/b43/radio_2056.c
> index 0cdf6a4..d30c10a 100644
> --- a/drivers/net/wireless/b43/radio_2056.c
> +++ b/drivers/net/wireless/b43/radio_2056.c
> @@ -24,6 +24,47 @@
>  #include "radio_2056.h"
>  #include "phy_common.h"
>  
> +struct b2056_inittab_entry {
> +	/* Value to write if we use the 5GHz band. */
> +	u16 ghz5;
> +	/* Value to write if we use the 2.4GHz band. */
> +	u16 ghz2;
> +	/* Flags */
> +	u8 flags;
> +#define B2056_INITTAB_ENTRY_OK	0x01
> +#define B2056_INITTAB_UPLOAD	0x02
> +};
> +#define UPLOAD		.flags = B2056_INITTAB_ENTRY_OK | B2056_INITTAB_UPLOAD
> +#define NOUPLOAD	.flags = B2056_INITTAB_ENTRY_OK
> +
> +struct b2056_inittabs_pts {
> +	const struct b2056_inittab_entry *syn;
> +	unsigned int syn_length;
> +	const struct b2056_inittab_entry *tx;
> +	unsigned int tx_length;
> +	const struct b2056_inittab_entry *rx;
> +	unsigned int rx_length;
> +};
> +
> +static const struct b2056_inittab_entry b2056_inittab_rev3_syn[] = {
> +};
> +static const struct b2056_inittab_entry b2056_inittab_rev3_tx[] = {
> +};
> +static const struct b2056_inittab_entry b2056_inittab_rev3_rx[] = {
> +};
> +
> +#define INITTABSPTS(prefix) \
> +	.syn 		= prefix##_syn,			\
> +	.syn_length	= ARRAY_SIZE(prefix##_syn),	\
> +	.tx 		= prefix##_tx,			\
> +	.tx_length	= ARRAY_SIZE(prefix##_tx),	\
> +	.rx 		= prefix##_rx,			\
> +	.rx_length	= ARRAY_SIZE(prefix##_rx)
> +
> +struct b2056_inittabs_pts b2056_inittabs[] = {
> +	[3] = { INITTABSPTS(b2056_inittab_rev3) },
> +};
> +
>  #define RADIOREGS3(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
>  		   r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
>  		   r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, \
> @@ -6045,6 +6086,47 @@ static const struct b43_nphy_channeltab_entry_rev3 b43_nphy_channeltab_rev8[] =
>    },
>  };
>  
> +static void b2056_upload_inittab(struct b43_wldev *dev, bool ghz5,
> +				 bool ignore_uploadflag, u16 routing,
> +				 const struct b2056_inittab_entry *e,
> +				 unsigned int length)
> +{
> +	unsigned int i;
> +	u16 value;
> +
> +	for (i = 0; i < length; i++) {
> +		if (!(e->flags & B2056_INITTAB_ENTRY_OK))
> +			continue;
> +		if ((e->flags & B2056_INITTAB_UPLOAD) || ignore_uploadflag) {
> +			if (ghz5)
> +				value = e->ghz5;
> +			else
> +				value = e->ghz2;
> +			b43_radio_write(dev, routing | i, value);
> +		}
> +		e++;
> +	}
> +}
> +
> +void b2056_upload_inittabs(struct b43_wldev *dev,
> +			   bool ghz5, bool ignore_uploadflag)
> +{
> +	struct b2056_inittabs_pts *pts;
> +
> +	pts = &b2056_inittabs[dev->phy.rev];

I'm OK with this, except that this really needs more sanity checking
here. You need to check the array boundaries and check for
uninitialized (all-zero) entries and print a big fat warn-on.

> +
> +	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
> +				B2056_SYN, pts->syn, pts->syn_length);
> +	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
> +				B2056_TX0, pts->tx, pts->tx_length);
> +	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
> +				B2056_TX1, pts->tx, pts->tx_length);
> +	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
> +				B2056_RX0, pts->rx, pts->rx_length);
> +	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
> +				B2056_RX1, pts->rx, pts->rx_length);
> +}
> +
>  /* TODO: add support for rev4+ devices by searching in rev4+ tables */
>  const struct b43_nphy_channeltab_entry_rev3 *
>  b43_nphy_get_chantabent_rev3(struct b43_wldev *dev, u16 freq)
> diff --git a/drivers/net/wireless/b43/radio_2056.h b/drivers/net/wireless/b43/radio_2056.h
> index 302600c..d601f6e 100644
> --- a/drivers/net/wireless/b43/radio_2056.h
> +++ b/drivers/net/wireless/b43/radio_2056.h
> @@ -1114,4 +1114,7 @@ struct b43_nphy_channeltab_entry_rev3 {
>  	struct b43_phy_n_sfo_cfg phy_regs;
>  };
>  
> +void b2056_upload_inittabs(struct b43_wldev *dev,
> +			   bool ghz5, bool ignore_uploadflag);
> +
>  #endif /* B43_RADIO_2056_H_ */


-- 
Greetings Michael.


^ permalink raw reply

* Re: rtl8192 does not see N networks in my building
From: Larry Finger @ 2010-12-18  4:08 UTC (permalink / raw)
  To: Amos Blanton; +Cc: linux-wireless
In-Reply-To: <AANLkTinCWK95_eFb47pFLz2O=+UHMGpeXg9Z_JstFEa=@mail.gmail.com>

On 12/17/2010 09:32 PM, Amos Blanton wrote:
> 
> Ah, my apologies! I did forget the sudo - sorry about that. I've left
> work now but will do a scan on Monday.
> 
> Should I try installing an updated version of the driver that is

As yours works, then it is likely OK. You would get the latest from the Reaktek
web site. I have no idea where Ubuntu got their version. You would have to
contact them.

Larry

^ permalink raw reply

* Re: rtl8192 does not see N networks in my building
From: Amos Blanton @ 2010-12-18  3:32 UTC (permalink / raw)
  To: Larry Finger; +Cc: linux-wireless
In-Reply-To: <4D0BC0C1.4000809@lwfinger.net>

On Fri, Dec 17, 2010 at 2:57 PM, Larry Finger <Larry.Finger@lwfinger.net> wrote:

> The report I have from Realtek is that a mac80211 driver for that device is
> nearing completion. I originally thought that you were using a staging driver,
> but you must be using a driver from Realtek's site. Do you have the latest? I
> show it to be rtl8192se_linux_2.6.0018.1025.2010. As I recall, that one does not
> work on a 64-bit system.

AFAIK it's whatever ships with Ubuntu 10.10, unless the people at
Zareason installed a different driver before shipping this laptop.
I've searched the package manager but can't find anything related.
Let's see, google says modinfo should tell me. Here's the output:

lightnin@Buford:~$ modinfo r8192se_pci
filename:
/lib/modules/2.6.35-23-generic/kernel/ubuntu/rtl8192se/r8192se_pci.ko
license:        GPL
version:        0017.0507.2010
author:         Copyright(c) 2008 - 2010 Realsil Semiconductor
Corporation <wlanfae@realtek.com>
description:    Linux driver for Realtek RTL819x WiFi cards
srcversion:     64C041B4E539FCBBF8BEA08
alias:          pci:v000010ECd00008174sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008173sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008172sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008171sv*sd*bc*sc*i*
alias:          pci:v000010ECd00008192sv*sd*bc*sc*i*
depends:
vermagic:       2.6.35-23-generic SMP mod_unload modversions
parm:           ifname: Net interface name, wlan%d=default (charp)
parm:           hwwep: Try to use hardware WEP support(default use hw.
set 0 to use software security) (int)
parm:           channels: Channel bitmask for specific locales. NYI (int)


> You need to run iwlist as root to get an active scan. That is why I specified
> the "sudo iwlist scan". Your prompt above looks like the regular user one. If
> I'm wrong there, then something is blocking transmission. Is the module rfkill
> loaded?

Ah, my apologies! I did forget the sudo - sorry about that. I've left
work now but will do a scan on Monday.

Should I try installing an updated version of the driver that is
compatible with 64 bit systems? Where might that be?

Amos

>
> Larry
>

^ permalink raw reply

* [PATCH] rtlwifi: Fix use of mutex in interrupt code
From: Larry Finger @ 2010-12-18  1:36 UTC (permalink / raw)
  To: John W Linville; +Cc: linux-wireless

A previous conversion from semaphoreto mutexes missed the fact that one
of the semaphores was used in interrupt code. Fixed by changing to
a spinlock.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---

Index: wireless-testing/drivers/net/wireless/rtlwifi/base.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/rtlwifi/base.c
+++ wireless-testing/drivers/net/wireless/rtlwifi/base.c
@@ -309,8 +309,8 @@ int rtl_init_core(struct ieee80211_hw *h
 	}
 
 	/* <4> locks */
-	mutex_init(&rtlpriv->locks.ips_mutex);
 	mutex_init(&rtlpriv->locks.conf_mutex);
+	spin_lock_init(&rtlpriv->locks.ips_lock);
 	spin_lock_init(&rtlpriv->locks.irq_th_lock);
 	spin_lock_init(&rtlpriv->locks.h2c_lock);
 	spin_lock_init(&rtlpriv->locks.rf_ps_lock);
Index: wireless-testing/drivers/net/wireless/rtlwifi/ps.c
===================================================================
--- wireless-testing.orig/drivers/net/wireless/rtlwifi/ps.c
+++ wireless-testing/drivers/net/wireless/rtlwifi/ps.c
@@ -286,8 +286,9 @@ void rtl_ips_nic_on(struct ieee80211_hw
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
 	enum rf_pwrstate rtstate;
+	unsigned long flags;
 
-	mutex_lock(&rtlpriv->locks.ips_mutex);
+	spin_lock_irqsave(&rtlpriv->locks.ips_lock, flags);
 
 	if (ppsc->b_inactiveps) {
 		rtstate = ppsc->rfpwr_state;
@@ -303,7 +304,7 @@ void rtl_ips_nic_on(struct ieee80211_hw
 		}
 	}
 
-	mutex_unlock(&rtlpriv->locks.ips_mutex);
+	spin_unlock_irqrestore(&rtlpriv->locks.ips_lock, flags);
 }
 
 /*for FW LPS*/
Index: wireless-testing/drivers/net/wireless/rtlwifi/wifi.h
===================================================================
--- wireless-testing.orig/drivers/net/wireless/rtlwifi/wifi.h
+++ wireless-testing/drivers/net/wireless/rtlwifi/wifi.h
@@ -1192,11 +1192,11 @@ struct rtl_hal_cfg {
 };
 
 struct rtl_locks {
-	/*sem */
-	struct mutex ips_mutex;
+	/* mutex */
 	struct mutex conf_mutex;
 
 	/*spin lock */
+	spinlock_t ips_lock;
 	spinlock_t irq_th_lock;
 	spinlock_t h2c_lock;
 	spinlock_t rf_ps_lock;

^ permalink raw reply

* Re: [RFT] rtlwifi: use alloc_workqueue
From: Larry Finger @ 2010-12-18  1:29 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-wireless, Tejun Heo
In-Reply-To: <1292529589-5904-1-git-send-email-linville@tuxdriver.com>

On 12/16/2010 01:59 PM, John W. Linville wrote:
> create_workqueue is deprecated.  The workqueue usage does not seem to
> demand any special treatment, so do not set any flags either.
> 
> Signed-off-by: John W. Linville <linville@tuxdriver.com>
> ---
> I don't have the hardware to test...
> 
>  drivers/net/wireless/rtlwifi/base.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
> index 9e860ff..24a7cd3 100644
> --- a/drivers/net/wireless/rtlwifi/base.c
> +++ b/drivers/net/wireless/rtlwifi/base.c
> @@ -225,7 +225,7 @@ static void _rtl_init_deferred_work(struct ieee80211_hw *hw)
>  
>  	/* <2> work queue */
>  	rtlpriv->works.hw = hw;
> -	rtlpriv->works.rtl_wq = create_workqueue(rtlpriv->cfg->name);
> +	rtlpriv->works.rtl_wq = alloc_workqueue(rtlpriv->cfg->name, 0, 0);
>  	INIT_DELAYED_WORK(&rtlpriv->works.watchdog_wq,
>  			  (void *)rtl_watchdog_wq_callback);
>  	INIT_DELAYED_WORK(&rtlpriv->works.ips_nic_off_wq,

After further testing, this patch is OK. The problem I saw had another source.

Add Tested-by: Larry Finger

Larry


^ permalink raw reply

* [RFC][PATCH] b43: N-PHY: prepare for 2056 radio tables writing
From: Rafał Miłecki @ 2010-12-17 23:22 UTC (permalink / raw)
  To: linux-wireless; +Cc: b43-dev, Rafał Miłecki

---
Here is the way I'd like to handle many different tables, 3 for every PHY rev.

This adds some helper structure, pointers and magic macro. I understand this
but is this readable for others?

Advantage of this crazy layout is that we avoid mess like:
b2056_find_syn_table()
{
	if (phy == 3)
		return table_phy3;
	else if (phy == 4)
		return table_phy4;
	...
	else if (phy == 9)
		return table_phy9;
}
... same for tx and rx.

Any objections?
---
 drivers/net/wireless/b43/radio_2056.c |   82 +++++++++++++++++++++++++++++++++
 drivers/net/wireless/b43/radio_2056.h |    3 +
 2 files changed, 85 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/b43/radio_2056.c b/drivers/net/wireless/b43/radio_2056.c
index 0cdf6a4..d30c10a 100644
--- a/drivers/net/wireless/b43/radio_2056.c
+++ b/drivers/net/wireless/b43/radio_2056.c
@@ -24,6 +24,47 @@
 #include "radio_2056.h"
 #include "phy_common.h"
 
+struct b2056_inittab_entry {
+	/* Value to write if we use the 5GHz band. */
+	u16 ghz5;
+	/* Value to write if we use the 2.4GHz band. */
+	u16 ghz2;
+	/* Flags */
+	u8 flags;
+#define B2056_INITTAB_ENTRY_OK	0x01
+#define B2056_INITTAB_UPLOAD	0x02
+};
+#define UPLOAD		.flags = B2056_INITTAB_ENTRY_OK | B2056_INITTAB_UPLOAD
+#define NOUPLOAD	.flags = B2056_INITTAB_ENTRY_OK
+
+struct b2056_inittabs_pts {
+	const struct b2056_inittab_entry *syn;
+	unsigned int syn_length;
+	const struct b2056_inittab_entry *tx;
+	unsigned int tx_length;
+	const struct b2056_inittab_entry *rx;
+	unsigned int rx_length;
+};
+
+static const struct b2056_inittab_entry b2056_inittab_rev3_syn[] = {
+};
+static const struct b2056_inittab_entry b2056_inittab_rev3_tx[] = {
+};
+static const struct b2056_inittab_entry b2056_inittab_rev3_rx[] = {
+};
+
+#define INITTABSPTS(prefix) \
+	.syn 		= prefix##_syn,			\
+	.syn_length	= ARRAY_SIZE(prefix##_syn),	\
+	.tx 		= prefix##_tx,			\
+	.tx_length	= ARRAY_SIZE(prefix##_tx),	\
+	.rx 		= prefix##_rx,			\
+	.rx_length	= ARRAY_SIZE(prefix##_rx)
+
+struct b2056_inittabs_pts b2056_inittabs[] = {
+	[3] = { INITTABSPTS(b2056_inittab_rev3) },
+};
+
 #define RADIOREGS3(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
 		   r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
 		   r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, \
@@ -6045,6 +6086,47 @@ static const struct b43_nphy_channeltab_entry_rev3 b43_nphy_channeltab_rev8[] =
   },
 };
 
+static void b2056_upload_inittab(struct b43_wldev *dev, bool ghz5,
+				 bool ignore_uploadflag, u16 routing,
+				 const struct b2056_inittab_entry *e,
+				 unsigned int length)
+{
+	unsigned int i;
+	u16 value;
+
+	for (i = 0; i < length; i++) {
+		if (!(e->flags & B2056_INITTAB_ENTRY_OK))
+			continue;
+		if ((e->flags & B2056_INITTAB_UPLOAD) || ignore_uploadflag) {
+			if (ghz5)
+				value = e->ghz5;
+			else
+				value = e->ghz2;
+			b43_radio_write(dev, routing | i, value);
+		}
+		e++;
+	}
+}
+
+void b2056_upload_inittabs(struct b43_wldev *dev,
+			   bool ghz5, bool ignore_uploadflag)
+{
+	struct b2056_inittabs_pts *pts;
+
+	pts = &b2056_inittabs[dev->phy.rev];
+
+	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
+				B2056_SYN, pts->syn, pts->syn_length);
+	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
+				B2056_TX0, pts->tx, pts->tx_length);
+	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
+				B2056_TX1, pts->tx, pts->tx_length);
+	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
+				B2056_RX0, pts->rx, pts->rx_length);
+	b2056_upload_inittab(dev, ghz5, ignore_uploadflag,
+				B2056_RX1, pts->rx, pts->rx_length);
+}
+
 /* TODO: add support for rev4+ devices by searching in rev4+ tables */
 const struct b43_nphy_channeltab_entry_rev3 *
 b43_nphy_get_chantabent_rev3(struct b43_wldev *dev, u16 freq)
diff --git a/drivers/net/wireless/b43/radio_2056.h b/drivers/net/wireless/b43/radio_2056.h
index 302600c..d601f6e 100644
--- a/drivers/net/wireless/b43/radio_2056.h
+++ b/drivers/net/wireless/b43/radio_2056.h
@@ -1114,4 +1114,7 @@ struct b43_nphy_channeltab_entry_rev3 {
 	struct b43_phy_n_sfo_cfg phy_regs;
 };
 
+void b2056_upload_inittabs(struct b43_wldev *dev,
+			   bool ghz5, bool ignore_uploadflag);
+
 #endif /* B43_RADIO_2056_H_ */
-- 
1.6.3.3


^ permalink raw reply related

* [PATCH 3/3] compat-wireless: add support for RTL8192CE
From: Hauke Mehrtens @ 2010-12-17 22:42 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1292625768-17318-1-git-send-email-hauke@hauke-m.de>


Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 config.mk                         |    3 +++
 patches/06-header-changes.patch   |   10 ++++++++++
 patches/20-pcidev.patch           |   11 +++++++++++
 patches/99-change-makefiles.patch |   10 +++++-----
 scripts/admin-update.sh           |    2 ++
 5 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/config.mk b/config.mk
index 3261aa3..964c646 100644
--- a/config.mk
+++ b/config.mk
@@ -353,6 +353,9 @@ CONFIG_PCMCIA_SPECTRUM=m
 endif #CONFIG_PCMCIA
 endif #CONFIG_WIRELESS_EXT
 
+CONFIG_RTL8192CE=m
+CONFIG_RTLWIFI=m
+
 endif #CONFIG_PCI
 ## end of PCI
 
diff --git a/patches/06-header-changes.patch b/patches/06-header-changes.patch
index 69b1934..0b90d4c 100644
--- a/patches/06-header-changes.patch
+++ b/patches/06-header-changes.patch
@@ -16,6 +16,16 @@ cases.
  
  struct b43_wldev;
  
+--- a/drivers/net/wireless/rtlwifi/base.c
++++ b/drivers/net/wireless/rtlwifi/base.c
+@@ -28,6 +28,7 @@
+  *****************************************************************************/
+ 
+ #include <linux/ip.h>
++#include <linux/in.h>
+ #include "wifi.h"
+ #include "rc.h"
+ #include "base.h"
 --- a/drivers/net/wireless/wl1251/boot.c
 +++ b/drivers/net/wireless/wl1251/boot.c
 @@ -19,7 +19,6 @@
diff --git a/patches/20-pcidev.patch b/patches/20-pcidev.patch
index 19feea6..d576ce8 100644
--- a/patches/20-pcidev.patch
+++ b/patches/20-pcidev.patch
@@ -55,6 +55,17 @@ compat_is_pcie() when needed.
  		rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE);
  	else
  		rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_PCI);
+--- a/drivers/net/wireless/rtlwifi/pci.c
++++ b/drivers/net/wireless/rtlwifi/pci.c
+@@ -1608,7 +1608,7 @@ static bool _rtl_pci_find_adapter(struct
+ 		pcipriv->ndis_adapter.pcibridge_funcnum =
+ 		    PCI_FUNC(bridge_pdev->devfn);
+ 		pcipriv->ndis_adapter.pcibridge_pciehdr_offset =
+-		    bridge_pdev->pcie_cap;
++		    pci_pcie_cap(bridge_pdev);
+ 		pcipriv->ndis_adapter.pcicfg_addrport =
+ 		    (pcipriv->ndis_adapter.pcibridge_busnum << 16) |
+ 		    (pcipriv->ndis_adapter.pcibridge_devnum << 11) |
 --- a/drivers/ssb/scan.c
 +++ b/drivers/ssb/scan.c
 @@ -405,10 +405,10 @@ int ssb_bus_scan(struct ssb_bus *bus,
diff --git a/patches/99-change-makefiles.patch b/patches/99-change-makefiles.patch
index 42c7ea3..585ff03 100644
--- a/patches/99-change-makefiles.patch
+++ b/patches/99-change-makefiles.patch
@@ -45,7 +45,7 @@ only the wireless stuff.
  
 --- a/drivers/net/wireless/Makefile
 +++ b/drivers/net/wireless/Makefile
-@@ -7,32 +7,16 @@ obj-$(CONFIG_IPW2200) += ipw2x00/
+@@ -7,18 +7,8 @@ obj-$(CONFIG_IPW2200) += ipw2x00/
  
  obj-$(CONFIG_HERMES)		+= orinoco/
  
@@ -64,14 +64,14 @@ only the wireless stuff.
  obj-$(CONFIG_B43)		+= b43/
  obj-$(CONFIG_B43LEGACY)		+= b43legacy/
  obj-$(CONFIG_ZD1211RW)		+= zd1211rw/
- obj-$(CONFIG_RTL8180)		+= rtl818x/
+@@ -26,13 +16,8 @@ obj-$(CONFIG_RTL8180)		+= rtl818x/
  obj-$(CONFIG_RTL8187)		+= rtl818x/
--obj-$(CONFIG_RTL8192CE)		+= rtlwifi/
--
+ obj-$(CONFIG_RTL8192CE)		+= rtlwifi/
+ 
 -# 16-bit wireless PCMCIA client drivers
 -obj-$(CONFIG_PCMCIA_RAYCS)	+= ray_cs.o
 -obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs.o
- 
+-
  obj-$(CONFIG_USB_NET_COMPAT_RNDIS_WLAN)	+= rndis_wlan.o
  
 -obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index 6fd1bc0..b93761e 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -229,6 +229,8 @@ DRIVERS="$DRIVERS drivers/net/wireless/zd1211rw"
 DRIVERS="$DRIVERS drivers/net/wireless/libertas"
 DRIVERS="$DRIVERS drivers/net/wireless/p54"
 DRIVERS="$DRIVERS drivers/net/wireless/rtl818x"
+DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi"
+DRIVERS="$DRIVERS drivers/net/wireless/rtlwifi/rtl8192ce"
 DRIVERS="$DRIVERS drivers/net/wireless/libertas_tf"
 DRIVERS="$DRIVERS drivers/net/wireless/ipw2x00"
 DRIVERS="$DRIVERS drivers/net/wireless/wl12xx"
-- 
1.7.1


^ permalink raw reply related

* [PATCH 2/3] compat-wireless: use pci_is_pcie()
From: Hauke Mehrtens @ 2010-12-17 22:42 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1292625768-17318-1-git-send-email-hauke@hauke-m.de>

Use pci_is_pcie function and do not access the member of the struct directly.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 patches/20-pcidev.patch |   66 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 60 insertions(+), 6 deletions(-)

diff --git a/patches/20-pcidev.patch b/patches/20-pcidev.patch
index 25a3946..19feea6 100644
--- a/patches/20-pcidev.patch
+++ b/patches/20-pcidev.patch
@@ -2,17 +2,71 @@ Older kernels than 2.6.24 do not have the is_pcie member as part of
 the struct pci_dev, to help with that we use the compat-2.6.24.c supplied
 compat_is_pcie() when needed.
 
+--- a/drivers/net/wireless/ath/ath5k/attach.c
++++ b/drivers/net/wireless/ath/ath5k/attach.c
+@@ -276,7 +276,7 @@ int ath5k_hw_init(struct ath5k_softc *sc
+ 	/*
+ 	 * Write PCI-E power save settings
+ 	 */
+-	if ((ah->ah_version == AR5K_AR5212) && pdev && (pdev->is_pcie)) {
++	if ((ah->ah_version == AR5K_AR5212) && pdev && (pci_is_pcie(pdev))) {
+ 		ath5k_hw_reg_write(ah, 0x9248fc00, AR5K_PCIE_SERDES);
+ 		ath5k_hw_reg_write(ah, 0x24924924, AR5K_PCIE_SERDES);
+ 
+--- a/drivers/net/wireless/ath/ath5k/reset.c
++++ b/drivers/net/wireless/ath/ath5k/reset.c
+@@ -537,7 +537,7 @@ int ath5k_hw_on_hold(struct ath5k_hw *ah
+ 	 * we ingore that flag for PCI-E cards. On PCI cards
+ 	 * this flag gets cleared after 64 PCI clocks.
+ 	 */
+-	bus_flags = (pdev && pdev->is_pcie) ? 0 : AR5K_RESET_CTL_PCI;
++	bus_flags = (pdev && pci_is_pcie(pdev)) ? 0 : AR5K_RESET_CTL_PCI;
+ 
+ 	if (ah->ah_version == AR5K_AR5210) {
+ 		ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
+@@ -594,7 +594,7 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw
+ 	 * we ingore that flag for PCI-E cards. On PCI cards
+ 	 * this flag gets cleared after 64 PCI clocks.
+ 	 */
+-	bus_flags = (pdev && pdev->is_pcie) ? 0 : AR5K_RESET_CTL_PCI;
++	bus_flags = (pdev && pci_is_pcie(pdev)) ? 0 : AR5K_RESET_CTL_PCI;
+ 
+ 	if (ah->ah_version == AR5K_AR5210) {
+ 		ret = ath5k_hw_nic_reset(ah, AR5K_RESET_CTL_PCU |
 --- a/drivers/net/wireless/ath/ath9k/pci.c
 +++ b/drivers/net/wireless/ath/ath9k/pci.c
-@@ -96,7 +96,11 @@ static void ath_pci_bt_coex_prep(struct
+@@ -96,7 +96,7 @@ static void ath_pci_bt_coex_prep(struct
  	struct pci_dev *pdev = to_pci_dev(sc->dev);
  	u8 aspm;
  
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
- 	if (!pdev->is_pcie)
-+#else
-+	if (!compat_is_pcie(pdev))
-+#endif
+-	if (!pdev->is_pcie)
++	if (!pci_is_pcie(pdev))
  		return;
  
  	pci_read_config_byte(pdev, ATH_PCIE_CAP_LINK_CTRL, &aspm);
+--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
++++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
+@@ -301,7 +301,7 @@ int rt2x00pci_probe(struct pci_dev *pci_
+ 	rt2x00dev->irq = pci_dev->irq;
+ 	rt2x00dev->name = pci_name(pci_dev);
+ 
+-	if (pci_dev->is_pcie)
++	if (pci_is_pcie(pci_dev))
+ 		rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE);
+ 	else
+ 		rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_PCI);
+--- a/drivers/ssb/scan.c
++++ b/drivers/ssb/scan.c
+@@ -405,10 +405,10 @@ int ssb_bus_scan(struct ssb_bus *bus,
+ 				/* Ignore PCI cores on PCI-E cards.
+ 				 * Ignore PCI-E cores on PCI cards. */
+ 				if (dev->id.coreid == SSB_DEV_PCI) {
+-					if (bus->host_pci->is_pcie)
++					if (pci_is_pcie(bus->host_pci))
+ 						continue;
+ 				} else {
+-					if (!bus->host_pci->is_pcie)
++					if (!pci_is_pcie(bus->host_pci))
+ 						continue;
+ 				}
+ 			}
-- 
1.7.1


^ permalink raw reply related

* [PATCH 1/3] compat-wireless: make patches apply again.
From: Hauke Mehrtens @ 2010-12-17 22:42 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens


Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 patches/25-multicast-list_head.patch |   18 +++++++++---------
 patches/99-change-makefiles.patch    |    7 ++++---
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/patches/25-multicast-list_head.patch b/patches/25-multicast-list_head.patch
index 09099ff..8ad8391 100644
--- a/patches/25-multicast-list_head.patch
+++ b/patches/25-multicast-list_head.patch
@@ -162,7 +162,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  }
 --- a/drivers/net/wireless/ath/ath5k/base.c
 +++ b/drivers/net/wireless/ath/ath5k/base.c
-@@ -3122,20 +3122,42 @@ unlock:
+@@ -3131,20 +3131,42 @@ unlock:
  }
  
  static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
@@ -205,7 +205,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  		pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
  		pos &= 0x3f;
  		mfilt[pos / 32] |= (1 << (pos % 32));
-@@ -3144,6 +3166,9 @@ static u64 ath5k_prepare_multicast(struc
+@@ -3153,6 +3175,9 @@ static u64 ath5k_prepare_multicast(struc
  		* neet to inform below to not reset the mcast */
  		/* ath5k_hw_set_mcast_filterindex(ah,
  		 *      ha->addr[5]); */
@@ -501,7 +501,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  static void rtl8187_configure_filter(struct ieee80211_hw *dev,
 --- a/drivers/net/wireless/wl12xx/main.c
 +++ b/drivers/net/wireless/wl12xx/main.c
-@@ -1481,11 +1481,20 @@ struct wl1271_filter_params {
+@@ -1501,11 +1501,20 @@ struct wl1271_filter_params {
  	u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
  };
  
@@ -522,7 +522,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  	struct wl1271 *wl = hw->priv;
  
  	if (unlikely(wl->state == WL1271_STATE_OFF))
-@@ -1498,16 +1507,40 @@ static u64 wl1271_op_prepare_multicast(s
+@@ -1518,16 +1527,40 @@ static u64 wl1271_op_prepare_multicast(s
  	}
  
  	/* update multicast filtering parameters */
@@ -607,11 +607,11 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  		if (!cnt)
  			break;
 +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- 		memcpy(bufp, ha->addr, ETHER_ADDR_LEN);
+ 		memcpy(bufp, ha->addr, ETH_ALEN);
 +#else
-+		memcpy(bufp, ha->dmi_addr, ETHER_ADDR_LEN);
++		memcpy(bufp, ha->dmi_addr, ETH_ALEN);
 +#endif
- 		bufp += ETHER_ADDR_LEN;
+ 		bufp += ETH_ALEN;
  		cnt--;
  	}
 --- a/include/net/mac80211.h
@@ -677,7 +677,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -718,7 +718,12 @@ struct ieee80211_local {
+@@ -719,7 +719,12 @@ struct ieee80211_local {
  	struct work_struct recalc_smps;
  
  	/* aggregated multicast list */
@@ -733,7 +733,7 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  	spin_unlock_bh(&local->filter_lock);
  
  	/* be a bit nasty */
-@@ -550,9 +554,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
+@@ -555,9 +559,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
  	local->uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
  
  	INIT_LIST_HEAD(&local->interfaces);
diff --git a/patches/99-change-makefiles.patch b/patches/99-change-makefiles.patch
index 5114869..42c7ea3 100644
--- a/patches/99-change-makefiles.patch
+++ b/patches/99-change-makefiles.patch
@@ -45,7 +45,7 @@ only the wireless stuff.
  
 --- a/drivers/net/wireless/Makefile
 +++ b/drivers/net/wireless/Makefile
-@@ -7,31 +7,16 @@ obj-$(CONFIG_IPW2200) += ipw2x00/
+@@ -7,32 +7,16 @@ obj-$(CONFIG_IPW2200) += ipw2x00/
  
  obj-$(CONFIG_HERMES)		+= orinoco/
  
@@ -66,11 +66,12 @@ only the wireless stuff.
  obj-$(CONFIG_ZD1211RW)		+= zd1211rw/
  obj-$(CONFIG_RTL8180)		+= rtl818x/
  obj-$(CONFIG_RTL8187)		+= rtl818x/
- 
+-obj-$(CONFIG_RTL8192CE)		+= rtlwifi/
+-
 -# 16-bit wireless PCMCIA client drivers
 -obj-$(CONFIG_PCMCIA_RAYCS)	+= ray_cs.o
 -obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs.o
--
+ 
  obj-$(CONFIG_USB_NET_COMPAT_RNDIS_WLAN)	+= rndis_wlan.o
  
 -obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
-- 
1.7.1


^ permalink raw reply related

* [PATCH 3/3] compat: backport pci_is_pcie and pci_pcie_cap
From: Hauke Mehrtens @ 2010-12-17 22:41 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1292625698-17289-1-git-send-email-hauke@hauke-m.de>

compat_is_pcie already did the same thing as pci_is_pcie, but this
method is now in kernel so the mainline drivers should use this
function instead of accessing the  member in the struct directly. We
backported this function for older kernels.
pci_pcie_cap is used in rtlwifi so we also need this.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 compat/compat-2.6.24.c        |   12 ------------
 include/linux/compat-2.6.24.h |    3 ---
 include/linux/compat-2.6.33.h |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/compat/compat-2.6.24.c b/compat/compat-2.6.24.c
index a5c9c97..5e2a77d 100644
--- a/compat/compat-2.6.24.c
+++ b/compat/compat-2.6.24.c
@@ -165,15 +165,3 @@ int eth_rebuild_header(struct sk_buff *skb)
 }
 EXPORT_SYMBOL(eth_rebuild_header);
 
-/* 2.6.24 will introduce struct pci_dev is_pcie bit. To help
- * with the compatibility code (compat.diff) being smaller, we provide a helper
- * so in cases where that will be used we can simply slap ifdefs with this
- * routine. Use compat_ prefex to not pollute namespace.  */
-int compat_is_pcie(struct pci_dev *pdev)
-{
-	int cap;
-	cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
-	return cap ? 1 : 0;
-}
-EXPORT_SYMBOL(compat_is_pcie);
-
diff --git a/include/linux/compat-2.6.24.h b/include/linux/compat-2.6.24.h
index f9c777c..6e09530 100644
--- a/include/linux/compat-2.6.24.h
+++ b/include/linux/compat-2.6.24.h
@@ -249,9 +249,6 @@ static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
 	return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
 }
 
-/* Helper to make struct pci_dev is_pcie compatibility code smaller */
-int compat_is_pcie(struct pci_dev *pdev);
-
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) */
 
 #endif /* LINUX_26_24_COMPAT_H */
diff --git a/include/linux/compat-2.6.33.h b/include/linux/compat-2.6.33.h
index c2dbc1b..2ccf141 100644
--- a/include/linux/compat-2.6.33.h
+++ b/include/linux/compat-2.6.33.h
@@ -6,6 +6,7 @@
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
 
 #include <linux/skbuff.h>
+#include <linux/pci.h>
 #if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE)
 #include <pcmcia/cs_types.h>
 #include <pcmcia/cistpl.h>
@@ -147,6 +148,37 @@ static inline void compat_kfifo_free(struct kfifo **fifo) {
 
 #define sock_recv_ts_and_drops(msg, sk, skb) sock_recv_timestamp(msg, sk, skb)
 
+/**
+ * pci_pcie_cap - get the saved PCIe capability offset
+ * @dev: PCI device
+ *
+ * PCIe capability offset is calculated at PCI device initialization
+ * time and saved in the data structure. This function returns saved
+ * PCIe capability offset. Using this instead of pci_find_capability()
+ * reduces unnecessary search in the PCI configuration space. If you
+ * need to calculate PCIe capability offset from raw device for some
+ * reasons, please use pci_find_capability() instead.
+ */
+static inline int pci_pcie_cap(struct pci_dev *dev)
+{
+	return pci_find_capability(dev, PCI_CAP_ID_EXP);
+}
+
+/**
+ * pci_is_pcie - check if the PCI device is PCI Express capable
+ * @dev: PCI device
+ *
+ * Retrun true if the PCI device is PCI Express capable, false otherwise.
+ */
+static inline bool pci_is_pcie(struct pci_dev *dev)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
+	return dev->is_pcie;
+#else
+	return !!pci_pcie_cap(dev);
+#endif
+}
+
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) */
 
 #endif /* LINUX_26_33_COMPAT_H */
-- 
1.7.1


^ permalink raw reply related

* [PATCH 2/3] compat backport no_printk
From: Hauke Mehrtens @ 2010-12-17 22:41 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens
In-Reply-To: <1292625698-17289-1-git-send-email-hauke@hauke-m.de>

This is needed by brcm80211.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 include/linux/compat-2.6.36.h |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/include/linux/compat-2.6.36.h b/include/linux/compat-2.6.36.h
index 83b7f06..1f2f507 100644
--- a/include/linux/compat-2.6.36.h
+++ b/include/linux/compat-2.6.36.h
@@ -90,6 +90,13 @@ struct pm_qos_request_list {
 
 #endif
 
+/*
+ * Dummy printk for disabled debugging statements to use whilst maintaining
+ * gcc's format and side-effect checking.
+ */
+static inline __attribute__ ((format (printf, 1, 2)))
+int no_printk(const char *s, ...) { return 0; }
+
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)) */
 
 #endif /* LINUX_26_36_COMPAT_H */
-- 
1.7.1


^ permalink raw reply related

* [PATCH 1/3] compat: backport skb_checksum_start_offset
From: Hauke Mehrtens @ 2010-12-17 22:41 UTC (permalink / raw)
  To: lrodriguez; +Cc: linux-wireless, mcgrof, Hauke Mehrtens

This is needed by atlx, atl1c and atl1e.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 include/linux/compat-2.6.38.h |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/include/linux/compat-2.6.38.h b/include/linux/compat-2.6.38.h
index dfc406e..0521156 100644
--- a/include/linux/compat-2.6.38.h
+++ b/include/linux/compat-2.6.38.h
@@ -6,6 +6,7 @@
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
 
 #include <linux/kernel.h>
+#include <linux/skbuff.h>
 
 /*
  * This is not part of The 2.6.37 kernel yet but we
@@ -56,6 +57,11 @@ static inline unsigned long ewma_read(const struct ewma *avg)
 
 #define pr_warn pr_warning
 
+static inline int skb_checksum_start_offset(const struct sk_buff *skb)
+{
+	return skb->csum_start - skb_headroom(skb);
+}
+
 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)) */
 
 #endif /* LINUX_26_38_COMPAT_H */
-- 
1.7.1


^ permalink raw reply related

* Re: new iwlwifi 6030 uCode available
From: Guy, Wey-Yi @ 2010-12-17 22:30 UTC (permalink / raw)
  To: Daniel Halperin
  Cc: Rafał Miłecki, linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net
In-Reply-To: <AANLkTi=LmzQVzUruEQAjcSOEjy+x3U_9DqF4tLHENAcU@mail.gmail.com>

Hi Daniel,

On Fri, 2010-12-17 at 14:19 -0800, Daniel Halperin wrote:
> 2010/12/17 Rafał Miłecki <zajec5@gmail.com>:
> > 2010/12/17 Guy, Wey-Yi <wey-yi.w.guy@intel.com>:
> >> Version 17.168.5.1 of uCode for Intel Intel@ 6030 Series Wi-Fi Adapters
> >> is now available for download from
> >> http://intellinuxwireless.org/?n=Downloads
> >
> > I want uCode for 5100 to resolve
> > http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2214 !
> >
> > Damn, do you want us to RE Intel's firmware or what? Is that your policy?
> 
> Hi Wey-Yi,
> 
> I noticed from this bug report that the workaround is to disable
> 802.11n.  Is it not possible to instead force-stop all queues, restart
> the firmware and driver similar to when uCode crashes?  This might
> tide Rafal over for a little while.  It looks like he's not planning
> to stop trolling every few days despite your giving the same answer
> that the issue is out of your control.
> 
> Alternatively, Rafal, you might try to implement this type of fix.
> 
I thought about that and I even have the patch for it, but it works
sometime and not the other and it is not stable, that is why I did not
push upstream, I might need to spend more time to figure out what is
going on there. Just don't have much time in the past few weeks/months.

Thank
Wey


^ permalink raw reply

* Re: new iwlwifi 6030 uCode available
From: Daniel Halperin @ 2010-12-17 22:19 UTC (permalink / raw)
  To: Rafał Miłecki
  Cc: Guy, Wey-Yi, linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net
In-Reply-To: <AANLkTinWma9xFSUe9ShdVWWRYsFtDVcAoacZAg4RMXA+@mail.gmail.com>

2010/12/17 Rafał Miłecki <zajec5@gmail.com>:
> 2010/12/17 Guy, Wey-Yi <wey-yi.w.guy@intel.com>:
>> Version 17.168.5.1 of uCode for Intel Intel@ 6030 Series Wi-Fi Adapters
>> is now available for download from
>> http://intellinuxwireless.org/?n=Downloads
>
> I want uCode for 5100 to resolve
> http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2214 !
>
> Damn, do you want us to RE Intel's firmware or what? Is that your policy?

Hi Wey-Yi,

I noticed from this bug report that the workaround is to disable
802.11n.  Is it not possible to instead force-stop all queues, restart
the firmware and driver similar to when uCode crashes?  This might
tide Rafal over for a little while.  It looks like he's not planning
to stop trolling every few days despite your giving the same answer
that the issue is out of your control.

Alternatively, Rafal, you might try to implement this type of fix.

Dan

^ permalink raw reply

* [PATCH] orinoco_cs: fix too early irq request
From: Meelis Roos @ 2010-12-17 22:18 UTC (permalink / raw)
  To: linux-wireless

orinoco_cs requests its irq too early. This results in irq coming in 
right afrer request_irq and before initializing other data structures, 
resulting in NULL pointer dereference on module load.

Fix it by moving request_irq after other initialization tasks.

Tested to work with Orinoco Gold PCMCIA card.

Signed-off-by: Meelis Roos <mroos@linux.ee>

diff --git a/drivers/net/wireless/orinoco/orinoco_cs.c b/drivers/net/wireless/orinoco/orinoco_cs.c
index 71b3d68..47fc408 100644
--- a/drivers/net/wireless/orinoco/orinoco_cs.c
+++ b/drivers/net/wireless/orinoco/orinoco_cs.c
@@ -151,10 +151,6 @@ orinoco_cs_config(struct pcmcia_device *link)
 		goto failed;
 	}
 
-	ret = pcmcia_request_irq(link, orinoco_interrupt);
-	if (ret)
-		goto failed;
-
 	/* We initialize the hermes structure before completing PCMCIA
 	 * configuration just in case the interrupt handler gets
 	 * called. */
@@ -182,6 +178,10 @@ orinoco_cs_config(struct pcmcia_device *link)
 		goto failed;
 	}
 
+	ret = pcmcia_request_irq(link, orinoco_interrupt);
+	if (ret)
+		goto failed;
+
 	return 0;
 
  failed:

-- 
Meelis Roos (mroos@linux.ee)

^ permalink raw reply related

* Re: new iwlwifi 6030 uCode available
From: Rafał Miłecki @ 2010-12-17 22:12 UTC (permalink / raw)
  To: Guy, Wey-Yi
  Cc: linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net
In-Reply-To: <1292620126.22230.12.camel@wwguy-ubuntu>

2010/12/17 Guy, Wey-Yi <wey-yi.w.guy@intel.com>:
> Version 17.168.5.1 of uCode for Intel Intel@ 6030 Series Wi-Fi Adapters
> is now available for download from
> http://intellinuxwireless.org/?n=Downloads

I want uCode for 5100 to resolve
http://bugzilla.intellinuxwireless.org/show_bug.cgi?id=2214 !

Damn, do you want us to RE Intel's firmware or what? Is that your policy?

-- 
Rafał

^ permalink raw reply

* [PATCH] MAINTAINERS: Fix typo in rtl8192ce entry
From: Larry.Finger @ 2010-12-17 22:04 UTC (permalink / raw)
  To: linville; +Cc: linux-wireless, Larry Finger

From: Larry Finger <Larry.Finger@lwfinger.net>

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
 MAINTAINERS |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index eb744aa..12d064f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -5063,7 +5063,7 @@ W:	http://linuxwireless.org/
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 S:	Maintained
 F:	drivers/net/wireless/rtlwifi/
-F:	drivers/net/wireless/rtl8192ce/
+F:	drivers/net/wireless/rtlwifi/rtl8192ce/
 
 S3 SAVAGE FRAMEBUFFER DRIVER
 M:	Antonino Daplas <adaplas@gmail.com>
-- 
1.7.1


^ permalink raw reply related

* Re: [PATCH] hostap: remove netif_stop_queue from init
From: David Miller @ 2010-12-17 21:32 UTC (permalink / raw)
  To: mroos; +Cc: j, netdev, linux-wireless, linville
In-Reply-To: <alpine.SOC.1.00.1012172324340.24976@math.ut.ee>

From: Meelis Roos <mroos@linux.ee>
Date: Fri, 17 Dec 2010 23:27:50 +0200 (EET)

> Fix runtime warning with backtrace from hostap by removing 
> netif_stop_queue() call before register_netdev. Tested to work fine on 
> hostap_pci Prism 2.5.
> 
> Signed-off-by: Meelis Roos <mroos@linux.ee>

Acked-by: David S. Miller <davem@davemloft.net>

John, please apply this.

^ permalink raw reply

* [PATCH] hostap: remove netif_stop_queue from init
From: Meelis Roos @ 2010-12-17 21:27 UTC (permalink / raw)
  To: David Miller; +Cc: j, netdev, linux-wireless
In-Reply-To: <20101210.094747.193727608.davem@davemloft.net>

Fix runtime warning with backtrace from hostap by removing 
netif_stop_queue() call before register_netdev. Tested to work fine on 
hostap_pci Prism 2.5.

Signed-off-by: Meelis Roos <mroos@linux.ee>

diff --git a/drivers/net/wireless/hostap/hostap_main.c b/drivers/net/wireless/hostap/hostap_main.c
index 25a2722..1d9aed6 100644
--- a/drivers/net/wireless/hostap/hostap_main.c
+++ b/drivers/net/wireless/hostap/hostap_main.c
@@ -891,7 +891,6 @@ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
 
 	SET_ETHTOOL_OPS(dev, &prism2_ethtool_ops);
 
-	netif_stop_queue(dev);
 }
 
 static int hostap_enable_hostapd(local_info_t *local, int rtnl_locked)

-- 
Meelis Roos (mroos@linux.ee)

^ permalink raw reply related

* new iwlwifi 6030 uCode available
From: Guy, Wey-Yi @ 2010-12-17 21:08 UTC (permalink / raw)
  To: linux-wireless@vger.kernel.org,
	ipw3945-devel@lists.sourceforge.net

Hi,

Version 17.168.5.1 of uCode for Intel Intel@ 6030 Series Wi-Fi Adapters
is now available for download from
http://intellinuxwireless.org/?n=Downloads

Wey


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox