fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / net / sb1000.c
index 32b5b92..b9fa4fb 100644 (file)
@@ -28,7 +28,7 @@
 
        Small changes to make it work with 2.1.x kernels. Hopefully,
        nothing major will change before official release of Linux 2.2.
-       
+
        Merged with 2.2 - Alan Cox
 */
 
@@ -49,16 +49,17 @@ static char version[] = "sb1000.c:v1.1.2 6/01/98 (fventuri@mediaone.net)\n";
 #include <linux/delay.h>       /* for udelay() */
 #include <linux/etherdevice.h>
 #include <linux/pnp.h>
+#include <linux/init.h>
+#include <linux/bitops.h>
 
-#include <asm/bitops.h>
 #include <asm/io.h>
 #include <asm/processor.h>
 #include <asm/uaccess.h>
 
 #ifdef SB1000_DEBUG
-int sb1000_debug = SB1000_DEBUG;
+static int sb1000_debug = SB1000_DEBUG;
 #else
-int sb1000_debug = 1;
+static const int sb1000_debug = 1;
 #endif
 
 static const int SB1000_IO_EXTENT = 8;
@@ -83,18 +84,17 @@ extern int sb1000_probe(struct net_device *dev);
 static int sb1000_open(struct net_device *dev);
 static int sb1000_dev_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd);
 static int sb1000_start_xmit(struct sk_buff *skb, struct net_device *dev);
-static irqreturn_t sb1000_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t sb1000_interrupt(int irq, void *dev_id);
 static struct net_device_stats *sb1000_stats(struct net_device *dev);
 static int sb1000_close(struct net_device *dev);
 
 
 /* SB1000 hardware routines to be used during open/configuration phases */
-static inline void nicedelay(unsigned long usecs);
 static inline int card_wait_for_busy_clear(const int ioaddr[],
        const char* name);
 static inline int card_wait_for_ready(const int ioaddr[], const char* name,
        unsigned char in[]);
