/*
 *  PPC emulation for qemu: syscall definitions.
 *
 *  Copyright (c) 2003 Jocelyn Mayer
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
 */

#ifndef PPC_TARGET_SYSCALL_H
#define PPC_TARGET_SYSCALL_H

/* XXX: ABSOLUTELY BUGGY:
 * for now, this is quite just a cut-and-paste from i386 target...
 */

/* default linux values for the selectors */
#define __USER_DS	(1)

struct target_pt_regs {
	abi_ulong gpr[32];
	abi_ulong nip;
	abi_ulong msr;
	abi_ulong orig_gpr3;	/* Used for restarting system calls */
	abi_ulong ctr;
	abi_ulong link;
	abi_ulong xer;
	abi_ulong ccr;
#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
        abi_ulong softe;
#else
	abi_ulong mq;		/* 601 only (not used at present) */
#endif
					/* Used on APUS to hold IPL value. */
	abi_ulong trap;		/* Reason for being here */
	abi_ulong dar;		/* Fault registers */
	abi_ulong dsisr;
	abi_ulong result; 		/* Result of a system call */
};

/* ioctls */
struct target_revectored_struct {
	abi_ulong __map[8];			/* 256 bits */
};


/*
 * flags masks
 */

#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
#ifdef TARGET_WORDS_BIGENDIAN
#define UNAME_MACHINE "ppc64"
#else
#define UNAME_MACHINE "ppc64le"
#endif
#else
#define UNAME_MACHINE "ppc"
#endif
#define UNAME_MINIMUM_RELEASE "2.6.32"

#define TARGET_CLONE_BACKWARDS

#define TARGET_MINSIGSTKSZ 2048
#define TARGET_MCL_CURRENT 0x2000
#define TARGET_MCL_FUTURE  0x4000
#define TARGET_MCL_ONFAULT 0x8000
#define TARGET_WANT_NI_OLD_SELECT

#endif /* PPC_TARGET_SYSCALL_H */
