Skip to content

Commit

Permalink
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/gi…
Browse files Browse the repository at this point in the history
…t/linville/wireless-next-2.6
  • Loading branch information
davem330 committed Aug 6, 2009
2 parents 3d7ddd5 + 6b4f645 commit bfe34eb
Show file tree
Hide file tree
Showing 96 changed files with 2,758 additions and 797 deletions.
50 changes: 29 additions & 21 deletions drivers/net/usb/rndis_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,32 @@ void rndis_status(struct usbnet *dev, struct urb *urb)
}
EXPORT_SYMBOL_GPL(rndis_status);

/*
* RNDIS indicate messages.
*/
static void rndis_msg_indicate(struct usbnet *dev, struct rndis_indicate *msg,
int buflen)
{
struct cdc_state *info = (void *)&dev->data;
struct device *udev = &info->control->dev;

if (dev->driver_info->indication) {
dev->driver_info->indication(dev, msg, buflen);
} else {
switch (msg->status) {
case RNDIS_STATUS_MEDIA_CONNECT:
dev_info(udev, "rndis media connect\n");
break;
case RNDIS_STATUS_MEDIA_DISCONNECT:
dev_info(udev, "rndis media disconnect\n");
break;
default:
dev_info(udev, "rndis indication: 0x%08x\n",
le32_to_cpu(msg->status));
}
}
}

/*
* RPC done RNDIS-style. Caller guarantees:
* - message is properly byteswapped
Expand Down Expand Up @@ -143,27 +169,9 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
request_id, xid);
/* then likely retry */
} else switch (buf->msg_type) {
case RNDIS_MSG_INDICATE: { /* fault/event */
struct rndis_indicate *msg = (void *)buf;
int state = 0;

switch (msg->status) {
case RNDIS_STATUS_MEDIA_CONNECT:
state = 1;
case RNDIS_STATUS_MEDIA_DISCONNECT:
dev_info(&info->control->dev,
"rndis media %sconnect\n",
!state?"dis":"");
if (dev->driver_info->link_change)
dev->driver_info->link_change(
dev, state);
break;
default:
dev_info(&info->control->dev,
"rndis indication: 0x%08x\n",
le32_to_cpu(msg->status));
}
}
case RNDIS_MSG_INDICATE: /* fault/event */
rndis_msg_indicate(dev, (void *)buf, buflen);

break;
case RNDIS_MSG_KEEPALIVE: { /* ping */
struct rndis_keepalive_c *msg = (void *)buf;
Expand Down
32 changes: 18 additions & 14 deletions drivers/net/usb/usbnet.c
Original file line number Diff line number Diff line change
Expand Up @@ -601,21 +601,25 @@ int usbnet_stop (struct net_device *net)
info->description);
}

// ensure there are no more active urbs
add_wait_queue (&unlink_wakeup, &wait);
dev->wait = &unlink_wakeup;
temp = unlink_urbs (dev, &dev->txq) + unlink_urbs (dev, &dev->rxq);

