Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / arch / m32r / kernel / entry.S
index 29b0d8d..ac6d840 100644 (file)
@@ -20,7 +20,7 @@
  * Stack layout in 'ret_from_system_call':
  *     ptrace needs to have all regs on the stack.
  *     if the order here is changed, it needs to be
- *     updated in fork.c:copy_process, signal.c:do_signal,
+ *     updated in fork.c:copy_thread, signal.c:do_signal,
  *     ptrace.c and ptrace.h
  *
  * M32Rx/M32R2                         M32R
  *       @(0x38,sp) - syscall_nr       ditto
  *       @(0x3c,sp) - acc0h            @(0x3c,sp) - acch
  *       @(0x40,sp) - acc0l            @(0x40,sp) - accl
- *       @(0x44,sp) - acc1h            @(0x44,sp) - psw
- *       @(0x48,sp) - acc1l            @(0x48,sp) - bpc
- *       @(0x4c,sp) - psw              @(0x4c,sp) - bbpsw
- *       @(0x50,sp) - bpc              @(0x50,sp) - bbpc
- *       @(0x54,sp) - bbpsw            @(0x54,sp) - spu (cr3)
- *       @(0x58,sp) - bbpc             @(0x58,sp) - fp (r13)
- *       @(0x5c,sp) - spu (cr3)                @(0x5c,sp) - lr (r14)
- *       @(0x60,sp) - fp (r13)         @(0x60,sp) - spi (cr12)
- *       @(0x64,sp) - lr (r14)         @(0x64,sp) - orig_r0
- *       @(0x68,sp) - spi (cr2)
- *       @(0x6c,sp) - orig_r0
- *
+ *       @(0x44,sp) - acc1h            @(0x44,sp) - dummy_acc1h
+ *       @(0x48,sp) - acc1l            @(0x48,sp) - dummy_acc1l
+ *       @(0x4c,sp) - psw              ditto
+ *       @(0x50,sp) - bpc              ditto
+ *       @(0x54,sp) - bbpsw            ditto
+ *       @(0x58,sp) - bbpc             ditto
+ *       @(0x5c,sp) - spu (cr3)                ditto
+ *       @(0x60,sp) - fp (r13)         ditto
+ *       @(0x64,sp) - lr (r14)         ditto
+ *       @(0x68,sp) - spi (cr2)                ditto
+ *       @(0x6c,sp) - orig_r0          ditto
  */
 
-#include <linux/config.h>
 #include <linux/linkage.h>
 #include <asm/irq.h>
 #include <asm/unistd.h>
 #include <asm/mmu_context.h>
 
 #if !defined(CONFIG_MMU)
-#define sys_madvise             sys_ni_syscall
-#define sys_readahead           sys_ni_syscall
-#define sys_mprotect            sys_ni_syscall
-#define sys_msync               sys_ni_syscall
-#define sys_mlock               sys_ni_syscall
-#define sys_munlock             sys_ni_syscall
-#define sys_mlockall            sys_ni_syscall
-#define sys_munlockall          sys_ni_syscall
-#define sys_mremap              sys_ni_syscall
-#define sys_mincore             sys_ni_syscall
+#define sys_madvise            sys_ni_syscall
+#define sys_readahead          sys_ni_syscall
+#define sys_mprotect           sys_ni_syscall
+#define sys_msync              sys_ni_syscall
+#define sys_mlock              sys_ni_syscall
+#define sys_munlock            sys_ni_syscall
+#define sys_mlockall           sys_ni_syscall
+#define sys_munlockall         sys_ni_syscall
+#define sys_mremap             sys_ni_syscall
+#define sys_mincore            sys_ni_syscall
+#define sys_remap_file_pages   sys_ni_syscall
 #endif /* CONFIG_MMU */
 
 #define R4(reg)                        @reg
 #define ACC0L(reg)             @(0x40,reg)
 #define ACC1H(reg)             @(0x44,reg)
 #define ACC1L(reg)             @(0x48,reg)
+#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
+#define ACCH(reg)              @(0x3C,reg)
+#define ACCL(reg)              @(0x40,reg)
+#else
+#error unknown isa configuration
+#endif
 #define PSW(reg)               @(0x4C,reg)
 #define BPC(reg)               @(0x50,reg)
 #define BBPSW(reg)             @(0x54,reg)
 #define LR(reg)                        @(0x64,reg)
 #define SP(reg)                        @(0x68,reg)
 #define ORIG_R0(reg)           @(0x6C,reg)
