#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
+#include <linux/bitops.h>
#ifdef CONFIG_NET_RADIO
#include <linux/wireless.h>
#if WIRELESS_EXT > 12
#include <pcmcia/mem_op.h>
#include <asm/system.h>
-#include <asm/bitops.h>
#include <asm/io.h>
#include <asm/dma.h>
#ifdef PCMCIA_DEBUG
static int pc_debug = PCMCIA_DEBUG;
-MODULE_PARM(pc_debug, "i");
+module_param(pc_debug, int, 0);
#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
static char *version =
"netwave_cs.c 0.3.0 Thu Jul 17 14:36:02 1997 (John Markus Bjørndalen)\n";
*/
static int mem_speed;
-/* Bit map of interrupts to choose from */
-/* This means pick from 15, 14, 12, 11, 10, 9, 7, 5, 4, and 3 */
-static u_int irq_mask = 0xdeb8;
-static int irq_list[4] = { -1 };
-
-MODULE_PARM(domain, "i");
-MODULE_PARM(scramble_key, "i");
-MODULE_PARM(mem_speed, "i");
-MODULE_PARM(irq_mask, "i");
-MODULE_PARM(irq_list, "1-4i");
+module_param(domain, int, 0);
+module_param(scramble_key, int, 0);
+module_param(mem_speed, int, 0);
/*====================================================================*/
static void netwave_detach(dev_link_t *); /* Destroy instance */
/* Hardware configuration */
-static void netwave_doreset(ioaddr_t iobase, u_char* ramBase);
+static void netwave_doreset(kio_addr_t iobase, u_char __iomem *ramBase);
static void netwave_reset(struct net_device *dev);
/* Misc device stuff */
static int netwave_open(struct net_device *dev); /* Open the device */
static int netwave_close(struct net_device *dev); /* Close the device */
-static int netwave_config(struct net_device *dev, struct ifmap *map);
/* Packet transmission and Packet reception */
static int netwave_start_xmit( struct sk_buff *skb, struct net_device *dev);
dev_link_t link;
spinlock_t spinlock; /* Serialize access to the hardware (SMP) */
dev_node_t node;
- u_char *ramBase;
+ u_char __iomem *ramBase;
int timeoutCounter;
int lastExec;
struct timer_list watchdog; /* To avoid blocking state */
* The Netwave card is little-endian, so won't work for big endian
* systems.
*/
-static inline unsigned short get_uint16(u_char* staddr)
+static inline unsigned short get_uint16(u_char __iomem *staddr)
{
return readw(staddr); /* Return only 16 bits */
}
-static inline short get_int16(u_char* staddr)
+static inline short get_int16(u_char __iomem * staddr)
{
return readw(staddr);
}
}
#ifdef WIRELESS_EXT
-static void netwave_snapshot(netwave_private *priv, u_char *ramBase,
- ioaddr_t iobase) {
+static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase,
+ kio_addr_t iobase) {
u_short resultBuffer;
/* if time since last snapshot is > 1 sec. (100 jiffies?) then take
static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev)
{
unsigned long flags;
- ioaddr_t iobase = dev->base_addr;
- netwave_private *priv = (netwave_private *) dev->priv;
- u_char *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
struct iw_statistics* wstats;
wstats = &priv->iw_stats;
dev_link_t *link;
struct net_device *dev;
netwave_private *priv;
- int i, ret;
+ int ret;
DEBUG(0, "netwave_attach()\n");
dev = alloc_etherdev(sizeof(netwave_private));
if (!dev)
return NULL;
- priv = dev->priv;
+ priv = netdev_priv(dev);
link = &priv->link;
link->priv = dev;
/* Interrupt setup */
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
- link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
- if (irq_list[0] == -1)
- link->irq.IRQInfo2 = irq_mask;
- else
- for (i = 0; i < 4; i++)
- link->irq.IRQInfo2 |= 1 << irq_list[i];
+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
link->irq.Handler = &netwave_interrupt;
/* General socket configuration */
/* Netwave specific entries in the device structure */
SET_MODULE_OWNER(dev);
dev->hard_start_xmit = &netwave_start_xmit;
- dev->set_config = &netwave_config;
dev->get_stats = &netwave_get_stats;
dev->set_multicast_list = &set_multicast_list;
/* wireless extensions */
link->next = dev_list;
dev_list = link;
client_reg.dev_info = &dev_info;
- client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
client_reg.EventMask =
CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
char *extra)
{
unsigned long flags;
- ioaddr_t iobase = dev->base_addr;
- netwave_private *priv = (netwave_private *) dev->priv;
- u_char *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
/* Disable interrupts & save flags */
spin_lock_irqsave(&priv->spinlock, flags);
char *key)
{
unsigned long flags;
- ioaddr_t iobase = dev->base_addr;
- netwave_private *priv = (netwave_private *) dev->priv;
- u_char *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
/* Disable interrupts & save flags */
spin_lock_irqsave(&priv->spinlock, flags);
char *extra)
{
unsigned long flags;
- ioaddr_t iobase = dev->base_addr;
- netwave_private *priv = (netwave_private *) dev->priv;
- u_char *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
/* Disable interrupts & save flags */
spin_lock_irqsave(&priv->spinlock, flags);
static void netwave_pcmcia_config(dev_link_t *link) {
client_handle_t handle = link->handle;
struct net_device *dev = link->priv;
- netwave_private *priv = dev->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 *ramBase = NULL;
+ u_char __iomem *ramBase = NULL;
DEBUG(0, "netwave_pcmcia_config(0x%p)\n", link);
/* Store base address of the common window frame */
ramBase = ioremap(req.Base, 0x8000);
- ((netwave_private*)dev->priv)->ramBase = ramBase;
+ priv->ramBase = ramBase;
dev->irq = link->irq.AssignedIRQ;
dev->base_addr = link->io.BasePort1;
+ SET_NETDEV_DEV(dev, &handle_to_dev(handle));
+
if (register_netdev(dev) != 0) {
printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n");
goto failed;
static void netwave_release(dev_link_t *link)
{
struct net_device *dev = link->priv;
- netwave_private *priv = dev->priv;
+ netwave_private *priv = netdev_priv(dev);
DEBUG(0, "netwave_release(0x%p)\n", link);
*
*/
static int netwave_event(event_t event, int priority,
- event_callback_args_t *args) {
+ event_callback_args_t *args)
+{
dev_link_t *link = args->client_data;
struct net_device *dev = link->priv;
*
* Proper hardware reset of the card.
*/
-static void netwave_doreset(ioaddr_t ioBase, u_char* ramBase) {
+static void netwave_doreset(kio_addr_t ioBase, u_char __iomem *ramBase)
+{
/* Reset card */
wait_WOC(ioBase);
outb(0x80, ioBase + NETWAVE_REG_PMR);
*/
static void netwave_reset(struct net_device *dev) {
/* u_char state; */
- netwave_private *priv = (netwave_private*) dev->priv;
- u_char *ramBase = priv->ramBase;
- ioaddr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
DEBUG(0, "netwave_reset: Done with hardware reset\n");
outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR);
}
-/*
- * Function netwave_config (dev, map)
- *
- * Configure device, this work is done by netwave_pcmcia_config when a
- * card is inserted
- */
-static int netwave_config(struct net_device *dev, struct ifmap *map) {
- return 0;
-}
-
/*
* Function netwave_hw_xmit (data, len, dev)
*/
DataOffset;
int tmpcount;
- netwave_private *priv = (netwave_private *) dev->priv;
- u_char* ramBase = priv->ramBase;
- ioaddr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem * ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
/* Disable interrupts & save flags */
spin_lock_irqsave(&priv->spinlock, flags);
* ready to transmit another packet.
* 3. A command has completed execution.
*/
-static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs) {
- ioaddr_t iobase;
- u_char *ramBase;
+static irqreturn_t netwave_interrupt(int irq, void* dev_id, struct pt_regs *regs)
+{
+ kio_addr_t iobase;
+ u_char __iomem *ramBase;
struct net_device *dev = (struct net_device *)dev_id;
- struct netwave_private *priv = dev->priv;
+ struct netwave_private *priv = netdev_priv(dev);
dev_link_t *link = &priv->link;
int i;
} /* netwave_watchdog */
static struct net_device_stats *netwave_get_stats(struct net_device *dev) {
- netwave_private *priv = (netwave_private*)dev->priv;
+ netwave_private *priv = netdev_priv(dev);
update_stats(dev);
static void update_stats(struct net_device *dev) {
//unsigned long flags;
-/* netwave_private *priv = (netwave_private*) dev->priv; */
+/* netwave_private *priv = netdev_priv(dev); */
//spin_lock_irqsave(&priv->spinlock, flags);
//spin_unlock_irqrestore(&priv->spinlock, flags);
}
-static int netwave_rx(struct net_device *dev) {
- netwave_private *priv = (netwave_private*)(dev->priv);
- u_char *ramBase = priv->ramBase;
- ioaddr_t iobase = dev->base_addr;
+static int netwave_rx(struct net_device *dev)
+{
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem *ramBase = priv->ramBase;
+ kio_addr_t iobase = dev->base_addr;
u_char rxStatus;
struct sk_buff *skb = NULL;
unsigned int curBuffer,
}
static int netwave_open(struct net_device *dev) {
- netwave_private *priv = dev->priv;
+ netwave_private *priv = netdev_priv(dev);
dev_link_t *link = &priv->link;
DEBUG(1, "netwave_open: starting.\n");
}
static int netwave_close(struct net_device *dev) {
- netwave_private *priv = (netwave_private *)dev->priv;
+ netwave_private *priv = netdev_priv(dev);
dev_link_t *link = &priv->link;
DEBUG(1, "netwave_close: finishing.\n");
static void __exit exit_netwave_cs(void)
{
pcmcia_unregister_driver(&netwave_driver);
-
- if (dev_list != NULL) /* Critical situation */
- printk("netwave_cs: devices remaining when removing module\n");
+ BUG_ON(dev_list != NULL);
}
module_init(init_netwave_cs);
*/
static void set_multicast_list(struct net_device *dev)
{
- ioaddr_t iobase = dev->base_addr;
- u_char* ramBase = ((netwave_private*) dev->priv)->ramBase;
+ kio_addr_t iobase = dev->base_addr;
+ netwave_private *priv = netdev_priv(dev);
+ u_char __iomem * ramBase = priv->ramBase;
u_char rcvMode = 0;
#ifdef PCMCIA_DEBUG