root/arch/powerpc/include/asm/oprofile_impl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. classic_ctr_read
  2. classic_ctr_write

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  * Copyright (C) 2004 Anton Blanchard <anton@au.ibm.com>, IBM
   4  *
   5  * Based on alpha version.
   6  */
   7 
   8 #ifndef _ASM_POWERPC_OPROFILE_IMPL_H
   9 #define _ASM_POWERPC_OPROFILE_IMPL_H
  10 #ifdef __KERNEL__
  11 
  12 #define OP_MAX_COUNTER 8
  13 
  14 /* Per-counter configuration as set via oprofilefs.  */
  15 struct op_counter_config {
  16         unsigned long enabled;
  17         unsigned long event;
  18         unsigned long count;
  19         /* Classic doesn't support per-counter user/kernel selection */
  20         unsigned long kernel;
  21         unsigned long user;
  22         unsigned long unit_mask;
  23 };
  24 
  25 /* System-wide configuration as set via oprofilefs.  */
  26 struct op_system_config {
  27 #ifdef CONFIG_PPC64
  28         unsigned long mmcr0;
  29         unsigned long mmcr1;
  30         unsigned long mmcra;
  31 #ifdef CONFIG_OPROFILE_CELL
  32         /* Register for oprofile user tool to check cell kernel profiling
  33          * support.
  34          */
  35         unsigned long cell_support;
  36 #endif
  37 #endif
  38         unsigned long enable_kernel;
  39         unsigned long enable_user;
  40 };
  41 
  42 /* Per-arch configuration */
  43 struct op_powerpc_model {
  44         int (*reg_setup) (struct op_counter_config *,
  45                            struct op_system_config *,
  46                            int num_counters);
  47         int  (*cpu_setup) (struct op_counter_config *);
  48         int  (*start) (struct op_counter_config *);
  49         int  (*global_start) (struct op_counter_config *);
  50         void (*stop) (void);
  51         void (*global_stop) (void);
  52         int (*sync_start)(void);
  53         int (*sync_stop)(void);
  54         void (*handle_interrupt) (struct pt_regs *,
  55                                   struct op_counter_config *);
  56         int num_counters;
  57 };
  58 
  59 extern struct op_powerpc_model op_model_fsl_emb;
  60 extern struct op_powerpc_model op_model_power4;
  61 extern struct op_powerpc_model op_model_7450;
  62 extern struct op_powerpc_model op_model_cell;
  63 extern struct op_powerpc_model op_model_pa6t;
  64 
  65 
  66 /* All the classic PPC parts use these */
  67 static inline unsigned int classic_ctr_read(unsigned int i)
  68 {
  69         switch(i) {
  70         case 0:
  71                 return mfspr(SPRN_PMC1);
  72         case 1:
  73                 return mfspr(SPRN_PMC2);
  74         case 2:
  75                 return mfspr(SPRN_PMC3);
  76         case 3:
  77                 return mfspr(SPRN_PMC4);
  78         case 4:
  79                 return mfspr(SPRN_PMC5);
  80         case 5:
  81                 return mfspr(SPRN_PMC6);
  82 
  83 /* No PPC32 chip has more than 6 so far */
  84 #ifdef CONFIG_PPC64
  85         case 6:
  86                 return mfspr(SPRN_PMC7);
  87         case 7:
  88                 return mfspr(SPRN_PMC8);
  89 #endif
  90         default:
  91                 return 0;
  92         }
  93 }
  94 
  95 static inline void classic_ctr_write(unsigned int i, unsigned int val)
  96 {
  97         switch(i) {
  98         case 0:
  99                 mtspr(SPRN_PMC1, val);
 100                 break;
 101         case 1:
 102                 mtspr(SPRN_PMC2, val);
 103                 break;
 104         case 2:
 105                 mtspr(SPRN_PMC3, val);
 106                 break;
 107         case 3:
 108                 mtspr(SPRN_PMC4, val);
 109                 break;
 110         case 4:
 111                 mtspr(SPRN_PMC5, val);
 112                 break;
 113         case 5:
 114                 mtspr(SPRN_PMC6, val);
 115                 break;
 116 
 117 /* No PPC32 chip has more than 6, yet */
 118 #ifdef CONFIG_PPC64
 119         case 6:
 120                 mtspr(SPRN_PMC7, val);
 121                 break;
 122         case 7:
 123                 mtspr(SPRN_PMC8, val);
 124                 break;
 125 #endif
 126         default:
 127                 break;
 128         }
 129 }
 130 
 131 
 132 extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
 133 
 134 #endif /* __KERNEL__ */
 135 #endif /* _ASM_POWERPC_OPROFILE_IMPL_H */

/* [<][>][^][v][top][bottom][index][help] */