OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [ppc64/] [kernel/] [misc.S] - Rev 1765

Compare with Previous | Blame | View Log

/*
 *  arch/ppc64/kernel/misc.S
 *
 *  
 *
 * This file contains miscellaneous low-level functions.
 *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
 *
 * Largely rewritten by Cort Dougan (cort@cs.nmt.edu)
 * and Paul Mackerras.
 * Adapted for iSeries by Mike Corrigan (mikejc@us.ibm.com)
 * PPC64 updates by Dave Engebretsen (engebret@us.ibm.com) 
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 *
 */

#include <linux/config.h>
#include <linux/sys.h>
#include <asm/unistd.h>
#include <asm/errno.h>
#include <asm/processor.h>
#include <asm/page.h>
#include <asm/cache.h>
#include <asm/cputable.h>
#include "ppc_asm.h"

        .text

/*
 * Returns (address we're running at) - (address we were linked at)
 * for use before the text and data are mapped to KERNELBASE.
 */

_GLOBAL(reloc_offset)
        mflr    r0
        bl      1f
1:      mflr    r3
        LOADADDR(r4,1b)
        sub     r3,r4,r3
        mtlr    r0
        blr

_GLOBAL(get_msr)
        mfmsr   r3
        blr

_GLOBAL(get_dar)
        mfdar   r3
        blr

_GLOBAL(get_srr0)
        mfsrr0  r3
        blr

_GLOBAL(get_srr1)
        mfsrr1  r3
        blr
        
_GLOBAL(get_sp)
        mr      r3,r1
        blr
                
#ifdef CONFIG_PPC_ISERIES
/* unsigned long __no_use_save_flags(void) */
_GLOBAL(__no_use_save_flags)
        mfspr   r4,SPRG3
        lbz     r3,PACAPROCENABLED(r4)
        /* shift into position of MSR.EE */
        sldi    r3,r3,15
        blr

/* void __no_use_restore_flags(unsigned long flags) */
_GLOBAL(__no_use_restore_flags)
        /* shift from position of MSR.EE */
        srdi    r3,r3,15
        mfspr   r6,SPRG3
        lbz     r5,PACAPROCENABLED(r6)
         /* Check if things are setup the way we want _already_. */
        cmpw    0,r3,r5
        beqlr
        /* are we enabling interrupts? */
        cmpi    0,r3,0
        stb     r3,PACAPROCENABLED(r6)
        beqlr
        /* Check pending interrupts */
        CHECKANYINT(r4,r5)
        beqlr

        /* 
         * Handle pending interrupts in interrupt context
         */
        li      r0,0x5555
        sc
        blr

_GLOBAL(__no_use_cli)
        mfspr   r5,SPRG3
        lbz     r3,PACAPROCENABLED(r5)
        li      r4,0
        stb     r4,PACAPROCENABLED(r5)
        /* shift into position of MSR.EE */
        sldi    r3,r3,15
        blr                     /* Done */

_GLOBAL(__no_use_sti)
        mfspr   r6,SPRG3
        li      r3,1
        stb     r3,PACAPROCENABLED(r6)

        /* Check for pending interrupts
         *   A decrementer, IPI or PMC interrupt may have occurred
         *   while we were in the hypervisor (which enables)
         */
        CHECKANYINT(r4,r5)
        beqlr

        /* 
         * Handle pending interrupts in interrupt context
         */
        li      r0,0x5555
        sc      
        blr
#endif
/*
 * Flush instruction cache.
 */
_GLOBAL(flush_instruction_cache)

/*
 * This is called by kgdb code
 * and should probably go away
 * to be replaced by invalidating
 * the cache lines that are actually
 * modified
 */
        /* use invalidate-all bit in HID0
         *  - is this consistent across all 64-bit cpus?  -- paulus */
        mfspr   r3,HID0
        ori     r3,r3,HID0_ICFI
        mtspr   HID0,r3
        sync
        isync
        blr

/*
 * Write any modified data cache blocks out to memory
 * and invalidate the corresponding instruction cache blocks.
 *
 * flush_icache_range(unsigned long start, unsigned long stop)
 *
 *   flush all bytes from start through stop-1 inclusive
 */

_GLOBAL(flush_icache_range)

