1*ff4bde10Sknakahara /* $NetBSD: intr.h,v 1.60 2022/09/07 00:40:19 knakahara Exp $ */ 2c17413ffSbouyer /* NetBSD intr.h,v 1.15 2004/10/31 10:39:34 yamt Exp */ 3c17413ffSbouyer 4c17413ffSbouyer /*- 5c17413ffSbouyer * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. 6c17413ffSbouyer * All rights reserved. 7c17413ffSbouyer * 8c17413ffSbouyer * This code is derived from software contributed to The NetBSD Foundation 9c17413ffSbouyer * by Charles M. Hannum, and by Jason R. Thorpe. 10c17413ffSbouyer * 11c17413ffSbouyer * Redistribution and use in source and binary forms, with or without 12c17413ffSbouyer * modification, are permitted provided that the following conditions 13c17413ffSbouyer * are met: 14c17413ffSbouyer * 1. Redistributions of source code must retain the above copyright 15c17413ffSbouyer * notice, this list of conditions and the following disclaimer. 16c17413ffSbouyer * 2. Redistributions in binary form must reproduce the above copyright 17c17413ffSbouyer * notice, this list of conditions and the following disclaimer in the 18c17413ffSbouyer * documentation and/or other materials provided with the distribution. 19c17413ffSbouyer * 20c17413ffSbouyer * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21c17413ffSbouyer * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22c17413ffSbouyer * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23c17413ffSbouyer * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24c17413ffSbouyer * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25c17413ffSbouyer * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26c17413ffSbouyer * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27c17413ffSbouyer * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28c17413ffSbouyer * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29c17413ffSbouyer * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30c17413ffSbouyer * POSSIBILITY OF SUCH DAMAGE. 31c17413ffSbouyer */ 3241d325dcScl 3341d325dcScl #ifndef _XEN_INTR_H_ 3441d325dcScl #define _XEN_INTR_H_ 3541d325dcScl 36c24c993fSbouyer #include <xen/intrdefs.h> 3741d325dcScl 3841d325dcScl #ifndef _LOCORE 39ac8432e2Scherry #include <xen/include/public/xen.h> 40ac8432e2Scherry #include <xen/include/public/event_channel.h> 41eb432c68Scherry #include <x86/intr.h> 424e541343Sbouyer #include <xen/xen.h> 434e541343Sbouyer #include <xen/hypervisor.h> 44c17413ffSbouyer #include <machine/pic.h> 45098e562dSdyoung #include <sys/evcnt.h> 4641d325dcScl 47aab0004bSbouyer #include "opt_xen.h" 48aab0004bSbouyer 49d3ccea85Sbouyer 50d3ccea85Sbouyer struct cpu_info; 51c17413ffSbouyer /* 52c17413ffSbouyer * Struct describing an event channel. 53c17413ffSbouyer */ 54c17413ffSbouyer 55c17413ffSbouyer struct evtsource { 56c17413ffSbouyer int ev_maxlevel; /* max. IPL for this source */ 57*ff4bde10Sknakahara uint64_t ev_imask; /* interrupt mask */ 58c17413ffSbouyer struct intrhand *ev_handlers; /* handler chain */ 59c17413ffSbouyer struct evcnt ev_evcnt; /* interrupt counter */ 603ccb0addScherry struct cpu_info *ev_cpu; /* cpu on which this event is bound */ 61c24c993fSbouyer char ev_intrname[INTRIDBUF]; /* interrupt string */ 62c24c993fSbouyer char ev_xname[INTRDEVNAMEBUF]; /* handler device list */ 63c24c993fSbouyer struct intrsource *ev_isl; /* entry in intr sources list */ 64c17413ffSbouyer }; 65c17413ffSbouyer 6641d325dcScl extern struct intrstub xenev_stubs[]; 670ae0d1b1Sjdolecek extern short irq2port[NR_EVENT_CHANNELS]; /* actually port + 1, so that 0 is invaid */ 688ec1d940Sknakahara 69781f72a7Scegger #ifdef MULTIPROCESSOR 70eb432c68Scherry int xen_intr_biglock_wrapper(void *); 71781f72a7Scegger #endif 72781f72a7Scegger 73e3cb69cbScherry #if defined(DOM0OPS) || NPCI > 0 746cc641e8Scherry int xen_pic_to_gsi(struct pic *, int); 7530654f1bSbouyer int xen_map_msi_pirq(struct pic *, int); 7630654f1bSbouyer int xen_map_msix_pirq(struct pic *, int); 7730654f1bSbouyer void xen_pci_msi_release(struct pic *, int); 78e3cb69cbScherry #endif /* defined(DOM0OPS) || NPCI > 0 */ 79aab0004bSbouyer 80d7b11fa4Scherry #ifdef MULTIPROCESSOR 81d7b11fa4Scherry void xen_ipi_init(void); 82d7b11fa4Scherry int xen_send_ipi(struct cpu_info *, uint32_t); 83d7b11fa4Scherry void xen_broadcast_ipi(uint32_t); 84d7b11fa4Scherry #else 853ccb0addScherry #define xen_ipi_init(_1) ((void) 0) /* nothing */ 863ccb0addScherry #define xen_send_ipi(_i1, _i2) (0) /* nothing */ 873ccb0addScherry #define xen_broadcast_ipi(_i1) ((void) 0) /* nothing */ 88d7b11fa4Scherry #endif /* MULTIPROCESSOR */ 892465aa9cScherry 902465aa9cScherry void *xen_intr_establish_xname(int, struct pic *, int, int, int, int (*)(void *), 912465aa9cScherry void *, bool, const char *); 922465aa9cScherry void *xen_intr_establish(int, struct pic *, int, int, int, int (*)(void *), 932465aa9cScherry void *, bool); 9434998744Sthorpej void xen_intr_mask(struct intrhand *); 9534998744Sthorpej void xen_intr_unmask(struct intrhand *); 962465aa9cScherry void xen_intr_disestablish(struct intrhand *); 972465aa9cScherry 98374fa909Sjdolecek struct intrsource *xen_intr_allocate_io_intrsource(const char *); 99374fa909Sjdolecek void xen_intr_free_io_intrsource(const char *); 100374fa909Sjdolecek 101c17413ffSbouyer #endif /* !_LOCORE */ 102c17413ffSbouyer 10341d325dcScl #endif /* _XEN_INTR_H_ */ 104