diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/sbus/char/cpwatchdog.c | 24 | ||||
-rw-r--r-- | drivers/sbus/char/display7seg.c | 32 | ||||
-rw-r--r-- | drivers/sbus/char/envctrl.c | 18 | ||||
-rw-r--r-- | drivers/sbus/char/openprom.c | 33 | ||||
-rw-r--r-- | drivers/serial/sunsu.c | 2 | ||||
-rw-r--r-- | drivers/video/cg6.c | 6 |
6 files changed, 88 insertions, 27 deletions
diff --git a/drivers/sbus/char/cpwatchdog.c b/drivers/sbus/char/cpwatchdog.c index c82abeb59d..071ae24be8 100644 --- a/drivers/sbus/char/cpwatchdog.c +++ b/drivers/sbus/char/cpwatchdog.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/interrupt.h> | 26 | #include <linux/interrupt.h> |
27 | #include <linux/ioport.h> | 27 | #include <linux/ioport.h> |
28 | #include <linux/timer.h> | 28 | #include <linux/timer.h> |
29 | #include <linux/smp_lock.h> | ||
29 | #include <asm/irq.h> | 30 | #include <asm/irq.h> |
30 | #include <asm/ebus.h> | 31 | #include <asm/ebus.h> |
31 | #include <asm/oplib.h> | 32 | #include <asm/oplib.h> |
@@ -394,6 +395,28 @@ static int wd_ioctl(struct inode *inode, struct file *file, | |||
394 | return(0); | 395 | return(0); |
395 | } | 396 | } |
396 | 397 | ||
398 | static long wd_compat_ioctl(struct file *file, unsigned int cmd, | ||
399 | unsigned long arg) | ||
400 | { | ||
401 | int rval = -ENOIOCTLCMD; | ||
402 | |||
403 | switch (cmd) { | ||
404 | /* solaris ioctls are specific to this driver */ | ||
405 | case WIOCSTART: | ||
406 | case WIOCSTOP: | ||
407 | case WIOCGSTAT: | ||
408 | lock_kernel(); | ||
409 | rval = wd_ioctl(file->f_dentry->d_inode, file, cmd, arg); | ||
410 | lock_kernel(); | ||
411 | break; | ||
412 | /* everything else is handled by the generic compat layer */ | ||
413 | default: | ||
414 | break; | ||
415 | } | ||
416 | |||
417 | return rval; | ||
418 | } | ||
419 | |||
397 | static ssize_t wd_write(struct file *file, | 420 | static ssize_t wd_write(struct file *file, |
398 | const char __user *buf, | 421 | const char __user *buf, |
399 | size_t count, | 422 | size_t count, |
@@ -441,6 +464,7 @@ static irqreturn_t wd_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
441 | static struct file_operations wd_fops = { | 464 | static struct file_operations wd_fops = { |
442 | .owner = THIS_MODULE, | 465 | .owner = THIS_MODULE, |
443 | .ioctl = wd_ioctl, | 466 | .ioctl = wd_ioctl, |
467 | .compat_ioctl = wd_compat_ioctl, | ||
444 | .open = wd_open, | 468 | .open = wd_open, |
445 | .write = wd_write, | 469 | .write = wd_write, |
446 | .read = wd_read, | 470 | .read = wd_read, |
diff --git a/drivers/sbus/char/display7seg.c b/drivers/sbus/char/display7seg.c index 24ed5893b4..39f54213a6 100644 --- a/drivers/sbus/char/display7seg.c +++ b/drivers/sbus/char/display7seg.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/init.h> | 15 | #include <linux/init.h> |
16 | #include <linux/miscdevice.h> | 16 | #include <linux/miscdevice.h> |
17 | #include <linux/ioport.h> /* request_region */ | 17 | #include <linux/ioport.h> /* request_region */ |
18 | #include <linux/smp_lock.h> | ||
18 | #include <asm/atomic.h> | 19 | #include <asm/atomic.h> |
19 | #include <asm/ebus.h> /* EBus device */ | 20 | #include <asm/ebus.h> /* EBus device */ |
20 | #include <asm/oplib.h> /* OpenProm Library */ | 21 | #include <asm/oplib.h> /* OpenProm Library */ |
@@ -114,22 +115,25 @@ static int d7s_release(struct inode *inode, struct file *f) | |||
114 | return 0; | 115 | return 0; |
115 | } | 116 | } |
116 | 117 | ||
117 | static int d7s_ioctl(struct inode *inode, struct file *f, | 118 | static long d7s_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
118 | unsigned int cmd, unsigned long arg) | ||
119 | { | 119 | { |
120 | __u8 regs = readb(d7s_regs); | 120 | __u8 regs = readb(d7s_regs); |
121 | __u8 ireg = 0; | 121 | __u8 ireg = 0; |
122 | int error = 0 | ||
122 | 123 | ||
123 | if (D7S_MINOR != iminor(inode)) | 124 | if (D7S_MINOR != iminor(file->f_dentry->d_inode)) |
124 | return -ENODEV; | 125 | return -ENODEV; |
125 | 126 | ||
127 | lock_kernel(); | ||
126 | switch (cmd) { | 128 | switch (cmd) { |
127 | case D7SIOCWR: | 129 | case D7SIOCWR: |
128 | /* assign device register values | 130 | /* assign device register values |
129 | * we mask-out D7S_FLIP if in sol_compat mode | 131 | * we mask-out D7S_FLIP if in sol_compat mode |
130 | */ | 132 | */ |
131 | if (get_user(ireg, (int __user *) arg)) | 133 | if (get_user(ireg, (int __user *) arg)) { |
132 | return -EFAULT; | 134 | error = -EFAULT; |
135 | break; | ||
136 | } | ||
133 | if (0 != sol_compat) { | 137 | if (0 != sol_compat) { |
134 | (regs & D7S_FLIP) ? | 138 | (regs & D7S_FLIP) ? |
135 | (ireg |= D7S_FLIP) : (ireg &= ~D7S_FLIP); | 139 | (ireg |= D7S_FLIP) : (ireg &= ~D7S_FLIP); |
@@ -144,8 +148,10 @@ static int d7s_ioctl(struct inode *inode, struct file *f, | |||
144 | * This driver will not misinform you about the state | 148 | * This driver will not misinform you about the state |
145 | * of your hardware while in sol_compat mode | 149 | * of your hardware while in sol_compat mode |
146 | */ | 150 | */ |
147 | if (put_user(regs, (int __user *) arg)) | 151 | if (put_user(regs, (int __user *) arg)) { |
148 | return -EFAULT; | 152 | error = -EFAULT; |
153 | break; | ||
154 | } | ||
149 | break; | 155 | break; |
150 | 156 | ||
151 | case D7SIOCTM: | 157 | case D7SIOCTM: |
@@ -155,15 +161,17 @@ static int d7s_ioctl(struct inode *inode, struct file *f, | |||
155 | writeb(regs, d7s_regs); | 161 | writeb(regs, d7s_regs); |
156 | break; | 162 | break; |
157 | }; | 163 | }; |
164 | lock_kernel(); | ||
158 | 165 | ||
159 | return 0; | 166 | return error; |
160 | } | 167 | } |
161 | 168 | ||
162 | static struct file_operations d7s_fops = { | 169 | static struct file_operations d7s_fops = { |
163 | .owner = THIS_MODULE, | 170 | .owner = THIS_MODULE, |
164 | .ioctl = d7s_ioctl, | 171 | .unlocked_ioctl = d7s_ioctl, |
165 | .open = d7s_open, | 172 | .compat_ioctl = d7s_ioctl, |
166 | .release = d7s_release, | 173 | .open = d7s_open, |
174 | .release = d7s_release, | ||
167 | }; | 175 | }; |
168 | 176 | ||
169 | static struct miscdevice d7s_miscdev = { D7S_MINOR, D7S_DEVNAME, &d7s_fops }; | 177 | static struct miscdevice d7s_miscdev = { D7S_MINOR, D7S_DEVNAME, &d7s_fops }; |
diff --git a/drivers/sbus/char/envctrl.c b/drivers/sbus/char/envctrl.c index ba56762b05..19e8eddf88 100644 --- a/drivers/sbus/char/envctrl.c +++ b/drivers/sbus/char/envctrl.c | |||
@@ -654,9 +654,8 @@ envctrl_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | |||
654 | /* Function Description: Command what to read. Mapped to user ioctl(). | 654 | /* Function Description: Command what to read. Mapped to user ioctl(). |
655 | * Return: Gives 0 for implemented commands, -EINVAL otherwise. | 655 | * Return: Gives 0 for implemented commands, -EINVAL otherwise. |
656 | */ | 656 | */ |
657 | static int | 657 | static long |
658 | envctrl_ioctl(struct inode *inode, struct file *file, | 658 | envctrl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
659 | unsigned int cmd, unsigned long arg) | ||
660 | { | 659 | { |
661 | char __user *infobuf; | 660 | char __user *infobuf; |
662 | 661 | ||
@@ -715,11 +714,14 @@ envctrl_release(struct inode *inode, struct file *file) | |||
715 | } | 714 | } |
716 | 715 | ||
717 | static struct file_operations envctrl_fops = { | 716 | static struct file_operations envctrl_fops = { |
718 | .owner = THIS_MODULE, | 717 | .owner = THIS_MODULE, |
719 | .read = envctrl_read, | 718 | .read = envctrl_read, |
720 | .ioctl = envctrl_ioctl, | 719 | .unlocked_ioctl = envctrl_ioctl, |
721 | .open = envctrl_open, | 720 | #ifdef CONFIG_COMPAT |
722 | .release = envctrl_release, | 721 | .compat_ioctl = envctrl_ioctl, |
722 | #endif | ||
723 | .open = envctrl_open, | ||
724 | .release = envctrl_release, | ||
723 | }; | 725 | }; |
724 | 726 | ||
725 | static struct miscdevice envctrl_dev = { | 727 | static struct miscdevice envctrl_dev = { |
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c index 58ed337495..5028ac2143 100644 --- a/drivers/sbus/char/openprom.c +++ b/drivers/sbus/char/openprom.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
40 | #include <linux/string.h> | 40 | #include <linux/string.h> |
41 | #include <linux/miscdevice.h> | 41 | #include <linux/miscdevice.h> |
42 | #include <linux/smp_lock.h> | ||
42 | #include <linux/init.h> | 43 | #include <linux/init.h> |
43 | #include <linux/fs.h> | 44 | #include <linux/fs.h> |
44 | #include <asm/oplib.h> | 45 | #include <asm/oplib.h> |
@@ -565,6 +566,38 @@ static int openprom_ioctl(struct inode * inode, struct file * file, | |||
565 | } | 566 | } |
566 | } | 567 | } |
567 | 568 | ||
569 | static long openprom_compat_ioctl(struct file *file, unsigned int cmd, | ||
570 | unsigned long arg) | ||
571 | { | ||
572 | long rval = -ENOTTY; | ||
573 | |||
574 | /* | ||
575 | * SunOS/Solaris only, the NetBSD one's have embedded pointers in | ||
576 | * the arg which we'd need to clean up... | ||
577 | */ | ||
578 | switch (cmd) { | ||
579 | case OPROMGETOPT: | ||
580 | case OPROMSETOPT: | ||
581 | case OPROMNXTOPT: | ||
582 | case OPROMSETOPT2: | ||
583 | case OPROMNEXT: | ||
584 | case OPROMCHILD: | ||
585 | case OPROMGETPROP: | ||
586 | case OPROMNXTPROP: | ||
587 | case OPROMU2P: | ||
588 | case OPROMGETCONS: | ||
589 | case OPROMGETFBNAME: | ||
590 | case OPROMGETBOOTARGS: | ||
591 | case OPROMSETCUR: | ||
592 | case OPROMPCI2NODE: | ||
593 | case OPROMPATH2NODE: | ||
594 | lock_kernel(); | ||
595 | rval = openprom_ioctl(file->f_dentry->d_inode, file, cmd, arg); | ||
596 | lock_kernel(); | ||
597 | break; | ||
598 | } | ||
599 | } | ||
600 | |||
568 | static int openprom_open(struct inode * inode, struct file * file) | 601 | static int openprom_open(struct inode * inode, struct file * file) |
569 | { | 602 | { |
570 | DATA *data; | 603 | DATA *data; |
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c index 656c0e8d16..f0738533f3 100644 --- a/drivers/serial/sunsu.c +++ b/drivers/serial/sunsu.c | |||
@@ -1441,7 +1441,7 @@ static void sunsu_console_write(struct console *co, const char *s, | |||
1441 | * - initialize the serial port | 1441 | * - initialize the serial port |
1442 | * Return non-zero if we didn't find a serial port. | 1442 | * Return non-zero if we didn't find a serial port. |
1443 | */ | 1443 | */ |
1444 | static int __init sunsu_console_setup(struct console *co, char *options) | 1444 | static int sunsu_console_setup(struct console *co, char *options) |
1445 | { | 1445 | { |
1446 | struct uart_port *port; | 1446 | struct uart_port *port; |
1447 | int baud = 9600; | 1447 | int baud = 9600; |
diff --git a/drivers/video/cg6.c b/drivers/video/cg6.c index 3280bb9560..414c4409e9 100644 --- a/drivers/video/cg6.c +++ b/drivers/video/cg6.c | |||
@@ -653,12 +653,6 @@ static void cg6_chip_init(struct fb_info *info) | |||
653 | sbus_writel(0, &fbc->clipminy); | 653 | sbus_writel(0, &fbc->clipminy); |
654 | sbus_writel(info->var.xres - 1, &fbc->clipmaxx); | 654 | sbus_writel(info->var.xres - 1, &fbc->clipmaxx); |
655 | sbus_writel(info->var.yres - 1, &fbc->clipmaxy); | 655 | sbus_writel(info->var.yres - 1, &fbc->clipmaxy); |
656 | |||
657 | /* Disable cursor in Brooktree DAC. */ | ||
658 | sbus_writel(0x06 << 24, &par->bt->addr); | ||
659 | tmp = sbus_readl(&par->bt->control); | ||
660 | tmp &= ~(0x03 << 24); | ||
661 | sbus_writel(tmp, &par->bt->control); | ||
662 | } | 656 | } |
663 | 657 | ||
664 | struct all_info { | 658 | struct all_info { |