intr.h revision 301265
1281494Sandrew/*-
2281494Sandrew * Copyright (c) 2014 Andrew Turner <andrew@FreeBSD.org>
3281494Sandrew * All rights reserved.
4281494Sandrew *
5281494Sandrew * Redistribution and use in source and binary forms, with or without
6281494Sandrew * modification, are permitted provided that the following conditions
7281494Sandrew * are met:
8281494Sandrew * 1. Redistributions of source code must retain the above copyright
9281494Sandrew *    notice, this list of conditions and the following disclaimer.
10281494Sandrew * 2. Redistributions in binary form must reproduce the above copyright
11281494Sandrew *    notice, this list of conditions and the following disclaimer in the
12281494Sandrew *    documentation and/or other materials provided with the distribution.
13281494Sandrew *
14281494Sandrew * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15281494Sandrew * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16281494Sandrew * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17281494Sandrew * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18281494Sandrew * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19281494Sandrew * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20281494Sandrew * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21281494Sandrew * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22281494Sandrew * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23281494Sandrew * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24281494Sandrew * SUCH DAMAGE.
25281494Sandrew *
26281494Sandrew * $FreeBSD: head/sys/arm64/include/intr.h 301265 2016-06-03 10:28:06Z andrew $
27281494Sandrew */
28281494Sandrew
29281494Sandrew#ifndef _MACHINE_INTR_H_
30281494Sandrew#define	_MACHINE_INTR_H_
31281494Sandrew
32299936Sandrew#ifdef INTRNG
33299936Sandrew
34299936Sandrew#ifdef FDT
35299936Sandrew#include <dev/ofw/openfirm.h>
36299936Sandrew#endif
37299936Sandrew
38299936Sandrew#include <sys/intr.h>
39299936Sandrew
40299936Sandrew#ifndef NIRQ
41301265Sandrew#define	NIRQ		2048	/* XXX - It should be an option. */
42299936Sandrew#endif
43299936Sandrew
44299936Sandrewstatic inline void
45299936Sandrewarm_irq_memory_barrier(uintptr_t irq)
46299936Sandrew{
47299936Sandrew}
48299936Sandrew
49299936Sandrew#ifdef SMP
50299936Sandrewvoid intr_ipi_dispatch(u_int, struct trapframe *);
51299936Sandrew#endif
52299936Sandrew
53299936Sandrew#else
54297028Sandrewint	intr_irq_config(u_int, enum intr_trigger, enum intr_polarity);
55297028Sandrewvoid	intr_irq_handler(struct trapframe *);
56297028Sandrewint	intr_irq_remove_handler(device_t, u_int, void *);
57297028Sandrew
58281494Sandrewvoid	arm_dispatch_intr(u_int, struct trapframe *);
59281494Sandrewint	arm_enable_intr(void);
60281494Sandrewvoid	arm_mask_irq(u_int);
61281494Sandrewvoid	arm_register_root_pic(device_t, u_int);
62281494Sandrewvoid	arm_register_msi_pic(device_t);
63292062Sandrewint	arm_alloc_msi(device_t, device_t, int, int, int *);
64292062Sandrewint	arm_release_msi(device_t, device_t, int, int *);
65292062Sandrewint	arm_alloc_msix(device_t, device_t, int *);
66292062Sandrewint	arm_release_msix(device_t, device_t, int);
67292062Sandrewint	arm_map_msi(device_t, device_t, int, uint64_t *, uint32_t *);
68292062Sandrewint	arm_map_msix(device_t, device_t, int, uint64_t *, uint32_t *);
69281494Sandrewint	arm_setup_intr(const char *, driver_filter_t *, driver_intr_t,
70281494Sandrew				void *, u_int, enum intr_type, void **);
71281494Sandrewvoid	arm_unmask_irq(u_int);
72281494Sandrew
73281494Sandrew#ifdef SMP
74297028Sandrewint	intr_irq_bind(u_int, int);
75297028Sandrew
76281494Sandrewvoid	arm_init_secondary(void);
77281494Sandrewvoid	arm_setup_ipihandler(driver_filter_t *, u_int);
78281494Sandrewvoid	arm_unmask_ipi(u_int);
79281494Sandrew#endif
80299936Sandrew#endif
81281494Sandrew
82281494Sandrew#endif	/* _MACHINE_INTR_H */
83