1/* 2 * File: arch/blackfin/oprofile/timer_int.c 3 * Based on: 4 * Author: Michael Kang 5 * 6 * Created: 7 * Description: 8 * 9 * Modified: 10 * Copyright 2004-2006 Analog Devices Inc. 11 * 12 * Bugs: Enter bugs at http://blackfin.uclinux.org/ 13 * 14 * This program is free software; you can redistribute it and/or modify 15 * it under the terms of the GNU General Public License as published by 16 * the Free Software Foundation; either version 2 of the License, or 17 * (at your option) any later version. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 * 24 * You should have received a copy of the GNU General Public License 25 * along with this program; if not, see the file COPYING, or write 26 * to the Free Software Foundation, Inc., 27 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 28 */ 29 30#include <linux/init.h> 31#include <linux/smp.h> 32#include <linux/irq.h> 33#include <linux/oprofile.h> 34 35#include <asm/ptrace.h> 36 37static void enable_sys_timer0() 38{ 39} 40static void disable_sys_timer0() 41{ 42} 43 44static irqreturn_t sys_timer0_int_handler(int irq, void *dev_id, 45 struct pt_regs *regs) 46{ 47 oprofile_add_sample(regs, 0); 48 return IRQ_HANDLED; 49} 50 51static int sys_timer0_start(void) 52{ 53 enable_sys_timer0(); 54 return request_irq(IVG11, sys_timer0_int_handler, 0, "sys_timer0", NULL); 55} 56 57static void sys_timer0_stop(void) 58{ 59 disable_sys_timer(); 60} 61 62int __init sys_timer0_init(struct oprofile_operations *ops) 63{ 64 extern int nmi_active; 65 66 if (nmi_active <= 0) 67 return -ENODEV; 68 69 ops->start = timer_start; 70 ops->stop = timer_stop; 71 ops->cpu_type = "timer"; 72 printk(KERN_INFO "oprofile: using NMI timer interrupt.\n"); 73 return 0; 74} 75