fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / macintosh / adb.c
index d2ead17..7cec6de 100644 (file)
@@ -16,7 +16,6 @@
  * - move bus probe to a kernel thread
  */
 
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
 #include <linux/completion.h>
 #include <linux/device.h>
-#include <linux/devfs_fs_kernel.h>
 
 #include <asm/uaccess.h>
 #include <asm/semaphore.h>
 #ifdef CONFIG_PPC
 #include <asm/prom.h>
+#include <asm/machdep.h>
 #endif
 
 
@@ -80,7 +79,7 @@ static struct adb_driver *adb_driver_list[] = {
 static struct class *adb_dev_class;
 
 struct adb_driver *adb_controller;
-struct notifier_block *adb_client_list = NULL;
+BLOCKING_NOTIFIER_HEAD(adb_client_list);
 static int adb_got_sleep;
 static int adb_inited;
 static pid_t adb_probe_task_pid;
@@ -104,7 +103,7 @@ static void adbdev_init(void);
 static int try_handler_change(int, int);
 
 static struct adb_handler {
-       void (*handler)(unsigned char *, int, struct pt_regs *, int);
+       void (*handler)(unsigned char *, int, int);
        int original_address;
        int handler_id;
        int busy;
@@ -268,12 +267,12 @@ adb_probe_task(void *x)
 }
 
 static void
-__adb_probe_task(void *data)
+__adb_probe_task(struct work_struct *bullshit)
 {
        adb_probe_task_pid = kernel_thread(adb_probe_task, NULL, SIGCHLD | CLONE_KERNEL);
 }
 
-static DECLARE_WORK(adb_reset_work, __adb_probe_task, NULL);
+static DECLARE_WORK(adb_reset_work, __adb_probe_task);
 
 int
 adb_reset_bus(void)
@@ -294,7 +293,7 @@ int __init adb_init(void)
        int i;
 
 #ifdef CONFIG_PPC32
-       if ( (_machine != _MACH_chrp) && (_machine != _MACH_Pmac) )
+       if (!machine_is(chrp) && !machine_is(powermac))
                return 0;
 #endif
 #ifdef CONFIG_MAC
@@ -354,7 +353,8 @@ adb_notify_sleep(struct pmu_sleep_notifier *self, int when)
                /* Stop autopoll */
                if (adb_controller->autopoll)
                        adb_controller->autopoll(0);
-               ret = notifier_call_chain(&adb_client_list, ADB_MSG_POWERDOWN, NULL);
+               ret = blocking_notifier_call_chain(&adb_client_list,
+                               ADB_MSG_POWERDOWN, NULL);
                if (ret & NOTIFY_STOP_MASK) {
                        up(&adb_probe_mutex);
                        return PBOOK_SLEEP_REFUSE;
@@ -391,7 +391,8 @@ do_adb_reset_bus(void)
        if (adb_controller->autopoll)
                adb_controller->autopoll(0);
 
-       nret = notifier_call_chain(&adb_client_list, ADB_MSG_PRE_RESET, NULL);
+       nret = blocking_notifier_call_chain(&adb_client_list,
+                       ADB_MSG_PRE_RESET, NULL);
        if (nret & NOTIFY_STOP_MASK) {
                if (adb_controller->autopoll)
                        adb_controller->autopoll(autopoll_devs);
@@ -426,7 +427,8 @@ do_adb_reset_bus(void)
        }
        up(&adb_handler_sem);
 
-       nret = notifier_call_chain(&adb_client_list, ADB_MSG_POST_RESET, NULL);
+       nret = blocking_notifier_call_chain(&adb_client_list,
+                       ADB_MSG_POST_RESET, NULL);
        if (nret & NOTIFY_STOP_MASK)
                return -EBUSY;
        
@@ -520,7 +522,7 @@ bail:
     the handler_id id it doesn't match. */
 int
 adb_register(int default_id, int handler_id, struct adb_ids *ids,
-            void (*handler)(unsigned char *, int, struct pt_regs *, int))
+            void (*handler)(unsigned char *, int, int))
 {
        int i;
 
@@ -568,13 +570,13 @@ adb_unregister(int index)
 }
 
 void
-adb_input(unsigned char *buf, int nb, struct pt_regs *regs, int autopoll)
+adb_input(unsigned char *buf, int nb, int autopoll)
 {
        int i, id;
        static int dump_adb_input = 0;
        unsigned long flags;
        
-       void (*handler)(unsigned char *, int, struct pt_regs *, int);
+       void (*handler)(unsigned char *, int, int);
 
        /* We skip keystrokes and mouse moves when the sleep process
         * has been started. We stop autopoll, but this is another security
@@ -595,7 +597,7 @@ adb_input(unsigned char *buf, int nb, struct pt_regs *regs, int autopoll)
                adb_handler[id].busy = 1;
        write_unlock_irqrestore(&adb_handler_lock, flags);
        if (handler != NULL) {
-               (*handler)(buf, nb, regs, autopoll);
+               (*handler)(buf, nb, autopoll);
                wmb();
                adb_handler[id].busy = 0;
        }
@@ -826,7 +828,7 @@ static ssize_t adb_write(struct file *file, const char __user *buf,
        if (!access_ok(VERIFY_READ, buf, count))
                return -EFAULT;
 
-       req = (struct adb_request *) kmalloc(sizeof(struct adb_request),
+       req = kmalloc(sizeof(struct adb_request),
                                             GFP_KERNEL);
        if (req == NULL)
                return -ENOMEM;
@@ -900,8 +902,6 @@ adbdev_init(void)
                return;
        }
 
-       devfs_mk_cdev(MKDEV(ADB_MAJOR, 0), S_IFCHR | S_IRUSR | S_IWUSR, "adb");
-
        adb_dev_class = class_create(THIS_MODULE, "adb");
        if (IS_ERR(adb_dev_class))
                return;