1 /* $NetBSD: tcvar.h,v 1.17 2000/06/04 19:15:15 cgd 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 #include <machine/tc_machdep.h> 44 45 /* 46 * In the long run, the following block will go completely away. 47 * For now, the MI TC code still uses the old TC_IPL_ names 48 * and not the new IPL_ names. 49 */ 50 #if 1 51 /* 52 * Map the new definitions to the old. 53 */ 54 #include <machine/intr.h> 55 56 #define tc_intrlevel_t int 57 58 #define TC_IPL_NONE IPL_NONE 59 #define TC_IPL_BIO IPL_BIO 60 #define TC_IPL_NET IPL_NET 61 #define TC_IPL_TTY IPL_TTY 62 #define TC_IPL_CLOCK IPL_CLOCK 63 #endif /* 1 */ 64 65 struct tc_softc { 66 struct device sc_dv; 67 68 int sc_speed; 69 int sc_nslots; 70 struct tc_slotdesc *sc_slots; 71 72 const struct evcnt *(*sc_intr_evcnt)(struct device *, void *); 73 void (*sc_intr_establish)(struct device *, void *, 74 int, int (*)(void *), void *); 75 void (*sc_intr_disestablish)(struct device *, void *); 76 bus_dma_tag_t (*sc_get_dma_tag)(int); 77 }; 78 79 /* 80 * Arguments used to attach TURBOchannel busses. 81 */ 82 struct tcbus_attach_args { 83 char *tba_busname; /* XXX should be common */ 84 bus_space_tag_t tba_memt; 85 86 /* Bus information */ 87 u_int tba_speed; /* see TC_SPEED_* below */ 88 u_int tba_nslots; 89 struct tc_slotdesc *tba_slots; 90 u_int tba_nbuiltins; 91 const struct tc_builtin *tba_builtins; 92 93 94 /* TC bus resource management; XXX will move elsewhere eventually. */ 95 const struct evcnt *(*tba_intr_evcnt)(struct device *, void *); 96 void (*tba_intr_establish)(struct device *, void *, 97 int, int (*)(void *), void *); 98 void (*tba_intr_disestablish)(struct device *, void *); 99 bus_dma_tag_t (*tba_get_dma_tag)(int); 100 }; 101 102 /* 103 * Arguments used to attach TURBOchannel devices. 104 */ 105 struct tc_attach_args { 106 bus_space_tag_t ta_memt; 107 bus_dma_tag_t ta_dmat; 108 109 char ta_modname[TC_ROM_LLEN+1]; 110 u_int ta_slot; 111 tc_offset_t ta_offset; 112 tc_addr_t ta_addr; 113 void *ta_cookie; 114 u_int ta_busspeed; /* see TC_SPEED_* below */ 115 }; 116 117 /* 118 * Description of TURBOchannel slots, provided by machine-dependent 119 * code to the TURBOchannel bus driver. 120 */ 121 struct tc_slotdesc { 122 tc_addr_t tcs_addr; 123 void *tcs_cookie; 124 int tcs_used; 125 }; 126 127 /* 128 * Description of built-in TURBOchannel devices, provided by 129 * machine-dependent code to the TURBOchannel bus driver. 130 */ 131 struct tc_builtin { 132 char *tcb_modname; 133 u_int tcb_slot; 134 tc_offset_t tcb_offset; 135 void *tcb_cookie; 136 }; 137 138 /* 139 * Interrupt establishment functions. 140 */ 141 int tc_checkslot(tc_addr_t, char *); 142 void tc_devinfo(const char *, char *); 143 void tcattach(struct device *, struct device *, void *); 144 const struct evcnt *tc_intr_evcnt(struct device *, void *); 145 void tc_intr_establish(struct device *, void *, int, int (*)(void *), 146 void *); 147 void tc_intr_disestablish(struct device *, void *); 148 149 #include "locators.h" 150 /* 151 * Easy to remember names for TURBOchannel device locators. 152 */ 153 #define tccf_slot cf_loc[TCCF_SLOT] /* slot */ 154 #define tccf_offset cf_loc[TCCF_OFFSET] /* offset */ 155 156 #define TCCF_SLOT_UNKNOWN TCCF_SLOT_DEFAULT 157 #define TCCF_OFFSET_UNKNOWN TCCF_OFFSET_DEFAULT 158 159 /* 160 * Miscellaneous definitions. 161 */ 162 #define TC_SPEED_12_5_MHZ 0 /* 12.5MHz TC bus */ 163 #define TC_SPEED_25_MHZ 1 /* 25MHz TC bus */ 164 165 #endif /* __DEV_TC_TCVAR_H__ */ 166