diff options
author | Christoph Hellwig <hch@lst.de> | 2005-11-07 17:12:47 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-11-07 17:12:47 -0500 |
commit | b31023fc24e5c39d246e9c6fc75dba1a2902c1d6 (patch) | |
tree | e89713fbd2769a70271e650aa3e3db5cf59c39a6 | |
parent | 1928f8e541245eae933f8c95b64b2bc3683f9661 (diff) |
[SPARC] openprom: implement ->compat_ioctl
implement a compat_ioctl handle in the driver instead of having table
entries in sparc64 ioctl32.c (I plan to get rid of the arch ioctl32.c
file eventually)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc64/kernel/ioctl32.c | 18 | ||||
-rw-r--r-- | drivers/sbus/char/openprom.c | 33 |
2 files changed, 33 insertions, 18 deletions
diff --git a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c index d20c8098cdf2..ec4e08c523fd 100644 --- a/arch/sparc64/kernel/ioctl32.c +++ b/arch/sparc64/kernel/ioctl32.c | |||
@@ -477,24 +477,6 @@ COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */ | |||
477 | /* COMPATIBLE_IOCTL(D7SIOCRD) same value as ENVCTRL_RD_VOLTAGE_STATUS */ | 477 | /* COMPATIBLE_IOCTL(D7SIOCRD) same value as ENVCTRL_RD_VOLTAGE_STATUS */ |
478 | COMPATIBLE_IOCTL(D7SIOCWR) | 478 | COMPATIBLE_IOCTL(D7SIOCWR) |
479 | COMPATIBLE_IOCTL(D7SIOCTM) | 479 | COMPATIBLE_IOCTL(D7SIOCTM) |
480 | /* OPENPROMIO, SunOS/Solaris only, the NetBSD one's have | ||
481 | * embedded pointers in the arg which we'd need to clean up... | ||
482 | */ | ||
483 | COMPATIBLE_IOCTL(OPROMGETOPT) | ||
484 | COMPATIBLE_IOCTL(OPROMSETOPT) | ||
485 | COMPATIBLE_IOCTL(OPROMNXTOPT) | ||
486 | COMPATIBLE_IOCTL(OPROMSETOPT2) | ||
487 | COMPATIBLE_IOCTL(OPROMNEXT) | ||
488 | COMPATIBLE_IOCTL(OPROMCHILD) | ||
489 | COMPATIBLE_IOCTL(OPROMGETPROP) | ||
490 | COMPATIBLE_IOCTL(OPROMNXTPROP) | ||
491 | COMPATIBLE_IOCTL(OPROMU2P) | ||
492 | COMPATIBLE_IOCTL(OPROMGETCONS) | ||
493 | COMPATIBLE_IOCTL(OPROMGETFBNAME) | ||
494 | COMPATIBLE_IOCTL(OPROMGETBOOTARGS) | ||
495 | COMPATIBLE_IOCTL(OPROMSETCUR) | ||
496 | COMPATIBLE_IOCTL(OPROMPCI2NODE) | ||
497 | COMPATIBLE_IOCTL(OPROMPATH2NODE) | ||
498 | /* Big A */ | 480 | /* Big A */ |
499 | #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) | 481 | #if defined(CONFIG_DRM) || defined(CONFIG_DRM_MODULE) |
500 | COMPATIBLE_IOCTL(DRM_IOCTL_GET_MAGIC) | 482 | COMPATIBLE_IOCTL(DRM_IOCTL_GET_MAGIC) |
diff --git a/drivers/sbus/char/openprom.c b/drivers/sbus/char/openprom.c index 58ed33749571..5028ac214326 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; |