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