/*
 * Flush the data cache to memory 
 * 
 * Different systems have different cache line sizes
 * and in some cases i-cache and d-cache line sizes differ from
 * each other.
 */
        LOADADDR(r10,naca)              /* Get Naca address */
        ld      r10,0(r10)
        LOADADDR(r11,systemcfg)         /* Get systemcfg address */
        ld      r11,0(r11)
        lwz     r7,DCACHEL1LINESIZE(r11)        /* Get cache line size */
        addi    r5,r7,-1
        andc    r6,r3,r5                /* round low to line bdy */
        subf    r8,r6,r4                /* compute length */
        add     r8,r8,r5                /* ensure we get enough */
        lwz     r9,DCACHEL1LOGLINESIZE(r10)     /* Get log-2 of cache line size */
        srw.    r8,r8,r9                /* compute line count */
        beqlr                           /* nothing to do? */
        mtctr   r8
1:      dcbst   0,r6
        add     r6,r6,r7
        bdnz    1b
        sync

/* Now invalidate the instruction cache */
        
        lwz     r7,ICACHEL1LINESIZE(r11)        /* Get Icache line size */
        addi    r5,r7,-1
        andc    r6,r3,r5                /* round low to line bdy */
        subf    r8,r6,r4                /* compute length */
        add     r8,r8,r5
        lwz     r9,ICACHEL1LOGLINESIZE(r10)     /* Get log-2 of Icache line size */
        srw.    r8,r8,r9                /* compute line count */
        beqlr                           /* nothing to do? */
        mtctr   r8
2:      icbi    0,r6
        add     r6,r6,r7
        bdnz    2b
        isync
        blr
        
/*
 * Like above, but only do the D-cache.
 *
 * flush_dcache_range(unsigned long start, unsigned long stop)
 *
 *    flush all bytes from start to stop-1 inclusive
 */
_GLOBAL(flush_dcache_range)

/*
 * Flush the data cache to memory 
 * 
 * Different systems have different cache line sizes
 */
        LOADADDR(r10,naca)              /* Get Naca address */
        ld      r10,0(r10)
        LOADADDR(r11,systemcfg)         /* Get systemcfg address */
        ld      r11,0(r11)
        lwz     r7,DCACHEL1LINESIZE(r11)        /* Get dcache line size */
        addi    r5,r7,-1
        andc    r6,r3,r5                /* round low to line bdy */
        subf    r8,r6,r4                /* compute length */
        add     r8,r8,r5                /* ensure we get enough */
        lwz     r9,DCACHEL1LOGLINESIZE(r10)     /* Get log-2 of dcache line size */
        srw.    r8,r8,r9                /* compute line count */
        beqlr                           /* nothing to do? */
        mtctr   r8
0:      dcbst   0,r6
        add     r6,r6,r7
        bdnz    0b
        sync
        blr

/*
 * Flush a particular page from the data cache to RAM.
 * Note: this is necessary because the instruction cache does *not*
 * snoop from the data cache.
 *
 *      void __flush_dcache_icache(void *page)
 */
_GLOBAL(__flush_dcache_icache)
/*
 * Flush the data cache to memory 
 * 
 * Different systems have different cache line sizes
 */

/* Flush the dcache */
        LOADADDR(r7,naca)
        ld      r7,0(r7)
        LOADADDR(r8,systemcfg)                  /* Get systemcfg address */
        ld      r8,0(r8)
        clrrdi  r3,r3,12                    /* Page align */
        lwz     r4,DCACHEL1LINESPERPAGE(r7)     /* Get # dcache lines per page */
        lwz     r5,DCACHEL1LINESIZE(r8)         /* Get dcache line size */
        mr      r6,r3
        mtctr   r4
0:      dcbst   0,r6
        add     r6,r6,r5
        bdnz    0b
        sync

/* Now invalidate the icache */ 

        lwz     r4,ICACHEL1LINESPERPAGE(r7)     /* Get # icache lines per page */
        lwz     r5,ICACHEL1LINESIZE(r8)         /* Get icache line size */
        mtctr   r4
1:      icbi    0,r3
        add     r3,r3,r5
        bdnz    1b
        isync
        blr
        
/*
 * I/O string operations
 *
 * insb(port, buf, len)
 * outsb(port, buf, len)
 * insw(port, buf, len)
 * outsw(port, buf, len)
 * insl(port, buf, len)
 * outsl(port, buf, len)
 * insw_ns(port, buf, len)
 * outsw_ns(port, buf, len)
 * insl_ns(port, buf, len)
 * outsl_ns(port, buf, len)
 *
 * The *_ns versions don't do byte-swapping.
 */
_GLOBAL(_insb)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,1
        blelr-
00:     lbz     r5,0(r3)
        eieio
        stbu    r5,1(r4)
        bdnz    00b
        blr

_GLOBAL(_outsb)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,1
        blelr-
00:     lbzu    r5,1(r4)
        stb     r5,0(r3)
        eieio
        bdnz    00b
        blr     

_GLOBAL(_insw)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,2
        blelr-
00:     lhbrx   r5,0,r3
        eieio
        sthu    r5,2(r4)
        bdnz    00b
        blr

_GLOBAL(_outsw)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,2
        blelr-
00:     lhzu    r5,2(r4)
        eieio
        sthbrx  r5,0,r3 
        bdnz    00b
        blr     

_GLOBAL(_insl)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,4
        blelr-
00:     lwbrx   r5,0,r3
        eieio
        stwu    r5,4(r4)
        bdnz    00b
        blr

_GLOBAL(_outsl)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,4
        blelr-
00:     lwzu    r5,4(r4)
        stwbrx  r5,0,r3
        eieio
        bdnz    00b
        blr     

_GLOBAL(_insw_ns)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,2
        blelr-
00:     lhz     r5,0(r3)
        eieio
        sthu    r5,2(r4)
        bdnz    00b
        blr

_GLOBAL(_outsw_ns)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,2
        blelr-
00:     lhzu    r5,2(r4)
        sth     r5,0(r3)
        eieio
        bdnz    00b
        blr     

_GLOBAL(_insl_ns)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,4
        blelr-
00:     lwz     r5,0(r3)
        eieio
        stwu    r5,4(r4)
        bdnz    00b
        blr

_GLOBAL(_outsl_ns)
        cmpwi   0,r5,0
        mtctr   r5
        subi    r4,r4,4
        blelr-
00:     lwzu    r5,4(r4)
        stw     r5,0(r3)
        eieio
        bdnz    00b
        blr     

/*
 * Extended precision shifts
 *
 * R3/R4 has 64 bit value
 * R5    has shift count
 * result in R3/R4
 *
 *  ashrdi3:     XXXYYY/ZZZAAA -> SSSXXX/YYYZZZ
 *  ashldi3:     XXXYYY/ZZZAAA -> YYYZZZ/AAA000
 *  lshrdi3:     XXXYYY/ZZZAAA -> 000XXX/YYYZZZ
 */
/* MIKEC: These may no longer be needed...what does gcc expect ? */
        
_GLOBAL(__ashrdi3)
        li      r6,32
        sub     r6,r6,r5
        slw     r7,r3,r6        /* isolate YYY */
        srw     r4,r4,r5        /* isolate ZZZ */
        or      r4,r4,r7        /* YYYZZZ */
        sraw    r3,r3,r5        /* SSSXXX */
        blr

_GLOBAL(__ashldi3)
        li      r6,32
        sub     r6,r6,r5
        srw     r7,r4,r6        /* isolate ZZZ */
        slw     r4,r4,r5        /* AAA000 */
        slw     r3,r3,r5        /* YYY--- */
        or      r3,r3,r7        /* YYYZZZ */
        blr

_GLOBAL(__lshrdi3)
        li      r6,32
        sub     r6,r6,r5
        slw     r7,r3,r6        /* isolate YYY */
        srw     r4,r4,r5        /* isolate ZZZ */
        or      r4,r4,r7        /* YYYZZZ */
        srw     r3,r3,r5        /* 000XXX */
        blr

_GLOBAL(abs)
        cmpi    0,r3,0
        bge     10f
        neg     r3,r3
10:     blr

_GLOBAL(_get_SP)
        mr      r3,r1           /* Close enough */
        blr
        
_GLOBAL(_get_PVR)
        mfspr   r3,PVR
        blr

_GLOBAL(_get_PIR)
        mfspr   r3,PIR
        blr

_GLOBAL(_get_HID0)
        mfspr   r3,HID0
        blr

_GLOBAL(cvt_fd)
        lfd     0,0(r5)         /* load up fpscr value */
        mtfsf   0xff,0
        lfs     0,0(r3)
        stfd    0,0(r4)
        mffs    0                /* save new fpscr value */
        stfd    0,0(r5)
        blr

_GLOBAL(cvt_df)
        lfd     0,0(r5)         /* load up fpscr value */
        mtfsf   0xff,0
        lfd     0,0(r3)
        stfs    0,0(r4)
        mffs    0                /* save new fpscr value */
        stfd    0,0(r5)
        blr

/*
 * identify_cpu,
 * In:   r3 = base of the cpu_specs array
 *       r4 = address of cur_cpu_spec
 *       r5 = relocation offset
 */
_GLOBAL(identify_cpu)
        mfpvr   r7
1:
        lwz     r8,CPU_SPEC_PVR_MASK(r3)
        and     r8,r8,r7
        lwz     r9,CPU_SPEC_PVR_VALUE(r3)
        cmplw   0,r9,r8
        beq     1f
        addi    r3,r3,CPU_SPEC_ENTRY_SIZE
        b       1b
