1/* 2 * OpenRISC irq.c 3 * 4 * Linux architectural port borrowing liberally from similar works of 5 * others. All original copyrights apply as per the original source 6 * declaration. 7 * 8 * Modifications for the OpenRISC architecture: 9 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> 10 * 11 * This program is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU General Public License 13 * as published by the Free Software Foundation; either version 14 * 2 of the License, or (at your option) any later version. 15 */ 16 17#include <linux/interrupt.h> 18#include <linux/init.h> 19#include <linux/ftrace.h> 20#include <linux/irq.h> 21#include <linux/irqchip.h> 22#include <linux/export.h> 23#include <linux/irqflags.h> 24 25/* read interrupt enabled status */ 26unsigned long arch_local_save_flags(void) 27{ 28 return mfspr(SPR_SR) & (SPR_SR_IEE|SPR_SR_TEE); 29} 30EXPORT_SYMBOL(arch_local_save_flags); 31 32/* set interrupt enabled status */ 33void arch_local_irq_restore(unsigned long flags) 34{ 35 mtspr(SPR_SR, ((mfspr(SPR_SR) & ~(SPR_SR_IEE|SPR_SR_TEE)) | flags)); 36} 37EXPORT_SYMBOL(arch_local_irq_restore); 38 39void __init init_IRQ(void) 40{ 41 irqchip_init(); 42} 43 44static void (*handle_arch_irq)(struct pt_regs *); 45 46void __init set_handle_irq(void (*handle_irq)(struct pt_regs *)) 47{ 48 handle_arch_irq = handle_irq; 49} 50 51void __irq_entry do_IRQ(struct pt_regs *regs) 52{ 53 handle_arch_irq(regs); 54} 55