1/** 2 * @file op_model_v6.c 3 * ARM11 Performance Monitor Driver 4 * 5 * Based on op_model_xscale.c 6 * 7 * @remark Copyright 2000-2004 Deepak Saxena <dsaxena@mvista.com> 8 * @remark Copyright 2000-2004 MontaVista Software Inc 9 * @remark Copyright 2004 Dave Jiang <dave.jiang@intel.com> 10 * @remark Copyright 2004 Intel Corporation 11 * @remark Copyright 2004 Zwane Mwaikambo <zwane@arm.linux.org.uk> 12 * @remark Copyright 2004 OProfile Authors 13 * 14 * @remark Read the file COPYING 15 * 16 * @author Tony Lindgren <tony@atomide.com> 17 */ 18 19/* #define DEBUG */ 20#include <linux/types.h> 21#include <linux/errno.h> 22#include <linux/sched.h> 23#include <linux/oprofile.h> 24#include <linux/interrupt.h> 25#include <asm/irq.h> 26#include <asm/system.h> 27 28#include "op_counter.h" 29#include "op_arm_model.h" 30#include "op_model_arm11_core.h" 31 32static int irqs[] = { 33#ifdef CONFIG_ARCH_OMAP2 34 3, 35#endif 36}; 37 38static void armv6_pmu_stop(void) 39{ 40 arm11_stop_pmu(); 41 arm11_release_interrupts(irqs, ARRAY_SIZE(irqs)); 42} 43 44static int armv6_pmu_start(void) 45{ 46 int ret; 47 48 ret = arm11_request_interrupts(irqs, ARRAY_SIZE(irqs)); 49 if (ret >= 0) 50 ret = arm11_start_pmu(); 51 52 return ret; 53} 54 55static int armv6_detect_pmu(void) 56{ 57 return 0; 58} 59 60struct op_arm_model_spec op_armv6_spec = { 61 .init = armv6_detect_pmu, 62 .num_counters = 3, 63 .setup_ctrs = arm11_setup_pmu, 64 .start = armv6_pmu_start, 65 .stop = armv6_pmu_stop, 66 .name = "arm/armv6", 67}; 68