1*71aa81fbSskrll /* $NetBSD: plicvar.h,v 1.2 2023/09/02 09:58:15 skrll Exp $ */ 275b842b8Sskrll 375b842b8Sskrll /*- 475b842b8Sskrll * Copyright (c) 2022 The NetBSD Foundation, Inc. 575b842b8Sskrll * All rights reserved. 675b842b8Sskrll * 775b842b8Sskrll * Portions of this code is derived from software contributed to The NetBSD 875b842b8Sskrll * Foundation by Simon Burge. 975b842b8Sskrll * 1075b842b8Sskrll * Redistribution and use in source and binary forms, with or without 1175b842b8Sskrll * modification, are permitted provided that the following conditions 1275b842b8Sskrll * are met: 1375b842b8Sskrll * 1. Redistributions of source code must retain the above copyright 1475b842b8Sskrll * notice, this list of conditions and the following disclaimer. 1575b842b8Sskrll * 2. Redistributions in binary form must reproduce the above copyright 1675b842b8Sskrll * notice, this list of conditions and the following disclaimer in the 1775b842b8Sskrll * documentation and/or other materials provided with the distribution. 1875b842b8Sskrll * 1975b842b8Sskrll * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2075b842b8Sskrll * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2175b842b8Sskrll * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2275b842b8Sskrll * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2375b842b8Sskrll * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2475b842b8Sskrll * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2575b842b8Sskrll * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2675b842b8Sskrll * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2775b842b8Sskrll * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2875b842b8Sskrll * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2975b842b8Sskrll * POSSIBILITY OF SUCH DAMAGE. 3075b842b8Sskrll */ 3175b842b8Sskrll 3275b842b8Sskrll #ifndef _RISCV_PLICVAR_H 3375b842b8Sskrll #define _RISCV_PLICVAR_H 3475b842b8Sskrll 3575b842b8Sskrll struct plic_intrhand { 3675b842b8Sskrll int (*ih_func)(void *); 3775b842b8Sskrll void *ih_arg; 3875b842b8Sskrll bool ih_mpsafe; 3975b842b8Sskrll u_int ih_irq; 40*71aa81fbSskrll u_int ih_hartid; 4175b842b8Sskrll }; 4275b842b8Sskrll 4375b842b8Sskrll struct plic_softc { 4475b842b8Sskrll device_t sc_dev; 4575b842b8Sskrll bus_space_tag_t sc_bst; 4675b842b8Sskrll bus_space_handle_t sc_bsh; 4775b842b8Sskrll 4875b842b8Sskrll uint32_t sc_ndev; 4975b842b8Sskrll 5075b842b8Sskrll uint32_t sc_context[MAXCPUS]; 5175b842b8Sskrll struct plic_intrhand *sc_intr; 5275b842b8Sskrll struct evcnt *sc_intrevs; 5375b842b8Sskrll }; 5475b842b8Sskrll 5575b842b8Sskrll 5675b842b8Sskrll int plic_intr(void *); 5775b842b8Sskrll void plic_enable(struct plic_softc *, u_int, u_int); 5875b842b8Sskrll void plic_disable(struct plic_softc *, u_int, u_int); 5975b842b8Sskrll void plic_set_priority(struct plic_softc *, u_int, uint32_t); 6075b842b8Sskrll void plic_set_threshold(struct plic_softc *, cpuid_t, uint32_t); 6175b842b8Sskrll int plic_attach_common(struct plic_softc *, bus_addr_t, bus_size_t); 6275b842b8Sskrll 6375b842b8Sskrll void * plic_intr_establish_xname(u_int, int, int, int (*)(void *), void *, 6475b842b8Sskrll const char *); 6575b842b8Sskrll void plic_intr_disestablish(void *); 6675b842b8Sskrll 6775b842b8Sskrll 6875b842b8Sskrll #endif /* _RISCV_PLICVAR_H */ 69