diff options
Diffstat (limited to 'arch/powerpc/include/uapi')
44 files changed, 3447 insertions, 0 deletions
diff --git a/arch/powerpc/include/uapi/asm/Kbuild b/arch/powerpc/include/uapi/asm/Kbuild new file mode 100644 index 00000000000..7a3f795ac21 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/Kbuild @@ -0,0 +1,46 @@ +# UAPI Header export list +include include/uapi/asm-generic/Kbuild.asm + +header-y += auxvec.h +header-y += bitsperlong.h +header-y += bootx.h +header-y += byteorder.h +header-y += cputable.h +header-y += elf.h +header-y += epapr_hcalls.h +header-y += errno.h +header-y += fcntl.h +header-y += ioctl.h +header-y += ioctls.h +header-y += ipcbuf.h +header-y += kvm.h +header-y += kvm_para.h +header-y += mman.h +header-y += msgbuf.h +header-y += nvram.h +header-y += param.h +header-y += perf_event.h +header-y += poll.h +header-y += posix_types.h +header-y += ps3fb.h +header-y += ptrace.h +header-y += resource.h +header-y += seccomp.h +header-y += sembuf.h +header-y += setup.h +header-y += shmbuf.h +header-y += sigcontext.h +header-y += siginfo.h +header-y += signal.h +header-y += socket.h +header-y += sockios.h +header-y += spu_info.h +header-y += stat.h +header-y += statfs.h +header-y += swab.h +header-y += termbits.h +header-y += termios.h +header-y += tm.h +header-y += types.h +header-y += ucontext.h +header-y += unistd.h diff --git a/arch/powerpc/include/uapi/asm/auxvec.h b/arch/powerpc/include/uapi/asm/auxvec.h new file mode 100644 index 00000000000..ce17d2c9eb4 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/auxvec.h @@ -0,0 +1,21 @@ +#ifndef _ASM_POWERPC_AUXVEC_H +#define _ASM_POWERPC_AUXVEC_H + +/* + * We need to put in some extra aux table entries to tell glibc what + * the cache block size is, so it can use the dcbz instruction safely. + */ +#define AT_DCACHEBSIZE		19 +#define AT_ICACHEBSIZE		20 +#define AT_UCACHEBSIZE		21 +/* A special ignored type value for PPC, for glibc compatibility.  */ +#define AT_IGNOREPPC		22 + +/* The vDSO location. We have to use the same value as x86 for glibc's + * sake :-) + */ +#define AT_SYSINFO_EHDR		33 + +#define AT_VECTOR_SIZE_ARCH 6 /* entries in ARCH_DLINFO */ + +#endif diff --git a/arch/powerpc/include/uapi/asm/bitsperlong.h b/arch/powerpc/include/uapi/asm/bitsperlong.h new file mode 100644 index 00000000000..5f1659032c4 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/bitsperlong.h @@ -0,0 +1,12 @@ +#ifndef __ASM_POWERPC_BITSPERLONG_H +#define __ASM_POWERPC_BITSPERLONG_H + +#if defined(__powerpc64__) +# define __BITS_PER_LONG 64 +#else +# define __BITS_PER_LONG 32 +#endif + +#include <asm-generic/bitsperlong.h> + +#endif /* __ASM_POWERPC_BITSPERLONG_H */ diff --git a/arch/powerpc/include/uapi/asm/bootx.h b/arch/powerpc/include/uapi/asm/bootx.h new file mode 100644 index 00000000000..6e51cf0708a --- /dev/null +++ b/arch/powerpc/include/uapi/asm/bootx.h @@ -0,0 +1,132 @@ +/* + * This file describes the structure passed from the BootX application + * (for MacOS) when it is used to boot Linux. + * + * Written by Benjamin Herrenschmidt. + */ + + +#ifndef _UAPI__ASM_BOOTX_H__ +#define _UAPI__ASM_BOOTX_H__ + +#include <linux/types.h> + +#ifdef macintosh +#include <Types.h> +#include "linux_type_defs.h" +#endif + +#ifdef macintosh +/* All this requires PowerPC alignment */ +#pragma options align=power +#endif + +/* On kernel entry: + * + * r3 = 0x426f6f58    ('BooX') + * r4 = pointer to boot_infos + * r5 = NULL + * + * Data and instruction translation disabled, interrupts + * disabled, kernel loaded at physical 0x00000000 on PCI + * machines (will be different on NuBus). + */ + +#define BOOT_INFO_VERSION               5 +#define BOOT_INFO_COMPATIBLE_VERSION    1 + +/* Bit in the architecture flag mask. More to be defined in +   future versions. Note that either BOOT_ARCH_PCI or +   BOOT_ARCH_NUBUS is set. The other BOOT_ARCH_NUBUS_xxx are +   set additionally when BOOT_ARCH_NUBUS is set. + */ +#define BOOT_ARCH_PCI                   0x00000001UL +#define BOOT_ARCH_NUBUS                 0x00000002UL +#define BOOT_ARCH_NUBUS_PDM             0x00000010UL +#define BOOT_ARCH_NUBUS_PERFORMA        0x00000020UL +#define BOOT_ARCH_NUBUS_POWERBOOK       0x00000040UL + +/*  Maximum number of ranges in phys memory map */ +#define MAX_MEM_MAP_SIZE				26 + +/* This is the format of an element in the physical memory map. Note that +   the map is optional and current BootX will only build it for pre-PCI +   machines */ +typedef struct boot_info_map_entry +{ +    __u32       physAddr;                /* Physical starting address */ +    __u32       size;                    /* Size in bytes */ +} boot_info_map_entry_t; + + +/* Here are the boot informations that are passed to the bootstrap + * Note that the kernel arguments and the device tree are appended + * at the end of this structure. */ +typedef struct boot_infos +{ +    /* Version of this structure */ +    __u32       version; +    /* backward compatible down to version: */ +    __u32       compatible_version; + +    /* NEW (vers. 2) this holds the current _logical_ base addr of +       the frame buffer (for use by early boot message) */ +    __u8*       logicalDisplayBase; + +    /* NEW (vers. 4) Apple's machine identification */ +    __u32       machineID; + +    /* NEW (vers. 4) Detected hw architecture */ +    __u32       architecture; + +    /* The device tree (internal addresses relative to the beginning of the tree, +     * device tree offset relative to the beginning of this structure). +     * On pre-PCI macintosh (BOOT_ARCH_PCI bit set to 0 in architecture), this +     * field is 0. +     */ +    __u32       deviceTreeOffset;        /* Device tree offset */ +    __u32       deviceTreeSize;          /* Size of the device tree */ + +    /* Some infos about the current MacOS display */ +    __u32       dispDeviceRect[4];       /* left,top,right,bottom */ +    __u32       dispDeviceDepth;         /* (8, 16 or 32) */ +    __u8*       dispDeviceBase;          /* base address (physical) */ +    __u32       dispDeviceRowBytes;      /* rowbytes (in bytes) */ +    __u32       dispDeviceColorsOffset;  /* Colormap (8 bits only) or 0 (*) */ +    /* Optional offset in the registry to the current +     * MacOS display. (Can be 0 when not detected) */ +     __u32      dispDeviceRegEntryOffset; + +    /* Optional pointer to boot ramdisk (offset from this structure) */ +    __u32       ramDisk; +    __u32       ramDiskSize;             /* size of ramdisk image */ + +    /* Kernel command line arguments (offset from this structure) */ +    __u32       kernelParamsOffset; + +    /* ALL BELOW NEW (vers. 4) */ + +    /* This defines the physical memory. Valid with BOOT_ARCH_NUBUS flag +       (non-PCI) only. On PCI, memory is contiguous and it's size is in the +       device-tree. */ +    boot_info_map_entry_t +    	        physMemoryMap[MAX_MEM_MAP_SIZE]; /* Where the phys memory is */ +    __u32       physMemoryMapSize;               /* How many entries in map */ + + +    /* The framebuffer size (optional, currently 0) */ +    __u32       frameBufferSize;         /* Represents a max size, can be 0. */ + +    /* NEW (vers. 5) */ + +    /* Total params size (args + colormap + device tree + ramdisk) */ +    __u32       totalParamsSize; + +} boot_infos_t; + + +#ifdef macintosh +#pragma options align=reset +#endif + +#endif /* _UAPI__ASM_BOOTX_H__ */ diff --git a/arch/powerpc/include/uapi/asm/byteorder.h b/arch/powerpc/include/uapi/asm/byteorder.h new file mode 100644 index 00000000000..ca931d07400 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/byteorder.h @@ -0,0 +1,16 @@ +#ifndef _ASM_POWERPC_BYTEORDER_H +#define _ASM_POWERPC_BYTEORDER_H + +/* + * 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. + */ +#ifdef __LITTLE_ENDIAN__ +#include <linux/byteorder/little_endian.h> +#else +#include <linux/byteorder/big_endian.h> +#endif + +#endif /* _ASM_POWERPC_BYTEORDER_H */ diff --git a/arch/powerpc/include/uapi/asm/cputable.h b/arch/powerpc/include/uapi/asm/cputable.h new file mode 100644 index 00000000000..de2c0e4ee1a --- /dev/null +++ b/arch/powerpc/include/uapi/asm/cputable.h @@ -0,0 +1,46 @@ +#ifndef _UAPI__ASM_POWERPC_CPUTABLE_H +#define _UAPI__ASM_POWERPC_CPUTABLE_H + +/* in AT_HWCAP */ +#define PPC_FEATURE_32			0x80000000 +#define PPC_FEATURE_64			0x40000000 +#define PPC_FEATURE_601_INSTR		0x20000000 +#define PPC_FEATURE_HAS_ALTIVEC		0x10000000 +#define PPC_FEATURE_HAS_FPU		0x08000000 +#define PPC_FEATURE_HAS_MMU		0x04000000 +#define PPC_FEATURE_HAS_4xxMAC		0x02000000 +#define PPC_FEATURE_UNIFIED_CACHE	0x01000000 +#define PPC_FEATURE_HAS_SPE		0x00800000 +#define PPC_FEATURE_HAS_EFP_SINGLE	0x00400000 +#define PPC_FEATURE_HAS_EFP_DOUBLE	0x00200000 +#define PPC_FEATURE_NO_TB		0x00100000 +#define PPC_FEATURE_POWER4		0x00080000 +#define PPC_FEATURE_POWER5		0x00040000 +#define PPC_FEATURE_POWER5_PLUS		0x00020000 +#define PPC_FEATURE_CELL		0x00010000 +#define PPC_FEATURE_BOOKE		0x00008000 +#define PPC_FEATURE_SMT			0x00004000 +#define PPC_FEATURE_ICACHE_SNOOP	0x00002000 +#define PPC_FEATURE_ARCH_2_05		0x00001000 +#define PPC_FEATURE_PA6T		0x00000800 +#define PPC_FEATURE_HAS_DFP		0x00000400 +#define PPC_FEATURE_POWER6_EXT		0x00000200 +#define PPC_FEATURE_ARCH_2_06		0x00000100 +#define PPC_FEATURE_HAS_VSX		0x00000080 + +#define PPC_FEATURE_PSERIES_PERFMON_COMPAT \ +					0x00000040 + +#define PPC_FEATURE_TRUE_LE		0x00000002 +#define PPC_FEATURE_PPC_LE		0x00000001 + +/* in AT_HWCAP2 */ +#define PPC_FEATURE2_ARCH_2_07		0x80000000 +#define PPC_FEATURE2_HTM		0x40000000 +#define PPC_FEATURE2_DSCR		0x20000000 +#define PPC_FEATURE2_EBB		0x10000000 +#define PPC_FEATURE2_ISEL		0x08000000 +#define PPC_FEATURE2_TAR		0x04000000 +#define PPC_FEATURE2_VEC_CRYPTO		0x02000000 + +#endif /* _UAPI__ASM_POWERPC_CPUTABLE_H */ diff --git a/arch/powerpc/include/uapi/asm/elf.h b/arch/powerpc/include/uapi/asm/elf.h new file mode 100644 index 00000000000..59dad113897 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/elf.h @@ -0,0 +1,314 @@ +/* + * ELF register definitions.. + * + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_ELF_H +#define _UAPI_ASM_POWERPC_ELF_H + + +#include <linux/types.h> + +#include <asm/ptrace.h> +#include <asm/cputable.h> +#include <asm/auxvec.h> + +/* PowerPC relocations defined by the ABIs */ +#define R_PPC_NONE		0 +#define R_PPC_ADDR32		1	/* 32bit absolute address */ +#define R_PPC_ADDR24		2	/* 26bit address, 2 bits ignored.  */ +#define R_PPC_ADDR16		3	/* 16bit absolute address */ +#define R_PPC_ADDR16_LO		4	/* lower 16bit of absolute address */ +#define R_PPC_ADDR16_HI		5	/* high 16bit of absolute address */ +#define R_PPC_ADDR16_HA		6	/* adjusted high 16bit */ +#define R_PPC_ADDR14		7	/* 16bit address, 2 bits ignored */ +#define R_PPC_ADDR14_BRTAKEN	8 +#define R_PPC_ADDR14_BRNTAKEN	9 +#define R_PPC_REL24		10	/* PC relative 26 bit */ +#define R_PPC_REL14		11	/* PC relative 16 bit */ +#define R_PPC_REL14_BRTAKEN	12 +#define R_PPC_REL14_BRNTAKEN	13 +#define R_PPC_GOT16		14 +#define R_PPC_GOT16_LO		15 +#define R_PPC_GOT16_HI		16 +#define R_PPC_GOT16_HA		17 +#define R_PPC_PLTREL24		18 +#define R_PPC_COPY		19 +#define R_PPC_GLOB_DAT		20 +#define R_PPC_JMP_SLOT		21 +#define R_PPC_RELATIVE		22 +#define R_PPC_LOCAL24PC		23 +#define R_PPC_UADDR32		24 +#define R_PPC_UADDR16		25 +#define R_PPC_REL32		26 +#define R_PPC_PLT32		27 +#define R_PPC_PLTREL32		28 +#define R_PPC_PLT16_LO		29 +#define R_PPC_PLT16_HI		30 +#define R_PPC_PLT16_HA		31 +#define R_PPC_SDAREL16		32 +#define R_PPC_SECTOFF		33 +#define R_PPC_SECTOFF_LO	34 +#define R_PPC_SECTOFF_HI	35 +#define R_PPC_SECTOFF_HA	36 + +/* PowerPC relocations defined for the TLS access ABI.  */ +#define R_PPC_TLS		67 /* none	(sym+add)@tls */ +#define R_PPC_DTPMOD32		68 /* word32	(sym+add)@dtpmod */ +#define R_PPC_TPREL16		69 /* half16*	(sym+add)@tprel */ +#define R_PPC_TPREL16_LO	70 /* half16	(sym+add)@tprel@l */ +#define R_PPC_TPREL16_HI	71 /* half16	(sym+add)@tprel@h */ +#define R_PPC_TPREL16_HA	72 /* half16	(sym+add)@tprel@ha */ +#define R_PPC_TPREL32		73 /* word32	(sym+add)@tprel */ +#define R_PPC_DTPREL16		74 /* half16*	(sym+add)@dtprel */ +#define R_PPC_DTPREL16_LO	75 /* half16	(sym+add)@dtprel@l */ +#define R_PPC_DTPREL16_HI	76 /* half16	(sym+add)@dtprel@h */ +#define R_PPC_DTPREL16_HA	77 /* half16	(sym+add)@dtprel@ha */ +#define R_PPC_DTPREL32		78 /* word32	(sym+add)@dtprel */ +#define R_PPC_GOT_TLSGD16	79 /* half16*	(sym+add)@got@tlsgd */ +#define R_PPC_GOT_TLSGD16_LO	80 /* half16	(sym+add)@got@tlsgd@l */ +#define R_PPC_GOT_TLSGD16_HI	81 /* half16	(sym+add)@got@tlsgd@h */ +#define R_PPC_GOT_TLSGD16_HA	82 /* half16	(sym+add)@got@tlsgd@ha */ +#define R_PPC_GOT_TLSLD16	83 /* half16*	(sym+add)@got@tlsld */ +#define R_PPC_GOT_TLSLD16_LO	84 /* half16	(sym+add)@got@tlsld@l */ +#define R_PPC_GOT_TLSLD16_HI	85 /* half16	(sym+add)@got@tlsld@h */ +#define R_PPC_GOT_TLSLD16_HA	86 /* half16	(sym+add)@got@tlsld@ha */ +#define R_PPC_GOT_TPREL16	87 /* half16*	(sym+add)@got@tprel */ +#define R_PPC_GOT_TPREL16_LO	88 /* half16	(sym+add)@got@tprel@l */ +#define R_PPC_GOT_TPREL16_HI	89 /* half16	(sym+add)@got@tprel@h */ +#define R_PPC_GOT_TPREL16_HA	90 /* half16	(sym+add)@got@tprel@ha */ +#define R_PPC_GOT_DTPREL16	91 /* half16*	(sym+add)@got@dtprel */ +#define R_PPC_GOT_DTPREL16_LO	92 /* half16*	(sym+add)@got@dtprel@l */ +#define R_PPC_GOT_DTPREL16_HI	93 /* half16*	(sym+add)@got@dtprel@h */ +#define R_PPC_GOT_DTPREL16_HA	94 /* half16*	(sym+add)@got@dtprel@ha */ + +/* keep this the last entry. */ +#define R_PPC_NUM		95 + + +#define ELF_NGREG	48	/* includes nip, msr, lr, etc. */ +#define ELF_NFPREG	33	/* includes fpscr */ + +typedef unsigned long elf_greg_t64; +typedef elf_greg_t64 elf_gregset_t64[ELF_NGREG]; + +typedef unsigned int elf_greg_t32; +typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG]; +typedef elf_gregset_t32 compat_elf_gregset_t; + +/* + * ELF_ARCH, CLASS, and DATA are used to set parameters in the core dumps. + */ +#ifdef __powerpc64__ +# define ELF_NVRREG32	33	/* includes vscr & vrsave stuffed together */ +# define ELF_NVRREG	34	/* includes vscr & vrsave in split vectors */ +# define ELF_NVSRHALFREG 32	/* Half the vsx registers */ +# define ELF_GREG_TYPE	elf_greg_t64 +# define ELF_ARCH	EM_PPC64 +# define ELF_CLASS	ELFCLASS64 +typedef elf_greg_t64 elf_greg_t; +typedef elf_gregset_t64 elf_gregset_t; +#else +# define ELF_NEVRREG	34	/* includes acc (as 2) */ +# define ELF_NVRREG	33	/* includes vscr */ +# define ELF_GREG_TYPE	elf_greg_t32 +# define ELF_ARCH	EM_PPC +# define ELF_CLASS	ELFCLASS32 +typedef elf_greg_t32 elf_greg_t; +typedef elf_gregset_t32 elf_gregset_t; +#endif /* __powerpc64__ */ + +#ifdef __BIG_ENDIAN__ +#define ELF_DATA	ELFDATA2MSB +#else +#define ELF_DATA	ELFDATA2LSB +#endif + +/* Floating point registers */ +typedef double elf_fpreg_t; +typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; + +/* Altivec registers */ +/* + * The entries with indexes 0-31 contain the corresponding vector registers.  + * The entry with index 32 contains the vscr as the last word (offset 12)  + * within the quadword.  This allows the vscr to be stored as either a  + * quadword (since it must be copied via a vector register to/from storage)  + * or as a word.   + * + * 64-bit kernel notes: The entry at index 33 contains the vrsave as the first   + * word (offset 0) within the quadword. + * + * This definition of the VMX state is compatible with the current PPC32  + * ptrace interface.  This allows signal handling and ptrace to use the same  + * structures.  This also simplifies the implementation of a bi-arch  + * (combined (32- and 64-bit) gdb. + * + * Note that it's _not_ compatible with 32 bits ucontext which stuffs the + * vrsave along with vscr and so only uses 33 vectors for the register set + */ +typedef __vector128 elf_vrreg_t; +typedef elf_vrreg_t elf_vrregset_t[ELF_NVRREG]; +#ifdef __powerpc64__ +typedef elf_vrreg_t elf_vrregset_t32[ELF_NVRREG32]; +typedef elf_fpreg_t elf_vsrreghalf_t32[ELF_NVSRHALFREG]; +#endif + + +/* + * The requirements here are: + * - keep the final alignment of sp (sp & 0xf) + * - make sure the 32-bit value at the first 16 byte aligned position of + *   AUXV is greater than 16 for glibc compatibility. + *   AT_IGNOREPPC is used for that. + * - for compatibility with glibc ARCH_DLINFO must always be defined on PPC, + *   even if DLINFO_ARCH_ITEMS goes to zero or is undefined. + * update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes + */ +#define ARCH_DLINFO							\ +do {									\ +	/* Handle glibc compatibility. */				\ +	NEW_AUX_ENT(AT_IGNOREPPC, AT_IGNOREPPC);			\ +	NEW_AUX_ENT(AT_IGNOREPPC, AT_IGNOREPPC);			\ +	/* Cache size items */						\ +	NEW_AUX_ENT(AT_DCACHEBSIZE, dcache_bsize);			\ +	NEW_AUX_ENT(AT_ICACHEBSIZE, icache_bsize);			\ +	NEW_AUX_ENT(AT_UCACHEBSIZE, ucache_bsize);			\ +	VDSO_AUX_ENT(AT_SYSINFO_EHDR, current->mm->context.vdso_base);	\ +} while (0) + +/* PowerPC64 relocations defined by the ABIs */ +#define R_PPC64_NONE    R_PPC_NONE +#define R_PPC64_ADDR32  R_PPC_ADDR32  /* 32bit absolute address.  */ +#define R_PPC64_ADDR24  R_PPC_ADDR24  /* 26bit address, word aligned.  */ +#define R_PPC64_ADDR16  R_PPC_ADDR16  /* 16bit absolute address. */ +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of abs. address.  */ +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of abs. address. */ +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits.  */ +#define R_PPC64_ADDR14 R_PPC_ADDR14   /* 16bit address, word aligned.  */ +#define R_PPC64_ADDR14_BRTAKEN  R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24   R_PPC_REL24 /* PC relative 26 bit, word aligned.  */ +#define R_PPC64_REL14   R_PPC_REL14 /* PC relative 16 bit. */ +#define R_PPC64_REL14_BRTAKEN   R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN  R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16     R_PPC_GOT16 +#define R_PPC64_GOT16_LO  R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI  R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA  R_PPC_GOT16_HA + +#define R_PPC64_COPY      R_PPC_COPY +#define R_PPC64_GLOB_DAT  R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT  R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE  R_PPC_RELATIVE + +#define R_PPC64_UADDR32   R_PPC_UADDR32 +#define R_PPC64_UADDR16   R_PPC_UADDR16 +#define R_PPC64_REL32     R_PPC_REL32 +#define R_PPC64_PLT32     R_PPC_PLT32 +#define R_PPC64_PLTREL32  R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO  R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI  R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA  R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF     R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO  R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI  R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA  R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30          37  /* word30 (S + A - P) >> 2.  */ +#define R_PPC64_ADDR64          38  /* doubleword64 S + A.  */ +#define R_PPC64_ADDR16_HIGHER   39  /* half16 #higher(S + A).  */ +#define R_PPC64_ADDR16_HIGHERA  40  /* half16 #highera(S + A).  */ +#define R_PPC64_ADDR16_HIGHEST  41  /* half16 #highest(S + A).  */ +#define R_PPC64_ADDR16_HIGHESTA 42  /* half16 #highesta(S + A). */ +#define R_PPC64_UADDR64     43  /* doubleword64 S + A.  */ +#define R_PPC64_REL64       44  /* doubleword64 S + A - P.  */ +#define R_PPC64_PLT64       45  /* doubleword64 L + A.  */ +#define R_PPC64_PLTREL64    46  /* doubleword64 L + A - P.  */ +#define R_PPC64_TOC16       47  /* half16* S + A - .TOC.  */ +#define R_PPC64_TOC16_LO    48  /* half16 #lo(S + A - .TOC.).  */ +#define R_PPC64_TOC16_HI    49  /* half16 #hi(S + A - .TOC.).  */ +#define R_PPC64_TOC16_HA    50  /* half16 #ha(S + A - .TOC.).  */ +#define R_PPC64_TOC         51  /* doubleword64 .TOC. */ +#define R_PPC64_PLTGOT16    52  /* half16* M + A.  */ +#define R_PPC64_PLTGOT16_LO 53  /* half16 #lo(M + A).  */ +#define R_PPC64_PLTGOT16_HI 54  /* half16 #hi(M + A).  */ +#define R_PPC64_PLTGOT16_HA 55  /* half16 #ha(M + A).  */ + +#define R_PPC64_ADDR16_DS      56 /* half16ds* (S + A) >> 2.  */ +#define R_PPC64_ADDR16_LO_DS   57 /* half16ds  #lo(S + A) >> 2.  */ +#define R_PPC64_GOT16_DS       58 /* half16ds* (G + A) >> 2.  */ +#define R_PPC64_GOT16_LO_DS    59 /* half16ds  #lo(G + A) >> 2.  */ +#define R_PPC64_PLT16_LO_DS    60 /* half16ds  #lo(L + A) >> 2.  */ +#define R_PPC64_SECTOFF_DS     61 /* half16ds* (R + A) >> 2.  */ +#define R_PPC64_SECTOFF_LO_DS  62 /* half16ds  #lo(R + A) >> 2.  */ +#define R_PPC64_TOC16_DS       63 /* half16ds* (S + A - .TOC.) >> 2.  */ +#define R_PPC64_TOC16_LO_DS    64 /* half16ds  #lo(S + A - .TOC.) >> 2.  */ +#define R_PPC64_PLTGOT16_DS    65 /* half16ds* (M + A) >> 2.  */ +#define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds  #lo(M + A) >> 2.  */ + +/* PowerPC64 relocations defined for the TLS access ABI.  */ +#define R_PPC64_TLS		67 /* none	(sym+add)@tls */ +#define R_PPC64_DTPMOD64	68 /* doubleword64 (sym+add)@dtpmod */ +#define R_PPC64_TPREL16		69 /* half16*	(sym+add)@tprel */ +#define R_PPC64_TPREL16_LO	70 /* half16	(sym+add)@tprel@l */ +#define R_PPC64_TPREL16_HI	71 /* half16	(sym+add)@tprel@h */ +#define R_PPC64_TPREL16_HA	72 /* half16	(sym+add)@tprel@ha */ +#define R_PPC64_TPREL64		73 /* doubleword64 (sym+add)@tprel */ +#define R_PPC64_DTPREL16	74 /* half16*	(sym+add)@dtprel */ +#define R_PPC64_DTPREL16_LO	75 /* half16	(sym+add)@dtprel@l */ +#define R_PPC64_DTPREL16_HI	76 /* half16	(sym+add)@dtprel@h */ +#define R_PPC64_DTPREL16_HA	77 /* half16	(sym+add)@dtprel@ha */ +#define R_PPC64_DTPREL64	78 /* doubleword64 (sym+add)@dtprel */ +#define R_PPC64_GOT_TLSGD16	79 /* half16*	(sym+add)@got@tlsgd */ +#define R_PPC64_GOT_TLSGD16_LO	80 /* half16	(sym+add)@got@tlsgd@l */ +#define R_PPC64_GOT_TLSGD16_HI	81 /* half16	(sym+add)@got@tlsgd@h */ +#define R_PPC64_GOT_TLSGD16_HA	82 /* half16	(sym+add)@got@tlsgd@ha */ +#define R_PPC64_GOT_TLSLD16	83 /* half16*	(sym+add)@got@tlsld */ +#define R_PPC64_GOT_TLSLD16_LO	84 /* half16	(sym+add)@got@tlsld@l */ +#define R_PPC64_GOT_TLSLD16_HI	85 /* half16	(sym+add)@got@tlsld@h */ +#define R_PPC64_GOT_TLSLD16_HA	86 /* half16	(sym+add)@got@tlsld@ha */ +#define R_PPC64_GOT_TPREL16_DS	87 /* half16ds*	(sym+add)@got@tprel */ +#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */ +#define R_PPC64_GOT_TPREL16_HI	89 /* half16	(sym+add)@got@tprel@h */ +#define R_PPC64_GOT_TPREL16_HA	90 /* half16	(sym+add)@got@tprel@ha */ +#define R_PPC64_GOT_DTPREL16_DS	91 /* half16ds*	(sym+add)@got@dtprel */ +#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */ +#define R_PPC64_GOT_DTPREL16_HI	93 /* half16	(sym+add)@got@dtprel@h */ +#define R_PPC64_GOT_DTPREL16_HA	94 /* half16	(sym+add)@got@dtprel@ha */ +#define R_PPC64_TPREL16_DS	95 /* half16ds*	(sym+add)@tprel */ +#define R_PPC64_TPREL16_LO_DS	96 /* half16ds	(sym+add)@tprel@l */ +#define R_PPC64_TPREL16_HIGHER	97 /* half16	(sym+add)@tprel@higher */ +#define R_PPC64_TPREL16_HIGHERA	98 /* half16	(sym+add)@tprel@highera */ +#define R_PPC64_TPREL16_HIGHEST	99 /* half16	(sym+add)@tprel@highest */ +#define R_PPC64_TPREL16_HIGHESTA 100 /* half16	(sym+add)@tprel@highesta */ +#define R_PPC64_DTPREL16_DS	101 /* half16ds* (sym+add)@dtprel */ +#define R_PPC64_DTPREL16_LO_DS	102 /* half16ds	(sym+add)@dtprel@l */ +#define R_PPC64_DTPREL16_HIGHER	103 /* half16	(sym+add)@dtprel@higher */ +#define R_PPC64_DTPREL16_HIGHERA 104 /* half16	(sym+add)@dtprel@highera */ +#define R_PPC64_DTPREL16_HIGHEST 105 /* half16	(sym+add)@dtprel@highest */ +#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16	(sym+add)@dtprel@highesta */ +#define R_PPC64_TLSGD		107 +#define R_PPC64_TLSLD		108 +#define R_PPC64_TOCSAVE		109 + +#define R_PPC64_REL16		249 +#define R_PPC64_REL16_LO	250 +#define R_PPC64_REL16_HI	251 +#define R_PPC64_REL16_HA	252 + +/* Keep this the last entry.  */ +#define R_PPC64_NUM		253 + +/* There's actually a third entry here, but it's unused */ +struct ppc64_opd_entry +{ +	unsigned long funcaddr; +	unsigned long r2; +}; + + +#endif /* _UAPI_ASM_POWERPC_ELF_H */ diff --git a/arch/powerpc/include/uapi/asm/epapr_hcalls.h b/arch/powerpc/include/uapi/asm/epapr_hcalls.h new file mode 100644 index 00000000000..7f9c74b4670 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/epapr_hcalls.h @@ -0,0 +1,98 @@ +/* + * ePAPR hcall interface + * + * Copyright 2008-2011 Freescale Semiconductor, Inc. + * + * Author: Timur Tabi <timur@freescale.com> + * + * This file is provided under a dual BSD/GPL license.  When using or + * redistributing this file, you may do so under either license. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + *     * Redistributions of source code must retain the above copyright + *       notice, this list of conditions and the following disclaimer. + *     * Redistributions in binary form must reproduce the above copyright + *       notice, this list of conditions and the following disclaimer in the + *       documentation and/or other materials provided with the distribution. + *     * Neither the name of Freescale Semiconductor nor the + *       names of its contributors may be used to endorse or promote products + *       derived from this software without specific prior written permission. + * + * + * ALTERNATIVELY, this software may be distributed under the terms of the + * GNU General Public License ("GPL") as published by the Free Software + * Foundation, either version 2 of that License or (at your option) any + * later version. + * + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _UAPI_ASM_POWERPC_EPAPR_HCALLS_H +#define _UAPI_ASM_POWERPC_EPAPR_HCALLS_H + +#define EV_BYTE_CHANNEL_SEND		1 +#define EV_BYTE_CHANNEL_RECEIVE		2 +#define EV_BYTE_CHANNEL_POLL		3 +#define EV_INT_SET_CONFIG		4 +#define EV_INT_GET_CONFIG		5 +#define EV_INT_SET_MASK			6 +#define EV_INT_GET_MASK			7 +#define EV_INT_IACK			9 +#define EV_INT_EOI			10 +#define EV_INT_SEND_IPI			11 +#define EV_INT_SET_TASK_PRIORITY	12 +#define EV_INT_GET_TASK_PRIORITY	13 +#define EV_DOORBELL_SEND		14 +#define EV_MSGSND			15 +#define EV_IDLE				16 + +/* vendor ID: epapr */ +#define EV_LOCAL_VENDOR_ID		0	/* for private use */ +#define EV_EPAPR_VENDOR_ID		1 +#define EV_FSL_VENDOR_ID		2	/* Freescale Semiconductor */ +#define EV_IBM_VENDOR_ID		3	/* IBM */ +#define EV_GHS_VENDOR_ID		4	/* Green Hills Software */ +#define EV_ENEA_VENDOR_ID		5	/* Enea */ +#define EV_WR_VENDOR_ID			6	/* Wind River Systems */ +#define EV_AMCC_VENDOR_ID		7	/* Applied Micro Circuits */ +#define EV_KVM_VENDOR_ID		42	/* KVM */ + +/* The max number of bytes that a byte channel can send or receive per call */ +#define EV_BYTE_CHANNEL_MAX_BYTES	16 + + +#define _EV_HCALL_TOKEN(id, num) (((id) << 16) | (num)) +#define EV_HCALL_TOKEN(hcall_num) _EV_HCALL_TOKEN(EV_EPAPR_VENDOR_ID, hcall_num) + +/* epapr return codes */ +#define EV_SUCCESS		0 +#define EV_EPERM		1	/* Operation not permitted */ +#define EV_ENOENT		2	/*  Entry Not Found */ +#define EV_EIO			3	/* I/O error occured */ +#define EV_EAGAIN		4	/* The operation had insufficient +					 * resources to complete and should be +					 * retried +					 */ +#define EV_ENOMEM		5	/* There was insufficient memory to +					 * complete the operation */ +#define EV_EFAULT		6	/* Bad guest address */ +#define EV_ENODEV		7	/* No such device */ +#define EV_EINVAL		8	/* An argument supplied to the hcall +					   was out of range or invalid */ +#define EV_INTERNAL		9	/* An internal error occured */ +#define EV_CONFIG		10	/* A configuration error was detected */ +#define EV_INVALID_STATE	11	/* The object is in an invalid state */ +#define EV_UNIMPLEMENTED	12	/* Unimplemented hypercall */ +#define EV_BUFFER_OVERFLOW	13	/* Caller-supplied buffer too small */ + +#endif /* _UAPI_ASM_POWERPC_EPAPR_HCALLS_H */ diff --git a/arch/powerpc/include/uapi/asm/errno.h b/arch/powerpc/include/uapi/asm/errno.h new file mode 100644 index 00000000000..8c145fd17d8 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/errno.h @@ -0,0 +1,11 @@ +#ifndef _ASM_POWERPC_ERRNO_H +#define _ASM_POWERPC_ERRNO_H + +#include <asm-generic/errno.h> + +#undef	EDEADLOCK +#define	EDEADLOCK	58	/* File locking deadlock error */ + +#define _LAST_ERRNO	516 + +#endif	/* _ASM_POWERPC_ERRNO_H */ diff --git a/arch/powerpc/include/uapi/asm/fcntl.h b/arch/powerpc/include/uapi/asm/fcntl.h new file mode 100644 index 00000000000..ce5c4516d40 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/fcntl.h @@ -0,0 +1,11 @@ +#ifndef _ASM_FCNTL_H +#define _ASM_FCNTL_H + +#define O_DIRECTORY      040000	/* must be a directory */ +#define O_NOFOLLOW      0100000	/* don't follow links */ +#define O_LARGEFILE     0200000 +#define O_DIRECT	0400000	/* direct disk access hint */ + +#include <asm-generic/fcntl.h> + +#endif /* _ASM_FCNTL_H */ diff --git a/arch/powerpc/include/uapi/asm/ioctl.h b/arch/powerpc/include/uapi/asm/ioctl.h new file mode 100644 index 00000000000..57d68304218 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ioctl.h @@ -0,0 +1,13 @@ +#ifndef _ASM_POWERPC_IOCTL_H +#define _ASM_POWERPC_IOCTL_H + +#define _IOC_SIZEBITS	13 +#define _IOC_DIRBITS	3 + +#define _IOC_NONE	1U +#define _IOC_READ	2U +#define _IOC_WRITE	4U + +#include <asm-generic/ioctl.h> + +#endif	/* _ASM_POWERPC_IOCTL_H */ diff --git a/arch/powerpc/include/uapi/asm/ioctls.h b/arch/powerpc/include/uapi/asm/ioctls.h new file mode 100644 index 00000000000..49a25796a61 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ioctls.h @@ -0,0 +1,119 @@ +#ifndef _ASM_POWERPC_IOCTLS_H +#define _ASM_POWERPC_IOCTLS_H + +#include <asm/ioctl.h> + +#define FIOCLEX		_IO('f', 1) +#define FIONCLEX	_IO('f', 2) +#define FIOASYNC	_IOW('f', 125, int) +#define FIONBIO		_IOW('f', 126, int) +#define FIONREAD	_IOR('f', 127, int) +#define TIOCINQ		FIONREAD +#define FIOQSIZE	_IOR('f', 128, loff_t) + +#define TIOCGETP	_IOR('t', 8, struct sgttyb) +#define TIOCSETP	_IOW('t', 9, struct sgttyb) +#define TIOCSETN	_IOW('t', 10, struct sgttyb)	/* TIOCSETP wo flush */ + +#define TIOCSETC	_IOW('t', 17, struct tchars) +#define TIOCGETC	_IOR('t', 18, struct tchars) +#define TCGETS		_IOR('t', 19, struct termios) +#define TCSETS		_IOW('t', 20, struct termios) +#define TCSETSW		_IOW('t', 21, struct termios) +#define TCSETSF		_IOW('t', 22, struct termios) + +#define TCGETA		_IOR('t', 23, struct termio) +#define TCSETA		_IOW('t', 24, struct termio) +#define TCSETAW		_IOW('t', 25, struct termio) +#define TCSETAF		_IOW('t', 28, struct termio) + +#define TCSBRK		_IO('t', 29) +#define TCXONC		_IO('t', 30) +#define TCFLSH		_IO('t', 31) + +#define TIOCSWINSZ	_IOW('t', 103, struct winsize) +#define TIOCGWINSZ	_IOR('t', 104, struct winsize) +#define	TIOCSTART	_IO('t', 110)		/* start output, like ^Q */ +#define	TIOCSTOP	_IO('t', 111)		/* stop output, like ^S */ +#define TIOCOUTQ        _IOR('t', 115, int)     /* output queue size */ + +#define TIOCGLTC	_IOR('t', 116, struct ltchars) +#define TIOCSLTC	_IOW('t', 117, struct ltchars) +#define TIOCSPGRP	_IOW('t', 118, int) +#define TIOCGPGRP	_IOR('t', 119, int) + +#define TIOCEXCL	0x540C +#define TIOCNXCL	0x540D +#define TIOCSCTTY	0x540E + +#define TIOCSTI		0x5412 +#define TIOCMGET	0x5415 +#define TIOCMBIS	0x5416 +#define TIOCMBIC	0x5417 +#define TIOCMSET	0x5418 +# define TIOCM_LE	0x001 +# define TIOCM_DTR	0x002 +# define TIOCM_RTS	0x004 +# define TIOCM_ST	0x008 +# define TIOCM_SR	0x010 +# define TIOCM_CTS	0x020 +# define TIOCM_CAR	0x040 +# define TIOCM_RNG	0x080 +# define TIOCM_DSR	0x100 +# define TIOCM_CD	TIOCM_CAR +# define TIOCM_RI	TIOCM_RNG +#define TIOCM_OUT1	0x2000 +#define TIOCM_OUT2	0x4000 +#define TIOCM_LOOP	0x8000 + +#define TIOCGSOFTCAR	0x5419 +#define TIOCSSOFTCAR	0x541A +#define TIOCLINUX	0x541C +#define TIOCCONS	0x541D +#define TIOCGSERIAL	0x541E +#define TIOCSSERIAL	0x541F +#define TIOCPKT		0x5420 +# define TIOCPKT_DATA		 0 +# define TIOCPKT_FLUSHREAD	 1 +# define TIOCPKT_FLUSHWRITE	 2 +# define TIOCPKT_STOP		 4 +# define TIOCPKT_START		 8 +# define TIOCPKT_NOSTOP		16 +# define TIOCPKT_DOSTOP		32 +# define TIOCPKT_IOCTL		64 + + +#define TIOCNOTTY	0x5422 +#define TIOCSETD	0x5423 +#define TIOCGETD	0x5424 +#define TCSBRKP		0x5425	/* Needed for POSIX tcsendbreak() */ +#define TIOCSBRK	0x5427  /* BSD compatibility */ +#define TIOCCBRK	0x5428  /* BSD compatibility */ +#define TIOCGSID	0x5429  /* Return the session ID of FD */ +#define TIOCGRS485	0x542e +#define TIOCSRS485	0x542f +#define TIOCGPTN	_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ +#define TIOCSPTLCK	_IOW('T',0x31, int)  /* Lock/unlock Pty */ +#define TIOCGDEV	_IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ +#define TIOCSIG		_IOW('T',0x36, int)  /* Generate signal on Pty slave */ +#define TIOCVHANGUP	0x5437 +#define TIOCGPKT	_IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK	_IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL	_IOR('T', 0x40, int) /* Get exclusive mode state */ + +#define TIOCSERCONFIG	0x5453 +#define TIOCSERGWILD	0x5454 +#define TIOCSERSWILD	0x5455 +#define TIOCGLCKTRMIOS	0x5456 +#define TIOCSLCKTRMIOS	0x5457 +#define TIOCSERGSTRUCT	0x5458 /* For debugging only */ +#define TIOCSERGETLSR   0x5459 /* Get line status register */ +  /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ +# define TIOCSER_TEMT    0x01	/* Transmitter physically empty */ +#define TIOCSERGETMULTI 0x545A /* Get multiport config  */ +#define TIOCSERSETMULTI 0x545B /* Set multiport config */ + +#define TIOCMIWAIT	0x545C	/* wait for a change on serial input line(s) */ +#define TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */ + +#endif	/* _ASM_POWERPC_IOCTLS_H */ diff --git a/arch/powerpc/include/uapi/asm/ipcbuf.h b/arch/powerpc/include/uapi/asm/ipcbuf.h new file mode 100644 index 00000000000..2c3e1d94db1 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ipcbuf.h @@ -0,0 +1,34 @@ +#ifndef _ASM_POWERPC_IPCBUF_H +#define _ASM_POWERPC_IPCBUF_H + +/* + * The ipc64_perm structure for the powerpc is identical to + * kern_ipc_perm as we have always had 32-bit UIDs and GIDs in the + * kernel.  Note extra padding because this structure is passed back + * and forth between kernel and user space.  Pad space is left for: + *	- 1 32-bit value to fill up for 8-byte alignment + *	- 2 miscellaneous 64-bit values + * + * 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/types.h> + +struct ipc64_perm +{ +	__kernel_key_t	key; +	__kernel_uid_t	uid; +	__kernel_gid_t	gid; +	__kernel_uid_t	cuid; +	__kernel_gid_t	cgid; +	__kernel_mode_t	mode; +	unsigned int	seq; +	unsigned int	__pad1; +	unsigned long long __unused1; +	unsigned long long __unused2; +}; + +#endif /* _ASM_POWERPC_IPCBUF_H */ diff --git a/arch/powerpc/include/uapi/asm/kvm.h b/arch/powerpc/include/uapi/asm/kvm.h new file mode 100644 index 00000000000..2bc4a9409a9 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/kvm.h @@ -0,0 +1,595 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. + * + * Copyright IBM Corp. 2007 + * + * Authors: Hollis Blanchard <hollisb@us.ibm.com> + */ + +#ifndef __LINUX_KVM_POWERPC_H +#define __LINUX_KVM_POWERPC_H + +#include <linux/types.h> + +/* Select powerpc specific features in <linux/kvm.h> */ +#define __KVM_HAVE_SPAPR_TCE +#define __KVM_HAVE_PPC_SMT +#define __KVM_HAVE_IRQCHIP +#define __KVM_HAVE_IRQ_LINE +#define __KVM_HAVE_GUEST_DEBUG + +struct kvm_regs { +	__u64 pc; +	__u64 cr; +	__u64 ctr; +	__u64 lr; +	__u64 xer; +	__u64 msr; +	__u64 srr0; +	__u64 srr1; +	__u64 pid; + +	__u64 sprg0; +	__u64 sprg1; +	__u64 sprg2; +	__u64 sprg3; +	__u64 sprg4; +	__u64 sprg5; +	__u64 sprg6; +	__u64 sprg7; + +	__u64 gpr[32]; +}; + +#define KVM_SREGS_E_IMPL_NONE	0 +#define KVM_SREGS_E_IMPL_FSL	1 + +#define KVM_SREGS_E_FSL_PIDn	(1 << 0) /* PID1/PID2 */ + +/* + * Feature bits indicate which sections of the sregs struct are valid, + * both in KVM_GET_SREGS and KVM_SET_SREGS.  On KVM_SET_SREGS, registers + * corresponding to unset feature bits will not be modified.  This allows + * restoring a checkpoint made without that feature, while keeping the + * default values of the new registers. + * + * KVM_SREGS_E_BASE contains: + * CSRR0/1 (refers to SRR2/3 on 40x) + * ESR + * DEAR + * MCSR + * TSR + * TCR + * DEC + * TB + * VRSAVE (USPRG0) + */ +#define KVM_SREGS_E_BASE		(1 << 0) + +/* + * KVM_SREGS_E_ARCH206 contains: + * + * PIR + * MCSRR0/1 + * DECAR + * IVPR + */ +#define KVM_SREGS_E_ARCH206		(1 << 1) + +/* + * Contains EPCR, plus the upper half of 64-bit registers + * that are 32-bit on 32-bit implementations. + */ +#define KVM_SREGS_E_64			(1 << 2) + +#define KVM_SREGS_E_SPRG8		(1 << 3) +#define KVM_SREGS_E_MCIVPR		(1 << 4) + +/* + * IVORs are used -- contains IVOR0-15, plus additional IVORs + * in combination with an appropriate feature bit. + */ +#define KVM_SREGS_E_IVOR		(1 << 5) + +/* + * Contains MAS0-4, MAS6-7, TLBnCFG, MMUCFG. + * Also TLBnPS if MMUCFG[MAVN] = 1. + */ +#define KVM_SREGS_E_ARCH206_MMU		(1 << 6) + +/* DBSR, DBCR, IAC, DAC, DVC */ +#define KVM_SREGS_E_DEBUG		(1 << 7) + +/* Enhanced debug -- DSRR0/1, SPRG9 */ +#define KVM_SREGS_E_ED			(1 << 8) + +/* Embedded Floating Point (SPE) -- IVOR32-34 if KVM_SREGS_E_IVOR */ +#define KVM_SREGS_E_SPE			(1 << 9) + +/* + * DEPRECATED! USE ONE_REG FOR THIS ONE! + * External Proxy (EXP) -- EPR + */ +#define KVM_SREGS_EXP			(1 << 10) + +/* External PID (E.PD) -- EPSC/EPLC */ +#define KVM_SREGS_E_PD			(1 << 11) + +/* Processor Control (E.PC) -- IVOR36-37 if KVM_SREGS_E_IVOR */ +#define KVM_SREGS_E_PC			(1 << 12) + +/* Page table (E.PT) -- EPTCFG */ +#define KVM_SREGS_E_PT			(1 << 13) + +/* Embedded Performance Monitor (E.PM) -- IVOR35 if KVM_SREGS_E_IVOR */ +#define KVM_SREGS_E_PM			(1 << 14) + +/* + * Special updates: + * + * Some registers may change even while a vcpu is not running. + * To avoid losing these changes, by default these registers are + * not updated by KVM_SET_SREGS.  To force an update, set the bit + * in u.e.update_special corresponding to the register to be updated. + * + * The update_special field is zero on return from KVM_GET_SREGS. + * + * When restoring a checkpoint, the caller can set update_special + * to 0xffffffff to ensure that everything is restored, even new features + * that the caller doesn't know about. + */ +#define KVM_SREGS_E_UPDATE_MCSR		(1 << 0) +#define KVM_SREGS_E_UPDATE_TSR		(1 << 1) +#define KVM_SREGS_E_UPDATE_DEC		(1 << 2) +#define KVM_SREGS_E_UPDATE_DBSR		(1 << 3) + +/* + * In KVM_SET_SREGS, reserved/pad fields must be left untouched from a + * previous KVM_GET_REGS. + * + * Unless otherwise indicated, setting any register with KVM_SET_SREGS + * directly sets its value.  It does not trigger any special semantics such + * as write-one-to-clear.  Calling KVM_SET_SREGS on an unmodified struct + * just received from KVM_GET_SREGS is always a no-op. + */ +struct kvm_sregs { +	__u32 pvr; +	union { +		struct { +			__u64 sdr1; +			struct { +				struct { +					__u64 slbe; +					__u64 slbv; +				} slb[64]; +			} ppc64; +			struct { +				__u32 sr[16]; +				__u64 ibat[8]; +				__u64 dbat[8]; +			} ppc32; +		} s; +		struct { +			union { +				struct { /* KVM_SREGS_E_IMPL_FSL */ +					__u32 features; /* KVM_SREGS_E_FSL_ */ +					__u32 svr; +					__u64 mcar; +					__u32 hid0; + +					/* KVM_SREGS_E_FSL_PIDn */ +					__u32 pid1, pid2; +				} fsl; +				__u8 pad[256]; +			} impl; + +			__u32 features; /* KVM_SREGS_E_ */ +			__u32 impl_id;	/* KVM_SREGS_E_IMPL_ */ +			__u32 update_special; /* KVM_SREGS_E_UPDATE_ */ +			__u32 pir;	/* read-only */ +			__u64 sprg8; +			__u64 sprg9;	/* E.ED */ +			__u64 csrr0; +			__u64 dsrr0;	/* E.ED */ +			__u64 mcsrr0; +			__u32 csrr1; +			__u32 dsrr1;	/* E.ED */ +			__u32 mcsrr1; +			__u32 esr; +			__u64 dear; +			__u64 ivpr; +			__u64 mcivpr; +			__u64 mcsr;	/* KVM_SREGS_E_UPDATE_MCSR */ + +			__u32 tsr;	/* KVM_SREGS_E_UPDATE_TSR */ +			__u32 tcr; +			__u32 decar; +			__u32 dec;	/* KVM_SREGS_E_UPDATE_DEC */ + +			/* +			 * Userspace can read TB directly, but the +			 * value reported here is consistent with "dec". +			 * +			 * Read-only. +			 */ +			__u64 tb; + +			__u32 dbsr;	/* KVM_SREGS_E_UPDATE_DBSR */ +			__u32 dbcr[3]; +			/* +			 * iac/dac registers are 64bit wide, while this API +			 * interface provides only lower 32 bits on 64 bit +			 * processors. ONE_REG interface is added for 64bit +			 * iac/dac registers. +			 */ +			__u32 iac[4]; +			__u32 dac[2]; +			__u32 dvc[2]; +			__u8 num_iac;	/* read-only */ +			__u8 num_dac;	/* read-only */ +			__u8 num_dvc;	/* read-only */ +			__u8 pad; + +			__u32 epr;	/* EXP */ +			__u32 vrsave;	/* a.k.a. USPRG0 */ +			__u32 epcr;	/* KVM_SREGS_E_64 */ + +			__u32 mas0; +			__u32 mas1; +			__u64 mas2; +			__u64 mas7_3; +			__u32 mas4; +			__u32 mas6; + +			__u32 ivor_low[16]; /* IVOR0-15 */ +			__u32 ivor_high[18]; /* IVOR32+, plus room to expand */ + +			__u32 mmucfg;	/* read-only */ +			__u32 eptcfg;	/* E.PT, read-only */ +			__u32 tlbcfg[4];/* read-only */ +			__u32 tlbps[4]; /* read-only */ + +			__u32 eplc, epsc; /* E.PD */ +		} e; +		__u8 pad[1020]; +	} u; +}; + +struct kvm_fpu { +	__u64 fpr[32]; +}; + +/* + * Defines for h/w breakpoint, watchpoint (read, write or both) and + * software breakpoint. + * These are used as "type" in KVM_SET_GUEST_DEBUG ioctl and "status" + * for KVM_DEBUG_EXIT. + */ +#define KVMPPC_DEBUG_NONE		0x0 +#define KVMPPC_DEBUG_BREAKPOINT		(1UL << 1) +#define KVMPPC_DEBUG_WATCH_WRITE	(1UL << 2) +#define KVMPPC_DEBUG_WATCH_READ		(1UL << 3) +struct kvm_debug_exit_arch { +	__u64 address; +	/* +	 * exiting to userspace because of h/w breakpoint, watchpoint +	 * (read, write or both) and software breakpoint. +	 */ +	__u32 status; +	__u32 reserved; +}; + +/* for KVM_SET_GUEST_DEBUG */ +struct kvm_guest_debug_arch { +	struct { +		/* H/W breakpoint/watchpoint address */ +		__u64 addr; +		/* +		 * Type denotes h/w breakpoint, read watchpoint, write +		 * watchpoint or watchpoint (both read and write). +		 */ +		__u32 type; +		__u32 reserved; +	} bp[16]; +}; + +/* Debug related defines */ +/* + * kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic + * and upper 16 bits are architecture specific. Architecture specific defines + * that ioctl is for setting hardware breakpoint or software breakpoint. + */ +#define KVM_GUESTDBG_USE_SW_BP		0x00010000 +#define KVM_GUESTDBG_USE_HW_BP		0x00020000 + +/* definition of registers in kvm_run */ +struct kvm_sync_regs { +}; + +#define KVM_INTERRUPT_SET	-1U +#define KVM_INTERRUPT_UNSET	-2U +#define KVM_INTERRUPT_SET_LEVEL	-3U + +#define KVM_CPU_440		1 +#define KVM_CPU_E500V2		2 +#define KVM_CPU_3S_32		3 +#define KVM_CPU_3S_64		4 +#define KVM_CPU_E500MC		5 + +/* for KVM_CAP_SPAPR_TCE */ +struct kvm_create_spapr_tce { +	__u64 liobn; +	__u32 window_size; +}; + +/* for KVM_ALLOCATE_RMA */ +struct kvm_allocate_rma { +	__u64 rma_size; +}; + +/* for KVM_CAP_PPC_RTAS */ +struct kvm_rtas_token_args { +	char name[120]; +	__u64 token;	/* Use a token of 0 to undefine a mapping */ +}; + +struct kvm_book3e_206_tlb_entry { +	__u32 mas8; +	__u32 mas1; +	__u64 mas2; +	__u64 mas7_3; +}; + +struct kvm_book3e_206_tlb_params { +	/* +	 * For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV: +	 * +	 * - The number of ways of TLB0 must be a power of two between 2 and +	 *   16. +	 * - TLB1 must be fully associative. +	 * - The size of TLB0 must be a multiple of the number of ways, and +	 *   the number of sets must be a power of two. +	 * - The size of TLB1 may not exceed 64 entries. +	 * - TLB0 supports 4 KiB pages. +	 * - The page sizes supported by TLB1 are as indicated by +	 *   TLB1CFG (if MMUCFG[MAVN] = 0) or TLB1PS (if MMUCFG[MAVN] = 1) +	 *   as returned by KVM_GET_SREGS. +	 * - TLB2 and TLB3 are reserved, and their entries in tlb_sizes[] +	 *   and tlb_ways[] must be zero. +	 * +	 * tlb_ways[n] = tlb_sizes[n] means the array is fully associative. +	 * +	 * KVM will adjust TLBnCFG based on the sizes configured here, +	 * though arrays greater than 2048 entries will have TLBnCFG[NENTRY] +	 * set to zero. +	 */ +	__u32 tlb_sizes[4]; +	__u32 tlb_ways[4]; +	__u32 reserved[8]; +}; + +/* For KVM_PPC_GET_HTAB_FD */ +struct kvm_get_htab_fd { +	__u64	flags; +	__u64	start_index; +	__u64	reserved[2]; +}; + +/* Values for kvm_get_htab_fd.flags */ +#define KVM_GET_HTAB_BOLTED_ONLY	((__u64)0x1) +#define KVM_GET_HTAB_WRITE		((__u64)0x2) + +/* + * Data read on the file descriptor is formatted as a series of + * records, each consisting of a header followed by a series of + * `n_valid' HPTEs (16 bytes each), which are all valid.  Following + * those valid HPTEs there are `n_invalid' invalid HPTEs, which + * are not represented explicitly in the stream.  The same format + * is used for writing. + */ +struct kvm_get_htab_header { +	__u32	index; +	__u16	n_valid; +	__u16	n_invalid; +}; + +/* Per-vcpu XICS interrupt controller state */ +#define KVM_REG_PPC_ICP_STATE	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c) + +#define  KVM_REG_PPC_ICP_CPPR_SHIFT	56	/* current proc priority */ +#define  KVM_REG_PPC_ICP_CPPR_MASK	0xff +#define  KVM_REG_PPC_ICP_XISR_SHIFT	32	/* interrupt status field */ +#define  KVM_REG_PPC_ICP_XISR_MASK	0xffffff +#define  KVM_REG_PPC_ICP_MFRR_SHIFT	24	/* pending IPI priority */ +#define  KVM_REG_PPC_ICP_MFRR_MASK	0xff +#define  KVM_REG_PPC_ICP_PPRI_SHIFT	16	/* pending irq priority */ +#define  KVM_REG_PPC_ICP_PPRI_MASK	0xff + +/* Device control API: PPC-specific devices */ +#define KVM_DEV_MPIC_GRP_MISC		1 +#define   KVM_DEV_MPIC_BASE_ADDR	0	/* 64-bit */ + +#define KVM_DEV_MPIC_GRP_REGISTER	2	/* 32-bit */ +#define KVM_DEV_MPIC_GRP_IRQ_ACTIVE	3	/* 32-bit */ + +/* One-Reg API: PPC-specific registers */ +#define KVM_REG_PPC_HIOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1) +#define KVM_REG_PPC_IAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2) +#define KVM_REG_PPC_IAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3) +#define KVM_REG_PPC_IAC3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4) +#define KVM_REG_PPC_IAC4	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5) +#define KVM_REG_PPC_DAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6) +#define KVM_REG_PPC_DAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7) +#define KVM_REG_PPC_DABR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8) +#define KVM_REG_PPC_DSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9) +#define KVM_REG_PPC_PURR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa) +#define KVM_REG_PPC_SPURR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb) +#define KVM_REG_PPC_DAR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc) +#define KVM_REG_PPC_DSISR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd) +#define KVM_REG_PPC_AMR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe) +#define KVM_REG_PPC_UAMOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf) + +#define KVM_REG_PPC_MMCR0	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10) +#define KVM_REG_PPC_MMCR1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11) +#define KVM_REG_PPC_MMCRA	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12) +#define KVM_REG_PPC_MMCR2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x13) +#define KVM_REG_PPC_MMCRS	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x14) +#define KVM_REG_PPC_SIAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x15) +#define KVM_REG_PPC_SDAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x16) +#define KVM_REG_PPC_SIER	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x17) + +#define KVM_REG_PPC_PMC1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18) +#define KVM_REG_PPC_PMC2	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19) +#define KVM_REG_PPC_PMC3	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a) +#define KVM_REG_PPC_PMC4	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b) +#define KVM_REG_PPC_PMC5	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c) +#define KVM_REG_PPC_PMC6	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d) +#define KVM_REG_PPC_PMC7	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e) +#define KVM_REG_PPC_PMC8	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f) + +/* 32 floating-point registers */ +#define KVM_REG_PPC_FPR0	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20) +#define KVM_REG_PPC_FPR(n)	(KVM_REG_PPC_FPR0 + (n)) +#define KVM_REG_PPC_FPR31	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f) + +/* 32 VMX/Altivec vector registers */ +#define KVM_REG_PPC_VR0		(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40) +#define KVM_REG_PPC_VR(n)	(KVM_REG_PPC_VR0 + (n)) +#define KVM_REG_PPC_VR31	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f) + +/* 32 double-width FP registers for VSX */ +/* High-order halves overlap with FP regs */ +#define KVM_REG_PPC_VSR0	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60) +#define KVM_REG_PPC_VSR(n)	(KVM_REG_PPC_VSR0 + (n)) +#define KVM_REG_PPC_VSR31	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f) + +/* FP and vector status/control registers */ +#define KVM_REG_PPC_FPSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80) +#define KVM_REG_PPC_VSCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81) + +/* Virtual processor areas */ +/* For SLB & DTL, address in high (first) half, length in low half */ +#define KVM_REG_PPC_VPA_ADDR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82) +#define KVM_REG_PPC_VPA_SLB	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83) +#define KVM_REG_PPC_VPA_DTL	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84) + +#define KVM_REG_PPC_EPCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85) +#define KVM_REG_PPC_EPR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x86) + +/* Timer Status Register OR/CLEAR interface */ +#define KVM_REG_PPC_OR_TSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x87) +#define KVM_REG_PPC_CLEAR_TSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88) +#define KVM_REG_PPC_TCR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89) +#define KVM_REG_PPC_TSR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a) + +/* Debugging: Special instruction for software breakpoint */ +#define KVM_REG_PPC_DEBUG_INST	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b) + +/* MMU registers */ +#define KVM_REG_PPC_MAS0	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c) +#define KVM_REG_PPC_MAS1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d) +#define KVM_REG_PPC_MAS2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e) +#define KVM_REG_PPC_MAS7_3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f) +#define KVM_REG_PPC_MAS4	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90) +#define KVM_REG_PPC_MAS6	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91) +#define KVM_REG_PPC_MMUCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92) +/* + * TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using + * KVM_CAP_SW_TLB ioctl + */ +#define KVM_REG_PPC_TLB0CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93) +#define KVM_REG_PPC_TLB1CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94) +#define KVM_REG_PPC_TLB2CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95) +#define KVM_REG_PPC_TLB3CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96) +#define KVM_REG_PPC_TLB0PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97) +#define KVM_REG_PPC_TLB1PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98) +#define KVM_REG_PPC_TLB2PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99) +#define KVM_REG_PPC_TLB3PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a) +#define KVM_REG_PPC_EPTCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b) + +/* Timebase offset */ +#define KVM_REG_PPC_TB_OFFSET	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9c) + +/* POWER8 registers */ +#define KVM_REG_PPC_SPMC1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9d) +#define KVM_REG_PPC_SPMC2	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9e) +#define KVM_REG_PPC_IAMR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9f) +#define KVM_REG_PPC_TFHAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa0) +#define KVM_REG_PPC_TFIAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa1) +#define KVM_REG_PPC_TEXASR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa2) +#define KVM_REG_PPC_FSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa3) +#define KVM_REG_PPC_PSPB	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xa4) +#define KVM_REG_PPC_EBBHR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa5) +#define KVM_REG_PPC_EBBRR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa6) +#define KVM_REG_PPC_BESCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa7) +#define KVM_REG_PPC_TAR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa8) +#define KVM_REG_PPC_DPDES	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa9) +#define KVM_REG_PPC_DAWR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaa) +#define KVM_REG_PPC_DAWRX	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xab) +#define KVM_REG_PPC_CIABR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xac) +#define KVM_REG_PPC_IC		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xad) +#define KVM_REG_PPC_VTB		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xae) +#define KVM_REG_PPC_CSIGR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaf) +#define KVM_REG_PPC_TACR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb0) +#define KVM_REG_PPC_TCSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb1) +#define KVM_REG_PPC_PID		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2) +#define KVM_REG_PPC_ACOP	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3) + +#define KVM_REG_PPC_VRSAVE	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4) +#define KVM_REG_PPC_LPCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5) +#define KVM_REG_PPC_PPR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb6) + +/* Architecture compatibility level */ +#define KVM_REG_PPC_ARCH_COMPAT	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb7) + +#define KVM_REG_PPC_DABRX	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb8) +#define KVM_REG_PPC_WORT	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb9) + +/* Transactional Memory checkpointed state: + * This is all GPRs, all VSX regs and a subset of SPRs + */ +#define KVM_REG_PPC_TM		(KVM_REG_PPC | 0x80000000) +/* TM GPRs */ +#define KVM_REG_PPC_TM_GPR0	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0) +#define KVM_REG_PPC_TM_GPR(n)	(KVM_REG_PPC_TM_GPR0 + (n)) +#define KVM_REG_PPC_TM_GPR31	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x1f) +/* TM VSX */ +#define KVM_REG_PPC_TM_VSR0	(KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x20) +#define KVM_REG_PPC_TM_VSR(n)	(KVM_REG_PPC_TM_VSR0 + (n)) +#define KVM_REG_PPC_TM_VSR63	(KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x5f) +/* TM SPRS */ +#define KVM_REG_PPC_TM_CR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x60) +#define KVM_REG_PPC_TM_LR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x61) +#define KVM_REG_PPC_TM_CTR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x62) +#define KVM_REG_PPC_TM_FPSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x63) +#define KVM_REG_PPC_TM_AMR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x64) +#define KVM_REG_PPC_TM_PPR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x65) +#define KVM_REG_PPC_TM_VRSAVE	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x66) +#define KVM_REG_PPC_TM_VSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U32 | 0x67) +#define KVM_REG_PPC_TM_DSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x68) +#define KVM_REG_PPC_TM_TAR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x69) + +/* PPC64 eXternal Interrupt Controller Specification */ +#define KVM_DEV_XICS_GRP_SOURCES	1	/* 64-bit source attributes */ + +/* Layout of 64-bit source attribute values */ +#define  KVM_XICS_DESTINATION_SHIFT	0 +#define  KVM_XICS_DESTINATION_MASK	0xffffffffULL +#define  KVM_XICS_PRIORITY_SHIFT	32 +#define  KVM_XICS_PRIORITY_MASK		0xff +#define  KVM_XICS_LEVEL_SENSITIVE	(1ULL << 40) +#define  KVM_XICS_MASKED		(1ULL << 41) +#define  KVM_XICS_PENDING		(1ULL << 42) + +#endif /* __LINUX_KVM_POWERPC_H */ diff --git a/arch/powerpc/include/uapi/asm/kvm_para.h b/arch/powerpc/include/uapi/asm/kvm_para.h new file mode 100644 index 00000000000..91e42f09b32 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/kvm_para.h @@ -0,0 +1,97 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. + * + * Copyright IBM Corp. 2008 + * + * Authors: Hollis Blanchard <hollisb@us.ibm.com> + */ + +#ifndef _UAPI__POWERPC_KVM_PARA_H__ +#define _UAPI__POWERPC_KVM_PARA_H__ + +#include <linux/types.h> + +/* + * Additions to this struct must only occur at the end, and should be + * accompanied by a KVM_MAGIC_FEAT flag to advertise that they are present + * (albeit not necessarily relevant to the current target hardware platform). + * + * Struct fields are always 32 or 64 bit aligned, depending on them being 32 + * or 64 bit wide respectively. + * + * See Documentation/virtual/kvm/ppc-pv.txt + */ +struct kvm_vcpu_arch_shared { +	__u64 scratch1; +	__u64 scratch2; +	__u64 scratch3; +	__u64 critical;		/* Guest may not get interrupts if == r1 */ +	__u64 sprg0; +	__u64 sprg1; +	__u64 sprg2; +	__u64 sprg3; +	__u64 srr0; +	__u64 srr1; +	__u64 dar;		/* dear on BookE */ +	__u64 msr; +	__u32 dsisr; +	__u32 int_pending;	/* Tells the guest if we have an interrupt */ +	__u32 sr[16]; +	__u32 mas0; +	__u32 mas1; +	__u64 mas7_3; +	__u64 mas2; +	__u32 mas4; +	__u32 mas6; +	__u32 esr; +	__u32 pir; + +	/* +	 * SPRG4-7 are user-readable, so we can only keep these consistent +	 * between the shared area and the real registers when there's an +	 * intervening exit to KVM.  This also applies to SPRG3 on some +	 * chips. +	 * +	 * This suffices for access by guest userspace, since in PR-mode +	 * KVM, an exit must occur when changing the guest's MSR[PR]. +	 * If the guest kernel writes to SPRG3-7 via the shared area, it +	 * must also use the shared area for reading while in kernel space. +	 */ +	__u64 sprg4; +	__u64 sprg5; +	__u64 sprg6; +	__u64 sprg7; +}; + +#define KVM_SC_MAGIC_R0		0x4b564d21 /* "KVM!" */ + +#define KVM_HCALL_TOKEN(num)     _EV_HCALL_TOKEN(EV_KVM_VENDOR_ID, num) + +#include <asm/epapr_hcalls.h> + +#define KVM_FEATURE_MAGIC_PAGE	1 + +/* Magic page flags from host to guest */ + +#define KVM_MAGIC_FEAT_SR		(1 << 0) + +/* MASn, ESR, PIR, and high SPRGs */ +#define KVM_MAGIC_FEAT_MAS0_TO_SPRG7	(1 << 1) + +/* Magic page flags from guest to host */ + +#define MAGIC_PAGE_FLAG_NOT_MAPPED_NX	(1 << 0) + + +#endif /* _UAPI__POWERPC_KVM_PARA_H__ */ diff --git a/arch/powerpc/include/uapi/asm/mman.h b/arch/powerpc/include/uapi/asm/mman.h new file mode 100644 index 00000000000..6ea26df0a73 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/mman.h @@ -0,0 +1,31 @@ +/* + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_MMAN_H +#define _UAPI_ASM_POWERPC_MMAN_H + +#include <asm-generic/mman-common.h> + + +#define PROT_SAO	0x10		/* Strong Access Ordering */ + +#define MAP_RENAME      MAP_ANONYMOUS   /* In SunOS terminology */ +#define MAP_NORESERVE   0x40            /* don't reserve swap pages */ +#define MAP_LOCKED	0x80 + +#define MAP_GROWSDOWN	0x0100		/* stack-like segment */ +#define MAP_DENYWRITE	0x0800		/* ETXTBSY */ +#define MAP_EXECUTABLE	0x1000		/* mark it as an executable */ + +#define MCL_CURRENT     0x2000          /* lock all currently mapped pages */ +#define MCL_FUTURE      0x4000          /* lock all additions to address space */ + +#define MAP_POPULATE	0x8000		/* populate (prefault) pagetables */ +#define MAP_NONBLOCK	0x10000		/* do not block on IO */ +#define MAP_STACK	0x20000		/* give out an address that is best suited for process/thread stacks */ +#define MAP_HUGETLB	0x40000		/* create a huge page mapping */ + +#endif /* _UAPI_ASM_POWERPC_MMAN_H */ diff --git a/arch/powerpc/include/uapi/asm/msgbuf.h b/arch/powerpc/include/uapi/asm/msgbuf.h new file mode 100644 index 00000000000..dd76743c753 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/msgbuf.h @@ -0,0 +1,33 @@ +#ifndef _ASM_POWERPC_MSGBUF_H +#define _ASM_POWERPC_MSGBUF_H + +/* + * The msqid64_ds structure for the PowerPC architecture. + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + */ + +struct msqid64_ds { +	struct ipc64_perm msg_perm; +#ifndef __powerpc64__ +	unsigned int	__unused1; +#endif +	__kernel_time_t msg_stime;	/* last msgsnd time */ +#ifndef __powerpc64__ +	unsigned int	__unused2; +#endif +	__kernel_time_t msg_rtime;	/* last msgrcv time */ +#ifndef __powerpc64__ +	unsigned int	__unused3; +#endif +	__kernel_time_t msg_ctime;	/* last change time */ +	unsigned long  msg_cbytes;	/* current number of bytes on queue */ +	unsigned long  msg_qnum;	/* number of messages in queue */ +	unsigned long  msg_qbytes;	/* max number of bytes on queue */ +	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */ +	__kernel_pid_t msg_lrpid;	/* last receive pid */ +	unsigned long  __unused4; +	unsigned long  __unused5; +}; + +#endif	/* _ASM_POWERPC_MSGBUF_H */ diff --git a/arch/powerpc/include/uapi/asm/nvram.h b/arch/powerpc/include/uapi/asm/nvram.h new file mode 100644 index 00000000000..608bdc8aedd --- /dev/null +++ b/arch/powerpc/include/uapi/asm/nvram.h @@ -0,0 +1,62 @@ +/* + * NVRAM definitions and access functions. + * + * 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. + */ + +#ifndef _UAPI_ASM_POWERPC_NVRAM_H +#define _UAPI_ASM_POWERPC_NVRAM_H + +/* Signatures for nvram partitions */ +#define NVRAM_SIG_SP	0x02	/* support processor */ +#define NVRAM_SIG_OF	0x50	/* open firmware config */ +#define NVRAM_SIG_FW	0x51	/* general firmware */ +#define NVRAM_SIG_HW	0x52	/* hardware (VPD) */ +#define NVRAM_SIG_FLIP	0x5a	/* Apple flip/flop header */ +#define NVRAM_SIG_APPL	0x5f	/* Apple "system" (???) */ +#define NVRAM_SIG_SYS	0x70	/* system env vars */ +#define NVRAM_SIG_CFG	0x71	/* config data */ +#define NVRAM_SIG_ELOG	0x72	/* error log */ +#define NVRAM_SIG_VEND	0x7e	/* vendor defined */ +#define NVRAM_SIG_FREE	0x7f	/* Free space */ +#define NVRAM_SIG_OS	0xa0	/* OS defined */ +#define NVRAM_SIG_PANIC	0xa1	/* Apple OSX "panic" */ + + +/* PowerMac specific nvram stuffs */ + +enum { +	pmac_nvram_OF,		/* Open Firmware partition */ +	pmac_nvram_XPRAM,	/* MacOS XPRAM partition */ +	pmac_nvram_NR		/* MacOS Name Registry partition */ +}; + + +/* Some offsets in XPRAM */ +#define PMAC_XPRAM_MACHINE_LOC	0xe4 +#define PMAC_XPRAM_SOUND_VOLUME	0x08 + +/* Machine location structure in PowerMac XPRAM */ +struct pmac_machine_location { +	unsigned int	latitude;	/* 2+30 bit Fractional number */ +	unsigned int	longitude;	/* 2+30 bit Fractional number */ +	unsigned int	delta;		/* mix of GMT delta and DLS */ +}; + +/* + * /dev/nvram ioctls + * + * Note that PMAC_NVRAM_GET_OFFSET is still supported, but is + * definitely obsolete. Do not use it if you can avoid it + */ + +#define OBSOLETE_PMAC_NVRAM_GET_OFFSET \ +				_IOWR('p', 0x40, int) + +#define IOC_NVRAM_GET_OFFSET	_IOWR('p', 0x42, int)	/* Get NVRAM partition offset */ +#define IOC_NVRAM_SYNC		_IO('p', 0x43)		/* Sync NVRAM image */ + +#endif /* _UAPI_ASM_POWERPC_NVRAM_H */ diff --git a/arch/powerpc/include/uapi/asm/param.h b/arch/powerpc/include/uapi/asm/param.h new file mode 100644 index 00000000000..965d4542797 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/param.h @@ -0,0 +1 @@ +#include <asm-generic/param.h> diff --git a/arch/powerpc/include/uapi/asm/perf_event.h b/arch/powerpc/include/uapi/asm/perf_event.h new file mode 100644 index 00000000000..80a4d40cf5b --- /dev/null +++ b/arch/powerpc/include/uapi/asm/perf_event.h @@ -0,0 +1,18 @@ +/* + * Copyright 2013 Michael Ellerman, IBM Corp. + * + * 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; version 2 of the + * License. + */ + +#ifndef _UAPI_ASM_POWERPC_PERF_EVENT_H +#define _UAPI_ASM_POWERPC_PERF_EVENT_H + +/* + * We use bit 63 of perf_event_attr.config as a flag to request EBB. + */ +#define PERF_EVENT_CONFIG_EBB_SHIFT	63 + +#endif /* _UAPI_ASM_POWERPC_PERF_EVENT_H */ diff --git a/arch/powerpc/include/uapi/asm/poll.h b/arch/powerpc/include/uapi/asm/poll.h new file mode 100644 index 00000000000..c98509d3149 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/poll.h @@ -0,0 +1 @@ +#include <asm-generic/poll.h> diff --git a/arch/powerpc/include/uapi/asm/posix_types.h b/arch/powerpc/include/uapi/asm/posix_types.h new file mode 100644 index 00000000000..2958c5b97b2 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/posix_types.h @@ -0,0 +1,25 @@ +#ifndef _ASM_POWERPC_POSIX_TYPES_H +#define _ASM_POWERPC_POSIX_TYPES_H + +/* + * This file is generally used by user-level software, so you need to + * be a little careful about namespace pollution etc.  Also, we cannot + * assume GCC is being used. + */ + +#ifdef __powerpc64__ +typedef unsigned long	__kernel_old_dev_t; +#define __kernel_old_dev_t __kernel_old_dev_t +#else +typedef unsigned int	__kernel_size_t; +typedef int		__kernel_ssize_t; +typedef long		__kernel_ptrdiff_t; +#define __kernel_size_t __kernel_size_t + +typedef short		__kernel_ipc_pid_t; +#define __kernel_ipc_pid_t __kernel_ipc_pid_t +#endif + +#include <asm-generic/posix_types.h> + +#endif /* _ASM_POWERPC_POSIX_TYPES_H */ diff --git a/arch/powerpc/include/uapi/asm/ps3fb.h b/arch/powerpc/include/uapi/asm/ps3fb.h new file mode 100644 index 00000000000..e7233a84968 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ps3fb.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2006 Sony Computer Entertainment Inc. + * Copyright 2006, 2007 Sony Corporation + * + * 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; version 2 of the License. + * + * This program 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _ASM_POWERPC_PS3FB_H_ +#define _ASM_POWERPC_PS3FB_H_ + +#include <linux/types.h> +#include <linux/ioctl.h> + +/* ioctl */ +#define PS3FB_IOCTL_SETMODE       _IOW('r',  1, int) /* set video mode */ +#define PS3FB_IOCTL_GETMODE       _IOR('r',  2, int) /* get video mode */ +#define PS3FB_IOCTL_SCREENINFO    _IOR('r',  3, int) /* get screen info */ +#define PS3FB_IOCTL_ON            _IO('r', 4)        /* use IOCTL_FSEL */ +#define PS3FB_IOCTL_OFF           _IO('r', 5)        /* return to normal-flip */ +#define PS3FB_IOCTL_FSEL          _IOW('r', 6, int)  /* blit and flip request */ + +#ifndef FBIO_WAITFORVSYNC +#define FBIO_WAITFORVSYNC         _IOW('F', 0x20, __u32) /* wait for vsync */ +#endif + +struct ps3fb_ioctl_res { +	__u32 xres; /* frame buffer x_size */ +	__u32 yres; /* frame buffer y_size */ +	__u32 xoff; /* margine x  */ +	__u32 yoff; /* margine y */ +	__u32 num_frames; /* num of frame buffers */ +}; + +#endif /* _ASM_POWERPC_PS3FB_H_ */ diff --git a/arch/powerpc/include/uapi/asm/ptrace.h b/arch/powerpc/include/uapi/asm/ptrace.h new file mode 100644 index 00000000000..77d2ed35b11 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ptrace.h @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2001 PPC64 Team, IBM Corp + * + * This struct defines the way the registers are stored on the + * kernel stack during a system call or other kernel entry. + * + * this should only contain volatile regs + * since we can keep non-volatile in the thread_struct + * should set this up when only volatiles are saved + * by intr code. + * + * Since this is going on the stack, *CARE MUST BE TAKEN* to insure + * that the overall structure is a multiple of 16 bytes in length. + * + * Note that the offsets of the fields in this struct correspond with + * the PT_* values below.  This simplifies arch/powerpc/kernel/ptrace.c. + * + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_PTRACE_H +#define _UAPI_ASM_POWERPC_PTRACE_H + + +#include <linux/types.h> + +#ifndef __ASSEMBLY__ + +struct pt_regs { +	unsigned long gpr[32]; +	unsigned long nip; +	unsigned long msr; +	unsigned long orig_gpr3;	/* Used for restarting system calls */ +	unsigned long ctr; +	unsigned long link; +	unsigned long xer; +	unsigned long ccr; +#ifdef __powerpc64__ +	unsigned long softe;		/* Soft enabled/disabled */ +#else +	unsigned long mq;		/* 601 only (not used at present) */ +					/* Used on APUS to hold IPL value. */ +#endif +	unsigned long trap;		/* Reason for being here */ +	/* N.B. for critical exceptions on 4xx, the dar and dsisr +	   fields are overloaded to hold srr0 and srr1. */ +	unsigned long dar;		/* Fault registers */ +	unsigned long dsisr;		/* on 4xx/Book-E used for ESR */ +	unsigned long result;		/* Result of a system call */ +}; + +#endif /* __ASSEMBLY__ */ + + +/* + * Offsets used by 'ptrace' system call interface. + * These can't be changed without breaking binary compatibility + * with MkLinux, etc. + */ +#define PT_R0	0 +#define PT_R1	1 +#define PT_R2	2 +#define PT_R3	3 +#define PT_R4	4 +#define PT_R5	5 +#define PT_R6	6 +#define PT_R7	7 +#define PT_R8	8 +#define PT_R9	9 +#define PT_R10	10 +#define PT_R11	11 +#define PT_R12	12 +#define PT_R13	13 +#define PT_R14	14 +#define PT_R15	15 +#define PT_R16	16 +#define PT_R17	17 +#define PT_R18	18 +#define PT_R19	19 +#define PT_R20	20 +#define PT_R21	21 +#define PT_R22	22 +#define PT_R23	23 +#define PT_R24	24 +#define PT_R25	25 +#define PT_R26	26 +#define PT_R27	27 +#define PT_R28	28 +#define PT_R29	29 +#define PT_R30	30 +#define PT_R31	31 + +#define PT_NIP	32 +#define PT_MSR	33 +#define PT_ORIG_R3 34 +#define PT_CTR	35 +#define PT_LNK	36 +#define PT_XER	37 +#define PT_CCR	38 +#ifndef __powerpc64__ +#define PT_MQ	39 +#else +#define PT_SOFTE 39 +#endif +#define PT_TRAP	40 +#define PT_DAR	41 +#define PT_DSISR 42 +#define PT_RESULT 43 +#define PT_DSCR 44 +#define PT_REGS_COUNT 44 + +#define PT_FPR0	48	/* each FP reg occupies 2 slots in this space */ + +#ifndef __powerpc64__ + +#define PT_FPR31 (PT_FPR0 + 2*31) +#define PT_FPSCR (PT_FPR0 + 2*32 + 1) + +#else /* __powerpc64__ */ + +#define PT_FPSCR (PT_FPR0 + 32)	/* each FP reg occupies 1 slot in 64-bit space */ + + +#define PT_VR0 82	/* each Vector reg occupies 2 slots in 64-bit */ +#define PT_VSCR (PT_VR0 + 32*2 + 1) +#define PT_VRSAVE (PT_VR0 + 33*2) + + +/* + * Only store first 32 VSRs here. The second 32 VSRs in VR0-31 + */ +#define PT_VSR0 150	/* each VSR reg occupies 2 slots in 64-bit */ +#define PT_VSR31 (PT_VSR0 + 2*31) +#endif /* __powerpc64__ */ + +/* + * Get/set all the altivec registers vr0..vr31, vscr, vrsave, in one go. + * The transfer totals 34 quadword.  Quadwords 0-31 contain the + * corresponding vector registers.  Quadword 32 contains the vscr as the + * last word (offset 12) within that quadword.  Quadword 33 contains the + * vrsave as the first word (offset 0) within the quadword. + * + * This definition of the VMX state is compatible with the current PPC32 + * ptrace interface.  This allows signal handling and ptrace to use the same + * structures.  This also simplifies the implementation of a bi-arch + * (combined (32- and 64-bit) gdb. + */ +#define PTRACE_GETVRREGS	0x12 +#define PTRACE_SETVRREGS	0x13 + +/* Get/set all the upper 32-bits of the SPE registers, accumulator, and + * spefscr, in one go */ +#define PTRACE_GETEVRREGS	0x14 +#define PTRACE_SETEVRREGS	0x15 + +/* Get the first 32 128bit VSX registers */ +#define PTRACE_GETVSRREGS	0x1b +#define PTRACE_SETVSRREGS	0x1c + +/* + * Get or set a debug register. The first 16 are DABR registers and the + * second 16 are IABR registers. + */ +#define PTRACE_GET_DEBUGREG	0x19 +#define PTRACE_SET_DEBUGREG	0x1a + +/* (new) PTRACE requests using the same numbers as x86 and the same + * argument ordering. Additionally, they support more registers too + */ +#define PTRACE_GETREGS            0xc +#define PTRACE_SETREGS            0xd +#define PTRACE_GETFPREGS          0xe +#define PTRACE_SETFPREGS          0xf +#define PTRACE_GETREGS64	  0x16 +#define PTRACE_SETREGS64	  0x17 + +/* Calls to trace a 64bit program from a 32bit program */ +#define PPC_PTRACE_PEEKTEXT_3264 0x95 +#define PPC_PTRACE_PEEKDATA_3264 0x94 +#define PPC_PTRACE_POKETEXT_3264 0x93 +#define PPC_PTRACE_POKEDATA_3264 0x92 +#define PPC_PTRACE_PEEKUSR_3264  0x91 +#define PPC_PTRACE_POKEUSR_3264  0x90 + +#define PTRACE_SINGLEBLOCK	0x100	/* resume execution until next branch */ + +#define PPC_PTRACE_GETHWDBGINFO	0x89 +#define PPC_PTRACE_SETHWDEBUG	0x88 +#define PPC_PTRACE_DELHWDEBUG	0x87 + +#ifndef __ASSEMBLY__ + +struct ppc_debug_info { +	__u32 version;			/* Only version 1 exists to date */ +	__u32 num_instruction_bps; +	__u32 num_data_bps; +	__u32 num_condition_regs; +	__u32 data_bp_alignment; +	__u32 sizeof_condition;		/* size of the DVC register */ +	__u64 features; +}; + +#endif /* __ASSEMBLY__ */ + +/* + * features will have bits indication whether there is support for: + */ +#define PPC_DEBUG_FEATURE_INSN_BP_RANGE		0x0000000000000001 +#define PPC_DEBUG_FEATURE_INSN_BP_MASK		0x0000000000000002 +#define PPC_DEBUG_FEATURE_DATA_BP_RANGE		0x0000000000000004 +#define PPC_DEBUG_FEATURE_DATA_BP_MASK		0x0000000000000008 +#define PPC_DEBUG_FEATURE_DATA_BP_DAWR		0x0000000000000010 + +#ifndef __ASSEMBLY__ + +struct ppc_hw_breakpoint { +	__u32 version;		/* currently, version must be 1 */ +	__u32 trigger_type;	/* only some combinations allowed */ +	__u32 addr_mode;	/* address match mode */ +	__u32 condition_mode;	/* break/watchpoint condition flags */ +	__u64 addr;		/* break/watchpoint address */ +	__u64 addr2;		/* range end or mask */ +	__u64 condition_value;	/* contents of the DVC register */ +}; + +#endif /* __ASSEMBLY__ */ + +/* + * Trigger Type + */ +#define PPC_BREAKPOINT_TRIGGER_EXECUTE	0x00000001 +#define PPC_BREAKPOINT_TRIGGER_READ	0x00000002 +#define PPC_BREAKPOINT_TRIGGER_WRITE	0x00000004 +#define PPC_BREAKPOINT_TRIGGER_RW	\ +	(PPC_BREAKPOINT_TRIGGER_READ | PPC_BREAKPOINT_TRIGGER_WRITE) + +/* + * Address Mode + */ +#define PPC_BREAKPOINT_MODE_EXACT		0x00000000 +#define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE	0x00000001 +#define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE	0x00000002 +#define PPC_BREAKPOINT_MODE_MASK		0x00000003 + +/* + * Condition Mode + */ +#define PPC_BREAKPOINT_CONDITION_MODE	0x00000003 +#define PPC_BREAKPOINT_CONDITION_NONE	0x00000000 +#define PPC_BREAKPOINT_CONDITION_AND	0x00000001 +#define PPC_BREAKPOINT_CONDITION_EXACT	PPC_BREAKPOINT_CONDITION_AND +#define PPC_BREAKPOINT_CONDITION_OR	0x00000002 +#define PPC_BREAKPOINT_CONDITION_AND_OR	0x00000003 +#define PPC_BREAKPOINT_CONDITION_BE_ALL	0x00ff0000 +#define PPC_BREAKPOINT_CONDITION_BE_SHIFT	16 +#define PPC_BREAKPOINT_CONDITION_BE(n)	\ +	(1<<((n)+PPC_BREAKPOINT_CONDITION_BE_SHIFT)) + +#endif /* _UAPI_ASM_POWERPC_PTRACE_H */ diff --git a/arch/powerpc/include/uapi/asm/resource.h b/arch/powerpc/include/uapi/asm/resource.h new file mode 100644 index 00000000000..04bc4db8921 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/resource.h @@ -0,0 +1 @@ +#include <asm-generic/resource.h> diff --git a/arch/powerpc/include/uapi/asm/seccomp.h b/arch/powerpc/include/uapi/asm/seccomp.h new file mode 100644 index 00000000000..00c1d9133cf --- /dev/null +++ b/arch/powerpc/include/uapi/asm/seccomp.h @@ -0,0 +1,16 @@ +#ifndef _ASM_POWERPC_SECCOMP_H +#define _ASM_POWERPC_SECCOMP_H + +#include <linux/unistd.h> + +#define __NR_seccomp_read __NR_read +#define __NR_seccomp_write __NR_write +#define __NR_seccomp_exit __NR_exit +#define __NR_seccomp_sigreturn __NR_rt_sigreturn + +#define __NR_seccomp_read_32 __NR_read +#define __NR_seccomp_write_32 __NR_write +#define __NR_seccomp_exit_32 __NR_exit +#define __NR_seccomp_sigreturn_32 __NR_sigreturn + +#endif	/* _ASM_POWERPC_SECCOMP_H */ diff --git a/arch/powerpc/include/uapi/asm/sembuf.h b/arch/powerpc/include/uapi/asm/sembuf.h new file mode 100644 index 00000000000..99a41938ae3 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/sembuf.h @@ -0,0 +1,36 @@ +#ifndef _ASM_POWERPC_SEMBUF_H +#define _ASM_POWERPC_SEMBUF_H + +/* + * 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. + */ + +/* + * The semid64_ds structure for PPC architecture. + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * Pad space is left for: + * - 64-bit time_t to solve y2038 problem + * - 2 miscellaneous 32-bit values + */ + +struct semid64_ds { +	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */ +#ifndef __powerpc64__ +	unsigned long	__unused1; +#endif +	__kernel_time_t	sem_otime;	/* last semop time */ +#ifndef __powerpc64__ +	unsigned long	__unused2; +#endif +	__kernel_time_t	sem_ctime;	/* last change time */ +	unsigned long	sem_nsems;	/* no. of semaphores in array */ +	unsigned long	__unused3; +	unsigned long	__unused4; +}; + +#endif	/* _ASM_POWERPC_SEMBUF_H */ diff --git a/arch/powerpc/include/uapi/asm/setup.h b/arch/powerpc/include/uapi/asm/setup.h new file mode 100644 index 00000000000..ae3fb68cb28 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/setup.h @@ -0,0 +1,6 @@ +#ifndef _UAPI_ASM_POWERPC_SETUP_H +#define _UAPI_ASM_POWERPC_SETUP_H + +#define COMMAND_LINE_SIZE	2048 + +#endif /* _UAPI_ASM_POWERPC_SETUP_H */ diff --git a/arch/powerpc/include/uapi/asm/shmbuf.h b/arch/powerpc/include/uapi/asm/shmbuf.h new file mode 100644 index 00000000000..8efa39698b6 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/shmbuf.h @@ -0,0 +1,59 @@ +#ifndef _ASM_POWERPC_SHMBUF_H +#define _ASM_POWERPC_SHMBUF_H + +/* + * 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. + */ + +/* + * The shmid64_ds structure for PPC architecture. + * + * Note extra padding because this structure is passed back and forth + * between kernel and user space. + * + * Pad space is left for: + * - 64-bit time_t to solve y2038 problem + * - 2 miscellaneous 32-bit values + */ + +struct shmid64_ds { +	struct ipc64_perm	shm_perm;	/* operation perms */ +#ifndef __powerpc64__ +	unsigned long		__unused1; +#endif +	__kernel_time_t		shm_atime;	/* last attach time */ +#ifndef __powerpc64__ +	unsigned long		__unused2; +#endif +	__kernel_time_t		shm_dtime;	/* last detach time */ +#ifndef __powerpc64__ +	unsigned long		__unused3; +#endif +	__kernel_time_t		shm_ctime;	/* last change time */ +#ifndef __powerpc64__ +	unsigned long		__unused4; +#endif +	size_t			shm_segsz;	/* size of segment (bytes) */ +	__kernel_pid_t		shm_cpid;	/* pid of creator */ +	__kernel_pid_t		shm_lpid;	/* pid of last operator */ +	unsigned long		shm_nattch;	/* no. of current attaches */ +	unsigned long		__unused5; +	unsigned long		__unused6; +}; + +struct shminfo64 { +	unsigned long	shmmax; +	unsigned long	shmmin; +	unsigned long	shmmni; +	unsigned long	shmseg; +	unsigned long	shmall; +	unsigned long	__unused1; +	unsigned long	__unused2; +	unsigned long	__unused3; +	unsigned long	__unused4; +}; + +#endif	/* _ASM_POWERPC_SHMBUF_H */ diff --git a/arch/powerpc/include/uapi/asm/sigcontext.h b/arch/powerpc/include/uapi/asm/sigcontext.h new file mode 100644 index 00000000000..9c1f24fd5d1 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/sigcontext.h @@ -0,0 +1,87 @@ +#ifndef _ASM_POWERPC_SIGCONTEXT_H +#define _ASM_POWERPC_SIGCONTEXT_H + +/* + * 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/compiler.h> +#include <asm/ptrace.h> +#ifdef __powerpc64__ +#include <asm/elf.h> +#endif + +struct sigcontext { +	unsigned long	_unused[4]; +	int		signal; +#ifdef __powerpc64__ +	int		_pad0; +#endif +	unsigned long	handler; +	unsigned long	oldmask; +	struct pt_regs	__user *regs; +#ifdef __powerpc64__ +	elf_gregset_t	gp_regs; +	elf_fpregset_t	fp_regs; +/* + * To maintain compatibility with current implementations the sigcontext is + * extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t) + * followed by an unstructured (vmx_reserve) field of 69 doublewords.  This + * allows the array of vector registers to be quadword aligned independent of + * the alignment of the containing sigcontext or ucontext. It is the + * responsibility of the code setting the sigcontext to set this pointer to + * either NULL (if this processor does not support the VMX feature) or the + * address of the first quadword within the allocated (vmx_reserve) area. + * + * The pointer (v_regs) of vector type (elf_vrreg_t) is type compatible with + * an array of 34 quadword entries (elf_vrregset_t).  The entries with + * indexes 0-31 contain the corresponding vector registers.  The entry with + * index 32 contains the vscr as the last word (offset 12) within the + * quadword.  This allows the vscr to be stored as either a quadword (since + * it must be copied via a vector register to/from storage) or as a word. + * The entry with index 33 contains the vrsave as the first word (offset 0) + * within the quadword. + * + * Part of the VSX data is stored here also by extending vmx_restore + * by an additional 32 double words.  Architecturally the layout of + * the VSR registers and how they overlap on top of the legacy FPR and + * VR registers is shown below: + * + *                    VSR doubleword 0               VSR doubleword 1 + *           ---------------------------------------------------------------- + *   VSR[0]  |             FPR[0]            |                              | + *           ---------------------------------------------------------------- + *   VSR[1]  |             FPR[1]            |                              | + *           ---------------------------------------------------------------- + *           |              ...              |                              | + *           |              ...              |                              | + *           ---------------------------------------------------------------- + *   VSR[30] |             FPR[30]           |                              | + *           ---------------------------------------------------------------- + *   VSR[31] |             FPR[31]           |                              | + *           ---------------------------------------------------------------- + *   VSR[32] |                             VR[0]                            | + *           ---------------------------------------------------------------- + *   VSR[33] |                             VR[1]                            | + *           ---------------------------------------------------------------- + *           |                              ...                             | + *           |                              ...                             | + *           ---------------------------------------------------------------- + *   VSR[62] |                             VR[30]                           | + *           ---------------------------------------------------------------- + *   VSR[63] |                             VR[31]                           | + *           ---------------------------------------------------------------- + * + * FPR/VSR 0-31 doubleword 0 is stored in fp_regs, and VMX/VSR 32-63 + * is stored at the start of vmx_reserve.  vmx_reserve is extended for + * backwards compatility to store VSR 0-31 doubleword 1 after the VMX + * registers and vscr/vrsave. + */ +	elf_vrreg_t	__user *v_regs; +	long		vmx_reserve[ELF_NVRREG+ELF_NVRREG+32+1]; +#endif +}; + +#endif /* _ASM_POWERPC_SIGCONTEXT_H */ diff --git a/arch/powerpc/include/uapi/asm/siginfo.h b/arch/powerpc/include/uapi/asm/siginfo.h new file mode 100644 index 00000000000..ccce3ef5cd8 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/siginfo.h @@ -0,0 +1,20 @@ +#ifndef _ASM_POWERPC_SIGINFO_H +#define _ASM_POWERPC_SIGINFO_H + +/* + * 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. + */ + +#ifdef __powerpc64__ +#    define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int)) +#endif + +#include <asm-generic/siginfo.h> + +#undef NSIGTRAP +#define NSIGTRAP	4 + +#endif	/* _ASM_POWERPC_SIGINFO_H */ diff --git a/arch/powerpc/include/uapi/asm/signal.h b/arch/powerpc/include/uapi/asm/signal.h new file mode 100644 index 00000000000..6c69ee94fd8 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/signal.h @@ -0,0 +1,137 @@ +#ifndef _UAPI_ASM_POWERPC_SIGNAL_H +#define _UAPI_ASM_POWERPC_SIGNAL_H + +#include <linux/types.h> + +#define _NSIG		64 +#ifdef __powerpc64__ +#define _NSIG_BPW	64 +#else +#define _NSIG_BPW	32 +#endif +#define _NSIG_WORDS	(_NSIG / _NSIG_BPW) + +typedef unsigned long old_sigset_t;		/* at least 32 bits */ + +typedef struct { +	unsigned long sig[_NSIG_WORDS]; +} sigset_t; + +#define SIGHUP		 1 +#define SIGINT		 2 +#define SIGQUIT		 3 +#define SIGILL		 4 +#define SIGTRAP		 5 +#define SIGABRT		 6 +#define SIGIOT		 6 +#define SIGBUS		 7 +#define SIGFPE		 8 +#define SIGKILL		 9 +#define SIGUSR1		10 +#define SIGSEGV		11 +#define SIGUSR2		12 +#define SIGPIPE		13 +#define SIGALRM		14 +#define SIGTERM		15 +#define SIGSTKFLT	16 +#define SIGCHLD		17 +#define SIGCONT		18 +#define SIGSTOP		19 +#define SIGTSTP		20 +#define SIGTTIN		21 +#define SIGTTOU		22 +#define SIGURG		23 +#define SIGXCPU		24 +#define SIGXFSZ		25 +#define SIGVTALRM	26 +#define SIGPROF		27 +#define SIGWINCH	28 +#define SIGIO		29 +#define SIGPOLL		SIGIO +/* +#define SIGLOST		29 +*/ +#define SIGPWR		30 +#define SIGSYS		31 +#define	SIGUNUSED	31 + +/* These should not be considered constants from userland.  */ +#define SIGRTMIN	32 +#define SIGRTMAX	_NSIG + +/* + * SA_FLAGS values: + * + * SA_ONSTACK is not currently supported, but will allow sigaltstack(2). + * SA_RESTART flag to get restarting signals (which were the default long ago) + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. + * SA_RESETHAND clears the handler when the signal is delivered. + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies. + * SA_NODEFER prevents the current signal from being masked in the handler. + * + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single + * Unix names RESETHAND and NODEFER respectively. + */ +#define SA_NOCLDSTOP	0x00000001U +#define SA_NOCLDWAIT	0x00000002U +#define SA_SIGINFO	0x00000004U +#define SA_ONSTACK	0x08000000U +#define SA_RESTART	0x10000000U +#define SA_NODEFER	0x40000000U +#define SA_RESETHAND	0x80000000U + +#define SA_NOMASK	SA_NODEFER +#define SA_ONESHOT	SA_RESETHAND + +#define SA_RESTORER	0x04000000U + +#define MINSIGSTKSZ	2048 +#define SIGSTKSZ	8192 + +#include <asm-generic/signal-defs.h> + +#ifndef __KERNEL__ +struct old_sigaction { +	__sighandler_t sa_handler; +	old_sigset_t sa_mask; +	unsigned long sa_flags; +	__sigrestore_t sa_restorer; +}; + +struct sigaction { +	__sighandler_t sa_handler; +	unsigned long sa_flags; +	__sigrestore_t sa_restorer; +	sigset_t sa_mask;		/* mask last for extensibility */ +}; +#endif + +typedef struct sigaltstack { +	void __user *ss_sp; +	int ss_flags; +	size_t ss_size; +} stack_t; + + +#ifndef __powerpc64__ +/* + * These are parameters to dbg_sigreturn syscall.  They enable or + * disable certain debugging things that can be done from signal + * handlers.  The dbg_sigreturn syscall *must* be called from a + * SA_SIGINFO signal so the ucontext can be passed to it.  It takes an + * array of struct sig_dbg_op, which has the debug operations to + * perform before returning from the signal. + */ +struct sig_dbg_op { +	int dbg_type; +	unsigned long dbg_value; +}; + +/* Enable or disable single-stepping.  The value sets the state. */ +#define SIG_DBG_SINGLE_STEPPING		1 + +/* Enable or disable branch tracing.  The value sets the state. */ +#define SIG_DBG_BRANCH_TRACING		2 +#endif /* ! __powerpc64__ */ + +#endif /* _UAPI_ASM_POWERPC_SIGNAL_H */ diff --git a/arch/powerpc/include/uapi/asm/socket.h b/arch/powerpc/include/uapi/asm/socket.h new file mode 100644 index 00000000000..a9c3e2e18c0 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/socket.h @@ -0,0 +1,90 @@ +#ifndef _ASM_POWERPC_SOCKET_H +#define _ASM_POWERPC_SOCKET_H + +/* + * 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 <asm/sockios.h> + +/* For setsockopt(2) */ +#define SOL_SOCKET	1 + +#define SO_DEBUG	1 +#define SO_REUSEADDR	2 +#define SO_TYPE		3 +#define SO_ERROR	4 +#define SO_DONTROUTE	5 +#define SO_BROADCAST	6 +#define SO_SNDBUF	7 +#define SO_RCVBUF	8 +#define SO_SNDBUFFORCE	32 +#define SO_RCVBUFFORCE	33 +#define SO_KEEPALIVE	9 +#define SO_OOBINLINE	10 +#define SO_NO_CHECK	11 +#define SO_PRIORITY	12 +#define SO_LINGER	13 +#define SO_BSDCOMPAT	14 +#define SO_REUSEPORT	15 +#define SO_RCVLOWAT	16 +#define SO_SNDLOWAT	17 +#define SO_RCVTIMEO	18 +#define SO_SNDTIMEO	19 +#define SO_PASSCRED	20 +#define SO_PEERCRED	21 + +/* Security levels - as per NRL IPv6 - don't actually do anything */ +#define SO_SECURITY_AUTHENTICATION		22 +#define SO_SECURITY_ENCRYPTION_TRANSPORT	23 +#define SO_SECURITY_ENCRYPTION_NETWORK		24 + +#define SO_BINDTODEVICE	25 + +/* Socket filtering */ +#define SO_ATTACH_FILTER	26 +#define SO_DETACH_FILTER	27 +#define SO_GET_FILTER		SO_ATTACH_FILTER + +#define SO_PEERNAME		28 +#define SO_TIMESTAMP		29 +#define SCM_TIMESTAMP		SO_TIMESTAMP + +#define SO_ACCEPTCONN		30 + +#define SO_PEERSEC		31 +#define SO_PASSSEC		34 +#define SO_TIMESTAMPNS		35 +#define SCM_TIMESTAMPNS		SO_TIMESTAMPNS + +#define SO_MARK			36 + +#define SO_TIMESTAMPING		37 +#define SCM_TIMESTAMPING	SO_TIMESTAMPING + +#define SO_PROTOCOL		38 +#define SO_DOMAIN		39 + +#define SO_RXQ_OVFL             40 + +#define SO_WIFI_STATUS		41 +#define SCM_WIFI_STATUS		SO_WIFI_STATUS +#define SO_PEEK_OFF		42 + +/* Instruct lower device to use last 4-bytes of skb data as FCS */ +#define SO_NOFCS		43 + +#define SO_LOCK_FILTER		44 + +#define SO_SELECT_ERR_QUEUE	45 + +#define SO_BUSY_POLL		46 + +#define SO_MAX_PACING_RATE	47 + +#define SO_BPF_EXTENSIONS	48 + +#endif	/* _ASM_POWERPC_SOCKET_H */ diff --git a/arch/powerpc/include/uapi/asm/sockios.h b/arch/powerpc/include/uapi/asm/sockios.h new file mode 100644 index 00000000000..55cef7675a3 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/sockios.h @@ -0,0 +1,20 @@ +#ifndef _ASM_POWERPC_SOCKIOS_H +#define _ASM_POWERPC_SOCKIOS_H + +/* + * 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. + */ + +/* Socket-level I/O control calls. */ +#define FIOSETOWN 	0x8901 +#define SIOCSPGRP	0x8902 +#define FIOGETOWN	0x8903 +#define SIOCGPGRP	0x8904 +#define SIOCATMARK	0x8905 +#define SIOCGSTAMP	0x8906		/* Get stamp (timeval) */ +#define SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */ + +#endif	/* _ASM_POWERPC_SOCKIOS_H */ diff --git a/arch/powerpc/include/uapi/asm/spu_info.h b/arch/powerpc/include/uapi/asm/spu_info.h new file mode 100644 index 00000000000..ed071bf9770 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/spu_info.h @@ -0,0 +1,53 @@ +/* + * SPU info structures + * + * (C) Copyright 2006 IBM Corp. + * + * Author: Dwayne Grant McConnell <decimal@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, or (at your option) + * any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef _UAPI_SPU_INFO_H +#define _UAPI_SPU_INFO_H + +#include <linux/types.h> + +#ifndef __KERNEL__ +struct mfc_cq_sr { +	__u64 mfc_cq_data0_RW; +	__u64 mfc_cq_data1_RW; +	__u64 mfc_cq_data2_RW; +	__u64 mfc_cq_data3_RW; +}; +#endif /* __KERNEL__ */ + +struct spu_dma_info { +	__u64 dma_info_type; +	__u64 dma_info_mask; +	__u64 dma_info_status; +	__u64 dma_info_stall_and_notify; +	__u64 dma_info_atomic_command_status; +	struct mfc_cq_sr dma_info_command_data[16]; +}; + +struct spu_proxydma_info { +	__u64 proxydma_info_type; +	__u64 proxydma_info_mask; +	__u64 proxydma_info_status; +	struct mfc_cq_sr proxydma_info_command_data[8]; +}; + +#endif /* _UAPI_SPU_INFO_H */ diff --git a/arch/powerpc/include/uapi/asm/stat.h b/arch/powerpc/include/uapi/asm/stat.h new file mode 100644 index 00000000000..84880b80cc1 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/stat.h @@ -0,0 +1,81 @@ +#ifndef _ASM_POWERPC_STAT_H +#define _ASM_POWERPC_STAT_H +/* + * 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/types.h> + +#define STAT_HAVE_NSEC 1 + +#ifndef __powerpc64__ +struct __old_kernel_stat { +	unsigned short st_dev; +	unsigned short st_ino; +	unsigned short st_mode; +	unsigned short st_nlink; +	unsigned short st_uid; +	unsigned short st_gid; +	unsigned short st_rdev; +	unsigned long  st_size; +	unsigned long  st_atime; +	unsigned long  st_mtime; +	unsigned long  st_ctime; +}; +#endif /* !__powerpc64__ */ + +struct stat { +	unsigned long	st_dev; +	ino_t		st_ino; +#ifdef __powerpc64__ +	unsigned long	st_nlink; +	mode_t		st_mode; +#else +	mode_t		st_mode; +	unsigned short	st_nlink; +#endif +	uid_t		st_uid; +	gid_t		st_gid; +	unsigned long	st_rdev; +	off_t		st_size; +	unsigned long	st_blksize; +	unsigned long	st_blocks; +	unsigned long	st_atime; +	unsigned long	st_atime_nsec; +	unsigned long	st_mtime; +	unsigned long	st_mtime_nsec; +	unsigned long	st_ctime; +	unsigned long	st_ctime_nsec; +	unsigned long	__unused4; +	unsigned long	__unused5; +#ifdef __powerpc64__ +	unsigned long	__unused6; +#endif +}; + +/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */ +struct stat64 { +	unsigned long long st_dev;		/* Device.  */ +	unsigned long long st_ino;		/* File serial number.  */ +	unsigned int	st_mode;	/* File mode.  */ +	unsigned int	st_nlink;	/* Link count.  */ +	unsigned int	st_uid;		/* User ID of the file's owner.  */ +	unsigned int	st_gid;		/* Group ID of the file's group. */ +	unsigned long long st_rdev;	/* Device number, if device.  */ +	unsigned short	__pad2; +	long long	st_size;	/* Size of file, in bytes.  */ +	int		st_blksize;	/* Optimal block size for I/O.  */ +	long long	st_blocks;	/* Number 512-byte blocks allocated. */ +	int		st_atime;	/* Time of last access.  */ +	unsigned int	st_atime_nsec; +	int		st_mtime;	/* Time of last modification.  */ +	unsigned int	st_mtime_nsec; +	int		st_ctime;	/* Time of last status change.  */ +	unsigned int	st_ctime_nsec; +	unsigned int	__unused4; +	unsigned int	__unused5; +}; + +#endif /* _ASM_POWERPC_STAT_H */ diff --git a/arch/powerpc/include/uapi/asm/statfs.h b/arch/powerpc/include/uapi/asm/statfs.h new file mode 100644 index 00000000000..5244834583a --- /dev/null +++ b/arch/powerpc/include/uapi/asm/statfs.h @@ -0,0 +1,6 @@ +#ifndef _ASM_POWERPC_STATFS_H +#define _ASM_POWERPC_STATFS_H + +#include <asm-generic/statfs.h> + +#endif diff --git a/arch/powerpc/include/uapi/asm/swab.h b/arch/powerpc/include/uapi/asm/swab.h new file mode 100644 index 00000000000..b6c368aa5c0 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/swab.h @@ -0,0 +1,23 @@ +/* + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_SWAB_H +#define _UAPI_ASM_POWERPC_SWAB_H + + +#include <linux/types.h> +#include <linux/compiler.h> + +#ifdef __GNUC__ + +#ifndef __powerpc64__ +#define __SWAB_64_THRU_32__ +#endif /* __powerpc64__ */ + + +#endif /* __GNUC__ */ + +#endif /* _UAPI_ASM_POWERPC_SWAB_H */ diff --git a/arch/powerpc/include/uapi/asm/termbits.h b/arch/powerpc/include/uapi/asm/termbits.h new file mode 100644 index 00000000000..549d700e18f --- /dev/null +++ b/arch/powerpc/include/uapi/asm/termbits.h @@ -0,0 +1,210 @@ +#ifndef _ASM_POWERPC_TERMBITS_H +#define _ASM_POWERPC_TERMBITS_H + +/* + * 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. + */ + +typedef unsigned char	cc_t; +typedef unsigned int	speed_t; +typedef unsigned int	tcflag_t; + +/* + * termios type and macro definitions.  Be careful about adding stuff + * to this file since it's used in GNU libc and there are strict rules + * concerning namespace pollution. + */ + +#define NCCS 19 +struct termios { +	tcflag_t c_iflag;		/* input mode flags */ +	tcflag_t c_oflag;		/* output mode flags */ +	tcflag_t c_cflag;		/* control mode flags */ +	tcflag_t c_lflag;		/* local mode flags */ +	cc_t c_cc[NCCS];		/* control characters */ +	cc_t c_line;			/* line discipline (== c_cc[19]) */ +	speed_t c_ispeed;		/* input speed */ +	speed_t c_ospeed;		/* output speed */ +}; + +/* For PowerPC the termios and ktermios are the same */ + +struct ktermios { +	tcflag_t c_iflag;		/* input mode flags */ +	tcflag_t c_oflag;		/* output mode flags */ +	tcflag_t c_cflag;		/* control mode flags */ +	tcflag_t c_lflag;		/* local mode flags */ +	cc_t c_cc[NCCS];		/* control characters */ +	cc_t c_line;			/* line discipline (== c_cc[19]) */ +	speed_t c_ispeed;		/* input speed */ +	speed_t c_ospeed;		/* output speed */ +}; + +/* c_cc characters */ +#define VINTR 	         0 +#define VQUIT 	         1 +#define VERASE 	         2 +#define VKILL	         3 +#define VEOF	         4 +#define VMIN	         5 +#define VEOL	         6 +#define VTIME	         7 +#define VEOL2	         8 +#define VSWTC	         9 +#define VWERASE 	10 +#define VREPRINT	11 +#define VSUSP 		12 +#define VSTART		13 +#define VSTOP		14 +#define VLNEXT		15 +#define VDISCARD	16 + +/* c_iflag bits */ +#define IGNBRK	0000001 +#define BRKINT	0000002 +#define IGNPAR	0000004 +#define PARMRK	0000010 +#define INPCK	0000020 +#define ISTRIP	0000040 +#define INLCR	0000100 +#define IGNCR	0000200 +#define ICRNL	0000400 +#define IXON	0001000 +#define IXOFF	0002000 +#define IXANY	0004000 +#define IUCLC	0010000 +#define IMAXBEL	0020000 +#define	IUTF8	0040000 + +/* c_oflag bits */ +#define OPOST	0000001 +#define ONLCR	0000002 +#define OLCUC	0000004 + +#define OCRNL	0000010 +#define ONOCR	0000020 +#define ONLRET	0000040 + +#define OFILL	00000100 +#define OFDEL	00000200 +#define NLDLY	00001400 +#define   NL0	00000000 +#define   NL1	00000400 +#define   NL2	00001000 +#define   NL3	00001400 +#define TABDLY	00006000 +#define   TAB0	00000000 +#define   TAB1	00002000 +#define   TAB2	00004000 +#define   TAB3	00006000 +#define   XTABS	00006000	/* required by POSIX to == TAB3 */ +#define CRDLY	00030000 +#define   CR0	00000000 +#define   CR1	00010000 +#define   CR2	00020000 +#define   CR3	00030000 +#define FFDLY	00040000 +#define   FF0	00000000 +#define   FF1	00040000 +#define BSDLY	00100000 +#define   BS0	00000000 +#define   BS1	00100000 +#define VTDLY	00200000 +#define   VT0	00000000 +#define   VT1	00200000 + +/* c_cflag bit meaning */ +#define CBAUD	0000377 +#define  B0	0000000		/* hang up */ +#define  B50	0000001 +#define  B75	0000002 +#define  B110	0000003 +#define  B134	0000004 +#define  B150	0000005 +#define  B200	0000006 +#define  B300	0000007 +#define  B600	0000010 +#define  B1200	0000011 +#define  B1800	0000012 +#define  B2400	0000013 +#define  B4800	0000014 +#define  B9600	0000015 +#define  B19200	0000016 +#define  B38400	0000017 +#define  EXTA   B19200 +#define  EXTB   B38400 +#define  CBAUDEX 0000000 +#define  B57600   00020 +#define  B115200  00021 +#define  B230400  00022 +#define  B460800  00023 +#define  B500000  00024 +#define  B576000  00025 +#define  B921600  00026 +#define B1000000  00027 +#define B1152000  00030 +#define B1500000  00031 +#define B2000000  00032 +#define B2500000  00033 +#define B3000000  00034 +#define B3500000  00035 +#define B4000000  00036 +#define   BOTHER  00037 + +#define CIBAUD	077600000 +#define IBSHIFT	16		/* Shift from CBAUD to CIBAUD */ + +#define CSIZE	00001400 +#define   CS5	00000000 +#define   CS6	00000400 +#define   CS7	00001000 +#define   CS8	00001400 + +#define CSTOPB	00002000 +#define CREAD	00004000 +#define PARENB	00010000 +#define PARODD	00020000 +#define HUPCL	00040000 + +#define CLOCAL	00100000 +#define CMSPAR	  010000000000		/* mark or space (stick) parity */ +#define CRTSCTS	  020000000000		/* flow control */ + +/* c_lflag bits */ +#define ISIG	0x00000080 +#define ICANON	0x00000100 +#define XCASE	0x00004000 +#define ECHO	0x00000008 +#define ECHOE	0x00000002 +#define ECHOK	0x00000004 +#define ECHONL	0x00000010 +#define NOFLSH	0x80000000 +#define TOSTOP	0x00400000 +#define ECHOCTL	0x00000040 +#define ECHOPRT	0x00000020 +#define ECHOKE	0x00000001 +#define FLUSHO	0x00800000 +#define PENDIN	0x20000000 +#define IEXTEN	0x00000400 +#define EXTPROC	0x10000000 + +/* Values for the ACTION argument to `tcflow'.  */ +#define	TCOOFF		0 +#define	TCOON		1 +#define	TCIOFF		2 +#define	TCION		3 + +/* Values for the QUEUE_SELECTOR argument to `tcflush'.  */ +#define	TCIFLUSH	0 +#define	TCOFLUSH	1 +#define	TCIOFLUSH	2 + +/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'.  */ +#define	TCSANOW		0 +#define	TCSADRAIN	1 +#define	TCSAFLUSH	2 + +#endif	/* _ASM_POWERPC_TERMBITS_H */ diff --git a/arch/powerpc/include/uapi/asm/termios.h b/arch/powerpc/include/uapi/asm/termios.h new file mode 100644 index 00000000000..6cca5cdfec0 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/termios.h @@ -0,0 +1,76 @@ +/* + * Liberally adapted from alpha/termios.h.  In particular, the c_cc[] + * fields have been reordered so that termio & termios share the + * common subset in the same order (for brain dead programs that don't + * know or care about the differences). + * + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_TERMIOS_H +#define _UAPI_ASM_POWERPC_TERMIOS_H + + +#include <asm/ioctls.h> +#include <asm/termbits.h> + +struct sgttyb { +	char	sg_ispeed; +	char	sg_ospeed; +	char	sg_erase; +	char	sg_kill; +	short	sg_flags; +}; + +struct tchars { +	char	t_intrc; +	char	t_quitc; +	char	t_startc; +	char	t_stopc; +	char	t_eofc; +	char	t_brkc; +}; + +struct ltchars { +	char	t_suspc; +	char	t_dsuspc; +	char	t_rprntc; +	char	t_flushc; +	char	t_werasc; +	char	t_lnextc; +}; + +struct winsize { +	unsigned short ws_row; +	unsigned short ws_col; +	unsigned short ws_xpixel; +	unsigned short ws_ypixel; +}; + +#define NCC 10 +struct termio { +	unsigned short c_iflag;		/* input mode flags */ +	unsigned short c_oflag;		/* output mode flags */ +	unsigned short c_cflag;		/* control mode flags */ +	unsigned short c_lflag;		/* local mode flags */ +	unsigned char c_line;		/* line discipline */ +	unsigned char c_cc[NCC];	/* control characters */ +}; + +/* c_cc characters */ +#define _VINTR	0 +#define _VQUIT	1 +#define _VERASE	2 +#define _VKILL	3 +#define _VEOF	4 +#define _VMIN	5 +#define _VEOL	6 +#define _VTIME	7 +#define _VEOL2	8 +#define _VSWTC	9 + + + +#endif /* _UAPI_ASM_POWERPC_TERMIOS_H */ diff --git a/arch/powerpc/include/uapi/asm/tm.h b/arch/powerpc/include/uapi/asm/tm.h new file mode 100644 index 00000000000..5d836b7c117 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/tm.h @@ -0,0 +1,20 @@ +#ifndef _ASM_POWERPC_TM_H +#define _ASM_POWERPC_TM_H + +/* Reason codes describing kernel causes for transaction aborts.  By + * convention, bit0 is copied to TEXASR[56] (IBM bit 7) which is set if + * the failure is persistent.  PAPR saves 0xff-0xe0 for the hypervisor. + */ +#define TM_CAUSE_PERSISTENT	0x01 +#define TM_CAUSE_KVM_RESCHED	0xe0  /* From PAPR */ +#define TM_CAUSE_KVM_FAC_UNAV	0xe2  /* From PAPR */ +#define TM_CAUSE_RESCHED	0xde +#define TM_CAUSE_TLBI		0xdc +#define TM_CAUSE_FAC_UNAV	0xda +#define TM_CAUSE_SYSCALL	0xd8  /* future use */ +#define TM_CAUSE_MISC		0xd6  /* future use */ +#define TM_CAUSE_SIGNAL		0xd4 +#define TM_CAUSE_ALIGNMENT	0xd2 +#define TM_CAUSE_EMULATE	0xd0 + +#endif diff --git a/arch/powerpc/include/uapi/asm/types.h b/arch/powerpc/include/uapi/asm/types.h new file mode 100644 index 00000000000..4b8ab990a3c --- /dev/null +++ b/arch/powerpc/include/uapi/asm/types.h @@ -0,0 +1,40 @@ +/* + * This file is never included by application software unless + * explicitly requested (e.g., via linux/types.h) in which case the + * application is Linux specific so (user-) name space pollution is + * not a major issue.  However, for interoperability, libraries still + * need to be careful to avoid a name clashes. + * + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_TYPES_H +#define _UAPI_ASM_POWERPC_TYPES_H + +/* + * This is here because we used to use l64 for 64bit powerpc + * and we don't want to impact user mode with our change to ll64 + * in the kernel. + * + * However, some user programs are fine with this.  They can + * flag __SANE_USERSPACE_TYPES__ to get int-ll64.h here. + */ +#if !defined(__SANE_USERSPACE_TYPES__) && defined(__powerpc64__) && !defined(__KERNEL__) +# include <asm-generic/int-l64.h> +#else +# include <asm-generic/int-ll64.h> +#endif + +#ifndef __ASSEMBLY__ + + +typedef struct { +	__u32 u[4]; +} __attribute__((aligned(16))) __vector128; + +#endif /* __ASSEMBLY__ */ + + +#endif /* _UAPI_ASM_POWERPC_TYPES_H */ diff --git a/arch/powerpc/include/uapi/asm/ucontext.h b/arch/powerpc/include/uapi/asm/ucontext.h new file mode 100644 index 00000000000..d9a4ddf0cc8 --- /dev/null +++ b/arch/powerpc/include/uapi/asm/ucontext.h @@ -0,0 +1,40 @@ +#ifndef _ASM_POWERPC_UCONTEXT_H +#define _ASM_POWERPC_UCONTEXT_H + +#ifdef __powerpc64__ +#include <asm/sigcontext.h> +#else +#include <asm/elf.h> +#endif +#include <asm/signal.h> + +#ifndef __powerpc64__ +struct mcontext { +	elf_gregset_t	mc_gregs; +	elf_fpregset_t	mc_fregs; +	unsigned long	mc_pad[2]; +	elf_vrregset_t	mc_vregs __attribute__((__aligned__(16))); +}; +#endif + +struct ucontext { +	unsigned long	uc_flags; +	struct ucontext __user *uc_link; +	stack_t		uc_stack; +#ifndef __powerpc64__ +	int		uc_pad[7]; +	struct mcontext	__user *uc_regs;/* points to uc_mcontext field */ +#endif +	sigset_t	uc_sigmask; +	/* glibc has 1024-bit signal masks, ours are 64-bit */ +#ifdef __powerpc64__ +	sigset_t	__unused[15];	/* Allow for uc_sigmask growth */ +	struct sigcontext uc_mcontext;	/* last for extensibility */ +#else +	int		uc_maskext[30]; +	int		uc_pad2[3]; +	struct mcontext	uc_mcontext; +#endif +}; + +#endif /* _ASM_POWERPC_UCONTEXT_H */ diff --git a/arch/powerpc/include/uapi/asm/unistd.h b/arch/powerpc/include/uapi/asm/unistd.h new file mode 100644 index 00000000000..2d526f7b48d --- /dev/null +++ b/arch/powerpc/include/uapi/asm/unistd.h @@ -0,0 +1,384 @@ +/* + * This file contains the system call numbers. + * + * 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. + */ +#ifndef _UAPI_ASM_POWERPC_UNISTD_H_ +#define _UAPI_ASM_POWERPC_UNISTD_H_ + + +#define __NR_restart_syscall	  0 +#define __NR_exit		  1 +#define __NR_fork		  2 +#define __NR_read		  3 +#define __NR_write		  4 +#define __NR_open		  5 +#define __NR_close		  6 +#define __NR_waitpid		  7 +#define __NR_creat		  8 +#define __NR_link		  9 +#define __NR_unlink		 10 +#define __NR_execve		 11 +#define __NR_chdir		 12 +#define __NR_time		 13 +#define __NR_mknod		 14 +#define __NR_chmod		 15 +#define __NR_lchown		 16 +#define __NR_break		 17 +#define __NR_oldstat		 18 +#define __NR_lseek		 19 +#define __NR_getpid		 20 +#define __NR_mount		 21 +#define __NR_umount		 22 +#define __NR_setuid		 23 +#define __NR_getuid		 24 +#define __NR_stime		 25 +#define __NR_ptrace		 26 +#define __NR_alarm		 27 +#define __NR_oldfstat		 28 +#define __NR_pause		 29 +#define __NR_utime		 30 +#define __NR_stty		 31 +#define __NR_gtty		 32 +#define __NR_access		 33 +#define __NR_nice		 34 +#define __NR_ftime		 35 +#define __NR_sync		 36 +#define __NR_kill		 37 +#define __NR_rename		 38 +#define __NR_mkdir		 39 +#define __NR_rmdir		 40 +#define __NR_dup		 41 +#define __NR_pipe		 42 +#define __NR_times		 43 +#define __NR_prof		 44 +#define __NR_brk		 45 +#define __NR_setgid		 46 +#define __NR_getgid		 47 +#define __NR_signal		 48 +#define __NR_geteuid		 49 +#define __NR_getegid		 50 +#define __NR_acct		 51 +#define __NR_umount2		 52 +#define __NR_lock		 53 +#define __NR_ioctl		 54 +#define __NR_fcntl		 55 +#define __NR_mpx		 56 +#define __NR_setpgid		 57 +#define __NR_ulimit		 58 +#define __NR_oldolduname	 59 +#define __NR_umask		 60 +#define __NR_chroot		 61 +#define __NR_ustat		 62 +#define __NR_dup2		 63 +#define __NR_getppid		 64 +#define __NR_getpgrp		 65 +#define __NR_setsid		 66 +#define __NR_sigaction		 67 +#define __NR_sgetmask		 68 +#define __NR_ssetmask		 69 +#define __NR_setreuid		 70 +#define __NR_setregid		 71 +#define __NR_sigsuspend		 72 +#define __NR_sigpending		 73 +#define __NR_sethostname	 74 +#define __NR_setrlimit		 75 +#define __NR_getrlimit		 76 +#define __NR_getrusage		 77 +#define __NR_gettimeofday	 78 +#define __NR_settimeofday	 79 +#define __NR_getgroups		 80 +#define __NR_setgroups		 81 +#define __NR_select		 82 +#define __NR_symlink		 83 +#define __NR_oldlstat		 84 +#define __NR_readlink		 85 +#define __NR_uselib		 86 +#define __NR_swapon		 87 +#define __NR_reboot		 88 +#define __NR_readdir		 89 +#define __NR_mmap		 90 +#define __NR_munmap		 91 +#define __NR_truncate		 92 +#define __NR_ftruncate		 93 +#define __NR_fchmod		 94 +#define __NR_fchown		 95 +#define __NR_getpriority	 96 +#define __NR_setpriority	 97 +#define __NR_profil		 98 +#define __NR_statfs		 99 +#define __NR_fstatfs		100 +#define __NR_ioperm		101 +#define __NR_socketcall		102 +#define __NR_syslog		103 +#define __NR_setitimer		104 +#define __NR_getitimer		105 +#define __NR_stat		106 +#define __NR_lstat		107 +#define __NR_fstat		108 +#define __NR_olduname		109 +#define __NR_iopl		110 +#define __NR_vhangup		111 +#define __NR_idle		112 +#define __NR_vm86		113 +#define __NR_wait4		114 +#define __NR_swapoff		115 +#define __NR_sysinfo		116 +#define __NR_ipc		117 +#define __NR_fsync		118 +#define __NR_sigreturn		119 +#define __NR_clone		120 +#define __NR_setdomainname	121 +#define __NR_uname		122 +#define __NR_modify_ldt		123 +#define __NR_adjtimex		124 +#define __NR_mprotect		125 +#define __NR_sigprocmask	126 +#define __NR_create_module	127 +#define __NR_init_module	128 +#define __NR_delete_module	129 +#define __NR_get_kernel_syms	130 +#define __NR_quotactl		131 +#define __NR_getpgid		132 +#define __NR_fchdir		133 +#define __NR_bdflush		134 +#define __NR_sysfs		135 +#define __NR_personality	136 +#define __NR_afs_syscall	137 /* Syscall for Andrew File System */ +#define __NR_setfsuid		138 +#define __NR_setfsgid		139 +#define __NR__llseek		140 +#define __NR_getdents		141 +#define __NR__newselect		142 +#define __NR_flock		143 +#define __NR_msync		144 +#define __NR_readv		145 +#define __NR_writev		146 +#define __NR_getsid		147 +#define __NR_fdatasync		148 +#define __NR__sysctl		149 +#define __NR_mlock		150 +#define __NR_munlock		151 +#define __NR_mlockall		152 +#define __NR_munlockall		153 +#define __NR_sched_setparam		154 +#define __NR_sched_getparam		155 +#define __NR_sched_setscheduler		156 +#define __NR_sched_getscheduler		157 +#define __NR_sched_yield		158 +#define __NR_sched_get_priority_max	159 +#define __NR_sched_get_priority_min	160 +#define __NR_sched_rr_get_interval	161 +#define __NR_nanosleep		162 +#define __NR_mremap		163 +#define __NR_setresuid		164 +#define __NR_getresuid		165 +#define __NR_query_module	166 +#define __NR_poll		167 +#define __NR_nfsservctl		168 +#define __NR_setresgid		169 +#define __NR_getresgid		170 +#define __NR_prctl		171 +#define __NR_rt_sigreturn	172 +#define __NR_rt_sigaction	173 +#define __NR_rt_sigprocmask	174 +#define __NR_rt_sigpending	175 +#define __NR_rt_sigtimedwait	176 +#define __NR_rt_sigqueueinfo	177 +#define __NR_rt_sigsuspend	178 +#define __NR_pread64		179 +#define __NR_pwrite64		180 +#define __NR_chown		181 +#define __NR_getcwd		182 +#define __NR_capget		183 +#define __NR_capset		184 +#define __NR_sigaltstack	185 +#define __NR_sendfile		186 +#define __NR_getpmsg		187	/* some people actually want streams */ +#define __NR_putpmsg		188	/* some people actually want streams */ +#define __NR_vfork		189 +#define __NR_ugetrlimit		190	/* SuS compliant getrlimit */ +#define __NR_readahead		191 +#ifndef __powerpc64__			/* these are 32-bit only */ +#define __NR_mmap2		192 +#define __NR_truncate64		193 +#define __NR_ftruncate64	194 +#define __NR_stat64		195 +#define __NR_lstat64		196 +#define __NR_fstat64		197 +#endif +#define __NR_pciconfig_read	198 +#define __NR_pciconfig_write	199 +#define __NR_pciconfig_iobase	200 +#define __NR_multiplexer	201 +#define __NR_getdents64		202 +#define __NR_pivot_root		203 +#ifndef __powerpc64__ +#define __NR_fcntl64		204 +#endif +#define __NR_madvise		205 +#define __NR_mincore		206 +#define __NR_gettid		207 +#define __NR_tkill		208 +#define __NR_setxattr		209 +#define __NR_lsetxattr		210 +#define __NR_fsetxattr		211 +#define __NR_getxattr		212 +#define __NR_lgetxattr		213 +#define __NR_fgetxattr		214 +#define __NR_listxattr		215 +#define __NR_llistxattr		216 +#define __NR_flistxattr		217 +#define __NR_removexattr	218 +#define __NR_lremovexattr	219 +#define __NR_fremovexattr	220 +#define __NR_futex		221 +#define __NR_sched_setaffinity	222 +#define __NR_sched_getaffinity	223 +/* 224 currently unused */ +#define __NR_tuxcall		225 +#ifndef __powerpc64__ +#define __NR_sendfile64		226 +#endif +#define __NR_io_setup		227 +#define __NR_io_destroy		228 +#define __NR_io_getevents	229 +#define __NR_io_submit		230 +#define __NR_io_cancel		231 +#define __NR_set_tid_address	232 +#define __NR_fadvise64		233 +#define __NR_exit_group		234 +#define __NR_lookup_dcookie	235 +#define __NR_epoll_create	236 +#define __NR_epoll_ctl		237 +#define __NR_epoll_wait		238 +#define __NR_remap_file_pages	239 +#define __NR_timer_create	240 +#define __NR_timer_settime	241 +#define __NR_timer_gettime	242 +#define __NR_timer_getoverrun	243 +#define __NR_timer_delete	244 +#define __NR_clock_settime	245 +#define __NR_clock_gettime	246 +#define __NR_clock_getres	247 +#define __NR_clock_nanosleep	248 +#define __NR_swapcontext	249 +#define __NR_tgkill		250 +#define __NR_utimes		251 +#define __NR_statfs64		252 +#define __NR_fstatfs64		253 +#ifndef __powerpc64__ +#define __NR_fadvise64_64	254 +#endif +#define __NR_rtas		255 +#define __NR_sys_debug_setcontext 256 +/* Number 257 is reserved for vserver */ +#define __NR_migrate_pages	258 +#define __NR_mbind		259 +#define __NR_get_mempolicy	260 +#define __NR_set_mempolicy	261 +#define __NR_mq_open		262 +#define __NR_mq_unlink		263 +#define __NR_mq_timedsend	264 +#define __NR_mq_timedreceive	265 +#define __NR_mq_notify		266 +#define __NR_mq_getsetattr	267 +#define __NR_kexec_load		268 +#define __NR_add_key		269 +#define __NR_request_key	270 +#define __NR_keyctl		271 +#define __NR_waitid		272 +#define __NR_ioprio_set		273 +#define __NR_ioprio_get		274 +#define __NR_inotify_init	275 +#define __NR_inotify_add_watch	276 +#define __NR_inotify_rm_watch	277 +#define __NR_spu_run		278 +#define __NR_spu_create		279 +#define __NR_pselect6		280 +#define __NR_ppoll		281 +#define __NR_unshare		282 +#define __NR_splice		283 +#define __NR_tee		284 +#define __NR_vmsplice		285 +#define __NR_openat		286 +#define __NR_mkdirat		287 +#define __NR_mknodat		288 +#define __NR_fchownat		289 +#define __NR_futimesat		290 +#ifdef __powerpc64__ +#define __NR_newfstatat		291 +#else +#define __NR_fstatat64		291 +#endif +#define __NR_unlinkat		292 +#define __NR_renameat		293 +#define __NR_linkat		294 +#define __NR_symlinkat		295 +#define __NR_readlinkat		296 +#define __NR_fchmodat		297 +#define __NR_faccessat		298 +#define __NR_get_robust_list	299 +#define __NR_set_robust_list	300 +#define __NR_move_pages		301 +#define __NR_getcpu		302 +#define __NR_epoll_pwait	303 +#define __NR_utimensat		304 +#define __NR_signalfd		305 +#define __NR_timerfd_create	306 +#define __NR_eventfd		307 +#define __NR_sync_file_range2	308 +#define __NR_fallocate		309 +#define __NR_subpage_prot	310 +#define __NR_timerfd_settime	311 +#define __NR_timerfd_gettime	312 +#define __NR_signalfd4		313 +#define __NR_eventfd2		314 +#define __NR_epoll_create1	315 +#define __NR_dup3		316 +#define __NR_pipe2		317 +#define __NR_inotify_init1	318 +#define __NR_perf_event_open	319 +#define __NR_preadv		320 +#define __NR_pwritev		321 +#define __NR_rt_tgsigqueueinfo	322 +#define __NR_fanotify_init	323 +#define __NR_fanotify_mark	324 +#define __NR_prlimit64		325 +#define __NR_socket		326 +#define __NR_bind		327 +#define __NR_connect		328 +#define __NR_listen		329 +#define __NR_accept		330 +#define __NR_getsockname	331 +#define __NR_getpeername	332 +#define __NR_socketpair		333 +#define __NR_send		334 +#define __NR_sendto		335 +#define __NR_recv		336 +#define __NR_recvfrom		337 +#define __NR_shutdown		338 +#define __NR_setsockopt		339 +#define __NR_getsockopt		340 +#define __NR_sendmsg		341 +#define __NR_recvmsg		342 +#define __NR_recvmmsg		343 +#define __NR_accept4		344 +#define __NR_name_to_handle_at	345 +#define __NR_open_by_handle_at	346 +#define __NR_clock_adjtime	347 +#define __NR_syncfs		348 +#define __NR_sendmmsg		349 +#define __NR_setns		350 +#define __NR_process_vm_readv	351 +#define __NR_process_vm_writev	352 +#define __NR_finit_module	353 +#define __NR_kcmp		354 +#define __NR_sched_setattr	355 +#define __NR_sched_getattr	356 +#define __NR_renameat2		357 + +#endif /* _UAPI_ASM_POWERPC_UNISTD_H_ */  | 
