mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 01:31:44 +00:00
orinoco: add orinoco_usb driver
This driver uses the core orinoco modules for the bulk of the functionality. The low level hermes routines (for local bus cards) are replaced, the driver supplies its own ndo_xmit_start function, and locking is done with the _bh variant. Some recent functionality is not available to the USB cards yet (firmware loading and WPA). Out-of-tree driver originally written by Manuel Estrada Sainz. Thanks to Mark Davis for supplying hardware to test the updates. Signed-off-by: David Kilroy <kilroyd@googlemail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
bcad6e80f3
commit
9afac70a73
@ -132,3 +132,10 @@ config PCMCIA_SPECTRUM
|
||||
This driver requires firmware download on startup. Utilities
|
||||
for downloading Symbol firmware are available at
|
||||
<http://sourceforge.net/projects/orinoco/>
|
||||
|
||||
config ORINOCO_USB
|
||||
tristate "Agere Orinoco USB support"
|
||||
depends on USB && HERMES
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This driver is for USB versions of the Agere Orinoco card.
|
||||
|
@ -11,6 +11,7 @@ obj-$(CONFIG_PCI_HERMES) += orinoco_pci.o
|
||||
obj-$(CONFIG_TMD_HERMES) += orinoco_tmd.o
|
||||
obj-$(CONFIG_NORTEL_HERMES) += orinoco_nortel.o
|
||||
obj-$(CONFIG_PCMCIA_SPECTRUM) += spectrum_cs.o
|
||||
obj-$(CONFIG_ORINOCO_USB) += orinoco_usb.o
|
||||
|
||||
# Orinoco should be endian clean.
|
||||
ccflags-y += -D__CHECK_ENDIAN__
|
||||
|
@ -407,6 +407,7 @@ typedef struct hermes {
|
||||
#define HERMES_32BIT_REGSPACING 1
|
||||
u16 inten; /* Which interrupts should be enabled? */
|
||||
const struct hermes_ops *ops;
|
||||
void *priv;
|
||||
} hermes_t;
|
||||
|
||||
/* Register access convenience macros */
|
||||
|
@ -797,7 +797,7 @@ static void orinoco_rx_monitor(struct net_device *dev, u16 rxfid,
|
||||
stats->rx_dropped++;
|
||||
}
|
||||
|
||||
static void __orinoco_ev_rx(struct net_device *dev, hermes_t *hw)
|
||||
void __orinoco_ev_rx(struct net_device *dev, hermes_t *hw)
|
||||
{
|
||||
struct orinoco_private *priv = ndev_priv(dev);
|
||||
struct net_device_stats *stats = &priv->stats;
|
||||
@ -918,6 +918,7 @@ update_stats:
|
||||
out:
|
||||
kfree(desc);
|
||||
}
|
||||
EXPORT_SYMBOL(__orinoco_ev_rx);
|
||||
|
||||
static void orinoco_rx(struct net_device *dev,
|
||||
struct hermes_rx_descriptor *desc,
|
||||
@ -1359,7 +1360,7 @@ static void orinoco_process_scan_results(struct work_struct *work)
|
||||
spin_unlock_irqrestore(&priv->scan_lock, flags);
|
||||
}
|
||||
|
||||
static void __orinoco_ev_info(struct net_device *dev, hermes_t *hw)
|
||||
void __orinoco_ev_info(struct net_device *dev, hermes_t *hw)
|
||||
{
|
||||
struct orinoco_private *priv = ndev_priv(dev);
|
||||
u16 infofid;
|
||||
@ -1577,6 +1578,7 @@ static void __orinoco_ev_info(struct net_device *dev, hermes_t *hw)
|
||||
|
||||
return;
|
||||
}
|
||||
EXPORT_SYMBOL(__orinoco_ev_info);
|
||||
|
||||
static void __orinoco_ev_infdrop(struct net_device *dev, hermes_t *hw)
|
||||
{
|
||||
|
@ -197,6 +197,9 @@ extern int orinoco_up(struct orinoco_private *priv);
|
||||
extern void orinoco_down(struct orinoco_private *priv);
|
||||
extern irqreturn_t orinoco_interrupt(int irq, void *dev_id);
|
||||
|
||||
extern void __orinoco_ev_info(struct net_device *dev, hermes_t *hw);
|
||||
extern void __orinoco_ev_rx(struct net_device *dev, hermes_t *hw);
|
||||
|
||||
/* Common ndo functions exported for reuse by orinoco_usb */
|
||||
int orinoco_open(struct net_device *dev);
|
||||
int orinoco_stop(struct net_device *dev);
|
||||
|
1680
drivers/net/wireless/orinoco/orinoco_usb.c
Normal file
1680
drivers/net/wireless/orinoco/orinoco_usb.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user