-#elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R)
-#define ACCH(reg)              @(0x3C,reg)
-#define ACCL(reg)              @(0x40,reg)
-#define PSW(reg)               @(0x44,reg)
-#define BPC(reg)               @(0x48,reg)
-#define BBPSW(reg)             @(0x4C,reg)
-#define BBPC(reg)              @(0x50,reg)
-#define SPU(reg)               @(0x54,reg)
-#define FP(reg)                        @(0x58,reg)  /* FP = R13 */
-#define LR(reg)                        @(0x5C,reg)
-#define SP(reg)                        @(0x60,reg)
-#define ORIG_R0(reg)           @(0x64,reg)
-#else
-#error unknown isa configuration
-#endif
 
 CF_MASK                = 0x00000001
 TF_MASK                = 0x00000100
@@ -141,7 +131,7 @@ VM_MASK             = 0x00020000
 #endif
 
 ENTRY(ret_from_fork)
-       ld      r0, @sp+
+       pop     r0
        bl      schedule_tail
        GET_THREAD_INFO(r8)
        bra     syscall_exit
@@ -230,7 +220,7 @@ restore_all:
        RESTORE_ALL
 
        # perform work that needs to be done immediately before resumption
-       # r9 : frags
+       # r9 : flags
        ALIGN
 work_pending:
        and3    r4, r9, #_TIF_NEED_RESCHED
@@ -314,12 +304,12 @@ ENTRY(ei_handler)
        mv      r1, sp                  ; arg1(regs)
 #if defined(CONFIG_CHIP_VDEC2) || defined(CONFIG_CHIP_XNUX2) \
        || defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_M32102) \
-       || defined(CONFIG_CHIP_OPSP)
+       || defined(CONFIG_CHIP_OPSP) || defined(CONFIG_CHIP_M32104)
 
 ;    GET_ICU_STATUS;
        seth    r0, #shigh(M32R_ICU_ISTS_ADDR)
        ld      r0, @(low(M32R_ICU_ISTS_ADDR),r0)
-       st      r0, @-sp
+       push    r0
 #if defined(CONFIG_SMP)
        /*
         * If IRQ == 0      --> Nothing to do,  Not write IMASK
@@ -540,10 +530,23 @@ check_int2:
        bra     check_end
        .fillinsn
 check_end:
-#endif  /* CONFIG_PLAT_OPSPUT */
+#elif defined(CONFIG_PLAT_M32104UT)
+       add3    r2, r0, #-(M32R_IRQ_INT1)       ; INT1# interrupt
+       bnez    r2, check_end
+       ; read ICU status register of PLD
+       seth    r0, #high(PLD_ICUISTS)
+       or3     r0, r0, #low(PLD_ICUISTS)
+       lduh    r0, @r0
+       slli    r0, #21
+       srli    r0, #27                         ; ISN
+       addi    r0, #(M32104UT_PLD_IRQ_BASE)
+       bra     check_end
+       .fillinsn
+check_end:
+#endif  /* CONFIG_PLAT_M32104UT */
        bl      do_IRQ
 #endif  /* CONFIG_SMP */
-       ld      r14, @sp+
+       pop     r14
        seth    r0, #shigh(M32R_ICU_IMASK_ADDR)
        st      r14, @(low(M32R_ICU_IMASK_ADDR),r0)
 #else
@@ -650,10 +653,6 @@ ENTRY(rie_handler)
 /* void rie_handler(int error_code) */
        SWITCH_TO_KERNEL_STACK
        SAVE_ALL
-       mvfc    r0, bpc
-       ld      r1, @r0
-       seth    r0, #0xa0f0
-       st      r1, @r0
        ldi     r1, #0x20                       ; error_code
        mv      r0, sp                          ; pt_regs
        bl      do_rie_handler
@@ -680,6 +679,15 @@ ENTRY(debug_trap)
        bl      do_debug_trap
        bra     error_code
 
+ENTRY(ill_trap)
+       /* void ill_trap(void) */
+       SWITCH_TO_KERNEL_STACK
+       SAVE_ALL
+       ldi     r1, #0                          ; error_code ; FIXME
+       mv      r0, sp                          ; pt_regs
+       bl      do_ill_trap
+       bra     error_code
+
 
 /* Cache flushing handler */
 ENTRY(cache_flushing_handler)
