#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>
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.
#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)
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;
*/
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);
#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,
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.
static ssize_t bpp_read(struct file *f, char __user *c, size_t cnt, loff_t * ppos)
{
long rc;
- unsigned minor = iminor(f->f_dentry->d_inode);
+ unsigned minor = iminor(f->f_path.dentry->d_inode);
if (minor >= BPP_NO) return -ENODEV;
if (!instances[minor].present) return -ENODEV;
static ssize_t bpp_write(struct file *f, const char __user *c, size_t cnt, loff_t * ppos)
{
long errno = 0;
- unsigned minor = iminor(f->f_dentry->d_inode);
+ unsigned minor = iminor(f->f_path.dentry->d_inode);
if (minor >= BPP_NO) return -ENODEV;
if (!instances[minor].present) return -ENODEV;
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;
/*
#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");
}
static void probeLptPort(unsigned idx)
{
- unsigned long rp = base_addrs[idx];
+ void __iomem *rp = base_addrs[idx];
__u32 csr;
char *brand;
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 */
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.
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;
}
{
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++) {