xref: /dragonfly/sys/platform/pc64/apic/ioapic.h (revision 86d7f5d3)
1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino  * Copyright (c) 1996, by Steve Passe
3*86d7f5d3SJohn Marino  * Copyright (c) 2008 The DragonFly Project.
4*86d7f5d3SJohn Marino  * All rights reserved.
5*86d7f5d3SJohn Marino  *
6*86d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
7*86d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
8*86d7f5d3SJohn Marino  * are met:
9*86d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the above copyright
10*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
11*86d7f5d3SJohn Marino  * 2. The name of the developer may NOT be used to endorse or promote products
12*86d7f5d3SJohn Marino  *    derived from this software without specific prior written permission.
13*86d7f5d3SJohn Marino  *
14*86d7f5d3SJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*86d7f5d3SJohn Marino  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*86d7f5d3SJohn Marino  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*86d7f5d3SJohn Marino  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*86d7f5d3SJohn Marino  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*86d7f5d3SJohn Marino  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*86d7f5d3SJohn Marino  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*86d7f5d3SJohn Marino  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*86d7f5d3SJohn Marino  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*86d7f5d3SJohn Marino  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*86d7f5d3SJohn Marino  * SUCH DAMAGE.
25*86d7f5d3SJohn Marino  *
26*86d7f5d3SJohn Marino  * $FreeBSD: src/sys/i386/include/mpapic.h,v 1.14.2.2 2000/09/30 02:49:34 ps Exp $
27*86d7f5d3SJohn Marino  * $DragonFly: src/sys/platform/pc64/apic/mpapic.h,v 1.1 2008/08/29 17:07:12 dillon Exp $
28*86d7f5d3SJohn Marino  */
29*86d7f5d3SJohn Marino 
30*86d7f5d3SJohn Marino #ifndef _ARCH_APIC_IOAPIC_H_
31*86d7f5d3SJohn Marino #define _ARCH_APIC_IOAPIC_H_
32*86d7f5d3SJohn Marino 
33*86d7f5d3SJohn Marino #ifndef _SYS_BUS_H_
34*86d7f5d3SJohn Marino #include <sys/bus.h>
35*86d7f5d3SJohn Marino #endif
36*86d7f5d3SJohn Marino 
37*86d7f5d3SJohn Marino #ifndef _SYS_QUEUE_H_
38*86d7f5d3SJohn Marino #include <sys/queue.h>
39*86d7f5d3SJohn Marino #endif
40*86d7f5d3SJohn Marino 
41*86d7f5d3SJohn Marino u_int	ioapic_read(volatile void *, int);
42*86d7f5d3SJohn Marino void	ioapic_write(volatile void *, int, u_int);
43*86d7f5d3SJohn Marino 
44*86d7f5d3SJohn Marino struct ioapic_enumerator {
45*86d7f5d3SJohn Marino 	int	ioapic_prio;
46*86d7f5d3SJohn Marino 	TAILQ_ENTRY(ioapic_enumerator) ioapic_link;
47*86d7f5d3SJohn Marino 	int	(*ioapic_probe)(struct ioapic_enumerator *);
48*86d7f5d3SJohn Marino 	void	(*ioapic_enumerate)(struct ioapic_enumerator *);
49*86d7f5d3SJohn Marino };
50*86d7f5d3SJohn Marino 
51*86d7f5d3SJohn Marino #define IOAPIC_ENUM_PRIO_MPTABLE	20
52*86d7f5d3SJohn Marino #define IOAPIC_ENUM_PRIO_MADT		40
53*86d7f5d3SJohn Marino 
54*86d7f5d3SJohn Marino void	ioapic_enumerator_register(struct ioapic_enumerator *);
55*86d7f5d3SJohn Marino void	ioapic_add(void *, int, int);
56*86d7f5d3SJohn Marino void	ioapic_intsrc(int, int, enum intr_trigger, enum intr_polarity);
57*86d7f5d3SJohn Marino void	*ioapic_gsi_ioaddr(int);
58*86d7f5d3SJohn Marino int	ioapic_gsi_pin(int);
59*86d7f5d3SJohn Marino void	ioapic_pin_setup(void *, int, int,
60*86d7f5d3SJohn Marino 	    enum intr_trigger, enum intr_polarity, int);
61*86d7f5d3SJohn Marino void	ioapic_extpin_setup(void *, int, int);
62*86d7f5d3SJohn Marino int	ioapic_extpin_gsi(void);
63*86d7f5d3SJohn Marino int	ioapic_gsi(int, int);
64*86d7f5d3SJohn Marino void	*ioapic_map(vm_paddr_t);
65*86d7f5d3SJohn Marino 
66*86d7f5d3SJohn Marino extern int	ioapic_enable;
67*86d7f5d3SJohn Marino 
68*86d7f5d3SJohn Marino #endif	/* !_ARCH_APIC_IOAPIC_H_ */
69