// maybe wait for deletions to finish.
while (!skb_queue_empty(&dev->rxq)
&& !skb_queue_empty(&dev->txq)
&& !skb_queue_empty(&dev->done)) {
msleep(UNLINK_TIMEOUT_MS);
if (netif_msg_ifdown (dev))
devdbg (dev, "waited for %d urb completions", temp);
if (!(info->flags & FLAG_AVOID_UNLINK_URBS)) {
/* ensure there are no more active urbs */
add_wait_queue(&unlink_wakeup, &wait);
dev->wait = &unlink_wakeup;
temp = unlink_urbs(dev, &dev->txq) +
unlink_urbs(dev, &dev->rxq);

/* maybe wait for deletions to finish. */
while (!skb_queue_empty(&dev->rxq)
&& !skb_queue_empty(&dev->txq)
&& !skb_queue_empty(&dev->done)) {
msleep(UNLINK_TIMEOUT_MS);
if (netif_msg_ifdown(dev))
devdbg(dev, "waited for %d urb completions",
temp);
}
dev->wait = NULL;
remove_wait_queue(&unlink_wakeup, &wait);
}
dev->wait = NULL;
remove_wait_queue (&unlink_wakeup, &wait);

usb_kill_urb(dev->interrupt);

Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
menu "Wireless LAN"
depends on !S390

config WLAN_PRE80211
menuconfig WLAN_PRE80211
bool "Wireless LAN (pre-802.11)"
depends on NETDEVICES
---help---
Expand Down Expand Up @@ -101,7 +101,7 @@ config PCMCIA_NETWAVE
called netwave_cs. If unsure, say N.


config WLAN_80211
menuconfig WLAN_80211
bool "Wireless LAN (IEEE 802.11)"
depends on NETDEVICES
---help---
Expand Down
18 changes: 9 additions & 9 deletions drivers/net/wireless/at76c50x-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1773,6 +1773,9 @@ static void at76_mac80211_stop(struct ieee80211_hw *hw)

at76_dbg(DBG_MAC80211, "%s()", __func__);

cancel_delayed_work(&priv->dwork_hw_scan);
cancel_work_sync(&priv->work_set_promisc);

mutex_lock(&priv->mtx);

if (!priv->device_unplugged) {
Expand Down Expand Up @@ -1872,8 +1875,8 @@ static void at76_dwork_hw_scan(struct work_struct *work)
/* FIXME: add maximum time for scan to complete */

if (ret != CMD_STATUS_COMPLETE) {
queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan,
SCAN_POLL_INTERVAL);
ieee80211_queue_delayed_work(priv->hw, &priv->dwork_hw_scan,
SCAN_POLL_INTERVAL);
mutex_unlock(&priv->mtx);
return;
}
Expand Down Expand Up @@ -1934,8 +1937,8 @@ static int at76_hw_scan(struct ieee80211_hw *hw,
goto exit;
}

queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan,
SCAN_POLL_INTERVAL);
ieee80211_queue_delayed_work(priv->hw, &priv->dwork_hw_scan,
SCAN_POLL_INTERVAL);

exit:
mutex_unlock(&priv->mtx);
Expand Down Expand Up @@ -2024,7 +2027,7 @@ static void at76_configure_filter(struct ieee80211_hw *hw,
} else
return;

queue_work(hw->workqueue, &priv->work_set_promisc);
ieee80211_queue_work(hw, &priv->work_set_promisc);
}

static int at76_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
Expand Down Expand Up @@ -2295,11 +2298,8 @@ static void at76_delete_device(struct at76_priv *priv)

tasklet_kill(&priv->rx_tasklet);

if (priv->mac80211_registered) {
cancel_delayed_work(&priv->dwork_hw_scan);
flush_workqueue(priv->hw->workqueue);
if (priv->mac80211_registered)
ieee80211_unregister_hw(priv->hw);
}

if (priv->tx_urb) {
usb_kill_urb(priv->tx_urb);
Expand Down
21 changes: 18 additions & 3 deletions drivers/net/wireless/ath/Kconfig
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
config ATH_COMMON
menuconfig ATH_COMMON
tristate "Atheros Wireless Cards"
depends on WLAN_80211
depends on ATH5K || ATH9K || AR9170_USB
depends on CFG80211
---help---
This will enable the support for the Atheros wireless drivers.
ath5k, ath9k and ar9170 drivers share some common code, this option
enables the common ath.ko module which currently shares just common
regulatory EEPROM helpers but will likely be extended later to share
more between modules.

For more information and documentation on this module you can visit:

http://wireless.kernel.org/en/users/Drivers/ath

For information on all Atheros wireless drivers visit:

http://wireless.kernel.org/en/users/Drivers/Atheros

if ATH_COMMON
source "drivers/net/wireless/ath/ath5k/Kconfig"
source "drivers/net/wireless/ath/ath9k/Kconfig"
source "drivers/net/wireless/ath/ar9170/Kconfig"

endif
4 changes: 2 additions & 2 deletions drivers/net/wireless/ath/ar9170/Kconfig
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
config AR9170_USB
tristate "Atheros AR9170 802.11n USB support"
depends on USB && MAC80211 && WLAN_80211 && EXPERIMENTAL
depends on USB && MAC80211 && WLAN_80211
select FW_LOADER
select ATH_COMMON
help
This is a driver for the Atheros "otus" 802.11n USB devices.

These devices require additional firmware (2 files).
For now, these files can be downloaded from here:

http://wireless.kernel.org/en/users/Drivers/ar9170

If you choose to build a module, it'll be called ar9170usb.
Expand Down
11 changes: 7 additions & 4 deletions drivers/net/wireless/ath/ar9170/led.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,12 @@ static void ar9170_update_leds(struct work_struct *work)
ar9170_set_leds_state(ar, led_val);
mutex_unlock(&ar->mutex);

if (rerun)
queue_delayed_work(ar->hw->workqueue, &ar->led_work,
msecs_to_jiffies(blink_delay));
if (!rerun)
return;

ieee80211_queue_delayed_work(ar->hw,
&ar->led_work,
msecs_to_jiffies(blink_delay));
}

