home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / oprofile_impl.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.9 KB  |  135 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.     int (*reg_setup) (struct op_counter_config *,
  43.                struct op_system_config *,
  44.                int num_counters);
  45.     int  (*cpu_setup) (struct op_counter_config *);
  46.     int  (*start) (struct op_counter_config *);
  47.     int  (*global_start) (struct op_counter_config *);
  48.     void (*stop) (void);
  49.     void (*global_stop) (void);
  50.     int (*sync_start)(void);
  51.     int (*sync_stop)(void);
  52.     void (*handle_interrupt) (struct pt_regs *,
  53.                   struct op_counter_config *);
  54.     int num_counters;
  55. };
  56.  
  57. extern struct op_powerpc_model op_model_fsl_emb;
  58. extern struct op_powerpc_model op_model_rs64;
  59. extern struct op_powerpc_model op_model_power4;
  60. extern struct op_powerpc_model op_model_7450;
  61. extern struct op_powerpc_model op_model_cell;
  62. extern struct op_powerpc_model op_model_pa6t;
  63.  
  64.  
  65. /* All the classic PPC parts use these */
  66. static inline unsigned int classic_ctr_read(unsigned int i)
  67. {
  68.     switch(i) {
  69.     case 0:
  70.         return mfspr(SPRN_PMC1);
  71.     case 1:
  72.         return mfspr(SPRN_PMC2);
  73.     case 2:
  74.         return mfspr(SPRN_PMC3);
  75.     case 3:
  76.         return mfspr(SPRN_PMC4);
  77.     case 4:
  78.         return mfspr(SPRN_PMC5);
  79.     case 5:
  80.         return mfspr(SPRN_PMC6);
  81.  
  82. /* No PPC32 chip has more than 6 so far */
  83. #ifdef CONFIG_PPC64
  84.     case 6:
  85.         return mfspr(SPRN_PMC7);
  86.     case 7:
  87.         return mfspr(SPRN_PMC8);
  88. #endif
  89.     default:
  90.         return 0;
  91.     }
  92. }
  93.  
  94. static inline void classic_ctr_write(unsigned int i, unsigned int val)
  95. {
  96.     switch(i) {
  97.     case 0:
  98.         mtspr(SPRN_PMC1, val);
  99.         break;
  100.     case 1:
  101.         mtspr(SPRN_PMC2, val);
  102.         break;
  103.     case 2:
  104.         mtspr(SPRN_PMC3, val);
  105.         break;
  106.     case 3:
  107.         mtspr(SPRN_PMC4, val);
  108.         break;
  109.     case 4:
  110.         mtspr(SPRN_PMC5, val);
  111.         break;
  112.     case 5:
  113.         mtspr(SPRN_PMC6, val);
  114.         break;
  115.  
  116. /* No PPC32 chip has more than 6, yet */
  117. #ifdef CONFIG_PPC64
  118.     case 6:
  119.         mtspr(SPRN_PMC7, val);
  120.         break;
  121.     case 7:
  122.         mtspr(SPRN_PMC8, val);
  123.         break;
  124. #endif
  125.     default:
  126.         break;
  127.     }
  128. }
  129.  
  130.  
  131. extern void op_powerpc_backtrace(struct pt_regs * const regs, unsigned int depth);
  132.  
  133. #endif /* __KERNEL__ */
  134. #endif /* _ASM_POWERPC_OPROFILE_IMPL_H */
  135.