[PATCH] powerpc: Move various ppc64 files with no ppc32 equivalent to powerpc
authorDavid Gibson <david@gibson.dropbear.id.au>
Wed, 9 Nov 2005 02:38:01 +0000 (13:38 +1100)
committerPaul Mackerras <paulus@samba.org>
Thu, 10 Nov 2005 00:24:04 +0000 (11:24 +1100)
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 <david@gibson.dropbear.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
20 files changed:
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/cpu_setup_power4.S [new file with mode: 0644]
arch/powerpc/kernel/firmware.c [new file with mode: 0644]
arch/powerpc/kernel/ioctl32.c [new file with mode: 0644]
arch/powerpc/kernel/paca.c [new file with mode: 0644]
arch/ppc64/kernel/Makefile
arch/ppc64/kernel/cpu_setup_power4.S [deleted file]
arch/ppc64/kernel/firmware.c [deleted file]
arch/ppc64/kernel/ioctl32.c [deleted file]
arch/ppc64/kernel/pacaData.c [deleted file]
include/asm-powerpc/abs_addr.h [new file with mode: 0644]
include/asm-powerpc/compat.h [new file with mode: 0644]
include/asm-powerpc/lppaca.h [new file with mode: 0644]
include/asm-powerpc/paca.h [new file with mode: 0644]
include/asm-powerpc/tce.h [new file with mode: 0644]
include/asm-ppc64/abs_addr.h [deleted file]
include/asm-ppc64/compat.h [deleted file]
include/asm-ppc64/lppaca.h [deleted file]
include/asm-ppc64/paca.h [deleted file]
include/asm-ppc64/tce.h [deleted file]

index b3ae2993efb88b97036642595b85479d5d3c0b87..103cb8128ef4e9ed33f51ca0293c3cd0014fe576 100644 (file)
@@ -4,6 +4,7 @@
 
 ifeq ($(CONFIG_PPC64),y)
 EXTRA_CFLAGS   += -mno-minimal-toc
+CFLAGS_ioctl32.o += -Ifs/
 endif
 ifeq ($(CONFIG_PPC32),y)
 CFLAGS_prom_init.o      += -fPIC
@@ -13,7 +14,9 @@ endif
 obj-y                          := semaphore.o cputable.o ptrace.o syscalls.o \
                                   signal_32.o pmc.o
 obj-$(CONFIG_PPC64)            += setup_64.o binfmt_elf32.o sys_ppc32.o \
-                                  signal_64.o ptrace32.o systbl.o
+                                  signal_64.o ptrace32.o systbl.o \
+                                  paca.o ioctl32.o cpu_setup_power4.o \
+                                  firmware.o
 obj-$(CONFIG_ALTIVEC)          += vecemu.o vector.o
 obj-$(CONFIG_POWER4)           += idle_power4.o
 obj-$(CONFIG_PPC_OF)           += of_device.o
