mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge branch 'master' into upstream
Conflicts: drivers/net/netxen/netxen_nic.h drivers/net/netxen/netxen_nic_main.c
This commit is contained in:
commit
8d1413b280
1032 changed files with 40295 additions and 14596 deletions
|
|
@ -594,7 +594,7 @@ struct rtl8139_private {
|
|||
u32 rx_config;
|
||||
struct rtl_extra_stats xstats;
|
||||
|
||||
struct work_struct thread;
|
||||
struct delayed_work thread;
|
||||
|
||||
struct mii_if_info mii;
|
||||
unsigned int regs_len;
|
||||
|
|
@ -636,8 +636,8 @@ static struct net_device_stats *rtl8139_get_stats (struct net_device *dev);
|
|||
static void rtl8139_set_rx_mode (struct net_device *dev);
|
||||
static void __set_rx_mode (struct net_device *dev);
|
||||
static void rtl8139_hw_start (struct net_device *dev);
|
||||
static void rtl8139_thread (void *_data);
|
||||
static void rtl8139_tx_timeout_task(void *_data);
|
||||
static void rtl8139_thread (struct work_struct *work);
|
||||
static void rtl8139_tx_timeout_task(struct work_struct *work);
|
||||
static const struct ethtool_ops rtl8139_ethtool_ops;
|
||||
|
||||
/* write MMIO register, with flush */
|
||||
|
|
@ -1010,7 +1010,7 @@ static int __devinit rtl8139_init_one (struct pci_dev *pdev,
|
|||
(debug < 0 ? RTL8139_DEF_MSG_ENABLE : ((1 << debug) - 1));
|
||||
spin_lock_init (&tp->lock);
|
||||
spin_lock_init (&tp->rx_lock);
|
||||
INIT_WORK(&tp->thread, rtl8139_thread, dev);
|
||||
INIT_DELAYED_WORK(&tp->thread, rtl8139_thread);
|
||||
tp->mii.dev = dev;
|
||||
tp->mii.mdio_read = mdio_read;
|
||||
tp->mii.mdio_write = mdio_write;
|
||||
|
|
@ -1596,15 +1596,16 @@ static inline void rtl8139_thread_iter (struct net_device *dev,
|
|||
RTL_R8 (Config1));
|
||||
}
|
||||
|
||||
static void rtl8139_thread (void *_data)
|
||||
static void rtl8139_thread (struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = _data;
|
||||
struct rtl8139_private *tp = netdev_priv(dev);
|
||||
struct rtl8139_private *tp =
|
||||
container_of(work, struct rtl8139_private, thread.work);
|
||||
struct net_device *dev = tp->mii.dev;
|
||||
unsigned long thr_delay = next_tick;
|
||||
|
||||
if (tp->watchdog_fired) {
|
||||
tp->watchdog_fired = 0;
|
||||
rtl8139_tx_timeout_task(_data);
|
||||
rtl8139_tx_timeout_task(work);
|
||||
} else if (rtnl_trylock()) {
|
||||
rtl8139_thread_iter (dev, tp, tp->mmio_addr);
|
||||
rtnl_unlock ();
|
||||
|
|
@ -1646,10 +1647,11 @@ static inline void rtl8139_tx_clear (struct rtl8139_private *tp)
|
|||
/* XXX account for unsent Tx packets in tp->stats.tx_dropped */
|
||||
}
|
||||
|
||||
static void rtl8139_tx_timeout_task (void *_data)
|
||||
static void rtl8139_tx_timeout_task (struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = _data;
|
||||
struct rtl8139_private *tp = netdev_priv(dev);
|
||||
struct rtl8139_private *tp =
|
||||
container_of(work, struct rtl8139_private, thread.work);
|
||||
struct net_device *dev = tp->mii.dev;
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
int i;
|
||||
u8 tmp8;
|
||||
|
|
@ -1695,7 +1697,7 @@ static void rtl8139_tx_timeout (struct net_device *dev)
|
|||
struct rtl8139_private *tp = netdev_priv(dev);
|
||||
|
||||
if (!tp->have_thread) {
|
||||
INIT_WORK(&tp->thread, rtl8139_tx_timeout_task, dev);
|
||||
INIT_DELAYED_WORK(&tp->thread, rtl8139_tx_timeout_task);
|
||||
schedule_delayed_work(&tp->thread, next_tick);
|
||||
} else
|
||||
tp->watchdog_fired = 1;
|
||||
|
|
|
|||
|
|
@ -4411,9 +4411,9 @@ bnx2_open(struct net_device *dev)
|
|||
}
|
||||
|
||||
static void
|
||||
bnx2_reset_task(void *data)
|
||||
bnx2_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct bnx2 *bp = data;
|
||||
struct bnx2 *bp = container_of(work, struct bnx2, reset_task);
|
||||
|
||||
if (!netif_running(bp->dev))
|
||||
return;
|
||||
|
|
@ -5702,7 +5702,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
|||
bp->pdev = pdev;
|
||||
|
||||
spin_lock_init(&bp->phy_lock);
|
||||
INIT_WORK(&bp->reset_task, bnx2_reset_task, bp);
|
||||
INIT_WORK(&bp->reset_task, bnx2_reset_task);
|
||||
|
||||
dev->base_addr = dev->mem_start = pci_resource_start(pdev, 0);
|
||||
mem_len = MB_GET_CID_ADDR(TX_TSS_CID + 1);
|
||||
|
|
|
|||
|
|
@ -4066,9 +4066,9 @@ static int cas_alloc_rxds(struct cas *cp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void cas_reset_task(void *data)
|
||||
static void cas_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct cas *cp = (struct cas *) data;
|
||||
struct cas *cp = container_of(work, struct cas, reset_task);
|
||||
#if 0
|
||||
int pending = atomic_read(&cp->reset_task_pending);
|
||||
#else
|
||||
|
|
@ -5006,7 +5006,7 @@ static int __devinit cas_init_one(struct pci_dev *pdev,
|
|||
atomic_set(&cp->reset_task_pending_spare, 0);
|
||||
atomic_set(&cp->reset_task_pending_mtu, 0);
|
||||
#endif
|
||||
INIT_WORK(&cp->reset_task, cas_reset_task, cp);
|
||||
INIT_WORK(&cp->reset_task, cas_reset_task);
|
||||
|
||||
/* Default link parameters */
|
||||
if (link_mode >= 0 && link_mode <= 6)
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ struct adapter {
|
|||
struct petp *tp;
|
||||
|
||||
struct port_info port[MAX_NPORTS];
|
||||
struct work_struct stats_update_task;
|
||||
struct delayed_work stats_update_task;
|
||||
struct timer_list stats_update_timer;
|
||||
|
||||
spinlock_t tpi_lock;
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ struct cphy {
|
|||
int state; /* Link status state machine */
|
||||
adapter_t *adapter; /* associated adapter */
|
||||
|
||||
struct work_struct phy_update;
|
||||
struct delayed_work phy_update;
|
||||
|
||||
u16 bmsr;
|
||||
int count;
|
||||
|
|
|
|||
|
|
@ -953,10 +953,11 @@ static void t1_netpoll(struct net_device *dev)
|
|||
* Periodic accumulation of MAC statistics. This is used only if the MAC
|
||||
* does not have any other way to prevent stats counter overflow.
|
||||
*/
|
||||
static void mac_stats_task(void *data)
|
||||
static void mac_stats_task(struct work_struct *work)
|
||||
{
|
||||
int i;
|
||||
struct adapter *adapter = data;
|
||||
struct adapter *adapter =
|
||||
container_of(work, struct adapter, stats_update_task.work);
|
||||
|
||||
for_each_port(adapter, i) {
|
||||
struct port_info *p = &adapter->port[i];
|
||||
|
|
@ -977,9 +978,10 @@ static void mac_stats_task(void *data)
|
|||
/*
|
||||
* Processes elmer0 external interrupts in process context.
|
||||
*/
|
||||
static void ext_intr_task(void *data)
|
||||
static void ext_intr_task(struct work_struct *work)
|
||||
{
|
||||
struct adapter *adapter = data;
|
||||
struct adapter *adapter =
|
||||
container_of(work, struct adapter, ext_intr_handler_task);
|
||||
|
||||
t1_elmer0_ext_intr_handler(adapter);
|
||||
|
||||
|
|
@ -1113,9 +1115,9 @@ static int __devinit init_one(struct pci_dev *pdev,
|
|||
spin_lock_init(&adapter->mac_lock);
|
||||
|
||||
INIT_WORK(&adapter->ext_intr_handler_task,
|
||||
ext_intr_task, adapter);
|
||||
INIT_WORK(&adapter->stats_update_task, mac_stats_task,
|
||||
adapter);
|
||||
ext_intr_task);
|
||||
INIT_DELAYED_WORK(&adapter->stats_update_task,
|
||||
mac_stats_task);
|
||||
|
||||
pci_set_drvdata(pdev, netdev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,9 +93,11 @@ static int my3126_interrupt_handler(struct cphy *cphy)
|
|||
return cphy_cause_link_change;
|
||||
}
|
||||
|
||||
static void my3216_poll(void *arg)
|
||||
static void my3216_poll(struct work_struct *work)
|
||||
{
|
||||
my3126_interrupt_handler(arg);
|
||||
struct cphy *cphy = container_of(work, struct cphy, phy_update.work);
|
||||
|
||||
my3126_interrupt_handler(cphy);
|
||||
}
|
||||
|
||||
static int my3126_set_loopback(struct cphy *cphy, int on)
|
||||
|
|
@ -171,7 +173,7 @@ static struct cphy *my3126_phy_create(adapter_t *adapter,
|
|||
if (cphy)
|
||||
cphy_init(cphy, adapter, phy_addr, &my3126_ops, mdio_ops);
|
||||
|
||||
INIT_WORK(&cphy->phy_update, my3216_poll, cphy);
|
||||
INIT_DELAYED_WORK(&cphy->phy_update, my3216_poll);
|
||||
cphy->bmsr = 0;
|
||||
|
||||
return (cphy);
|
||||
|
|
|
|||
|
|
@ -2102,9 +2102,10 @@ static void e100_tx_timeout(struct net_device *netdev)
|
|||
schedule_work(&nic->tx_timeout_task);
|
||||
}
|
||||
|
||||
static void e100_tx_timeout_task(struct net_device *netdev)
|
||||
static void e100_tx_timeout_task(struct work_struct *work)
|
||||
{
|
||||
struct nic *nic = netdev_priv(netdev);
|
||||
struct nic *nic = container_of(work, struct nic, tx_timeout_task);
|
||||
struct net_device *netdev = nic->netdev;
|
||||
|
||||
DPRINTK(TX_ERR, DEBUG, "scb.status=0x%02X\n",
|
||||
readb(&nic->csr->scb.status));
|
||||
|
|
@ -2637,8 +2638,7 @@ static int __devinit e100_probe(struct pci_dev *pdev,
|
|||
nic->blink_timer.function = e100_blink_led;
|
||||
nic->blink_timer.data = (unsigned long)nic;
|
||||
|
||||
INIT_WORK(&nic->tx_timeout_task,
|
||||
(void (*)(void *))e100_tx_timeout_task, netdev);
|
||||
INIT_WORK(&nic->tx_timeout_task, e100_tx_timeout_task);
|
||||
|
||||
if((err = e100_alloc(nic))) {
|
||||
DPRINTK(PROBE, ERR, "Cannot alloc driver memory, aborting.\n");
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ void e1000_set_ethtool_ops(struct net_device *netdev);
|
|||
static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
|
||||
static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
|
||||
static void e1000_tx_timeout(struct net_device *dev);
|
||||
static void e1000_reset_task(struct net_device *dev);
|
||||
static void e1000_reset_task(struct work_struct *work);
|
||||
static void e1000_smartspeed(struct e1000_adapter *adapter);
|
||||
static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,
|
||||
struct sk_buff *skb);
|
||||
|
|
@ -914,8 +914,7 @@ e1000_probe(struct pci_dev *pdev,
|
|||
adapter->phy_info_timer.function = &e1000_update_phy_info;
|
||||
adapter->phy_info_timer.data = (unsigned long) adapter;
|
||||
|
||||
INIT_WORK(&adapter->reset_task,
|
||||
(void (*)(void *))e1000_reset_task, netdev);
|
||||
INIT_WORK(&adapter->reset_task, e1000_reset_task);
|
||||
|
||||
e1000_check_options(adapter);
|
||||
|
||||
|
|
@ -3306,9 +3305,10 @@ e1000_tx_timeout(struct net_device *netdev)
|
|||
}
|
||||
|
||||
static void
|
||||
e1000_reset_task(struct net_device *netdev)
|
||||
e1000_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
struct e1000_adapter *adapter =
|
||||
container_of(work, struct e1000_adapter, reset_task);
|
||||
|
||||
e1000_reinit_locked(adapter);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2224,11 +2224,12 @@ static int ehea_stop(struct net_device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void ehea_reset_port(void *data)
|
||||
static void ehea_reset_port(struct work_struct *work)
|
||||
{
|
||||
int ret;
|
||||
struct net_device *dev = data;
|
||||
struct ehea_port *port = netdev_priv(dev);
|
||||
struct ehea_port *port =
|
||||
container_of(work, struct ehea_port, reset_task);
|
||||
struct net_device *dev = port->netdev;
|
||||
|
||||
port->resets++;
|
||||
down(&port->port_lock);
|
||||
|
|
@ -2379,7 +2380,7 @@ static int ehea_setup_single_port(struct ehea_port *port,
|
|||
dev->tx_timeout = &ehea_tx_watchdog;
|
||||
dev->watchdog_timeo = EHEA_WATCH_DOG_TIMEOUT;
|
||||
|
||||
INIT_WORK(&port->reset_task, ehea_reset_port, dev);
|
||||
INIT_WORK(&port->reset_task, ehea_reset_port);
|
||||
|
||||
ehea_set_ethtool_ops(dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -168,8 +168,9 @@ struct baycom_state {
|
|||
int magic;
|
||||
|
||||
struct pardevice *pdev;
|
||||
struct net_device *dev;
|
||||
unsigned int work_running;
|
||||
struct work_struct run_work;
|
||||
struct delayed_work run_work;
|
||||
unsigned int modem;
|
||||
unsigned int bitrate;
|
||||
unsigned char stat;
|
||||
|
|
@ -659,16 +660,18 @@ static int receive(struct net_device *dev, int cnt)
|
|||
#define GETTICK(x)
|
||||
#endif /* __i386__ */
|
||||
|
||||
static void epp_bh(struct net_device *dev)
|
||||
static void epp_bh(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct baycom_state *bc;
|
||||
struct parport *pp;
|
||||
unsigned char stat;
|
||||
unsigned char tmp[2];
|
||||
unsigned int time1 = 0, time2 = 0, time3 = 0;
|
||||
int cnt, cnt2;
|
||||
|
||||
bc = netdev_priv(dev);
|
||||
|
||||
bc = container_of(work, struct baycom_state, run_work.work);
|
||||
dev = bc->dev;
|
||||
if (!bc->work_running)
|
||||
return;
|
||||
baycom_int_freq(bc);
|
||||
|
|
@ -889,7 +892,7 @@ static int epp_open(struct net_device *dev)
|
|||
return -EBUSY;
|
||||
}
|
||||
dev->irq = /*pp->irq*/ 0;
|
||||
INIT_WORK(&bc->run_work, (void *)(void *)epp_bh, dev);
|
||||
INIT_DELAYED_WORK(&bc->run_work, epp_bh);
|
||||
bc->work_running = 1;
|
||||
bc->modem = EPP_CONVENTIONAL;
|
||||
if (eppconfig(bc))
|
||||
|
|
@ -1213,6 +1216,7 @@ static void __init baycom_epp_dev_setup(struct net_device *dev)
|
|||
/*
|
||||
* initialize part of the baycom_state struct
|
||||
*/
|
||||
bc->dev = dev;
|
||||
bc->magic = BAYCOM_MAGIC;
|
||||
bc->cfg.fclk = 19666600;
|
||||
bc->cfg.bps = 9600;
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ static inline void z8530_isr(struct scc_info *info);
|
|||
static irqreturn_t scc_isr(int irq, void *dev_id);
|
||||
static void rx_isr(struct scc_priv *priv);
|
||||
static void special_condition(struct scc_priv *priv, int rc);
|
||||
static void rx_bh(void *arg);
|
||||
static void rx_bh(struct work_struct *);
|
||||
static void tx_isr(struct scc_priv *priv);
|
||||
static void es_isr(struct scc_priv *priv);
|
||||
static void tm_isr(struct scc_priv *priv);
|
||||
|
|
@ -579,7 +579,7 @@ static int __init setup_adapter(int card_base, int type, int n)
|
|||
priv->param.clocks = TCTRxCP | RCRTxCP;
|
||||
priv->param.persist = 256;
|
||||
priv->param.dma = -1;
|
||||
INIT_WORK(&priv->rx_work, rx_bh, priv);
|
||||
INIT_WORK(&priv->rx_work, rx_bh);
|
||||
dev->priv = priv;
|
||||
sprintf(dev->name, "dmascc%i", 2 * n + i);
|
||||
dev->base_addr = card_base;
|
||||
|
|
@ -1272,9 +1272,9 @@ static void special_condition(struct scc_priv *priv, int rc)
|
|||
}
|
||||
|
||||
|
||||
static void rx_bh(void *arg)
|
||||
static void rx_bh(struct work_struct *ugli_api)
|
||||
{
|
||||
struct scc_priv *priv = arg;
|
||||
struct scc_priv *priv = container_of(ugli_api, struct scc_priv, rx_work);
|
||||
int i = priv->rx_tail;
|
||||
int cb;
|
||||
unsigned long flags;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include <linux/netdevice.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/dcr.h>
|
||||
|
||||
/*
|
||||
* These MAL "versions" probably aren't the real versions IBM uses for these
|
||||
|
|
@ -191,6 +192,7 @@ struct mal_commac {
|
|||
|
||||
struct ibm_ocp_mal {
|
||||
int dcrbase;
|
||||
dcr_host_t dcrhost;
|
||||
|
||||
struct list_head poll_list;
|
||||
struct net_device poll_dev;
|
||||
|
|
@ -207,12 +209,12 @@ struct ibm_ocp_mal {
|
|||
|
||||
static inline u32 get_mal_dcrn(struct ibm_ocp_mal *mal, int reg)
|
||||
{
|
||||
return mfdcr(mal->dcrbase + reg);
|
||||
return dcr_read(mal->dcrhost, mal->dcrbase + reg);
|
||||
}
|
||||
|
||||
static inline void set_mal_dcrn(struct ibm_ocp_mal *mal, int reg, u32 val)
|
||||
{
|
||||
mtdcr(mal->dcrbase + reg, val);
|
||||
dcr_write(mal->dcrhost, mal->dcrbase + reg, val);
|
||||
}
|
||||
|
||||
/* Register MAL devices */
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@
|
|||
#include <asm/semaphore.h>
|
||||
#include <asm/hvcall.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/iommu.h>
|
||||
#include <asm/vio.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
|
@ -1000,8 +999,6 @@ static int __devinit ibmveth_probe(struct vio_dev *dev, const struct vio_device_
|
|||
adapter->mac_addr = 0;
|
||||
memcpy(&adapter->mac_addr, mac_addr_p, 6);
|
||||
|
||||
adapter->liobn = dev->iommu_table->it_index;
|
||||
|
||||
netdev->irq = dev->irq;
|
||||
netdev->open = ibmveth_open;
|
||||
netdev->poll = ibmveth_poll;
|
||||
|
|
@ -1115,7 +1112,6 @@ static int ibmveth_seq_show(struct seq_file *seq, void *v)
|
|||
seq_printf(seq, "%s %s\n\n", ibmveth_driver_string, ibmveth_driver_version);
|
||||
|
||||
seq_printf(seq, "Unit Address: 0x%x\n", adapter->vdev->unit_address);
|
||||
seq_printf(seq, "LIOBN: 0x%lx\n", adapter->liobn);
|
||||
seq_printf(seq, "Current MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
current_mac[0], current_mac[1], current_mac[2],
|
||||
current_mac[3], current_mac[4], current_mac[5]);
|
||||
|
|
|
|||
|
|
@ -118,7 +118,6 @@ struct ibmveth_adapter {
|
|||
struct net_device_stats stats;
|
||||
unsigned int mcastFilterSize;
|
||||
unsigned long mac_addr;
|
||||
unsigned long liobn;
|
||||
void * buffer_list_addr;
|
||||
void * filter_list_addr;
|
||||
dma_addr_t buffer_list_dma;
|
||||
|
|
|
|||
|
|
@ -560,9 +560,9 @@ static inline int mcs_find_endpoints(struct mcs_cb *mcs,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void mcs_speed_work(void *arg)
|
||||
static void mcs_speed_work(struct work_struct *work)
|
||||
{
|
||||
struct mcs_cb *mcs = arg;
|
||||
struct mcs_cb *mcs = container_of(work, struct mcs_cb, work);
|
||||
struct net_device *netdev = mcs->netdev;
|
||||
|
||||
mcs_speed_change(mcs);
|
||||
|
|
@ -927,7 +927,7 @@ static int mcs_probe(struct usb_interface *intf,
|
|||
irda_qos_bits_to_value(&mcs->qos);
|
||||
|
||||
/* Speed change work initialisation*/
|
||||
INIT_WORK(&mcs->work, mcs_speed_work, mcs);
|
||||
INIT_WORK(&mcs->work, mcs_speed_work);
|
||||
|
||||
/* Override the network functions we need to use */
|
||||
ndev->hard_start_xmit = mcs_hard_xmit;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
struct sir_fsm {
|
||||
struct semaphore sem;
|
||||
struct work_struct work;
|
||||
struct delayed_work work;
|
||||
unsigned state, substate;
|
||||
int param;
|
||||
int result;
|
||||
|
|
|
|||
|
|
@ -100,9 +100,9 @@ static int sirdev_tx_complete_fsm(struct sir_dev *dev)
|
|||
* Both must be unlocked/restarted on completion - but only on final exit.
|
||||
*/
|
||||
|
||||
static void sirdev_config_fsm(void *data)
|
||||
static void sirdev_config_fsm(struct work_struct *work)
|
||||
{
|
||||
struct sir_dev *dev = data;
|
||||
struct sir_dev *dev = container_of(work, struct sir_dev, fsm.work.work);
|
||||
struct sir_fsm *fsm = &dev->fsm;
|
||||
int next_state;
|
||||
int ret = -1;
|
||||
|
|
@ -309,8 +309,8 @@ int sirdev_schedule_request(struct sir_dev *dev, int initial_state, unsigned par
|
|||
fsm->param = param;
|
||||
fsm->result = 0;
|
||||
|
||||
INIT_WORK(&fsm->work, sirdev_config_fsm, dev);
|
||||
queue_work(irda_sir_wq, &fsm->work);
|
||||
INIT_DELAYED_WORK(&fsm->work, sirdev_config_fsm);
|
||||
queue_delayed_work(irda_sir_wq, &fsm->work, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ struct veth_msg {
|
|||
|
||||
struct veth_lpar_connection {
|
||||
HvLpIndex remote_lp;
|
||||
struct work_struct statemachine_wq;
|
||||
struct delayed_work statemachine_wq;
|
||||
struct veth_msg *msgs;
|
||||
int num_events;
|
||||
struct veth_cap_data local_caps;
|
||||
|
|
@ -456,7 +456,7 @@ static struct kobj_type veth_port_ktype = {
|
|||
|
||||
static inline void veth_kick_statemachine(struct veth_lpar_connection *cnx)
|
||||
{
|
||||
schedule_work(&cnx->statemachine_wq);
|
||||
schedule_delayed_work(&cnx->statemachine_wq, 0);
|
||||
}
|
||||
|
||||
static void veth_take_cap(struct veth_lpar_connection *cnx,
|
||||
|
|
@ -638,9 +638,11 @@ static int veth_process_caps(struct veth_lpar_connection *cnx)
|
|||
}
|
||||
|
||||
/* FIXME: The gotos here are a bit dubious */
|
||||
static void veth_statemachine(void *p)
|
||||
static void veth_statemachine(struct work_struct *work)
|
||||
{
|
||||
struct veth_lpar_connection *cnx = (struct veth_lpar_connection *)p;
|
||||
struct veth_lpar_connection *cnx =
|
||||
container_of(work, struct veth_lpar_connection,
|
||||
statemachine_wq.work);
|
||||
int rlp = cnx->remote_lp;
|
||||
int rc;
|
||||
|
||||
|
|
@ -827,7 +829,7 @@ static int veth_init_connection(u8 rlp)
|
|||
|
||||
cnx->remote_lp = rlp;
|
||||
spin_lock_init(&cnx->lock);
|
||||
INIT_WORK(&cnx->statemachine_wq, veth_statemachine, cnx);
|
||||
INIT_DELAYED_WORK(&cnx->statemachine_wq, veth_statemachine);
|
||||
|
||||
init_timer(&cnx->ack_timer);
|
||||
cnx->ack_timer.function = veth_timed_ack;
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ static boolean_t ixgb_clean_rx_irq(struct ixgb_adapter *adapter);
|
|||
static void ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter);
|
||||
void ixgb_set_ethtool_ops(struct net_device *netdev);
|
||||
static void ixgb_tx_timeout(struct net_device *dev);
|
||||
static void ixgb_tx_timeout_task(struct net_device *dev);
|
||||
static void ixgb_tx_timeout_task(struct work_struct *work);
|
||||
static void ixgb_vlan_rx_register(struct net_device *netdev,
|
||||
struct vlan_group *grp);
|
||||
static void ixgb_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
|
||||
|
|
@ -489,8 +489,7 @@ ixgb_probe(struct pci_dev *pdev,
|
|||
adapter->watchdog_timer.function = &ixgb_watchdog;
|
||||
adapter->watchdog_timer.data = (unsigned long)adapter;
|
||||
|
||||
INIT_WORK(&adapter->tx_timeout_task,
|
||||
(void (*)(void *))ixgb_tx_timeout_task, netdev);
|
||||
INIT_WORK(&adapter->tx_timeout_task, ixgb_tx_timeout_task);
|
||||
|
||||
strcpy(netdev->name, "eth%d");
|
||||
if((err = register_netdev(netdev)))
|
||||
|
|
@ -1493,9 +1492,10 @@ ixgb_tx_timeout(struct net_device *netdev)
|
|||
}
|
||||
|
||||
static void
|
||||
ixgb_tx_timeout_task(struct net_device *netdev)
|
||||
ixgb_tx_timeout_task(struct work_struct *work)
|
||||
{
|
||||
struct ixgb_adapter *adapter = netdev_priv(netdev);
|
||||
struct ixgb_adapter *adapter =
|
||||
container_of(work, struct ixgb_adapter, tx_timeout_task);
|
||||
|
||||
adapter->tx_timeout_count++;
|
||||
ixgb_down(adapter, TRUE);
|
||||
|
|
|
|||
|
|
@ -277,9 +277,11 @@ static void mv643xx_eth_tx_timeout(struct net_device *dev)
|
|||
*
|
||||
* Actual routine to reset the adapter when a timeout on Tx has occurred
|
||||
*/
|
||||
static void mv643xx_eth_tx_timeout_task(struct net_device *dev)
|
||||
static void mv643xx_eth_tx_timeout_task(struct work_struct *ugly)
|
||||
{
|
||||
struct mv643xx_private *mp = netdev_priv(dev);
|
||||
struct mv643xx_private *mp = container_of(ugly, struct mv643xx_private,
|
||||
tx_timeout_task);
|
||||
struct net_device *dev = mp->mii.dev; /* yuck */
|
||||
|
||||
if (!netif_running(dev))
|
||||
return;
|
||||
|
|
@ -1360,8 +1362,7 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
|
|||
#endif
|
||||
|
||||
/* Configure the timeout task */
|
||||
INIT_WORK(&mp->tx_timeout_task,
|
||||
(void (*)(void *))mv643xx_eth_tx_timeout_task, dev);
|
||||
INIT_WORK(&mp->tx_timeout_task, mv643xx_eth_tx_timeout_task);
|
||||
|
||||
spin_lock_init(&mp->lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -2620,9 +2620,10 @@ static u32 myri10ge_read_reboot(struct myri10ge_priv *mgp)
|
|||
* This watchdog is used to check whether the board has suffered
|
||||
* from a parity error and needs to be recovered.
|
||||
*/
|
||||
static void myri10ge_watchdog(void *arg)
|
||||
static void myri10ge_watchdog(struct work_struct *work)
|
||||
{
|
||||
struct myri10ge_priv *mgp = arg;
|
||||
struct myri10ge_priv *mgp =
|
||||
container_of(work, struct myri10ge_priv, watchdog_work);
|
||||
u32 reboot;
|
||||
int status;
|
||||
u16 cmd, vendor;
|
||||
|
|
@ -2892,7 +2893,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
(unsigned long)mgp);
|
||||
|
||||
SET_ETHTOOL_OPS(netdev, &myri10ge_ethtool_ops);
|
||||
INIT_WORK(&mgp->watchdog_work, myri10ge_watchdog, mgp);
|
||||
INIT_WORK(&mgp->watchdog_work, myri10ge_watchdog);
|
||||
status = register_netdev(netdev);
|
||||
if (status != 0) {
|
||||
dev_err(&pdev->dev, "register_netdev failed: %d\n", status);
|
||||
|
|
|
|||
|
|
@ -852,7 +852,8 @@ struct netxen_adapter {
|
|||
spinlock_t tx_lock;
|
||||
spinlock_t lock;
|
||||
struct work_struct watchdog_task;
|
||||
struct work_struct tx_timeout_task[NETXEN_MAX_PORTS];
|
||||
struct work_struct tx_timeout_task;
|
||||
struct net_device *netdev;
|
||||
struct timer_list watchdog_timer;
|
||||
|
||||
u32 curr_window;
|
||||
|
|
@ -1071,7 +1072,7 @@ netxen_nic_do_ioctl(struct netxen_adapter *adapter, void *u_data,
|
|||
struct netxen_port *port);
|
||||
int netxen_nic_rx_has_work(struct netxen_adapter *adapter);
|
||||
int netxen_nic_tx_has_work(struct netxen_adapter *adapter);
|
||||
void netxen_watchdog_task(unsigned long v);
|
||||
void netxen_watchdog_task(struct work_struct *work);
|
||||
void netxen_post_rx_buffers(struct netxen_adapter *adapter, u32 ctx,
|
||||
u32 ringid);
|
||||
void netxen_post_rx_buffers_nodb(struct netxen_adapter *adapter, u32 ctx,
|
||||
|
|
|
|||
|
|
@ -746,12 +746,13 @@ static inline int netxen_nic_check_temp(struct netxen_adapter *adapter)
|
|||
return rv;
|
||||
}
|
||||
|
||||
void netxen_watchdog_task(unsigned long v)
|
||||
void netxen_watchdog_task(struct work_struct *work)
|
||||
{
|
||||
int port_num;
|
||||
struct netxen_port *port;
|
||||
struct net_device *netdev;
|
||||
struct netxen_adapter *adapter = (struct netxen_adapter *)v;
|
||||
struct netxen_adapter *adapter =
|
||||
container_of(work, struct netxen_adapter, watchdog_task);
|
||||
|
||||
if (netxen_nic_check_temp(adapter))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static int netxen_nic_open(struct net_device *netdev);
|
|||
static int netxen_nic_close(struct net_device *netdev);
|
||||
static int netxen_nic_xmit_frame(struct sk_buff *, struct net_device *);
|
||||
static void netxen_tx_timeout(struct net_device *netdev);
|
||||
static void netxen_tx_timeout_task(struct net_device *netdev);
|
||||
static void netxen_tx_timeout_task(struct work_struct *work);
|
||||
static void netxen_watchdog(unsigned long);
|
||||
static int netxen_handle_int(struct netxen_adapter *, struct net_device *);
|
||||
static int netxen_nic_ioctl(struct net_device *netdev,
|
||||
|
|
@ -318,8 +318,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
adapter->ahw.xg_linkup = 0;
|
||||
adapter->watchdog_timer.function = &netxen_watchdog;
|
||||
adapter->watchdog_timer.data = (unsigned long)adapter;
|
||||
INIT_WORK(&adapter->watchdog_task,
|
||||
(void (*)(void *))netxen_watchdog_task, adapter);
|
||||
INIT_WORK(&adapter->watchdog_task, netxen_watchdog_task);
|
||||
adapter->ahw.pdev = pdev;
|
||||
adapter->proc_cmd_buf_counter = 0;
|
||||
adapter->ahw.revision_id = nx_p2_id;
|
||||
|
|
@ -429,8 +428,8 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
netdev->dev_addr);
|
||||
}
|
||||
}
|
||||
INIT_WORK(adapter->tx_timeout_task + i,
|
||||
(void (*)(void *))netxen_tx_timeout_task, netdev);
|
||||
adapter->netdev = netdev;
|
||||
INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task);
|
||||
netif_carrier_off(netdev);
|
||||
netif_stop_queue(netdev);
|
||||
|
||||
|
|
@ -973,18 +972,20 @@ static void netxen_tx_timeout(struct net_device *netdev)
|
|||
SCHEDULE_WORK(port->adapter->tx_timeout_task + port->portnum);
|
||||
}
|
||||
|
||||
static void netxen_tx_timeout_task(struct net_device *netdev)
|
||||
static void netxen_tx_timeout_task(struct work_struct *work)
|
||||
{
|
||||
struct netxen_port *port = (struct netxen_port *)netdev_priv(netdev);
|
||||
struct netxen_adapter *adapter =
|
||||
container_of(work, struct netxen_adapter, tx_timeout_task);
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
unsigned long flags;
|
||||
|
||||
printk(KERN_ERR "%s %s: transmit timeout, resetting.\n",
|
||||
netxen_nic_driver_name, netdev->name);
|
||||
|
||||
spin_lock_irqsave(&port->adapter->lock, flags);
|
||||
spin_lock_irqsave(&adapter->lock, flags);
|
||||
netxen_nic_close(netdev);
|
||||
netxen_nic_open(netdev);
|
||||
spin_unlock_irqrestore(&port->adapter->lock, flags);
|
||||
spin_unlock_irqrestore(&adapter->lock, flags);
|
||||
netdev->trans_start = jiffies;
|
||||
netif_wake_queue(netdev);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -427,6 +427,7 @@ struct ns83820 {
|
|||
u8 __iomem *base;
|
||||
|
||||
struct pci_dev *pci_dev;
|
||||
struct net_device *ndev;
|
||||
|
||||
#ifdef NS83820_VLAN_ACCEL_SUPPORT
|
||||
struct vlan_group *vlgrp;
|
||||
|
|
@ -631,10 +632,10 @@ static void fastcall rx_refill_atomic(struct net_device *ndev)
|
|||
}
|
||||
|
||||
/* REFILL */
|
||||
static inline void queue_refill(void *_dev)
|
||||
static inline void queue_refill(struct work_struct *work)
|
||||
{
|
||||
struct net_device *ndev = _dev;
|
||||
struct ns83820 *dev = PRIV(ndev);
|
||||
struct ns83820 *dev = container_of(work, struct ns83820, tq_refill);
|
||||
struct net_device *ndev = dev->ndev;
|
||||
|
||||
rx_refill(ndev, GFP_KERNEL);
|
||||
if (dev->rx_info.up)
|
||||
|
|
@ -1844,6 +1845,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
|
|||
|
||||
ndev = alloc_etherdev(sizeof(struct ns83820));
|
||||
dev = PRIV(ndev);
|
||||
dev->ndev = ndev;
|
||||
err = -ENOMEM;
|
||||
if (!dev)
|
||||
goto out;
|
||||
|
|
@ -1856,7 +1858,7 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
|
|||
SET_MODULE_OWNER(ndev);
|
||||
SET_NETDEV_DEV(ndev, &pci_dev->dev);
|
||||
|
||||
INIT_WORK(&dev->tq_refill, queue_refill, ndev);
|
||||
INIT_WORK(&dev->tq_refill, queue_refill);
|
||||
tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)ndev);
|
||||
|
||||
err = pci_enable_device(pci_dev);
|
||||
|
|
|
|||
|
|
@ -338,7 +338,6 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
struct net_device *dev = link->priv;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
unsigned short buf[32];
|
||||
int last_fn, last_ret, i, j;
|
||||
kio_addr_t ioaddr;
|
||||
|
|
@ -350,17 +349,6 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
|
||||
DEBUG(0, "3c574_config(0x%p)\n", link);
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
link->io.IOAddrLines = 16;
|
||||
for (i = j = 0; j < 0x400; j += 0x20) {
|
||||
link->io.BasePort1 = j ^ 0x300;
|
||||
|
|
@ -382,6 +370,10 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
/* The 3c574 normally uses an EEPROM for configuration info, including
|
||||
the hardware address. The future products may include a modem chip
|
||||
and put the address in the CIS. */
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = 0x88;
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) {
|
||||
pcmcia_get_tuple_data(link, &tuple);
|
||||
|
|
@ -397,12 +389,9 @@ static int tc574_config(struct pcmcia_device *link)
|
|||
goto failed;
|
||||
}
|
||||
}
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS &&
|
||||
pcmcia_parse_tuple(link, &tuple, &parse) == CS_SUCCESS) {
|
||||
cardname = parse.version_1.str + parse.version_1.ofs[1];
|
||||
} else
|
||||
if (link->prod_id[1])
|
||||
cardname = link->prod_id[1];
|
||||
else
|
||||
cardname = "3Com 3c574";
|
||||
|
||||
{
|
||||
|
|
|
|||
|
|
@ -253,7 +253,6 @@ static int tc589_config(struct pcmcia_device *link)
|
|||
struct net_device *dev = link->priv;
|
||||
struct el3_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
u16 buf[32], *phys_addr;
|
||||
int last_fn, last_ret, i, j, multi = 0, fifo;
|
||||
kio_addr_t ioaddr;
|
||||
|
|
@ -263,26 +262,16 @@ static int tc589_config(struct pcmcia_device *link)
|
|||
|
||||
phys_addr = (u16 *)dev->dev_addr;
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Is this a 3c562? */
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
tuple.Attributes = TUPLE_RETURN_COMMON;
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) {
|
||||
if (le16_to_cpu(buf[0]) != MANFID_3COM)
|
||||
|
||||
/* Is this a 3c562? */
|
||||
if (link->manf_id != MANFID_3COM)
|
||||
printk(KERN_INFO "3c589_cs: hmmm, is this really a "
|
||||
"3Com card??\n");
|
||||
multi = (le16_to_cpu(buf[1]) == PRODID_3COM_3C562);
|
||||
}
|
||||
multi = (link->card_id == PRODID_3COM_3C562);
|
||||
|
||||
/* For the 3c562, the base address must be xx00-xx7f */
|
||||
link->io.IOAddrLines = 16;
|
||||
|
|
|
|||
|
|
@ -299,11 +299,7 @@ static int axnet_config(struct pcmcia_device *link)
|
|||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
/* don't trust the CIS on this; Linksys got it wrong */
|
||||
link->conf.Present = 0x63;
|
||||
|
||||
|
|
|
|||
|
|
@ -249,12 +249,9 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
|||
static int com20020_config(struct pcmcia_device *link)
|
||||
{
|
||||
struct arcnet_local *lp;
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
com20020_dev_t *info;
|
||||
struct net_device *dev;
|
||||
int i, last_ret, last_fn;
|
||||
u_char buf[64];
|
||||
int ioaddr;
|
||||
|
||||
info = link->priv;
|
||||
|
|
@ -264,16 +261,6 @@ static int com20020_config(struct pcmcia_device *link)
|
|||
|
||||
DEBUG(0, "com20020_config(0x%p)\n", link);
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
DEBUG(1,"arcnet: baseport1 is %Xh\n", link->io.BasePort1);
|
||||
i = !CS_SUCCESS;
|
||||
if (!link->io.BasePort1)
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
u_short buf[32];
|
||||
int i, last_fn, last_ret, ret;
|
||||
int i, last_fn = 0, last_ret = 0, ret;
|
||||
kio_addr_t ioaddr;
|
||||
cardtype_t cardtype;
|
||||
char *card_name = "unknown";
|
||||
|
|
@ -350,21 +350,9 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
|
||||
DEBUG(0, "fmvj18x_config(0x%p)\n", link);
|
||||
|
||||
/*
|
||||
This reads the card's CONFIG tuple to find its configuration
|
||||
registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = (u_char *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
tuple.TupleOffset = 0;
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) {
|
||||
|
|
@ -374,17 +362,12 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigIndex = parse.cftable_entry.index;
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
else
|
||||
buf[0] = 0xffff;
|
||||
switch (le16_to_cpu(buf[0])) {
|
||||
switch (link->manf_id) {
|
||||
case MANFID_TDK:
|
||||
cardtype = TDK;
|
||||
if (le16_to_cpu(buf[1]) == PRODID_TDK_GN3410
|
||||
|| le16_to_cpu(buf[1]) == PRODID_TDK_NP9610
|
||||
|| le16_to_cpu(buf[1]) == PRODID_TDK_MN3200) {
|
||||
if (link->card_id == PRODID_TDK_GN3410
|
||||
|| link->card_id == PRODID_TDK_NP9610
|
||||
|| link->card_id == PRODID_TDK_MN3200) {
|
||||
/* MultiFunction Card */
|
||||
link->conf.ConfigBase = 0x800;
|
||||
link->conf.ConfigIndex = 0x47;
|
||||
|
|
@ -395,11 +378,11 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
cardtype = CONTEC;
|
||||
break;
|
||||
case MANFID_FUJITSU:
|
||||
if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10302)
|
||||
if (link->card_id == PRODID_FUJITSU_MBH10302)
|
||||
/* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302),
|
||||
but these are MBH10304 based card. */
|
||||
cardtype = MBH10304;
|
||||
else if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304)
|
||||
else if (link->card_id == PRODID_FUJITSU_MBH10304)
|
||||
cardtype = MBH10304;
|
||||
else
|
||||
cardtype = LA501;
|
||||
|
|
@ -409,14 +392,9 @@ static int fmvj18x_config(struct pcmcia_device *link)
|
|||
}
|
||||
} else {
|
||||
/* old type card */
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
if (pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS)
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
else
|
||||
buf[0] = 0xffff;
|
||||
switch (le16_to_cpu(buf[0])) {
|
||||
switch (link->manf_id) {
|
||||
case MANFID_FUJITSU:
|
||||
if (le16_to_cpu(buf[1]) == PRODID_FUJITSU_MBH10304) {
|
||||
if (link->card_id == PRODID_FUJITSU_MBH10304) {
|
||||
cardtype = XXX10304; /* MBH10304 with buggy CIS */
|
||||
link->conf.ConfigIndex = 0x20;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -222,24 +222,12 @@ static int ibmtr_config(struct pcmcia_device *link)
|
|||
ibmtr_dev_t *info = link->priv;
|
||||
struct net_device *dev = info->dev;
|
||||
struct tok_info *ti = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
int i, last_ret, last_fn;
|
||||
u_char buf[64];
|
||||
|
||||
DEBUG(0, "ibmtr_config(0x%p)\n", link);
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.ConfigIndex = 0x61;
|
||||
|
||||
/* Determine if this is PRIMARY or ALTERNATE. */
|
||||
|
|
|
|||
|
|
@ -656,23 +656,12 @@ static int nmclan_config(struct pcmcia_device *link)
|
|||
struct net_device *dev = link->priv;
|
||||
mace_private *lp = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
u_char buf[64];
|
||||
int i, last_ret, last_fn;
|
||||
kio_addr_t ioaddr;
|
||||
|
||||
DEBUG(0, "nmclan_config(0x%p)\n", link);
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
|
||||
CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));
|
||||
CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
|
@ -686,6 +675,7 @@ static int nmclan_config(struct pcmcia_device *link)
|
|||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
memcpy(dev->dev_addr, tuple.TupleData, ETHER_ADDR_LEN);
|
||||
|
|
|
|||
|
|
@ -519,31 +519,15 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
int i, last_ret, last_fn, start_pg, stop_pg, cm_offset;
|
||||
int manfid = 0, prodid = 0, has_shmem = 0;
|
||||
int has_shmem = 0;
|
||||
u_short buf[64];
|
||||
hw_info_t *hw_info;
|
||||
|
||||
DEBUG(0, "pcnet_config(0x%p)\n", link);
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
tuple.Attributes = TUPLE_RETURN_COMMON;
|
||||
if ((pcmcia_get_first_tuple(link, &tuple) == CS_SUCCESS) &&
|
||||
(pcmcia_get_tuple_data(link, &tuple) == CS_SUCCESS)) {
|
||||
manfid = le16_to_cpu(buf[0]);
|
||||
prodid = le16_to_cpu(buf[1]);
|
||||
}
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
|
|
@ -589,8 +573,8 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
link->conf.Attributes |= CONF_ENABLE_SPKR;
|
||||
link->conf.Status = CCSR_AUDIO_ENA;
|
||||
}
|
||||
if ((manfid == MANFID_IBM) &&
|
||||
(prodid == PRODID_IBM_HOME_AND_AWAY))
|
||||
if ((link->manf_id == MANFID_IBM) &&
|
||||
(link->card_id == PRODID_IBM_HOME_AND_AWAY))
|
||||
link->conf.ConfigIndex |= 0x10;
|
||||
|
||||
CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
|
||||
|
|
@ -624,10 +608,10 @@ static int pcnet_config(struct pcmcia_device *link)
|
|||
info->flags = hw_info->flags;
|
||||
/* Check for user overrides */
|
||||
info->flags |= (delay_output) ? DELAY_OUTPUT : 0;
|
||||
if ((manfid == MANFID_SOCKET) &&
|
||||
((prodid == PRODID_SOCKET_LPE) ||
|
||||
(prodid == PRODID_SOCKET_LPE_CF) ||
|
||||
(prodid == PRODID_SOCKET_EIO)))
|
||||
if ((link->manf_id == MANFID_SOCKET) &&
|
||||
((link->card_id == PRODID_SOCKET_LPE) ||
|
||||
(link->card_id == PRODID_SOCKET_LPE_CF) ||
|
||||
(link->card_id == PRODID_SOCKET_EIO)))
|
||||
info->flags &= ~USE_BIG_BUF;
|
||||
if (!use_big_buf)
|
||||
info->flags &= ~USE_BIG_BUF;
|
||||
|
|
|
|||
|
|
@ -560,16 +560,8 @@ static int mhz_setup(struct pcmcia_device *link)
|
|||
|
||||
/* Read the station address from the CIS. It is stored as the last
|
||||
(fourth) string in the Version 1 Version/ID tuple. */
|
||||
tuple->DesiredTuple = CISTPL_VERS_1;
|
||||
if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
/* Ugh -- the EM1144 card has two VERS_1 tuples!?! */
|
||||
if (next_tuple(link, tuple, parse) != CS_SUCCESS)
|
||||
first_tuple(link, tuple, parse);
|
||||
if (parse->version_1.ns > 3) {
|
||||
station_addr = parse->version_1.str + parse->version_1.ofs[3];
|
||||
if (link->prod_id[3]) {
|
||||
station_addr = link->prod_id[3];
|
||||
if (cvt_ascii_address(dev, station_addr) == 0) {
|
||||
rc = 0;
|
||||
goto free_cfg_mem;
|
||||
|
|
@ -744,15 +736,12 @@ static int smc_setup(struct pcmcia_device *link)
|
|||
}
|
||||
}
|
||||
/* Try the third string in the Version 1 Version/ID tuple. */
|
||||
tuple->DesiredTuple = CISTPL_VERS_1;
|
||||
if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
|
||||
rc = -1;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
station_addr = parse->version_1.str + parse->version_1.ofs[2];
|
||||
if (cvt_ascii_address(dev, station_addr) == 0) {
|
||||
rc = 0;
|
||||
goto free_cfg_mem;
|
||||
if (link->prod_id[2]) {
|
||||
station_addr = link->prod_id[2];
|
||||
if (cvt_ascii_address(dev, station_addr) == 0) {
|
||||
rc = 0;
|
||||
goto free_cfg_mem;
|
||||
}
|
||||
}
|
||||
|
||||
rc = -1;
|
||||
|
|
@ -970,10 +959,6 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
{
|
||||
struct net_device *dev = link->priv;
|
||||
struct smc_private *smc = netdev_priv(dev);
|
||||
struct smc_cfg_mem *cfg_mem;
|
||||
tuple_t *tuple;
|
||||
cisparse_t *parse;
|
||||
u_char *buf;
|
||||
char *name;
|
||||
int i, j, rev;
|
||||
kio_addr_t ioaddr;
|
||||
|
|
@ -981,30 +966,8 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
|
||||
DEBUG(0, "smc91c92_config(0x%p)\n", link);
|
||||
|
||||
cfg_mem = kmalloc(sizeof(struct smc_cfg_mem), GFP_KERNEL);
|
||||
if (!cfg_mem)
|
||||
goto config_failed;
|
||||
|
||||
tuple = &cfg_mem->tuple;
|
||||
parse = &cfg_mem->parse;
|
||||
buf = cfg_mem->buf;
|
||||
|
||||
tuple->Attributes = tuple->TupleOffset = 0;
|
||||
tuple->TupleData = (cisdata_t *)buf;
|
||||
tuple->TupleDataMax = 64;
|
||||
|
||||
tuple->DesiredTuple = CISTPL_CONFIG;
|
||||
i = first_tuple(link, tuple, parse);
|
||||
CS_EXIT_TEST(i, ParseTuple, config_failed);
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.Present = parse->config.rmask[0];
|
||||
|
||||
tuple->DesiredTuple = CISTPL_MANFID;
|
||||
tuple->Attributes = TUPLE_RETURN_COMMON;
|
||||
if (first_tuple(link, tuple, parse) == CS_SUCCESS) {
|
||||
smc->manfid = parse->manfid.manf;
|
||||
smc->cardid = parse->manfid.card;
|
||||
}
|
||||
smc->manfid = link->manf_id;
|
||||
smc->cardid = link->card_id;
|
||||
|
||||
if ((smc->manfid == MANFID_OSITECH) &&
|
||||
(smc->cardid != PRODID_OSITECH_SEVEN)) {
|
||||
|
|
@ -1134,14 +1097,12 @@ static int smc91c92_config(struct pcmcia_device *link)
|
|||
printk(KERN_NOTICE " No MII transceivers found!\n");
|
||||
}
|
||||
}
|
||||
kfree(cfg_mem);
|
||||
return 0;
|
||||
|
||||
config_undo:
|
||||
unregister_netdev(dev);
|
||||
config_failed: /* CS_EXIT_TEST() calls jump to here... */
|
||||
smc91c92_release(link);
|
||||
kfree(cfg_mem);
|
||||
return -ENODEV;
|
||||
} /* smc91c92_config */
|
||||
|
||||
|
|
|
|||
|
|
@ -332,6 +332,7 @@ static irqreturn_t xirc2ps_interrupt(int irq, void *dev_id);
|
|||
*/
|
||||
|
||||
typedef struct local_info_t {
|
||||
struct net_device *dev;
|
||||
struct pcmcia_device *p_dev;
|
||||
dev_node_t node;
|
||||
struct net_device_stats stats;
|
||||
|
|
@ -353,7 +354,7 @@ typedef struct local_info_t {
|
|||
*/
|
||||
static int do_start_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||
static void do_tx_timeout(struct net_device *dev);
|
||||
static void xirc2ps_tx_timeout_task(void *data);
|
||||
static void xirc2ps_tx_timeout_task(struct work_struct *work);
|
||||
static struct net_device_stats *do_get_stats(struct net_device *dev);
|
||||
static void set_addresses(struct net_device *dev);
|
||||
static void set_multicast_list(struct net_device *dev);
|
||||
|
|
@ -567,6 +568,7 @@ xirc2ps_probe(struct pcmcia_device *link)
|
|||
if (!dev)
|
||||
return -ENOMEM;
|
||||
local = netdev_priv(dev);
|
||||
local->dev = dev;
|
||||
local->p_dev = link;
|
||||
link->priv = dev;
|
||||
|
||||
|
|
@ -591,7 +593,7 @@ xirc2ps_probe(struct pcmcia_device *link)
|
|||
#ifdef HAVE_TX_TIMEOUT
|
||||
dev->tx_timeout = do_tx_timeout;
|
||||
dev->watchdog_timeo = TX_TIMEOUT;
|
||||
INIT_WORK(&local->tx_timeout_task, xirc2ps_tx_timeout_task, dev);
|
||||
INIT_WORK(&local->tx_timeout_task, xirc2ps_tx_timeout_task);
|
||||
#endif
|
||||
|
||||
return xirc2ps_config(link);
|
||||
|
|
@ -707,22 +709,11 @@ set_card_type(struct pcmcia_device *link, const void *s)
|
|||
* Returns: true if this is a CE2
|
||||
*/
|
||||
static int
|
||||
has_ce2_string(struct pcmcia_device * link)
|
||||
has_ce2_string(struct pcmcia_device * p_dev)
|
||||
{
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
u_char buf[256];
|
||||
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = 254;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
if (!first_tuple(link, &tuple, &parse) && parse.version_1.ns > 2) {
|
||||
if (strstr(parse.version_1.str + parse.version_1.ofs[2], "CE2"))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if (p_dev->prod_id[2] && strstr(p_dev->prod_id[2], "CE2"))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************
|
||||
|
|
@ -792,13 +783,6 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
goto failure;
|
||||
}
|
||||
|
||||
/* get configuration stuff */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
if ((err=first_tuple(link, &tuple, &parse)))
|
||||
goto cis_error;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* get the ethernet address from the CIS */
|
||||
tuple.DesiredTuple = CISTPL_FUNCE;
|
||||
for (err = first_tuple(link, &tuple, &parse); !err;
|
||||
|
|
@ -1062,8 +1046,6 @@ xirc2ps_config(struct pcmcia_device * link)
|
|||
xirc2ps_release(link);
|
||||
return -ENODEV;
|
||||
|
||||
cis_error:
|
||||
printk(KNOT_XIRC "unable to parse CIS\n");
|
||||
failure:
|
||||
return -ENODEV;
|
||||
} /* xirc2ps_config */
|
||||
|
|
@ -1344,9 +1326,11 @@ xirc2ps_interrupt(int irq, void *dev_id)
|
|||
/*====================================================================*/
|
||||
|
||||
static void
|
||||
xirc2ps_tx_timeout_task(void *data)
|
||||
xirc2ps_tx_timeout_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = data;
|
||||
local_info_t *local =
|
||||
container_of(work, local_info_t, tx_timeout_task);
|
||||
struct net_device *dev = local->dev;
|
||||
/* reset the card */
|
||||
do_reset(dev,1);
|
||||
dev->trans_start = jiffies;
|
||||
|
|
|
|||
|
|
@ -254,7 +254,7 @@ static int fixed_mdio_register_device(int number, int speed, int duplex)
|
|||
goto device_create_fail;
|
||||
}
|
||||
|
||||
phydev->irq = -1;
|
||||
phydev->irq = PHY_IGNORE_INTERRUPT;
|
||||
phydev->dev.bus = &mdio_bus_type;
|
||||
|
||||
if(number)
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ out_unlock:
|
|||
EXPORT_SYMBOL(phy_start_aneg);
|
||||
|
||||
|
||||
static void phy_change(void *data);
|
||||
static void phy_change(struct work_struct *work);
|
||||
static void phy_timer(unsigned long data);
|
||||
|
||||
/* phy_start_machine:
|
||||
|
|
@ -555,7 +555,7 @@ int phy_start_interrupts(struct phy_device *phydev)
|
|||
{
|
||||
int err = 0;
|
||||
|
||||
INIT_WORK(&phydev->phy_queue, phy_change, phydev);
|
||||
INIT_WORK(&phydev->phy_queue, phy_change);
|
||||
|
||||
if (request_irq(phydev->irq, phy_interrupt,
|
||||
IRQF_SHARED,
|
||||
|
|
@ -598,10 +598,11 @@ EXPORT_SYMBOL(phy_stop_interrupts);
|
|||
|
||||
|
||||
/* Scheduled by the phy_interrupt/timer to handle PHY changes */
|
||||
static void phy_change(void *data)
|
||||
static void phy_change(struct work_struct *work)
|
||||
{
|
||||
int err;
|
||||
struct phy_device *phydev = data;
|
||||
struct phy_device *phydev =
|
||||
container_of(work, struct phy_device, phy_queue);
|
||||
|
||||
err = phy_disable_interrupts(phydev);
|
||||
|
||||
|
|
|
|||
|
|
@ -138,9 +138,9 @@ static const unsigned int net_debug = NET_DEBUG;
|
|||
#define PLIP_NIBBLE_WAIT 3000
|
||||
|
||||
/* Bottom halves */
|
||||
static void plip_kick_bh(struct net_device *dev);
|
||||
static void plip_bh(struct net_device *dev);
|
||||
static void plip_timer_bh(struct net_device *dev);
|
||||
static void plip_kick_bh(struct work_struct *work);
|
||||
static void plip_bh(struct work_struct *work);
|
||||
static void plip_timer_bh(struct work_struct *work);
|
||||
|
||||
/* Interrupt handler */
|
||||
static void plip_interrupt(int irq, void *dev_id);
|
||||
|
|
@ -207,9 +207,10 @@ struct plip_local {
|
|||
|
||||
struct net_local {
|
||||
struct net_device_stats enet_stats;
|
||||
struct net_device *dev;
|
||||
struct work_struct immediate;
|
||||
struct work_struct deferred;
|
||||
struct work_struct timer;
|
||||
struct delayed_work deferred;
|
||||
struct delayed_work timer;
|
||||
struct plip_local snd_data;
|
||||
struct plip_local rcv_data;
|
||||
struct pardevice *pardev;
|
||||
|
|
@ -306,11 +307,11 @@ plip_init_netdev(struct net_device *dev)
|
|||
nl->nibble = PLIP_NIBBLE_WAIT;
|
||||
|
||||
/* Initialize task queue structures */
|
||||
INIT_WORK(&nl->immediate, (void (*)(void *))plip_bh, dev);
|
||||
INIT_WORK(&nl->deferred, (void (*)(void *))plip_kick_bh, dev);
|
||||
INIT_WORK(&nl->immediate, plip_bh);
|
||||
INIT_DELAYED_WORK(&nl->deferred, plip_kick_bh);
|
||||
|
||||
if (dev->irq == -1)
|
||||
INIT_WORK(&nl->timer, (void (*)(void *))plip_timer_bh, dev);
|
||||
INIT_DELAYED_WORK(&nl->timer, plip_timer_bh);
|
||||
|
||||
spin_lock_init(&nl->lock);
|
||||
}
|
||||
|
|
@ -319,9 +320,10 @@ plip_init_netdev(struct net_device *dev)
|
|||
This routine is kicked by do_timer().
|
||||
Request `plip_bh' to be invoked. */
|
||||
static void
|
||||
plip_kick_bh(struct net_device *dev)
|
||||
plip_kick_bh(struct work_struct *work)
|
||||
{
|
||||
struct net_local *nl = netdev_priv(dev);
|
||||
struct net_local *nl =
|
||||
container_of(work, struct net_local, deferred.work);
|
||||
|
||||
if (nl->is_deferred)
|
||||
schedule_work(&nl->immediate);
|
||||
|
|
@ -362,9 +364,9 @@ static const plip_func connection_state_table[] =
|
|||
|
||||
/* Bottom half handler of PLIP. */
|
||||
static void
|
||||
plip_bh(struct net_device *dev)
|
||||
plip_bh(struct work_struct *work)
|
||||
{
|
||||
struct net_local *nl = netdev_priv(dev);
|
||||
struct net_local *nl = container_of(work, struct net_local, immediate);
|
||||
struct plip_local *snd = &nl->snd_data;
|
||||
struct plip_local *rcv = &nl->rcv_data;
|
||||
plip_func f;
|
||||
|
|
@ -372,20 +374,21 @@ plip_bh(struct net_device *dev)
|
|||
|
||||
nl->is_deferred = 0;
|
||||
f = connection_state_table[nl->connection];
|
||||
if ((r = (*f)(dev, nl, snd, rcv)) != OK
|
||||
&& (r = plip_bh_timeout_error(dev, nl, snd, rcv, r)) != OK) {
|
||||
if ((r = (*f)(nl->dev, nl, snd, rcv)) != OK
|
||||
&& (r = plip_bh_timeout_error(nl->dev, nl, snd, rcv, r)) != OK) {
|
||||
nl->is_deferred = 1;
|
||||
schedule_delayed_work(&nl->deferred, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
plip_timer_bh(struct net_device *dev)
|
||||
plip_timer_bh(struct work_struct *work)
|
||||
{
|
||||
struct net_local *nl = netdev_priv(dev);
|
||||
struct net_local *nl =
|
||||
container_of(work, struct net_local, timer.work);
|
||||
|
||||
if (!(atomic_read (&nl->kill_timer))) {
|
||||
plip_interrupt (-1, dev);
|
||||
plip_interrupt (-1, nl->dev);
|
||||
|
||||
schedule_delayed_work(&nl->timer, 1);
|
||||
}
|
||||
|
|
@ -1284,6 +1287,7 @@ static void plip_attach (struct parport *port)
|
|||
}
|
||||
|
||||
nl = netdev_priv(dev);
|
||||
nl->dev = dev;
|
||||
nl->pardev = parport_register_device(port, name, plip_preempt,
|
||||
plip_wakeup, plip_interrupt,
|
||||
0, dev);
|
||||
|
|
|
|||
|
|
@ -2008,7 +2008,7 @@ static irqreturn_t ql3xxx_isr(int irq, void *dev_id)
|
|||
"%s: Another function issued a reset to the "
|
||||
"chip. ISR value = %x.\n", ndev->name, value);
|
||||
}
|
||||
queue_work(qdev->workqueue, &qdev->reset_work);
|
||||
queue_delayed_work(qdev->workqueue, &qdev->reset_work, 0);
|
||||
spin_unlock(&qdev->adapter_lock);
|
||||
} else if (value & ISP_IMR_DISABLE_CMPL_INT) {
|
||||
ql_disable_interrupts(qdev);
|
||||
|
|
@ -3182,11 +3182,13 @@ static void ql3xxx_tx_timeout(struct net_device *ndev)
|
|||
/*
|
||||
* Wake up the worker to process this event.
|
||||
*/
|
||||
queue_work(qdev->workqueue, &qdev->tx_timeout_work);
|
||||
queue_delayed_work(qdev->workqueue, &qdev->tx_timeout_work, 0);
|
||||
}
|
||||
|
||||
static void ql_reset_work(struct ql3_adapter *qdev)
|
||||
static void ql_reset_work(struct work_struct *work)
|
||||
{
|
||||
struct ql3_adapter *qdev =
|
||||
container_of(work, struct ql3_adapter, reset_work.work);
|
||||
struct net_device *ndev = qdev->ndev;
|
||||
u32 value;
|
||||
struct ql_tx_buf_cb *tx_cb;
|
||||
|
|
@ -3278,9 +3280,12 @@ static void ql_reset_work(struct ql3_adapter *qdev)
|
|||
}
|
||||
}
|
||||
|
||||
static void ql_tx_timeout_work(struct ql3_adapter *qdev)
|
||||
static void ql_tx_timeout_work(struct work_struct *work)
|
||||
{
|
||||
ql_cycle_adapter(qdev,QL_DO_RESET);
|
||||
struct ql3_adapter *qdev =
|
||||
container_of(work, struct ql3_adapter, tx_timeout_work.work);
|
||||
|
||||
ql_cycle_adapter(qdev, QL_DO_RESET);
|
||||
}
|
||||
|
||||
static void ql_get_board_info(struct ql3_adapter *qdev)
|
||||
|
|
@ -3459,9 +3464,8 @@ static int __devinit ql3xxx_probe(struct pci_dev *pdev,
|
|||
netif_stop_queue(ndev);
|
||||
|
||||
qdev->workqueue = create_singlethread_workqueue(ndev->name);
|
||||
INIT_WORK(&qdev->reset_work, (void (*)(void *))ql_reset_work, qdev);
|
||||
INIT_WORK(&qdev->tx_timeout_work,
|
||||
(void (*)(void *))ql_tx_timeout_work, qdev);
|
||||
INIT_DELAYED_WORK(&qdev->reset_work, ql_reset_work);
|
||||
INIT_DELAYED_WORK(&qdev->tx_timeout_work, ql_tx_timeout_work);
|
||||
|
||||
init_timer(&qdev->adapter_timer);
|
||||
qdev->adapter_timer.function = ql3xxx_timer;
|
||||
|
|
|
|||
|
|
@ -1186,8 +1186,8 @@ struct ql3_adapter {
|
|||
u32 numPorts;
|
||||
struct net_device_stats stats;
|
||||
struct workqueue_struct *workqueue;
|
||||
struct work_struct reset_work;
|
||||
struct work_struct tx_timeout_work;
|
||||
struct delayed_work reset_work;
|
||||
struct delayed_work tx_timeout_work;
|
||||
u32 max_frame_size;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -424,6 +424,7 @@ struct ring_info {
|
|||
struct rtl8169_private {
|
||||
void __iomem *mmio_addr; /* memory map physical address */
|
||||
struct pci_dev *pci_dev; /* Index of PCI device */
|
||||
struct net_device *dev;
|
||||
struct net_device_stats stats; /* statistics of net device */
|
||||
spinlock_t lock; /* spin lock flag */
|
||||
u32 msg_enable;
|
||||
|
|
@ -455,7 +456,7 @@ struct rtl8169_private {
|
|||
void (*phy_reset_enable)(void __iomem *);
|
||||
unsigned int (*phy_reset_pending)(void __iomem *);
|
||||
unsigned int (*link_ok)(void __iomem *);
|
||||
struct work_struct task;
|
||||
struct delayed_work task;
|
||||
unsigned wol_enabled : 1;
|
||||
};
|
||||
|
||||
|
|
@ -1510,6 +1511,7 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
SET_MODULE_OWNER(dev);
|
||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
tp = netdev_priv(dev);
|
||||
tp->dev = dev;
|
||||
tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
|
||||
|
||||
/* enable device (incl. PCI PM wakeup and hotplug setup) */
|
||||
|
|
@ -1782,7 +1784,7 @@ static int rtl8169_open(struct net_device *dev)
|
|||
if (retval < 0)
|
||||
goto err_free_rx;
|
||||
|
||||
INIT_WORK(&tp->task, NULL, dev);
|
||||
INIT_DELAYED_WORK(&tp->task, NULL);
|
||||
|
||||
rtl8169_hw_start(dev);
|
||||
|
||||
|
|
@ -2105,11 +2107,11 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp)
|
|||
tp->cur_tx = tp->dirty_tx = 0;
|
||||
}
|
||||
|
||||
static void rtl8169_schedule_work(struct net_device *dev, void (*task)(void *))
|
||||
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
|
||||
{
|
||||
struct rtl8169_private *tp = netdev_priv(dev);
|
||||
|
||||
PREPARE_WORK(&tp->task, task, dev);
|
||||
PREPARE_DELAYED_WORK(&tp->task, task);
|
||||
schedule_delayed_work(&tp->task, 4);
|
||||
}
|
||||
|
||||
|
|
@ -2128,9 +2130,11 @@ static void rtl8169_wait_for_quiescence(struct net_device *dev)
|
|||
netif_poll_enable(dev);
|
||||
}
|
||||
|
||||
static void rtl8169_reinit_task(void *_data)
|
||||
static void rtl8169_reinit_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = _data;
|
||||
struct rtl8169_private *tp =
|
||||
container_of(work, struct rtl8169_private, task.work);
|
||||
struct net_device *dev = tp->dev;
|
||||
int ret;
|
||||
|
||||
if (netif_running(dev)) {
|
||||
|
|
@ -2153,10 +2157,11 @@ static void rtl8169_reinit_task(void *_data)
|
|||
}
|
||||
}
|
||||
|
||||
static void rtl8169_reset_task(void *_data)
|
||||
static void rtl8169_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = _data;
|
||||
struct rtl8169_private *tp = netdev_priv(dev);
|
||||
struct rtl8169_private *tp =
|
||||
container_of(work, struct rtl8169_private, task.work);
|
||||
struct net_device *dev = tp->dev;
|
||||
|
||||
if (!netif_running(dev))
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -5872,9 +5872,9 @@ static void s2io_tasklet(unsigned long dev_addr)
|
|||
* Description: Sets the link status for the adapter
|
||||
*/
|
||||
|
||||
static void s2io_set_link(unsigned long data)
|
||||
static void s2io_set_link(struct work_struct *work)
|
||||
{
|
||||
nic_t *nic = (nic_t *) data;
|
||||
nic_t *nic = container_of(work, nic_t, set_link_task);
|
||||
struct net_device *dev = nic->dev;
|
||||
XENA_dev_config_t __iomem *bar0 = nic->bar0;
|
||||
register u64 val64;
|
||||
|
|
@ -6379,10 +6379,10 @@ static int s2io_card_up(nic_t * sp)
|
|||
* spin lock.
|
||||
*/
|
||||
|
||||
static void s2io_restart_nic(unsigned long data)
|
||||
static void s2io_restart_nic(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = (struct net_device *) data;
|
||||
nic_t *sp = dev->priv;
|
||||
nic_t *sp = container_of(work, nic_t, rst_timer_task);
|
||||
struct net_device *dev = sp->dev;
|
||||
|
||||
s2io_card_down(sp);
|
||||
if (s2io_card_up(sp)) {
|
||||
|
|
@ -6992,10 +6992,8 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
|
|||
|
||||
dev->tx_timeout = &s2io_tx_watchdog;
|
||||
dev->watchdog_timeo = WATCH_DOG_TIMEOUT;
|
||||
INIT_WORK(&sp->rst_timer_task,
|
||||
(void (*)(void *)) s2io_restart_nic, dev);
|
||||
INIT_WORK(&sp->set_link_task,
|
||||
(void (*)(void *)) s2io_set_link, sp);
|
||||
INIT_WORK(&sp->rst_timer_task, s2io_restart_nic);
|
||||
INIT_WORK(&sp->set_link_task, s2io_set_link);
|
||||
|
||||
pci_save_state(sp->pdev);
|
||||
|
||||
|
|
|
|||
|
|
@ -1000,7 +1000,7 @@ s2io_msix_fifo_handle(int irq, void *dev_id);
|
|||
static irqreturn_t s2io_isr(int irq, void *dev_id);
|
||||
static int verify_xena_quiescence(nic_t *sp, u64 val64, int flag);
|
||||
static const struct ethtool_ops netdev_ethtool_ops;
|
||||
static void s2io_set_link(unsigned long data);
|
||||
static void s2io_set_link(struct work_struct *work);
|
||||
static int s2io_set_swapper(nic_t * sp);
|
||||
static void s2io_card_down(nic_t *nic);
|
||||
static int s2io_card_up(nic_t *nic);
|
||||
|
|
|
|||
|
|
@ -280,6 +280,7 @@ enum sis190_feature {
|
|||
struct sis190_private {
|
||||
void __iomem *mmio_addr;
|
||||
struct pci_dev *pci_dev;
|
||||
struct net_device *dev;
|
||||
struct net_device_stats stats;
|
||||
spinlock_t lock;
|
||||
u32 rx_buf_sz;
|
||||
|
|
@ -897,10 +898,11 @@ static void sis190_hw_start(struct net_device *dev)
|
|||
netif_start_queue(dev);
|
||||
}
|
||||
|
||||
static void sis190_phy_task(void * data)
|
||||
static void sis190_phy_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = data;
|
||||
struct sis190_private *tp = netdev_priv(dev);
|
||||
struct sis190_private *tp =
|
||||
container_of(work, struct sis190_private, phy_task);
|
||||
struct net_device *dev = tp->dev;
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
int phy_id = tp->mii_if.phy_id;
|
||||
u16 val;
|
||||
|
|
@ -1047,7 +1049,7 @@ static int sis190_open(struct net_device *dev)
|
|||
if (rc < 0)
|
||||
goto err_free_rx_1;
|
||||
|
||||
INIT_WORK(&tp->phy_task, sis190_phy_task, dev);
|
||||
INIT_WORK(&tp->phy_task, sis190_phy_task);
|
||||
|
||||
sis190_request_timer(dev);
|
||||
|
||||
|
|
@ -1436,6 +1438,7 @@ static struct net_device * __devinit sis190_init_board(struct pci_dev *pdev)
|
|||
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||
|
||||
tp = netdev_priv(dev);
|
||||
tp->dev = dev;
|
||||
tp->msg_enable = netif_msg_init(debug.msg_enable, SIS190_MSG_DEFAULT);
|
||||
|
||||
rc = pci_enable_device(pdev);
|
||||
|
|
@ -1798,7 +1801,7 @@ static int __devinit sis190_init_one(struct pci_dev *pdev,
|
|||
|
||||
sis190_init_rxfilter(dev);
|
||||
|
||||
INIT_WORK(&tp->phy_task, sis190_phy_task, dev);
|
||||
INIT_WORK(&tp->phy_task, sis190_phy_task);
|
||||
|
||||
dev->open = sis190_open;
|
||||
dev->stop = sis190_close;
|
||||
|
|
|
|||
|
|
@ -1327,10 +1327,11 @@ static void xm_check_link(struct net_device *dev)
|
|||
* Since internal PHY is wired to a level triggered pin, can't
|
||||
* get an interrupt when carrier is detected.
|
||||
*/
|
||||
static void xm_link_timer(void *arg)
|
||||
static void xm_link_timer(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = arg;
|
||||
struct skge_port *skge = netdev_priv(arg);
|
||||
struct skge_port *skge =
|
||||
container_of(work, struct skge_port, link_thread.work);
|
||||
struct net_device *dev = skge->netdev;
|
||||
struct skge_hw *hw = skge->hw;
|
||||
int port = skge->port;
|
||||
|
||||
|
|
@ -3072,9 +3073,9 @@ static void skge_error_irq(struct skge_hw *hw)
|
|||
* because accessing phy registers requires spin wait which might
|
||||
* cause excess interrupt latency.
|
||||
*/
|
||||
static void skge_extirq(void *arg)
|
||||
static void skge_extirq(struct work_struct *work)
|
||||
{
|
||||
struct skge_hw *hw = arg;
|
||||
struct skge_hw *hw = container_of(work, struct skge_hw, phy_work);
|
||||
int port;
|
||||
|
||||
mutex_lock(&hw->phy_mutex);
|
||||
|
|
@ -3456,7 +3457,7 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
|
|||
skge->port = port;
|
||||
|
||||
/* Only used for Genesis XMAC */
|
||||
INIT_WORK(&skge->link_thread, xm_link_timer, dev);
|
||||
INIT_DELAYED_WORK(&skge->link_thread, xm_link_timer);
|
||||
|
||||
if (hw->chip_id != CHIP_ID_GENESIS) {
|
||||
dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
|
||||
|
|
@ -3543,7 +3544,7 @@ static int __devinit skge_probe(struct pci_dev *pdev,
|
|||
|
||||
hw->pdev = pdev;
|
||||
mutex_init(&hw->phy_mutex);
|
||||
INIT_WORK(&hw->phy_work, skge_extirq, hw);
|
||||
INIT_WORK(&hw->phy_work, skge_extirq);
|
||||
spin_lock_init(&hw->hw_lock);
|
||||
|
||||
hw->regs = ioremap_nocache(pci_resource_start(pdev, 0), 0x4000);
|
||||
|
|
|
|||
|
|
@ -2456,7 +2456,7 @@ struct skge_port {
|
|||
|
||||
struct net_device_stats net_stats;
|
||||
|
||||
struct work_struct link_thread;
|
||||
struct delayed_work link_thread;
|
||||
enum pause_control flow_control;
|
||||
enum pause_status flow_status;
|
||||
u8 rx_csum;
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ struct smc_local {
|
|||
|
||||
/* work queue */
|
||||
struct work_struct phy_configure;
|
||||
struct net_device *dev;
|
||||
int work_pending;
|
||||
|
||||
spinlock_t lock;
|
||||
|
|
@ -1114,10 +1115,11 @@ static void smc_phy_check_media(struct net_device *dev, int init)
|
|||
* of autonegotiation.) If the RPC ANEG bit is cleared, the selection
|
||||
* is controlled by the RPC SPEED and RPC DPLX bits.
|
||||
*/
|
||||
static void smc_phy_configure(void *data)
|
||||
static void smc_phy_configure(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = data;
|
||||
struct smc_local *lp = netdev_priv(dev);
|
||||
struct smc_local *lp =
|
||||
container_of(work, struct smc_local, phy_configure);
|
||||
struct net_device *dev = lp->dev;
|
||||
void __iomem *ioaddr = lp->base;
|
||||
int phyaddr = lp->mii.phy_id;
|
||||
int my_phy_caps; /* My PHY capabilities */
|
||||
|
|
@ -1592,7 +1594,7 @@ smc_open(struct net_device *dev)
|
|||
|
||||
/* Configure the PHY, initialize the link state */
|
||||
if (lp->phy_type != 0)
|
||||
smc_phy_configure(dev);
|
||||
smc_phy_configure(&lp->phy_configure);
|
||||
else {
|
||||
spin_lock_irq(&lp->lock);
|
||||
smc_10bt_check_media(dev, 1);
|
||||
|
|
@ -1972,7 +1974,8 @@ static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr)
|
|||
#endif
|
||||
|
||||
tasklet_init(&lp->tx_task, smc_hardware_send_pkt, (unsigned long)dev);
|
||||
INIT_WORK(&lp->phy_configure, smc_phy_configure, dev);
|
||||
INIT_WORK(&lp->phy_configure, smc_phy_configure);
|
||||
lp->dev = dev;
|
||||
lp->mii.phy_id_mask = 0x1f;
|
||||
lp->mii.reg_num_mask = 0x1f;
|
||||
lp->mii.force_media = 0;
|
||||
|
|
@ -2322,7 +2325,7 @@ static int smc_drv_resume(struct platform_device *dev)
|
|||
smc_reset(ndev);
|
||||
smc_enable(ndev);
|
||||
if (lp->phy_type != 0)
|
||||
smc_phy_configure(ndev);
|
||||
smc_phy_configure(&lp->phy_configure);
|
||||
netif_device_attach(ndev);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -88,12 +88,11 @@ MODULE_DEVICE_TABLE(pci, spider_net_pci_tbl);
|
|||
static inline u32
|
||||
spider_net_read_reg(struct spider_net_card *card, u32 reg)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
value = readl(card->regs + reg);
|
||||
value = le32_to_cpu(value);
|
||||
|
||||
return value;
|
||||
/* We use the powerpc specific variants instead of readl_be() because
|
||||
* we know spidernet is not a real PCI device and we can thus avoid the
|
||||
* performance hit caused by the PCI workarounds.
|
||||
*/
|
||||
return in_be32(card->regs + reg);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -105,8 +104,11 @@ spider_net_read_reg(struct spider_net_card *card, u32 reg)
|
|||
static inline void
|
||||
spider_net_write_reg(struct spider_net_card *card, u32 reg, u32 value)
|
||||
{
|
||||
value = cpu_to_le32(value);
|
||||
writel(value, card->regs + reg);
|
||||
/* We use the powerpc specific variants instead of writel_be() because
|
||||
* we know spidernet is not a real PCI device and we can thus avoid the
|
||||
* performance hit caused by the PCI workarounds.
|
||||
*/
|
||||
out_be32(card->regs + reg, value);
|
||||
}
|
||||
|
||||
/** spider_net_write_phy - write to phy register
|
||||
|
|
@ -1937,10 +1939,11 @@ spider_net_stop(struct net_device *netdev)
|
|||
* called as task when tx hangs, resets interface (if interface is up)
|
||||
*/
|
||||
static void
|
||||
spider_net_tx_timeout_task(void *data)
|
||||
spider_net_tx_timeout_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *netdev = data;
|
||||
struct spider_net_card *card = netdev_priv(netdev);
|
||||
struct spider_net_card *card =
|
||||
container_of(work, struct spider_net_card, tx_timeout_task);
|
||||
struct net_device *netdev = card->netdev;
|
||||
|
||||
if (!(netdev->flags & IFF_UP))
|
||||
goto out;
|
||||
|
|
@ -2114,7 +2117,7 @@ spider_net_alloc_card(void)
|
|||
card = netdev_priv(netdev);
|
||||
card->netdev = netdev;
|
||||
card->msg_enable = SPIDER_NET_DEFAULT_MSG;
|
||||
INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task, netdev);
|
||||
INIT_WORK(&card->tx_timeout_task, spider_net_tx_timeout_task);
|
||||
init_waitqueue_head(&card->waitq);
|
||||
atomic_set(&card->tx_timeout_task_counter, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -2282,9 +2282,9 @@ static void gem_do_stop(struct net_device *dev, int wol)
|
|||
}
|
||||
}
|
||||
|
||||
static void gem_reset_task(void *data)
|
||||
static void gem_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct gem *gp = (struct gem *) data;
|
||||
struct gem *gp = container_of(work, struct gem, reset_task);
|
||||
|
||||
mutex_lock(&gp->pm_mutex);
|
||||
|
||||
|
|
@ -3044,7 +3044,7 @@ static int __devinit gem_init_one(struct pci_dev *pdev,
|
|||
gp->link_timer.function = gem_link_timer;
|
||||
gp->link_timer.data = (unsigned long) gp;
|
||||
|
||||
INIT_WORK(&gp->reset_task, gem_reset_task, gp);
|
||||
INIT_WORK(&gp->reset_task, gem_reset_task);
|
||||
|
||||
gp->lstate = link_down;
|
||||
gp->timer_ticks = 0;
|
||||
|
|
|
|||
|
|
@ -3654,9 +3654,9 @@ static void tg3_poll_controller(struct net_device *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void tg3_reset_task(void *_data)
|
||||
static void tg3_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct tg3 *tp = _data;
|
||||
struct tg3 *tp = container_of(work, struct tg3, reset_task);
|
||||
unsigned int restart_timer;
|
||||
|
||||
tg3_full_lock(tp, 0);
|
||||
|
|
@ -11734,7 +11734,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|||
#endif
|
||||
spin_lock_init(&tp->lock);
|
||||
spin_lock_init(&tp->indirect_lock);
|
||||
INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
|
||||
INIT_WORK(&tp->reset_task, tg3_reset_task);
|
||||
|
||||
tp->regs = ioremap_nocache(tg3reg_base, tg3reg_len);
|
||||
if (tp->regs == 0UL) {
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ static void TLan_SetMulticastList( struct net_device *);
|
|||
static int TLan_ioctl( struct net_device *dev, struct ifreq *rq, int cmd);
|
||||
static int TLan_probe1( struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent);
|
||||
static void TLan_tx_timeout( struct net_device *dev);
|
||||
static void TLan_tx_timeout_work(struct work_struct *work);
|
||||
static int tlan_init_one( struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||
|
||||
static u32 TLan_HandleInvalid( struct net_device *, u16 );
|
||||
|
|
@ -562,6 +563,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,
|
|||
priv = netdev_priv(dev);
|
||||
|
||||
priv->pciDev = pdev;
|
||||
priv->dev = dev;
|
||||
|
||||
/* Is this a PCI device? */
|
||||
if (pdev) {
|
||||
|
|
@ -634,7 +636,7 @@ static int __devinit TLan_probe1(struct pci_dev *pdev,
|
|||
|
||||
/* This will be used when we get an adapter error from
|
||||
* within our irq handler */
|
||||
INIT_WORK(&priv->tlan_tqueue, (void *)(void*)TLan_tx_timeout, dev);
|
||||
INIT_WORK(&priv->tlan_tqueue, TLan_tx_timeout_work);
|
||||
|
||||
spin_lock_init(&priv->lock);
|
||||
|
||||
|
|
@ -1040,6 +1042,25 @@ static void TLan_tx_timeout(struct net_device *dev)
|
|||
}
|
||||
|
||||
|
||||
/***************************************************************
|
||||
* TLan_tx_timeout_work
|
||||
*
|
||||
* Returns: nothing
|
||||
*
|
||||
* Params:
|
||||
* work work item of device which timed out
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
static void TLan_tx_timeout_work(struct work_struct *work)
|
||||
{
|
||||
TLanPrivateInfo *priv =
|
||||
container_of(work, TLanPrivateInfo, tlan_tqueue);
|
||||
|
||||
TLan_tx_timeout(priv->dev);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************
|
||||
* TLan_StartTx
|
||||
|
|
|
|||
|
|
@ -170,6 +170,7 @@ typedef u8 TLanBuffer[TLAN_MAX_FRAME_SIZE];
|
|||
typedef struct tlan_private_tag {
|
||||
struct net_device *nextDevice;
|
||||
struct pci_dev *pciDev;
|
||||
struct net_device *dev;
|
||||
void *dmaStorage;
|
||||
dma_addr_t dmaStorageDMA;
|
||||
unsigned int dmaSize;
|
||||
|
|
|
|||
|
|
@ -1826,7 +1826,7 @@ static void tr_rx(struct net_device *dev)
|
|||
skb->protocol = tr_type_trans(skb, dev);
|
||||
if (IPv4_p) {
|
||||
skb->csum = chksum;
|
||||
skb->ip_summed = 1;
|
||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||
}
|
||||
netif_rx(skb);
|
||||
dev->last_rx = jiffies;
|
||||
|
|
|
|||
|
|
@ -26,10 +26,11 @@ static u16 t21142_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, };
|
|||
|
||||
/* Handle the 21143 uniquely: do autoselect with NWay, not the EEPROM list
|
||||
of available transceivers. */
|
||||
void t21142_media_task(void *data)
|
||||
void t21142_media_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = data;
|
||||
struct tulip_private *tp = netdev_priv(dev);
|
||||
struct tulip_private *tp =
|
||||
container_of(work, struct tulip_private, media_work);
|
||||
struct net_device *dev = tp->dev;
|
||||
void __iomem *ioaddr = tp->base_addr;
|
||||
int csr12 = ioread32(ioaddr + CSR12);
|
||||
int next_tick = 60*HZ;
|
||||
|
|
|
|||
|
|
@ -473,9 +473,9 @@
|
|||
#include <asm/byteorder.h>
|
||||
#include <asm/unaligned.h>
|
||||
#include <asm/uaccess.h>
|
||||
#ifdef CONFIG_PPC_MULTIPLATFORM
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
#include <asm/machdep.h>
|
||||
#endif /* CONFIG_PPC_MULTIPLATFORM */
|
||||
#endif /* CONFIG_PPC_PMAC */
|
||||
|
||||
#include "de4x5.h"
|
||||
|
||||
|
|
@ -4151,7 +4151,7 @@ get_hw_addr(struct net_device *dev)
|
|||
/* If possible, try to fix a broken card - SMC only so far */
|
||||
srom_repair(dev, broken);
|
||||
|
||||
#ifdef CONFIG_PPC_MULTIPLATFORM
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
/*
|
||||
** If the address starts with 00 a0, we have to bit-reverse
|
||||
** each byte of the address.
|
||||
|
|
@ -4168,7 +4168,7 @@ get_hw_addr(struct net_device *dev)
|
|||
dev->dev_addr[i] = ((x & 0x55) << 1) + ((x & 0xaa) >> 1);
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_PPC_MULTIPLATFORM */
|
||||
#endif /* CONFIG_PPC_PMAC */
|
||||
|
||||
/* Test for a bad enet address */
|
||||
status = test_bad_enet(dev, status);
|
||||
|
|
|
|||
|
|
@ -18,10 +18,11 @@
|
|||
#include "tulip.h"
|
||||
|
||||
|
||||
void tulip_media_task(void *data)
|
||||
void tulip_media_task(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = data;
|
||||
struct tulip_private *tp = netdev_priv(dev);
|
||||
struct tulip_private *tp =
|
||||
container_of(work, struct tulip_private, media_work);
|
||||
struct net_device *dev = tp->dev;
|
||||
void __iomem *ioaddr = tp->base_addr;
|
||||
u32 csr12 = ioread32(ioaddr + CSR12);
|
||||
int next_tick = 2*HZ;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ struct tulip_chip_table {
|
|||
int valid_intrs; /* CSR7 interrupt enable settings */
|
||||
int flags;
|
||||
void (*media_timer) (unsigned long);
|
||||
void (*media_task) (void *);
|
||||
work_func_t media_task;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -392,6 +392,7 @@ struct tulip_private {
|
|||
int csr12_shadow;
|
||||
int pad0; /* Used for 8-byte alignment */
|
||||
struct work_struct media_work;
|
||||
struct net_device *dev;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -406,7 +407,7 @@ struct eeprom_fixup {
|
|||
|
||||
/* 21142.c */
|
||||
extern u16 t21142_csr14[];
|
||||
void t21142_media_task(void *data);
|
||||
void t21142_media_task(struct work_struct *work);
|
||||
void t21142_start_nway(struct net_device *dev);
|
||||
void t21142_lnk_change(struct net_device *dev, int csr5);
|
||||
|
||||
|
|
@ -444,7 +445,7 @@ void pnic_lnk_change(struct net_device *dev, int csr5);
|
|||
void pnic_timer(unsigned long data);
|
||||
|
||||
/* timer.c */
|
||||
void tulip_media_task(void *data);
|
||||
void tulip_media_task(struct work_struct *work);
|
||||
void mxic_timer(unsigned long data);
|
||||
void comet_timer(unsigned long data);
|
||||
|
||||
|
|
|
|||
|
|
@ -1367,6 +1367,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
|
|||
* it is zeroed and aligned in alloc_etherdev
|
||||
*/
|
||||
tp = netdev_priv(dev);
|
||||
tp->dev = dev;
|
||||
|
||||
tp->rx_ring = pci_alloc_consistent(pdev,
|
||||
sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
|
||||
|
|
@ -1389,7 +1390,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
|
|||
tp->timer.data = (unsigned long)dev;
|
||||
tp->timer.function = tulip_tbl[tp->chip_id].media_timer;
|
||||
|
||||
INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task, dev);
|
||||
INIT_WORK(&tp->media_work, tulip_tbl[tp->chip_id].media_task);
|
||||
|
||||
dev->base_addr = (unsigned long)ioaddr;
|
||||
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ static int cpc_tty_write_room(struct tty_struct *tty);
|
|||
static int cpc_tty_chars_in_buffer(struct tty_struct *tty);
|
||||
static void cpc_tty_flush_buffer(struct tty_struct *tty);
|
||||
static void cpc_tty_hangup(struct tty_struct *tty);
|
||||
static void cpc_tty_rx_work(void *data);
|
||||
static void cpc_tty_tx_work(void *data);
|
||||
static void cpc_tty_rx_work(struct work_struct *work);
|
||||
static void cpc_tty_tx_work(struct work_struct *work);
|
||||
static int cpc_tty_send_to_card(pc300dev_t *dev,void *buf, int len);
|
||||
static void cpc_tty_trace(pc300dev_t *dev, char* buf, int len, char rxtx);
|
||||
static void cpc_tty_signal_off(pc300dev_t *pc300dev, unsigned char);
|
||||
|
|
@ -261,8 +261,8 @@ void cpc_tty_init(pc300dev_t *pc300dev)
|
|||
cpc_tty->tty_minor = port + CPC_TTY_MINOR_START;
|
||||
cpc_tty->pc300dev = pc300dev;
|
||||
|
||||
INIT_WORK(&cpc_tty->tty_tx_work, cpc_tty_tx_work, (void *)cpc_tty);
|
||||
INIT_WORK(&cpc_tty->tty_rx_work, cpc_tty_rx_work, (void *)port);
|
||||
INIT_WORK(&cpc_tty->tty_tx_work, cpc_tty_tx_work);
|
||||
INIT_WORK(&cpc_tty->tty_rx_work, cpc_tty_rx_work);
|
||||
|
||||
cpc_tty->buf_rx.first = cpc_tty->buf_rx.last = NULL;
|
||||
|
||||
|
|
@ -659,21 +659,23 @@ static void cpc_tty_hangup(struct tty_struct *tty)
|
|||
* o call the line disc. read
|
||||
* o free memory
|
||||
*/
|
||||
static void cpc_tty_rx_work(void * data)
|
||||
static void cpc_tty_rx_work(struct work_struct *work)
|
||||
{
|
||||
st_cpc_tty_area *cpc_tty;
|
||||
unsigned long port;
|
||||
int i, j;
|
||||
st_cpc_tty_area *cpc_tty;
|
||||
volatile st_cpc_rx_buf *buf;
|
||||
char flags=0,flg_rx=1;
|
||||
struct tty_ldisc *ld;
|
||||
|
||||
if (cpc_tty_cnt == 0) return;
|
||||
|
||||
|
||||
for (i=0; (i < 4) && flg_rx ; i++) {
|
||||
flg_rx = 0;
|
||||
port = (unsigned long)data;
|
||||
|
||||
cpc_tty = container_of(work, st_cpc_tty_area, tty_rx_work);
|
||||
port = cpc_tty - cpc_tty_area;
|
||||
|
||||
for (j=0; j < CPC_TTY_NPORTS; j++) {
|
||||
cpc_tty = &cpc_tty_area[port];
|
||||
|
||||
|
|
@ -882,9 +884,10 @@ void cpc_tty_receive(pc300dev_t *pc300dev)
|
|||
* o if need call line discipline wakeup
|
||||
* o call wake_up_interruptible
|
||||
*/
|
||||
static void cpc_tty_tx_work(void *data)
|
||||
static void cpc_tty_tx_work(struct work_struct *work)
|
||||
{
|
||||
st_cpc_tty_area *cpc_tty = (st_cpc_tty_area *) data;
|
||||
st_cpc_tty_area *cpc_tty =
|
||||
container_of(work, st_cpc_tty_area, tty_tx_work);
|
||||
struct tty_struct *tty;
|
||||
|
||||
CPC_TTY_DBG("%s: cpc_tty_tx_work init\n",cpc_tty->name);
|
||||
|
|
|
|||
|
|
@ -219,21 +219,6 @@ static int airo_config(struct pcmcia_device *link)
|
|||
dev = link->priv;
|
||||
|
||||
DEBUG(0, "airo_config(0x%p)\n", link);
|
||||
|
||||
/*
|
||||
This reads the card's CONFIG tuple to find its configuration
|
||||
registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/*
|
||||
In this loop, we scan the CIS for configuration table entries,
|
||||
|
|
@ -247,6 +232,10 @@ static int airo_config(struct pcmcia_device *link)
|
|||
these things without consulting the CIS, and most client drivers
|
||||
will only use the CIS to fill in implementation-defined details.
|
||||
*/
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
|
|
|
|||
|
|
@ -243,17 +243,6 @@ static int atmel_config(struct pcmcia_device *link)
|
|||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
|
||||
/*
|
||||
This reads the card's CONFIG tuple to find its configuration
|
||||
registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/*
|
||||
In this loop, we scan the CIS for configuration table entries,
|
||||
each of which describes a valid card configuration, including
|
||||
|
|
|
|||
|
|
@ -819,7 +819,7 @@ struct bcm43xx_private {
|
|||
struct tasklet_struct isr_tasklet;
|
||||
|
||||
/* Periodic tasks */
|
||||
struct work_struct periodic_work;
|
||||
struct delayed_work periodic_work;
|
||||
unsigned int periodic_state;
|
||||
|
||||
struct work_struct restart_work;
|
||||
|
|
|
|||
|
|
@ -3215,9 +3215,10 @@ static void do_periodic_work(struct bcm43xx_private *bcm)
|
|||
schedule_delayed_work(&bcm->periodic_work, HZ * 15);
|
||||
}
|
||||
|
||||
static void bcm43xx_periodic_work_handler(void *d)
|
||||
static void bcm43xx_periodic_work_handler(struct work_struct *work)
|
||||
{
|
||||
struct bcm43xx_private *bcm = d;
|
||||
struct bcm43xx_private *bcm =
|
||||
container_of(work, struct bcm43xx_private, periodic_work.work);
|
||||
struct net_device *net_dev = bcm->net_dev;
|
||||
unsigned long flags;
|
||||
u32 savedirqs = 0;
|
||||
|
|
@ -3279,11 +3280,11 @@ void bcm43xx_periodic_tasks_delete(struct bcm43xx_private *bcm)
|
|||
|
||||
void bcm43xx_periodic_tasks_setup(struct bcm43xx_private *bcm)
|
||||
{
|
||||
struct work_struct *work = &(bcm->periodic_work);
|
||||
struct delayed_work *work = &bcm->periodic_work;
|
||||
|
||||
assert(bcm43xx_status(bcm) == BCM43xx_STAT_INITIALIZED);
|
||||
INIT_WORK(work, bcm43xx_periodic_work_handler, bcm);
|
||||
schedule_work(work);
|
||||
INIT_DELAYED_WORK(work, bcm43xx_periodic_work_handler);
|
||||
schedule_delayed_work(work, 0);
|
||||
}
|
||||
|
||||
static void bcm43xx_security_init(struct bcm43xx_private *bcm)
|
||||
|
|
@ -3635,7 +3636,7 @@ static int bcm43xx_init_board(struct bcm43xx_private *bcm)
|
|||
bcm43xx_periodic_tasks_setup(bcm);
|
||||
|
||||
/*FIXME: This should be handled by softmac instead. */
|
||||
schedule_work(&bcm->softmac->associnfo.work);
|
||||
schedule_delayed_work(&bcm->softmac->associnfo.work, 0);
|
||||
|
||||
out:
|
||||
mutex_unlock(&(bcm)->mutex);
|
||||
|
|
@ -4182,9 +4183,10 @@ static void __devexit bcm43xx_remove_one(struct pci_dev *pdev)
|
|||
/* Hard-reset the chip. Do not call this directly.
|
||||
* Use bcm43xx_controller_restart()
|
||||
*/
|
||||
static void bcm43xx_chip_reset(void *_bcm)
|
||||
static void bcm43xx_chip_reset(struct work_struct *work)
|
||||
{
|
||||
struct bcm43xx_private *bcm = _bcm;
|
||||
struct bcm43xx_private *bcm =
|
||||
container_of(work, struct bcm43xx_private, restart_work);
|
||||
struct bcm43xx_phyinfo *phy;
|
||||
int err = -ENODEV;
|
||||
|
||||
|
|
@ -4211,7 +4213,7 @@ void bcm43xx_controller_restart(struct bcm43xx_private *bcm, const char *reason)
|
|||
if (bcm43xx_status(bcm) != BCM43xx_STAT_INITIALIZED)
|
||||
return;
|
||||
printk(KERN_ERR PFX "Controller RESET (%s) ...\n", reason);
|
||||
INIT_WORK(&bcm->restart_work, bcm43xx_chip_reset, bcm);
|
||||
INIT_WORK(&bcm->restart_work, bcm43xx_chip_reset);
|
||||
schedule_work(&bcm->restart_work);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ int hostap_80211_get_hdrlen(u16 fc);
|
|||
struct net_device_stats *hostap_get_stats(struct net_device *dev);
|
||||
void hostap_setup_dev(struct net_device *dev, local_info_t *local,
|
||||
int main_dev);
|
||||
void hostap_set_multicast_list_queue(void *data);
|
||||
void hostap_set_multicast_list_queue(struct work_struct *work);
|
||||
int hostap_set_hostapd(local_info_t *local, int val, int rtnl_locked);
|
||||
int hostap_set_hostapd_sta(local_info_t *local, int val, int rtnl_locked);
|
||||
void hostap_cleanup(local_info_t *local);
|
||||
|
|
|
|||
|
|
@ -49,10 +49,10 @@ MODULE_PARM_DESC(autom_ap_wds, "Add WDS connections to other APs "
|
|||
static struct sta_info* ap_get_sta(struct ap_data *ap, u8 *sta);
|
||||
static void hostap_event_expired_sta(struct net_device *dev,
|
||||
struct sta_info *sta);
|
||||
static void handle_add_proc_queue(void *data);
|
||||
static void handle_add_proc_queue(struct work_struct *work);
|
||||
|
||||
#ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT
|
||||
static void handle_wds_oper_queue(void *data);
|
||||
static void handle_wds_oper_queue(struct work_struct *work);
|
||||
static void prism2_send_mgmt(struct net_device *dev,
|
||||
u16 type_subtype, char *body,
|
||||
int body_len, u8 *addr, u16 tx_cb_idx);
|
||||
|
|
@ -807,7 +807,7 @@ void hostap_init_data(local_info_t *local)
|
|||
INIT_LIST_HEAD(&ap->sta_list);
|
||||
|
||||
/* Initialize task queue structure for AP management */
|
||||
INIT_WORK(&local->ap->add_sta_proc_queue, handle_add_proc_queue, ap);
|
||||
INIT_WORK(&local->ap->add_sta_proc_queue, handle_add_proc_queue);
|
||||
|
||||
ap->tx_callback_idx =
|
||||
hostap_tx_callback_register(local, hostap_ap_tx_cb, ap);
|
||||
|
|
@ -815,7 +815,7 @@ void hostap_init_data(local_info_t *local)
|
|||
printk(KERN_WARNING "%s: failed to register TX callback for "
|
||||
"AP\n", local->dev->name);
|
||||
#ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT
|
||||
INIT_WORK(&local->ap->wds_oper_queue, handle_wds_oper_queue, local);
|
||||
INIT_WORK(&local->ap->wds_oper_queue, handle_wds_oper_queue);
|
||||
|
||||
ap->tx_callback_auth =
|
||||
hostap_tx_callback_register(local, hostap_ap_tx_cb_auth, ap);
|
||||
|
|
@ -1062,9 +1062,10 @@ static int prism2_sta_proc_read(char *page, char **start, off_t off,
|
|||
}
|
||||
|
||||
|
||||
static void handle_add_proc_queue(void *data)
|
||||
static void handle_add_proc_queue(struct work_struct *work)
|
||||
{
|
||||
struct ap_data *ap = (struct ap_data *) data;
|
||||
struct ap_data *ap = container_of(work, struct ap_data,
|
||||
add_sta_proc_queue);
|
||||
struct sta_info *sta;
|
||||
char name[20];
|
||||
struct add_sta_proc_data *entry, *prev;
|
||||
|
|
@ -1952,9 +1953,11 @@ static void handle_pspoll(local_info_t *local,
|
|||
|
||||
#ifndef PRISM2_NO_KERNEL_IEEE80211_MGMT
|
||||
|
||||
static void handle_wds_oper_queue(void *data)
|
||||
static void handle_wds_oper_queue(struct work_struct *work)
|
||||
{
|
||||
local_info_t *local = data;
|
||||
struct ap_data *ap = container_of(work, struct ap_data,
|
||||
wds_oper_queue);
|
||||
local_info_t *local = ap->local;
|
||||
struct wds_oper_data *entry, *prev;
|
||||
|
||||
spin_lock_bh(&local->lock);
|
||||
|
|
|
|||
|
|
@ -293,15 +293,12 @@ static int sandisk_enable_wireless(struct net_device *dev)
|
|||
goto done;
|
||||
}
|
||||
|
||||
tuple.DesiredTuple = CISTPL_MANFID;
|
||||
tuple.Attributes = TUPLE_RETURN_COMMON;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
if (pcmcia_get_first_tuple(hw_priv->link, &tuple) ||
|
||||
pcmcia_get_tuple_data(hw_priv->link, &tuple) ||
|
||||
pcmcia_parse_tuple(hw_priv->link, &tuple, parse) ||
|
||||
parse->manfid.manf != 0xd601 || parse->manfid.card != 0x0101) {
|
||||
|
||||
if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) {
|
||||
/* No SanDisk manfid found */
|
||||
ret = -ENODEV;
|
||||
goto done;
|
||||
|
|
@ -573,16 +570,10 @@ static int prism2_config(struct pcmcia_device *link)
|
|||
}
|
||||
memset(hw_priv, 0, sizeof(*hw_priv));
|
||||
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, parse));
|
||||
link->conf.ConfigBase = parse->config.base;
|
||||
link->conf.Present = parse->config.rmask[0];
|
||||
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
|
|
|||
|
|
@ -1645,9 +1645,9 @@ static void prism2_schedule_reset(local_info_t *local)
|
|||
|
||||
/* Called only as scheduled task after noticing card timeout in interrupt
|
||||
* context */
|
||||
static void handle_reset_queue(void *data)
|
||||
static void handle_reset_queue(struct work_struct *work)
|
||||
{
|
||||
local_info_t *local = (local_info_t *) data;
|
||||
local_info_t *local = container_of(work, local_info_t, reset_queue);
|
||||
|
||||
printk(KERN_DEBUG "%s: scheduled card reset\n", local->dev->name);
|
||||
prism2_hw_reset(local->dev);
|
||||
|
|
@ -2896,9 +2896,10 @@ static void hostap_passive_scan(unsigned long data)
|
|||
|
||||
/* Called only as a scheduled task when communications quality values should
|
||||
* be updated. */
|
||||
static void handle_comms_qual_update(void *data)
|
||||
static void handle_comms_qual_update(struct work_struct *work)
|
||||
{
|
||||
local_info_t *local = data;
|
||||
local_info_t *local =
|
||||
container_of(work, local_info_t, comms_qual_update);
|
||||
prism2_update_comms_qual(local->dev);
|
||||
}
|
||||
|
||||
|
|
@ -3050,9 +3051,9 @@ static int prism2_set_tim(struct net_device *dev, int aid, int set)
|
|||
}
|
||||
|
||||
|
||||
static void handle_set_tim_queue(void *data)
|
||||
static void handle_set_tim_queue(struct work_struct *work)
|
||||
{
|
||||
local_info_t *local = (local_info_t *) data;
|
||||
local_info_t *local = container_of(work, local_info_t, set_tim_queue);
|
||||
struct set_tim_data *entry;
|
||||
u16 val;
|
||||
|
||||
|
|
@ -3209,15 +3210,15 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
|
|||
local->scan_channel_mask = 0xffff;
|
||||
|
||||
/* Initialize task queue structures */
|
||||
INIT_WORK(&local->reset_queue, handle_reset_queue, local);
|
||||
INIT_WORK(&local->reset_queue, handle_reset_queue);
|
||||
INIT_WORK(&local->set_multicast_list_queue,
|
||||
hostap_set_multicast_list_queue, local->dev);
|
||||
hostap_set_multicast_list_queue);
|
||||
|
||||
INIT_WORK(&local->set_tim_queue, handle_set_tim_queue, local);
|
||||
INIT_WORK(&local->set_tim_queue, handle_set_tim_queue);
|
||||
INIT_LIST_HEAD(&local->set_tim_list);
|
||||
spin_lock_init(&local->set_tim_lock);
|
||||
|
||||
INIT_WORK(&local->comms_qual_update, handle_comms_qual_update, local);
|
||||
INIT_WORK(&local->comms_qual_update, handle_comms_qual_update);
|
||||
|
||||
/* Initialize tasklets for handling hardware IRQ related operations
|
||||
* outside hw IRQ handler */
|
||||
|
|
|
|||
|
|
@ -474,9 +474,9 @@ static void handle_info_queue_scanresults(local_info_t *local)
|
|||
|
||||
/* Called only as scheduled task after receiving info frames (used to avoid
|
||||
* pending too much time in HW IRQ handler). */
|
||||
static void handle_info_queue(void *data)
|
||||
static void handle_info_queue(struct work_struct *work)
|
||||
{
|
||||
local_info_t *local = (local_info_t *) data;
|
||||
local_info_t *local = container_of(work, local_info_t, info_queue);
|
||||
|
||||
if (test_and_clear_bit(PRISM2_INFO_PENDING_LINKSTATUS,
|
||||
&local->pending_info))
|
||||
|
|
@ -493,7 +493,7 @@ void hostap_info_init(local_info_t *local)
|
|||
{
|
||||
skb_queue_head_init(&local->info_list);
|
||||
#ifndef PRISM2_NO_STATION_MODES
|
||||
INIT_WORK(&local->info_queue, handle_info_queue, local);
|
||||
INIT_WORK(&local->info_queue, handle_info_queue);
|
||||
#endif /* PRISM2_NO_STATION_MODES */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -767,14 +767,14 @@ static int prism2_set_mac_address(struct net_device *dev, void *p)
|
|||
|
||||
/* TODO: to be further implemented as soon as Prism2 fully supports
|
||||
* GroupAddresses and correct documentation is available */
|
||||
void hostap_set_multicast_list_queue(void *data)
|
||||
void hostap_set_multicast_list_queue(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = (struct net_device *) data;
|
||||
local_info_t *local =
|
||||
container_of(work, local_info_t, set_multicast_list_queue);
|
||||
struct net_device *dev = local->dev;
|
||||
struct hostap_interface *iface;
|
||||
local_info_t *local;
|
||||
|
||||
iface = netdev_priv(dev);
|
||||
local = iface->local;
|
||||
if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE,
|
||||
local->is_promisc)) {
|
||||
printk(KERN_INFO "%s: %sabling promiscuous mode failed\n",
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ static void ipw2100_release_firmware(struct ipw2100_priv *priv,
|
|||
struct ipw2100_fw *fw);
|
||||
static int ipw2100_ucode_download(struct ipw2100_priv *priv,
|
||||
struct ipw2100_fw *fw);
|
||||
static void ipw2100_wx_event_work(struct ipw2100_priv *priv);
|
||||
static void ipw2100_wx_event_work(struct work_struct *work);
|
||||
static struct iw_statistics *ipw2100_wx_wireless_stats(struct net_device *dev);
|
||||
static struct iw_handler_def ipw2100_wx_handler_def;
|
||||
|
||||
|
|
@ -679,7 +679,8 @@ static void schedule_reset(struct ipw2100_priv *priv)
|
|||
queue_delayed_work(priv->workqueue, &priv->reset_work,
|
||||
priv->reset_backoff * HZ);
|
||||
else
|
||||
queue_work(priv->workqueue, &priv->reset_work);
|
||||
queue_delayed_work(priv->workqueue, &priv->reset_work,
|
||||
0);
|
||||
|
||||
if (priv->reset_backoff < MAX_RESET_BACKOFF)
|
||||
priv->reset_backoff++;
|
||||
|
|
@ -1873,8 +1874,10 @@ static void ipw2100_down(struct ipw2100_priv *priv)
|
|||
netif_stop_queue(priv->net_dev);
|
||||
}
|
||||
|
||||
static void ipw2100_reset_adapter(struct ipw2100_priv *priv)
|
||||
static void ipw2100_reset_adapter(struct work_struct *work)
|
||||
{
|
||||
struct ipw2100_priv *priv =
|
||||
container_of(work, struct ipw2100_priv, reset_work.work);
|
||||
unsigned long flags;
|
||||
union iwreq_data wrqu = {
|
||||
.ap_addr = {
|
||||
|
|
@ -2071,9 +2074,9 @@ static void isr_indicate_association_lost(struct ipw2100_priv *priv, u32 status)
|
|||
return;
|
||||
|
||||
if (priv->status & STATUS_SECURITY_UPDATED)
|
||||
queue_work(priv->workqueue, &priv->security_work);
|
||||
queue_delayed_work(priv->workqueue, &priv->security_work, 0);
|
||||
|
||||
queue_work(priv->workqueue, &priv->wx_event_work);
|
||||
queue_delayed_work(priv->workqueue, &priv->wx_event_work, 0);
|
||||
}
|
||||
|
||||
static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
|
||||
|
|
@ -5524,8 +5527,11 @@ static int ipw2100_configure_security(struct ipw2100_priv *priv, int batch_mode)
|
|||
return err;
|
||||
}
|
||||
|
||||
static void ipw2100_security_work(struct ipw2100_priv *priv)
|
||||
static void ipw2100_security_work(struct work_struct *work)
|
||||
{
|
||||
struct ipw2100_priv *priv =
|
||||
container_of(work, struct ipw2100_priv, security_work.work);
|
||||
|
||||
/* If we happen to have reconnected before we get a chance to
|
||||
* process this, then update the security settings--which causes
|
||||
* a disassociation to occur */
|
||||
|
|
@ -5748,7 +5754,7 @@ static int ipw2100_set_address(struct net_device *dev, void *p)
|
|||
|
||||
priv->reset_backoff = 0;
|
||||
mutex_unlock(&priv->action_mutex);
|
||||
ipw2100_reset_adapter(priv);
|
||||
ipw2100_reset_adapter(&priv->reset_work.work);
|
||||
return 0;
|
||||
|
||||
done:
|
||||
|
|
@ -5910,9 +5916,10 @@ static const struct ethtool_ops ipw2100_ethtool_ops = {
|
|||
.get_drvinfo = ipw_ethtool_get_drvinfo,
|
||||
};
|
||||
|
||||
static void ipw2100_hang_check(void *adapter)
|
||||
static void ipw2100_hang_check(struct work_struct *work)
|
||||
{
|
||||
struct ipw2100_priv *priv = adapter;
|
||||
struct ipw2100_priv *priv =
|
||||
container_of(work, struct ipw2100_priv, hang_check.work);
|
||||
unsigned long flags;
|
||||
u32 rtc = 0xa5a5a5a5;
|
||||
u32 len = sizeof(rtc);
|
||||
|
|
@ -5952,9 +5959,10 @@ static void ipw2100_hang_check(void *adapter)
|
|||
spin_unlock_irqrestore(&priv->low_lock, flags);
|
||||
}
|
||||
|
||||
static void ipw2100_rf_kill(void *adapter)
|
||||
static void ipw2100_rf_kill(struct work_struct *work)
|
||||
{
|
||||
struct ipw2100_priv *priv = adapter;
|
||||
struct ipw2100_priv *priv =
|
||||
container_of(work, struct ipw2100_priv, rf_kill.work);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->low_lock, flags);
|
||||
|
|
@ -6103,14 +6111,11 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
|
|||
|
||||
priv->workqueue = create_workqueue(DRV_NAME);
|
||||
|
||||
INIT_WORK(&priv->reset_work,
|
||||
(void (*)(void *))ipw2100_reset_adapter, priv);
|
||||
INIT_WORK(&priv->security_work,
|
||||
(void (*)(void *))ipw2100_security_work, priv);
|
||||
INIT_WORK(&priv->wx_event_work,
|
||||
(void (*)(void *))ipw2100_wx_event_work, priv);
|
||||
INIT_WORK(&priv->hang_check, ipw2100_hang_check, priv);
|
||||
INIT_WORK(&priv->rf_kill, ipw2100_rf_kill, priv);
|
||||
INIT_DELAYED_WORK(&priv->reset_work, ipw2100_reset_adapter);
|
||||
INIT_DELAYED_WORK(&priv->security_work, ipw2100_security_work);
|
||||
INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
|
||||
INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
|
||||
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
|
||||
|
||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||
ipw2100_irq_tasklet, (unsigned long)priv);
|
||||
|
|
@ -8281,8 +8286,10 @@ static struct iw_handler_def ipw2100_wx_handler_def = {
|
|||
.get_wireless_stats = ipw2100_wx_wireless_stats,
|
||||
};
|
||||
|
||||
static void ipw2100_wx_event_work(struct ipw2100_priv *priv)
|
||||
static void ipw2100_wx_event_work(struct work_struct *work)
|
||||
{
|
||||
struct ipw2100_priv *priv =
|
||||
container_of(work, struct ipw2100_priv, wx_event_work.work);
|
||||
union iwreq_data wrqu;
|
||||
int len = ETH_ALEN;
|
||||
|
||||
|
|
|
|||
|
|
@ -583,11 +583,11 @@ struct ipw2100_priv {
|
|||
struct tasklet_struct irq_tasklet;
|
||||
|
||||
struct workqueue_struct *workqueue;
|
||||
struct work_struct reset_work;
|
||||
struct work_struct security_work;
|
||||
struct work_struct wx_event_work;
|
||||
struct work_struct hang_check;
|
||||
struct work_struct rf_kill;
|
||||
struct delayed_work reset_work;
|
||||
struct delayed_work security_work;
|
||||
struct delayed_work wx_event_work;
|
||||
struct delayed_work hang_check;
|
||||
struct delayed_work rf_kill;
|
||||
|
||||
u32 interrupts;
|
||||
int tx_interrupts;
|
||||
|
|
|
|||
|
|
@ -187,9 +187,9 @@ static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *);
|
|||
static void ipw_rx_queue_free(struct ipw_priv *, struct ipw_rx_queue *);
|
||||
static void ipw_rx_queue_replenish(void *);
|
||||
static int ipw_up(struct ipw_priv *);
|
||||
static void ipw_bg_up(void *);
|
||||
static void ipw_bg_up(struct work_struct *work);
|
||||
static void ipw_down(struct ipw_priv *);
|
||||
static void ipw_bg_down(void *);
|
||||
static void ipw_bg_down(struct work_struct *work);
|
||||
static int ipw_config(struct ipw_priv *);
|
||||
static int init_supported_rates(struct ipw_priv *priv,
|
||||
struct ipw_supported_rates *prates);
|
||||
|
|
@ -862,11 +862,12 @@ static void ipw_led_link_on(struct ipw_priv *priv)
|
|||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
static void ipw_bg_led_link_on(void *data)
|
||||
static void ipw_bg_led_link_on(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, led_link_on.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_led_link_on(data);
|
||||
ipw_led_link_on(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -906,11 +907,12 @@ static void ipw_led_link_off(struct ipw_priv *priv)
|
|||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
static void ipw_bg_led_link_off(void *data)
|
||||
static void ipw_bg_led_link_off(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, led_link_off.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_led_link_off(data);
|
||||
ipw_led_link_off(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -985,11 +987,12 @@ static void ipw_led_activity_off(struct ipw_priv *priv)
|
|||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
static void ipw_bg_led_activity_off(void *data)
|
||||
static void ipw_bg_led_activity_off(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, led_act_off.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_led_activity_off(data);
|
||||
ipw_led_activity_off(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -2228,11 +2231,12 @@ static void ipw_adapter_restart(void *adapter)
|
|||
}
|
||||
}
|
||||
|
||||
static void ipw_bg_adapter_restart(void *data)
|
||||
static void ipw_bg_adapter_restart(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, adapter_restart);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_adapter_restart(data);
|
||||
ipw_adapter_restart(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -2249,11 +2253,12 @@ static void ipw_scan_check(void *data)
|
|||
}
|
||||
}
|
||||
|
||||
static void ipw_bg_scan_check(void *data)
|
||||
static void ipw_bg_scan_check(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, scan_check.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_scan_check(data);
|
||||
ipw_scan_check(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -3831,17 +3836,19 @@ static int ipw_disassociate(void *data)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void ipw_bg_disassociate(void *data)
|
||||
static void ipw_bg_disassociate(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, disassociate);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_disassociate(data);
|
||||
ipw_disassociate(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
static void ipw_system_config(void *data)
|
||||
static void ipw_system_config(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, system_config);
|
||||
|
||||
#ifdef CONFIG_IPW2200_PROMISCUOUS
|
||||
if (priv->prom_net_dev && netif_running(priv->prom_net_dev)) {
|
||||
|
|
@ -4208,11 +4215,12 @@ static void ipw_gather_stats(struct ipw_priv *priv)
|
|||
IPW_STATS_INTERVAL);
|
||||
}
|
||||
|
||||
static void ipw_bg_gather_stats(void *data)
|
||||
static void ipw_bg_gather_stats(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, gather_stats.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_gather_stats(data);
|
||||
ipw_gather_stats(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -4268,8 +4276,8 @@ static void ipw_handle_missed_beacon(struct ipw_priv *priv,
|
|||
if (!(priv->status & STATUS_ROAMING)) {
|
||||
priv->status |= STATUS_ROAMING;
|
||||
if (!(priv->status & STATUS_SCANNING))
|
||||
queue_work(priv->workqueue,
|
||||
&priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->request_scan, 0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -4607,8 +4615,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
|
|||
#ifdef CONFIG_IPW2200_MONITOR
|
||||
if (priv->ieee->iw_mode == IW_MODE_MONITOR) {
|
||||
priv->status |= STATUS_SCAN_FORCED;
|
||||
queue_work(priv->workqueue,
|
||||
&priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->request_scan, 0);
|
||||
break;
|
||||
}
|
||||
priv->status &= ~STATUS_SCAN_FORCED;
|
||||
|
|
@ -4631,8 +4639,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
|
|||
/* Don't schedule if we aborted the scan */
|
||||
priv->status &= ~STATUS_ROAMING;
|
||||
} else if (priv->status & STATUS_SCAN_PENDING)
|
||||
queue_work(priv->workqueue,
|
||||
&priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->request_scan, 0);
|
||||
else if (priv->config & CFG_BACKGROUND_SCAN
|
||||
&& priv->status & STATUS_ASSOCIATED)
|
||||
queue_delayed_work(priv->workqueue,
|
||||
|
|
@ -5055,11 +5063,12 @@ static void ipw_rx_queue_replenish(void *data)
|
|||
ipw_rx_queue_restock(priv);
|
||||
}
|
||||
|
||||
static void ipw_bg_rx_queue_replenish(void *data)
|
||||
static void ipw_bg_rx_queue_replenish(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, rx_replenish);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_rx_queue_replenish(data);
|
||||
ipw_rx_queue_replenish(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -5489,9 +5498,10 @@ static int ipw_find_adhoc_network(struct ipw_priv *priv,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void ipw_merge_adhoc_network(void *data)
|
||||
static void ipw_merge_adhoc_network(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, merge_networks);
|
||||
struct ieee80211_network *network = NULL;
|
||||
struct ipw_network_match match = {
|
||||
.network = priv->assoc_network
|
||||
|
|
@ -5948,11 +5958,12 @@ static void ipw_adhoc_check(void *data)
|
|||
priv->assoc_request.beacon_interval);
|
||||
}
|
||||
|
||||
static void ipw_bg_adhoc_check(void *data)
|
||||
static void ipw_bg_adhoc_check(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, adhoc_check.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_adhoc_check(data);
|
||||
ipw_adhoc_check(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -6299,19 +6310,26 @@ done:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int ipw_request_passive_scan(struct ipw_priv *priv) {
|
||||
return ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE);
|
||||
}
|
||||
|
||||
static int ipw_request_scan(struct ipw_priv *priv) {
|
||||
return ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE);
|
||||
}
|
||||
|
||||
static void ipw_bg_abort_scan(void *data)
|
||||
static void ipw_request_passive_scan(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, request_passive_scan);
|
||||
ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE);
|
||||
}
|
||||
|
||||
static void ipw_request_scan(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, request_scan.work);
|
||||
ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE);
|
||||
}
|
||||
|
||||
static void ipw_bg_abort_scan(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, abort_scan);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_abort_scan(data);
|
||||
ipw_abort_scan(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -7084,9 +7102,10 @@ static int ipw_qos_set_tx_queue_command(struct ipw_priv *priv,
|
|||
/*
|
||||
* background support to run QoS activate functionality
|
||||
*/
|
||||
static void ipw_bg_qos_activate(void *data)
|
||||
static void ipw_bg_qos_activate(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, qos_activate);
|
||||
|
||||
if (priv == NULL)
|
||||
return;
|
||||
|
|
@ -7394,11 +7413,12 @@ static void ipw_roam(void *data)
|
|||
priv->status &= ~STATUS_ROAMING;
|
||||
}
|
||||
|
||||
static void ipw_bg_roam(void *data)
|
||||
static void ipw_bg_roam(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, roam);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_roam(data);
|
||||
ipw_roam(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -7479,8 +7499,8 @@ static int ipw_associate(void *data)
|
|||
&priv->request_scan,
|
||||
SCAN_INTERVAL);
|
||||
else
|
||||
queue_work(priv->workqueue,
|
||||
&priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->request_scan, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -7491,11 +7511,12 @@ static int ipw_associate(void *data)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void ipw_bg_associate(void *data)
|
||||
static void ipw_bg_associate(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, associate);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_associate(data);
|
||||
ipw_associate(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -9410,7 +9431,7 @@ static int ipw_wx_set_scan(struct net_device *dev,
|
|||
|
||||
IPW_DEBUG_WX("Start scan\n");
|
||||
|
||||
queue_work(priv->workqueue, &priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue, &priv->request_scan, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -10547,11 +10568,12 @@ static void ipw_rf_kill(void *adapter)
|
|||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
}
|
||||
|
||||
static void ipw_bg_rf_kill(void *data)
|
||||
static void ipw_bg_rf_kill(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, rf_kill.work);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_rf_kill(data);
|
||||
ipw_rf_kill(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -10582,11 +10604,12 @@ static void ipw_link_up(struct ipw_priv *priv)
|
|||
queue_delayed_work(priv->workqueue, &priv->request_scan, HZ);
|
||||
}
|
||||
|
||||
static void ipw_bg_link_up(void *data)
|
||||
static void ipw_bg_link_up(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, link_up);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_link_up(data);
|
||||
ipw_link_up(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -10606,15 +10629,16 @@ static void ipw_link_down(struct ipw_priv *priv)
|
|||
|
||||
if (!(priv->status & STATUS_EXIT_PENDING)) {
|
||||
/* Queue up another scan... */
|
||||
queue_work(priv->workqueue, &priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue, &priv->request_scan, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void ipw_bg_link_down(void *data)
|
||||
static void ipw_bg_link_down(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, link_down);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_link_down(data);
|
||||
ipw_link_down(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -10626,38 +10650,30 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv)
|
|||
init_waitqueue_head(&priv->wait_command_queue);
|
||||
init_waitqueue_head(&priv->wait_state);
|
||||
|
||||
INIT_WORK(&priv->adhoc_check, ipw_bg_adhoc_check, priv);
|
||||
INIT_WORK(&priv->associate, ipw_bg_associate, priv);
|
||||
INIT_WORK(&priv->disassociate, ipw_bg_disassociate, priv);
|
||||
INIT_WORK(&priv->system_config, ipw_system_config, priv);
|
||||
INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish, priv);
|
||||
INIT_WORK(&priv->adapter_restart, ipw_bg_adapter_restart, priv);
|
||||
INIT_WORK(&priv->rf_kill, ipw_bg_rf_kill, priv);
|
||||
INIT_WORK(&priv->up, (void (*)(void *))ipw_bg_up, priv);
|
||||
INIT_WORK(&priv->down, (void (*)(void *))ipw_bg_down, priv);
|
||||
INIT_WORK(&priv->request_scan,
|
||||
(void (*)(void *))ipw_request_scan, priv);
|
||||
INIT_WORK(&priv->request_passive_scan,
|
||||
(void (*)(void *))ipw_request_passive_scan, priv);
|
||||
INIT_WORK(&priv->gather_stats,
|
||||
(void (*)(void *))ipw_bg_gather_stats, priv);
|
||||
INIT_WORK(&priv->abort_scan, (void (*)(void *))ipw_bg_abort_scan, priv);
|
||||
INIT_WORK(&priv->roam, ipw_bg_roam, priv);
|
||||
INIT_WORK(&priv->scan_check, ipw_bg_scan_check, priv);
|
||||
INIT_WORK(&priv->link_up, (void (*)(void *))ipw_bg_link_up, priv);
|
||||
INIT_WORK(&priv->link_down, (void (*)(void *))ipw_bg_link_down, priv);
|
||||
INIT_WORK(&priv->led_link_on, (void (*)(void *))ipw_bg_led_link_on,
|
||||
priv);
|
||||
INIT_WORK(&priv->led_link_off, (void (*)(void *))ipw_bg_led_link_off,
|
||||
priv);
|
||||
INIT_WORK(&priv->led_act_off, (void (*)(void *))ipw_bg_led_activity_off,
|
||||
priv);
|
||||
INIT_WORK(&priv->merge_networks,
|
||||
(void (*)(void *))ipw_merge_adhoc_network, priv);
|
||||
INIT_DELAYED_WORK(&priv->adhoc_check, ipw_bg_adhoc_check);
|
||||
INIT_WORK(&priv->associate, ipw_bg_associate);
|
||||
INIT_WORK(&priv->disassociate, ipw_bg_disassociate);
|
||||
INIT_WORK(&priv->system_config, ipw_system_config);
|
||||
INIT_WORK(&priv->rx_replenish, ipw_bg_rx_queue_replenish);
|
||||
INIT_WORK(&priv->adapter_restart, ipw_bg_adapter_restart);
|
||||
INIT_DELAYED_WORK(&priv->rf_kill, ipw_bg_rf_kill);
|
||||
INIT_WORK(&priv->up, ipw_bg_up);
|
||||
INIT_WORK(&priv->down, ipw_bg_down);
|
||||
INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan);
|
||||
INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
|
||||
INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats);
|
||||
INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan);
|
||||
INIT_WORK(&priv->roam, ipw_bg_roam);
|
||||
INIT_DELAYED_WORK(&priv->scan_check, ipw_bg_scan_check);
|
||||
INIT_WORK(&priv->link_up, ipw_bg_link_up);
|
||||
INIT_WORK(&priv->link_down, ipw_bg_link_down);
|
||||
INIT_DELAYED_WORK(&priv->led_link_on, ipw_bg_led_link_on);
|
||||
INIT_DELAYED_WORK(&priv->led_link_off, ipw_bg_led_link_off);
|
||||
INIT_DELAYED_WORK(&priv->led_act_off, ipw_bg_led_activity_off);
|
||||
INIT_WORK(&priv->merge_networks, ipw_merge_adhoc_network);
|
||||
|
||||
#ifdef CONFIG_IPW2200_QOS
|
||||
INIT_WORK(&priv->qos_activate, (void (*)(void *))ipw_bg_qos_activate,
|
||||
priv);
|
||||
INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate);
|
||||
#endif /* CONFIG_IPW2200_QOS */
|
||||
|
||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||
|
|
@ -11190,7 +11206,8 @@ static int ipw_up(struct ipw_priv *priv)
|
|||
|
||||
/* If configure to try and auto-associate, kick
|
||||
* off a scan. */
|
||||
queue_work(priv->workqueue, &priv->request_scan);
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->request_scan, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -11211,11 +11228,12 @@ static int ipw_up(struct ipw_priv *priv)
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
static void ipw_bg_up(void *data)
|
||||
static void ipw_bg_up(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, up);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_up(data);
|
||||
ipw_up(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
@ -11282,11 +11300,12 @@ static void ipw_down(struct ipw_priv *priv)
|
|||
ipw_led_radio_off(priv);
|
||||
}
|
||||
|
||||
static void ipw_bg_down(void *data)
|
||||
static void ipw_bg_down(struct work_struct *work)
|
||||
{
|
||||
struct ipw_priv *priv = data;
|
||||
struct ipw_priv *priv =
|
||||
container_of(work, struct ipw_priv, down);
|
||||
mutex_lock(&priv->mutex);
|
||||
ipw_down(data);
|
||||
ipw_down(priv);
|
||||
mutex_unlock(&priv->mutex);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1290,21 +1290,21 @@ struct ipw_priv {
|
|||
|
||||
struct workqueue_struct *workqueue;
|
||||
|
||||
struct work_struct adhoc_check;
|
||||
struct delayed_work adhoc_check;
|
||||
struct work_struct associate;
|
||||
struct work_struct disassociate;
|
||||
struct work_struct system_config;
|
||||
struct work_struct rx_replenish;
|
||||
struct work_struct request_scan;
|
||||
struct delayed_work request_scan;
|
||||
struct work_struct request_passive_scan;
|
||||
struct work_struct adapter_restart;
|
||||
struct work_struct rf_kill;
|
||||
struct delayed_work rf_kill;
|
||||
struct work_struct up;
|
||||
struct work_struct down;
|
||||
struct work_struct gather_stats;
|
||||
struct delayed_work gather_stats;
|
||||
struct work_struct abort_scan;
|
||||
struct work_struct roam;
|
||||
struct work_struct scan_check;
|
||||
struct delayed_work scan_check;
|
||||
struct work_struct link_up;
|
||||
struct work_struct link_down;
|
||||
|
||||
|
|
@ -1319,9 +1319,9 @@ struct ipw_priv {
|
|||
u32 led_ofdm_on;
|
||||
u32 led_ofdm_off;
|
||||
|
||||
struct work_struct led_link_on;
|
||||
struct work_struct led_link_off;
|
||||
struct work_struct led_act_off;
|
||||
struct delayed_work led_link_on;
|
||||
struct delayed_work led_link_off;
|
||||
struct delayed_work led_act_off;
|
||||
struct work_struct merge_networks;
|
||||
|
||||
struct ipw_cmd_log *cmdlog;
|
||||
|
|
|
|||
|
|
@ -735,31 +735,13 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
|||
static int netwave_pcmcia_config(struct pcmcia_device *link) {
|
||||
struct net_device *dev = link->priv;
|
||||
netwave_private *priv = netdev_priv(dev);
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
int i, j, last_ret, last_fn;
|
||||
u_char buf[64];
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
u_char __iomem *ramBase = NULL;
|
||||
|
||||
DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
|
||||
|
||||
/*
|
||||
This reads the card's CONFIG tuple to find its configuration
|
||||
registers.
|
||||
*/
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = (cisdata_t *) buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/*
|
||||
* Try allocating IO ports. This tries a few fixed addresses.
|
||||
* If you want, you can also read the card's config table to
|
||||
|
|
|
|||
|
|
@ -980,9 +980,11 @@ static void print_linkstatus(struct net_device *dev, u16 status)
|
|||
}
|
||||
|
||||
/* Search scan results for requested BSSID, join it if found */
|
||||
static void orinoco_join_ap(struct net_device *dev)
|
||||
static void orinoco_join_ap(struct work_struct *work)
|
||||
{
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_private *priv =
|
||||
container_of(work, struct orinoco_private, join_work);
|
||||
struct net_device *dev = priv->ndev;
|
||||
struct hermes *hw = &priv->hw;
|
||||
int err;
|
||||
unsigned long flags;
|
||||
|
|
@ -1055,9 +1057,11 @@ static void orinoco_join_ap(struct net_device *dev)
|
|||
}
|
||||
|
||||
/* Send new BSSID to userspace */
|
||||
static void orinoco_send_wevents(struct net_device *dev)
|
||||
static void orinoco_send_wevents(struct work_struct *work)
|
||||
{
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_private *priv =
|
||||
container_of(work, struct orinoco_private, wevent_work);
|
||||
struct net_device *dev = priv->ndev;
|
||||
struct hermes *hw = &priv->hw;
|
||||
union iwreq_data wrqu;
|
||||
int err;
|
||||
|
|
@ -1864,9 +1868,11 @@ __orinoco_set_multicast_list(struct net_device *dev)
|
|||
|
||||
/* This must be called from user context, without locks held - use
|
||||
* schedule_work() */
|
||||
static void orinoco_reset(struct net_device *dev)
|
||||
static void orinoco_reset(struct work_struct *work)
|
||||
{
|
||||
struct orinoco_private *priv = netdev_priv(dev);
|
||||
struct orinoco_private *priv =
|
||||
container_of(work, struct orinoco_private, reset_work);
|
||||
struct net_device *dev = priv->ndev;
|
||||
struct hermes *hw = &priv->hw;
|
||||
int err;
|
||||
unsigned long flags;
|
||||
|
|
@ -2434,9 +2440,9 @@ struct net_device *alloc_orinocodev(int sizeof_card,
|
|||
priv->hw_unavailable = 1; /* orinoco_init() must clear this
|
||||
* before anything else touches the
|
||||
* hardware */
|
||||
INIT_WORK(&priv->reset_work, (void (*)(void *))orinoco_reset, dev);
|
||||
INIT_WORK(&priv->join_work, (void (*)(void *))orinoco_join_ap, dev);
|
||||
INIT_WORK(&priv->wevent_work, (void (*)(void *))orinoco_send_wevents, dev);
|
||||
INIT_WORK(&priv->reset_work, orinoco_reset);
|
||||
INIT_WORK(&priv->join_work, orinoco_join_ap);
|
||||
INIT_WORK(&priv->wevent_work, orinoco_send_wevents);
|
||||
|
||||
netif_carrier_off(dev);
|
||||
priv->last_linkstatus = 0xffff;
|
||||
|
|
@ -3608,7 +3614,7 @@ static int orinoco_ioctl_reset(struct net_device *dev,
|
|||
printk(KERN_DEBUG "%s: Forcing reset!\n", dev->name);
|
||||
|
||||
/* Firmware reset */
|
||||
orinoco_reset(dev);
|
||||
orinoco_reset(&priv->reset_work);
|
||||
} else {
|
||||
printk(KERN_DEBUG "%s: Force scheduling reset!\n", dev->name);
|
||||
|
||||
|
|
@ -4154,7 +4160,7 @@ static int orinoco_ioctl_commit(struct net_device *dev,
|
|||
return 0;
|
||||
|
||||
if (priv->broken_disableport) {
|
||||
orinoco_reset(dev);
|
||||
orinoco_reset(&priv->reset_work);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -178,21 +178,6 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||
cisparse_t parse;
|
||||
void __iomem *mem;
|
||||
|
||||
/*
|
||||
* This reads the card's CONFIG tuple to find its
|
||||
* configuration registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
|
@ -211,6 +196,10 @@ orinoco_cs_config(struct pcmcia_device *link)
|
|||
* and most client drivers will only use the CIS to fill in
|
||||
* implementation-defined details.
|
||||
*/
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
|
|
|
|||
|
|
@ -157,8 +157,9 @@ prism54_mib_init(islpci_private *priv)
|
|||
* schedule_work(), thus we can as well use sleeping semaphore
|
||||
* locking */
|
||||
void
|
||||
prism54_update_stats(islpci_private *priv)
|
||||
prism54_update_stats(struct work_struct *work)
|
||||
{
|
||||
islpci_private *priv = container_of(work, islpci_private, stats_work);
|
||||
char *data;
|
||||
int j;
|
||||
struct obj_bss bss, *bss2;
|
||||
|
|
@ -2493,9 +2494,10 @@ prism54_process_trap_helper(islpci_private *priv, enum oid_num_t oid,
|
|||
* interrupt context, no locks held.
|
||||
*/
|
||||
void
|
||||
prism54_process_trap(void *data)
|
||||
prism54_process_trap(struct work_struct *work)
|
||||
{
|
||||
struct islpci_mgmtframe *frame = data;
|
||||
struct islpci_mgmtframe *frame =
|
||||
container_of(work, struct islpci_mgmtframe, ws);
|
||||
struct net_device *ndev = frame->ndev;
|
||||
enum oid_num_t n = mgt_oidtonum(frame->header->oid);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@
|
|||
void prism54_mib_init(islpci_private *);
|
||||
|
||||
struct iw_statistics *prism54_get_wireless_stats(struct net_device *);
|
||||
void prism54_update_stats(islpci_private *);
|
||||
void prism54_update_stats(struct work_struct *);
|
||||
|
||||
void prism54_acl_init(struct islpci_acl *);
|
||||
void prism54_acl_clean(struct islpci_acl *);
|
||||
|
||||
void prism54_process_trap(void *);
|
||||
void prism54_process_trap(struct work_struct *);
|
||||
|
||||
void prism54_wpa_bss_ie_init(islpci_private *priv);
|
||||
void prism54_wpa_bss_ie_clean(islpci_private *priv);
|
||||
|
|
|
|||
|
|
@ -860,11 +860,10 @@ islpci_setup(struct pci_dev *pdev)
|
|||
priv->state_off = 1;
|
||||
|
||||
/* initialize workqueue's */
|
||||
INIT_WORK(&priv->stats_work,
|
||||
(void (*)(void *)) prism54_update_stats, priv);
|
||||
INIT_WORK(&priv->stats_work, prism54_update_stats);
|
||||
priv->stats_timestamp = 0;
|
||||
|
||||
INIT_WORK(&priv->reset_task, islpci_do_reset_and_wake, priv);
|
||||
INIT_WORK(&priv->reset_task, islpci_do_reset_and_wake);
|
||||
priv->reset_task_pending = 0;
|
||||
|
||||
/* allocate various memory areas */
|
||||
|
|
|
|||
|
|
@ -480,9 +480,9 @@ islpci_eth_receive(islpci_private *priv)
|
|||
}
|
||||
|
||||
void
|
||||
islpci_do_reset_and_wake(void *data)
|
||||
islpci_do_reset_and_wake(struct work_struct *work)
|
||||
{
|
||||
islpci_private *priv = data;
|
||||
islpci_private *priv = container_of(work, islpci_private, reset_task);
|
||||
|
||||
islpci_reset(priv, 1);
|
||||
priv->reset_task_pending = 0;
|
||||
|
|
|
|||
|
|
@ -67,6 +67,6 @@ void islpci_eth_cleanup_transmit(islpci_private *, isl38xx_control_block *);
|
|||
int 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(void *data);
|
||||
void islpci_do_reset_and_wake(struct work_struct *);
|
||||
|
||||
#endif /* _ISL_GEN_H */
|
||||
|
|
|
|||
|
|
@ -386,7 +386,7 @@ islpci_mgt_receive(struct net_device *ndev)
|
|||
|
||||
/* Create work to handle trap out of interrupt
|
||||
* context. */
|
||||
INIT_WORK(&frame->ws, prism54_process_trap, frame);
|
||||
INIT_WORK(&frame->ws, prism54_process_trap);
|
||||
schedule_work(&frame->ws);
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -408,11 +408,8 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
|||
#define MAX_TUPLE_SIZE 128
|
||||
static int ray_config(struct pcmcia_device *link)
|
||||
{
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
int last_fn = 0, last_ret = 0;
|
||||
int i;
|
||||
u_char buf[MAX_TUPLE_SIZE];
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
struct net_device *dev = (struct net_device *)link->priv;
|
||||
|
|
@ -420,29 +417,12 @@ static int ray_config(struct pcmcia_device *link)
|
|||
|
||||
DEBUG(1, "ray_config(0x%p)\n", link);
|
||||
|
||||
/* This reads the card's CONFIG tuple to find its configuration regs */
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = MAX_TUPLE_SIZE;
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Determine card type and firmware version */
|
||||
buf[0] = buf[MAX_TUPLE_SIZE - 1] = 0;
|
||||
tuple.DesiredTuple = CISTPL_VERS_1;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = MAX_TUPLE_SIZE;
|
||||
tuple.TupleOffset = 2;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
|
||||
for (i=0; i<tuple.TupleDataLen - 4; i++)
|
||||
if (buf[i] == 0) buf[i] = ' ';
|
||||
printk(KERN_INFO "ray_cs Detected: %s\n",buf);
|
||||
printk(KERN_INFO "ray_cs Detected: %s%s%s%s\n",
|
||||
link->prod_id[0] ? link->prod_id[0] : " ",
|
||||
link->prod_id[1] ? link->prod_id[1] : " ",
|
||||
link->prod_id[2] ? link->prod_id[2] : " ",
|
||||
link->prod_id[3] ? link->prod_id[3] : " ");
|
||||
|
||||
/* Now allocate an interrupt line. Note that this does not
|
||||
actually assign a handler to the interrupt.
|
||||
|
|
|
|||
|
|
@ -647,21 +647,6 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||
cisparse_t parse;
|
||||
void __iomem *mem;
|
||||
|
||||
/*
|
||||
* This reads the card's CONFIG tuple to find its
|
||||
* configuration registers.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Look up the current Vcc */
|
||||
CS_CHECK(GetConfigurationInfo,
|
||||
pcmcia_get_configuration_info(link, &conf));
|
||||
|
|
@ -681,6 +666,10 @@ spectrum_cs_config(struct pcmcia_device *link)
|
|||
* implementation-defined details.
|
||||
*/
|
||||
tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
|
||||
tuple.Attributes = 0;
|
||||
tuple.TupleData = buf;
|
||||
tuple.TupleDataMax = sizeof(buf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
while (1) {
|
||||
cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
|
||||
|
|
|
|||
|
|
@ -3939,11 +3939,8 @@ wv_hw_reset(struct net_device * dev)
|
|||
static inline int
|
||||
wv_pcmcia_config(struct pcmcia_device * link)
|
||||
{
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
struct net_device * dev = (struct net_device *) link->priv;
|
||||
int i;
|
||||
u_char buf[64];
|
||||
win_req_t req;
|
||||
memreq_t mem;
|
||||
net_local * lp = netdev_priv(dev);
|
||||
|
|
@ -3953,36 +3950,6 @@ wv_pcmcia_config(struct pcmcia_device * link)
|
|||
printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This reads the card's CONFIG tuple to find its configuration
|
||||
* registers.
|
||||
*/
|
||||
do
|
||||
{
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
i = pcmcia_get_first_tuple(link, &tuple);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
tuple.TupleData = (cisdata_t *)buf;
|
||||
tuple.TupleDataMax = 64;
|
||||
tuple.TupleOffset = 0;
|
||||
i = pcmcia_get_tuple_data(link, &tuple);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
i = pcmcia_parse_tuple(link, &tuple, &parse);
|
||||
if(i != CS_SUCCESS)
|
||||
break;
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
}
|
||||
while(0);
|
||||
if(i != CS_SUCCESS)
|
||||
{
|
||||
cs_error(link, ParseTuple, i);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
i = pcmcia_request_io(link, &link->io);
|
||||
|
|
|
|||
|
|
@ -1966,25 +1966,10 @@ do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
|
|||
*/
|
||||
static int wl3501_config(struct pcmcia_device *link)
|
||||
{
|
||||
tuple_t tuple;
|
||||
cisparse_t parse;
|
||||
struct net_device *dev = link->priv;
|
||||
int i = 0, j, last_fn, last_ret;
|
||||
unsigned char bf[64];
|
||||
struct wl3501_card *this;
|
||||
|
||||
/* This reads the card's CONFIG tuple to find its config registers. */
|
||||
tuple.Attributes = 0;
|
||||
tuple.DesiredTuple = CISTPL_CONFIG;
|
||||
CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
|
||||
tuple.TupleData = bf;
|
||||
tuple.TupleDataMax = sizeof(bf);
|
||||
tuple.TupleOffset = 0;
|
||||
CS_CHECK(GetTupleData, pcmcia_get_tuple_data(link, &tuple));
|
||||
CS_CHECK(ParseTuple, pcmcia_parse_tuple(link, &tuple, &parse));
|
||||
link->conf.ConfigBase = parse.config.base;
|
||||
link->conf.Present = parse.config.rmask[0];
|
||||
|
||||
/* Try allocating IO ports. This tries a few fixed addresses. If you
|
||||
* want, you can also read the card's config table to pick addresses --
|
||||
* see the serial driver for an example. */
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@
|
|||
|
||||
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);
|
||||
|
|
@ -48,8 +48,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);
|
||||
|
||||
ieee_init(ieee);
|
||||
softmac_init(ieee80211_priv(netdev));
|
||||
|
|
@ -366,9 +366,10 @@ static void try_enable_tx(struct zd_mac *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;
|
||||
|
|
@ -387,9 +388,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;
|
||||
|
||||
|
|
@ -467,12 +469,13 @@ static void bssinfo_change(struct net_device *netdev, u32 changes)
|
|||
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);
|
||||
}
|
||||
|
|
@ -1182,9 +1185,10 @@ struct iw_statistics *zd_mac_get_wireless_stats(struct net_device *ndev)
|
|||
|
||||
#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 = p;
|
||||
struct zd_mac *mac =
|
||||
container_of(work, struct zd_mac, housekeeping.link_led_work.work);
|
||||
struct zd_chip *chip = &mac->chip;
|
||||
struct ieee80211softmac_device *sm = ieee80211_priv(mac->netdev);
|
||||
int is_associated;
|
||||
|
|
@ -1205,7 +1209,7 @@ static void link_led_handler(void *p)
|
|||
|
||||
static void housekeeping_init(struct zd_mac *mac)
|
||||
{
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ struct rx_status {
|
|||
#define ZD_RX_ERROR 0x80
|
||||
|
||||
struct housekeeping {
|
||||
struct work_struct link_led_work;
|
||||
struct delayed_work link_led_work;
|
||||
};
|
||||
|
||||
#define ZD_MAC_STATS_BUFFER_SIZE 16
|
||||
|
|
@ -133,8 +133,8 @@ struct zd_mac {
|
|||
struct iw_statistics iw_stats;
|
||||
|
||||
struct housekeeping housekeeping;
|
||||
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;
|
||||
|
||||
unsigned int stats_count;
|
||||
u8 qual_buffer[ZD_MAC_STATS_BUFFER_SIZE];
|
||||
|
|
|
|||
Loading…
Reference in a new issue