On 12/27/06, Jon Smirl <[EMAIL PROTECTED]> wrote:
This patch fixes up the zd1211rw git tree to account for the work
queue changes in 2.6.20+.
Probably would be best to attach the version of the patch that works.
--
Jon Smirl
[EMAIL PROTECTED]
diff --git a/zd_mac.c b/zd_mac.c
index 10339f5..77b954f 100644
--- a/zd_mac.c
+++ b/zd_mac.c
@@ -32,14 +32,14 @@ #include "zd_util.h"
static void ieee_init(struct ieee80211_device *ieee);
static void softmac_init(struct ieee80211softmac_device *sm);
-static void set_rts_cts_work(void *d);
-static void set_basic_rates_work(void *d);
+static void set_rts_cts_work(struct work_struct *work);
+static void set_basic_rates_work(struct work_struct *work);
static void housekeeping_init(struct zd_mac *mac);
static void housekeeping_enable(struct zd_mac *mac);
static void housekeeping_disable(struct zd_mac *mac);
-static void set_multicast_hash_handler(void *mac_ptr);
+static void set_multicast_hash_handler(struct work_struct *work);
static void do_rx(unsigned long mac_ptr);
@@ -52,8 +52,8 @@ int zd_mac_init(struct zd_mac *mac,
memset(mac, 0, sizeof(*mac));
spin_lock_init(&mac->lock);
mac->netdev = netdev;
- INIT_WORK(&mac->set_rts_cts_work, set_rts_cts_work, mac);
- INIT_WORK(&mac->set_basic_rates_work, set_basic_rates_work, mac);
+ INIT_DELAYED_WORK(&mac->set_rts_cts_work, set_rts_cts_work);
+ INIT_DELAYED_WORK(&mac->set_basic_rates_work, set_basic_rates_work);
skb_queue_head_init(&mac->rx_queue);
tasklet_init(&mac->rx_tasklet, do_rx, (unsigned long)mac);
@@ -63,8 +63,7 @@ int zd_mac_init(struct zd_mac *mac,
softmac_init(ieee80211_priv(netdev));
zd_chip_init(&mac->chip, netdev, intf);
housekeeping_init(mac);
- INIT_WORK(&mac->set_multicast_hash_work, set_multicast_hash_handler,
- mac);
+ INIT_WORK(&mac->set_multicast_hash_work, set_multicast_hash_handler);
return 0;
}
@@ -273,9 +272,10 @@ int zd_mac_set_mac_address(struct net_de
return 0;
}
-static void set_multicast_hash_handler(void *mac_ptr)
+static void set_multicast_hash_handler(struct work_struct *work)
{
- struct zd_mac *mac = mac_ptr;
+ struct zd_mac *mac = container_of(work, struct zd_mac,
+ set_multicast_hash_work);
struct zd_mc_hash hash;
spin_lock_irq(&mac->lock);
@@ -419,9 +419,10 @@ static void try_enable_tx(struct zd_mac
spin_unlock_irqrestore(&mac->lock, flags);
}
-static void set_rts_cts_work(void *d)
+static void set_rts_cts_work(struct work_struct *work)
{
- struct zd_mac *mac = d;
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, set_rts_cts_work.work);
unsigned long flags;
u8 rts_rate;
unsigned int short_preamble;
@@ -440,9 +441,10 @@ static void set_rts_cts_work(void *d)
try_enable_tx(mac);
}
-static void set_basic_rates_work(void *d)
+static void set_basic_rates_work(struct work_struct *work)
{
- struct zd_mac *mac = d;
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, set_basic_rates_work.work);
unsigned long flags;
u16 basic_rates;
@@ -520,12 +522,12 @@ static void bssinfo_change(struct net_de
if (need_set_rts_cts && !mac->updating_rts_rate) {
mac->updating_rts_rate = 1;
netif_stop_queue(mac->netdev);
- queue_work(zd_workqueue, &mac->set_rts_cts_work);
+ queue_delayed_work(zd_workqueue, &mac->set_rts_cts_work, 0);
}
if (need_set_rates && !mac->updating_basic_rates) {
mac->updating_basic_rates = 1;
netif_stop_queue(mac->netdev);
- queue_work(zd_workqueue, &mac->set_basic_rates_work);
+ queue_delayed_work(zd_workqueue, &mac->set_basic_rates_work, 0);
}
spin_unlock_irqrestore(&mac->lock, flags);
}
@@ -1270,7 +1272,7 @@ struct iw_statistics *zd_mac_get_wireles
/* Prevents requeuing while housekeeping is disabled. */
static int housekeeping_queue_delayed_work(struct zd_mac *mac,
- struct work_struct *work,
+ struct delayed_work *work,
unsigned long delay)
{
int enabled;
@@ -1285,7 +1287,7 @@ static int housekeeping_queue_delayed_wo
}
static void housekeeping_cancel_delayed_work(struct zd_mac *mac,
- struct work_struct *work)
+ struct delayed_work *work)
{
int i;
@@ -1322,10 +1324,11 @@ static int average_rssi(struct zd_mac *m
return total/count;
}
-static void signal_strength_monitor(void *p)
+static void signal_strength_monitor(struct work_struct *work)
{
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, housekeeping.signal_strength_work.work);
int r;
- struct zd_mac *mac = p;
int strong_signal;
int rssi;
@@ -1358,10 +1361,11 @@ out:
#define LINK_LED_WORK_DELAY HZ
-static void link_led_handler(void *p)
+static void link_led_handler(struct work_struct *work)
{
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, housekeeping.link_led_work.work);
int r;
- struct zd_mac *mac = p;
struct zd_chip *chip = &mac->chip;
struct ieee80211softmac_device *sm = ieee80211_priv(mac->netdev);
int is_associated;
@@ -1382,11 +1386,11 @@ static void link_led_handler(void *p)
static void housekeeping_init(struct zd_mac *mac)
{
- INIT_WORK(&mac->housekeeping.signal_strength_work,
- signal_strength_monitor, mac);
+ INIT_DELAYED_WORK(&mac->housekeeping.signal_strength_work,
+ signal_strength_monitor);
mac->housekeeping.strong_signal = -1;
- INIT_WORK(&mac->housekeeping.link_led_work, link_led_handler, mac);
+ INIT_DELAYED_WORK(&mac->housekeeping.link_led_work, link_led_handler);
}
static void housekeeping_enable(struct zd_mac *mac)
diff --git a/zd_mac.h b/zd_mac.h
index b882d45..ba5fb78 100644
--- a/zd_mac.h
+++ b/zd_mac.h
@@ -121,8 +121,8 @@ #define ZD_RX_ERROR 0x80
#define ZD_RX_STRONG_SIGNAL_BOUNDARY 0x3a
struct housekeeping {
- struct work_struct signal_strength_work;
- struct work_struct link_led_work;
+ struct delayed_work signal_strength_work;
+ struct delayed_work link_led_work;
unsigned int enabled:1;
signed int strong_signal:2;
};
@@ -140,8 +140,8 @@ struct zd_mac {
struct housekeeping housekeeping;
struct work_struct set_multicast_hash_work;
struct zd_mc_hash multicast_hash;
- struct work_struct set_rts_cts_work;
- struct work_struct set_basic_rates_work;
+ struct delayed_work set_rts_cts_work;
+ struct delayed_work set_basic_rates_work;
struct tasklet_struct rx_tasklet;
struct sk_buff_head rx_queue;
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Zd1211-devs mailing list - http://zd1211.ath.cx/
Unsubscribe: https://lists.sourceforge.net/lists/listinfo/zd1211-devs