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