linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-powerpc / processor.h
index ee810c6..415fa39 100644 (file)
  * -- BenH.
  */
 
+/* Platforms codes (to be obsoleted) */
+#define PLATFORM_PSERIES       0x0100
+#define PLATFORM_PSERIES_LPAR  0x0101
+#define PLATFORM_ISERIES_LPAR  0x0201
+#define PLATFORM_LPAR          0x0001
+#define PLATFORM_POWERMAC      0x0400
+#define PLATFORM_MAPLE         0x0500
+#define PLATFORM_PREP          0x0600
+#define PLATFORM_CHRP          0x0700
+#define PLATFORM_CELL          0x1000
+
+/* Compat platform codes for 32 bits */
+#define _MACH_prep     PLATFORM_PREP
+#define _MACH_Pmac     PLATFORM_POWERMAC
+#define _MACH_chrp     PLATFORM_CHRP
+
 /* PREP sub-platform types see residual.h for these */
 #define _PREP_Motorola 0x01    /* motorola prep */
 #define _PREP_Firm     0x02    /* firmworks prep */
 #define _CHRP_IBM      0x05    /* IBM chrp, the longtrail and longtrail 2 */
 #define _CHRP_Pegasos  0x06    /* Genesi/bplan's Pegasos and Pegasos2 */
 
-#if defined(__KERNEL__) && defined(CONFIG_PPC32)
+#ifdef __KERNEL__
+#define platform_is_pseries()  (_machine == PLATFORM_PSERIES || \
+                                _machine == PLATFORM_PSERIES_LPAR)
+#define platform_is_lpar()     (!!(_machine & PLATFORM_LPAR))
 
-extern int _chrp_type;
+#if defined(CONFIG_PPC_MULTIPLATFORM)
+extern int _machine;
 
-#ifdef CONFIG_PPC_PREP
+#ifdef CONFIG_PPC32
 
 /* what kind of prep workstation we are */
 extern int _prep_type;
+extern int _chrp_type;
 
 /*
  * This is used to identify the board type from a given PReP board
@@ -50,14 +71,17 @@ extern int _prep_type;
 extern unsigned char ucBoardRev;
 extern unsigned char ucBoardRevMaj, ucBoardRevMin;
 
-#endif /* CONFIG_PPC_PREP */
+#endif /* CONFIG_PPC32 */
 
-#ifndef CONFIG_PPC_MULTIPLATFORM
+#elif defined(CONFIG_PPC_ISERIES)
+/*
+ * iSeries is soon to become MULTIPLATFORM hopefully ...
+ */
+#define _machine PLATFORM_ISERIES_LPAR
+#else
 #define _machine 0
 #endif /* CONFIG_PPC_MULTIPLATFORM */
-
-#endif /* defined(__KERNEL__) && defined(CONFIG_PPC32) */
-
+#endif /* __KERNEL__ */
 /*
  * Default implementation of macro that returns current
  * instruction pointer ("program counter").
@@ -149,11 +173,11 @@ struct thread_struct {
                unsigned int val;       /* Floating point status */
        } fpscr;
        int             fpexc_mode;     /* floating-point exception mode */
-       unsigned int    align_ctl;      /* alignment handling control */
 #ifdef CONFIG_PPC64
        unsigned long   start_tb;       /* Start purr when proc switched in */
        unsigned long   accum_tb;       /* Total accumilated purr for process */
 #endif
+       unsigned long   vdso_base;      /* base of the vDSO library */
        unsigned long   dabr;           /* Data address breakpoint register */
 #ifdef CONFIG_ALTIVEC
        /* Complete AltiVec register set */
@@ -190,7 +214,7 @@ struct thread_struct {
        .fs = KERNEL_DS, \
        .fpr = {0}, \
        .fpscr = { .val = 0, }, \
-       .fpexc_mode = 0, \
+       .fpexc_mode = MSR_FE0|MSR_FE1, \
 }
 #endif
 
@@ -212,18 +236,6 @@ unsigned long get_wchan(struct task_struct *p);
 extern int get_fpexc_mode(struct task_struct *tsk, unsigned long adr);
 extern int set_fpexc_mode(struct task_struct *tsk, unsigned int val);
 
-#define GET_ENDIAN(tsk, adr) get_endian((tsk), (adr))
-#define SET_ENDIAN(tsk, val) set_endian((tsk), (val))
-
-extern int get_endian(struct task_struct *tsk, unsigned long adr);
-extern int set_endian(struct task_struct *tsk, unsigned int val);
-
-#define GET_UNALIGN_CTL(tsk, adr)      get_unalign_ctl((tsk), (adr))
-#define SET_UNALIGN_CTL(tsk, val)      set_unalign_ctl((tsk), (val))
-
-extern int get_unalign_ctl(struct task_struct *tsk, unsigned long adr);
-extern int set_unalign_ctl(struct task_struct *tsk, unsigned int val);
-
 static inline unsigned int __unpack_fe01(unsigned long msr_bits)
 {
        return ((msr_bits & MSR_FE0) >> 10) | ((msr_bits & MSR_FE1) >> 8);
@@ -240,10 +252,6 @@ static inline unsigned long __pack_fe01(unsigned int fpmode)
 #define cpu_relax()    barrier()
 #endif
 
-/* Check that a certain kernel stack pointer is valid in task_struct p */
-int validate_sp(unsigned long sp, struct task_struct *p,
-                       unsigned long nbytes);
-
 /*
  * Prefetch macros.
  */
@@ -273,23 +281,6 @@ static inline void prefetchw(const void *x)
 #define HAVE_ARCH_PICK_MMAP_LAYOUT
 #endif
 
-#ifdef CONFIG_PPC_CELL /* MAMBO SIMULATION code */
-#define MSR_SIM_LG      29
-#define MSR_SIM         __MASK(MSR_SIM_LG)
-
-static __inline__ int __onsim(void)
-{
-        unsigned long msr;
-        __asm__ __volatile__ ("mfmsr    %0" : "=&r" (msr));
-        return ((msr & MSR_SIM) ? 1 : 0);
-}
-#endif /* CONFIG_PPC_CELL */
-
 #endif /* __KERNEL__ */
-#else
-/* must be given a register to perform the compare, set cr0 = 1
- * Usage: __onsim(r0); bne _if_onsim
- */
-#define __onsim(r) mfmsr        r; rldicl. r,r,35,63
 #endif /* __ASSEMBLY__ */
 #endif /* _ASM_POWERPC_PROCESSOR_H */