Commit afe1ba38 authored by Jeff Garzik's avatar Jeff Garzik

Merge redhat.com:/garz/repo/linus-2.5

into redhat.com:/garz/repo/net-drivers-2.5
parents 09c49f76 8d7a36f3
...@@ -18,7 +18,8 @@ dev->open: ...@@ -18,7 +18,8 @@ dev->open:
dev->stop: dev->stop:
Synchronization: rtnl_lock() semaphore. Synchronization: rtnl_lock() semaphore.
Context: process Context: process
Notes: netif_running() is guaranteed false when this is called Note1: netif_running() is guaranteed false
Note2: dev->poll() is guaranteed to be stopped
dev->do_ioctl: dev->do_ioctl:
Synchronization: rtnl_lock() semaphore. Synchronization: rtnl_lock() semaphore.
...@@ -31,10 +32,12 @@ dev->get_stats: ...@@ -31,10 +32,12 @@ dev->get_stats:
dev->hard_start_xmit: dev->hard_start_xmit:
Synchronization: dev->xmit_lock spinlock. Synchronization: dev->xmit_lock spinlock.
Context: BHs disabled Context: BHs disabled
Notes: netif_queue_stopped() is guaranteed false
dev->tx_timeout: dev->tx_timeout:
Synchronization: dev->xmit_lock spinlock. Synchronization: dev->xmit_lock spinlock.
Context: BHs disabled Context: BHs disabled
Notes: netif_queue_stopped() is guaranteed true
dev->set_multicast_list: dev->set_multicast_list:
Synchronization: dev->xmit_lock spinlock. Synchronization: dev->xmit_lock spinlock.
......
...@@ -153,19 +153,5 @@ config PCMCIA_IBMTR ...@@ -153,19 +153,5 @@ config PCMCIA_IBMTR
The module will be called ibmtr_cs. If you want to compile it as The module will be called ibmtr_cs. If you want to compile it as
a module, say M here and read <file:Documentation/modules.txt>. a module, say M here and read <file:Documentation/modules.txt>.
config AIRONET4500_CS
tristate "Aironet 4500/4800 PCMCIA support"
depends on NET_PCMCIA_RADIO && AIRONET4500 && PCMCIA
help
Say Y here if you have a PCMCIA Aironet 4500/4800 card which you
want to use with the standard PCMCIA cardservices provided by the
pcmcia-cs package.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called aironet4500_cs. If you want to
compile it as a module, say M here and read
<file:Documentation/modules.txt>.
endmenu endmenu
...@@ -13,7 +13,4 @@ obj-$(CONFIG_PCMCIA_XIRC2PS) += xirc2ps_cs.o ...@@ -13,7 +13,4 @@ obj-$(CONFIG_PCMCIA_XIRC2PS) += xirc2ps_cs.o
obj-$(CONFIG_ARCNET_COM20020_CS)+= com20020_cs.o obj-$(CONFIG_ARCNET_COM20020_CS)+= com20020_cs.o
obj-$(CONFIG_PCMCIA_AXNET) += axnet_cs.o obj-$(CONFIG_PCMCIA_AXNET) += axnet_cs.o
# 16-bit wireless client drivers
obj-$(CONFIG_AIRONET4500_CS) += aironet4500_cs.o
obj-$(CONFIG_PCMCIA_IBMTR) += ibmtr_cs.o obj-$(CONFIG_PCMCIA_IBMTR) += ibmtr_cs.o
This diff is collapsed.
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/if_vlan.h> #include <linux/if_vlan.h>
#include <linux/ip.h> #include <linux/ip.h>
#include <linux/tcp.h> #include <linux/tcp.h>
#include <linux/workqueue.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -54,8 +55,8 @@ ...@@ -54,8 +55,8 @@
#define DRV_MODULE_NAME "tg3" #define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": " #define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "1.4" #define DRV_MODULE_VERSION "1.4c"
#define DRV_MODULE_RELDATE "Feb 1, 2003" #define DRV_MODULE_RELDATE "Feb 18, 2003"
#define TG3_DEF_MAC_MODE 0 #define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0 #define TG3_DEF_RX_MODE 0
...@@ -216,6 +217,12 @@ static void tg3_disable_ints(struct tg3 *tp) ...@@ -216,6 +217,12 @@ static void tg3_disable_ints(struct tg3 *tp)
tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW); tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW);
} }
static inline void tg3_cond_int(struct tg3 *tp)
{
if (tp->hw_status->status & SD_STATUS_UPDATED)
tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
}
static void tg3_enable_ints(struct tg3 *tp) static void tg3_enable_ints(struct tg3 *tp)
{ {
tw32(TG3PCI_MISC_HOST_CTRL, tw32(TG3PCI_MISC_HOST_CTRL,
...@@ -223,9 +230,55 @@ static void tg3_enable_ints(struct tg3 *tp) ...@@ -223,9 +230,55 @@ static void tg3_enable_ints(struct tg3 *tp)
tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000000); tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 0x00000000);
tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW); tr32(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW);
if (tp->hw_status->status & SD_STATUS_UPDATED) tg3_cond_int(tp);
tw32(GRC_LOCAL_CTRL, }
tp->grc_local_ctrl | GRC_LCLCTRL_SETINT);
/* these netif_xxx funcs should be moved into generic net layer */
static void netif_poll_disable(struct net_device *dev)
{
while (test_and_set_bit(__LINK_STATE_RX_SCHED, &dev->state)) {
current->state = TASK_INTERRUPTIBLE;
schedule_timeout(1);
}
}
static inline void netif_poll_enable(struct net_device *dev)
{
clear_bit(__LINK_STATE_RX_SCHED, &dev->state);
}
/* same as netif_rx_complete, except that local_irq_save(flags)
* has already been issued
*/
static inline void __netif_rx_complete(struct net_device *dev)
{
if (!test_bit(__LINK_STATE_RX_SCHED, &dev->state)) BUG();
list_del(&dev->poll_list);
clear_bit(__LINK_STATE_RX_SCHED, &dev->state);
}
static inline void netif_tx_disable(struct net_device *dev)
{
spin_lock_bh(&dev->xmit_lock);
netif_stop_queue(dev);
spin_unlock_bh(&dev->xmit_lock);
}
static inline void tg3_netif_stop(struct tg3 *tp)
{
netif_poll_disable(tp->dev);
netif_tx_disable(tp->dev);
}
static inline void tg3_netif_start(struct tg3 *tp)
{
netif_wake_queue(tp->dev);
/* NOTE: unconditional netif_wake_queue is only appropriate
* so long as all callers are assured to have free tx slots
* (such as after tg3_init_hw)
*/
netif_poll_enable(tp->dev);
tg3_cond_int(tp);
} }
static void tg3_switch_clocks(struct tg3 *tp) static void tg3_switch_clocks(struct tg3 *tp)
...@@ -387,7 +440,6 @@ static int tg3_phy_reset(struct tg3 *tp, int force) ...@@ -387,7 +440,6 @@ static int tg3_phy_reset(struct tg3 *tp, int force)
} }
static int tg3_setup_phy(struct tg3 *); static int tg3_setup_phy(struct tg3 *);
static int tg3_halt(struct tg3 *);
static int tg3_set_power_state(struct tg3 *tp, int state) static int tg3_set_power_state(struct tg3 *tp, int state)
{ {
...@@ -458,8 +510,6 @@ static int tg3_set_power_state(struct tg3 *tp, int state) ...@@ -458,8 +510,6 @@ static int tg3_set_power_state(struct tg3 *tp, int state)
tg3_setup_phy(tp); tg3_setup_phy(tp);
} }
tg3_halt(tp);
pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps); pci_read_config_word(tp->pdev, pm + PCI_PM_PMC, &power_caps);
if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) { if (tp->tg3_flags & TG3_FLAG_WOL_ENABLE) {
...@@ -2044,7 +2094,12 @@ static int tg3_poll(struct net_device *netdev, int *budget) ...@@ -2044,7 +2094,12 @@ static int tg3_poll(struct net_device *netdev, int *budget)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
} }
/* run RX thread, within the bounds set by NAPI */ spin_unlock_irqrestore(&tp->lock, flags);
/* run RX thread, within the bounds set by NAPI.
* All RX "locking" is done by ensuring outside
* code synchronizes with dev->poll()
*/
done = 1; done = 1;
if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) { if (sblk->idx[0].rx_producer != tp->rx_rcb_ptr) {
int orig_budget = *budget; int orig_budget = *budget;
...@@ -2064,11 +2119,11 @@ static int tg3_poll(struct net_device *netdev, int *budget) ...@@ -2064,11 +2119,11 @@ static int tg3_poll(struct net_device *netdev, int *budget)
/* if no more work, tell net stack and NIC we're done */ /* if no more work, tell net stack and NIC we're done */
if (done) { if (done) {
netif_rx_complete(netdev); spin_lock_irqsave(&tp->lock, flags);
__netif_rx_complete(netdev);
tg3_enable_ints(tp); tg3_enable_ints(tp);
}
spin_unlock_irqrestore(&tp->lock, flags); spin_unlock_irqrestore(&tp->lock, flags);
}
return (done ? 0 : 1); return (done ? 0 : 1);
} }
...@@ -2136,17 +2191,21 @@ static void tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -2136,17 +2191,21 @@ static void tg3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
static void tg3_init_rings(struct tg3 *); static void tg3_init_rings(struct tg3 *);
static int tg3_init_hw(struct tg3 *); static int tg3_init_hw(struct tg3 *);
static int tg3_halt(struct tg3 *);
static void tg3_tx_timeout(struct net_device *dev) static void tg3_reset_task(void *_data)
{ {
struct tg3 *tp = dev->priv; struct tg3 *tp = _data;
unsigned int restart_timer;
printk(KERN_ERR PFX "%s: transmit timed out, resetting\n", tg3_netif_stop(tp);
dev->name);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
restart_timer = tp->tg3_flags2 & TG3_FLG2_RESTART_TIMER;
tp->tg3_flags2 &= ~TG3_FLG2_RESTART_TIMER;
tg3_halt(tp); tg3_halt(tp);
tg3_init_rings(tp); tg3_init_rings(tp);
tg3_init_hw(tp); tg3_init_hw(tp);
...@@ -2154,7 +2213,20 @@ static void tg3_tx_timeout(struct net_device *dev) ...@@ -2154,7 +2213,20 @@ static void tg3_tx_timeout(struct net_device *dev)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
netif_wake_queue(dev); tg3_netif_start(tp);
if (restart_timer)
mod_timer(&tp->timer, jiffies + 1);
}
static void tg3_tx_timeout(struct net_device *dev)
{
struct tg3 *tp = dev->priv;
printk(KERN_ERR PFX "%s: transmit timed out, resetting\n",
dev->name);
schedule_work(&tp->reset_task);
} }
#if !PCI_DMA_BUS_IS_PHYS #if !PCI_DMA_BUS_IS_PHYS
...@@ -2686,6 +2758,7 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu) ...@@ -2686,6 +2758,7 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
return 0; return 0;
} }
tg3_netif_stop(tp);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
...@@ -2698,6 +2771,7 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu) ...@@ -2698,6 +2771,7 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
tg3_netif_start(tp);
return 0; return 0;
} }
...@@ -3073,6 +3147,7 @@ static int tg3_abort_hw(struct tg3 *tp) ...@@ -3073,6 +3147,7 @@ static int tg3_abort_hw(struct tg3 *tp)
static void tg3_chip_reset(struct tg3 *tp) static void tg3_chip_reset(struct tg3 *tp)
{ {
u32 val; u32 val;
u32 flags_save;
/* Force NVRAM to settle. /* Force NVRAM to settle.
* This deals with a chip bug which can result in EEPROM * This deals with a chip bug which can result in EEPROM
...@@ -3089,8 +3164,21 @@ static void tg3_chip_reset(struct tg3 *tp) ...@@ -3089,8 +3164,21 @@ static void tg3_chip_reset(struct tg3 *tp)
} }
} }
/*
* We must avoid the readl() that normally takes place.
* It locks machines, causes machine checks, and other
* fun things. So, temporarily disable the 5701
* hardware workaround, while we do the reset.
*/
flags_save = tp->tg3_flags;
tp->tg3_flags &= ~TG3_FLAG_5701_REG_WRITE_BUG;
/* do the reset */
tw32(GRC_MISC_CFG, GRC_MISC_CFG_CORECLK_RESET); tw32(GRC_MISC_CFG, GRC_MISC_CFG_CORECLK_RESET);
/* restore 5701 hardware bug workaround flag */
tp->tg3_flags = flags_save;
/* Flush PCI posted writes. The normal MMIO registers /* Flush PCI posted writes. The normal MMIO registers
* are inaccessible at this time so this is the only * are inaccessible at this time so this is the only
* way to make this reliably. I tried to use indirect * way to make this reliably. I tried to use indirect
...@@ -4394,9 +4482,11 @@ static void tg3_timer(unsigned long __opaque) ...@@ -4394,9 +4482,11 @@ static void tg3_timer(unsigned long __opaque)
} }
if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) { if (!(tr32(WDMAC_MODE) & WDMAC_MODE_ENABLE)) {
tg3_halt(tp); tp->tg3_flags2 |= TG3_FLG2_RESTART_TIMER;
tg3_init_rings(tp); spin_unlock(&tp->tx_lock);
tg3_init_hw(tp); spin_unlock_irqrestore(&tp->lock, flags);
schedule_work(&tp->reset_task);
return;
} }
/* This part only runs once per second. */ /* This part only runs once per second. */
...@@ -4527,8 +4617,6 @@ static int tg3_open(struct net_device *dev) ...@@ -4527,8 +4617,6 @@ static int tg3_open(struct net_device *dev)
return err; return err;
} }
netif_start_queue(dev);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
...@@ -4537,6 +4625,8 @@ static int tg3_open(struct net_device *dev) ...@@ -4537,6 +4625,8 @@ static int tg3_open(struct net_device *dev)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
netif_start_queue(dev);
return 0; return 0;
} }
...@@ -5302,6 +5392,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr) ...@@ -5302,6 +5392,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr)
(ering.tx_pending > TG3_TX_RING_SIZE - 1)) (ering.tx_pending > TG3_TX_RING_SIZE - 1))
return -EINVAL; return -EINVAL;
tg3_netif_stop(tp);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
...@@ -5315,6 +5406,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr) ...@@ -5315,6 +5406,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr)
netif_wake_queue(tp->dev); netif_wake_queue(tp->dev);
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
tg3_netif_start(tp);
return 0; return 0;
} }
...@@ -5337,6 +5429,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr) ...@@ -5337,6 +5429,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr)
if (copy_from_user(&epause, useraddr, sizeof(epause))) if (copy_from_user(&epause, useraddr, sizeof(epause)))
return -EFAULT; return -EFAULT;
tg3_netif_stop(tp);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
if (epause.autoneg) if (epause.autoneg)
...@@ -5356,6 +5449,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr) ...@@ -5356,6 +5449,7 @@ static int tg3_ethtool_ioctl (struct net_device *dev, void *useraddr)
tg3_init_hw(tp); tg3_init_hw(tp);
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
tg3_netif_start(tp);
return 0; return 0;
} }
...@@ -6710,6 +6804,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, ...@@ -6710,6 +6804,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
spin_lock_init(&tp->lock); spin_lock_init(&tp->lock);
spin_lock_init(&tp->tx_lock); spin_lock_init(&tp->tx_lock);
spin_lock_init(&tp->indirect_lock); spin_lock_init(&tp->indirect_lock);
PREPARE_WORK(&tp->reset_task, tg3_reset_task, tp);
tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len); tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len);
if (tp->regs == 0UL) { if (tp->regs == 0UL) {
...@@ -6851,6 +6946,8 @@ static int tg3_suspend(struct pci_dev *pdev, u32 state) ...@@ -6851,6 +6946,8 @@ static int tg3_suspend(struct pci_dev *pdev, u32 state)
if (!netif_running(dev)) if (!netif_running(dev))
return 0; return 0;
tg3_netif_stop(tp);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock); spin_lock(&tp->tx_lock);
tg3_disable_ints(tp); tg3_disable_ints(tp);
...@@ -6877,6 +6974,7 @@ static int tg3_suspend(struct pci_dev *pdev, u32 state) ...@@ -6877,6 +6974,7 @@ static int tg3_suspend(struct pci_dev *pdev, u32 state)
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
netif_device_attach(dev); netif_device_attach(dev);
tg3_netif_start(tp);
} }
return err; return err;
...@@ -6907,6 +7005,8 @@ static int tg3_resume(struct pci_dev *pdev) ...@@ -6907,6 +7005,8 @@ static int tg3_resume(struct pci_dev *pdev)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
tg3_netif_start(tp);
return 0; return 0;
} }
......
...@@ -1821,6 +1821,8 @@ struct tg3 { ...@@ -1821,6 +1821,8 @@ struct tg3 {
#define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000 #define TG3_FLAG_GOT_SERDES_FLOWCTL 0x20000000
#define TG3_FLAG_SPLIT_MODE 0x40000000 #define TG3_FLAG_SPLIT_MODE 0x40000000
#define TG3_FLAG_INIT_COMPLETE 0x80000000 #define TG3_FLAG_INIT_COMPLETE 0x80000000
u32 tg3_flags2;
#define TG3_FLG2_RESTART_TIMER 0x00000001
u32 split_mode_max_reqs; u32 split_mode_max_reqs;
#define SPLIT_MODE_5704_MAX_REQ 3 #define SPLIT_MODE_5704_MAX_REQ 3
...@@ -1889,6 +1891,7 @@ struct tg3 { ...@@ -1889,6 +1891,7 @@ struct tg3 {
struct tg3_hw_stats *hw_stats; struct tg3_hw_stats *hw_stats;
dma_addr_t stats_mapping; dma_addr_t stats_mapping;
struct work_struct reset_task;
}; };
#endif /* !(_T3_H) */ #endif /* !(_T3_H) */
...@@ -6,13 +6,13 @@ menu "Wireless LAN (non-hamradio)" ...@@ -6,13 +6,13 @@ menu "Wireless LAN (non-hamradio)"
depends on NETDEVICES depends on NETDEVICES
config NET_RADIO config NET_RADIO
bool "Wireless LAN (non-hamradio)" bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions"
---help--- ---help---
Support for wireless LANs and everything having to do with radio, Support for wireless LANs and everything having to do with radio,
but not with amateur radio or FM broadcasting. but not with amateur radio or FM broadcasting.
Saying Y here also enables the Wireless Extensions (creates Saying Y here also enables the Wireless Extensions (creates
/proc/net/wireless and enables ifconfig access). The Wireless /proc/net/wireless and enables iwconfig access). The Wireless
Extension is a generic API allowing a driver to expose to the user Extension is a generic API allowing a driver to expose to the user
space configuration and statistics specific to common Wireless LANs. space configuration and statistics specific to common Wireless LANs.
The beauty of it is that a single set of tool can support all the The beauty of it is that a single set of tool can support all the
...@@ -28,6 +28,11 @@ config NET_RADIO ...@@ -28,6 +28,11 @@ config NET_RADIO
special kernel support are available from special kernel support are available from
<ftp://shadow.cabi.net/pub/Linux/>. <ftp://shadow.cabi.net/pub/Linux/>.
# Note : the cards are obsolete (can't buy them anymore), but the drivers
# are not, as people are still using them...
comment "Obsolete Wireless cards support (pre-802.11)"
depends on NET_RADIO && (INET || ISA || PCMCIA)
config STRIP config STRIP
tristate "STRIP (Metricom starmode radio IP)" tristate "STRIP (Metricom starmode radio IP)"
depends on NET_RADIO && INET depends on NET_RADIO && INET
...@@ -68,10 +73,6 @@ config ARLAN ...@@ -68,10 +73,6 @@ config ARLAN
On some computers the card ends up in non-valid state after some On some computers the card ends up in non-valid state after some
time. Use a ping-reset script to clear it. time. Use a ping-reset script to clear it.
comment "Wireless ISA/PCI cards support"
depends on NET_RADIO && (ISA || PCI || ALL_PPC || PCMCIA)
# Good old obsolete Wavelan.
config WAVELAN config WAVELAN
tristate "AT&T/Lucent old WaveLAN & DEC RoamAbout DS ISA support" tristate "AT&T/Lucent old WaveLAN & DEC RoamAbout DS ISA support"
depends on NET_RADIO && ISA depends on NET_RADIO && ISA
...@@ -102,7 +103,54 @@ config WAVELAN ...@@ -102,7 +103,54 @@ config WAVELAN
module, say M here and read <file:Documentation/modules.txt> as well module, say M here and read <file:Documentation/modules.txt> as well
as <file:Documentation/networking/net-modules.txt>. as <file:Documentation/networking/net-modules.txt>.
# 802.11b cards config PCMCIA_WAVELAN
tristate "AT&T/Lucent old WaveLAN Pcmcia wireless support"
depends on NET_RADIO && PCMCIA
help
Say Y here if you intend to attach an AT&T/Lucent Wavelan PCMCIA
(PC-card) wireless Ethernet networking card to your computer. This
driver is for the non-IEEE-802.11 Wavelan cards.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called wavelan_cs. If you want to compile it
as a module, say M here and read <file:Documentation/modules.txt>.
If unsure, say N.
config PCMCIA_NETWAVE
tristate "Xircom Netwave AirSurfer Pcmcia wireless support"
depends on NET_RADIO && PCMCIA
help
Say Y here if you intend to attach this type of PCMCIA (PC-card)
wireless Ethernet networking card to your computer.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called netwave_cs. If you want to compile it
as a module, say M here and read <file:Documentation/modules.txt>.
If unsure, say N.
comment "Wireless 802.11 Frequency Hopping cards support"
depends on NET_RADIO && PCMCIA
config PCMCIA_RAYCS
tristate "Aviator/Raytheon 2.4MHz wireless support"
depends on NET_RADIO && PCMCIA
---help---
Say Y here if you intend to attach an Aviator/Raytheon PCMCIA
(PC-card) wireless Ethernet networking card to your computer.
Please read the file <file:Documentation/networking/ray_cs.txt> for
details.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called ray_cs. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>. If
unsure, say N.
comment "Wireless 802.11b ISA/PCI cards support"
depends on NET_RADIO && (ISA || PCI || ALL_PPC || PCMCIA)
config AIRO config AIRO
tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
depends on NET_RADIO && (ISA || PCI) depends on NET_RADIO && (ISA || PCI)
...@@ -175,41 +223,12 @@ config PCI_HERMES ...@@ -175,41 +223,12 @@ config PCI_HERMES
this variety. this variety.
# If Pcmcia is compiled in, offer Pcmcia cards... # If Pcmcia is compiled in, offer Pcmcia cards...
comment "Wireless Pcmcia/Cardbus cards support" comment "Wireless 802.11b Pcmcia/Cardbus cards support"
depends on NET_RADIO && PCMCIA depends on NET_RADIO && PCMCIA
# Obsolete cards
config PCMCIA_NETWAVE
tristate "Xircom Netwave AirSurfer Pcmcia wireless support"
depends on NET_RADIO && PCMCIA
help
Say Y here if you intend to attach this type of PCMCIA (PC-card)
wireless Ethernet networking card to your computer.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called netwave_cs. If you want to compile it
as a module, say M here and read <file:Documentation/modules.txt>.
If unsure, say N.
config PCMCIA_WAVELAN
tristate "AT&T/Lucent old Wavelan Pcmcia wireless support"
depends on NET_RADIO && PCMCIA
help
Say Y here if you intend to attach an AT&T/Lucent Wavelan PCMCIA
(PC-card) wireless Ethernet networking card to your computer. This
driver is for the non-IEEE-802.11 Wavelan cards.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called wavelan_cs. If you want to compile it
as a module, say M here and read <file:Documentation/modules.txt>.
If unsure, say N.
# 802.11b cards
config PCMCIA_HERMES config PCMCIA_HERMES
tristate "Hermes PCMCIA card support" tristate "Hermes PCMCIA card support"
depends on PCMCIA!=n && HERMES depends on NET_RADIO && PCMCIA && HERMES
---help--- ---help---
A driver for "Hermes" chipset based PCMCIA wireless adaptors, such A driver for "Hermes" chipset based PCMCIA wireless adaptors, such
as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/ as the Lucent WavelanIEEE/Orinoco cards and their OEM (Cabletron/
...@@ -249,34 +268,6 @@ config AIRO_CS ...@@ -249,34 +268,6 @@ config AIRO_CS
for location). You also want to check out the PCMCIA-HOWTO, for location). You also want to check out the PCMCIA-HOWTO,
available from <http://www.linuxdoc.org/docs.html#howto>. available from <http://www.linuxdoc.org/docs.html#howto>.
config NET_PCMCIA_RADIO
bool "PCMCIA Wireless LAN"
depends on NET_PCMCIA
help
Say Y here if you would like to use a PCMCIA (PC-card) device to
connect to a wireless local area network. Then say Y to the driver
for your particular card below.
To use your PC-cards, you will need supporting software from David
Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
for location). You also want to check out the PCMCIA-HOWTO,
available from <http://www.linuxdoc.org/docs.html#howto>.
config PCMCIA_RAYCS
tristate "Aviator/Raytheon 2.4MHz wireless support"
depends on NET_PCMCIA_RADIO && PCMCIA
---help---
Say Y here if you intend to attach an Aviator/Raytheon PCMCIA
(PC-card) wireless Ethernet networking card to your computer.
Please read the file <file:Documentation/networking/ray_cs.txt> for
details.
This driver is also available as a module ( = code which can be
inserted in and removed from the running kernel whenever you want).
The module will be called ray_cs. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>. If
unsure, say N.
# yes, this works even when no drivers are selected # yes, this works even when no drivers are selected
config NET_WIRELESS config NET_WIRELESS
bool bool
......
...@@ -2,28 +2,14 @@ ...@@ -2,28 +2,14 @@
------------- -------------
1) Bring other kernel Wireless LAN drivers here 1) Bring other kernel Wireless LAN drivers here
Already done : Completed
o hermes.c/orinoco.c -> Wavelan IEEE driver + Airport driver
o airo.c/airo_cs.c -> Ben's Aironet driver
o wavelan.c -> old Wavelan ISA driver
o wavelan_cs.c -> old Wavelan Pcmcia driver
o netwave_cs.c -> Netwave Pcmcia driver
Drivers likely to go :
o ray_cs.c -> Raytheon/Aviator driver (maintainer MIA)
Drivers I have absolutely no control over :
o arlan.c -> old Aironet Arlan 655 (need to ask Elmer)
o aironet4500_xxx.c -> Elmer's Aironet driver (need to ask Elmer)
o strip.c -> Metricom's stuff. Not a wlan. Hum...
ETA : Kernel 2.5.X
2) Bring new Wireless LAN driver not yet in the kernel there 2) Bring new Wireless LAN driver not yet in the kernel there
See my web page for details See my web page for details
In particular : HostAP
3) Misc 3) Misc
o Mark wavelan, wavelan_cs, netwave_cs drivers as obsolete o Mark wavelan, wavelan_cs, netwave_cs drivers as obsolete
o Maybe arlan.c, ray_cs.c and strip.c also deserve to be obsolete o Maybe arlan.c, ray_cs.c and strip.c also deserve to be obsolete
o Use new Probe/module stuff in wavelan.c
o New Wireless Extension API (pending)
Jean II Jean II
...@@ -19,5 +19,3 @@ obj-$(CONFIG_NET_DIVERT) += dv.o ...@@ -19,5 +19,3 @@ obj-$(CONFIG_NET_DIVERT) += dv.o
obj-$(CONFIG_NET_PROFILE) += profile.o obj-$(CONFIG_NET_PROFILE) += profile.o
obj-$(CONFIG_NET_PKTGEN) += pktgen.o obj-$(CONFIG_NET_PKTGEN) += pktgen.o
obj-$(CONFIG_NET_RADIO) += wireless.o obj-$(CONFIG_NET_RADIO) += wireless.o
# Ugly. I wish all wireless drivers were moved in drivers/net/wireless
obj-$(CONFIG_NET_PCMCIA_RADIO) += wireless.o
...@@ -107,10 +107,10 @@ ...@@ -107,10 +107,10 @@
#include <linux/kmod.h> #include <linux/kmod.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) #ifdef CONFIG_NET_RADIO
#include <linux/wireless.h> /* Note : will define WIRELESS_EXT */ #include <linux/wireless.h> /* Note : will define WIRELESS_EXT */
#include <net/iw_handler.h> #include <net/iw_handler.h>
#endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */ #endif /* CONFIG_NET_RADIO */
#ifdef CONFIG_PLIP #ifdef CONFIG_PLIP
extern int plip_init(void); extern int plip_init(void);
#endif #endif
......
...@@ -646,12 +646,12 @@ EXPORT_SYMBOL(register_gifconf); ...@@ -646,12 +646,12 @@ EXPORT_SYMBOL(register_gifconf);
EXPORT_SYMBOL(softnet_data); EXPORT_SYMBOL(softnet_data);
#if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) #ifdef CONFIG_NET_RADIO
/* Don't include the whole header mess for a single function */ /* Don't include the whole header mess for a single function */
union iwreq_data; union iwreq_data;
extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra); extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra);
EXPORT_SYMBOL(wireless_send_event); EXPORT_SYMBOL(wireless_send_event);
#endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */ #endif /* CONFIG_NET_RADIO */
EXPORT_SYMBOL(linkwatch_fire_event); EXPORT_SYMBOL(linkwatch_fire_event);
......
...@@ -83,9 +83,9 @@ ...@@ -83,9 +83,9 @@
#include <linux/kmod.h> #include <linux/kmod.h>
#endif #endif
#if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) #ifdef CONFIG_NET_RADIO
#include <linux/wireless.h> /* Note : will define WIRELESS_EXT */ #include <linux/wireless.h> /* Note : will define WIRELESS_EXT */
#endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */ #endif /* CONFIG_NET_RADIO */
#include <asm/uaccess.h> #include <asm/uaccess.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment