blob: 8bd3def14752d36c610f3776125bc7957ad2284a [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004, 2008 IBM Corporation
* All rights reserved.
* This program and the accompanying materials
* are made available under the terms of the BSD License
* which accompanies this distribution, and is available at
* http://www.opensource.org/licenses/bsd-license.php
*
* Contributors:
* IBM Corporation - initial implementation
*****************************************************************************/
#ifndef SYSTEMCALL_H
#define SYSTEMCALL_H
static inline int
syscall (int nr)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3");
asm volatile ("sc" : "=r" (r3)
: "r" (r0));
return r3;
}
static inline long
syscall_1 (int nr, long arg0)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r0));
return r3;
}
static inline long
syscall_2 (int nr, long arg0, long arg1)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r0));
return r3;
}
static inline long
syscall_3 (int nr, long arg0, long arg1, long arg2)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
register unsigned long r5 asm("r5") = arg2;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r5), "r" (r0));
return r3;
}
static inline long
syscall_4 (int nr, long arg0, long arg1, long arg2, long arg3)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
register unsigned long r5 asm("r5") = arg2;
register unsigned long r6 asm("r6") = arg3;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r5), "r" (r6), "r" (r0));
return r3;
}
static inline long
syscall_5 (int nr, long arg0, long arg1, long arg2, long arg3,
long arg4)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
register unsigned long r5 asm("r5") = arg2;
register unsigned long r6 asm("r6") = arg3;
register unsigned long r7 asm("r7") = arg4;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r5),
"r" (r6), "r" (r7), "r" (r0));
return r3;
}
static inline long
syscall_6 (int nr, long arg0, long arg1, long arg2, long arg3,
long arg4, long arg5)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
register unsigned long r5 asm("r5") = arg2;
register unsigned long r6 asm("r6") = arg3;
register unsigned long r7 asm("r7") = arg4;
register unsigned long r8 asm("r8") = arg5;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r5),
"r" (r6), "r" (r7), "r" (r8), "r" (r0));
return r3;
}
static inline long
syscall_7 (int nr, long arg0, long arg1, long arg2, long arg3,
long arg4, long arg5, long arg6)
{
register unsigned long r0 asm("r0") = nr;
register unsigned long r3 asm("r3") = arg0;
register unsigned long r4 asm("r4") = arg1;
register unsigned long r5 asm("r5") = arg2;
register unsigned long r6 asm("r6") = arg3;
register unsigned long r7 asm("r7") = arg4;
register unsigned long r8 asm("r8") = arg5;
register unsigned long r9 asm("r9") = arg6;
asm volatile ("sc" : "=r" (r3)
: "0" (r3), "r" (r4), "r" (r5),
"r" (r6), "r" (r7), "r" (r8),
"r" (r9), "r" (r0));
return r3;
}
#define _exit_sc_nr 1
#define _read_sc_nr 2
#define _write_sc_nr 3
#define _open_sc_nr 4
#define _close_sc_nr 5
#define _getpid_sc_nr 6
#define _brk_sc_nr 7
#define _ioctl_sc_nr 8
#define _socket_sc_nr 9
#define _wait4_sc_nr 10
#define _sigreturn_sc_nr 11
#define _rt_sigaction_sc_nr 12
#define _lseek_sc_nr 13
#define _sock_sc_nr 1
#define _sendto_sc_nr 2
#define _send_sc_nr 3
#define _recv_sc_nr 4
//typedef unsigned long size_t;
#endif