1/* 2 * (C) Copyright 2000-2002 3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4 * 5 * (C) Copyright 2003 6 * Gleb Natapov <gnatapov@mrv.com> 7 * 8 * (C) Copyright 2007 9 * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com. 10 * 11 * SPDX-License-Identifier: GPL-2.0+ 12 */ 13 14#include <common.h> 15#include <asm/processor.h> 16#include <asm/irq.h> 17 18/* Implemented by SPARC CPUs */ 19extern int interrupt_init_cpu(void); 20extern void timer_interrupt_cpu(void *arg); 21extern int timer_interrupt_init_cpu(void); 22 23int intLock(void) 24{ 25 unsigned int pil; 26 27 pil = get_pil(); 28 29 /* set PIL to 15 ==> no pending interrupts will interrupt CPU */ 30 set_pil(15); 31 32 return pil; 33} 34 35void intUnlock(int oldLevel) 36{ 37 set_pil(oldLevel); 38} 39 40void enable_interrupts(void) 41{ 42 set_pil(0); /* enable all interrupts */ 43} 44 45int disable_interrupts(void) 46{ 47 return intLock(); 48} 49 50int interrupt_is_enabled(void) 51{ 52 if (get_pil() == 15) 53 return 0; 54 return 1; 55} 56 57int interrupt_init(void) 58{ 59 int ret; 60 61 /* call cpu specific function from $(CPU)/interrupts.c */ 62 ret = interrupt_init_cpu(); 63 64 /* enable global interrupts */ 65 enable_interrupts(); 66 67 return ret; 68} 69