1 1.8 matt /* $NetBSD: openpic.h,v 1.8 2012/02/01 02:03:51 matt Exp $ */ 2 1.1 briggs 3 1.1 briggs /*- 4 1.1 briggs * Copyright (c) 2000 Tsubai Masanari. All rights reserved. 5 1.1 briggs * 6 1.1 briggs * Redistribution and use in source and binary forms, with or without 7 1.1 briggs * modification, are permitted provided that the following conditions 8 1.1 briggs * are met: 9 1.1 briggs * 1. Redistributions of source code must retain the above copyright 10 1.1 briggs * notice, this list of conditions and the following disclaimer. 11 1.1 briggs * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 briggs * notice, this list of conditions and the following disclaimer in the 13 1.1 briggs * documentation and/or other materials provided with the distribution. 14 1.1 briggs * 3. The name of the author may not be used to endorse or promote products 15 1.1 briggs * derived from this software without specific prior written permission. 16 1.1 briggs * 17 1.1 briggs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 1.1 briggs * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 1.1 briggs * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 1.1 briggs * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 1.1 briggs * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 1.1 briggs * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 1.1 briggs * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 1.1 briggs * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 1.1 briggs * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 1.1 briggs * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 1.1 briggs */ 28 1.1 briggs 29 1.1 briggs #include <machine/pio.h> 30 1.1 briggs 31 1.1 briggs #include <machine/openpicreg.h> 32 1.1 briggs 33 1.1 briggs extern volatile unsigned char *openpic_base; 34 1.1 briggs 35 1.8 matt static __inline uint32_t openpic_read(u_int); 36 1.8 matt static __inline void openpic_write(u_int, uint32_t); 37 1.7 dsl static __inline int openpic_read_irq(int); 38 1.7 dsl static __inline void openpic_eoi(int); 39 1.1 briggs 40 1.8 matt static __inline uint32_t 41 1.8 matt openpic_read(u_int reg) 42 1.1 briggs { 43 1.8 matt volatile uint8_t *addr = openpic_base + reg; 44 1.1 briggs 45 1.1 briggs return in32rb(addr); 46 1.1 briggs } 47 1.1 briggs 48 1.5 perry static __inline void 49 1.8 matt openpic_write(u_int reg, uint32_t val) 50 1.1 briggs { 51 1.8 matt volatile uint8_t *addr = openpic_base + reg; 52 1.1 briggs 53 1.1 briggs out32rb(addr, val); 54 1.1 briggs } 55 1.1 briggs 56 1.5 perry static __inline int 57 1.8 matt openpic_read_irq(int cpu) 58 1.1 briggs { 59 1.1 briggs return openpic_read(OPENPIC_IACK(cpu)) & OPENPIC_VECTOR_MASK; 60 1.1 briggs } 61 1.1 briggs 62 1.5 perry static __inline void 63 1.8 matt openpic_eoi(int cpu) 64 1.1 briggs { 65 1.1 briggs openpic_write(OPENPIC_EOI(cpu), 0); 66 1.1 briggs openpic_read(OPENPIC_EOI(cpu)); 67 1.1 briggs } 68