xref: /netbsd/sys/dev/tc/tcvar.h (revision bf9ec67e)
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