Merge remote-tracking branch 'master' into queue
Merge reason: development work has dependency on kvm patches merged upstream. Conflicts: arch/powerpc/include/asm/Kbuild arch/powerpc/include/asm/kvm_para.h Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
@@ -1,39 +1,3 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
header-y += auxvec.h
|
||||
header-y += bootx.h
|
||||
header-y += byteorder.h
|
||||
header-y += cputable.h
|
||||
header-y += elf.h
|
||||
header-y += errno.h
|
||||
header-y += fcntl.h
|
||||
header-y += ioctl.h
|
||||
header-y += ioctls.h
|
||||
header-y += ipcbuf.h
|
||||
header-y += linkage.h
|
||||
header-y += msgbuf.h
|
||||
header-y += nvram.h
|
||||
header-y += param.h
|
||||
header-y += poll.h
|
||||
header-y += posix_types.h
|
||||
header-y += ps3fb.h
|
||||
header-y += resource.h
|
||||
header-y += seccomp.h
|
||||
header-y += sembuf.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 += termbits.h
|
||||
header-y += termios.h
|
||||
header-y += types.h
|
||||
header-y += ucontext.h
|
||||
header-y += unistd.h
|
||||
header-y += epapr_hcalls.h
|
||||
|
||||
generic-y += clkdev.h
|
||||
generic-y += rwsem.h
|
||||
|
@@ -1,56 +0,0 @@
|
||||
#ifndef _ASM_POWERPC_ABS_ADDR_H
|
||||
#define _ASM_POWERPC_ABS_ADDR_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
||||
/*
|
||||
* c 2001 PPC 64 Team, 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; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/memblock.h>
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/prom.h>
|
||||
|
||||
struct mschunks_map {
|
||||
unsigned long num_chunks;
|
||||
unsigned long chunk_size;
|
||||
unsigned long chunk_shift;
|
||||
unsigned long chunk_mask;
|
||||
u32 *mapping;
|
||||
};
|
||||
|
||||
extern struct mschunks_map mschunks_map;
|
||||
|
||||
/* Chunks are 256 KB */
|
||||
#define MSCHUNKS_CHUNK_SHIFT (18)
|
||||
#define MSCHUNKS_CHUNK_SIZE (1UL << MSCHUNKS_CHUNK_SHIFT)
|
||||
#define MSCHUNKS_OFFSET_MASK (MSCHUNKS_CHUNK_SIZE - 1)
|
||||
|
||||
static inline unsigned long chunk_to_addr(unsigned long chunk)
|
||||
{
|
||||
return chunk << MSCHUNKS_CHUNK_SHIFT;
|
||||
}
|
||||
|
||||
static inline unsigned long addr_to_chunk(unsigned long addr)
|
||||
{
|
||||
return addr >> MSCHUNKS_CHUNK_SHIFT;
|
||||
}
|
||||
|
||||
static inline unsigned long phys_to_abs(unsigned long pa)
|
||||
{
|
||||
return pa;
|
||||
}
|
||||
|
||||
/* Convenience macros */
|
||||
#define virt_to_abs(va) phys_to_abs(__pa(va))
|
||||
#define abs_to_virt(aa) __va(aa)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_ABS_ADDR_H */
|
@@ -268,6 +268,7 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v)
|
||||
|
||||
return t;
|
||||
}
|
||||
#define atomic_dec_if_positive atomic_dec_if_positive
|
||||
|
||||
#define smp_mb__before_atomic_dec() smp_mb()
|
||||
#define smp_mb__after_atomic_dec() smp_mb()
|
||||
|
@@ -1,21 +0,0 @@
|
||||
#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
|
@@ -288,6 +288,16 @@ static __inline__ int test_bit_le(unsigned long nr,
|
||||
return (tmp[nr >> 3] >> (nr & 7)) & 1;
|
||||
}
|
||||
|
||||
static inline void set_bit_le(int nr, void *addr)
|
||||
{
|
||||
set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
}
|
||||
|
||||
static inline void clear_bit_le(int nr, void *addr)
|
||||
{
|
||||
clear_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
}
|
||||
|
||||
static inline void __set_bit_le(int nr, void *addr)
|
||||
{
|
||||
__set_bit(nr ^ BITOP_LE_SWIZZLE, addr);
|
||||
|
@@ -1,12 +0,0 @@
|
||||
#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 */
|
@@ -5,126 +5,11 @@
|
||||
* Written by Benjamin Herrenschmidt.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __ASM_BOOTX_H__
|
||||
#define __ASM_BOOTX_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <uapi/asm/bootx.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 __KERNEL__
|
||||
/* (*) The format of the colormap is 256 * 3 * 2 bytes. Each color index
|
||||
* is represented by 3 short words containing a 16 bits (unsigned) color
|
||||
* component. Later versions may contain the gamma table for direct-color
|
||||
@@ -162,10 +47,4 @@ struct bootx_dt_node {
|
||||
|
||||
extern void bootx_init(unsigned long r4, unsigned long phys);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#ifdef macintosh
|
||||
#pragma options align=reset
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@@ -1,12 +0,0 @@
|
||||
#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.
|
||||
*/
|
||||
#include <linux/byteorder/big_endian.h>
|
||||
|
||||
#endif /* _ASM_POWERPC_BYTEORDER_H */
|
@@ -30,6 +30,8 @@ extern void flush_dcache_page(struct page *page);
|
||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||
|
||||
extern void __flush_disable_L1(void);
|
||||
|
||||
extern void __flush_icache_range(unsigned long, unsigned long);
|
||||
static inline void flush_icache_range(unsigned long start, unsigned long stop)
|
||||
{
|
||||
|
@@ -38,6 +38,7 @@ typedef s64 compat_s64;
|
||||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u64 compat_u64;
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
@@ -114,6 +115,64 @@ typedef u32 compat_old_sigset_t;
|
||||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
typedef union compat_sigval {
|
||||
compat_int_t sival_int;
|
||||
compat_uptr_t sival_ptr;
|
||||
} compat_sigval_t;
|
||||
|
||||
#define SI_PAD_SIZE32 (128/sizeof(int) - 3)
|
||||
|
||||
typedef struct compat_siginfo {
|
||||
int si_signo;
|
||||
int si_errno;
|
||||
int si_code;
|
||||
|
||||
union {
|
||||
int _pad[SI_PAD_SIZE32];
|
||||
|
||||
/* kill() */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers */
|
||||
struct {
|
||||
compat_timer_t _tid; /* timer id */
|
||||
int _overrun; /* overrun count */
|
||||
compat_sigval_t _sigval; /* same as below */
|
||||
int _sys_private; /* not to be passed to user */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals */
|
||||
struct {
|
||||
compat_pid_t _pid; /* sender's pid */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
compat_sigval_t _sigval;
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD */
|
||||
struct {
|
||||
compat_pid_t _pid; /* which child */
|
||||
__compat_uid_t _uid; /* sender's uid */
|
||||
int _status; /* exit code */
|
||||
compat_clock_t _utime;
|
||||
compat_clock_t _stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
|
||||
struct {
|
||||
unsigned int _addr; /* faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL */
|
||||
struct {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
@@ -123,7 +182,6 @@ typedef u32 compat_sigset_word;
|
||||
* as pointers because the syscall entry code will have
|
||||
* appropriately converted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
|
@@ -1,42 +1,10 @@
|
||||
#ifndef __ASM_POWERPC_CPUTABLE_H
|
||||
#define __ASM_POWERPC_CPUTABLE_H
|
||||
|
||||
#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
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm/asm-compat.h>
|
||||
#include <asm/feature-fixups.h>
|
||||
#include <uapi/asm/cputable.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
@@ -557,5 +525,4 @@ static inline int cpu_has_feature(unsigned long feature)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_POWERPC_CPUTABLE_H */
|
||||
|
@@ -44,7 +44,7 @@ static inline int debugger_dabr_match(struct pt_regs *regs) { return 0; }
|
||||
static inline int debugger_fault_handler(struct pt_regs *regs) { return 0; }
|
||||
#endif
|
||||
|
||||
extern int set_dabr(unsigned long dabr);
|
||||
extern int set_dabr(unsigned long dabr, unsigned long dabrx);
|
||||
#ifdef CONFIG_PPC_ADV_DEBUG_REGS
|
||||
extern void do_send_trap(struct pt_regs *regs, unsigned long address,
|
||||
unsigned long error_code, int signal_code, int brkpt);
|
||||
|
@@ -31,6 +31,46 @@ struct device_node;
|
||||
|
||||
#ifdef CONFIG_EEH
|
||||
|
||||
/*
|
||||
* The struct is used to trace PE related EEH functionality.
|
||||
* In theory, there will have one instance of the struct to
|
||||
* be created against particular PE. In nature, PEs corelate
|
||||
* to each other. the struct has to reflect that hierarchy in
|
||||
* order to easily pick up those affected PEs when one particular
|
||||
* PE has EEH errors.
|
||||
*
|
||||
* Also, one particular PE might be composed of PCI device, PCI
|
||||
* bus and its subordinate components. The struct also need ship
|
||||
* the information. Further more, one particular PE is only meaingful
|
||||
* in the corresponding PHB. Therefore, the root PEs should be created
|
||||
* against existing PHBs in on-to-one fashion.
|
||||
*/
|
||||
#define EEH_PE_INVALID (1 << 0) /* Invalid */
|
||||
#define EEH_PE_PHB (1 << 1) /* PHB PE */
|
||||
#define EEH_PE_DEVICE (1 << 2) /* Device PE */
|
||||
#define EEH_PE_BUS (1 << 3) /* Bus PE */
|
||||
|
||||
#define EEH_PE_ISOLATED (1 << 0) /* Isolated PE */
|
||||
#define EEH_PE_RECOVERING (1 << 1) /* Recovering PE */
|
||||
|
||||
struct eeh_pe {
|
||||
int type; /* PE type: PHB/Bus/Device */
|
||||
int state; /* PE EEH dependent mode */
|
||||
int config_addr; /* Traditional PCI address */
|
||||
int addr; /* PE configuration address */
|
||||
struct pci_controller *phb; /* Associated PHB */
|
||||
int check_count; /* Times of ignored error */
|
||||
int freeze_count; /* Times of froze up */
|
||||
int false_positives; /* Times of reported #ff's */
|
||||
struct eeh_pe *parent; /* Parent PE */
|
||||
struct list_head child_list; /* Link PE to the child list */
|
||||
struct list_head edevs; /* Link list of EEH devices */
|
||||
struct list_head child; /* Child PEs */
|
||||
};
|
||||
|
||||
#define eeh_pe_for_each_dev(pe, edev) \
|
||||
list_for_each_entry(edev, &pe->edevs, list)
|
||||
|
||||
/*
|
||||
* The struct is used to trace EEH state for the associated
|
||||
* PCI device node or PCI device. In future, it might
|
||||
@@ -38,21 +78,16 @@ struct device_node;
|
||||
* another tree except the currently existing tree of PCI
|
||||
* buses and PCI devices
|
||||
*/
|
||||
#define EEH_MODE_SUPPORTED (1<<0) /* EEH supported on the device */
|
||||
#define EEH_MODE_NOCHECK (1<<1) /* EEH check should be skipped */
|
||||
#define EEH_MODE_ISOLATED (1<<2) /* The device has been isolated */
|
||||
#define EEH_MODE_RECOVERING (1<<3) /* Recovering the device */
|
||||
#define EEH_MODE_IRQ_DISABLED (1<<4) /* Interrupt disabled */
|
||||
#define EEH_DEV_IRQ_DISABLED (1<<0) /* Interrupt disabled */
|
||||
|
||||
struct eeh_dev {
|
||||
int mode; /* EEH mode */
|
||||
int class_code; /* Class code of the device */
|
||||
int config_addr; /* Config address */
|
||||
int pe_config_addr; /* PE config address */
|
||||
int check_count; /* Times of ignored error */
|
||||
int freeze_count; /* Times of froze up */
|
||||
int false_positives; /* Times of reported #ff's */
|
||||
u32 config_space[16]; /* Saved PCI config space */
|
||||
struct eeh_pe *pe; /* Associated PE */
|
||||
struct list_head list; /* Form link list in the PE */
|
||||
struct pci_controller *phb; /* Associated PHB */
|
||||
struct device_node *dn; /* Associated device node */
|
||||
struct pci_dev *pdev; /* Associated PCI device */
|
||||
@@ -95,19 +130,51 @@ static inline struct pci_dev *eeh_dev_to_pci_dev(struct eeh_dev *edev)
|
||||
struct eeh_ops {
|
||||
char *name;
|
||||
int (*init)(void);
|
||||
int (*set_option)(struct device_node *dn, int option);
|
||||
int (*get_pe_addr)(struct device_node *dn);
|
||||
int (*get_state)(struct device_node *dn, int *state);
|
||||
int (*reset)(struct device_node *dn, int option);
|
||||
int (*wait_state)(struct device_node *dn, int max_wait);
|
||||
int (*get_log)(struct device_node *dn, int severity, char *drv_log, unsigned long len);
|
||||
int (*configure_bridge)(struct device_node *dn);
|
||||
void* (*of_probe)(struct device_node *dn, void *flag);
|
||||
void* (*dev_probe)(struct pci_dev *dev, void *flag);
|
||||
int (*set_option)(struct eeh_pe *pe, int option);
|
||||
int (*get_pe_addr)(struct eeh_pe *pe);
|
||||
int (*get_state)(struct eeh_pe *pe, int *state);
|
||||
int (*reset)(struct eeh_pe *pe, int option);
|
||||
int (*wait_state)(struct eeh_pe *pe, int max_wait);
|
||||
int (*get_log)(struct eeh_pe *pe, int severity, char *drv_log, unsigned long len);
|
||||
int (*configure_bridge)(struct eeh_pe *pe);
|
||||
int (*read_config)(struct device_node *dn, int where, int size, u32 *val);
|
||||
int (*write_config)(struct device_node *dn, int where, int size, u32 val);
|
||||
};
|
||||
|
||||
extern struct eeh_ops *eeh_ops;
|
||||
extern int eeh_subsystem_enabled;
|
||||
extern struct mutex eeh_mutex;
|
||||
extern int eeh_probe_mode;
|
||||
|
||||
#define EEH_PROBE_MODE_DEV (1<<0) /* From PCI device */
|
||||
#define EEH_PROBE_MODE_DEVTREE (1<<1) /* From device tree */
|
||||
|
||||
static inline void eeh_probe_mode_set(int flag)
|
||||
{
|
||||
eeh_probe_mode = flag;
|
||||
}
|
||||
|
||||
static inline int eeh_probe_mode_devtree(void)
|
||||
{
|
||||
return (eeh_probe_mode == EEH_PROBE_MODE_DEVTREE);
|
||||
}
|
||||
|
||||
static inline int eeh_probe_mode_dev(void)
|
||||
{
|
||||
return (eeh_probe_mode == EEH_PROBE_MODE_DEV);
|
||||
}
|
||||
|
||||
static inline void eeh_lock(void)
|
||||
{
|
||||
mutex_lock(&eeh_mutex);
|
||||
}
|
||||
|
||||
static inline void eeh_unlock(void)
|
||||
{
|
||||
mutex_unlock(&eeh_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
* Max number of EEH freezes allowed before we consider the device
|
||||
@@ -115,22 +182,26 @@ extern int eeh_subsystem_enabled;
|
||||
*/
|
||||
#define EEH_MAX_ALLOWED_FREEZES 5
|
||||
|
||||
typedef void *(*eeh_traverse_func)(void *data, void *flag);
|
||||
int __devinit eeh_phb_pe_create(struct pci_controller *phb);
|
||||
int eeh_add_to_parent_pe(struct eeh_dev *edev);
|
||||
int eeh_rmv_from_parent_pe(struct eeh_dev *edev, int purge_pe);
|
||||
void *eeh_pe_dev_traverse(struct eeh_pe *root,
|
||||
eeh_traverse_func fn, void *flag);
|
||||
void eeh_pe_restore_bars(struct eeh_pe *pe);
|
||||
struct pci_bus *eeh_pe_bus_get(struct eeh_pe *pe);
|
||||
|
||||
void * __devinit eeh_dev_init(struct device_node *dn, void *data);
|
||||
void __devinit eeh_dev_phb_init_dynamic(struct pci_controller *phb);
|
||||
void __init eeh_dev_phb_init(void);
|
||||
void __init eeh_init(void);
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
int __init eeh_pseries_init(void);
|
||||
#endif
|
||||
int __init eeh_ops_register(struct eeh_ops *ops);
|
||||
int __exit eeh_ops_unregister(const char *name);
|
||||
unsigned long eeh_check_failure(const volatile void __iomem *token,
|
||||
unsigned long val);
|
||||
int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev);
|
||||
void __init pci_addr_cache_build(void);
|
||||
int eeh_dev_check_failure(struct eeh_dev *edev);
|
||||
void __init eeh_addr_cache_build(void);
|
||||
void eeh_add_device_tree_early(struct device_node *);
|
||||
void eeh_add_device_tree_late(struct pci_bus *);
|
||||
void eeh_remove_bus_device(struct pci_dev *);
|
||||
void eeh_remove_bus_device(struct pci_dev *, int);
|
||||
|
||||
/**
|
||||
* EEH_POSSIBLE_ERROR() -- test for possible MMIO failure.
|
||||
@@ -156,34 +227,24 @@ static inline void *eeh_dev_init(struct device_node *dn, void *data)
|
||||
|
||||
static inline void eeh_dev_phb_init_dynamic(struct pci_controller *phb) { }
|
||||
|
||||
static inline void eeh_dev_phb_init(void) { }
|
||||
|
||||
static inline void eeh_init(void) { }
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
static inline int eeh_pseries_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PPC_PSERIES */
|
||||
|
||||
static inline unsigned long eeh_check_failure(const volatile void __iomem *token, unsigned long val)
|
||||
{
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#define eeh_dev_check_failure(x) (0)
|
||||
|
||||
static inline void pci_addr_cache_build(void) { }
|
||||
static inline void eeh_addr_cache_build(void) { }
|
||||
|
||||
static inline void eeh_add_device_tree_early(struct device_node *dn) { }
|
||||
|
||||
static inline void eeh_add_device_tree_late(struct pci_bus *bus) { }
|
||||
|
||||
static inline void eeh_remove_bus_device(struct pci_dev *dev) { }
|
||||
static inline void eeh_remove_bus_device(struct pci_dev *dev, int purge_pe) { }
|
||||
|
||||
static inline void eeh_lock(void) { }
|
||||
static inline void eeh_unlock(void) { }
|
||||
|
||||
#define EEH_POSSIBLE_ERROR(val, type) (0)
|
||||
#define EEH_IO_ERROR_VALUE(size) (-1UL)
|
||||
#endif /* CONFIG_EEH */
|
||||
|
@@ -28,11 +28,11 @@
|
||||
*/
|
||||
struct eeh_event {
|
||||
struct list_head list; /* to form event queue */
|
||||
struct eeh_dev *edev; /* EEH device */
|
||||
struct eeh_pe *pe; /* EEH PE */
|
||||
};
|
||||
|
||||
int eeh_send_failure_event(struct eeh_dev *edev);
|
||||
struct eeh_dev *handle_eeh_events(struct eeh_event *);
|
||||
int eeh_send_failure_event(struct eeh_pe *pe);
|
||||
void eeh_handle_event(struct eeh_pe *pe);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* ASM_POWERPC_EEH_EVENT_H */
|
||||
|
@@ -1,90 +1,3 @@
|
||||
#ifndef _ASM_POWERPC_ELF_H
|
||||
#define _ASM_POWERPC_ELF_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/sched.h> /* for task_struct */
|
||||
#include <asm/page.h>
|
||||
#include <asm/string.h>
|
||||
#endif
|
||||
|
||||
#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
|
||||
|
||||
/*
|
||||
* ELF register definitions..
|
||||
*
|
||||
@@ -93,77 +6,14 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_ELF_H
|
||||
#define _ASM_POWERPC_ELF_H
|
||||
|
||||
#define ELF_NGREG 48 /* includes nip, msr, lr, etc. */
|
||||
#define ELF_NFPREG 33 /* includes fpscr */
|
||||
#include <linux/sched.h> /* for task_struct */
|
||||
#include <asm/page.h>
|
||||
#include <asm/string.h>
|
||||
#include <uapi/asm/elf.h>
|
||||
|
||||
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
|
||||
#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
|
||||
# define ELF_DATA ELFDATA2MSB
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
#ifndef ELF_ARCH
|
||||
# define ELF_ARCH EM_PPC64
|
||||
# define ELF_CLASS ELFCLASS64
|
||||
# define ELF_DATA ELFDATA2MSB
|
||||
typedef elf_greg_t64 elf_greg_t;
|
||||
typedef elf_gregset_t64 elf_gregset_t;
|
||||
#else
|
||||
/* Assumption: ELF_ARCH == EM_PPC and ELF_CLASS == ELFCLASS32 */
|
||||
typedef elf_greg_t32 elf_greg_t;
|
||||
typedef elf_gregset_t32 elf_gregset_t;
|
||||
#endif /* ELF_ARCH */
|
||||
|
||||
/* 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
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
@@ -277,153 +127,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
|
||||
extern unsigned long arch_randomize_brk(struct mm_struct *mm);
|
||||
#define arch_randomize_brk arch_randomize_brk
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/*
|
||||
* 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 */
|
||||
|
||||
/* Keep this the last entry. */
|
||||
#define R_PPC64_NUM 107
|
||||
|
||||
/* There's actually a third entry here, but it's unused */
|
||||
struct ppc64_opd_entry
|
||||
{
|
||||
unsigned long funcaddr;
|
||||
unsigned long r2;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifdef CONFIG_SPU_BASE
|
||||
/* Notes used in ET_CORE. Note name is "SPU/<fd>/<filename>". */
|
||||
@@ -433,6 +136,4 @@ struct ppc64_opd_entry
|
||||
|
||||
#endif /* CONFIG_SPU_BASE */
|
||||
|
||||
#endif /* __KERNEL */
|
||||
|
||||
#endif /* _ASM_POWERPC_ELF_H */
|
||||
|
@@ -1,511 +0,0 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* A "hypercall" is an "sc 1" instruction. This header file file provides C
|
||||
* wrapper functions for the ePAPR hypervisor interface. It is inteded
|
||||
* for use by Linux device drivers and other operating systems.
|
||||
*
|
||||
* The hypercalls are implemented as inline assembly, rather than assembly
|
||||
* language functions in a .S file, for optimization. It allows
|
||||
* the caller to issue the hypercall instruction directly, improving both
|
||||
* performance and memory footprint.
|
||||
*/
|
||||
|
||||
#ifndef _EPAPR_HCALLS_H
|
||||
#define _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 */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/*
|
||||
* Hypercall register clobber list
|
||||
*
|
||||
* These macros are used to define the list of clobbered registers during a
|
||||
* hypercall. Technically, registers r0 and r3-r12 are always clobbered,
|
||||
* but the gcc inline assembly syntax does not allow us to specify registers
|
||||
* on the clobber list that are also on the input/output list. Therefore,
|
||||
* the lists of clobbered registers depends on the number of register
|
||||
* parmeters ("+r" and "=r") passed to the hypercall.
|
||||
*
|
||||
* Each assembly block should use one of the HCALL_CLOBBERSx macros. As a
|
||||
* general rule, 'x' is the number of parameters passed to the assembly
|
||||
* block *except* for r11.
|
||||
*
|
||||
* If you're not sure, just use the smallest value of 'x' that does not
|
||||
* generate a compilation error. Because these are static inline functions,
|
||||
* the compiler will only check the clobber list for a function if you
|
||||
* compile code that calls that function.
|
||||
*
|
||||
* r3 and r11 are not included in any clobbers list because they are always
|
||||
* listed as output registers.
|
||||
*
|
||||
* XER, CTR, and LR are currently listed as clobbers because it's uncertain
|
||||
* whether they will be clobbered.
|
||||
*
|
||||
* Note that r11 can be used as an output parameter.
|
||||
*
|
||||
* The "memory" clobber is only necessary for hcalls where the Hypervisor
|
||||
* will read or write guest memory. However, we add it to all hcalls because
|
||||
* the impact is minimal, and we want to ensure that it's present for the
|
||||
* hcalls that need it.
|
||||
*/
|
||||
|
||||
/* List of common clobbered registers. Do not use this macro. */
|
||||
#define EV_HCALL_CLOBBERS "r0", "r12", "xer", "ctr", "lr", "cc", "memory"
|
||||
|
||||
#define EV_HCALL_CLOBBERS8 EV_HCALL_CLOBBERS
|
||||
#define EV_HCALL_CLOBBERS7 EV_HCALL_CLOBBERS8, "r10"
|
||||
#define EV_HCALL_CLOBBERS6 EV_HCALL_CLOBBERS7, "r9"
|
||||
#define EV_HCALL_CLOBBERS5 EV_HCALL_CLOBBERS6, "r8"
|
||||
#define EV_HCALL_CLOBBERS4 EV_HCALL_CLOBBERS5, "r7"
|
||||
#define EV_HCALL_CLOBBERS3 EV_HCALL_CLOBBERS4, "r6"
|
||||
#define EV_HCALL_CLOBBERS2 EV_HCALL_CLOBBERS3, "r5"
|
||||
#define EV_HCALL_CLOBBERS1 EV_HCALL_CLOBBERS2, "r4"
|
||||
|
||||
extern bool epapr_paravirt_enabled;
|
||||
extern u32 epapr_hypercall_start[];
|
||||
|
||||
/*
|
||||
* We use "uintptr_t" to define a register because it's guaranteed to be a
|
||||
* 32-bit integer on a 32-bit platform, and a 64-bit integer on a 64-bit
|
||||
* platform.
|
||||
*
|
||||
* All registers are either input/output or output only. Registers that are
|
||||
* initialized before making the hypercall are input/output. All
|
||||
* input/output registers are represented with "+r". Output-only registers
|
||||
* are represented with "=r". Do not specify any unused registers. The
|
||||
* clobber list will tell the compiler that the hypercall modifies those
|
||||
* registers, which is good enough.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ev_int_set_config - configure the specified interrupt
|
||||
* @interrupt: the interrupt number
|
||||
* @config: configuration for this interrupt
|
||||
* @priority: interrupt priority
|
||||
* @destination: destination CPU number
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_set_config(unsigned int interrupt,
|
||||
uint32_t config, unsigned int priority, uint32_t destination)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
register uintptr_t r5 __asm__("r5");
|
||||
register uintptr_t r6 __asm__("r6");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_SET_CONFIG);
|
||||
r3 = interrupt;
|
||||
r4 = config;
|
||||
r5 = priority;
|
||||
r6 = destination;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "+r" (r4), "+r" (r5), "+r" (r6)
|
||||
: : EV_HCALL_CLOBBERS4
|
||||
);
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_int_get_config - return the config of the specified interrupt
|
||||
* @interrupt: the interrupt number
|
||||
* @config: returned configuration for this interrupt
|
||||
* @priority: returned interrupt priority
|
||||
* @destination: returned destination CPU number
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_get_config(unsigned int interrupt,
|
||||
uint32_t *config, unsigned int *priority, uint32_t *destination)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
register uintptr_t r5 __asm__("r5");
|
||||
register uintptr_t r6 __asm__("r6");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_GET_CONFIG);
|
||||
r3 = interrupt;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5), "=r" (r6)
|
||||
: : EV_HCALL_CLOBBERS4
|
||||
);
|
||||
|
||||
*config = r4;
|
||||
*priority = r5;
|
||||
*destination = r6;
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_int_set_mask - sets the mask for the specified interrupt source
|
||||
* @interrupt: the interrupt number
|
||||
* @mask: 0=enable interrupts, 1=disable interrupts
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_set_mask(unsigned int interrupt,
|
||||
unsigned int mask)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_SET_MASK);
|
||||
r3 = interrupt;
|
||||
r4 = mask;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "+r" (r4)
|
||||
: : EV_HCALL_CLOBBERS2
|
||||
);
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_int_get_mask - returns the mask for the specified interrupt source
|
||||
* @interrupt: the interrupt number
|
||||
* @mask: returned mask for this interrupt (0=enabled, 1=disabled)
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_get_mask(unsigned int interrupt,
|
||||
unsigned int *mask)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_GET_MASK);
|
||||
r3 = interrupt;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "=r" (r4)
|
||||
: : EV_HCALL_CLOBBERS2
|
||||
);
|
||||
|
||||
*mask = r4;
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_int_eoi - signal the end of interrupt processing
|
||||
* @interrupt: the interrupt number
|
||||
*
|
||||
* This function signals the end of processing for the the specified
|
||||
* interrupt, which must be the interrupt currently in service. By
|
||||
* definition, this is also the highest-priority interrupt.
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_eoi(unsigned int interrupt)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_EOI);
|
||||
r3 = interrupt;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3)
|
||||
: : EV_HCALL_CLOBBERS1
|
||||
);
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_byte_channel_send - send characters to a byte stream
|
||||
* @handle: byte stream handle
|
||||
* @count: (input) num of chars to send, (output) num chars sent
|
||||
* @buffer: pointer to a 16-byte buffer
|
||||
*
|
||||
* @buffer must be at least 16 bytes long, because all 16 bytes will be
|
||||
* read from memory into registers, even if count < 16.
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_byte_channel_send(unsigned int handle,
|
||||
unsigned int *count, const char buffer[EV_BYTE_CHANNEL_MAX_BYTES])
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
register uintptr_t r5 __asm__("r5");
|
||||
register uintptr_t r6 __asm__("r6");
|
||||
register uintptr_t r7 __asm__("r7");
|
||||
register uintptr_t r8 __asm__("r8");
|
||||
const uint32_t *p = (const uint32_t *) buffer;
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_BYTE_CHANNEL_SEND);
|
||||
r3 = handle;
|
||||
r4 = *count;
|
||||
r5 = be32_to_cpu(p[0]);
|
||||
r6 = be32_to_cpu(p[1]);
|
||||
r7 = be32_to_cpu(p[2]);
|
||||
r8 = be32_to_cpu(p[3]);
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3),
|
||||
"+r" (r4), "+r" (r5), "+r" (r6), "+r" (r7), "+r" (r8)
|
||||
: : EV_HCALL_CLOBBERS6
|
||||
);
|
||||
|
||||
*count = r4;
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_byte_channel_receive - fetch characters from a byte channel
|
||||
* @handle: byte channel handle
|
||||
* @count: (input) max num of chars to receive, (output) num chars received
|
||||
* @buffer: pointer to a 16-byte buffer
|
||||
*
|
||||
* The size of @buffer must be at least 16 bytes, even if you request fewer
|
||||
* than 16 characters, because we always write 16 bytes to @buffer. This is
|
||||
* for performance reasons.
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_byte_channel_receive(unsigned int handle,
|
||||
unsigned int *count, char buffer[EV_BYTE_CHANNEL_MAX_BYTES])
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
register uintptr_t r5 __asm__("r5");
|
||||
register uintptr_t r6 __asm__("r6");
|
||||
register uintptr_t r7 __asm__("r7");
|
||||
register uintptr_t r8 __asm__("r8");
|
||||
uint32_t *p = (uint32_t *) buffer;
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_BYTE_CHANNEL_RECEIVE);
|
||||
r3 = handle;
|
||||
r4 = *count;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "+r" (r4),
|
||||
"=r" (r5), "=r" (r6), "=r" (r7), "=r" (r8)
|
||||
: : EV_HCALL_CLOBBERS6
|
||||
);
|
||||
|
||||
*count = r4;
|
||||
p[0] = cpu_to_be32(r5);
|
||||
p[1] = cpu_to_be32(r6);
|
||||
p[2] = cpu_to_be32(r7);
|
||||
p[3] = cpu_to_be32(r8);
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_byte_channel_poll - returns the status of the byte channel buffers
|
||||
* @handle: byte channel handle
|
||||
* @rx_count: returned count of bytes in receive queue
|
||||
* @tx_count: returned count of free space in transmit queue
|
||||
*
|
||||
* This function reports the amount of data in the receive queue (i.e. the
|
||||
* number of bytes you can read), and the amount of free space in the transmit
|
||||
* queue (i.e. the number of bytes you can write).
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_byte_channel_poll(unsigned int handle,
|
||||
unsigned int *rx_count, unsigned int *tx_count)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
register uintptr_t r5 __asm__("r5");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_BYTE_CHANNEL_POLL);
|
||||
r3 = handle;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5)
|
||||
: : EV_HCALL_CLOBBERS3
|
||||
);
|
||||
|
||||
*rx_count = r4;
|
||||
*tx_count = r5;
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_int_iack - acknowledge an interrupt
|
||||
* @handle: handle to the target interrupt controller
|
||||
* @vector: returned interrupt vector
|
||||
*
|
||||
* If handle is zero, the function returns the next interrupt source
|
||||
* number to be handled irrespective of the hierarchy or cascading
|
||||
* of interrupt controllers. If non-zero, specifies a handle to the
|
||||
* interrupt controller that is the target of the acknowledge.
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_int_iack(unsigned int handle,
|
||||
unsigned int *vector)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
register uintptr_t r4 __asm__("r4");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_INT_IACK);
|
||||
r3 = handle;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3), "=r" (r4)
|
||||
: : EV_HCALL_CLOBBERS2
|
||||
);
|
||||
|
||||
*vector = r4;
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_doorbell_send - send a doorbell to another partition
|
||||
* @handle: doorbell send handle
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_doorbell_send(unsigned int handle)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_DOORBELL_SEND);
|
||||
r3 = handle;
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "+r" (r3)
|
||||
: : EV_HCALL_CLOBBERS1
|
||||
);
|
||||
|
||||
return r3;
|
||||
}
|
||||
|
||||
/**
|
||||
* ev_idle -- wait for next interrupt on this core
|
||||
*
|
||||
* Returns 0 for success, or an error code.
|
||||
*/
|
||||
static inline unsigned int ev_idle(void)
|
||||
{
|
||||
register uintptr_t r11 __asm__("r11");
|
||||
register uintptr_t r3 __asm__("r3");
|
||||
|
||||
r11 = EV_HCALL_TOKEN(EV_IDLE);
|
||||
|
||||
asm volatile("bl epapr_hypercall_start"
|
||||
: "+r" (r11), "=r" (r3)
|
||||
: : EV_HCALL_CLOBBERS1
|
||||
);
|
||||
|
||||
return r3;
|
||||
}
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif
|
@@ -1,11 +0,0 @@
|
||||
#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 */
|
@@ -37,6 +37,7 @@
|
||||
* critical data
|
||||
*/
|
||||
|
||||
#define PACA_EXGDBELL PACA_EXGEN
|
||||
|
||||
/* We are out of SPRGs so we save some things in the PACA. The normal
|
||||
* exception frame is smaller than the CRIT or MC one though
|
||||
@@ -45,8 +46,9 @@
|
||||
#define EX_CR (1 * 8)
|
||||
#define EX_R10 (2 * 8)
|
||||
#define EX_R11 (3 * 8)
|
||||
#define EX_R14 (4 * 8)
|
||||
#define EX_R15 (5 * 8)
|
||||
#define EX_R13 (4 * 8)
|
||||
#define EX_R14 (5 * 8)
|
||||
#define EX_R15 (6 * 8)
|
||||
|
||||
/*
|
||||
* The TLB miss exception uses different slots.
|
||||
|
@@ -1,11 +0,0 @@
|
||||
#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 */
|
@@ -48,6 +48,8 @@ struct ccsr_guts {
|
||||
__be32 dmuxcr; /* 0x.0068 - DMA Mux Control Register */
|
||||
u8 res06c[0x70 - 0x6c];
|
||||
__be32 devdisr; /* 0x.0070 - Device Disable Control */
|
||||
#define CCSR_GUTS_DEVDISR_TB1 0x00001000
|
||||
#define CCSR_GUTS_DEVDISR_TB0 0x00004000
|
||||
__be32 devdisr2; /* 0x.0074 - Device Disable Control 2 */
|
||||
u8 res078[0x7c - 0x78];
|
||||
__be32 pmjcr; /* 0x.007c - 4 Power Management Jog Control Register */
|
||||
|
@@ -768,22 +768,24 @@ struct fsl_ifc_gpcm {
|
||||
*/
|
||||
struct fsl_ifc_regs {
|
||||
__be32 ifc_rev;
|
||||
u32 res1[0x3];
|
||||
u32 res1[0x2];
|
||||
struct {
|
||||
__be32 cspr_ext;
|
||||
__be32 cspr;
|
||||
u32 res2[0x2];
|
||||
u32 res2;
|
||||
} cspr_cs[FSL_IFC_BANK_COUNT];
|
||||
u32 res3[0x18];
|
||||
u32 res3[0x19];
|
||||
struct {
|
||||
__be32 amask;
|
||||
u32 res4[0x2];
|
||||
} amask_cs[FSL_IFC_BANK_COUNT];
|
||||
u32 res5[0x18];
|
||||
u32 res5[0x17];
|
||||
struct {
|
||||
__be32 csor_ext;
|
||||
__be32 csor;
|
||||
u32 res6[0x2];
|
||||
u32 res6;
|
||||
} csor_cs[FSL_IFC_BANK_COUNT];
|
||||
u32 res7[0x18];
|
||||
u32 res7[0x19];
|
||||
struct {
|
||||
__be32 ftim[4];
|
||||
u32 res8[0x8];
|
||||
|
@@ -151,6 +151,10 @@ static inline void arch_release_hugepage(struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void arch_clear_hugepage_flags(struct page *page)
|
||||
{
|
||||
}
|
||||
|
||||
#else /* ! CONFIG_HUGETLB_PAGE */
|
||||
static inline void flush_hugetlb_page(struct vm_area_struct *vma,
|
||||
unsigned long vmaddr)
|
||||
|
@@ -152,11 +152,6 @@
|
||||
#define H_VASI_RESUMED 5
|
||||
#define H_VASI_COMPLETED 6
|
||||
|
||||
/* DABRX flags */
|
||||
#define H_DABRX_HYPERVISOR (1UL<<(63-61))
|
||||
#define H_DABRX_KERNEL (1UL<<(63-62))
|
||||
#define H_DABRX_USER (1UL<<(63-63))
|
||||
|
||||
/* Each control block has to be on a 4K boundary */
|
||||
#define H_CB_ALIGNMENT 4096
|
||||
|
||||
|
@@ -27,10 +27,11 @@
|
||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||
|
||||
struct arch_hw_breakpoint {
|
||||
bool extraneous_interrupt;
|
||||
u8 len; /* length of the target data symbol */
|
||||
int type;
|
||||
unsigned long address;
|
||||
unsigned long dabrx;
|
||||
int type;
|
||||
u8 len; /* length of the target data symbol */
|
||||
bool extraneous_interrupt;
|
||||
};
|
||||
|
||||
#include <linux/kdebug.h>
|
||||
@@ -61,7 +62,7 @@ extern void ptrace_triggered(struct perf_event *bp,
|
||||
struct perf_sample_data *data, struct pt_regs *regs);
|
||||
static inline void hw_breakpoint_disable(void)
|
||||
{
|
||||
set_dabr(0);
|
||||
set_dabr(0, 0);
|
||||
}
|
||||
extern void thread_change_pc(struct task_struct *tsk, struct pt_regs *regs);
|
||||
|
||||
|
@@ -1,13 +0,0 @@
|
||||
#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 */
|
@@ -1,116 +0,0 @@
|
||||
#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 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 */
|
@@ -1,34 +0,0 @@
|
||||
#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 */
|
@@ -29,21 +29,16 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <asm/probes.h>
|
||||
|
||||
#define __ARCH_WANT_KPROBES_INSN_SLOT
|
||||
|
||||
struct pt_regs;
|
||||
struct kprobe;
|
||||
|
||||
typedef unsigned int kprobe_opcode_t;
|
||||
#define BREAKPOINT_INSTRUCTION 0x7fe00008 /* trap */
|
||||
typedef ppc_opcode_t kprobe_opcode_t;
|
||||
#define MAX_INSN_SIZE 1
|
||||
|
||||
#define IS_TW(instr) (((instr) & 0xfc0007fe) == 0x7c000008)
|
||||
#define IS_TD(instr) (((instr) & 0xfc0007fe) == 0x7c000088)
|
||||
#define IS_TDI(instr) (((instr) & 0xfc000000) == 0x08000000)
|
||||
#define IS_TWI(instr) (((instr) & 0xfc000000) == 0x0c000000)
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
/*
|
||||
* 64bit powerpc uses function descriptors.
|
||||
@@ -72,12 +67,6 @@ typedef unsigned int kprobe_opcode_t;
|
||||
addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define is_trap(instr) (IS_TW(instr) || IS_TD(instr) || \
|
||||
IS_TWI(instr) || IS_TDI(instr))
|
||||
#else
|
||||
/* Use stock kprobe_lookup_name since ppc32 doesn't use function descriptors */
|
||||
#define is_trap(instr) (IS_TW(instr) || IS_TWI(instr))
|
||||
#endif
|
||||
|
||||
#define flush_insn_slot(p) do { } while (0)
|
||||
|
@@ -1,389 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
|
||||
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)
|
||||
|
||||
/* 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];
|
||||
};
|
||||
|
||||
struct kvm_debug_exit_arch {
|
||||
};
|
||||
|
||||
/* for KVM_SET_GUEST_DEBUG */
|
||||
struct kvm_guest_debug_arch {
|
||||
};
|
||||
|
||||
/* 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;
|
||||
};
|
||||
|
||||
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];
|
||||
};
|
||||
|
||||
#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_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)
|
||||
|
||||
#endif /* __LINUX_KVM_POWERPC_H */
|
@@ -59,7 +59,7 @@ struct hpte_cache {
|
||||
struct hlist_node list_vpte;
|
||||
struct hlist_node list_vpte_long;
|
||||
struct rcu_head rcu_head;
|
||||
u64 host_va;
|
||||
u64 host_vpn;
|
||||
u64 pfn;
|
||||
ulong slot;
|
||||
struct kvmppc_pte pte;
|
||||
|
@@ -42,5 +42,6 @@ static inline void svcpu_put(struct kvmppc_book3s_shadow_vcpu *svcpu)
|
||||
#define SID_SHIFT 28
|
||||
#define ESID_MASK 0xf0000000
|
||||
#define VSID_MASK 0x00fffffff0000000ULL
|
||||
#define VPN_SHIFT 12
|
||||
|
||||
#endif /* __ASM_KVM_BOOK3S_32_H__ */
|
||||
|
@@ -74,7 +74,6 @@ struct kvmppc_host_state {
|
||||
ulong vmhandler;
|
||||
ulong scratch0;
|
||||
ulong scratch1;
|
||||
ulong sprg3;
|
||||
u8 in_guest;
|
||||
u8 restore_hid5;
|
||||
u8 napping;
|
||||
|
@@ -16,78 +16,10 @@
|
||||
*
|
||||
* Authors: Hollis Blanchard <hollisb@us.ibm.com>
|
||||
*/
|
||||
|
||||
#ifndef __POWERPC_KVM_PARA_H__
|
||||
#define __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
|
||||
|
||||
#define KVM_MAGIC_FEAT_SR (1 << 0)
|
||||
|
||||
/* MASn, ESR, PIR, and high SPRGs */
|
||||
#define KVM_MAGIC_FEAT_MAS0_TO_SPRG7 (1 << 1)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <uapi/asm/kvm_para.h>
|
||||
|
||||
#ifdef CONFIG_KVM_GUEST
|
||||
|
||||
@@ -212,6 +144,4 @@ static inline bool kvm_check_and_clear_guest_paused(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __POWERPC_KVM_PARA_H__ */
|
||||
|
@@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_POWERPC_LINKAGE_H
|
||||
#define _ASM_POWERPC_LINKAGE_H
|
||||
|
||||
/* Nothing to see here... */
|
||||
|
||||
#endif /* _ASM_POWERPC_LINKAGE_H */
|
@@ -34,19 +34,19 @@ struct machdep_calls {
|
||||
char *name;
|
||||
#ifdef CONFIG_PPC64
|
||||
void (*hpte_invalidate)(unsigned long slot,
|
||||
unsigned long va,
|
||||
unsigned long vpn,
|
||||
int psize, int ssize,
|
||||
int local);
|
||||
long (*hpte_updatepp)(unsigned long slot,
|
||||
unsigned long newpp,
|
||||
unsigned long va,
|
||||
unsigned long vpn,
|
||||
int psize, int ssize,
|
||||
int local);
|
||||
void (*hpte_updateboltedpp)(unsigned long newpp,
|
||||
unsigned long ea,
|
||||
int psize, int ssize);
|
||||
long (*hpte_insert)(unsigned long hpte_group,
|
||||
unsigned long va,
|
||||
unsigned long vpn,
|
||||
unsigned long prpn,
|
||||
unsigned long rflags,
|
||||
unsigned long vflags,
|
||||
@@ -180,7 +180,8 @@ struct machdep_calls {
|
||||
void (*enable_pmcs)(void);
|
||||
|
||||
/* Set DABR for this platform, leave empty for default implemenation */
|
||||
int (*set_dabr)(unsigned long dabr);
|
||||
int (*set_dabr)(unsigned long dabr,
|
||||
unsigned long dabrx);
|
||||
|
||||
#ifdef CONFIG_PPC32 /* XXX for now */
|
||||
/* A general init function, called by ppc_init in init/main.c.
|
||||
|
@@ -1,34 +1,14 @@
|
||||
#ifndef _ASM_POWERPC_MMAN_H
|
||||
#define _ASM_POWERPC_MMAN_H
|
||||
|
||||
#include <asm-generic/mman-common.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.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_MMAN_H
|
||||
#define _ASM_POWERPC_MMAN_H
|
||||
|
||||
#define PROT_SAO 0x10 /* Strong Access Ordering */
|
||||
#include <uapi/asm/mman.h>
|
||||
|
||||
#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 */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#ifdef CONFIG_PPC64
|
||||
|
||||
#include <asm/cputable.h>
|
||||
@@ -61,5 +41,4 @@ static inline int arch_validate_prot(unsigned long prot)
|
||||
#define arch_validate_prot(prot) arch_validate_prot(prot)
|
||||
|
||||
#endif /* CONFIG_PPC64 */
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_MMAN_H */
|
||||
|
@@ -15,6 +15,13 @@
|
||||
#include <asm/asm-compat.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
/*
|
||||
* This is necessary to get the definition of PGTABLE_RANGE which we
|
||||
* need for various slices related matters. Note that this isn't the
|
||||
* complete pgtable.h but only a portion of it.
|
||||
*/
|
||||
#include <asm/pgtable-ppc64.h>
|
||||
|
||||
/*
|
||||
* Segment table
|
||||
*/
|
||||
@@ -154,9 +161,25 @@ struct mmu_psize_def
|
||||
#define MMU_SEGSIZE_256M 0
|
||||
#define MMU_SEGSIZE_1T 1
|
||||
|
||||
/*
|
||||
* encode page number shift.
|
||||
* in order to fit the 78 bit va in a 64 bit variable we shift the va by
|
||||
* 12 bits. This enable us to address upto 76 bit va.
|
||||
* For hpt hash from a va we can ignore the page size bits of va and for
|
||||
* hpte encoding we ignore up to 23 bits of va. So ignoring lower 12 bits ensure
|
||||
* we work in all cases including 4k page size.
|
||||
*/
|
||||
#define VPN_SHIFT 12
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
static inline int segment_shift(int ssize)
|
||||
{
|
||||
if (ssize == MMU_SEGSIZE_256M)
|
||||
return SID_SHIFT;
|
||||
return SID_SHIFT_1T;
|
||||
}
|
||||
|
||||
/*
|
||||
* The current system page and segment sizes
|
||||
*/
|
||||
@@ -179,19 +202,40 @@ extern unsigned long tce_alloc_start, tce_alloc_end;
|
||||
*/
|
||||
extern int mmu_ci_restrictions;
|
||||
|
||||
/*
|
||||
* This computes the AVPN and B fields of the first dword of a HPTE,
|
||||
* for use when we want to match an existing PTE. The bottom 7 bits
|
||||
* of the returned value are zero.
|
||||
*/
|
||||
static inline unsigned long hpte_encode_avpn(unsigned long vpn, int psize,
|
||||
int ssize)
|
||||
{
|
||||
unsigned long v;
|
||||
/*
|
||||
* The AVA field omits the low-order 23 bits of the 78 bits VA.
|
||||
* These bits are not needed in the PTE, because the
|
||||
* low-order b of these bits are part of the byte offset
|
||||
* into the virtual page and, if b < 23, the high-order
|
||||
* 23-b of these bits are always used in selecting the
|
||||
* PTEGs to be searched
|
||||
*/
|
||||
v = (vpn >> (23 - VPN_SHIFT)) & ~(mmu_psize_defs[psize].avpnm);
|
||||
v <<= HPTE_V_AVPN_SHIFT;
|
||||
v |= ((unsigned long) ssize) << HPTE_V_SSIZE_SHIFT;
|
||||
return v;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function sets the AVPN and L fields of the HPTE appropriately
|
||||
* for the page size
|
||||
*/
|
||||
static inline unsigned long hpte_encode_v(unsigned long va, int psize,
|
||||
int ssize)
|
||||
static inline unsigned long hpte_encode_v(unsigned long vpn,
|
||||
int psize, int ssize)
|
||||
{
|
||||
unsigned long v;
|
||||
v = (va >> 23) & ~(mmu_psize_defs[psize].avpnm);
|
||||
v <<= HPTE_V_AVPN_SHIFT;
|
||||
v = hpte_encode_avpn(vpn, psize, ssize);
|
||||
if (psize != MMU_PAGE_4K)
|
||||
v |= HPTE_V_LARGE;
|
||||
v |= ((unsigned long) ssize) << HPTE_V_SSIZE_SHIFT;
|
||||
return v;
|
||||
}
|
||||
|
||||
@@ -216,30 +260,37 @@ static inline unsigned long hpte_encode_r(unsigned long pa, int psize)
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a VA given VSID, EA and segment size
|
||||
* Build a VPN_SHIFT bit shifted va given VSID, EA and segment size.
|
||||
*/
|
||||
static inline unsigned long hpt_va(unsigned long ea, unsigned long vsid,
|
||||
int ssize)
|
||||
static inline unsigned long hpt_vpn(unsigned long ea,
|
||||
unsigned long vsid, int ssize)
|
||||
{
|
||||
if (ssize == MMU_SEGSIZE_256M)
|
||||
return (vsid << 28) | (ea & 0xfffffffUL);
|
||||
return (vsid << 40) | (ea & 0xffffffffffUL);
|
||||
unsigned long mask;
|
||||
int s_shift = segment_shift(ssize);
|
||||
|
||||
mask = (1ul << (s_shift - VPN_SHIFT)) - 1;
|
||||
return (vsid << (s_shift - VPN_SHIFT)) | ((ea >> VPN_SHIFT) & mask);
|
||||
}
|
||||
|
||||
/*
|
||||
* This hashes a virtual address
|
||||
*/
|
||||
|
||||
static inline unsigned long hpt_hash(unsigned long va, unsigned int shift,
|
||||
int ssize)
|
||||
static inline unsigned long hpt_hash(unsigned long vpn,
|
||||
unsigned int shift, int ssize)
|
||||
{
|
||||
int mask;
|
||||
unsigned long hash, vsid;
|
||||
|
||||
/* VPN_SHIFT can be atmost 12 */
|
||||
if (ssize == MMU_SEGSIZE_256M) {
|
||||
hash = (va >> 28) ^ ((va & 0x0fffffffUL) >> shift);
|
||||
mask = (1ul << (SID_SHIFT - VPN_SHIFT)) - 1;
|
||||
hash = (vpn >> (SID_SHIFT - VPN_SHIFT)) ^
|
||||
((vpn & mask) >> (shift - VPN_SHIFT));
|
||||
} else {
|
||||
vsid = va >> 40;
|
||||
hash = vsid ^ (vsid << 25) ^ ((va & 0xffffffffffUL) >> shift);
|
||||
mask = (1ul << (SID_SHIFT_1T - VPN_SHIFT)) - 1;
|
||||
vsid = vpn >> (SID_SHIFT_1T - VPN_SHIFT);
|
||||
hash = vsid ^ (vsid << 25) ^
|
||||
((vpn & mask) >> (shift - VPN_SHIFT)) ;
|
||||
}
|
||||
return hash & 0x7fffffffffUL;
|
||||
}
|
||||
@@ -280,63 +331,61 @@ extern void slb_set_size(u16 size);
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/*
|
||||
* VSID allocation
|
||||
* VSID allocation (256MB segment)
|
||||
*
|
||||
* We first generate a 36-bit "proto-VSID". For kernel addresses this
|
||||
* is equal to the ESID, for user addresses it is:
|
||||
* (context << 15) | (esid & 0x7fff)
|
||||
* We first generate a 38-bit "proto-VSID". For kernel addresses this
|
||||
* is equal to the ESID | 1 << 37, for user addresses it is:
|
||||
* (context << USER_ESID_BITS) | (esid & ((1U << USER_ESID_BITS) - 1)
|
||||
*
|
||||
* The two forms are distinguishable because the top bit is 0 for user
|
||||
* addresses, whereas the top two bits are 1 for kernel addresses.
|
||||
* Proto-VSIDs with the top two bits equal to 0b10 are reserved for
|
||||
* now.
|
||||
* This splits the proto-VSID into the below range
|
||||
* 0 - (2^(CONTEXT_BITS + USER_ESID_BITS) - 1) : User proto-VSID range
|
||||
* 2^(CONTEXT_BITS + USER_ESID_BITS) - 2^(VSID_BITS) : Kernel proto-VSID range
|
||||
*
|
||||
* We also have CONTEXT_BITS + USER_ESID_BITS = VSID_BITS - 1
|
||||
* That is, we assign half of the space to user processes and half
|
||||
* to the kernel.
|
||||
*
|
||||
* The proto-VSIDs are then scrambled into real VSIDs with the
|
||||
* multiplicative hash:
|
||||
*
|
||||
* VSID = (proto-VSID * VSID_MULTIPLIER) % VSID_MODULUS
|
||||
* where VSID_MULTIPLIER = 268435399 = 0xFFFFFC7
|
||||
* VSID_MODULUS = 2^36-1 = 0xFFFFFFFFF
|
||||
*
|
||||
* This scramble is only well defined for proto-VSIDs below
|
||||
* 0xFFFFFFFFF, so both proto-VSID and actual VSID 0xFFFFFFFFF are
|
||||
* reserved. VSID_MULTIPLIER is prime, so in particular it is
|
||||
* VSID_MULTIPLIER is prime, so in particular it is
|
||||
* co-prime to VSID_MODULUS, making this a 1:1 scrambling function.
|
||||
* Because the modulus is 2^n-1 we can compute it efficiently without
|
||||
* a divide or extra multiply (see below).
|
||||
*
|
||||
* This scheme has several advantages over older methods:
|
||||
*
|
||||
* - We have VSIDs allocated for every kernel address
|
||||
* - We have VSIDs allocated for every kernel address
|
||||
* (i.e. everything above 0xC000000000000000), except the very top
|
||||
* segment, which simplifies several things.
|
||||
*
|
||||
* - We allow for 16 significant bits of ESID and 19 bits of
|
||||
* context for user addresses. i.e. 16T (44 bits) of address space for
|
||||
* up to half a million contexts.
|
||||
* - We allow for USER_ESID_BITS significant bits of ESID and
|
||||
* CONTEXT_BITS bits of context for user addresses.
|
||||
* i.e. 64T (46 bits) of address space for up to half a million contexts.
|
||||
*
|
||||
* - The scramble function gives robust scattering in the hash
|
||||
* - The scramble function gives robust scattering in the hash
|
||||
* table (at least based on some initial results). The previous
|
||||
* method was more susceptible to pathological cases giving excessive
|
||||
* hash collisions.
|
||||
*/
|
||||
/*
|
||||
* WARNING - If you change these you must make sure the asm
|
||||
* implementations in slb_allocate (slb_low.S), do_stab_bolted
|
||||
* (head.S) and ASM_VSID_SCRAMBLE (below) are changed accordingly.
|
||||
*/
|
||||
|
||||
#define VSID_MULTIPLIER_256M ASM_CONST(200730139) /* 28-bit prime */
|
||||
#define VSID_BITS_256M 36
|
||||
/*
|
||||
* This should be computed such that protovosid * vsid_mulitplier
|
||||
* doesn't overflow 64 bits. It should also be co-prime to vsid_modulus
|
||||
*/
|
||||
#define VSID_MULTIPLIER_256M ASM_CONST(12538073) /* 24-bit prime */
|
||||
#define VSID_BITS_256M 38
|
||||
#define VSID_MODULUS_256M ((1UL<<VSID_BITS_256M)-1)
|
||||
|
||||
#define VSID_MULTIPLIER_1T ASM_CONST(12538073) /* 24-bit prime */
|
||||
#define VSID_BITS_1T 24
|
||||
#define VSID_BITS_1T 26
|
||||
#define VSID_MODULUS_1T ((1UL<<VSID_BITS_1T)-1)
|
||||
|
||||
#define CONTEXT_BITS 19
|
||||
#define USER_ESID_BITS 16
|
||||
#define USER_ESID_BITS_1T 4
|
||||
#define USER_ESID_BITS 18
|
||||
#define USER_ESID_BITS_1T 6
|
||||
|
||||
#define USER_VSID_RANGE (1UL << (USER_ESID_BITS + SID_SHIFT))
|
||||
|
||||
@@ -372,6 +421,8 @@ extern void slb_set_size(u16 size);
|
||||
srdi rx,rx,VSID_BITS_##size; /* extract 2^VSID_BITS bit */ \
|
||||
add rt,rt,rx
|
||||
|
||||
/* 4 bits per slice and we have one slice per 1TB */
|
||||
#define SLICE_ARRAY_SIZE (PGTABLE_RANGE >> 41)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
@@ -416,7 +467,7 @@ typedef struct {
|
||||
|
||||
#ifdef CONFIG_PPC_MM_SLICES
|
||||
u64 low_slices_psize; /* SLB page size encodings */
|
||||
u64 high_slices_psize; /* 4 bits per slice for now */
|
||||
unsigned char high_slices_psize[SLICE_ARRAY_SIZE];
|
||||
#else
|
||||
u16 sllp; /* SLB page size encoding */
|
||||
#endif
|
||||
@@ -452,12 +503,32 @@ typedef struct {
|
||||
})
|
||||
#endif /* 1 */
|
||||
|
||||
/* This is only valid for addresses >= PAGE_OFFSET */
|
||||
/*
|
||||
* This is only valid for addresses >= PAGE_OFFSET
|
||||
* The proto-VSID space is divided into two class
|
||||
* User: 0 to 2^(CONTEXT_BITS + USER_ESID_BITS) -1
|
||||
* kernel: 2^(CONTEXT_BITS + USER_ESID_BITS) to 2^(VSID_BITS) - 1
|
||||
*
|
||||
* With KERNEL_START at 0xc000000000000000, the proto vsid for
|
||||
* the kernel ends up with 0xc00000000 (36 bits). With 64TB
|
||||
* support we need to have kernel proto-VSID in the
|
||||
* [2^37 to 2^38 - 1] range due to the increased USER_ESID_BITS.
|
||||
*/
|
||||
static inline unsigned long get_kernel_vsid(unsigned long ea, int ssize)
|
||||
{
|
||||
if (ssize == MMU_SEGSIZE_256M)
|
||||
return vsid_scramble(ea >> SID_SHIFT, 256M);
|
||||
return vsid_scramble(ea >> SID_SHIFT_1T, 1T);
|
||||
unsigned long proto_vsid;
|
||||
/*
|
||||
* We need to make sure proto_vsid for the kernel is
|
||||
* >= 2^(CONTEXT_BITS + USER_ESID_BITS[_1T])
|
||||
*/
|
||||
if (ssize == MMU_SEGSIZE_256M) {
|
||||
proto_vsid = ea >> SID_SHIFT;
|
||||
proto_vsid |= (1UL << (CONTEXT_BITS + USER_ESID_BITS));
|
||||
return vsid_scramble(proto_vsid, 256M);
|
||||
}
|
||||
proto_vsid = ea >> SID_SHIFT_1T;
|
||||
proto_vsid |= (1UL << (CONTEXT_BITS + USER_ESID_BITS_1T));
|
||||
return vsid_scramble(proto_vsid, 1T);
|
||||
}
|
||||
|
||||
/* Returns the segment size indicator for a user address */
|
||||
|
@@ -146,6 +146,15 @@ extern void setup_initial_memory_limit(phys_addr_t first_memblock_base,
|
||||
extern u64 ppc64_rma_size;
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
struct mm_struct;
|
||||
#ifdef CONFIG_DEBUG_VM
|
||||
extern void assert_pte_locked(struct mm_struct *mm, unsigned long addr);
|
||||
#else /* CONFIG_DEBUG_VM */
|
||||
static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr)
|
||||
{
|
||||
}
|
||||
#endif /* !CONFIG_DEBUG_VM */
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
/* The kernel use the constants below to index in the page sizes array.
|
||||
|
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm-generic/module.h>
|
||||
|
||||
|
||||
#ifndef __powerpc64__
|
||||
@@ -60,16 +61,10 @@ struct mod_arch_specific {
|
||||
*/
|
||||
|
||||
#ifdef __powerpc64__
|
||||
# define Elf_Shdr Elf64_Shdr
|
||||
# define Elf_Sym Elf64_Sym
|
||||
# define Elf_Ehdr Elf64_Ehdr
|
||||
# ifdef MODULE
|
||||
asm(".section .stubs,\"ax\",@nobits; .align 3; .previous");
|
||||
# endif
|
||||
#else
|
||||
# define Elf_Shdr Elf32_Shdr
|
||||
# define Elf_Sym Elf32_Sym
|
||||
# define Elf_Ehdr Elf32_Ehdr
|
||||
# ifdef MODULE
|
||||
asm(".section .plt,\"ax\",@nobits; .align 3; .previous");
|
||||
asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous");
|
||||
|
@@ -307,6 +307,7 @@ struct mpc52xx_lpbfifo_request {
|
||||
size_t size;
|
||||
size_t pos; /* current position of transfer */
|
||||
int flags;
|
||||
int defer_xfer_start;
|
||||
|
||||
/* What to do when finished */
|
||||
void (*callback)(struct mpc52xx_lpbfifo_request *);
|
||||
@@ -323,6 +324,7 @@ struct mpc52xx_lpbfifo_request {
|
||||
extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req);
|
||||
extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req);
|
||||
extern void mpc52xx_lpbfifo_poll(void);
|
||||
extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req);
|
||||
|
||||
/* mpc52xx_pic.c */
|
||||
extern void mpc52xx_init_irq(void);
|
||||
|
@@ -63,6 +63,7 @@
|
||||
*/
|
||||
#define MPIC_TIMER_BASE 0x01100
|
||||
#define MPIC_TIMER_STRIDE 0x40
|
||||
#define MPIC_TIMER_GROUP_STRIDE 0x1000
|
||||
|
||||
#define MPIC_TIMER_CURRENT_CNT 0x00000
|
||||
#define MPIC_TIMER_BASE_CNT 0x00010
|
||||
@@ -110,10 +111,16 @@
|
||||
#define MPIC_VECPRI_SENSE_MASK 0x00400000
|
||||
#define MPIC_IRQ_DESTINATION 0x00010
|
||||
|
||||
#define MPIC_FSL_BRR1 0x00000
|
||||
#define MPIC_FSL_BRR1_VER 0x0000ffff
|
||||
|
||||
#define MPIC_MAX_IRQ_SOURCES 2048
|
||||
#define MPIC_MAX_CPUS 32
|
||||
#define MPIC_MAX_ISU 32
|
||||
|
||||
#define MPIC_MAX_ERR 32
|
||||
#define MPIC_FSL_ERR_INT 16
|
||||
|
||||
/*
|
||||
* Tsi108 implementation of MPIC has many differences from the original one
|
||||
*/
|
||||
@@ -266,6 +273,7 @@ struct mpic
|
||||
struct irq_chip hc_ipi;
|
||||
#endif
|
||||
struct irq_chip hc_tm;
|
||||
struct irq_chip hc_err;
|
||||
const char *name;
|
||||
/* Flags */
|
||||
unsigned int flags;
|
||||
@@ -279,6 +287,8 @@ struct mpic
|
||||
/* vector numbers used for internal sources (ipi/timers) */
|
||||
unsigned int ipi_vecs[4];
|
||||
unsigned int timer_vecs[8];
|
||||
/* vector numbers used for FSL MPIC error interrupts */
|
||||
unsigned int err_int_vecs[MPIC_MAX_ERR];
|
||||
|
||||
/* Spurious vector to program into unused sources */
|
||||
unsigned int spurious_vec;
|
||||
@@ -296,11 +306,15 @@ struct mpic
|
||||
phys_addr_t paddr;
|
||||
|
||||
/* The various ioremap'ed bases */
|
||||
struct mpic_reg_bank thiscpuregs;
|
||||
struct mpic_reg_bank gregs;
|
||||
struct mpic_reg_bank tmregs;
|
||||
struct mpic_reg_bank cpuregs[MPIC_MAX_CPUS];
|
||||
struct mpic_reg_bank isus[MPIC_MAX_ISU];
|
||||
|
||||
/* ioremap'ed base for error interrupt registers */
|
||||
u32 __iomem *err_regs;
|
||||
|
||||
/* Protected sources */
|
||||
unsigned long *protected;
|
||||
|
||||
@@ -365,6 +379,11 @@ struct mpic
|
||||
#define MPIC_NO_RESET 0x00004000
|
||||
/* Freescale MPIC (compatible includes "fsl,mpic") */
|
||||
#define MPIC_FSL 0x00008000
|
||||
/* Freescale MPIC supports EIMR (error interrupt mask register).
|
||||
* This flag is set for MPIC version >= 4.1 (version determined
|
||||
* from the BRR1 register).
|
||||
*/
|
||||
#define MPIC_FSL_HAS_EIMR 0x00010000
|
||||
|
||||
/* MPIC HW modification ID */
|
||||
#define MPIC_REGSET_MASK 0xf0000000
|
||||
|
@@ -1,33 +0,0 @@
|
||||
#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 */
|
@@ -6,29 +6,13 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _ASM_POWERPC_NVRAM_H
|
||||
#define _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" */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/list.h>
|
||||
#include <uapi/asm/nvram.h>
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
extern int nvram_write_error_log(char * buff, int length,
|
||||
@@ -56,17 +40,6 @@ extern int nvram_remove_partition(const char *name, int sig,
|
||||
extern int nvram_get_partition_size(loff_t data_index);
|
||||
extern loff_t nvram_find_partition(const char *name, int sig, int *out_size);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/* PowerMac specific nvram stuffs */
|
||||
|
||||
enum {
|
||||
pmac_nvram_OF, /* Open Firmware partition */
|
||||
pmac_nvram_XPRAM, /* MacOS XPRAM partition */
|
||||
pmac_nvram_NR /* MacOS Name Registry partition */
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* Return partition offset in nvram */
|
||||
extern int pmac_get_partition(int partition);
|
||||
|
||||
@@ -83,30 +56,4 @@ extern ssize_t nvram_get_size(void);
|
||||
/* Normal access to NVRAM */
|
||||
extern unsigned char nvram_read_byte(int i);
|
||||
extern void nvram_write_byte(unsigned char c, int i);
|
||||
#endif
|
||||
|
||||
/* 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 /* _ASM_POWERPC_NVRAM_H */
|
||||
|
@@ -100,7 +100,7 @@ struct paca_struct {
|
||||
/* SLB related definitions */
|
||||
u16 vmalloc_sllp;
|
||||
u16 slb_cache_ptr;
|
||||
u16 slb_cache[SLB_CACHE_ENTRIES];
|
||||
u32 slb_cache[SLB_CACHE_ENTRIES];
|
||||
#endif /* CONFIG_PPC_STD_MMU_64 */
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E
|
||||
@@ -136,6 +136,7 @@ struct paca_struct {
|
||||
u8 io_sync; /* writel() needs spin_unlock sync */
|
||||
u8 irq_work_pending; /* IRQ_WORK interrupt while soft-disable */
|
||||
u8 nap_state_lost; /* NV GPR values lost in power7_idle */
|
||||
u64 sprg3; /* Saved user-visible sprg */
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
/* Pointer to OPAL machine check event structure set by the
|
||||
|
@@ -78,11 +78,19 @@ extern u64 ppc64_pft_size;
|
||||
#define GET_LOW_SLICE_INDEX(addr) ((addr) >> SLICE_LOW_SHIFT)
|
||||
#define GET_HIGH_SLICE_INDEX(addr) ((addr) >> SLICE_HIGH_SHIFT)
|
||||
|
||||
/*
|
||||
* 1 bit per slice and we have one slice per 1TB
|
||||
* Right now we support only 64TB.
|
||||
* IF we change this we will have to change the type
|
||||
* of high_slices
|
||||
*/
|
||||
#define SLICE_MASK_SIZE 8
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct slice_mask {
|
||||
u16 low_slices;
|
||||
u16 high_slices;
|
||||
u64 high_slices;
|
||||
};
|
||||
|
||||
struct mm_struct;
|
||||
|
@@ -1 +0,0 @@
|
||||
#include <asm-generic/param.h>
|
@@ -182,14 +182,25 @@ static inline int pci_device_from_OF_node(struct device_node *np,
|
||||
#if defined(CONFIG_EEH)
|
||||
static inline struct eeh_dev *of_node_to_eeh_dev(struct device_node *dn)
|
||||
{
|
||||
/*
|
||||
* For those OF nodes whose parent isn't PCI bridge, they
|
||||
* don't have PCI_DN actually. So we have to skip them for
|
||||
* any EEH operations.
|
||||
*/
|
||||
if (!dn || !PCI_DN(dn))
|
||||
return NULL;
|
||||
|
||||
return PCI_DN(dn)->edev;
|
||||
}
|
||||
#else
|
||||
#define of_node_to_eeh_dev(x) (NULL)
|
||||
#endif
|
||||
|
||||
/** Find the bus corresponding to the indicated device node */
|
||||
extern struct pci_bus *pcibios_find_pci_bus(struct device_node *dn);
|
||||
|
||||
/** Remove all of the PCI devices under this bus */
|
||||
extern void __pcibios_remove_pci_devices(struct pci_bus *bus, int purge_pe);
|
||||
extern void pcibios_remove_pci_devices(struct pci_bus *bus);
|
||||
|
||||
/** Discover new pci devices under this bus, and add them */
|
||||
|
@@ -49,6 +49,7 @@ struct power_pmu {
|
||||
#define PPMU_ALT_SIPR 2 /* uses alternate posn for SIPR/HV */
|
||||
#define PPMU_NO_SIPR 4 /* no SIPR/HV in MMCRA at all */
|
||||
#define PPMU_NO_CONT_SAMPLING 8 /* no continuous sampling */
|
||||
#define PPMU_SIAR_VALID 16 /* Processor has SIAR Valid bit */
|
||||
|
||||
/*
|
||||
* Values for flags to get_alternatives()
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
#define PTE_INDEX_SIZE 9
|
||||
#define PMD_INDEX_SIZE 7
|
||||
#define PUD_INDEX_SIZE 7
|
||||
#define PUD_INDEX_SIZE 9
|
||||
#define PGD_INDEX_SIZE 9
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#define PTRS_PER_PTE (1 << PTE_INDEX_SIZE)
|
||||
#define PTRS_PER_PMD (1 << PMD_INDEX_SIZE)
|
||||
#define PTRS_PER_PUD (1 << PMD_INDEX_SIZE)
|
||||
#define PTRS_PER_PUD (1 << PUD_INDEX_SIZE)
|
||||
#define PTRS_PER_PGD (1 << PGD_INDEX_SIZE)
|
||||
|
||||
/* PMD_SHIFT determines what a second-level page table entry can map */
|
||||
|
@@ -7,7 +7,7 @@
|
||||
#define PTE_INDEX_SIZE 12
|
||||
#define PMD_INDEX_SIZE 12
|
||||
#define PUD_INDEX_SIZE 0
|
||||
#define PGD_INDEX_SIZE 4
|
||||
#define PGD_INDEX_SIZE 6
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#define PTE_TABLE_SIZE (sizeof(real_pte_t) << PTE_INDEX_SIZE)
|
||||
|
@@ -21,17 +21,6 @@
|
||||
#define PGTABLE_RANGE (ASM_CONST(1) << PGTABLE_EADDR_SIZE)
|
||||
|
||||
|
||||
/* Some sanity checking */
|
||||
#if TASK_SIZE_USER64 > PGTABLE_RANGE
|
||||
#error TASK_SIZE_USER64 exceeds pagetable range
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_STD_MMU_64
|
||||
#if TASK_SIZE_USER64 > (1UL << (USER_ESID_BITS + SID_SHIFT))
|
||||
#error TASK_SIZE_USER64 exceeds user VSID range
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define the address range of the kernel non-linear virtual area
|
||||
*/
|
||||
@@ -41,7 +30,7 @@
|
||||
#else
|
||||
#define KERN_VIRT_START ASM_CONST(0xD000000000000000)
|
||||
#endif
|
||||
#define KERN_VIRT_SIZE PGTABLE_RANGE
|
||||
#define KERN_VIRT_SIZE ASM_CONST(0x0000100000000000)
|
||||
|
||||
/*
|
||||
* The vmalloc space starts at the beginning of that region, and
|
||||
@@ -117,9 +106,6 @@
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <linux/stddef.h>
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
/*
|
||||
* This is the default implementation of various PTE accessors, it's
|
||||
* used in all cases except Book3S with 64K pages where we have a
|
||||
@@ -198,7 +184,8 @@
|
||||
/* to find an entry in a kernel page-table-directory */
|
||||
/* This now only contains the vmalloc pages */
|
||||
#define pgd_offset_k(address) pgd_offset(&init_mm, address)
|
||||
|
||||
extern void hpte_need_flush(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, unsigned long pte, int huge);
|
||||
|
||||
/* Atomic PTE updates */
|
||||
static inline unsigned long pte_update(struct mm_struct *mm,
|
||||
|
@@ -9,14 +9,6 @@
|
||||
|
||||
struct mm_struct;
|
||||
|
||||
#ifdef CONFIG_DEBUG_VM
|
||||
extern void assert_pte_locked(struct mm_struct *mm, unsigned long addr);
|
||||
#else /* CONFIG_DEBUG_VM */
|
||||
static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr)
|
||||
{
|
||||
}
|
||||
#endif /* !CONFIG_DEBUG_VM */
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#if defined(CONFIG_PPC64)
|
||||
@@ -27,6 +19,8 @@ static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
/* Generic accessors to PTE bits */
|
||||
static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; }
|
||||
static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; }
|
||||
|
@@ -1 +0,0 @@
|
||||
#include <asm-generic/poll.h>
|
@@ -1,25 +0,0 @@
|
||||
#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 */
|
@@ -126,6 +126,7 @@
|
||||
#define PPC_INST_TLBIVAX 0x7c000624
|
||||
#define PPC_INST_TLBSRX_DOT 0x7c0006a5
|
||||
#define PPC_INST_XXLOR 0xf0000510
|
||||
#define PPC_INST_XVCPSGNDP 0xf0000780
|
||||
|
||||
#define PPC_INST_NAP 0x4c000364
|
||||
#define PPC_INST_SLEEP 0x4c0003a4
|
||||
@@ -277,6 +278,8 @@
|
||||
VSX_XX1((s), a, b))
|
||||
#define XXLOR(t, a, b) stringify_in_c(.long PPC_INST_XXLOR | \
|
||||
VSX_XX3((t), a, b))
|
||||
#define XVCPSGNDP(t, a, b) stringify_in_c(.long (PPC_INST_XVCPSGNDP | \
|
||||
VSX_XX3((t), (a), (b))))
|
||||
|
||||
#define PPC_NAP stringify_in_c(.long PPC_INST_NAP)
|
||||
#define PPC_SLEEP stringify_in_c(.long PPC_INST_SLEEP)
|
||||
|
@@ -47,19 +47,17 @@ extern int rtas_setup_phb(struct pci_controller *phb);
|
||||
|
||||
#ifdef CONFIG_EEH
|
||||
|
||||
void pci_addr_cache_build(void);
|
||||
void pci_addr_cache_insert_device(struct pci_dev *dev);
|
||||
void pci_addr_cache_remove_device(struct pci_dev *dev);
|
||||
struct pci_dev *pci_addr_cache_get_device(unsigned long addr);
|
||||
void eeh_slot_error_detail(struct eeh_dev *edev, int severity);
|
||||
int eeh_pci_enable(struct eeh_dev *edev, int function);
|
||||
int eeh_reset_pe(struct eeh_dev *);
|
||||
void eeh_restore_bars(struct eeh_dev *);
|
||||
void eeh_addr_cache_insert_dev(struct pci_dev *dev);
|
||||
void eeh_addr_cache_rmv_dev(struct pci_dev *dev);
|
||||
struct eeh_dev *eeh_addr_cache_get_dev(unsigned long addr);
|
||||
void eeh_slot_error_detail(struct eeh_pe *pe, int severity);
|
||||
int eeh_pci_enable(struct eeh_pe *pe, int function);
|
||||
int eeh_reset_pe(struct eeh_pe *);
|
||||
void eeh_save_bars(struct eeh_dev *edev);
|
||||
int rtas_write_config(struct pci_dn *, int where, int size, u32 val);
|
||||
int rtas_read_config(struct pci_dn *, int where, int size, u32 *val);
|
||||
void eeh_mark_slot(struct device_node *dn, int mode_flag);
|
||||
void eeh_clear_slot(struct device_node *dn, int mode_flag);
|
||||
struct device_node *eeh_find_device_pe(struct device_node *dn);
|
||||
void eeh_pe_state_mark(struct eeh_pe *pe, int state);
|
||||
void eeh_pe_state_clear(struct eeh_pe *pe, int state);
|
||||
|
||||
void eeh_sysfs_add_device(struct pci_dev *pdev);
|
||||
void eeh_sysfs_remove_device(struct pci_dev *pdev);
|
||||
|
42
arch/powerpc/include/asm/probes.h
Normal file
42
arch/powerpc/include/asm/probes.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef _ASM_POWERPC_PROBES_H
|
||||
#define _ASM_POWERPC_PROBES_H
|
||||
#ifdef __KERNEL__
|
||||
/*
|
||||
* Definitions common to probes files
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Copyright IBM Corporation, 2012
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
|
||||
typedef u32 ppc_opcode_t;
|
||||
#define BREAKPOINT_INSTRUCTION 0x7fe00008 /* trap */
|
||||
|
||||
/* Trap definitions per ISA */
|
||||
#define IS_TW(instr) (((instr) & 0xfc0007fe) == 0x7c000008)
|
||||
#define IS_TD(instr) (((instr) & 0xfc0007fe) == 0x7c000088)
|
||||
#define IS_TDI(instr) (((instr) & 0xfc000000) == 0x08000000)
|
||||
#define IS_TWI(instr) (((instr) & 0xfc000000) == 0x0c000000)
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#define is_trap(instr) (IS_TW(instr) || IS_TD(instr) || \
|
||||
IS_TWI(instr) || IS_TDI(instr))
|
||||
#else
|
||||
#define is_trap(instr) (IS_TW(instr) || IS_TWI(instr))
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_PROBES_H */
|
@@ -74,9 +74,6 @@ struct task_struct;
|
||||
void start_thread(struct pt_regs *regs, unsigned long fdptr, unsigned long sp);
|
||||
void release_thread(struct task_struct *);
|
||||
|
||||
/* Create a new kernel thread. */
|
||||
extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
|
||||
|
||||
/* Lazy FPU handling on uni-processor */
|
||||
extern struct task_struct *last_task_used_math;
|
||||
extern struct task_struct *last_task_used_altivec;
|
||||
@@ -97,8 +94,8 @@ extern struct task_struct *last_task_used_spe;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
/* 64-bit user address space is 44-bits (16TB user VM) */
|
||||
#define TASK_SIZE_USER64 (0x0000100000000000UL)
|
||||
/* 64-bit user address space is 46-bits (64TB user VM) */
|
||||
#define TASK_SIZE_USER64 (0x0000400000000000UL)
|
||||
|
||||
/*
|
||||
* 32-bit user address space is 4GB - 1 page
|
||||
@@ -219,6 +216,8 @@ struct thread_struct {
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
#endif
|
||||
unsigned long dabr; /* Data address breakpoint register */
|
||||
unsigned long dabrx; /* ... extension */
|
||||
unsigned long trap_nr; /* last trap # on this thread */
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
/* Complete AltiVec register set */
|
||||
vector128 vr[32] __attribute__((aligned(16)));
|
||||
@@ -389,9 +388,9 @@ extern int powersave_nap; /* set if nap mode can be used in idle loop */
|
||||
extern void power7_nap(void);
|
||||
|
||||
#ifdef CONFIG_PSERIES_IDLE
|
||||
extern void update_smt_snooze_delay(int snooze);
|
||||
extern void update_smt_snooze_delay(int cpu, int residency);
|
||||
#else
|
||||
static inline void update_smt_snooze_delay(int snooze) {}
|
||||
static inline void update_smt_snooze_delay(int cpu, int residency) {}
|
||||
#endif
|
||||
|
||||
extern void flush_instruction_cache(void);
|
||||
|
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* 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_ */
|
@@ -58,14 +58,16 @@
|
||||
/* Trick: we set __end to va + 64k, which happens works for
|
||||
* a 16M page as well as we want only one iteration
|
||||
*/
|
||||
#define pte_iterate_hashed_subpages(rpte, psize, va, index, shift) \
|
||||
do { \
|
||||
unsigned long __end = va + PAGE_SIZE; \
|
||||
unsigned __split = (psize == MMU_PAGE_4K || \
|
||||
psize == MMU_PAGE_64K_AP); \
|
||||
shift = mmu_psize_defs[psize].shift; \
|
||||
for (index = 0; va < __end; index++, va += (1L << shift)) { \
|
||||
if (!__split || __rpte_sub_valid(rpte, index)) do { \
|
||||
#define pte_iterate_hashed_subpages(rpte, psize, vpn, index, shift) \
|
||||
do { \
|
||||
unsigned long __end = vpn + (1UL << (PAGE_SHIFT - VPN_SHIFT)); \
|
||||
unsigned __split = (psize == MMU_PAGE_4K || \
|
||||
psize == MMU_PAGE_64K_AP); \
|
||||
shift = mmu_psize_defs[psize].shift; \
|
||||
for (index = 0; vpn < __end; index++, \
|
||||
vpn += (1L << (shift - VPN_SHIFT))) { \
|
||||
if (!__split || __rpte_sub_valid(rpte, index)) \
|
||||
do {
|
||||
|
||||
#define pte_iterate_hashed_end() } while(0); } } while(0)
|
||||
|
||||
|
@@ -1,6 +1,3 @@
|
||||
#ifndef _ASM_POWERPC_PTRACE_H
|
||||
#define _ASM_POWERPC_PTRACE_H
|
||||
|
||||
/*
|
||||
* Copyright (C) 2001 PPC64 Team, IBM Corp
|
||||
*
|
||||
@@ -23,37 +20,11 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_PTRACE_H
|
||||
#define _ASM_POWERPC_PTRACE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <uapi/asm/ptrace.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__ */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifdef __powerpc64__
|
||||
|
||||
@@ -125,6 +96,8 @@ extern unsigned long ptrace_get_reg(struct task_struct *task, int regno);
|
||||
extern int ptrace_put_reg(struct task_struct *task, int regno,
|
||||
unsigned long data);
|
||||
|
||||
#define current_pt_regs() \
|
||||
((struct pt_regs *)((unsigned long)current_thread_info() + THREAD_SIZE) - 1)
|
||||
/*
|
||||
* We use the least-significant bit of the trap field to indicate
|
||||
* whether we have saved the full set of registers, or only a
|
||||
@@ -220,219 +193,12 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs,
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/*
|
||||
* 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_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 */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define PT_FPSCR32 (PT_FPR0 + 2*32 + 1) /* each FP reg occupies 2 32-bit userspace slots */
|
||||
#endif
|
||||
|
||||
#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)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define PT_VR0_32 164 /* each Vector reg occupies 4 slots in 32-bit */
|
||||
#define PT_VSCR_32 (PT_VR0 + 32*4 + 3)
|
||||
#define PT_VRSAVE_32 (PT_VR0 + 33*4)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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)
|
||||
#ifdef __KERNEL__
|
||||
#define PT_VSR0_32 300 /* each VSR reg occupies 4 slots in 32-bit */
|
||||
#endif
|
||||
#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 18
|
||||
#define PTRACE_SETVRREGS 19
|
||||
|
||||
/* Get/set all the upper 32-bits of the SPE registers, accumulator, and
|
||||
* spefscr, in one go */
|
||||
#define PTRACE_GETEVRREGS 20
|
||||
#define PTRACE_SETEVRREGS 21
|
||||
|
||||
/* Get the first 32 128bit VSX registers */
|
||||
#define PTRACE_GETVSRREGS 27
|
||||
#define PTRACE_SETVSRREGS 28
|
||||
|
||||
/*
|
||||
* Get or set a debug register. The first 16 are DABR registers and the
|
||||
* second 16 are IABR registers.
|
||||
*/
|
||||
#define PTRACE_GET_DEBUGREG 25
|
||||
#define PTRACE_SET_DEBUGREG 26
|
||||
|
||||
/* (new) PTRACE requests using the same numbers as x86 and the same
|
||||
* argument ordering. Additionally, they support more registers too
|
||||
*/
|
||||
#define PTRACE_GETREGS 12
|
||||
#define PTRACE_SETREGS 13
|
||||
#define PTRACE_GETFPREGS 14
|
||||
#define PTRACE_SETFPREGS 15
|
||||
#define PTRACE_GETREGS64 22
|
||||
#define PTRACE_SETREGS64 23
|
||||
|
||||
/* 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
|
||||
|
||||
#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 /* _ASM_POWERPC_PTRACE_H */
|
||||
|
@@ -208,6 +208,9 @@
|
||||
#define SPRN_DABRX 0x3F7 /* Data Address Breakpoint Register Extension */
|
||||
#define DABRX_USER (1UL << 0)
|
||||
#define DABRX_KERNEL (1UL << 1)
|
||||
#define DABRX_HYP (1UL << 2)
|
||||
#define DABRX_BTI (1UL << 3)
|
||||
#define DABRX_ALL (DABRX_BTI | DABRX_HYP | DABRX_KERNEL | DABRX_USER)
|
||||
#define SPRN_DAR 0x013 /* Data Address Register */
|
||||
#define SPRN_DBCR 0x136 /* e300 Data Breakpoint Control Reg */
|
||||
#define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */
|
||||
@@ -521,6 +524,7 @@
|
||||
|
||||
#define SPRN_HSRR0 0x13A /* Save/Restore Register 0 */
|
||||
#define SPRN_HSRR1 0x13B /* Save/Restore Register 1 */
|
||||
#define HSRR1_DENORM 0x00100000 /* Denorm exception */
|
||||
|
||||
#define SPRN_TBCTL 0x35f /* PA6T Timebase control register */
|
||||
#define TBCTL_FREEZE 0x0000000000000000ull /* Freeze all tbs */
|
||||
@@ -602,6 +606,10 @@
|
||||
#define POWER6_MMCRA_SIPR 0x0000020000000000ULL
|
||||
#define POWER6_MMCRA_THRM 0x00000020UL
|
||||
#define POWER6_MMCRA_OTHER 0x0000000EUL
|
||||
|
||||
#define POWER7P_MMCRA_SIAR_VALID 0x10000000 /* P7+ SIAR contents valid */
|
||||
#define POWER7P_MMCRA_SDAR_VALID 0x08000000 /* P7+ SDAR contents valid */
|
||||
|
||||
#define SPRN_PMC1 787
|
||||
#define SPRN_PMC2 788
|
||||
#define SPRN_PMC3 789
|
||||
@@ -761,7 +769,8 @@
|
||||
* 64-bit embedded
|
||||
* - SPRG0 generic exception scratch
|
||||
* - SPRG2 TLB exception stack
|
||||
* - SPRG3 CPU and NUMA node for VDSO getcpu (user visible)
|
||||
* - SPRG3 critical exception scratch and
|
||||
* CPU and NUMA node for VDSO getcpu (user visible)
|
||||
* - SPRG4 unused (user visible)
|
||||
* - SPRG6 TLB miss scratch (user visible, sorry !)
|
||||
* - SPRG7 critical exception scratch
|
||||
@@ -858,11 +867,12 @@
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E_64
|
||||
#define SPRN_SPRG_MC_SCRATCH SPRN_SPRG8
|
||||
#define SPRN_SPRG_CRIT_SCRATCH SPRN_SPRG7
|
||||
#define SPRN_SPRG_CRIT_SCRATCH SPRN_SPRG3
|
||||
#define SPRN_SPRG_DBG_SCRATCH SPRN_SPRG9
|
||||
#define SPRN_SPRG_TLB_EXFRAME SPRN_SPRG2
|
||||
#define SPRN_SPRG_TLB_SCRATCH SPRN_SPRG6
|
||||
#define SPRN_SPRG_GEN_SCRATCH SPRN_SPRG0
|
||||
#define SPRN_SPRG_GDBELL_SCRATCH SPRN_SPRG_GEN_SCRATCH
|
||||
|
||||
#define SET_PACA(rX) mtspr SPRN_SPRG_PACA,rX
|
||||
#define GET_PACA(rX) mfspr rX,SPRN_SPRG_PACA
|
||||
@@ -937,7 +947,7 @@
|
||||
#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */
|
||||
#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF) /* Revison field */
|
||||
|
||||
#define __is_processor(pv) (PVR_VER(mfspr(SPRN_PVR)) == (pv))
|
||||
#define pvr_version_is(pvr) (PVR_VER(mfspr(SPRN_PVR)) == (pvr))
|
||||
|
||||
/*
|
||||
* IBM has further subdivided the standard PowerPC 16-bit version and
|
||||
@@ -1002,25 +1012,25 @@
|
||||
#define PVR_476_ISS 0x00052000
|
||||
|
||||
/* 64-bit processors */
|
||||
/* XXX the prefix should be PVR_, we'll do a global sweep to fix it one day */
|
||||
#define PV_NORTHSTAR 0x0033
|
||||
#define PV_PULSAR 0x0034
|
||||
#define PV_POWER4 0x0035
|
||||
#define PV_ICESTAR 0x0036
|
||||
#define PV_SSTAR 0x0037
|
||||
#define PV_POWER4p 0x0038
|
||||
#define PV_970 0x0039
|
||||
#define PV_POWER5 0x003A
|
||||
#define PV_POWER5p 0x003B
|
||||
#define PV_970FX 0x003C
|
||||
#define PV_POWER6 0x003E
|
||||
#define PV_POWER7 0x003F
|
||||
#define PV_630 0x0040
|
||||
#define PV_630p 0x0041
|
||||
#define PV_970MP 0x0044
|
||||
#define PV_970GX 0x0045
|
||||
#define PV_BE 0x0070
|
||||
#define PV_PA6T 0x0090
|
||||
#define PVR_NORTHSTAR 0x0033
|
||||
#define PVR_PULSAR 0x0034
|
||||
#define PVR_POWER4 0x0035
|
||||
#define PVR_ICESTAR 0x0036
|
||||
#define PVR_SSTAR 0x0037
|
||||
#define PVR_POWER4p 0x0038
|
||||
#define PVR_970 0x0039
|
||||
#define PVR_POWER5 0x003A
|
||||
#define PVR_POWER5p 0x003B
|
||||
#define PVR_970FX 0x003C
|
||||
#define PVR_POWER6 0x003E
|
||||
#define PVR_POWER7 0x003F
|
||||
#define PVR_630 0x0040
|
||||
#define PVR_630p 0x0041
|
||||
#define PVR_970MP 0x0044
|
||||
#define PVR_970GX 0x0045
|
||||
#define PVR_POWER7p 0x004A
|
||||
#define PVR_BE 0x0070
|
||||
#define PVR_PA6T 0x0090
|
||||
|
||||
/* Macros for setting and retrieving special purpose registers */
|
||||
#ifndef __ASSEMBLY__
|
||||
|
@@ -1 +0,0 @@
|
||||
#include <asm-generic/resource.h>
|
@@ -1,16 +0,0 @@
|
||||
#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 */
|
@@ -1,36 +0,0 @@
|
||||
#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 */
|
@@ -1,32 +0,0 @@
|
||||
#ifndef _ASM_POWERPC_SETUP_H
|
||||
#define _ASM_POWERPC_SETUP_H
|
||||
|
||||
#include <asm-generic/setup.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void ppc_printk_progress(char *s, unsigned short hex);
|
||||
|
||||
extern unsigned int rtas_data;
|
||||
extern int mem_init_done; /* set on boot once kmalloc can be called */
|
||||
extern int init_bootmem_done; /* set once bootmem is available */
|
||||
extern phys_addr_t memory_limit;
|
||||
extern unsigned long klimit;
|
||||
extern void *zalloc_maybe_bootmem(size_t size, gfp_t mask);
|
||||
|
||||
extern void via_cuda_init(void);
|
||||
extern void read_rtc_time(void);
|
||||
extern void pmac_find_display(void);
|
||||
|
||||
struct device_node;
|
||||
extern void note_scsi_host(struct device_node *, void *);
|
||||
|
||||
/* Used in very early kernel initialization. */
|
||||
extern unsigned long reloc_offset(void);
|
||||
extern unsigned long add_reloc_offset(unsigned long);
|
||||
extern void reloc_got2(unsigned long);
|
||||
|
||||
#define PTRRELOC(x) ((typeof(x)) add_reloc_offset((unsigned long)(x)))
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_SETUP_H */
|
@@ -1,59 +0,0 @@
|
||||
#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 */
|
@@ -1,87 +0,0 @@
|
||||
#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 */
|
@@ -1,21 +0,0 @@
|
||||
#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))
|
||||
# define SI_PAD_SIZE32 ((SI_MAX_SIZE/sizeof(int)) - 3)
|
||||
#endif
|
||||
|
||||
#include <asm-generic/siginfo.h>
|
||||
|
||||
#undef NSIGTRAP
|
||||
#define NSIGTRAP 4
|
||||
|
||||
#endif /* _ASM_POWERPC_SIGINFO_H */
|
@@ -1,149 +1,8 @@
|
||||
#ifndef _ASM_POWERPC_SIGNAL_H
|
||||
#define _ASM_POWERPC_SIGNAL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <uapi/asm/signal.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
|
||||
|
||||
/*
|
||||
* sigaltstack controls
|
||||
*/
|
||||
#define SS_ONSTACK 1
|
||||
#define SS_DISABLE 2
|
||||
|
||||
#define MINSIGSTKSZ 2048
|
||||
#define SIGSTKSZ 8192
|
||||
|
||||
#include <asm-generic/signal-defs.h>
|
||||
|
||||
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 */
|
||||
};
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
};
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void __user *ss_sp;
|
||||
int ss_flags;
|
||||
size_t ss_size;
|
||||
} stack_t;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct pt_regs;
|
||||
#define ptrace_signal_deliver(regs, cookie) do { } while (0)
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#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 /* _ASM_POWERPC_SIGNAL_H */
|
||||
|
@@ -65,6 +65,7 @@ int generic_cpu_disable(void);
|
||||
void generic_cpu_die(unsigned int cpu);
|
||||
void generic_mach_cpu_die(void);
|
||||
void generic_set_cpu_dead(unsigned int cpu);
|
||||
void generic_set_cpu_up(unsigned int cpu);
|
||||
int generic_check_cpu_restart(unsigned int cpu);
|
||||
#endif
|
||||
|
||||
@@ -190,6 +191,7 @@ extern unsigned long __secondary_hold_spinloop;
|
||||
extern unsigned long __secondary_hold_acknowledge;
|
||||
extern char __secondary_hold;
|
||||
|
||||
extern void __early_start(void);
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
@@ -1,79 +0,0 @@
|
||||
#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
|
||||
/* To add :#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_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
|
||||
|
||||
#endif /* _ASM_POWERPC_SOCKET_H */
|
@@ -1,20 +0,0 @@
|
||||
#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 */
|
@@ -10,8 +10,8 @@
|
||||
*/
|
||||
#define SECTION_SIZE_BITS 24
|
||||
|
||||
#define MAX_PHYSADDR_BITS 44
|
||||
#define MAX_PHYSMEM_BITS 44
|
||||
#define MAX_PHYSADDR_BITS 46
|
||||
#define MAX_PHYSMEM_BITS 46
|
||||
|
||||
#endif /* CONFIG_SPARSEMEM */
|
||||
|
||||
|
@@ -19,37 +19,10 @@
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _SPU_INFO_H
|
||||
#define _SPU_INFO_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <asm/spu.h>
|
||||
#else
|
||||
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];
|
||||
};
|
||||
#include <uapi/asm/spu_info.h>
|
||||
|
||||
#endif
|
||||
|
@@ -1,81 +0,0 @@
|
||||
#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 */
|
@@ -1,6 +0,0 @@
|
||||
#ifndef _ASM_POWERPC_STATFS_H
|
||||
#define _ASM_POWERPC_STATFS_H
|
||||
|
||||
#include <asm-generic/statfs.h>
|
||||
|
||||
#endif
|
@@ -1,24 +1,18 @@
|
||||
#ifndef _ASM_POWERPC_SWAB_H
|
||||
#define _ASM_POWERPC_SWAB_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.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_SWAB_H
|
||||
#define _ASM_POWERPC_SWAB_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <uapi/asm/swab.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
#ifndef __powerpc64__
|
||||
#define __SWAB_64_THRU_32__
|
||||
#endif /* __powerpc64__ */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
static __inline__ __u16 ld_le16(const volatile __u16 *addr)
|
||||
{
|
||||
__u16 val;
|
||||
@@ -83,8 +77,5 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 value)
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_SWAB_H */
|
||||
|
@@ -22,4 +22,10 @@ int __init swiotlb_setup_bus_notifier(void);
|
||||
|
||||
extern void pci_dma_dev_setup_swiotlb(struct pci_dev *pdev);
|
||||
|
||||
#ifdef CONFIG_SWIOTLB
|
||||
void swiotlb_detect_4g(void);
|
||||
#else
|
||||
static inline void swiotlb_detect_4g(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_SWIOTLB_H */
|
||||
|
@@ -17,9 +17,6 @@ asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len,
|
||||
asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len,
|
||||
unsigned long prot, unsigned long flags,
|
||||
unsigned long fd, unsigned long pgoff);
|
||||
asmlinkage int sys_execve(unsigned long a0, unsigned long a1,
|
||||
unsigned long a2, unsigned long a3, unsigned long a4,
|
||||
unsigned long a5, struct pt_regs *regs);
|
||||
asmlinkage int sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
int __user *parent_tidp, void __user *child_threadptr,
|
||||
int __user *child_tidp, int p6, struct pt_regs *regs);
|
||||
|
@@ -1,210 +0,0 @@
|
||||
#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 */
|
@@ -1,6 +1,3 @@
|
||||
#ifndef _ASM_POWERPC_TERMIOS_H
|
||||
#define _ASM_POWERPC_TERMIOS_H
|
||||
|
||||
/*
|
||||
* Liberally adapted from alpha/termios.h. In particular, the c_cc[]
|
||||
* fields have been reordered so that termio & termios share the
|
||||
@@ -12,74 +9,14 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_TERMIOS_H
|
||||
#define _ASM_POWERPC_TERMIOS_H
|
||||
|
||||
#include <asm/ioctls.h>
|
||||
#include <asm/termbits.h>
|
||||
#include <uapi/asm/termios.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
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/* ^C ^\ del ^U ^D 1 0 0 0 0 ^W ^R ^Z ^Q ^S ^V ^U */
|
||||
#define INIT_C_CC "\003\034\177\025\004\001\000\000\000\000\027\022\032\021\023\026\025"
|
||||
#endif
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm-generic/termios-base.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_TERMIOS_H */
|
||||
|
@@ -102,7 +102,10 @@ static inline struct thread_info *current_thread_info(void)
|
||||
#define TIF_RESTOREALL 11 /* Restore all regs (implies NOERROR) */
|
||||
#define TIF_NOERROR 12 /* Force successful syscall return */
|
||||
#define TIF_NOTIFY_RESUME 13 /* callback before returning to user */
|
||||
#define TIF_UPROBE 14 /* breakpointed or single-stepping */
|
||||
#define TIF_SYSCALL_TRACEPOINT 15 /* syscall tracepoint instrumentation */
|
||||
#define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation
|
||||
for stack store? */
|
||||
|
||||
/* as above, but as bit values */
|
||||
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
|
||||
@@ -118,12 +121,14 @@ static inline struct thread_info *current_thread_info(void)
|
||||
#define _TIF_RESTOREALL (1<<TIF_RESTOREALL)
|
||||
#define _TIF_NOERROR (1<<TIF_NOERROR)
|
||||
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
|
||||
#define _TIF_UPROBE (1<<TIF_UPROBE)
|
||||
#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT)
|
||||
#define _TIF_EMULATE_STACK_STORE (1<<TIF_EMULATE_STACK_STORE)
|
||||
#define _TIF_SYSCALL_T_OR_A (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \
|
||||
_TIF_SECCOMP | _TIF_SYSCALL_TRACEPOINT)
|
||||
|
||||
#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
|
||||
_TIF_NOTIFY_RESUME)
|
||||
_TIF_NOTIFY_RESUME | _TIF_UPROBE)
|
||||
#define _TIF_PERSYSCALL_MASK (_TIF_RESTOREALL|_TIF_NOERROR)
|
||||
|
||||
/* Bits in local_flags */
|
||||
@@ -177,6 +182,8 @@ static inline bool test_thread_local_flags(unsigned int flags)
|
||||
#define is_32bit_task() (1)
|
||||
#endif
|
||||
|
||||
#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
@@ -95,7 +95,7 @@ struct ppc64_tlb_batch {
|
||||
unsigned long index;
|
||||
struct mm_struct *mm;
|
||||
real_pte_t pte[PPC64_TLB_BATCH_NR];
|
||||
unsigned long vaddr[PPC64_TLB_BATCH_NR];
|
||||
unsigned long vpn[PPC64_TLB_BATCH_NR];
|
||||
unsigned int psize;
|
||||
int ssize;
|
||||
};
|
||||
@@ -103,9 +103,6 @@ DECLARE_PER_CPU(struct ppc64_tlb_batch, ppc64_tlb_batch);
|
||||
|
||||
extern void __flush_tlb_pending(struct ppc64_tlb_batch *batch);
|
||||
|
||||
extern void hpte_need_flush(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, unsigned long pte, int huge);
|
||||
|
||||
#define __HAVE_ARCH_ENTER_LAZY_MMU_MODE
|
||||
|
||||
static inline void arch_enter_lazy_mmu_mode(void)
|
||||
@@ -127,7 +124,7 @@ static inline void arch_leave_lazy_mmu_mode(void)
|
||||
#define arch_flush_lazy_mmu_mode() do {} while (0)
|
||||
|
||||
|
||||
extern void flush_hash_page(unsigned long va, real_pte_t pte, int psize,
|
||||
extern void flush_hash_page(unsigned long vpn, real_pte_t pte, int psize,
|
||||
int ssize, int local);
|
||||
extern void flush_hash_range(unsigned long number, int local);
|
||||
|
||||
|
@@ -1,22 +1,3 @@
|
||||
#ifndef _ASM_POWERPC_TYPES_H
|
||||
#define _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__
|
||||
|
||||
/*
|
||||
* This file is never included by application software unless
|
||||
* explicitly requested (e.g., via linux/types.h) in which case the
|
||||
@@ -29,14 +10,11 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_TYPES_H
|
||||
#define _ASM_POWERPC_TYPES_H
|
||||
|
||||
typedef struct {
|
||||
__u32 u[4];
|
||||
} __attribute__((aligned(16))) __vector128;
|
||||
#include <uapi/asm/types.h>
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
typedef __vector128 vector128;
|
||||
@@ -49,6 +27,4 @@ typedef struct {
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_TYPES_H */
|
||||
|
@@ -98,11 +98,6 @@ struct exception_table_entry {
|
||||
* PowerPC, we can just do these as direct assignments. (Of course, the
|
||||
* exception handling means that it's no longer "just"...)
|
||||
*
|
||||
* The "user64" versions of the user access functions are versions that
|
||||
* allow access of 64-bit data. The "get_user" functions do not
|
||||
* properly handle 64-bit data because the value gets down cast to a long.
|
||||
* The "put_user" functions already handle 64-bit data properly but we add
|
||||
* "user64" versions for completeness
|
||||
*/
|
||||
#define get_user(x, ptr) \
|
||||
__get_user_check((x), (ptr), sizeof(*(ptr)))
|
||||
@@ -114,12 +109,6 @@ struct exception_table_entry {
|
||||
#define __put_user(x, ptr) \
|
||||
__put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
|
||||
|
||||
#ifndef __powerpc64__
|
||||
#define __get_user64(x, ptr) \
|
||||
__get_user64_nocheck((x), (ptr), sizeof(*(ptr)))
|
||||
#define __put_user64(x, ptr) __put_user(x, ptr)
|
||||
#endif
|
||||
|
||||
#define __get_user_inatomic(x, ptr) \
|
||||
__get_user_nosleep((x), (ptr), sizeof(*(ptr)))
|
||||
#define __put_user_inatomic(x, ptr) \
|
||||
|
@@ -1,40 +0,0 @@
|
||||
#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 */
|
@@ -1,6 +1,3 @@
|
||||
#ifndef _ASM_POWERPC_UNISTD_H_
|
||||
#define _ASM_POWERPC_UNISTD_H_
|
||||
|
||||
/*
|
||||
* This file contains the system call numbers.
|
||||
*
|
||||
@@ -9,374 +6,11 @@
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_UNISTD_H_
|
||||
#define _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
|
||||
#include <uapi/asm/unistd.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define __NR_syscalls 353
|
||||
|
||||
@@ -421,6 +55,8 @@
|
||||
#define __ARCH_WANT_SYS_NEWFSTATAT
|
||||
#define __ARCH_WANT_COMPAT_SYS_SENDFILE
|
||||
#endif
|
||||
#define __ARCH_WANT_SYS_EXECVE
|
||||
#define __ARCH_WANT_KERNEL_EXECVE
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
@@ -429,6 +65,4 @@
|
||||
asmlinkage long x (void) __attribute__((weak,alias("sys_ni_syscall")))
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ASM_POWERPC_UNISTD_H_ */
|
||||
|
54
arch/powerpc/include/asm/uprobes.h
Normal file
54
arch/powerpc/include/asm/uprobes.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef _ASM_UPROBES_H
|
||||
#define _ASM_UPROBES_H
|
||||
/*
|
||||
* User-space Probes (UProbes) for powerpc
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Copyright IBM Corporation, 2007-2012
|
||||
*
|
||||
* Adapted from the x86 port by Ananth N Mavinakayanahalli <ananth@in.ibm.com>
|
||||
*/
|
||||
|
||||
#include <linux/notifier.h>
|
||||
#include <asm/probes.h>
|
||||
|
||||
typedef ppc_opcode_t uprobe_opcode_t;
|
||||
|
||||
#define MAX_UINSN_BYTES 4
|
||||
#define UPROBE_XOL_SLOT_BYTES (MAX_UINSN_BYTES)
|
||||
|
||||
/* The following alias is needed for reference from arch-agnostic code */
|
||||
#define UPROBE_SWBP_INSN BREAKPOINT_INSTRUCTION
|
||||
#define UPROBE_SWBP_INSN_SIZE 4 /* swbp insn size in bytes */
|
||||
|
||||
struct arch_uprobe {
|
||||
union {
|
||||
u8 insn[MAX_UINSN_BYTES];
|
||||
u32 ainsn;
|
||||
};
|
||||
};
|
||||
|
||||
struct arch_uprobe_task {
|
||||
unsigned long saved_trap_nr;
|
||||
};
|
||||
|
||||
extern int arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long addr);
|
||||
extern int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
||||
extern int arch_uprobe_post_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
||||
extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
|
||||
extern int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
|
||||
extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
|
||||
#endif /* _ASM_UPROBES_H */
|
Reference in New Issue
Block a user