xref: /freebsd/sys/arm/include/intr.h (revision af3dc4a7ca7fdfbe1790f34b83024557a35d11f2)
16fc729afSOlivier Houchard /* 	$NetBSD: intr.h,v 1.7 2003/06/16 20:01:00 thorpej Exp $	*/
26fc729afSOlivier Houchard 
3d8315c79SWarner Losh /*-
4*af3dc4a7SPedro F. Giffuni  * SPDX-License-Identifier: BSD-4-Clause
5*af3dc4a7SPedro F. Giffuni  *
66fc729afSOlivier Houchard  * Copyright (c) 1997 Mark Brinicombe.
76fc729afSOlivier Houchard  * All rights reserved.
86fc729afSOlivier Houchard  *
96fc729afSOlivier Houchard  * Redistribution and use in source and binary forms, with or without
106fc729afSOlivier Houchard  * modification, are permitted provided that the following conditions
116fc729afSOlivier Houchard  * are met:
126fc729afSOlivier Houchard  * 1. Redistributions of source code must retain the above copyright
136fc729afSOlivier Houchard  *    notice, this list of conditions and the following disclaimer.
146fc729afSOlivier Houchard  * 2. Redistributions in binary form must reproduce the above copyright
156fc729afSOlivier Houchard  *    notice, this list of conditions and the following disclaimer in the
166fc729afSOlivier Houchard  *    documentation and/or other materials provided with the distribution.
176fc729afSOlivier Houchard  * 3. All advertising materials mentioning features or use of this software
186fc729afSOlivier Houchard  *    must display the following acknowledgement:
196fc729afSOlivier Houchard  *	This product includes software developed by Mark Brinicombe
206fc729afSOlivier Houchard  *	for the NetBSD Project.
216fc729afSOlivier Houchard  * 4. The name of the company nor the name of the author may be used to
226fc729afSOlivier Houchard  *    endorse or promote products derived from this software without specific
236fc729afSOlivier Houchard  *    prior written permission.
246fc729afSOlivier Houchard  *
256fc729afSOlivier Houchard  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
266fc729afSOlivier Houchard  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
276fc729afSOlivier Houchard  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
286fc729afSOlivier Houchard  * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
296fc729afSOlivier Houchard  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
306fc729afSOlivier Houchard  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
316fc729afSOlivier Houchard  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
326fc729afSOlivier Houchard  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
336fc729afSOlivier Houchard  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
346fc729afSOlivier Houchard  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
356fc729afSOlivier Houchard  * SUCH DAMAGE.
366fc729afSOlivier Houchard  *
376fc729afSOlivier Houchard  * $FreeBSD$
386fc729afSOlivier Houchard  *
396fc729afSOlivier Houchard  */
406fc729afSOlivier Houchard 
416fc729afSOlivier Houchard #ifndef _MACHINE_INTR_H_
426fc729afSOlivier Houchard #define _MACHINE_INTR_H_
436fc729afSOlivier Houchard 
44ec7d251eSAndrew Turner #ifdef FDT
45ec7d251eSAndrew Turner #include <dev/ofw/openfirm.h>
46ec7d251eSAndrew Turner #endif
47ec7d251eSAndrew Turner 
4859c3cb81SAndrew Turner #ifdef INTRNG
49686450c8SIan Lepore 
50686450c8SIan Lepore #ifndef NIRQ
51686450c8SIan Lepore #define	NIRQ		1024	/* XXX - It should be an option. */
52686450c8SIan Lepore #endif
53686450c8SIan Lepore 
54d6233babSAdrian Chadd #include <sys/intr.h>
55686450c8SIan Lepore 
565b70c08cSSvatopluk Kraus #ifdef SMP
57bff6be3eSSvatopluk Kraus typedef void intr_ipi_send_t(void *, cpuset_t, u_int);
5861c8fde5SSvatopluk Kraus typedef void intr_ipi_handler_t(void *);
595b70c08cSSvatopluk Kraus 
6061c8fde5SSvatopluk Kraus void intr_ipi_dispatch(u_int, struct trapframe *);
6161c8fde5SSvatopluk Kraus void intr_ipi_send(cpuset_t, u_int);
625b70c08cSSvatopluk Kraus 
6361c8fde5SSvatopluk Kraus void intr_ipi_setup(u_int, const char *, intr_ipi_handler_t *, void *,
6461c8fde5SSvatopluk Kraus     intr_ipi_send_t *, void *);
6561c8fde5SSvatopluk Kraus 
6661c8fde5SSvatopluk Kraus int intr_pic_ipi_setup(u_int, const char *, intr_ipi_handler_t *, void *);
675b70c08cSSvatopluk Kraus #endif
6859c3cb81SAndrew Turner #else /* INTRNG */
69686450c8SIan Lepore 
70d2120224SSam Leffler /* XXX move to std.* files? */
71d076bcf2SOlivier Houchard #ifdef CPU_XSCALE_81342
72d076bcf2SOlivier Houchard #define NIRQ		128
739722a615SBenno Rice #elif defined(CPU_XSCALE_PXA2X0)
749722a615SBenno Rice #include <arm/xscale/pxa/pxareg.h>
759722a615SBenno Rice #define	NIRQ		IRQ_GPIO_MAX
76373bbe25SRafal Jaworowski #elif defined(SOC_MV_DISCOVERY)
77373bbe25SRafal Jaworowski #define NIRQ		96
78d2120224SSam Leffler #elif defined(CPU_ARM9) || defined(SOC_MV_KIRKWOOD) || \
79d2120224SSam Leffler     defined(CPU_XSCALE_IXP435)
8031d0686dSOlivier Houchard #define NIRQ		64
8193a065e7SMichal Meloun #elif defined(CPU_CORTEXA)
8299d7e0a9SRuslan Bukin #define NIRQ		1020
83543c9e95SGanbold Tsagaankhuu #elif defined(CPU_KRAIT)
84543c9e95SGanbold Tsagaankhuu #define NIRQ		288
85930798f3SAndrew Turner #elif defined(CPU_ARM1176)
8646ad39d5SOleksandr Tymoshenko #define NIRQ		128
87d65cdf4bSGrzegorz Bernacki #elif defined(SOC_MV_ARMADAXP)
88aa0ea9d0SGrzegorz Bernacki #define MAIN_IRQ_NUM		116
89aa0ea9d0SGrzegorz Bernacki #define ERR_IRQ_NUM		32
90aa0ea9d0SGrzegorz Bernacki #define ERR_IRQ			(MAIN_IRQ_NUM)
91aa0ea9d0SGrzegorz Bernacki #define MSI_IRQ_NUM		32
92aa0ea9d0SGrzegorz Bernacki #define MSI_IRQ			(ERR_IRQ + ERR_IRQ_NUM)
93aa0ea9d0SGrzegorz Bernacki #define NIRQ			(MAIN_IRQ_NUM + ERR_IRQ_NUM + MSI_IRQ_NUM)
9431d0686dSOlivier Houchard #else
957c320e5bSOlivier Houchard #define NIRQ		32
9631d0686dSOlivier Houchard #endif
976fc729afSOlivier Houchard 
98272489feSMarcel Moolenaar int arm_get_next_irq(int);
99f60e923bSOlivier Houchard void arm_mask_irq(uintptr_t);
100f60e923bSOlivier Houchard void arm_unmask_irq(uintptr_t);
101ae4f863cSIan Lepore void arm_intrnames_init(void);
102ef544f63SPaolo Pisati void arm_setup_irqhandler(const char *, int (*)(void*), void (*)(void*),
103ef544f63SPaolo Pisati     void *, int, int, void **);
104f4e42148SRafal Jaworowski int arm_remove_irqhandler(int, void *);
105e19357d3SOlivier Houchard extern void (*arm_post_filter)(void *);
1064acd62c5SZbigniew Bodek extern int (*arm_config_irq)(int irq, enum intr_trigger trig,
1074acd62c5SZbigniew Bodek     enum intr_polarity pol);
108cf1a573fSOleksandr Tymoshenko 
1092b3ad188SAdrian Chadd void intr_pic_init_secondary(void);
110cf1a573fSOleksandr Tymoshenko 
111ec7d251eSAndrew Turner #ifdef FDT
11226b9f0ebSIan Lepore int gic_decode_fdt(phandle_t, pcell_t *, int *, int *, int *);
1132b3ad188SAdrian Chadd int intr_fdt_map_irq(phandle_t, pcell_t *, int);
114ec7d251eSAndrew Turner #endif
115ec7d251eSAndrew Turner 
11659c3cb81SAndrew Turner #endif /* INTRNG */
117686450c8SIan Lepore 
118686450c8SIan Lepore void arm_irq_memory_barrier(uintptr_t);
119686450c8SIan Lepore 
1206fc729afSOlivier Houchard #endif	/* _MACHINE_INTR_H */
121