mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[PATCH] powerpc: Move various ppc64 files with no ppc32 equivalent to powerpc
This patch moves a bunch of files from arch/ppc64 and
include/asm-ppc64 which have no equivalents in ppc32 code into
arch/powerpc and include/asm-powerpc. The file affected are:
abs_addr.h
compat.h
lppaca.h
paca.h
tce.h
cpu_setup_power4.S
ioctl32.c
firmware.c
pacaData.c
The only changes apart from the move and corresponding Makefile
changes are:
- #ifndef/#define in includes updated to _ASM_POWERPC_ form
- trailing whitespace removed
- comments giving full paths removed
- pacaData.c renamed paca.c to remove studlyCaps
- Misplaced { moved in lppaca.h
Built and booted on POWER5 LPAR (ARCH=powerpc and ARCH=ppc64), built
for 32-bit powermac (ARCH=powerpc).
Signed-off-by: David Gibson <[email protected]>
Signed-off-by: Paul Mackerras <[email protected]>
This commit is contained in:
parent
584224e409
commit
8882a4da1c
11 changed files with 35 additions and 39 deletions
73
include/asm-powerpc/abs_addr.h
Normal file
73
include/asm-powerpc/abs_addr.h
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
#ifndef _ASM_POWERPC_ABS_ADDR_H
|
||||
#define _ASM_POWERPC_ABS_ADDR_H
|
||||
|
||||
#include <linux/config.h>
|
||||
|
||||
/*
|
||||
* 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 <asm/types.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/lmb.h>
|
||||
#include <asm/firmware.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)
|
||||
{
|
||||
unsigned long chunk;
|
||||
|
||||
/* This is a no-op on non-iSeries */
|
||||
if (!firmware_has_feature(FW_FEATURE_ISERIES))
|
||||
return pa;
|
||||
|
||||
chunk = addr_to_chunk(pa);
|
||||
|
||||
if (chunk < mschunks_map.num_chunks)
|
||||
chunk = mschunks_map.mapping[chunk];
|
||||
|
||||
return chunk_to_addr(chunk) + (pa & MSCHUNKS_OFFSET_MASK);
|
||||
}
|
||||
|
||||
/* Convenience macros */
|
||||
#define virt_to_abs(va) phys_to_abs(__pa(va))
|
||||
#define abs_to_virt(aa) __va(aa)
|
||||
|
||||
/*
|
||||
* Converts Virtual Address to Real Address for
|
||||
* Legacy iSeries Hypervisor calls
|
||||
*/
|
||||
#define iseries_hv_addr(virtaddr) \
|
||||
(0x8000000000000000 | virt_to_abs(virtaddr))
|
||||
|
||||
#endif /* _ASM_POWERPC_ABS_ADDR_H */
|
||||
205
include/asm-powerpc/compat.h
Normal file
205
include/asm-powerpc/compat.h
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
#ifndef _ASM_POWERPC_COMPAT_H
|
||||
#define _ASM_POWERPC_COMPAT_H
|
||||
/*
|
||||
* Architecture specific compatibility types
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#define COMPAT_USER_HZ 100
|
||||
|
||||
typedef u32 compat_size_t;
|
||||
typedef s32 compat_ssize_t;
|
||||
typedef s32 compat_time_t;
|
||||
typedef s32 compat_clock_t;
|
||||
typedef s32 compat_pid_t;
|
||||
typedef u32 __compat_uid_t;
|
||||
typedef u32 __compat_gid_t;
|
||||
typedef u32 __compat_uid32_t;
|
||||
typedef u32 __compat_gid32_t;
|
||||
typedef u32 compat_mode_t;
|
||||
typedef u32 compat_ino_t;
|
||||
typedef u32 compat_dev_t;
|
||||
typedef s32 compat_off_t;
|
||||
typedef s64 compat_loff_t;
|
||||
typedef s16 compat_nlink_t;
|
||||
typedef u16 compat_ipc_pid_t;
|
||||
typedef s32 compat_daddr_t;
|
||||
typedef u32 compat_caddr_t;
|
||||
typedef __kernel_fsid_t compat_fsid_t;
|
||||
typedef s32 compat_key_t;
|
||||
typedef s32 compat_timer_t;
|
||||
|
||||
typedef s32 compat_int_t;
|
||||
typedef s32 compat_long_t;
|
||||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
|
||||
struct compat_timespec {
|
||||
compat_time_t tv_sec;
|
||||
s32 tv_nsec;
|
||||
};
|
||||
|
||||
struct compat_timeval {
|
||||
compat_time_t tv_sec;
|
||||
s32 tv_usec;
|
||||
};
|
||||
|
||||
struct compat_stat {
|
||||
compat_dev_t st_dev;
|
||||
compat_ino_t st_ino;
|
||||
compat_mode_t st_mode;
|
||||
compat_nlink_t st_nlink;
|
||||
__compat_uid32_t st_uid;
|
||||
__compat_gid32_t st_gid;
|
||||
compat_dev_t st_rdev;
|
||||
compat_off_t st_size;
|
||||
compat_off_t st_blksize;
|
||||
compat_off_t st_blocks;
|
||||
compat_time_t st_atime;
|
||||
u32 st_atime_nsec;
|
||||
compat_time_t st_mtime;
|
||||
u32 st_mtime_nsec;
|
||||
compat_time_t st_ctime;
|
||||
u32 st_ctime_nsec;
|
||||
u32 __unused4[2];
|
||||
};
|
||||
|
||||
struct compat_flock {
|
||||
short l_type;
|
||||
short l_whence;
|
||||
compat_off_t l_start;
|
||||
compat_off_t l_len;
|
||||
compat_pid_t l_pid;
|
||||
};
|
||||
|
||||
#define F_GETLK64 12 /* using 'struct flock64' */
|
||||
#define F_SETLK64 13
|
||||
#define F_SETLKW64 14
|
||||
|
||||
struct compat_flock64 {
|
||||
short l_type;
|
||||
short l_whence;
|
||||
compat_loff_t l_start;
|
||||
compat_loff_t l_len;
|
||||
compat_pid_t l_pid;
|
||||
};
|
||||
|
||||
struct compat_statfs {
|
||||
int f_type;
|
||||
int f_bsize;
|
||||
int f_blocks;
|
||||
int f_bfree;
|
||||
int f_bavail;
|
||||
int f_files;
|
||||
int f_ffree;
|
||||
compat_fsid_t f_fsid;
|
||||
int f_namelen; /* SunOS ignores this field. */
|
||||
int f_frsize;
|
||||
int f_spare[5];
|
||||
};
|
||||
|
||||
#define COMPAT_RLIM_OLD_INFINITY 0x7fffffff
|
||||
#define COMPAT_RLIM_INFINITY 0xffffffff
|
||||
|
||||
typedef u32 compat_old_sigset_t;
|
||||
|
||||
#define _COMPAT_NSIG 64
|
||||
#define _COMPAT_NSIG_BPW 32
|
||||
|
||||
typedef u32 compat_sigset_word;
|
||||
|
||||
#define COMPAT_OFF_T_MAX 0x7fffffff
|
||||
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
|
||||
|
||||
/*
|
||||
* A pointer passed in from user mode. This should not
|
||||
* be used for syscall parameters, just declare them
|
||||
* as pointers because the syscall entry code will have
|
||||
* appropriately comverted them already.
|
||||
*/
|
||||
typedef u32 compat_uptr_t;
|
||||
|
||||
static inline void __user *compat_ptr(compat_uptr_t uptr)
|
||||
{
|
||||
return (void __user *)(unsigned long)uptr;
|
||||
}
|
||||
|
||||
static inline void __user *compat_alloc_user_space(long len)
|
||||
{
|
||||
struct pt_regs *regs = current->thread.regs;
|
||||
unsigned long usp = regs->gpr[1];
|
||||
|
||||
/*
|
||||
* We cant access below the stack pointer in the 32bit ABI and
|
||||
* can access 288 bytes in the 64bit ABI
|
||||
*/
|
||||
if (!(test_thread_flag(TIF_32BIT)))
|
||||
usp -= 288;
|
||||
|
||||
return (void __user *) (usp - len);
|
||||
}
|
||||
|
||||
/*
|
||||
* ipc64_perm is actually 32/64bit clean but since the compat layer refers to
|
||||
* it we may as well define it.
|
||||
*/
|
||||
struct compat_ipc64_perm {
|
||||
compat_key_t key;
|
||||
__compat_uid_t uid;
|
||||
__compat_gid_t gid;
|
||||
__compat_uid_t cuid;
|
||||
__compat_gid_t cgid;
|
||||
compat_mode_t mode;
|
||||
unsigned int seq;
|
||||
unsigned int __pad2;
|
||||
unsigned long __unused1; /* yes they really are 64bit pads */
|
||||
unsigned long __unused2;
|
||||
};
|
||||
|
||||
struct compat_semid64_ds {
|
||||
struct compat_ipc64_perm sem_perm;
|
||||
unsigned int __unused1;
|
||||
compat_time_t sem_otime;
|
||||
unsigned int __unused2;
|
||||
compat_time_t sem_ctime;
|
||||
compat_ulong_t sem_nsems;
|
||||
compat_ulong_t __unused3;
|
||||
compat_ulong_t __unused4;
|
||||
};
|
||||
|
||||
struct compat_msqid64_ds {
|
||||
struct compat_ipc64_perm msg_perm;
|
||||
unsigned int __unused1;
|
||||
compat_time_t msg_stime;
|
||||
unsigned int __unused2;
|
||||
compat_time_t msg_rtime;
|
||||
unsigned int __unused3;
|
||||
compat_time_t msg_ctime;
|
||||
compat_ulong_t msg_cbytes;
|
||||
compat_ulong_t msg_qnum;
|
||||
compat_ulong_t msg_qbytes;
|
||||
compat_pid_t msg_lspid;
|
||||
compat_pid_t msg_lrpid;
|
||||
compat_ulong_t __unused4;
|
||||
compat_ulong_t __unused5;
|
||||
};
|
||||
|
||||
struct compat_shmid64_ds {
|
||||
struct compat_ipc64_perm shm_perm;
|
||||
unsigned int __unused1;
|
||||
compat_time_t shm_atime;
|
||||
unsigned int __unused2;
|
||||
compat_time_t shm_dtime;
|
||||
unsigned int __unused3;
|
||||
compat_time_t shm_ctime;
|
||||
unsigned int __unused4;
|
||||
compat_size_t shm_segsz;
|
||||
compat_pid_t shm_cpid;
|
||||
compat_pid_t shm_lpid;
|
||||
compat_ulong_t shm_nattch;
|
||||
compat_ulong_t __unused5;
|
||||
compat_ulong_t __unused6;
|
||||
};
|
||||
|
||||
#endif /* _ASM_POWERPC_COMPAT_H */
|
||||
131
include/asm-powerpc/lppaca.h
Normal file
131
include/asm-powerpc/lppaca.h
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
/*
|
||||
* lppaca.h
|
||||
* Copyright (C) 2001 Mike Corrigan IBM 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; 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
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_LPPACA_H
|
||||
#define _ASM_POWERPC_LPPACA_H
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// This control block contains the data that is shared between the
|
||||
// hypervisor (PLIC) and the OS.
|
||||
//
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
#include <asm/types.h>
|
||||
|
||||
struct lppaca {
|
||||
//=============================================================================
|
||||
// CACHE_LINE_1 0x0000 - 0x007F Contains read-only data
|
||||
// NOTE: The xDynXyz fields are fields that will be dynamically changed by
|
||||
// PLIC when preparing to bring a processor online or when dispatching a
|
||||
// virtual processor!
|
||||
//=============================================================================
|
||||
u32 desc; // Eye catcher 0xD397D781 x00-x03
|
||||
u16 size; // Size of this struct x04-x05
|
||||
u16 reserved1; // Reserved x06-x07
|
||||
u16 reserved2:14; // Reserved x08-x09
|
||||
u8 shared_proc:1; // Shared processor indicator ...
|
||||
u8 secondary_thread:1; // Secondary thread indicator ...
|
||||
volatile u8 dyn_proc_status:8; // Dynamic Status of this proc x0A-x0A
|
||||
u8 secondary_thread_count; // Secondary thread count x0B-x0B
|
||||
volatile u16 dyn_hv_phys_proc_index;// Dynamic HV Physical Proc Index0C-x0D
|
||||
volatile u16 dyn_hv_log_proc_index;// Dynamic HV Logical Proc Indexx0E-x0F
|
||||
u32 decr_val; // Value for Decr programming x10-x13
|
||||
u32 pmc_val; // Value for PMC regs x14-x17
|
||||
volatile u32 dyn_hw_node_id; // Dynamic Hardware Node id x18-x1B
|
||||
volatile u32 dyn_hw_proc_id; // Dynamic Hardware Proc Id x1C-x1F
|
||||
volatile u32 dyn_pir; // Dynamic ProcIdReg value x20-x23
|
||||
u32 dsei_data; // DSEI data x24-x27
|
||||
u64 sprg3; // SPRG3 value x28-x2F
|
||||
u8 reserved3[80]; // Reserved x30-x7F
|
||||
|
||||
//=============================================================================
|
||||
// CACHE_LINE_2 0x0080 - 0x00FF Contains local read-write data
|
||||
//=============================================================================
|
||||
// This Dword contains a byte for each type of interrupt that can occur.
|
||||
// The IPI is a count while the others are just a binary 1 or 0.
|
||||
union {
|
||||
u64 any_int;
|
||||
struct {
|
||||
u16 reserved; // Reserved - cleared by #mpasmbl
|
||||
u8 xirr_int; // Indicates xXirrValue is valid or Immed IO
|
||||
u8 ipi_cnt; // IPI Count
|
||||
u8 decr_int; // DECR interrupt occurred
|
||||
u8 pdc_int; // PDC interrupt occurred
|
||||
u8 quantum_int; // Interrupt quantum reached
|
||||
u8 old_plic_deferred_ext_int; // Old PLIC has a deferred XIRR pending
|
||||
} fields;
|
||||
} int_dword;
|
||||
|
||||
// Whenever any fields in this Dword are set then PLIC will defer the
|
||||
// processing of external interrupts. Note that PLIC will store the
|
||||
// XIRR directly into the xXirrValue field so that another XIRR will
|
||||
// not be presented until this one clears. The layout of the low
|
||||
// 4-bytes of this Dword is upto SLIC - PLIC just checks whether the
|
||||
// entire Dword is zero or not. A non-zero value in the low order
|
||||
// 2-bytes will result in SLIC being granted the highest thread
|
||||
// priority upon return. A 0 will return to SLIC as medium priority.
|
||||
u64 plic_defer_ints_area; // Entire Dword
|
||||
|
||||
// Used to pass the real SRR0/1 from PLIC to SLIC as well as to
|
||||
// pass the target SRR0/1 from SLIC to PLIC on a SetAsrAndRfid.
|
||||
u64 saved_srr0; // Saved SRR0 x10-x17
|
||||
u64 saved_srr1; // Saved SRR1 x18-x1F
|
||||
|
||||
// Used to pass parms from the OS to PLIC for SetAsrAndRfid
|
||||
u64 saved_gpr3; // Saved GPR3 x20-x27
|
||||
u64 saved_gpr4; // Saved GPR4 x28-x2F
|
||||
u64 saved_gpr5; // Saved GPR5 x30-x37
|
||||
|
||||
u8 reserved4; // Reserved x38-x38
|
||||
u8 cpuctls_task_attrs; // Task attributes for cpuctls x39-x39
|
||||
u8 fpregs_in_use; // FP regs in use x3A-x3A
|
||||
u8 pmcregs_in_use; // PMC regs in use x3B-x3B
|
||||
volatile u32 saved_decr; // Saved Decr Value x3C-x3F
|
||||
volatile u64 emulated_time_base;// Emulated TB for this thread x40-x47
|
||||
volatile u64 cur_plic_latency; // Unaccounted PLIC latency x48-x4F
|
||||
u64 tot_plic_latency; // Accumulated PLIC latency x50-x57
|
||||
u64 wait_state_cycles; // Wait cycles for this proc x58-x5F
|
||||
u64 end_of_quantum; // TB at end of quantum x60-x67
|
||||
u64 pdc_saved_sprg1; // Saved SPRG1 for PMC int x68-x6F
|
||||
u64 pdc_saved_srr0; // Saved SRR0 for PMC int x70-x77
|
||||
volatile u32 virtual_decr; // Virtual DECR for shared procsx78-x7B
|
||||
u16 slb_count; // # of SLBs to maintain x7C-x7D
|
||||
u8 idle; // Indicate OS is idle x7E
|
||||
u8 vmxregs_in_use; // VMX registers in use x7F
|
||||
|
||||
|
||||
//=============================================================================
|
||||
// CACHE_LINE_3 0x0100 - 0x007F: This line is shared with other processors
|
||||
//=============================================================================
|
||||
// This is the yield_count. An "odd" value (low bit on) means that
|
||||
// the processor is yielded (either because of an OS yield or a PLIC
|
||||
// preempt). An even value implies that the processor is currently
|
||||
// executing.
|
||||
// NOTE: This value will ALWAYS be zero for dedicated processors and
|
||||
// will NEVER be zero for shared processors (ie, initialized to a 1).
|
||||
volatile u32 yield_count; // PLIC increments each dispatchx00-x03
|
||||
u8 reserved6[124]; // Reserved x04-x7F
|
||||
|
||||
//=============================================================================
|
||||
// CACHE_LINE_4-5 0x0100 - 0x01FF Contains PMC interrupt data
|
||||
//=============================================================================
|
||||
u8 pmc_save_area[256]; // PMC interrupt Area x00-xFF
|
||||
};
|
||||
|
||||
#endif /* _ASM_POWERPC_LPPACA_H */
|
||||
120
include/asm-powerpc/paca.h
Normal file
120
include/asm-powerpc/paca.h
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* include/asm-powerpc/paca.h
|
||||
*
|
||||
* This control block defines the PACA which defines the processor
|
||||
* specific data for each logical processor on the system.
|
||||
* There are some pointers defined that are utilized by PLIC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_PACA_H
|
||||
#define _ASM_POWERPC_PACA_H
|
||||
|
||||
#include <linux/config.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/lppaca.h>
|
||||
#include <asm/iseries/it_lp_reg_save.h>
|
||||
#include <asm/mmu.h>
|
||||
|
||||
register struct paca_struct *local_paca asm("r13");
|
||||
#define get_paca() local_paca
|
||||
|
||||
struct task_struct;
|
||||
|
||||
/*
|
||||
* Defines the layout of the paca.
|
||||
*
|
||||
* This structure is not directly accessed by firmware or the service
|
||||
* processor except for the first two pointers that point to the
|
||||
* lppaca area and the ItLpRegSave area for this CPU. Both the
|
||||
* lppaca and ItLpRegSave objects are currently contained within the
|
||||
* PACA but they do not need to be.
|
||||
*/
|
||||
struct paca_struct {
|
||||
/*
|
||||
* Because hw_cpu_id, unlike other paca fields, is accessed
|
||||
* routinely from other CPUs (from the IRQ code), we stick to
|
||||
* read-only (after boot) fields in the first cacheline to
|
||||
* avoid cacheline bouncing.
|
||||
*/
|
||||
|
||||
/*
|
||||
* MAGIC: These first two pointers can't be moved - they're
|
||||
* accessed by the firmware
|
||||
*/
|
||||
struct lppaca *lppaca_ptr; /* Pointer to LpPaca for PLIC */
|
||||
struct ItLpRegSave *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
|
||||
|
||||
/*
|
||||
* MAGIC: the spinlock functions in arch/ppc64/lib/locks.c
|
||||
* load lock_token and paca_index with a single lwz
|
||||
* instruction. They must travel together and be properly
|
||||
* aligned.
|
||||
*/
|
||||
u16 lock_token; /* Constant 0x8000, used in locks */
|
||||
u16 paca_index; /* Logical processor number */
|
||||
|
||||
u32 default_decr; /* Default decrementer value */
|
||||
u64 kernel_toc; /* Kernel TOC address */
|
||||
u64 stab_real; /* Absolute address of segment table */
|
||||
u64 stab_addr; /* Virtual address of segment table */
|
||||
void *emergency_sp; /* pointer to emergency stack */
|
||||
s16 hw_cpu_id; /* Physical processor number */
|
||||
u8 cpu_start; /* At startup, processor spins until */
|
||||
/* this becomes non-zero. */
|
||||
|
||||
/*
|
||||
* Now, starting in cacheline 2, the exception save areas
|
||||
*/
|
||||
/* used for most interrupts/exceptions */
|
||||
u64 exgen[10] __attribute__((aligned(0x80)));
|
||||
u64 exmc[10]; /* used for machine checks */
|
||||
u64 exslb[10]; /* used for SLB/segment table misses
|
||||
* on the linear mapping */
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
pgd_t *pgdir;
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
|
||||
mm_context_t context;
|
||||
u16 slb_cache[SLB_CACHE_ENTRIES];
|
||||
u16 slb_cache_ptr;
|
||||
|
||||
/*
|
||||
* then miscellaneous read-write fields
|
||||
*/
|
||||
struct task_struct *__current; /* Pointer to current */
|
||||
u64 kstack; /* Saved Kernel stack addr */
|
||||
u64 stab_rr; /* stab/slb round-robin counter */
|
||||
u64 next_jiffy_update_tb; /* TB value for next jiffy update */
|
||||
u64 saved_r1; /* r1 save for RTAS calls */
|
||||
u64 saved_msr; /* MSR saved here by enter_rtas */
|
||||
u8 proc_enabled; /* irq soft-enable flag */
|
||||
|
||||
/* not yet used */
|
||||
u64 exdsi[8]; /* used for linear mapping hash table misses */
|
||||
|
||||
/*
|
||||
* iSeries structure which the hypervisor knows about -
|
||||
* this structure should not cross a page boundary.
|
||||
* The vpa_init/register_vpa call is now known to fail if the
|
||||
* lppaca structure crosses a page boundary.
|
||||
* The lppaca is also used on POWER5 pSeries boxes.
|
||||
* The lppaca is 640 bytes long, and cannot readily change
|
||||
* since the hypervisor knows its layout, so a 1kB
|
||||
* alignment will suffice to ensure that it doesn't
|
||||
* cross a page boundary.
|
||||
*/
|
||||
struct lppaca lppaca __attribute__((__aligned__(0x400)));
|
||||
#ifdef CONFIG_PPC_ISERIES
|
||||
struct ItLpRegSave reg_save;
|
||||
#endif
|
||||
};
|
||||
|
||||
extern struct paca_struct paca[];
|
||||
|
||||
#endif /* _ASM_POWERPC_PACA_H */
|
||||
64
include/asm-powerpc/tce.h
Normal file
64
include/asm-powerpc/tce.h
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation
|
||||
* Rewrite, cleanup:
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM 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; 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
|
||||
*/
|
||||
|
||||
#ifndef _ASM_POWERPC_TCE_H
|
||||
#define _ASM_POWERPC_TCE_H
|
||||
|
||||
/*
|
||||
* Tces come in two formats, one for the virtual bus and a different
|
||||
* format for PCI
|
||||
*/
|
||||
#define TCE_VB 0
|
||||
#define TCE_PCI 1
|
||||
|
||||
/* TCE page size is 4096 bytes (1 << 12) */
|
||||
|
||||
#define TCE_SHIFT 12
|
||||
#define TCE_PAGE_SIZE (1 << TCE_SHIFT)
|
||||
#define TCE_PAGE_FACTOR (PAGE_SHIFT - TCE_SHIFT)
|
||||
|
||||
|
||||
/* tce_entry
|
||||
* Used by pSeries (SMP) and iSeries/pSeries LPAR, but there it's
|
||||
* abstracted so layout is irrelevant.
|
||||
*/
|
||||
union tce_entry {
|
||||
unsigned long te_word;
|
||||
struct {
|
||||
unsigned int tb_cacheBits :6; /* Cache hash bits - not used */
|
||||
unsigned int tb_rsvd :6;
|
||||
unsigned long tb_rpn :40; /* Real page number */
|
||||
unsigned int tb_valid :1; /* Tce is valid (vb only) */
|
||||
unsigned int tb_allio :1; /* Tce is valid for all lps (vb only) */
|
||||
unsigned int tb_lpindex :8; /* LpIndex for user of TCE (vb only) */
|
||||
unsigned int tb_pciwr :1; /* Write allowed (pci only) */
|
||||
unsigned int tb_rdwr :1; /* Read allowed (pci), Write allowed (vb) */
|
||||
} te_bits;
|
||||
#define te_cacheBits te_bits.tb_cacheBits
|
||||
#define te_rpn te_bits.tb_rpn
|
||||
#define te_valid te_bits.tb_valid
|
||||
#define te_allio te_bits.tb_allio
|
||||
#define te_lpindex te_bits.tb_lpindex
|
||||
#define te_pciwr te_bits.tb_pciwr
|
||||
#define te_rdwr te_bits.tb_rdwr
|
||||
};
|
||||
|
||||
|
||||
#endif /* _ASM_POWERPC_TCE_H */
|
||||
Loading…
Reference in a new issue