1 /* $OpenBSD: sbusvar.h,v 1.12 2007/05/31 17:23:14 sobrado Exp $ */ 2 /* $NetBSD: sbusvar.h,v 1.11 2000/11/01 06:18:45 eeh Exp $ */ 3 4 /*- 5 * Copyright (c) 1998 The NetBSD Foundation, Inc. 6 * All rights reserved. 7 * 8 * This code is derived from software contributed to The NetBSD Foundation 9 * by Paul Kranenburg. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. All advertising materials mentioning features or use of this software 20 * must display the following acknowledgement: 21 * This product includes software developed by the NetBSD 22 * Foundation, Inc. and its contributors. 23 * 4. Neither the name of The NetBSD Foundation nor the names of its 24 * contributors may be used to endorse or promote products derived 25 * from this software without specific prior written permission. 26 * 27 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 28 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 29 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 30 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 31 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 40 #ifndef _SBUS_VAR_H 41 #define _SBUS_VAR_H 42 43 struct sbus_softc; 44 45 /* 46 * S-bus variables. 47 */ 48 49 /* Device register space description */ 50 struct sbus_reg { 51 u_int32_t sbr_slot; 52 u_int32_t sbr_offset; 53 u_int32_t sbr_size; 54 }; 55 56 /* Interrupt information */ 57 struct sbus_intr { 58 u_int32_t sbi_pri; /* priority (IPL) */ 59 u_int32_t sbi_vec; /* vector (always 0?) */ 60 }; 61 62 /* Address translation across busses */ 63 struct sbus_range { 64 u_int32_t cspace; /* Client space */ 65 u_int32_t coffset; /* Client offset */ 66 u_int32_t pspace; /* Parent space */ 67 u_int32_t poffset; /* Parent offset */ 68 u_int32_t size; /* Size in bytes of this range */ 69 }; 70 71 /* 72 * SBus driver attach arguments. 73 */ 74 struct sbus_attach_args { 75 int sa_placeholder; /* for obio attach args sharing */ 76 bus_space_tag_t sa_bustag; 77 bus_dma_tag_t sa_dmatag; 78 char *sa_name; /* PROM node name */ 79 int sa_node; /* PROM handle */ 80 struct sbus_reg *sa_reg; /* SBus register space for device */ 81 int sa_nreg; /* Number of SBus register spaces */ 82 #define sa_slot sa_reg[0].sbr_slot 83 #define sa_offset sa_reg[0].sbr_offset 84 #define sa_size sa_reg[0].sbr_size 85 86 struct sbus_intr *sa_intr; /* SBus interrupts for device */ 87 int sa_nintr; /* Number of interrupts */ 88 #define sa_pri sa_intr[0].sbi_pri 89 90 u_int32_t *sa_promvaddrs;/* PROM-supplied virtual addresses -- 32-bit */ 91 int sa_npromvaddrs; /* Number of PROM VAs */ 92 #define sa_promvaddr sa_promvaddrs[0] 93 int sa_frequency; /* SBus clockrate */ 94 }; 95 96 int sbus_print(void *, const char *); 97 98 int sbus_setup_attach_args( 99 struct sbus_softc *, 100 bus_space_tag_t, 101 bus_dma_tag_t, 102 int, /*node*/ 103 struct sbus_attach_args *); 104 105 void sbus_destroy_attach_args(struct sbus_attach_args *); 106 107 #define sbus_bus_map(t, slot, offset, sz, flags, unused, hp) \ 108 bus_space_map(t, BUS_ADDR(slot, offset), sz, flags, hp) 109 110 #if notyet 111 /* variables per SBus */ 112 struct sbus_softc { 113 struct device sc_dev; /* base device */ 114 bus_space_tag_t sc_bustag; 115 bus_dma_tag_t sc_dmatag; 116 int sc_clockfreq; /* clock frequency (in Hz) */ 117 struct sbus_range *sc_range; 118 int sc_nrange; 119 int sc_burst; /* burst transfer sizes supported */ 120 /* machdep stuff follows here */ 121 int *sc_intr2ipl; /* Interrupt level translation */ 122 int *sc_intr_compat; /* `intr' property to sbus compat */ 123 }; 124 #endif 125 126 127 /* 128 * PROM-reported DMA burst sizes for the SBus 129 */ 130 #define SBUS_BURST_1 0x1 131 #define SBUS_BURST_2 0x2 132 #define SBUS_BURST_4 0x4 133 #define SBUS_BURST_8 0x8 134 #define SBUS_BURST_16 0x10 135 #define SBUS_BURST_32 0x20 136 #define SBUS_BURST_64 0x40 137 138 /* We use #defined(SUN4*) here while the ports are in flux */ 139 #if defined(__sparc__) && !defined(__sparc64__) 140 #include <sparc/dev/sbusvar.h> 141 #define INTLEV(x) (x) 142 #elif defined(__sparc64__) 143 #include <sparc64/dev/sbusvar.h> 144 #include <sparc64/dev/iommureg.h> 145 #endif 146 147 #endif /* _SBUS_VAR_H */