1 /* $NetBSD: tcvar.h,v 1.9 1997/09/01 08:09:28 jonathan Exp $ */ 2 3 /* 4 * Copyright (c) 1995 Carnegie-Mellon University. 5 * All rights reserved. 6 * 7 * Author: Chris G. Demetriou 8 * 9 * Permission to use, copy, modify and distribute this software and 10 * its documentation is hereby granted, provided that both the copyright 11 * notice and this permission notice appear in all copies of the 12 * software, derivative works or modified versions, and any portions 13 * thereof, and that both notices appear in supporting documentation. 14 * 15 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 16 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 17 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 18 * 19 * Carnegie Mellon requests users of this software to return to 20 * 21 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 22 * School of Computer Science 23 * Carnegie Mellon University 24 * Pittsburgh PA 15213-3890 25 * 26 * any improvements or extensions that they make and grant Carnegie the 27 * rights to redistribute these changes. 28 */ 29 30 #ifndef __DEV_TC_TCVAR_H__ 31 #define __DEV_TC_TCVAR_H__ 32 33 /* 34 * Definitions for TurboChannel autoconfiguration. 35 */ 36 37 #include <machine/bus.h> 38 #include <dev/tc/tcreg.h> 39 40 /* 41 * Machine-dependent definitions. 42 */ 43 #if (alpha + pmax != 1) 44 ERROR: COMPILING FOR UNSUPPORTED MACHINE, OR MORE THAN ONE. 45 #endif 46 #if alpha 47 #include <alpha/tc/tc_machdep.h> 48 #endif 49 #if pmax 50 #include <machine/tc_machdep.h> 51 #endif 52 53 /* 54 * In the long run, the following block will go completely away 55 * (i.e. both parts of the #if, including the #include, etc.). 56 * For now, the MI TC code still uses the old definitions provided 57 * by the pmax port, and not the new definitions provided by the 58 * alpha port. 59 */ 60 #ifdef __alpha__ 61 /* 62 * On the alpha, map the new definitions to the old. 63 */ 64 #include <machine/intr.h> 65 66 #define tc_intrlevel_t int 67 68 #define TC_IPL_NONE IPL_NONE 69 #define TC_IPL_BIO IPL_BIO 70 #define TC_IPL_NET IPL_NET 71 #define TC_IPL_TTY IPL_TTY 72 #define TC_IPL_CLOCK IPL_CLOCK 73 74 #else 75 /* 76 * On the pmax, we still need the old definitions. 77 */ 78 typedef enum { 79 TC_IPL_NONE, /* block only this interrupt */ 80 TC_IPL_BIO, /* block disk interrupts */ 81 TC_IPL_NET, /* block network interrupts */ 82 TC_IPL_TTY, /* block terminal interrupts */ 83 TC_IPL_CLOCK, /* block clock interrupts */ 84 } tc_intrlevel_t; 85 #endif 86 87 /* 88 * Arguments used to attach TurboChannel busses. 89 */ 90 struct tcbus_attach_args { 91 char *tba_busname; /* XXX should be common */ 92 bus_space_tag_t tba_memt; 93 94 /* Bus information */ 95 u_int tba_speed; /* see TC_SPEED_* below */ 96 u_int tba_nslots; 97 struct tc_slotdesc *tba_slots; 98 u_int tba_nbuiltins; 99 const struct tc_builtin *tba_builtins; 100 101 102 /* TC bus resource management; XXX will move elsewhere eventually. */ 103 void (*tba_intr_establish) __P((struct device *, void *, 104 tc_intrlevel_t, int (*)(void *), void *)); 105 void (*tba_intr_disestablish) __P((struct device *, void *)); 106 }; 107 108 /* 109 * Arguments used to attach TurboChannel devices. 110 */ 111 struct tc_attach_args { 112 bus_space_tag_t ta_memt; 113 114 char ta_modname[TC_ROM_LLEN+1]; 115 u_int ta_slot; 116 tc_offset_t ta_offset; 117 tc_addr_t ta_addr; 118 void *ta_cookie; 119 u_int ta_busspeed; /* see TC_SPEED_* below */ 120 }; 121 122 /* 123 * Description of TurboChannel slots, provided by machine-dependent 124 * code to the TurboChannel bus driver. 125 */ 126 struct tc_slotdesc { 127 tc_addr_t tcs_addr; 128 void *tcs_cookie; 129 int tcs_used; 130 }; 131 132 /* 133 * Description of built-in TurboChannel devices, provided by 134 * machine-dependent code to the TurboChannel bus driver. 135 */ 136 struct tc_builtin { 137 char *tcb_modname; 138 u_int tcb_slot; 139 tc_offset_t tcb_offset; 140 void *tcb_cookie; 141 }; 142 143 /* 144 * Interrupt establishment functions. 145 */ 146 void tc_intr_establish __P((struct device *, void *, tc_intrlevel_t, 147 int (*)(void *), void *)); 148 void tc_intr_disestablish __P((struct device *, void *)); 149 150 #include "locators.h" 151 /* 152 * Easy to remember names for TurboChannel device locators. 153 */ 154 #define tccf_slot cf_loc[TCCF_SLOT] /* slot */ 155 #define tccf_offset cf_loc[TCCF_OFFSET] /* offset */ 156 157 #define TCCF_SLOT_UNKNOWN TCCF_SLOT_DEFAULT 158 #define TCCF_OFFSET_UNKNOWN TCCF_OFFSET_DEFAULT 159 160 /* 161 * Miscellaneous definitions. 162 */ 163 #define TC_SPEED_12_5_MHZ 0 /* 12.5MHz TC bus */ 164 #define TC_SPEED_25_MHZ 1 /* 25MHz TC bus */ 165 166 /* 167 * The TurboChannel bus cfdriver, so that subdevices can more 168 * easily tell what bus they're on. 169 */ 170 extern struct cfdriver tc_cd; 171 172 #endif /* __DEV_TC_TCVAR_H__ */ 173