diff --git a/arch/powerpc/kernel/cpu_setup_power4.S b/arch/powerpc/kernel/cpu_setup_power4.S
new file mode 100644 (file)
index 0000000..cca942f
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * This file contains low level CPU setup functions.
+ *    Copyright (C) 2003 Benjamin Herrenschmidt (benh@kernel.crashing.org)
+ *
+ * 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/config.h>
+#include <asm/processor.h>
+#include <asm/page.h>
+#include <asm/cputable.h>
+#include <asm/ppc_asm.h>
+#include <asm/asm-offsets.h>
+#include <asm/cache.h>
+
+_GLOBAL(__970_cpu_preinit)
+       /*
+        * Do nothing if not running in HV mode
+        */
+       mfmsr   r0
+       rldicl. r0,r0,4,63
+       beqlr
+
+       /*
+        * Deal only with PPC970 and PPC970FX.
+        */
+       mfspr   r0,SPRN_PVR
+       srwi    r0,r0,16
+       cmpwi   r0,0x39
+       beq     1f
+       cmpwi   r0,0x3c
+       beq     1f
+       cmpwi   r0,0x44
+       bnelr
+1:
+
+       /* Make sure HID4:rm_ci is off before MMU is turned off, that large
+        * pages are enabled with HID4:61 and clear HID5:DCBZ_size and
+        * HID5:DCBZ32_ill
+        */
+       li      r0,0
+       mfspr   r3,SPRN_HID4
+       rldimi  r3,r0,40,23     /* clear bit 23 (rm_ci) */
+       rldimi  r3,r0,2,61      /* clear bit 61 (lg_pg_en) */
+       sync
+       mtspr   SPRN_HID4,r3
+       isync
+       sync
+       mfspr   r3,SPRN_HID5
+       rldimi  r3,r0,6,56      /* clear bits 56 & 57 (DCBZ*) */
+       sync
+       mtspr   SPRN_HID5,r3
+       isync
+       sync
+
+       /* Setup some basic HID1 features */
+       mfspr   r0,SPRN_HID1
+       li      r3,0x1200               /* enable i-fetch cacheability */
+       sldi    r3,r3,44                /* and prefetch */
+       or      r0,r0,r3
+       mtspr   SPRN_HID1,r0
+       mtspr   SPRN_HID1,r0
+       isync
+
+       /* Clear HIOR */
+       li      r0,0
+       sync
+       mtspr   SPRN_HIOR,0             /* Clear interrupt prefix */
+       isync
+       blr
+
+_GLOBAL(__setup_cpu_power4)
+       blr
+
+_GLOBAL(__setup_cpu_be)
+        /* Set large page sizes LP=0: 16MB, LP=1: 64KB */
+        addi    r3, 0,  0
+        ori     r3, r3, HID6_LB
+        sldi    r3, r3, 32
+        nor     r3, r3, r3
+        mfspr   r4, SPRN_HID6
+        and     r4, r4, r3
+        addi    r3, 0, 0x02000
+        sldi    r3, r3, 32
+        or      r4, r4, r3
+        mtspr   SPRN_HID6, r4
+       blr
+
+_GLOBAL(__setup_cpu_ppc970)
+       mfspr   r0,SPRN_HID0
+       li      r11,5                   /* clear DOZE and SLEEP */
+       rldimi  r0,r11,52,8             /* set NAP and DPM */
+       mtspr   SPRN_HID0,r0
+       mfspr   r0,SPRN_HID0
+       mfspr   r0,SPRN_HID0
+       mfspr   r0,SPRN_HID0
+       mfspr   r0,SPRN_HID0
+       mfspr   r0,SPRN_HID0
+       mfspr   r0,SPRN_HID0
+       sync
+       isync
+       blr
+
+/* Definitions for the table use to save CPU states */
+#define CS_HID0                0
+#define CS_HID1                8
+#define        CS_HID4         16
+#define CS_HID5                24
+#define CS_SIZE                32
+
+       .data
+       .balign L1_CACHE_BYTES,0
+cpu_state_storage:
+       .space  CS_SIZE
+       .balign L1_CACHE_BYTES,0
+       .text
+
+/* Called in normal context to backup CPU 0 state. This
+ * does not include cache settings. This function is also
+ * called for machine sleep. This does not include the MMU
+ * setup, BATs, etc... but rather the "special" registers
+ * like HID0, HID1, HID4, etc...
+ */
+_GLOBAL(__save_cpu_setup)
+       /* Some CR fields are volatile, we back it up all */
+       mfcr    r7
+
+       /* Get storage ptr */
+       LOADADDR(r5,cpu_state_storage)
+
+       /* We only deal with 970 for now */
+       mfspr   r0,SPRN_PVR
+       srwi    r0,r0,16
+       cmpwi   r0,0x39
+       beq     1f
+       cmpwi   r0,0x3c
+       beq     1f
+       cmpwi   r0,0x44
+       bne     2f
+
+1:     /* Save HID0,1,4 and 5 */
+       mfspr   r3,SPRN_HID0
+       std     r3,CS_HID0(r5)
+       mfspr   r3,SPRN_HID1
+       std     r3,CS_HID1(r5)
+       mfspr   r3,SPRN_HID4
+       std     r3,CS_HID4(r5)
+       mfspr   r3,SPRN_HID5
+       std     r3,CS_HID5(r5)
+
+2:
+       mtcr    r7
+       blr
+
+/* Called with no MMU context (typically MSR:IR/DR off) to
+ * restore CPU state as backed up by the previous
+ * function. This does not include cache setting
+ */
+_GLOBAL(__restore_cpu_setup)
+       /* Get storage ptr (FIXME when using anton reloc as we
+        * are running with translation disabled here
+        */
+       LOADADDR(r5,cpu_state_storage)
+
+       /* We only deal with 970 for now */
+       mfspr   r0,SPRN_PVR
+       srwi    r0,r0,16
+       cmpwi   r0,0x39
+       beq     1f
+       cmpwi   r0,0x3c
+       beq     1f
+       cmpwi   r0,0x44
+       bnelr
+
+1:     /* Before accessing memory, we make sure rm_ci is clear */
+       li      r0,0
+       mfspr   r3,SPRN_HID4
+       rldimi  r3,r0,40,23     /* clear bit 23 (rm_ci) */
+       sync
+       mtspr   SPRN_HID4,r3
+       isync
+       sync
+
+       /* Clear interrupt prefix */
+       li      r0,0
+       sync
+       mtspr   SPRN_HIOR,0
+       isync
+
+       /* Restore HID0 */
+       ld      r3,CS_HID0(r5)
+       sync
+       isync
+       mtspr   SPRN_HID0,r3
+       mfspr   r3,SPRN_HID0
+       mfspr   r3,SPRN_HID0
+       mfspr   r3,SPRN_HID0
+       mfspr   r3,SPRN_HID0
+       mfspr   r3,SPRN_HID0
+       mfspr   r3,SPRN_HID0
+       sync
+       isync
+
+       /* Restore HID1 */
+       ld      r3,CS_HID1(r5)
+       sync
+       isync
+       mtspr   SPRN_HID1,r3
+       mtspr   SPRN_HID1,r3
+       sync
+       isync
+
+       /* Restore HID4 */
+       ld      r3,CS_HID4(r5)
+       sync
+       isync
+       mtspr   SPRN_HID4,r3
+       sync
+       isync
+
+       /* Restore HID5 */
+       ld      r3,CS_HID5(r5)
+       sync
+       isync
+       mtspr   SPRN_HID5,r3
+       sync
+       isync
+       blr
+
diff --git a/arch/powerpc/kernel/firmware.c b/arch/powerpc/kernel/firmware.c
new file mode 100644 (file)
index 0000000..65eae75
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ *  Extracted from cputable.c
+ *
+ *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
+ *
+ *  Modifications for ppc64:
+ *      Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
+ *  Copyright (C) 2005 Stephen Rothwell, 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.
+ */
+
+#include <linux/config.h>
+
+#include <asm/firmware.h>
+
+unsigned long ppc64_firmware_features;
+
+#ifdef CONFIG_PPC_PSERIES
+firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
+       {FW_FEATURE_PFT,                "hcall-pft"},
+       {FW_FEATURE_TCE,                "hcall-tce"},
+       {FW_FEATURE_SPRG0,              "hcall-sprg0"},
+       {FW_FEATURE_DABR,               "hcall-dabr"},
+       {FW_FEATURE_COPY,               "hcall-copy"},
+       {FW_FEATURE_ASR,                "hcall-asr"},
+       {FW_FEATURE_DEBUG,              "hcall-debug"},
+       {FW_FEATURE_PERF,               "hcall-perf"},
+       {FW_FEATURE_DUMP,               "hcall-dump"},
+       {FW_FEATURE_INTERRUPT,          "hcall-interrupt"},
+       {FW_FEATURE_MIGRATE,            "hcall-migrate"},
+       {FW_FEATURE_PERFMON,            "hcall-perfmon"},
+       {FW_FEATURE_CRQ,                "hcall-crq"},
+       {FW_FEATURE_VIO,                "hcall-vio"},
+       {FW_FEATURE_RDMA,               "hcall-rdma"},
+       {FW_FEATURE_LLAN,               "hcall-lLAN"},
+       {FW_FEATURE_BULK,               "hcall-bulk"},
+       {FW_FEATURE_XDABR,              "hcall-xdabr"},
+       {FW_FEATURE_MULTITCE,           "hcall-multi-tce"},
+       {FW_FEATURE_SPLPAR,             "hcall-splpar"},
+};
+#endif
diff --git a/arch/powerpc/kernel/ioctl32.c b/arch/powerpc/kernel/ioctl32.c
new file mode 100644 (file)
index 0000000..3fa6a93
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
+ *
+ * Based on sparc64 ioctl32.c by:
+ *
+ * Copyright (C) 1997-2000  Jakub Jelinek  (jakub@redhat.com)
+ * Copyright (C) 1998  Eddie C. Dost  (ecd@skynet.be)
+ *
+ * ppc64 changes:
+ *
+ * Copyright (C) 2000  Ken Aaker (kdaaker@rchland.vnet.ibm.com)
+ * Copyright (C) 2001  Anton Blanchard (antonb@au.ibm.com)
+ *
+ * These routines maintain argument size conversion between 32bit and 64bit
+ * ioctls.
+ *
+ * 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.
+ */
+
+#define INCLUDES
+#include "compat_ioctl.c"
+#include <linux/syscalls.h>
+
+#define CODE
+#include "compat_ioctl.c"
+
+#define HANDLE_IOCTL(cmd,handler) { cmd, (ioctl_trans_handler_t)handler, NULL },
+#define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd,sys_ioctl)
+
+#define IOCTL_TABLE_START \
+       struct ioctl_trans ioctl_start[] = {
+#define IOCTL_TABLE_END \
+       };
+
+IOCTL_TABLE_START
+#include <linux/compat_ioctl.h>
+#define DECLARES
+#include "compat_ioctl.c"
+
+/* Little p (/dev/rtc, /dev/envctrl, etc.) */
+COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */
+COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */
+
+IOCTL_TABLE_END
+
+int ioctl_table_size = ARRAY_SIZE(ioctl_start);
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
new file mode 100644 (file)
index 0000000..179948e
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * 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/config.h>
+#include <linux/types.h>
+#include <linux/threads.h>
+#include <linux/module.h>
+
+#include <asm/processor.h>
+#include <asm/ptrace.h>
+#include <asm/page.h>
+
+#include <asm/lppaca.h>
+#include <asm/iseries/it_lp_queue.h>
+#include <asm/paca.h>
+
+static union {
+       struct systemcfg        data;
+       u8                      page[PAGE_SIZE];
+} systemcfg_store __attribute__((__section__(".data.page.aligned")));
+struct systemcfg *systemcfg = &systemcfg_store.data;
+EXPORT_SYMBOL(systemcfg);
+
+
+/* This symbol is provided by the linker - let it fill in the paca
+ * field correctly */
+extern unsigned long __toc_start;
+
+/* The Paca is an array with one entry per processor.  Each contains an
+ * lppaca, which contains the information shared between the
+ * hypervisor and Linux.  Each also contains an ItLpRegSave area which
+ * is used by the hypervisor to save registers.
+ * On systems with hardware multi-threading, there are two threads
+ * per processor.  The Paca array must contain an entry for each thread.
+ * The VPD Areas will give a max logical processors = 2 * max physical
+ * processors.  The processor VPD array needs one entry per physical
+ * processor (not thread).
+ */
+#define PACA_INIT_COMMON(number, start, asrr, asrv)                        \
+       .lock_token = 0x8000,                                               \
+       .paca_index = (number),         /* Paca Index */                    \
+       .default_decr = 0x00ff0000,     /* Initial Decr */                  \
+       .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL,             \
+       .stab_real = (asrr),            /* Real pointer to segment table */ \
+       .stab_addr = (asrv),            /* Virt pointer to segment table */ \
+       .cpu_start = (start),           /* Processor start */               \
+       .hw_cpu_id = 0xffff,                                                \
+       .lppaca = {                                                         \
+               .desc = 0xd397d781,     /* "LpPa" */                        \
+               .size = sizeof(struct lppaca),                              \
+               .dyn_proc_status = 2,                                       \
+               .decr_val = 0x00ff0000,                                     \
+               .fpregs_in_use = 1,                                         \
+               .end_of_quantum = 0xfffffffffffffffful,                     \
+               .slb_count = 64,                                            \
+               .vmxregs_in_use = 0,                                        \
+       },                                                                  \
+
+#ifdef CONFIG_PPC_ISERIES
+#define PACA_INIT_ISERIES(number)                                          \
+       .lppaca_ptr = &paca[number].lppaca,                                 \
+       .reg_save_ptr = &paca[number].reg_save,                             \
+       .reg_save = {                                                       \
+               .xDesc = 0xd397d9e2,    /* "LpRS" */                        \
+               .xSize = sizeof(struct ItLpRegSave)                         \
+       }
+
+#define PACA_INIT(number)                                                  \
+{                                                                          \
+       PACA_INIT_COMMON(number, 0, 0, 0)                                   \
+       PACA_INIT_ISERIES(number)                                           \
+}
+
+#define BOOTCPU_PACA_INIT(number)                                          \
+{                                                                          \
+       PACA_INIT_COMMON(number, 1, 0, (u64)&initial_stab)                  \
+       PACA_INIT_ISERIES(number)                                           \
+}
+
+#else
+#define PACA_INIT(number)                                                  \
+{                                                                          \
+       PACA_INIT_COMMON(number, 0, 0, 0)                                   \
+}
+
+#define BOOTCPU_PACA_INIT(number)                                          \
+{                                                                          \
+       PACA_INIT_COMMON(number, 1, STAB0_PHYS_ADDR, (u64)&initial_stab)    \
+}
+#endif
+
+struct paca_struct paca[] = {
+       BOOTCPU_PACA_INIT(0),
+#if NR_CPUS > 1
+       PACA_INIT(  1), PACA_INIT(  2), PACA_INIT(  3),
+#if NR_CPUS > 4
+       PACA_INIT(  4), PACA_INIT(  5), PACA_INIT(  6), PACA_INIT(  7),
+#if NR_CPUS > 8
+       PACA_INIT(  8), PACA_INIT(  9), PACA_INIT( 10), PACA_INIT( 11),
+       PACA_INIT( 12), PACA_INIT( 13), PACA_INIT( 14), PACA_INIT( 15),
+       PACA_INIT( 16), PACA_INIT( 17), PACA_INIT( 18), PACA_INIT( 19),
+       PACA_INIT( 20), PACA_INIT( 21), PACA_INIT( 22), PACA_INIT( 23),
+       PACA_INIT( 24), PACA_INIT( 25), PACA_INIT( 26), PACA_INIT( 27),
+       PACA_INIT( 28), PACA_INIT( 29), PACA_INIT( 30), PACA_INIT( 31),
+#if NR_CPUS > 32
+       PACA_INIT( 32), PACA_INIT( 33), PACA_INIT( 34), PACA_INIT( 35),
+       PACA_INIT( 36), PACA_INIT( 37), PACA_INIT( 38), PACA_INIT( 39),
+       PACA_INIT( 40), PACA_INIT( 41), PACA_INIT( 42), PACA_INIT( 43),
+       PACA_INIT( 44), PACA_INIT( 45), PACA_INIT( 46), PACA_INIT( 47),
+       PACA_INIT( 48), PACA_INIT( 49), PACA_INIT( 50), PACA_INIT( 51),
+       PACA_INIT( 52), PACA_INIT( 53), PACA_INIT( 54), PACA_INIT( 55),
+       PACA_INIT( 56), PACA_INIT( 57), PACA_INIT( 58), PACA_INIT( 59),
+       PACA_INIT( 60), PACA_INIT( 61), PACA_INIT( 62), PACA_INIT( 63),
+#if NR_CPUS > 64
+       PACA_INIT( 64), PACA_INIT( 65), PACA_INIT( 66), PACA_INIT( 67),
+       PACA_INIT( 68), PACA_INIT( 69), PACA_INIT( 70), PACA_INIT( 71),
+       PACA_INIT( 72), PACA_INIT( 73), PACA_INIT( 74), PACA_INIT( 75),
+       PACA_INIT( 76), PACA_INIT( 77), PACA_INIT( 78), PACA_INIT( 79),
+       PACA_INIT( 80), PACA_INIT( 81), PACA_INIT( 82), PACA_INIT( 83),
+       PACA_INIT( 84), PACA_INIT( 85), PACA_INIT( 86), PACA_INIT( 87),
+       PACA_INIT( 88), PACA_INIT( 89), PACA_INIT( 90), PACA_INIT( 91),
+       PACA_INIT( 92), PACA_INIT( 93), PACA_INIT( 94), PACA_INIT( 95),
+       PACA_INIT( 96), PACA_INIT( 97), PACA_INIT( 98), PACA_INIT( 99),
+       PACA_INIT(100), PACA_INIT(101), PACA_INIT(102), PACA_INIT(103),
+       PACA_INIT(104), PACA_INIT(105), PACA_INIT(106), PACA_INIT(107),
+       PACA_INIT(108), PACA_INIT(109), PACA_INIT(110), PACA_INIT(111),
+       PACA_INIT(112), PACA_INIT(113), PACA_INIT(114), PACA_INIT(115),
+       PACA_INIT(116), PACA_INIT(117), PACA_INIT(118), PACA_INIT(119),
+       PACA_INIT(120), PACA_INIT(121), PACA_INIT(122), PACA_INIT(123),
+       PACA_INIT(124), PACA_INIT(125), PACA_INIT(126), PACA_INIT(127),
+#endif
+#endif
+#endif
+#endif
+#endif
+};
+EXPORT_SYMBOL(paca);
index c441aebe76481aebf0bef4525979a2be1de7b766..eb3187f18fb0e4368ebc3ac9159dfbc70a9a3a56 100644 (file)
@@ -12,11 +12,10 @@ obj-y               :=      misc.o prom.o
 endif
 
 obj-y               += irq.o idle.o dma.o \