static void ar9170_led_brightness_set(struct led_classdev *led,
Expand All @@ -110,7 +113,7 @@ static void ar9170_led_brightness_set(struct led_classdev *led,
}

if (likely(IS_ACCEPTING_CMD(ar) && arl->toggled))
queue_delayed_work(ar->hw->workqueue, &ar->led_work, HZ/10);
ieee80211_queue_delayed_work(ar->hw, &ar->led_work, HZ/10);
}

static int ar9170_register_led(struct ar9170 *ar, int i, char *name,
Expand Down
29 changes: 16 additions & 13 deletions drivers/net/wireless/ath/ar9170/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -595,10 +595,12 @@ static void ar9170_tx_janitor(struct work_struct *work)

ar9170_tx_fake_ampdu_status(ar);

if (resched)
queue_delayed_work(ar->hw->workqueue,
&ar->tx_janitor,
msecs_to_jiffies(AR9170_JANITOR_DELAY));
if (!resched)
return;

ieee80211_queue_delayed_work(ar->hw,
&ar->tx_janitor,
msecs_to_jiffies(AR9170_JANITOR_DELAY));
}

void ar9170_handle_command_response(struct ar9170 *ar, void *buf, u32 len)
Expand Down Expand Up @@ -648,7 +650,7 @@ void ar9170_handle_command_response(struct ar9170 *ar, void *buf, u32 len)
* pre-TBTT event
*/
if (ar->vif && ar->vif->type == NL80211_IFTYPE_AP)
queue_work(ar->hw->workqueue, &ar->beacon_work);
ieee80211_queue_work(ar->hw, &ar->beacon_work);
break;

case 0xc2:
Expand Down Expand Up @@ -1290,14 +1292,13 @@ static void ar9170_op_stop(struct ieee80211_hw *hw)
if (IS_STARTED(ar))
ar->state = AR9170_IDLE;

flush_workqueue(ar->hw->workqueue);

cancel_delayed_work_sync(&ar->tx_janitor);
#ifdef CONFIG_AR9170_LEDS
cancel_delayed_work_sync(&ar->led_work);
#endif
cancel_work_sync(&ar->filter_config_work);
cancel_work_sync(&ar->beacon_work);

mutex_lock(&ar->mutex);

if (IS_ACCEPTING_CMD(ar)) {
Expand Down Expand Up @@ -1826,10 +1827,12 @@ static void ar9170_tx(struct ar9170 *ar)
}
}

if (schedule_garbagecollector)
queue_delayed_work(ar->hw->workqueue,
&ar->tx_janitor,
msecs_to_jiffies(AR9170_JANITOR_DELAY));
if (!schedule_garbagecollector)
return;

ieee80211_queue_delayed_work(ar->hw,
&ar->tx_janitor,
msecs_to_jiffies(AR9170_JANITOR_DELAY));
}

static bool ar9170_tx_ampdu_queue(struct ar9170 *ar, struct sk_buff *skb)
Expand Down Expand Up @@ -2158,7 +2161,7 @@ static void ar9170_op_configure_filter(struct ieee80211_hw *hw,
}

