summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/isa_device.h
blob: 7092a3fed3d9477004ba28ce6febebd8524efee3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*-
 * Copyright (c) 1991 The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *	from: @(#)isa_device.h	7.1 (Berkeley) 5/9/91
 *	$Id: isa_device.h,v 1.55 1998/10/12 11:32:35 bde Exp $
 */

#ifndef _I386_ISA_ISA_DEVICE_H_
#define	_I386_ISA_ISA_DEVICE_H_

/*
 * ISA Bus Autoconfiguration
 */

typedef	void	ointhand2_t __P((int unit));

/*
 * Per device structure.
 *
 * XXX Note:  id_conflicts should either become an array of things we're
 * specifically allowed to conflict with or be subsumed into some
 * more powerful mechanism for detecting and dealing with multiple types
 * of non-fatal conflict.  -jkh XXX
 */
struct isa_device {
	int	id_id;		/* device id */
	struct	isa_driver *id_driver;
	int	id_iobase;	/* base i/o address */
	u_int	id_irq;		/* interrupt request */
	int	id_drq;		/* DMA request */
	caddr_t id_maddr;	/* physical i/o memory address on bus (if any)*/
	int	id_msize;	/* size of i/o memory */
	union {
		inthand2_t *id_i;
		ointhand2_t *id_oi;
	} id_iu;		/* interrupt interface routine */
#define	id_intr		id_iu.id_i
#define	id_ointr	id_iu.id_oi
	int	id_unit;	/* unit number */
	int	id_flags;	/* flags */
	int	id_scsiid;	/* scsi id if needed */
	int	id_alive;	/* device is present */
#define	RI_FAST		1		/* fast interrupt handler */
	u_int	id_ri_flags;	/* flags for register_intr() */
	int	id_reconfig;	/* hot eject device support (such as PCMCIA) */
	int	id_enabled;	/* is device enabled */
	int	id_conflicts;	/* we're allowed to conflict with things */
	struct isa_device *id_next; /* used in isa_devlist in userconfig() */
};

/*
 * Bits to specify the type and amount of conflict checking.
 */
#define	CC_ATTACH	(1 << 0)
#define	CC_DRQ		(1 << 1)
#define	CC_IOADDR	(1 << 2)
#define	CC_IRQ		(1 << 3)
#define	CC_MEMADDR	(1 << 4)
#define	CC_QUIET	(1 << 5)

/*
 * Per-driver structure.
 *
 * Each device driver defines entries for a set of routines
 * as well as an array of types which are acceptable to it.
 * These are used at boot time by the configuration program.
 */
struct isa_driver {
	int	(*probe) __P((struct isa_device *idp));
					/* test whether device is present */
	int	(*attach) __P((struct isa_device *idp));
					/* setup driver for a device */
	char	*name;			/* device name */
	int	sensitive_hw;		/* true if other probes confuse us */
};

#ifdef KERNEL

extern struct isa_device isa_biotab_fdc[];
extern struct isa_device isa_biotab_wdc[];
extern struct isa_device isa_devtab_bio[];
extern struct isa_device isa_devtab_net[];
extern struct isa_device isa_devtab_cam[];
extern struct isa_device isa_devtab_null[];
extern struct isa_device isa_devtab_tty[];

struct isa_device *
	find_display __P((void));
struct isa_device *
	find_isadev __P((struct isa_device *table, struct isa_driver *driverp,
			 int unit));
int	haveseen_isadev __P((struct isa_device *dvp, u_int checkbits));
void	isa_configure __P((void));
void	isa_dmacascade __P((int chan));
void	isa_dmadone __P((int flags, caddr_t addr, int nbytes, int chan));
void	isa_dmainit __P((int chan, u_int bouncebufsize));
void	isa_dmastart __P((int flags, caddr_t addr, u_int nbytes, int chan));
int	isa_dma_acquire __P((int chan));
void	isa_dma_release __P((int chan));
int	isa_dmastatus __P((int chan));
int	isa_dmastop __P((int chan));
void	reconfig_isadev __P((struct isa_device *isdp, u_int *mp));

/* XXX temporary hack for old config files. */
#ifdef C
#define	adintr		NULL
#define	ahaintr		NULL
#define	aicintr		NULL
#define	alogintr	NULL
#define	arintr		NULL
#define	ascintr		NULL
#ifdef PC98
#define	bsintr		NULL
#endif
#define	csintr		NULL
#define	cxintr		NULL
#define	cyintr		NULL
#define	edintr		NULL
#define	egintr		NULL
#define	elintr		NULL
#define	epintr		NULL
#define	exintr		NULL
#define	fdintr		NULL
#define	feintr		NULL
#define	gusintr		NULL
#define	ieintr		NULL
#define	labpcintr	NULL
#define	le_intr		NULL
#define	lncintr		NULL
#define	loranintr	NULL
#define	lptintr		NULL
#define	m6850intr	NULL
#define	mcdintr		NULL
#define	mseintr		NULL
#define	ncaintr		NULL
#define	npxintr		NULL
#define	pasintr		NULL
#define	pcmintr		NULL
#define	pcrint		NULL
#define	ppcintr		NULL
#define	pcfintr		NULL
#define	psmintr		NULL
#define	rcintr		NULL
#define	sbintr		NULL
#define	scintr		NULL
#define	seaintr		NULL
#define	siointr		NULL
#define	sndintr		NULL
#define	spigintr	NULL
#define	srintr		NULL
#define	sscapeintr	NULL
#define	stlintr		NULL
#define	twintr		NULL
#define	uhaintr		NULL
#define	wdintr		NULL
#define	wdsintr		NULL
#define	wlintr		NULL
#define	wtintr		NULL
#define	zeintr		NULL
#define	zpintr		NULL
#endif /* C */

#endif /* KERNEL */

#endif /* !_I386_ISA_ISA_DEVICE_H_ */
OpenPOWER on IntegriCloud