]> git.neil.brown.name Git - history.git/commitdiff
Sparc64 updates:
authorDavid S. Miller <davem@nuts.ninka.net>
Wed, 13 Mar 2002 06:50:48 +0000 (22:50 -0800)
committerDavid S. Miller <davem@nuts.ninka.net>
Wed, 13 Mar 2002 06:50:48 +0000 (22:50 -0800)
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

arch/sparc/kernel/systbls.S
arch/sparc64/kernel/ebus.c
arch/sparc64/kernel/ioctl32.c
arch/sparc64/kernel/pci.c
arch/sparc64/kernel/systbls.S
arch/sparc64/mm/fault.c
include/asm-sparc/mman.h
include/asm-sparc/unistd.h
include/asm-sparc64/mman.h
include/asm-sparc64/pci.h
include/asm-sparc64/unistd.h

index 74a35509d9accf68d1f44ab56bd743b2840a0f2c..c2b13d92011fe16a255539ed28b46d38919013da 100644 (file)
@@ -46,7 +46,7 @@ sys_call_table:
 /*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
 /*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
 /*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
index 524e7f17030cd44e4d78fcae8259ef7cc9e0fe7f..2ccb4030afc387a3f15f0d140a83de9feec899b2 100644 (file)
@@ -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);
 
        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;
                else
                        n = regs[i].which_io;
index fa1cf1394f118c97fbe7051576f6151d6de03a64..4fd532d055ec1f7ec79c5ea824470ca8c9594e3f 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/ppp_defs.h>
 #include <linux/if_ppp.h>
 #include <linux/if_pppox.h>
+#include <linux/if_tun.h>
 #include <linux/mtio.h>
 #include <linux/cdrom.h>
 #include <linux/loop.h>
@@ -3998,6 +3999,8 @@ COMPATIBLE_IOCTL(BLKROSET)
 COMPATIBLE_IOCTL(BLKROGET)
 COMPATIBLE_IOCTL(BLKRRPART)
 COMPATIBLE_IOCTL(BLKFLSBUF)
+COMPATIBLE_IOCTL(BLKRASET)
+COMPATIBLE_IOCTL(BLKFRASET)
 COMPATIBLE_IOCTL(BLKSECTSET)
 COMPATIBLE_IOCTL(BLKSSZGET)
 COMPATIBLE_IOCTL(BLKBSZGET)
@@ -4077,6 +4080,12 @@ COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_ENABLE)
 COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_DISABLE)
 COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER)
 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 */
 COMPATIBLE_IOCTL(VT_SETMODE)
 COMPATIBLE_IOCTL(VT_GETMODE)
@@ -4190,6 +4199,8 @@ COMPATIBLE_IOCTL(SIOCDELDLCI)
 COMPATIBLE_IOCTL(SIOCGMIIPHY)
 COMPATIBLE_IOCTL(SIOCGMIIREG)
 COMPATIBLE_IOCTL(SIOCSMIIREG)
+COMPATIBLE_IOCTL(SIOCGIFVLAN)
+COMPATIBLE_IOCTL(SIOCSIFVLAN)
 /* SG stuff */
 COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
 COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
@@ -4632,8 +4643,10 @@ HANDLE_IOCTL(SIOCDELRT, routing_ioctl)
 HANDLE_IOCTL(SIOCRTMSG, ret_einval)
 HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp)
 HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo)
+HANDLE_IOCTL(BLKRAGET, w_long)
 HANDLE_IOCTL(BLKGETSIZE, w_long)
 HANDLE_IOCTL(0x1260, broken_blkgetsize)
+HANDLE_IOCTL(BLKFRAGET, w_long)
 HANDLE_IOCTL(BLKSECTGET, w_long)
 HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans)
 HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap)
index a4fe976d36192af1acff54496e74858e74579c21..c54afbc63dcee185cfa17c9759e9c5983bdda89e 100644 (file)
@@ -548,4 +548,13 @@ int pci_controller_num(struct pci_dev *pdev)
        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) */
index 38ef4d4c18148b932226574b1a3910d6f14f1151..58ec83ef3285f762fef2f5ccd9a60157ee93ae66 100644 (file)
@@ -47,7 +47,7 @@ sys_call_table32:
        .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
        .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
 /*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
@@ -106,7 +106,7 @@ sys_call_table:
        .word sys_recvfrom, sys_setreuid, sys_setregid, sys_rename, sys_truncate
 /*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
-/*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
 /*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
index 43d81e8ecdfffe60d21bf354fc0486943ec1ed8c..2ba62cfbb4b3acf4815304e3cd9bb6a8ae235d54 100644 (file)
@@ -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)
 {
-       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"
                             "membar    #Sync"
                             : /* no outputs */
                             : "r" (addr), "r" (mode ? VIRT_WATCHPOINT : PHYS_WATCHPOINT),
                               "i" (ASI_DMMU));
+
        lsubits |= ((unsigned long)mask << (mode ? 25 : 33));
        if (flags & VM_READ)
                lsubits |= (mode ? LSU_CONTROL_VR : LSU_CONTROL_PR);
index e6011ebbd095c4a33072e7a91fccf5fb3cb51bba..55d476bb82788065feff84057d9f1fb9f5c6dd07 100644 (file)
@@ -7,6 +7,7 @@
 #define PROT_READ      0x1             /* page can be read */
 #define PROT_WRITE     0x2             /* page can be written */
 #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 MAP_SHARED     0x01            /* Share changes */
index fbe9c00588b844023b03afa1ac4799cfe852b06a..5ef9d7c3a70d4a8f544e2f983d4e80a3856257a4 100644 (file)
 #define __NR_stat64            139 /* Linux sparc32 Specific                      */
 #define __NR_sendfile64         140 /* adjtime under SunOS                         */
 #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_getrlimit          144 /* Common                                      */
 #define __NR_setrlimit          145 /* Common                                      */
index 553e429065f34b8a4c8addc5b1e577602093c342..840eff2c8ff48dd2faf275168a208172a3699fdb 100644 (file)
@@ -7,6 +7,7 @@
 #define PROT_READ      0x1             /* page can be read */
 #define PROT_WRITE     0x2             /* page can be written */
 #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 MAP_SHARED     0x01            /* Share changes */
index 5debe1be7c1198ee2dd406002df0131ec77e2f13..00f24f2c1ee4242396ca5c48434b01f60b320b09 100644 (file)
@@ -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,
                               int write_combine);
 
+/* Platform specific MWI support. */
+#define HAVE_ARCH_PCI_MWI
+extern int pcibios_set_mwi(struct pci_dev *dev);
+
 #endif /* __KERNEL__ */
 
 #endif /* __SPARC64_PCI_H */
index 7fd34fe2cf7d99cd2f0694fcb7b1af975ba5b10f..fe0ac16c56c8285ed5a154e9b89f3dcda1dfbb80 100644 (file)
 /* #define __NR_stat64         139    Linux sparc32 Specific                      */
 #define __NR_sendfile64         140 /* adjtime under SunOS                         */
 #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_getrlimit         144 /* Common                                      */
 #define __NR_setrlimit          145 /* Common                                      */