initial commit, pull in sys/arch/armv7/omap
[bbb-pru.git] / intc.h
1 /* $OpenBSD: intc.h,v 1.2 2014/03/29 18:09:28 guenther Exp $ */
2 /*
3 * Copyright (c) 2007,2009 Dale Rahn <drahn@openbsd.org>
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 #ifndef _OMAPINTC_INTR_H_
19 #define _OMAPINTC_INTR_H_
20
21 #ifndef _LOCORE
22
23 #include <arm/armreg.h>
24 #include <arm/cpufunc.h>
25 #include <machine/intr.h>
26 #include <arm/softintr.h>
27
28 extern volatile int current_spl_level;
29 extern volatile int softint_pending;
30 void intc_do_pending(void);
31
32 #define SI_TO_IRQBIT(si) (1U<<(si))
33 void intc_setipl(int new);
34 void intc_splx(int new);
35 int intc_splraise(int ipl);
36 int intc_spllower(int ipl);
37 void intc_setsoftintr(int si);
38
39 /*
40 * An useful function for interrupt handlers.
41 * XXX: This shouldn't be here.
42 */
43 static __inline int
44 find_first_bit( uint32_t bits )
45 {
46 int count;
47
48 /* since CLZ is available only on ARMv5, this isn't portable
49 * to all ARM CPUs. This file is for OMAPINTC processor.
50 */
51 asm( "clz %0, %1" : "=r" (count) : "r" (bits) );
52 return 31-count;
53 }
54
55
56 /*
57 * This function *MUST* be called very early on in a port's
58 * initarm() function, before ANY spl*() functions are called.
59 *
60 * The parameter is the virtual address of the OMAPINTC's Interrupt
61 * Controller registers.
62 */
63 void intc_intr_bootstrap(vaddr_t);
64
65 void intc_irq_handler(void *);
66 void *intc_intr_establish(int irqno, int level, int (*func)(void *),
67 void *cookie, char *name);
68 void intc_intr_disestablish(void *cookie);
69 const char *intc_intr_string(void *cookie);
70
71 #endif /* ! _LOCORE */
72
73 #endif /* _OMAPINTC_INTR_H_ */
74