1:
        add     r3,r3,r5
        std     r3,0(r4)
        blr

/*
 * do_cpu_ftr_fixups - goes through the list of CPU feature fixups
 * and writes nop's over sections of code that don't apply for this cpu.
 * r3 = data offset (not changed)
 */
_GLOBAL(do_cpu_ftr_fixups)
/* Dummy feature section to make sure section exists */
BEGIN_FTR_SECTION
END_FTR_SECTION(0,0)
        /* Get CPU 0 features */
        LOADADDR(r6,cur_cpu_spec)
        sub     r6,r6,r3
        ld      r4,0(r6)
        sub     r4,r4,r3
        ld      r4,CPU_SPEC_FEATURES(r4)
        /* Get the fixup table */
        LOADADDR(r6,__start___ftr_fixup)
        sub     r6,r6,r3
        LOADADDR(r7,__stop___ftr_fixup)
        sub     r7,r7,r3
        /* Do the fixup */
1:      cmpld   r6,r7
        bgelr
        addi    r6,r6,32
        ld      r8,-32(r6)      /* mask */
        and     r8,r8,r4
        ld      r9,-24(r6)      /* value */
        cmpld   r8,r9
        beq     1b
        ld      r8,-16(r6)      /* section begin */
        ld      r9,-8(r6)       /* section end */
        subf.   r9,r8,r9
        beq     1b
        /* write nops over the section of code */
        /* todo: if large section, add a branch at the start of it */
        srwi    r9,r9,2
        mtctr   r9
        sub     r8,r8,r3
        lis     r0,0x60000000@h /* nop */
3:      stw     r0,0(r8)
        andi.   r10,r4,CPU_FTR_SPLIT_ID_CACHE@l
        beq     2f
        dcbst   0,r8            /* suboptimal, but simpler */
        sync
        icbi    0,r8
2:      addi    r8,r8,4
        bdnz    3b
        sync                    /* additional sync needed on g4 */
        isync
        b       1b

/*
 * call_setup_cpu - call the setup_cpu function for this cpu
 * r3 = data offset
 *
 * Setup function is called with:
 *   r3 = data offset
 *   r4 = ptr to CPU spec (relocated)
 */
_GLOBAL(call_setup_cpu)
        LOADADDR(r4, cur_cpu_spec)
        sub     r4,r4,r3
        lwz     r4,0(r4)                # load pointer to cpu_spec
        sub     r4,r4,r3                # relocate
        lwz     r6,CPU_SPEC_SETUP(r4)   # load function pointer
        sub     r6,r6,r3        
        mtctr   r6
        bctr

/*
 * Create a kernel thread
 *   arch_kernel_thread(fn, arg, flags)
 */
_GLOBAL(arch_kernel_thread)
        mr      r6,r3           /* function */
        ori     r3,r5,CLONE_VM  /* flags */
        li      r0,__NR_clone
        sc
        cmpi    0,r3,0          /* parent or child? */
        bnelr                   /* return if parent */

        li      r0,0            /* clear out p->thread.regs */
        ld      r7,PACACURRENT(r13)
        std     r0,THREAD+PT_REGS(r7)   /* since we don't have user ctx */
        li      r0,RUN_FLAG             /* Run light on */
        std     r0,THREAD+THREAD_FLAGS(r7)

        ld      r2,8(r6)
        ld      r6,0(r6)
        mtlr    r6              /* fn addr in lr */
        mr      r3,r4           /* load arg and call fn */
        blrl
        li      r0,__NR_exit    /* exit after child exits */
        li      r3,0
        sc

#ifdef CONFIG_BINFMT_ELF32
/* Why isn't this a) automatic, b) written in 'C'? */   
        .balign 8
_GLOBAL(sys_call_table32)
        .llong .sys_ni_syscall  /* 0  -  old "setup()" system call */
        .llong .sys32_exit
        .llong .sys32_fork
        .llong .sys_read
        .llong .sys_write
        .llong .sys32_open              /* 5 */
        .llong .sys_close
        .llong .sys32_waitpid
        .llong .sys32_creat
        .llong .sys_link
        .llong .sys_unlink              /* 10 */
        .llong .sys32_execve
        .llong .sys_chdir
        .llong .sys32_time
        .llong .sys_mknod
        .llong .sys_chmod               /* 15 */
        .llong .sys_lchown
        .llong .sys_ni_syscall                  /* old break syscall holder */
        .llong .sys32_stat
        .llong .sys32_lseek
        .llong .sys_getpid              /* 20 */
        .llong .sys32_mount
        .llong .sys_oldumount
        .llong .sys_setuid
        .llong .sys_getuid
        .llong .ppc64_sys32_stime       /* 25 */
        .llong .sys32_ptrace
        .llong .sys_alarm
        .llong .sys32_fstat
        .llong .sys32_pause
        .llong .sys32_utime             /* 30 */
        .llong .sys_ni_syscall                  /* old stty syscall holder */
        .llong .sys_ni_syscall                  /* old gtty syscall holder */
        .llong .sys32_access
        .llong .sys32_nice
        .llong .sys_ni_syscall  /* 35 */        /* old ftime syscall holder */
        .llong .sys_sync
        .llong .sys32_kill
        .llong .sys_rename
        .llong .sys32_mkdir
        .llong .sys_rmdir               /* 40 */
        .llong .sys_dup
        .llong .sys_pipe
        .llong .sys32_times
        .llong .sys_ni_syscall                  /* old prof syscall holder */
        .llong .sys_brk         /* 45 */
        .llong .sys_setgid
        .llong .sys_getgid
        .llong .sys_signal
        .llong .sys_geteuid
        .llong .sys_getegid     /* 50 */
        .llong .sys_acct
        .llong .sys32_umount                    /* recycled never used phys() */
        .llong .sys_ni_syscall                  /* old lock syscall holder */
        .llong .sys32_ioctl
        .llong .sys32_fcntl             /* 55 */
        .llong .sys_ni_syscall                  /* old mpx syscall holder */
        .llong .sys32_setpgid
        .llong .sys_ni_syscall                  /* old ulimit syscall holder */
        .llong .sys_olduname
        .llong .sys32_umask             /* 60 */
        .llong .sys_chroot
        .llong .sys_ustat
        .llong .sys_dup2
        .llong .sys_getppid
        .llong .sys_getpgrp             /* 65 */
        .llong .sys_setsid
        .llong .sys32_sigaction
        .llong .sys_sgetmask
        .llong .sys32_ssetmask
        .llong .sys_setreuid            /* 70 */
        .llong .sys_setregid
        .llong .sys_sigsuspend
        .llong .sys32_sigpending
        .llong .sys32_sethostname
        .llong .sys32_setrlimit         /* 75 */
        .llong .sys32_old_getrlimit
        .llong .sys32_getrusage
        .llong .sys32_gettimeofday
        .llong .sys32_settimeofday
        .llong .sys32_getgroups         /* 80 */
        .llong .sys32_setgroups
        .llong .sys_ni_syscall          /* old select syscall */
        .llong .sys_symlink
        .llong .sys32_lstat
        .llong .sys32_readlink          /* 85 */
        .llong .sys_uselib
        .llong .sys32_swapon
        .llong .sys32_reboot
        .llong .old32_readdir
        .llong .sys32_mmap              /* 90 */
        .llong .sys_munmap
        .llong .sys_truncate
        .llong .sys_ftruncate
        .llong .sys_fchmod
        .llong .sys_fchown              /* 95 */
        .llong .sys32_getpriority
        .llong .sys32_setpriority
        .llong .sys_ni_syscall                  /* old profil syscall holder */
        .llong .sys32_statfs
        .llong .sys32_fstatfs   /* 100 */
        .llong .sys_ioperm
        .llong .sys32_socketcall
        .llong .sys32_syslog
        .llong .sys32_setitimer
        .llong .sys32_getitimer /* 105 */
        .llong .sys32_newstat
        .llong .sys32_newlstat
        .llong .sys32_newfstat
        .llong .sys_uname
        .llong .sys_ni_syscall          /* 110 old iopl syscall */
        .llong .sys_vhangup
        .llong .sys_ni_syscall  /* old 'idle' syscall */
        .llong .sys_ni_syscall          /* old vm86 syscall */
        .llong .sys32_wait4
        .llong .sys_swapoff     /* 115 */
        .llong .sys32_sysinfo
        .llong .sys32_ipc
        .llong .sys_fsync
        .llong .ppc32_sigreturn
        .llong .sys32_clone             /* 120 */
        .llong .sys32_setdomainname
        .llong .ppc64_newuname
        .llong .sys_ni_syscall          /* old modify_ldt syscall */
        .llong .sys32_adjtimex
        .llong .sys_mprotect    /* 125 */
        .llong .sys32_sigprocmask
        .llong .sys32_create_module
        .llong .sys32_init_module
        .llong .sys32_delete_module
        .llong .sys32_get_kernel_syms   /* 130 */
        .llong .sys32_quotactl
        .llong .sys32_getpgid
        .llong .sys_fchdir
        .llong .sys32_bdflush
        .llong .sys32_sysfs             /* 135 */
        .llong .sys32_personality
        .llong .sys_ni_syscall          /* for afs_syscall */
        .llong .sys_setfsuid
        .llong .sys_setfsgid
        .llong .sys_llseek              /* 140 */
        .llong .sys32_getdents
        .llong .ppc32_select
        .llong .sys_flock
        .llong .sys32_msync
        .llong .sys32_readv             /* 145 */
        .llong .sys32_writev
        .llong .sys32_getsid
        .llong .sys_fdatasync
        .llong .sys32_sysctl
        .llong .sys_mlock               /* 150 */
        .llong .sys_munlock
        .llong .sys32_mlockall
        .llong .sys_munlockall
        .llong .sys32_sched_setparam
        .llong .sys32_sched_getparam    /* 155 */
        .llong .sys32_sched_setscheduler
        .llong .sys32_sched_getscheduler
        .llong .sys_sched_yield
        .llong .sys32_sched_get_priority_max
        .llong .sys32_sched_get_priority_min  /* 160 */
        .llong .sys32_sched_rr_get_interval
        .llong .sys32_nanosleep
        .llong .sys32_mremap
        .llong .sys_setresuid
        .llong .sys_getresuid           /* 165 */
        .llong .sys32_query_module
        .llong .sys_poll
        .llong .sys32_nfsservctl
        .llong .sys_setresgid
        .llong .sys_getresgid           /* 170 */
        .llong .sys32_prctl
        .llong .ppc32_rt_sigreturn
        .llong .sys32_rt_sigaction
        .llong .sys32_rt_sigprocmask
        .llong .sys32_rt_sigpending     /* 175 */
        .llong .sys32_rt_sigtimedwait
        .llong .sys32_rt_sigqueueinfo
        .llong .sys32_rt_sigsuspend
        .llong .sys32_pread
        .llong .sys32_pwrite            /* 180 */
        .llong .sys_chown
        .llong .sys_getcwd
        .llong .sys_capget
        .llong .sys_capset
        .llong .sys32_sigaltstack               /* 185 */
        .llong .sys32_sendfile
        .llong .sys_ni_syscall          /* streams1 */
        .llong .sys_ni_syscall          /* streams2 */
        .llong .sys32_vfork
        .llong .sys32_getrlimit         /* 190 */
        .llong .sys32_readahead
        .llong .ppc32_mmap2
        .llong .sys32_truncate64        /* 193 - truncate64 */
        .llong .sys32_ftruncate64       /* 194 - ftruncate64 */
        .llong .sys_stat64              /* 195 - stat64 */
        .llong .sys_lstat64             /* 196 - lstat64 */
        .llong .sys_fstat64             /* 197 - fstat64 */
        .llong .sys32_pciconfig_read    /* 198 */
        .llong .sys32_pciconfig_write   /* 199 */
        .llong .sys_pciconfig_iobase    /* 200 */
        .llong .sys_ni_syscall          /* 201 - reserved - MacOnLinux - new */
        .llong .sys_getdents64          /* 202 */
        .llong .sys_pivot_root          /* 203 */
        .llong .sys32_fcntl64           /* 204 */
        .llong .sys_madvise             /* 205 */
        .llong .sys_mincore             /* 206 */
        .llong .sys_gettid              /* 207 */