@@ -725,25 +733,25 @@ ENTRY(sys_call_table)
        .long sys_time
        .long sys_mknod
        .long sys_chmod                 /* 15 */
-       .long sys_lchown
+       .long sys_ni_syscall            /* lchown16 syscall holder */
        .long sys_ni_syscall            /* old break syscall holder */
-       .long sys_stat
+       .long sys_ni_syscall            /* old stat syscall holder */
        .long sys_lseek
        .long sys_getpid                /* 20 */
        .long sys_mount
        .long sys_oldumount
-       .long sys_setuid
-       .long sys_getuid
+       .long sys_ni_syscall            /* setuid16 syscall holder */
+       .long sys_ni_syscall            /* getuid16 syscall holder */
        .long sys_stime                 /* 25 */
        .long sys_ptrace
        .long sys_alarm
-       .long sys_fstat
+       .long sys_ni_syscall            /* old fstat syscall holder */
        .long sys_pause
        .long sys_utime                 /* 30 */
-       .long sys_cacheflush            /* for M32R */ /* old stty syscall holder */
+       .long sys_ni_syscall            /* old stty syscall holder */
        .long sys_cachectl              /* for M32R */ /* old gtty syscall holder */
        .long sys_access
-       .long sys_nice
+       .long sys_ni_syscall            /* nice syscall holder */
        .long sys_ni_syscall            /* 35  -  old ftime syscall holder */
        .long sys_sync
        .long sys_kill
@@ -755,17 +763,17 @@ ENTRY(sys_call_table)
        .long sys_times
        .long sys_ni_syscall            /* old prof syscall holder */
        .long sys_brk                   /* 45 */
-       .long sys_setgid
-       .long sys_getgid
-       .long sys_signal
-       .long sys_geteuid
-       .long sys_getegid               /* 50 */
+       .long sys_ni_syscall            /* setgid16 syscall holder */
+       .long sys_getgid                /* will be unused */
+       .long sys_ni_syscall            /* signal syscall holder */
+       .long sys_ni_syscall            /* geteuid16  syscall holder */
+       .long sys_ni_syscall            /* 50 - getegid16 syscall holder */
        .long sys_acct
        .long sys_umount                /* recycled never used phys() */
        .long sys_ni_syscall            /* old lock syscall holder */
        .long sys_ioctl
-       .long sys_fcntl                 /* 55 */
-       .long sys_ni_syscall            /* old mpx syscall holder */
+       .long sys_fcntl                 /* 55 - will be unused */
+       .long sys_ni_syscall            /* mpx syscall holder */
        .long sys_setpgid
        .long sys_ni_syscall            /* old ulimit syscall holder */
        .long sys_ni_syscall            /* sys_olduname */
@@ -776,41 +784,41 @@ ENTRY(sys_call_table)
        .long sys_getppid
        .long sys_getpgrp               /* 65 */
        .long sys_setsid
-       .long sys_sigaction
-       .long sys_sgetmask
-       .long sys_ssetmask
-       .long sys_setreuid              /* 70 */
-       .long sys_setregid
-       .long sys_sigsuspend
-       .long sys_sigpending
+       .long sys_ni_syscall            /* sigaction syscall holder */
+       .long sys_ni_syscall            /* sgetmask syscall holder */
+       .long sys_ni_syscall            /* ssetmask syscall holder */
+       .long sys_ni_syscall            /* 70 - setreuid16 syscall holder */
+       .long sys_ni_syscall            /* setregid16 syscall holder */
+       .long sys_ni_syscall            /* sigsuspend syscall holder */
+       .long sys_ni_syscall            /* sigpending syscall holder */
        .long sys_sethostname
        .long sys_setrlimit             /* 75 */
-       .long sys_getrlimit
+       .long sys_getrlimit/*will be unused*/
        .long sys_getrusage
        .long sys_gettimeofday
        .long sys_settimeofday
-       .long sys_getgroups             /* 80 */
-       .long sys_setgroups
+       .long sys_ni_syscall            /* 80 - getgroups16 syscall holder */
+       .long sys_ni_syscall            /* setgroups16 syscall holder */
        .long sys_ni_syscall            /* sys_oldselect */
        .long sys_symlink
-       .long sys_lstat
+       .long sys_ni_syscall            /* old lstat syscall holder */
        .long sys_readlink              /* 85 */
        .long sys_uselib
        .long sys_swapon
        .long sys_reboot