-                       align.o pacaData.o \
-                       udbg.o ioctl32.o \
+                       align.o \
+                       udbg.o \
                        rtc.o \
-                       cpu_setup_power4.o \
-                       iommu.o sysfs.o vdso.o firmware.o
+                       iommu.o sysfs.o vdso.o
 obj-y += vdso32/ vdso64/
 
 pci-obj-$(CONFIG_PPC_MULTIPLATFORM)    += pci_dn.o pci_direct_iommu.o
@@ -52,8 +51,6 @@ obj-$(CONFIG_PPC_MAPLE)               += udbg_16550.o
 
 obj-$(CONFIG_KPROBES)          += kprobes.o
 
-CFLAGS_ioctl32.o += -Ifs/
-
 ifneq ($(CONFIG_PPC_MERGE),y)
 ifeq ($(CONFIG_PPC_ISERIES),y)
 arch/ppc64/kernel/head.o: arch/powerpc/kernel/lparmap.s
diff --git a/arch/ppc64/kernel/cpu_setup_power4.S b/arch/ppc64/kernel/cpu_setup_power4.S
deleted file mode 100644 (file)
index 1fb673c..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * This file contains low level CPU setup functions.
- *    Copyright (C) 2003 Benjamin Herrenschmidt (benh@kernel.crashing.org)
- *
- * 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/config.h>
-#include <asm/processor.h>
-#include <asm/page.h>
-#include <asm/cputable.h>
-#include <asm/ppc_asm.h>
-#include <asm/asm-offsets.h>
-#include <asm/cache.h>
-
-_GLOBAL(__970_cpu_preinit)
-       /*
-        * Do nothing if not running in HV mode
-        */
-       mfmsr   r0
-       rldicl. r0,r0,4,63
-       beqlr
-
-       /*
-        * Deal only with PPC970 and PPC970FX.
-        */
-       mfspr   r0,SPRN_PVR
-       srwi    r0,r0,16
-       cmpwi   r0,0x39
-       beq     1f
-       cmpwi   r0,0x3c
-       beq     1f
-       cmpwi   r0,0x44
-       bnelr
-1:
-
-       /* Make sure HID4:rm_ci is off before MMU is turned off, that large
-        * pages are enabled with HID4:61 and clear HID5:DCBZ_size and
-        * HID5:DCBZ32_ill
-        */
-       li      r0,0
-       mfspr   r3,SPRN_HID4
-       rldimi  r3,r0,40,23     /* clear bit 23 (rm_ci) */
-       rldimi  r3,r0,2,61      /* clear bit 61 (lg_pg_en) */
-       sync
-       mtspr   SPRN_HID4,r3
-       isync
-       sync
-       mfspr   r3,SPRN_HID5
-       rldimi  r3,r0,6,56      /* clear bits 56 & 57 (DCBZ*) */
-       sync
-       mtspr   SPRN_HID5,r3
-       isync
-       sync
-
-       /* Setup some basic HID1 features */
-       mfspr   r0,SPRN_HID1
-       li      r3,0x1200               /* enable i-fetch cacheability */
-       sldi    r3,r3,44                /* and prefetch */
-       or      r0,r0,r3
-       mtspr   SPRN_HID1,r0
-       mtspr   SPRN_HID1,r0
-       isync
-
-       /* Clear HIOR */
-       li      r0,0
-       sync
-       mtspr   SPRN_HIOR,0             /* Clear interrupt prefix */
-       isync
-       blr
-
-_GLOBAL(__setup_cpu_power4)
-       blr
-
-_GLOBAL(__setup_cpu_be)
-        /* Set large page sizes LP=0: 16MB, LP=1: 64KB */
-        addi    r3, 0,  0
-        ori     r3, r3, HID6_LB
-        sldi    r3, r3, 32
-        nor     r3, r3, r3
-        mfspr   r4, SPRN_HID6
-        and     r4, r4, r3
-        addi    r3, 0, 0x02000
-        sldi    r3, r3, 32
-        or      r4, r4, r3
-        mtspr   SPRN_HID6, r4
-       blr
-
-_GLOBAL(__setup_cpu_ppc970)
-       mfspr   r0,SPRN_HID0
-       li      r11,5                   /* clear DOZE and SLEEP */
-       rldimi  r0,r11,52,8             /* set NAP and DPM */
-       mtspr   SPRN_HID0,r0
-       mfspr   r0,SPRN_HID0
-       mfspr   r0,SPRN_HID0
-       mfspr   r0,SPRN_HID0
-       mfspr   r0,SPRN_HID0
-       mfspr   r0,SPRN_HID0
-       mfspr   r0,SPRN_HID0
-       sync
-       isync
-       blr
-
-/* Definitions for the table use to save CPU states */
-#define CS_HID0                0
-#define CS_HID1                8
-#define        CS_HID4         16
-#define CS_HID5                24
-#define CS_SIZE                32
-
-       .data
-       .balign L1_CACHE_BYTES,0
-cpu_state_storage:     
-       .space  CS_SIZE
-       .balign L1_CACHE_BYTES,0
-       .text
-       
-/* Called in normal context to backup CPU 0 state. This
- * does not include cache settings. This function is also
- * called for machine sleep. This does not include the MMU
- * setup, BATs, etc... but rather the "special" registers
- * like HID0, HID1, HID4, etc...
- */
-_GLOBAL(__save_cpu_setup)
-       /* Some CR fields are volatile, we back it up all */
-       mfcr    r7
-
-       /* Get storage ptr */
-       LOADADDR(r5,cpu_state_storage)
-
-       /* We only deal with 970 for now */
-       mfspr   r0,SPRN_PVR
-       srwi    r0,r0,16
-       cmpwi   r0,0x39
-       beq     1f
-       cmpwi   r0,0x3c
-       beq     1f
-       cmpwi   r0,0x44
-       bne     2f
-
-1:     /* Save HID0,1,4 and 5 */
-       mfspr   r3,SPRN_HID0
-       std     r3,CS_HID0(r5)
-       mfspr   r3,SPRN_HID1
-       std     r3,CS_HID1(r5)
-       mfspr   r3,SPRN_HID4
-       std     r3,CS_HID4(r5)
-       mfspr   r3,SPRN_HID5
-       std     r3,CS_HID5(r5)
-       
-2:
-       mtcr    r7
-       blr
-
-/* Called with no MMU context (typically MSR:IR/DR off) to
- * restore CPU state as backed up by the previous
- * function. This does not include cache setting
- */
-_GLOBAL(__restore_cpu_setup)
-       /* Get storage ptr (FIXME when using anton reloc as we
-        * are running with translation disabled here
-        */
-       LOADADDR(r5,cpu_state_storage)
-
-       /* We only deal with 970 for now */
-       mfspr   r0,SPRN_PVR
-       srwi    r0,r0,16
-       cmpwi   r0,0x39
-       beq     1f
-       cmpwi   r0,0x3c
-       beq     1f
-       cmpwi   r0,0x44
-       bnelr
-
-1:     /* Before accessing memory, we make sure rm_ci is clear */
-       li      r0,0
-       mfspr   r3,SPRN_HID4
-       rldimi  r3,r0,40,23     /* clear bit 23 (rm_ci) */
-       sync
-       mtspr   SPRN_HID4,r3
-       isync
-       sync
-
-       /* Clear interrupt prefix */
-       li      r0,0
-       sync
-       mtspr   SPRN_HIOR,0
-       isync
-
-       /* Restore HID0 */
-       ld      r3,CS_HID0(r5)
-       sync
-       isync
-       mtspr   SPRN_HID0,r3
-       mfspr   r3,SPRN_HID0
-       mfspr   r3,SPRN_HID0
-       mfspr   r3,SPRN_HID0
-       mfspr   r3,SPRN_HID0
-       mfspr   r3,SPRN_HID0
-       mfspr   r3,SPRN_HID0
-       sync
-       isync
-
-       /* Restore HID1 */
-       ld      r3,CS_HID1(r5)
-       sync
-       isync
-       mtspr   SPRN_HID1,r3
-       mtspr   SPRN_HID1,r3
-       sync
-       isync
-       
-       /* Restore HID4 */
-       ld      r3,CS_HID4(r5)
-       sync
-       isync
-       mtspr   SPRN_HID4,r3
-       sync
-       isync
-
-       /* Restore HID5 */
-       ld      r3,CS_HID5(r5)
-       sync
-       isync
-       mtspr   SPRN_HID5,r3
-       sync
-       isync
-       blr
-
diff --git a/arch/ppc64/kernel/firmware.c b/arch/ppc64/kernel/firmware.c
deleted file mode 100644 (file)
index d8432c0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  arch/ppc64/kernel/firmware.c
- *
- *  Extracted from cputable.c
- *
- *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
- *
- *  Modifications for ppc64:
- *      Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
- *  Copyright (C) 2005 Stephen Rothwell, 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.
- */
-
-#include <linux/config.h>
-
-#include <asm/firmware.h>
-
-unsigned long ppc64_firmware_features;
-
-#ifdef CONFIG_PPC_PSERIES
-firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
-       {FW_FEATURE_PFT,                "hcall-pft"},
-       {FW_FEATURE_TCE,                "hcall-tce"},
-       {FW_FEATURE_SPRG0,              "hcall-sprg0"},
-       {FW_FEATURE_DABR,               "hcall-dabr"},
-       {FW_FEATURE_COPY,               "hcall-copy"},
-       {FW_FEATURE_ASR,                "hcall-asr"},
-       {FW_FEATURE_DEBUG,              "hcall-debug"},
-       {FW_FEATURE_PERF,               "hcall-perf"},
-       {FW_FEATURE_DUMP,               "hcall-dump"},
-       {FW_FEATURE_INTERRUPT,          "hcall-interrupt"},
-       {FW_FEATURE_MIGRATE,            "hcall-migrate"},
-       {FW_FEATURE_PERFMON,            "hcall-perfmon"},
-       {FW_FEATURE_CRQ,                "hcall-crq"},
-       {FW_FEATURE_VIO,                "hcall-vio"},
-       {FW_FEATURE_RDMA,               "hcall-rdma"},
-       {FW_FEATURE_LLAN,               "hcall-lLAN"},
-       {FW_FEATURE_BULK,               "hcall-bulk"},
-       {FW_FEATURE_XDABR,              "hcall-xdabr"},
-       {FW_FEATURE_MULTITCE,           "hcall-multi-tce"},
-       {FW_FEATURE_SPLPAR,             "hcall-splpar"},
-};
-#endif
diff --git a/arch/ppc64/kernel/ioctl32.c b/arch/ppc64/kernel/ioctl32.c
deleted file mode 100644 (file)
index ba4a899..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* 
- * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
- * 
- * Based on sparc64 ioctl32.c by:
- *
- * Copyright (C) 1997-2000  Jakub Jelinek  (jakub@redhat.com)
- * Copyright (C) 1998  Eddie C. Dost  (ecd@skynet.be)
- *
- * ppc64 changes:
- *
- * Copyright (C) 2000  Ken Aaker (kdaaker@rchland.vnet.ibm.com)
- * Copyright (C) 2001  Anton Blanchard (antonb@au.ibm.com)
- *
- * These routines maintain argument size conversion between 32bit and 64bit
- * ioctls.
- *
- * 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.
- */
-
-#define INCLUDES
-#include "compat_ioctl.c"
-#include <linux/syscalls.h>
-
-#define CODE
-#include "compat_ioctl.c"
-
-#define HANDLE_IOCTL(cmd,handler) { cmd, (ioctl_trans_handler_t)handler, NULL },
-#define COMPATIBLE_IOCTL(cmd) HANDLE_IOCTL(cmd,sys_ioctl)
-
-#define IOCTL_TABLE_START \
-       struct ioctl_trans ioctl_start[] = {
-#define IOCTL_TABLE_END \
-       };
-
-IOCTL_TABLE_START
-#include <linux/compat_ioctl.h>
-#define DECLARES
-#include "compat_ioctl.c"
-
-/* Little p (/dev/rtc, /dev/envctrl, etc.) */
-COMPATIBLE_IOCTL(_IOR('p', 20, int[7])) /* RTCGET */
-COMPATIBLE_IOCTL(_IOW('p', 21, int[7])) /* RTCSET */
-
-IOCTL_TABLE_END
-
-int ioctl_table_size = ARRAY_SIZE(ioctl_start);
diff --git a/arch/ppc64/kernel/pacaData.c b/arch/ppc64/kernel/pacaData.c
deleted file mode 100644 (file)
index 3133c72..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * 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/config.h>
-#include <linux/types.h>
-#include <linux/threads.h>
-#include <linux/module.h>
-
-#include <asm/processor.h>
-#include <asm/ptrace.h>
-#include <asm/page.h>
-
-#include <asm/lppaca.h>
-#include <asm/iseries/it_lp_queue.h>
-#include <asm/paca.h>
-
-static union {
-       struct systemcfg        data;
-       u8                      page[PAGE_SIZE];
-} systemcfg_store __attribute__((__section__(".data.page.aligned")));
-struct systemcfg *systemcfg = &systemcfg_store.data;
-EXPORT_SYMBOL(systemcfg);
-
-
-/* This symbol is provided by the linker - let it fill in the paca
- * field correctly */
-extern unsigned long __toc_start;
-
-/* The Paca is an array with one entry per processor.  Each contains an 
- * lppaca, which contains the information shared between the
- * hypervisor and Linux.  Each also contains an ItLpRegSave area which
- * is used by the hypervisor to save registers.
- * On systems with hardware multi-threading, there are two threads
- * per processor.  The Paca array must contain an entry for each thread.
- * The VPD Areas will give a max logical processors = 2 * max physical
- * processors.  The processor VPD array needs one entry per physical
- * processor (not thread).
- */
-#define PACA_INIT_COMMON(number, start, asrr, asrv)                        \
-       .lock_token = 0x8000,                                               \
-       .paca_index = (number),         /* Paca Index */                    \
-       .default_decr = 0x00ff0000,     /* Initial Decr */                  \
-       .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL,             \
-       .stab_real = (asrr),            /* Real pointer to segment table */ \
-       .stab_addr = (asrv),            /* Virt pointer to segment table */ \
-       .cpu_start = (start),           /* Processor start */               \
-       .hw_cpu_id = 0xffff,                                                \
-       .lppaca = {                                                         \
-               .desc = 0xd397d781,     /* "LpPa" */                        \
-               .size = sizeof(struct lppaca),                              \
-               .dyn_proc_status = 2,                                       \
-               .decr_val = 0x00ff0000,                                     \
-               .fpregs_in_use = 1,                                         \
-               .end_of_quantum = 0xfffffffffffffffful,                     \
-               .slb_count = 64,                                            \
-               .vmxregs_in_use = 0,                                        \
-       },                                                                  \
-
-#ifdef CONFIG_PPC_ISERIES
-#define PACA_INIT_ISERIES(number)                                          \
-       .lppaca_ptr = &paca[number].lppaca,                                 \
-       .reg_save_ptr = &paca[number].reg_save,                             \
-       .reg_save = {                                                       \
-               .xDesc = 0xd397d9e2,    /* "LpRS" */                        \
-               .xSize = sizeof(struct ItLpRegSave)                         \
-       }
-
-#define PACA_INIT(number)                                                  \
-{                                                                          \
-       PACA_INIT_COMMON(number, 0, 0, 0)                                   \
-       PACA_INIT_ISERIES(number)                                           \
-}
-
-#define BOOTCPU_PACA_INIT(number)                                          \
-{                                                                          \
-       PACA_INIT_COMMON(number, 1, 0, (u64)&initial_stab)                  \
-       PACA_INIT_ISERIES(number)                                           \
-}
-
-#else
-#define PACA_INIT(number)                                                  \
-{                                                                          \
-       PACA_INIT_COMMON(number, 0, 0, 0)                                   \
-}
-
-#define BOOTCPU_PACA_INIT(number)                                          \
-{                                                                          \
-       PACA_INIT_COMMON(number, 1, STAB0_PHYS_ADDR, (u64)&initial_stab)    \
-}
-#endif
-
-struct paca_struct paca[] = {
-       BOOTCPU_PACA_INIT(0),
-#if NR_CPUS > 1
-       PACA_INIT(  1), PACA_INIT(  2), PACA_INIT(  3),
-#if NR_CPUS > 4
-       PACA_INIT(  4), PACA_INIT(  5), PACA_INIT(  6), PACA_INIT(  7),
-#if NR_CPUS > 8
-       PACA_INIT(  8), PACA_INIT(  9), PACA_INIT( 10), PACA_INIT( 11),
-       PACA_INIT( 12), PACA_INIT( 13), PACA_INIT( 14), PACA_INIT( 15),
-       PACA_INIT( 16), PACA_INIT( 17), PACA_INIT( 18), PACA_INIT( 19),
-       PACA_INIT( 20), PACA_INIT( 21), PACA_INIT( 22), PACA_INIT( 23),
-       PACA_INIT( 24), PACA_INIT( 25), PACA_INIT( 26), PACA_INIT( 27),
-       PACA_INIT( 28), PACA_INIT( 29), PACA_INIT( 30), PACA_INIT( 31),
-#if NR_CPUS > 32
-       PACA_INIT( 32), PACA_INIT( 33), PACA_INIT( 34), PACA_INIT( 35),
-       PACA_INIT( 36), PACA_INIT( 37), PACA_INIT( 38), PACA_INIT( 39),
-       PACA_INIT( 40), PACA_INIT( 41), PACA_INIT( 42), PACA_INIT( 43),
-       PACA_INIT( 44), PACA_INIT( 45), PACA_INIT( 46), PACA_INIT( 47),
-       PACA_INIT( 48), PACA_INIT( 49), PACA_INIT( 50), PACA_INIT( 51),
-       PACA_INIT( 52), PACA_INIT( 53), PACA_INIT( 54), PACA_INIT( 55),
-       PACA_INIT( 56), PACA_INIT( 57), PACA_INIT( 58), PACA_INIT( 59),
-       PACA_INIT( 60), PACA_INIT( 61), PACA_INIT( 62), PACA_INIT( 63),
-#if NR_CPUS > 64
-       PACA_INIT( 64), PACA_INIT( 65), PACA_INIT( 66), PACA_INIT( 67),
-       PACA_INIT( 68), PACA_INIT( 69), PACA_INIT( 70), PACA_INIT( 71),
-       PACA_INIT( 72), PACA_INIT( 73), PACA_INIT( 74), PACA_INIT( 75),
-       PACA_INIT( 76), PACA_INIT( 77), PACA_INIT( 78), PACA_INIT( 79),
-       PACA_INIT( 80), PACA_INIT( 81), PACA_INIT( 82), PACA_INIT( 83),
-       PACA_INIT( 84), PACA_INIT( 85), PACA_INIT( 86), PACA_INIT( 87),
-       PACA_INIT( 88), PACA_INIT( 89), PACA_INIT( 90), PACA_INIT( 91),
-       PACA_INIT( 92), PACA_INIT( 93), PACA_INIT( 94), PACA_INIT( 95),
-       PACA_INIT( 96), PACA_INIT( 97), PACA_INIT( 98), PACA_INIT( 99),
-       PACA_INIT(100), PACA_INIT(101), PACA_INIT(102), PACA_INIT(103),
-       PACA_INIT(104), PACA_INIT(105), PACA_INIT(106), PACA_INIT(107),
-       PACA_INIT(108), PACA_INIT(109), PACA_INIT(110), PACA_INIT(111),
-       PACA_INIT(112), PACA_INIT(113), PACA_INIT(114), PACA_INIT(115),
-       PACA_INIT(116), PACA_INIT(117), PACA_INIT(118), PACA_INIT(119),
-       PACA_INIT(120), PACA_INIT(121), PACA_INIT(122), PACA_INIT(123),
-       PACA_INIT(124), PACA_INIT(125), PACA_INIT(126), PACA_INIT(127),
-#endif
-#endif
-#endif
-#endif
-#endif
-};
-EXPORT_SYMBOL(paca);
diff --git a/include/asm-powerpc/abs_addr.h b/include/asm-powerpc/abs_addr.h
new file mode 100644 (file)
index 0000000..1841510
--- /dev/null
@@ -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 */
diff --git a/include/asm-powerpc/compat.h b/include/asm-powerpc/compat.h
new file mode 100644 (file)
index 0000000..4db4360
--- /dev/null
@@ -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 */
diff --git a/include/asm-powerpc/lppaca.h b/include/asm-powerpc/lppaca.h
new file mode 100644 (file)
index 0000000..c1bedab
--- /dev/null
@@ -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 */
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h
new file mode 100644 (file)
index 0000000..92c765c
--- /dev/null
@@ -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 */
diff --git a/include/asm-powerpc/tce.h b/include/asm-powerpc/tce.h
new file mode 100644 (file)
index 0000000..d099d52
--- /dev/null
@@ -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 */
diff --git a/include/asm-ppc64/abs_addr.h b/include/asm-ppc64/abs_addr.h
deleted file mode 100644 (file)
index dc3fc3f..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef _ABS_ADDR_H
-#define _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 /* _ABS_ADDR_H */
diff --git a/include/asm-ppc64/compat.h b/include/asm-ppc64/compat.h
deleted file mode 100644 (file)
index 6ec62cd..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#ifndef _ASM_PPC64_COMPAT_H
-#define _ASM_PPC64_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_PPC64_COMPAT_H */
diff --git a/include/asm-ppc64/lppaca.h b/include/asm-ppc64/lppaca.h
deleted file mode 100644 (file)
index 9e2a6c0..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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_LPPACA_H
-#define _ASM_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_LPPACA_H */
diff --git a/include/asm-ppc64/paca.h b/include/asm-ppc64/paca.h
deleted file mode 100644 (file)
index bccacd6..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#ifndef _PPC64_PACA_H
-#define _PPC64_PACA_H
-
-/*
- * include/asm-ppc64/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.
- */    
-
-#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 /* _PPC64_PACA_H */
diff --git a/include/asm-ppc64/tce.h b/include/asm-ppc64/tce.h
deleted file mode 100644 (file)
index d40b6b4..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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_TCE_H
-#define _ASM_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