Commit 08c5a46f authored by David S. Miller's avatar David S. Miller

Sparc64 updates:

1) Fix EBUS register probing
2) Add some missing ioctl32 translations
3) Add sys_futex entries for sparc/sparc64
4) Add platform-specific pcibios_set_mwi implementation
   for sparc64
5) Fix set_brkpkt implementation so it works on UltraSPARC-III
parent 33edc294
...@@ -46,7 +46,7 @@ sys_call_table: ...@@ -46,7 +46,7 @@ sys_call_table:
/*125*/ .long sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, sys_truncate /*125*/ .long sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, sys_truncate
/*130*/ .long sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall /*130*/ .long sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall
/*135*/ .long sys_nis_syscall, sys_mkdir, sys_rmdir, sys_utimes, sys_stat64 /*135*/ .long sys_nis_syscall, sys_mkdir, sys_rmdir, sys_utimes, sys_stat64
/*140*/ .long sys_sendfile64, sys_nis_syscall, sys_nis_syscall, sys_gettid, sys_getrlimit /*140*/ .long sys_sendfile64, sys_nis_syscall, sys_futex, sys_gettid, sys_getrlimit
/*145*/ .long sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write /*145*/ .long sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write
/*150*/ .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64 /*150*/ .long sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
/*155*/ .long sys_fcntl64, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount /*155*/ .long sys_fcntl64, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
......
...@@ -208,7 +208,8 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev) ...@@ -208,7 +208,8 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
dev->num_addrs = len / sizeof(struct linux_prom_registers); dev->num_addrs = len / sizeof(struct linux_prom_registers);
for (i = 0; i < dev->num_addrs; i++) { for (i = 0; i < dev->num_addrs; i++) {
if (dev->bus->is_rio == 0) /* XXX Learn how to interpret ebus ranges... -DaveM */
if (regs[i].which_io >= 0x10)
n = (regs[i].which_io - 0x10) >> 2; n = (regs[i].which_io - 0x10) >> 2;
else else
n = regs[i].which_io; n = regs[i].which_io;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/ppp_defs.h> #include <linux/ppp_defs.h>
#include <linux/if_ppp.h> #include <linux/if_ppp.h>
#include <linux/if_pppox.h> #include <linux/if_pppox.h>
#include <linux/if_tun.h>
#include <linux/mtio.h> #include <linux/mtio.h>
#include <linux/cdrom.h> #include <linux/cdrom.h>
#include <linux/loop.h> #include <linux/loop.h>
...@@ -3998,6 +3999,8 @@ COMPATIBLE_IOCTL(BLKROSET) ...@@ -3998,6 +3999,8 @@ COMPATIBLE_IOCTL(BLKROSET)
COMPATIBLE_IOCTL(BLKROGET) COMPATIBLE_IOCTL(BLKROGET)
COMPATIBLE_IOCTL(BLKRRPART) COMPATIBLE_IOCTL(BLKRRPART)
COMPATIBLE_IOCTL(BLKFLSBUF) COMPATIBLE_IOCTL(BLKFLSBUF)
COMPATIBLE_IOCTL(BLKRASET)
COMPATIBLE_IOCTL(BLKFRASET)
COMPATIBLE_IOCTL(BLKSECTSET) COMPATIBLE_IOCTL(BLKSECTSET)
COMPATIBLE_IOCTL(BLKSSZGET) COMPATIBLE_IOCTL(BLKSSZGET)
COMPATIBLE_IOCTL(BLKBSZGET) COMPATIBLE_IOCTL(BLKBSZGET)
...@@ -4077,6 +4080,12 @@ COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_ENABLE) ...@@ -4077,6 +4080,12 @@ COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_ENABLE)
COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_DISABLE) COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_DISABLE)
COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER) COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER)
COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND) COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND)
/* Big T */
COMPATIBLE_IOCTL(TUNSETNOCSUM);
COMPATIBLE_IOCTL(TUNSETDEBUG);
COMPATIBLE_IOCTL(TUNSETIFF);
COMPATIBLE_IOCTL(TUNSETPERSIST);
COMPATIBLE_IOCTL(TUNSETOWNER);
/* Big V */ /* Big V */
COMPATIBLE_IOCTL(VT_SETMODE) COMPATIBLE_IOCTL(VT_SETMODE)
COMPATIBLE_IOCTL(VT_GETMODE) COMPATIBLE_IOCTL(VT_GETMODE)
...@@ -4190,6 +4199,8 @@ COMPATIBLE_IOCTL(SIOCDELDLCI) ...@@ -4190,6 +4199,8 @@ COMPATIBLE_IOCTL(SIOCDELDLCI)
COMPATIBLE_IOCTL(SIOCGMIIPHY) COMPATIBLE_IOCTL(SIOCGMIIPHY)
COMPATIBLE_IOCTL(SIOCGMIIREG) COMPATIBLE_IOCTL(SIOCGMIIREG)
COMPATIBLE_IOCTL(SIOCSMIIREG) COMPATIBLE_IOCTL(SIOCSMIIREG)
COMPATIBLE_IOCTL(SIOCGIFVLAN)
COMPATIBLE_IOCTL(SIOCSIFVLAN)
/* SG stuff */ /* SG stuff */
COMPATIBLE_IOCTL(SG_SET_TIMEOUT) COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
COMPATIBLE_IOCTL(SG_GET_TIMEOUT) COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
...@@ -4632,8 +4643,10 @@ HANDLE_IOCTL(SIOCDELRT, routing_ioctl) ...@@ -4632,8 +4643,10 @@ HANDLE_IOCTL(SIOCDELRT, routing_ioctl)
HANDLE_IOCTL(SIOCRTMSG, ret_einval) HANDLE_IOCTL(SIOCRTMSG, ret_einval)
HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp) HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp)
HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo) HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
HANDLE_IOCTL(BLKRAGET, w_long)
HANDLE_IOCTL(BLKGETSIZE, w_long) HANDLE_IOCTL(BLKGETSIZE, w_long)
HANDLE_IOCTL(0x1260, broken_blkgetsize) HANDLE_IOCTL(0x1260, broken_blkgetsize)
HANDLE_IOCTL(BLKFRAGET, w_long)
HANDLE_IOCTL(BLKSECTGET, w_long) HANDLE_IOCTL(BLKSECTGET, w_long)
HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans) HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans)
HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap) HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap)
......
...@@ -548,4 +548,13 @@ int pci_controller_num(struct pci_dev *pdev) ...@@ -548,4 +548,13 @@ int pci_controller_num(struct pci_dev *pdev)
return ret; return ret;
} }
int pcibios_set_mwi(struct pci_dev *dev)
{
/* We set correct PCI_CACHE_LINE_SIZE register values for every
* device probed on this platform. So there is nothing to check
* and this always succeeds.
*/
return 0;
}
#endif /* !(CONFIG_PCI) */ #endif /* !(CONFIG_PCI) */
...@@ -47,7 +47,7 @@ sys_call_table32: ...@@ -47,7 +47,7 @@ sys_call_table32:
.word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate .word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate
/*130*/ .word sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall /*130*/ .word sys_ftruncate, sys_flock, sys_lstat64, sys_nis_syscall, sys_nis_syscall
.word sys_nis_syscall, sys_mkdir, sys_rmdir, sys32_utimes, sys_stat64 .word sys_nis_syscall, sys_mkdir, sys_rmdir, sys32_utimes, sys_stat64
/*140*/ .word sys32_sendfile64, sys_nis_syscall, sys_nis_syscall, sys_gettid, sys32_getrlimit /*140*/ .word sys32_sendfile64, sys_nis_syscall, sys_futex, sys_gettid, sys32_getrlimit
.word sys32_setrlimit, sys_pivot_root, sys32_prctl, sys32_pciconfig_read, sys32_pciconfig_write .word sys32_setrlimit, sys_pivot_root, sys32_prctl, sys32_pciconfig_read, sys32_pciconfig_write
/*150*/ .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64 /*150*/ .word sys_nis_syscall, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
.word sys32_fcntl64, sys_nis_syscall, sys32_statfs, sys32_fstatfs, sys_oldumount .word sys32_fcntl64, sys_nis_syscall, sys32_statfs, sys32_fstatfs, sys_oldumount
...@@ -106,7 +106,7 @@ sys_call_table: ...@@ -106,7 +106,7 @@ sys_call_table:
.word sys_recvfrom, sys_setreuid, sys_setregid, sys_rename, sys_truncate .word sys_recvfrom, sys_setreuid, sys_setregid, sys_rename, sys_truncate
/*130*/ .word sys_ftruncate, sys_flock, sys_nis_syscall, sys_sendto, sys_shutdown /*130*/ .word sys_ftruncate, sys_flock, sys_nis_syscall, sys_sendto, sys_shutdown
.word sys_socketpair, sys_mkdir, sys_rmdir, sys_utimes, sys_nis_syscall .word sys_socketpair, sys_mkdir, sys_rmdir, sys_utimes, sys_nis_syscall
/*140*/ .word sys_sendfile64, sys_getpeername, sys_nis_syscall, sys_gettid, sys_getrlimit /*140*/ .word sys_sendfile64, sys_getpeername, sys_futex, sys_gettid, sys_getrlimit
.word sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write .word sys_setrlimit, sys_pivot_root, sys_prctl, sys_pciconfig_read, sys_pciconfig_write
/*150*/ .word sys_getsockname, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64 /*150*/ .word sys_getsockname, sys_nis_syscall, sys_nis_syscall, sys_poll, sys_getdents64
.word sys_nis_syscall, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount .word sys_nis_syscall, sys_nis_syscall, sys_statfs, sys_fstatfs, sys_oldumount
......
...@@ -55,13 +55,21 @@ void syscall_trace_exit(struct pt_regs *regs) ...@@ -55,13 +55,21 @@ void syscall_trace_exit(struct pt_regs *regs)
*/ */
void set_brkpt(unsigned long addr, unsigned char mask, int flags, int mode) void set_brkpt(unsigned long addr, unsigned char mask, int flags, int mode)
{ {
unsigned long lsubits = LSU_CONTROL_IC|LSU_CONTROL_DC|LSU_CONTROL_IM|LSU_CONTROL_DM; unsigned long lsubits;
__asm__ __volatile__("ldxa [%%g0] %1, %0"
: "=r" (lsubits)
: "i" (ASI_LSU_CONTROL));
lsubits &= ~(LSU_CONTROL_PM | LSU_CONTROL_VM |
LSU_CONTROL_PR | LSU_CONTROL_VR |
LSU_CONTROL_PW | LSU_CONTROL_VW);
__asm__ __volatile__("stxa %0, [%1] %2\n\t" __asm__ __volatile__("stxa %0, [%1] %2\n\t"
"membar #Sync" "membar #Sync"
: /* no outputs */ : /* no outputs */
: "r" (addr), "r" (mode ? VIRT_WATCHPOINT : PHYS_WATCHPOINT), : "r" (addr), "r" (mode ? VIRT_WATCHPOINT : PHYS_WATCHPOINT),
"i" (ASI_DMMU)); "i" (ASI_DMMU));
lsubits |= ((unsigned long)mask << (mode ? 25 : 33)); lsubits |= ((unsigned long)mask << (mode ? 25 : 33));
if (flags & VM_READ) if (flags & VM_READ)
lsubits |= (mode ? LSU_CONTROL_VR : LSU_CONTROL_PR); lsubits |= (mode ? LSU_CONTROL_VR : LSU_CONTROL_PR);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#define PROT_READ 0x1 /* page can be read */ #define PROT_READ 0x1 /* page can be read */
#define PROT_WRITE 0x2 /* page can be written */ #define PROT_WRITE 0x2 /* page can be written */
#define PROT_EXEC 0x4 /* page can be executed */ #define PROT_EXEC 0x4 /* page can be executed */
#define PROT_SEM 0x8 /* page may be used for atomic ops */
#define PROT_NONE 0x0 /* page can not be accessed */ #define PROT_NONE 0x0 /* page can not be accessed */
#define MAP_SHARED 0x01 /* Share changes */ #define MAP_SHARED 0x01 /* Share changes */
......
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
#define __NR_stat64 139 /* Linux sparc32 Specific */ #define __NR_stat64 139 /* Linux sparc32 Specific */
#define __NR_sendfile64 140 /* adjtime under SunOS */ #define __NR_sendfile64 140 /* adjtime under SunOS */
#define __NR_getpeername 141 /* Common */ #define __NR_getpeername 141 /* Common */
/* #define __NR_gethostid 142 SunOS Specific */ #define __NR_futex 142 /* gethostid under SunOS */
#define __NR_gettid 143 /* ENOSYS under SunOS */ #define __NR_gettid 143 /* ENOSYS under SunOS */
#define __NR_getrlimit 144 /* Common */ #define __NR_getrlimit 144 /* Common */
#define __NR_setrlimit 145 /* Common */ #define __NR_setrlimit 145 /* Common */
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#define PROT_READ 0x1 /* page can be read */ #define PROT_READ 0x1 /* page can be read */
#define PROT_WRITE 0x2 /* page can be written */ #define PROT_WRITE 0x2 /* page can be written */
#define PROT_EXEC 0x4 /* page can be executed */ #define PROT_EXEC 0x4 /* page can be executed */
#define PROT_SEM 0x8 /* page may be used for atomic ops */
#define PROT_NONE 0x0 /* page can not be accessed */ #define PROT_NONE 0x0 /* page can not be accessed */
#define MAP_SHARED 0x01 /* Share changes */ #define MAP_SHARED 0x01 /* Share changes */
......
...@@ -201,6 +201,10 @@ extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, ...@@ -201,6 +201,10 @@ extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
enum pci_mmap_state mmap_state, enum pci_mmap_state mmap_state,
int write_combine); int write_combine);
/* Platform specific MWI support. */
#define HAVE_ARCH_PCI_MWI
extern int pcibios_set_mwi(struct pci_dev *dev);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* __SPARC64_PCI_H */ #endif /* __SPARC64_PCI_H */
...@@ -157,7 +157,7 @@ ...@@ -157,7 +157,7 @@
/* #define __NR_stat64 139 Linux sparc32 Specific */ /* #define __NR_stat64 139 Linux sparc32 Specific */
#define __NR_sendfile64 140 /* adjtime under SunOS */ #define __NR_sendfile64 140 /* adjtime under SunOS */
#define __NR_getpeername 141 /* Common */ #define __NR_getpeername 141 /* Common */
/* #define __NR_gethostid 142 SunOS Specific */ #define __NR_futex 142 /* gethostid under SunOS */
#define __NR_gettid 143 /* ENOSYS under SunOS */ #define __NR_gettid 143 /* ENOSYS under SunOS */
#define __NR_getrlimit 144 /* Common */ #define __NR_getrlimit 144 /* Common */
#define __NR_setrlimit 145 /* Common */ #define __NR_setrlimit 145 /* Common */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment