Mercurial > sos > sos
view include/svc_prog.h @ 96:a480d02a10c8
merge
author | Jonathan Pevarnek <pevarnj@gmail.com> |
---|---|
date | Sat, 14 May 2011 12:54:47 -0400 |
parents | e7b9148156c4 |
children | fb73c5728eaf |
line wrap: on
line source
#ifndef __SVC_PROG_H #define __SVC_PROG_H /* invokes the specified SVC with 0 to 4 args */ #define invoke_svc0(n) ({ \ u64 _ret; \ asm volatile( \ "svc %1\n" \ "lgr %0,%%r2\n" \ : /* output */ \ "=r" (_ret) \ : /* input */ \ "i" (n) \ : /* clobber */ \ "cc", "r2", "r3" \ ); \ _ret; \ }) #define invoke_svc1(n, a1) ({ \ u64 _ret; \ asm volatile( \ "lgr %%r2,%2\n" \ "svc %1\n" \ "lgr %0,%%r2\n" \ : /* output */ \ "=r" (_ret) \ : /* input */ \ "i" (n) \ "d" (a1) \ : /* clobber */ \ "cc", "r2", "r3" \ ); \ _ret; \ }) #define invoke_svc2(n, a1, a2) ({ \ u64 _ret; \ asm volatile( \ "lgr %%r2,%2\n" \ "lgr %%r3,%3\n" \ "svc %1\n" \ "lgr %0,%%r2\n" \ : /* output */ \ "=r" (_ret) \ : /* input */ \ "i" (n) \ "d" (a1) \ "d" (a2) \ : /* clobber */ \ "cc", "r2", "r3" \ ); \ _ret; \ }) #define invoke_svc3(n, a1, a2, a3) ({ \ u64 _ret; \ asm volatile( \ "lgr %%r2,%2\n" \ "lgr %%r3,%3\n" \ "lgr %%r4,%4\n" \ "svc %1\n" \ "lgr %0,%%r2\n" \ : /* output */ \ "=r" (_ret) \ : /* input */ \ "i" (n) \ "d" (a1) \ "d" (a2) \ "d" (a3) \ : /* clobber */ \ "cc", "r2", "r3", "r4" \ ); \ _ret; \ }) #define invoke_svc4(n, a1, a2, a3, a4) ({ \ u64 _ret; \ asm volatile( \ "lgr %%r2,%2\n" \ "lgr %%r3,%3\n" \ "lgr %%r4,%4\n" \ "lgr %%r5,%5\n" \ "svc %1\n" \ "lgr %0,%%r2\n" \ : /* output */ \ "=r" (_ret) \ : /* input */ \ "i" (n) \ "d" (a1) \ "d" (a2) \ "d" (a3) \ : /* clobber */ \ "cc", "r2", "r3", "r4", "r5" \ ); \ _ret; \ }) #endif