pmc_mdep.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*-
  2. * This file is in the public domain.
  3. *
  4. * $FreeBSD$
  5. */
  6. #ifndef _MACHINE_PMC_MDEP_H_
  7. #define _MACHINE_PMC_MDEP_H_
  8. #define PMC_MDEP_CLASS_INDEX_POWERPC 1
  9. union pmc_md_op_pmcallocate {
  10. uint64_t __pad[4];
  11. };
  12. /* Logging */
  13. #ifdef __powerpc64__
  14. #define PMCLOG_READADDR PMCLOG_READ64
  15. #define PMCLOG_EMITADDR PMCLOG_EMIT64
  16. #else
  17. #define PMCLOG_READADDR PMCLOG_READ32
  18. #define PMCLOG_EMITADDR PMCLOG_EMIT32
  19. #endif
  20. #define mtpmr(reg, val) \
  21. __asm __volatile("mtpmr %0,%1" : : "K"(reg), "r"(val))
  22. #define mfpmr(reg) \
  23. ( { register_t val; \
  24. __asm __volatile("mfpmr %0,%1" : "=r"(val) : "K"(reg)); \
  25. val; } )
  26. #define PMR_PMC0 16
  27. #define PMR_PMC1 17
  28. #define PMR_PMC2 18
  29. #define PMR_PMC3 19
  30. #define PMR_PMLCa0 144
  31. #define PMLCax_FC 0x80000000
  32. #define PMLCax_FCS 0x40000000
  33. #define PMLCax_FCU 0x20000000
  34. #define PMLCax_FCM1 0x10000000
  35. #define PMLCax_FCM0 0x08000000
  36. #define PMLCax_CE 0x04000000
  37. #define PMLCax_EVENT(x) ((x) << 16)
  38. #define PMLCax_FCGS1 0x00000002
  39. #define PMLCax_FCGS0 0x00000001
  40. #define PMR_PMLCa1 145
  41. #define PMR_PMLCa2 146
  42. #define PMR_PMLCa3 147
  43. #define PMR_PMLCb0 272
  44. #define PMLCbx_TRIGONCTL(x) ((x) << 28)
  45. #define PMLCbx_TRIGOFFCTL(x) ((x) << 24)
  46. #define PMLCbx_PMCC 0x00800000
  47. #define PMLCbx_PMP(x) ((x) << 13)
  48. #define PMLCbx_TREHMUL(x) ((x) << 8)
  49. #define PMLCbx_TRESHOLD(x) ((x) << 0)
  50. #define PMR_PMLCb1 273
  51. #define PMR_PMLCb2 274
  52. #define PMR_PMLCb3 275
  53. #define PMR_PMGC0 400
  54. #define PMGC_FAC 0x80000000
  55. #define PMGC_PMIE 0x40000000
  56. #define PMGC_FCECE 0x20000000
  57. #define PMGC_TBSEL(x) ((x) << 11)
  58. #define PMGC_TBEE 0x00000100
  59. #define PMR_UPMC0 0
  60. #define PMR_UPMC1 1
  61. #define PMR_UPMC2 2
  62. #define PMR_UPMC3 3
  63. #define PMR_UPMLCa0 128
  64. #define PMR_UPMLCa1 129
  65. #define PMR_UPMLCa2 130
  66. #define PMR_UPMLCa3 131
  67. #define PMR_UPMLCb0 256
  68. #define PMR_UPMLCb1 257
  69. #define PMR_UPMLCb2 258
  70. #define PMR_UPMLCb3 259
  71. #define PMR_UPMGC0 384
  72. #if _KERNEL
  73. struct pmc_md_powerpc_pmc {
  74. uint64_t pm_powerpc_overflowcnt;
  75. uint32_t pm_powerpc_evsel;
  76. };
  77. union pmc_md_pmc {
  78. struct pmc_md_powerpc_pmc pm_powerpc;
  79. };
  80. #define PMC_TRAPFRAME_TO_PC(TF) ((TF)->srr0)
  81. #define PMC_TRAPFRAME_TO_FP(TF) ((TF)->fixreg[1])
  82. #define PMC_TRAPFRAME_TO_SP(TF) (0)
  83. #endif
  84. #endif /* !_MACHINE_PMC_MDEP_H_ */