if (likely(IS_STARTED(ar)))
queue_work(ar->hw->workqueue, &ar->filter_config_work);
ieee80211_queue_work(ar->hw, &ar->filter_config_work);
}

static void ar9170_op_bss_info_changed(struct ieee80211_hw *hw,
Expand Down Expand Up @@ -2416,7 +2419,7 @@ static void ar9170_sta_notify(struct ieee80211_hw *hw,
}

if (IS_STARTED(ar) && ar->filter_changed)
queue_work(ar->hw->workqueue, &ar->filter_config_work);
ieee80211_queue_work(ar->hw, &ar->filter_config_work);
}

static int ar9170_get_stats(struct ieee80211_hw *hw,
Expand Down
3 changes: 1 addition & 2 deletions drivers/net/wireless/ath/ath5k/Kconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
config ATH5K
tristate "Atheros 5xxx wireless cards support"
depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
select ATH_COMMON
depends on PCI && MAC80211 && WLAN_80211
select MAC80211_LEDS
select LEDS_CLASS
select NEW_LEDS
Expand Down
8 changes: 7 additions & 1 deletion drivers/net/wireless/ath/ath5k/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,8 @@ ath5k_mode_setup(struct ath5k_softc *sc)
struct ath5k_hw *ah = sc->ah;
u32 rfilt;

ah->ah_op_mode = sc->opmode;

/* configure rx filter */
rfilt = sc->filter_flags;
ath5k_hw_set_rx_filter(ah, rfilt);
Expand Down Expand Up @@ -1998,9 +2000,12 @@ ath5k_tx_processq(struct ath5k_softc *sc, struct ath5k_txq *txq)
static void
ath5k_tasklet_tx(unsigned long data)
{
int i;
struct ath5k_softc *sc = (void *)data;

ath5k_tx_processq(sc, sc->txq);
for (i=0; i < AR5K_NUM_TX_QUEUES; i++)
if (sc->txqs[i].setup && (sc->ah->ah_txq_isr & BIT(i)))
ath5k_tx_processq(sc, &sc->txqs[i]);
}


Expand Down Expand Up @@ -2768,6 +2773,7 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
}

ath5k_hw_set_lladdr(sc->ah, conf->mac_addr);
ath5k_mode_setup(sc);

ret = 0;
end:
Expand Down
1 change: 0 additions & 1 deletion drivers/net/wireless/ath/ath9k/Kconfig
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
config ATH9K
tristate "Atheros 802.11n wireless cards support"
depends on PCI && MAC80211 && WLAN_80211
select ATH_COMMON
select MAC80211_LEDS
select LEDS_CLASS
select NEW_LEDS
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/wireless/ath/ath9k/ahb.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ static int ath_ahb_probe(struct platform_device *pdev)
sc->bus_ops = &ath_ahb_bus_ops;
sc->irq = irq;

ret = ath_attach(AR5416_AR9100_DEVID, sc);
ret = ath_init_device(AR5416_AR9100_DEVID, sc);
if (ret != 0) {
dev_err(&pdev->dev, "failed to attach device, err=%d\n", ret);
ret = -ENODEV;
Expand Down
6 changes: 3 additions & 3 deletions drivers/net/wireless/ath/ath9k/ani.c
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ void ath9k_hw_ani_setup(struct ath_hw *ah)
}
}

void ath9k_hw_ani_attach(struct ath_hw *ah)
void ath9k_hw_ani_init(struct ath_hw *ah)
{
int i;

Expand Down Expand Up @@ -822,9 +822,9 @@ void ath9k_hw_ani_attach(struct ath_hw *ah)
ah->proc_phyerr |= HAL_PROCESS_ANI;
}

void ath9k_hw_ani_detach(struct ath_hw *ah)
void ath9k_hw_ani_disable(struct ath_hw *ah)
{
DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Detach ANI\n");
DPRINTF(ah->ah_sc, ATH_DBG_ANI, "Disabling ANI\n");

if (ah->has_hw_phycounters) {
ath9k_hw_disable_mib_counters(ah);
Expand Down
Loading

0 comments on commit bfe34eb

Please sign in to comment.