-       .long old_readdir
+       .long sys_ni_syscall            /* readdir syscall holder */
        .long sys_ni_syscall            /* 90 - old_mmap syscall holder */
        .long sys_munmap
        .long sys_truncate
        .long sys_ftruncate
        .long sys_fchmod
-       .long sys_fchown                /* 95 */
+       .long sys_ni_syscall            /* 95 - fchwon16  syscall holder */
        .long sys_getpriority
        .long sys_setpriority
        .long sys_ni_syscall            /* old profil syscall holder */
        .long sys_statfs
        .long sys_fstatfs               /* 100 */
-       .long sys_ni_syscall            /* ioperm */
+       .long sys_ni_syscall            /* ioperm syscall holder */
        .long sys_socketcall
        .long sys_syslog
        .long sys_setitimer
@@ -818,37 +826,37 @@ ENTRY(sys_call_table)
        .long sys_newstat
        .long sys_newlstat
        .long sys_newfstat
-       .long sys_uname
-       .long sys_ni_syscall            /* 110  -  iopl */
+       .long sys_ni_syscall            /* old uname syscall holder */
+       .long sys_ni_syscall            /* 110  -  iopl syscall holder */
        .long sys_vhangup
-       .long sys_ni_syscall            /* for idle */
-       .long sys_ni_syscall            /* for vm86old */
+       .long sys_ni_syscall            /* idle syscall holder */
+       .long sys_ni_syscall            /* vm86old syscall holder */
        .long sys_wait4
        .long sys_swapoff               /* 115 */
        .long sys_sysinfo
        .long sys_ipc
        .long sys_fsync
-       .long sys_sigreturn
+       .long sys_ni_syscall            /* sigreturn syscall holder */
        .long sys_clone                 /* 120 */
        .long sys_setdomainname
        .long sys_newuname
-       .long sys_ni_syscall            /* sys_modify_ldt */
+       .long sys_ni_syscall            /* modify_ldt syscall holder */
        .long sys_adjtimex
        .long sys_mprotect              /* 125 */
-       .long sys_sigprocmask
-       .long sys_ni_syscall            /* sys_create_module */
+       .long sys_ni_syscall            /* sigprocmask syscall holder */
+       .long sys_ni_syscall            /* create_module syscall holder */
        .long sys_init_module
        .long sys_delete_module
-       .long sys_ni_syscall            /* 130 sys_get_kernel_syms */
+       .long sys_ni_syscall            /* 130 get_kernel_syms */
        .long sys_quotactl
        .long sys_getpgid
        .long sys_fchdir
        .long sys_bdflush
        .long sys_sysfs                 /* 135 */
        .long sys_personality
-       .long sys_ni_syscall            /* for afs_syscall */
-       .long sys_setfsuid
-       .long sys_setfsgid
+       .long sys_ni_syscall            /* afs_syscall syscall holder */
+       .long sys_ni_syscall            /* setfsuid16 syscall holder */
+       .long sys_ni_syscall            /* setfsgid16 syscall holder */
        .long sys_llseek                /* 140 */
        .long sys_getdents
        .long sys_select
@@ -873,10 +881,10 @@ ENTRY(sys_call_table)
        .long sys_sched_rr_get_interval
        .long sys_nanosleep
        .long sys_mremap
-       .long sys_setresuid
-       .long sys_getresuid             /* 165 */
-       .long sys_tas                   /* vm86 */
-       .long sys_ni_syscall            /* sys_query_module */
+       .long sys_ni_syscall            /* setresuid16 syscall holder */
+       .long sys_ni_syscall            /* 165 - getresuid16 syscall holder */
+       .long sys_tas                   /* vm86 syscall holder */
+       .long sys_ni_syscall            /* query_module syscall holder */
        .long sys_poll
        .long sys_nfsservctl
        .long sys_setresgid             /* 170 */
@@ -891,7 +899,7 @@ ENTRY(sys_call_table)
        .long sys_rt_sigsuspend
        .long sys_pread64               /* 180 */
        .long sys_pwrite64
-       .long sys_chown
+       .long sys_ni_syscall            /* chown16 syscall holder */
        .long sys_getcwd
        .long sys_capget
        .long sys_capset                /* 185 */
@@ -996,4 +1004,3 @@ ENTRY(sys_call_table)
        .long sys_waitid
 
 syscall_table_size=(.-sys_call_table)
-