1/* 2 * This file contains the code to configure and utilize the ppc64 pmc hardware 3 * Copyright (C) 2002 David Engebretsen <engebret@us.ibm.com> 4 */ 5 6#ifndef __KERNEL__ 7#define INLINE_SYSCALL(arg1, arg2) \ 8 ({ \ 9 register long r0 __asm__ ("r0"); \ 10 register long r3 __asm__ ("r3"); \ 11 register long r4 __asm__ ("r4"); \ 12 long ret, err; \ 13 r0 = 208; \ 14 r3 = (long) (arg1); \ 15 r4 = (long) (arg2); \ 16 __asm__ ("sc\n\t" \ 17 "mfcr %1\n\t" \ 18 : "=r" (r3), "=r" (err) \ 19 : "r" (r0), "r" (r3), "r" (r4) \ 20 : "cc", "memory"); \ 21 ret = r3; \ 22 }) 23#endif 24 25#ifndef __ASSEMBLY__ 26struct perfmon_base_struct { 27 u64 profile_buffer; 28 u64 profile_length; 29 u64 trace_buffer; 30 u64 trace_length; 31 u64 trace_end; 32 u64 state; 33}; 34 35struct pmc_header { 36 int type; 37 int pid; 38 int resv[30]; 39}; 40 41struct pmc_struct { 42 int pmc[11]; 43}; 44 45struct pmc_info_struct { 46 unsigned int mode, cpu; 47 48 unsigned int pmc_base[11]; 49 unsigned long pmc_cumulative[8]; 50}; 51 52struct perfmon_struct { 53 struct pmc_header header; 54 55 union { 56 struct pmc_struct pmc; 57 struct pmc_info_struct pmc_info; 58 } vdata; 59}; 60 61enum { 62 PMC_OP_ALLOC = 1, 63 PMC_OP_FREE = 2, 64 PMC_OP_CLEAR = 4, 65 PMC_OP_DUMP = 5, 66 PMC_OP_DUMP_HARDWARE = 6, 67 PMC_OP_DECR_PROFILE = 20, 68 PMC_OP_PMC_PROFILE = 21, 69 PMC_OP_SET = 30, 70 PMC_OP_SET_USER = 31, 71 PMC_OP_END = 30 72}; 73 74 75#define PMC_TRACE_CMD 0xFF 76 77enum { 78 PMC_TYPE_DERC_PROFILE = 1, 79 PMC_TYPE_CYCLE = 2, 80 PMC_TYPE_PROFILE = 3, 81 PMC_TYPE_DCACHE = 4, 82 PMC_TYPE_L2_MISS = 5, 83 PMC_TYPE_LWARCX = 6, 84 PMC_TYPE_END = 6 85}; 86#endif 87 88#define PMC_STATE_INITIAL 0x00 89#define PMC_STATE_READY 0x01 90#define PMC_STATE_DECR_PROFILE 0x10 91#define PMC_STATE_PROFILE_KERN 0x11 92#define PMC_STATE_TRACE_KERN 0x20 93#define PMC_STATE_TRACE_USER 0x21 94 95