Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / drivers / sbus / char / bpp.c
index 8067aea..385f4f7 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/timer.h>
 #include <linux/ioport.h>
 #include <linux/major.h>
-#include <linux/devfs_fs_kernel.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -79,17 +78,13 @@ struct inst {
 
       unsigned char run_length;
       unsigned char repeat_byte;
-
-      /* These members manage timeouts for programmed delays */
-      wait_queue_head_t wait_queue;
-      struct timer_list timer_list;
 };
 
 static struct inst instances[BPP_NO];
 
 #if defined(__i386__)
 
-const unsigned short base_addrs[BPP_NO] = { 0x278, 0x378, 0x3bc };
+static const unsigned short base_addrs[BPP_NO] = { 0x278, 0x378, 0x3bc };
 
 /*
  * These are for data access.
@@ -246,7 +241,7 @@ static unsigned short get_pins(unsigned minor)
 #define P_ERR_IRP       0x0002      /* RW1  1= rising edge */
 #define P_ERR_IRQ_EN    0x0001      /* RW   */
 
-unsigned long base_addrs[BPP_NO];
+static void __iomem *base_addrs[BPP_NO];
 
 #define bpp_outb_p(data, base) sbus_writeb(data, (base) + BPP_DR)
 #define bpp_inb_p(base)                sbus_readb((base) + BPP_DR)
@@ -254,7 +249,7 @@ unsigned long base_addrs[BPP_NO];
 
 static void set_pins(unsigned short pins, unsigned minor)
 {
-      unsigned long base = base_addrs[minor];
+      void __iomem *base = base_addrs[minor];
       unsigned char bits_tcr = 0, bits_or = 0;
 
       if (instances[minor].direction & 0x20) bits_tcr |= P_TCR_DIR;
@@ -275,7 +270,7 @@ static void set_pins(unsigned short pins, unsigned minor)
  */
 static unsigned short get_pins(unsigned minor)
 {
-      unsigned long base = base_addrs[minor];
+      void __iomem *base = base_addrs[minor];
       unsigned short bits = 0;
       unsigned value_tcr = sbus_readb(base + BPP_TCR);
       unsigned value_ir = sbus_readb(base + BPP_IR);
@@ -297,16 +292,9 @@ static unsigned short get_pins(unsigned minor)
 
 #endif /* __sparc__ */
 
-static void bpp_wake_up(unsigned long val)
-{ wake_up(&instances[val].wait_queue); }
-
 static void snooze(unsigned long snooze_time, unsigned minor)
 {
-      init_timer(&instances[minor].timer_list);
-      instances[minor].timer_list.expires = jiffies + snooze_time + 1;
-      instances[minor].timer_list.data    = minor;
-      add_timer(&instances[minor].timer_list);
-      sleep_on (&instances[minor].wait_queue);
+       schedule_timeout_uninterruptible(snooze_time + 1);
 }
 
 static int wait_for(unsigned short set, unsigned short clr,
@@ -432,7 +420,7 @@ static int terminate(unsigned minor)
       return 0;
 }
 
-static spinlock_t bpp_open_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(bpp_open_lock);
 
 /*
  * Allow only one process to open the device at a time.
@@ -880,11 +868,8 @@ static void probeLptPort(unsigned idx)
       instances[idx].enhanced = 0;
       instances[idx].direction = 0;
       instances[idx].mode = COMPATIBILITY;
-      instances[idx].wait_queue = 0;
       instances[idx].run_length = 0;
       instances[idx].run_flag = 0;
-      init_timer(&instances[idx].timer_list);
-      instances[idx].timer_list.function = bpp_wake_up;
       if (!request_region(lpAddr,3, dev_name)) return;
 
       /*
@@ -940,7 +925,7 @@ static inline void freeLptPort(int idx)
 
 #if defined(__sparc__)
 
-static unsigned long map_bpp(struct sbus_dev *dev, int idx)
+static void __iomem *map_bpp(struct sbus_dev *dev, int idx)
 {
       return sbus_ioremap(&dev->resource[0], 0, BPP_SIZE, "bpp");
 }
@@ -969,7 +954,7 @@ static int collectLptPorts(void)
 
 static void probeLptPort(unsigned idx)
 {
-      unsigned long rp = base_addrs[idx];
+      void __iomem *rp = base_addrs[idx];
       __u32 csr;
       char *brand;
 
@@ -977,13 +962,10 @@ static void probeLptPort(unsigned idx)
       instances[idx].enhanced = 0;
       instances[idx].direction = 0;
       instances[idx].mode = COMPATIBILITY;
-      init_waitqueue_head(&instances[idx].wait_queue);
       instances[idx].run_length = 0;
       instances[idx].run_flag = 0;
-      init_timer(&instances[idx].timer_list);
-      instances[idx].timer_list.function = bpp_wake_up;
 
-      if (rp == 0) return;
+      if (!rp) return;
 
       instances[idx].present = 1;
       instances[idx].enhanced = 1;   /* Sure */
@@ -1014,7 +996,7 @@ static void probeLptPort(unsigned idx)
       default:
             brand = "Unknown";
       }
-      printk("bpp%d: %s at 0x%lx\n", idx, brand, rp);
+      printk("bpp%d: %s at %p\n", idx, brand, rp);
 
       /*
        * Leave the port in compat idle mode.
@@ -1048,11 +1030,6 @@ static int __init bpp_init(void)
                instances[idx].opened = 0;
                probeLptPort(idx);
        }
-       devfs_mk_dir("bpp");
-       for (idx = 0; idx < BPP_NO; idx++) {
-               devfs_mk_cdev(MKDEV(BPP_MAJOR, idx),
-                               S_IFCHR | S_IRUSR | S_IWUSR, "bpp/%d", idx);
-       }
 
        return 0;
 }
@@ -1061,9 +1038,6 @@ static void __exit bpp_cleanup(void)
 {
        unsigned idx;
 
-       for (idx = 0; idx < BPP_NO; idx++)
-               devfs_remove("bpp/%d", idx);
-       devfs_remove("bpp");
        unregister_chrdev(BPP_MAJOR, dev_name);
 
        for (idx = 0;  idx < BPP_NO; idx++) {