#if 0 /* Reserved syscalls */
        .llong .sys_tkill               /* 208 */
        .llong .sys_setxattr
        .llong .sys_lsetxattr   /* 210 */
        .llong .sys_fsetxattr
        .llong .sys_getxattr
        .llong .sys_lgetxattr
        .llong .sys_fgetxattr
        .llong .sys_listxattr   /* 215 */
        .llong .sys_llistxattr
        .llong .sys_flistxattr
        .llong .sys_removexattr
        .llong .sys_lremovexattr
        .llong .sys_fremovexattr        /* 220 */
        .llong .sys_futex
#endif
        .llong .sys_perfmonctl   /* Put this here for now ... */
        .rept NR_syscalls-222
                .llong .sys_ni_syscall
        .endr
#endif
        .balign 8
_GLOBAL(sys_call_table)
        .llong .sys_ni_syscall  /* 0  -  old "setup()" system call */
        .llong .sys_exit
        .llong .sys_fork
        .llong .sys_read
        .llong .sys_write
        .llong .sys_open                /* 5 */
        .llong .sys_close
        .llong .sys_waitpid
        .llong .sys_creat
        .llong .sys_link
        .llong .sys_unlink      /* 10 */
        .llong .sys_execve
        .llong .sys_chdir
        .llong .sys64_time
        .llong .sys_mknod
        .llong .sys_chmod               /* 15 */
        .llong .sys_lchown
        .llong .sys_ni_syscall                  /* old break syscall holder */
        .llong .sys_stat
        .llong .sys_lseek
        .llong .sys_getpid      /* 20 */
        .llong .sys_mount
        .llong .sys_ni_syscall          /* old umount syscall */
        .llong .sys_setuid
        .llong .sys_getuid
        .llong .ppc64_sys_stime         /* 25 */
        .llong .sys_ptrace
        .llong .sys_alarm
        .llong .sys_fstat
        .llong .sys_pause
        .llong .sys_utime               /* 30 */
        .llong .sys_ni_syscall                  /* old stty syscall holder */
        .llong .sys_ni_syscall                  /* old gtty syscall holder */
        .llong .sys_access
        .llong .sys_nice
        .llong .sys_ni_syscall  /* 35 */        /* old ftime syscall holder */
        .llong .sys_sync
        .llong .sys_kill
        .llong .sys_rename
        .llong .sys_mkdir
        .llong .sys_rmdir               /* 40 */
        .llong .sys_dup
        .llong .sys_pipe
        .llong .sys_times
        .llong .sys_ni_syscall                  /* old prof syscall holder */
        .llong .sys_brk         /* 45 */
        .llong .sys_setgid
        .llong .sys_getgid
        .llong .sys_signal
        .llong .sys_geteuid
        .llong .sys_getegid     /* 50 */
        .llong .sys_acct
        .llong .sys_umount                      /* recycled never used phys() */
        .llong .sys_ni_syscall                  /* old lock syscall holder */
        .llong .sys_ioctl
        .llong .sys_fcntl               /* 55 */
        .llong .sys_ni_syscall                  /* old mpx syscall holder */
        .llong .sys_setpgid
        .llong .sys_ni_syscall                  /* old ulimit syscall holder */
        .llong .sys_ni_syscall          /* old uname syscall */
        .llong .sys_umask               /* 60 */
        .llong .sys_chroot
        .llong .sys_ustat
        .llong .sys_dup2
        .llong .sys_getppid
        .llong .sys_getpgrp     /* 65 */
        .llong .sys_setsid
        .llong .sys_sigaction
        .llong .sys_sgetmask
        .llong .sys_ssetmask
        .llong .sys_setreuid    /* 70 */
        .llong .sys_setregid
        .llong .sys_sigsuspend
        .llong .sys_sigpending
        .llong .sys_sethostname
        .llong .sys_setrlimit   /* 75 */
        .llong .sys_ni_syscall          /* old getrlimit syscall */
        .llong .sys_getrusage
        .llong .sys_gettimeofday
        .llong .sys_settimeofday
        .llong .sys_getgroups   /* 80 */
        .llong .sys_setgroups
        .llong .sys_ni_syscall          /* old select syscall */
        .llong .sys_symlink
        .llong .sys_lstat
        .llong .sys_readlink    /* 85 */
        .llong .sys_uselib
        .llong .sys_swapon
        .llong .sys_reboot
        .llong .sys_ni_syscall          /* old readdir syscall */
        .llong .sys_mmap        /* 90 */
        .llong .sys_munmap
        .llong .sys_truncate
        .llong .sys_ftruncate
        .llong .sys_fchmod
        .llong .sys_fchown      /* 95 */
        .llong .sys_getpriority
        .llong .sys_setpriority
        .llong .sys_ni_syscall                  /* old profil syscall holder */
        .llong .sys_statfs
        .llong .sys_fstatfs     /* 100 */
        .llong .sys_ioperm
        .llong .sys_socketcall
        .llong .sys_syslog
        .llong .sys_setitimer
        .llong .sys_getitimer   /* 105 */
        .llong .sys_newstat
        .llong .sys_newlstat
        .llong .sys_newfstat
        .llong .sys_uname
        .llong .sys_ni_syscall          /* 110 old iopl syscall */
        .llong .sys_vhangup
        .llong .sys_ni_syscall  /* old 'idle' syscall */
        .llong .sys_ni_syscall          /* old vm86 syscall */
        .llong .sys_wait4
        .llong .sys_swapoff     /* 115 */
        .llong .sys_sysinfo
        .llong .sys_ipc
        .llong .sys_fsync
        .llong .ppc64_sigreturn
        .llong .sys_clone               /* 120 */
        .llong .sys_setdomainname
        .llong .ppc64_newuname
        .llong .sys_ni_syscall          /* old modify_ldt syscall */
        .llong .sys_adjtimex
        .llong .sys_mprotect    /* 125 */
        .llong .sys_sigprocmask
        .llong .sys_create_module
        .llong .sys_init_module
        .llong .sys_delete_module
        .llong .sys_get_kernel_syms     /* 130 */
        .llong .sys_quotactl
        .llong .sys_getpgid
        .llong .sys_fchdir
        .llong .sys_bdflush
        .llong .sys_sysfs               /* 135 */
        .llong .sys_personality
        .llong .sys_ni_syscall          /* for afs_syscall */
        .llong .sys_setfsuid
        .llong .sys_setfsgid
        .llong .sys_llseek              /* 140 */
        .llong .sys_getdents
        .llong .sys_select
        .llong .sys_flock
        .llong .sys_msync
        .llong .sys_readv               /* 145 */
        .llong .sys_writev
        .llong .sys_getsid
        .llong .sys_fdatasync
        .llong .sys_sysctl
        .llong .sys_mlock               /* 150 */
        .llong .sys_munlock
        .llong .sys_mlockall
        .llong .sys_munlockall
        .llong .sys_sched_setparam
        .llong .sys_sched_getparam      /* 155 */
        .llong .sys_sched_setscheduler
        .llong .sys_sched_getscheduler
        .llong .sys_sched_yield
        .llong .sys_sched_get_priority_max
        .llong .sys_sched_get_priority_min  /* 160 */
        .llong .sys_sched_rr_get_interval
        .llong .sys_nanosleep
        .llong .sys_mremap
        .llong .sys_setresuid
        .llong .sys_getresuid           /* 165 */
        .llong .sys_query_module
        .llong .sys_poll
        .llong .sys_nfsservctl
        .llong .sys_setresgid
        .llong .sys_getresgid           /* 170 */
        .llong .sys_prctl
        .llong .ppc64_rt_sigreturn
        .llong .sys_rt_sigaction
        .llong .sys_rt_sigprocmask      
        .llong .sys_rt_sigpending       /* 175 */
        .llong .sys_rt_sigtimedwait
        .llong .sys_rt_sigqueueinfo
        .llong .sys_rt_sigsuspend
        .llong .sys_pread
        .llong .sys_pwrite              /* 180 */
        .llong .sys_chown
        .llong .sys_getcwd
        .llong .sys_capget
        .llong .sys_capset
        .llong .sys_sigaltstack         /* 185 */
        .llong .sys_sendfile
        .llong .sys_ni_syscall          /* streams1 */
        .llong .sys_ni_syscall          /* streams2 */
        .llong .sys_vfork
        .llong .sys_getrlimit           /* 190 */
        .llong .sys_readahead
        .llong .sys_ni_syscall          /* 192 - reserved - mmap2 */
        .llong .sys_ni_syscall          /* 193 - reserved - truncate64 */
        .llong .sys_ni_syscall          /* 194 - reserved - ftruncate64 */
        .llong .sys_ni_syscall          /* 195 - reserved - stat64 */
        .llong .sys_ni_syscall          /* 196 - reserved - lstat64 */
        .llong .sys_ni_syscall          /* 197 - reserved - fstat64 */
        .llong .sys_pciconfig_read      /* 198 */
        .llong .sys_pciconfig_write     /* 199 */
        .llong .sys_pciconfig_iobase    /* 200 */
        .llong .sys_ni_syscall          /* 201 - reserved - MacOnLinux - new */
        .llong .sys_getdents64          /* 202 */
        .llong .sys_pivot_root          /* 203 */
        .llong .sys_ni_syscall          /* 204 */
        .llong .sys_madvise             /* 205 */
        .llong .sys_mincore             /* 206 */
        .llong .sys_gettid              /* 207 */
#if 0 /* Reserved syscalls */
        .llong .sys_tkill               /* 208 */
        .llong .sys_setxattr
        .llong .sys_lsetxattr   /* 210 */
        .llong .sys_fsetxattr
        .llong .sys_getxattr
        .llong .sys_lgetxattr
        .llong .sys_fgetxattr
        .llong .sys_listxattr   /* 215 */
        .llong .sys_llistxattr
        .llong .sys_flistxattr
        .llong .sys_removexattr
        .llong .sys_lremovexattr
        .llong .sys_fremovexattr        /* 220 */
        .llong .sys_futex
#endif
        .llong .sys_perfmonctl   /* Put this here for now ... */
        .rept NR_syscalls-222
        .llong .sys_ni_syscall
        .endr

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.