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