home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-powerpc / oprofile_impl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.7 KB  |  130 lines

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