]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-powerpc/oprofile_impl.h
Merge branches 'release' and 'hp-cid' into release
[linux-2.6-omap-h63xx.git] / include / asm-powerpc / oprofile_impl.h
index 8013cd273cedf7edfd4312737065e3d9581538e2..938fefb4c4bca07d6873829d6fceda73f9742496 100644 (file)
 
 #ifndef _ASM_POWERPC_OPROFILE_IMPL_H
 #define _ASM_POWERPC_OPROFILE_IMPL_H
+#ifdef __KERNEL__
 
 #define OP_MAX_COUNTER 8
 
 /* Per-counter configuration as set via oprofilefs.  */
 struct op_counter_config {
-#ifdef __powerpc64__
-       unsigned long valid;
-#endif
        unsigned long enabled;
        unsigned long event;
        unsigned long count;
+       /* Classic doesn't support per-counter user/kernel selection */
        unsigned long kernel;
-#ifdef __powerpc64__
-       /* We dont support per counter user/kernel selection */
-#endif
        unsigned long user;
        unsigned long unit_mask;
 };
 
 /* System-wide configuration as set via oprofilefs.  */
 struct op_system_config {
-#ifdef __powerpc64__
+#ifdef CONFIG_PPC64
        unsigned long mmcr0;
        unsigned long mmcr1;
        unsigned long mmcra;
 #endif
        unsigned long enable_kernel;
        unsigned long enable_user;
-#ifdef __powerpc64__
-       unsigned long backtrace_spinlocks;
-#endif
 };
 
 /* Per-arch configuration */
 struct op_powerpc_model {
-       void (*reg_setup) (struct op_counter_config *,
+       int (*reg_setup) (struct op_counter_config *,
                           struct op_system_config *,
                           int num_counters);
-#ifdef __powerpc64__
-       void (*cpu_setup) (void *);
-#endif
-       void (*start) (struct op_counter_config *);
+       int  (*cpu_setup) (struct op_counter_config *);
+       int  (*start) (struct op_counter_config *);
+       int  (*global_start) (struct op_counter_config *);
        void (*stop) (void);
+       void (*global_stop) (void);
+       int (*sync_start)(void);
+       int (*sync_stop)(void);
        void (*handle_interrupt) (struct pt_regs *,
                                  struct op_counter_config *);
        int num_counters;
 };
 
-#ifdef __powerpc64__
+extern struct op_powerpc_model op_model_fsl_booke;
 extern struct op_powerpc_model op_model_rs64;
 extern struct op_powerpc_model op_model_power4;
+extern struct op_powerpc_model op_model_7450;
+extern struct op_powerpc_model op_model_cell;
+extern struct op_powerpc_model op_model_pa6t;
+
 
-static inline unsigned int ctr_read(unsigned int i)
+/* All the classic PPC parts use these */
+static inline unsigned int classic_ctr_read(unsigned int i)
 {
        switch(i) {
        case 0:
@@ -78,16 +78,20 @@ static inline unsigned int ctr_read(unsigned int i)
                return mfspr(SPRN_PMC5);
        case 5:
                return mfspr(SPRN_PMC6);
+
+/* No PPC32 chip has more than 6 so far */
+#ifdef CONFIG_PPC64
        case 6:
                return mfspr(SPRN_PMC7);
        case 7:
                return mfspr(SPRN_PMC8);
+#endif
        default:
                return 0;
        }
 }
 
-static inline void ctr_write(unsigned int i, unsigned int val)
+static inline void classic_ctr_write(unsigned int i, unsigned int val)
 {
        switch(i) {
        case 0:
@@ -108,16 +112,23 @@ static inline void ctr_write(unsigned int i, unsigned int val)
        case 5:
                mtspr(SPRN_PMC6, val);
                break;
+
+/* No PPC32 chip has more than 6, yet */
+#ifdef CONFIG_PPC64
        case 6:
                mtspr(SPRN_PMC7, val);
                break;
        case 7:
                mtspr(SPRN_PMC8, val);
                break;
+#endif
        default:
                break;
        }
 }
-#endif /* __powerpc64__ */
 
+
+extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
+
+#endif /* __KERNEL__ */
 #endif /* _ASM_POWERPC_OPROFILE_IMPL_H */