-static inline int card_send_command(const int ioaddr[], const char* name,
+static int card_send_command(const int ioaddr[], const char* name,
        const unsigned char out[], unsigned char in[]);
 
 /* SB1000 hardware routines to be used during frame rx interrupt */
@@ -115,15 +115,15 @@ static inline int sb1000_start_get_set_command(const int ioaddr[],
 static inline int sb1000_end_get_set_command(const int ioaddr[],
        const char* name);
 static inline int sb1000_activate(const int ioaddr[], const char* name);
-static inline int sb1000_get_firmware_version(const int ioaddr[],
+static int sb1000_get_firmware_version(const int ioaddr[],
        const char* name, unsigned char version[], int do_end);
-static inline int sb1000_get_frequency(const int ioaddr[], const char* name,
+static int sb1000_get_frequency(const int ioaddr[], const char* name,
        int* frequency);
-static inline int sb1000_set_frequency(const int ioaddr[], const char* name,
+static int sb1000_set_frequency(const int ioaddr[], const char* name,
        int frequency);
-static inline int sb1000_get_PIDs(const int ioaddr[], const char* name,
+static int sb1000_get_PIDs(const int ioaddr[], const char* name,
        short PID[]);
-static inline int sb1000_set_PIDs(const int ioaddr[], const char* name,
+static int sb1000_set_PIDs(const int ioaddr[], const char* name,
        const short PID[]);
 
 /* SB1000 commands for frame rx interrupt */
@@ -143,7 +143,7 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
        unsigned short ioaddr[2], irq;
        unsigned int serial_number;
        int error = -ENODEV;
-       
+
        if (pnp_device_attach(pdev) < 0)
                return -ENODEV;
        if (pnp_activate_dev(pdev) < 0)
@@ -153,12 +153,12 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
                goto out_disable;
        if (!pnp_irq_valid(pdev, 0))
                goto out_disable;
-               
+
        serial_number = pdev->card->serial;
-               
+
        ioaddr[0] = pnp_port_start(pdev, 0);
        ioaddr[1] = pnp_port_start(pdev, 0);
-               
+
        irq = pnp_irq(pdev, 0);
 
        if (!request_region(ioaddr[0], 16, "sb1000"))
@@ -172,7 +172,7 @@ sb1000_probe_one(struct pnp_dev *pdev, const struct pnp_device_id *id)
                goto out_release_regions;
        }
 
-                
+
        dev->base_addr = ioaddr[0];
        /* mem_start holds the second I/O address */
        dev->mem_start = ioaddr[1];
@@ -246,19 +246,12 @@ static struct pnp_driver sb1000_driver = {
        .remove         = sb1000_remove_one,
 };
 
-\f
+
 /*
  * SB1000 hardware routines to be used during open/configuration phases
  */
 
-const int TimeOutJiffies = (875 * HZ) / 100;
-
-static inline void nicedelay(unsigned long usecs)
-{
-       current->state = TASK_INTERRUPTIBLE;
-       schedule_timeout(HZ);
-       return;
-}
+static const int TimeOutJiffies = (875 * HZ) / 100;
 
 /* Card Wait For Busy Clear (cannot be used during an interrupt) */
 static inline int
@@ -316,7 +309,7 @@ card_wait_for_ready(const int ioaddr[], const char* name, unsigned char in[])
 }
 
 /* Card Send Command (cannot be used during an interrupt) */
-static inline int
+static int
 card_send_command(const int ioaddr[], const char* name,
        const unsigned char out[], unsigned char in[])
 {
@@ -358,11 +351,11 @@ card_send_command(const int ioaddr[], const char* name,
        return 0;
 }
 
-\f
+
 /*
  * SB1000 hardware routines to be used during frame rx interrupt
  */
-const int Sb1000TimeOutJiffies = 7 * HZ;
+static const int Sb1000TimeOutJiffies = 7 * HZ;
 
 /* Card Wait For Ready (to be used during frame rx) */
 static inline int
@@ -456,7 +449,7 @@ sb1000_issue_read_command(const int ioaddr[], const char* name)
        return;
 }
 
-\f
+
 /*
  * SB1000 commands for open/configuration
  */
@@ -474,7 +467,7 @@ sb1000_reset(const int ioaddr[], const char* name)
        udelay(1000);
        outb(0x0, port);
        inb(port);
-       nicedelay(60000);
+       ssleep(1);
        outb(0x4, port);
        inb(port);
        udelay(1000);
@@ -536,7 +529,7 @@ sb1000_activate(const int ioaddr[], const char* name)
        const unsigned char Command0[6] = {0x80, 0x11, 0x00, 0x00, 0x00, 0x00};
        const unsigned char Command1[6] = {0x80, 0x16, 0x00, 0x00, 0x00, 0x00};
 
-       nicedelay(50000);
+       ssleep(1);
        if ((status = card_send_command(ioaddr, name, Command0, st)))
                return status;
        if ((status = card_send_command(ioaddr, name, Command1, st)))
@@ -551,7 +544,7 @@ sb1000_activate(const int ioaddr[], const char* name)
 }
 
 /* get SB1000 firmware version */
-static inline int
+static int
 sb1000_get_firmware_version(const int ioaddr[], const char* name,
        unsigned char version[], int do_end)
 {
@@ -574,7 +567,7 @@ sb1000_get_firmware_version(const int ioaddr[], const char* name,
 }
 
 /* get SB1000 frequency */
-static inline int
+static int
 sb1000_get_frequency(const int ioaddr[], const char* name, int* frequency)
 {
        unsigned char st[7];
@@ -591,7 +584,7 @@ sb1000_get_frequency(const int ioaddr[], const char* name, int* frequency)
 }
 
 /* set SB1000 frequency */
-static inline int
+static int
 sb1000_set_frequency(const int ioaddr[], const char* name, int frequency)
 {
        unsigned char st[7];
@@ -621,7 +614,7 @@ sb1000_set_frequency(const int ioaddr[], const char* name, int frequency)
 }
 
 /* get SB1000 PIDs */
-static inline int
+static int
 sb1000_get_PIDs(const int ioaddr[], const char* name, short PID[])
 {
        unsigned char st[7];
@@ -655,7 +648,7 @@ sb1000_get_PIDs(const int ioaddr[], const char* name, short PID[])
 }
 
 /* set SB1000 PIDs */
-static inline int
+static int
 sb1000_set_PIDs(const int ioaddr[], const char* name, const short PID[])
 {
        unsigned char st[7];
@@ -704,7 +697,7 @@ sb1000_set_PIDs(const int ioaddr[], const char* name, const short PID[])
        return sb1000_end_get_set_command(ioaddr, name);
 }
 
-\f
+
 static inline void
 sb1000_print_status_buffer(const char* name, unsigned char st[],
        unsigned char buffer[], int size)
@@ -798,7 +791,7 @@ skipped_frame:
                        skb ? session_id : session_id | 0x40, frame_id);
        if (skb) {
                dev_kfree_skb(skb);
-               skb = 0;
+               skb = NULL;
        }
 
 good_frame:
@@ -874,7 +867,7 @@ printk("cm0: IP identification: %02x%02x  fragment offset: %02x%02x\n", buffer[3
        dev->last_rx = jiffies;
        stats->rx_bytes+=dlen;
        stats->rx_packets++;
-       lp->rx_skb[ns] = 0;
+       lp->rx_skb[ns] = NULL;
        lp->rx_session_id[ns] |= 0x40;
        return 0;
 
@@ -892,7 +885,7 @@ dropped_frame:
        if (ns < NPIDS) {
                if ((skb = lp->rx_skb[ns])) {
                        dev_kfree_skb(skb);
-                       lp->rx_skb[ns] = 0;
+                       lp->rx_skb[ns] = NULL;
                }
                lp->rx_session_id[ns] |= 0x40;
        }
@@ -923,7 +916,7 @@ sb1000_error_dpc(struct net_device *dev)
        return;
 }
 
-\f
+
 /*
  * Linux interface functions
  */
@@ -943,7 +936,7 @@ sb1000_open(struct net_device *dev)
        /* initialize sb1000 */
        if ((status = sb1000_reset(ioaddr, name)))
                return status;
-       nicedelay(200000);
+       ssleep(1);
        if ((status = sb1000_check_CRC(ioaddr, name)))
                return status;
 
@@ -1030,14 +1023,14 @@ static int sb1000_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        case SIOCGCMFREQUENCY:          /* get frequency */
                if ((status = sb1000_get_frequency(ioaddr, name, &frequency)))
                        return status;
-               if(put_user(frequency, (int*) ifr->ifr_data))
+               if(put_user(frequency, (int __user *) ifr->ifr_data))
                        return -EFAULT;
                break;
 
        case SIOCSCMFREQUENCY:          /* set frequency */
                if (!capable(CAP_NET_ADMIN))
                        return -EPERM;
-               if(get_user(frequency, (int*) ifr->ifr_data))
+               if(get_user(frequency, (int __user *) ifr->ifr_data))
                        return -EFAULT;
                if ((status = sb1000_set_frequency(ioaddr, name, frequency)))
                        return status;
@@ -1086,24 +1079,18 @@ sb1000_start_xmit(struct sk_buff *skb, struct net_device *dev)
 }
 
 /* SB1000 interrupt handler. */
-static irqreturn_t sb1000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t sb1000_interrupt(int irq, void *dev_id)
 {
        char *name;
        unsigned char st;
        int ioaddr[2];
-       struct net_device *dev = (struct net_device *) dev_id;
+       struct net_device *dev = dev_id;
        struct sb1000_private *lp = netdev_priv(dev);
 
        const unsigned char Command0[6] = {0x80, 0x2c, 0x00, 0x00, 0x00, 0x00};
        const unsigned char Command1[6] = {0x80, 0x2e, 0x00, 0x00, 0x00, 0x00};
        const int MaxRxErrorCount = 6;
 
-       if (dev == NULL) {
-               printk(KERN_ERR "sb1000_interrupt(): irq %d for unknown device.\n",
-                       irq);
-               return IRQ_NONE;
-       }
-
        ioaddr[0] = dev->base_addr;
        /* mem_start holds the second I/O address */
        ioaddr[1] = dev->mem_start;
@@ -1162,7 +1149,7 @@ static int sb1000_close(struct net_device *dev)
                printk(KERN_DEBUG "%s: Shutting down sb1000.\n", dev->name);
 
        netif_stop_queue(dev);
-       
+
        ioaddr[0] = dev->base_addr;
        /* mem_start holds the second I/O address */
        ioaddr[1] = dev->mem_start;