isavar.h revision 117337
1232809Sjmallett/*-
2232809Sjmallett * Copyright (c) 1998 Doug Rabson
3232809Sjmallett * All rights reserved.
4232809Sjmallett *
5232809Sjmallett * Redistribution and use in source and binary forms, with or without
6232809Sjmallett * modification, are permitted provided that the following conditions
7232809Sjmallett * are met:
8232809Sjmallett * 1. Redistributions of source code must retain the above copyright
9232809Sjmallett *    notice, this list of conditions and the following disclaimer.
10232809Sjmallett * 2. Redistributions in binary form must reproduce the above copyright
11232809Sjmallett *    notice, this list of conditions and the following disclaimer in the
12232809Sjmallett *    documentation and/or other materials provided with the distribution.
13232809Sjmallett *
14232809Sjmallett * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15232809Sjmallett * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16232809Sjmallett * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17232809Sjmallett * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18232809Sjmallett * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19232809Sjmallett * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20232809Sjmallett * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21232809Sjmallett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22232809Sjmallett * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23232809Sjmallett * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24232809Sjmallett * SUCH DAMAGE.
25232809Sjmallett *
26232809Sjmallett * $FreeBSD: head/sys/isa/isavar.h 117337 2003-07-08 18:56:58Z jhb $
27232809Sjmallett */
28232809Sjmallett
29232809Sjmallett#ifndef _ISA_ISAVAR_H_
30232809Sjmallett#define _ISA_ISAVAR_H_
31232809Sjmallett
32232809Sjmallettstruct isa_config;
33232809Sjmallettstruct isa_pnp_id;
34232809Sjmalletttypedef void isa_config_cb(void *arg, struct isa_config *config, int enable);
35232809Sjmallett
36232809Sjmallett#include "isa_if.h"
37232809Sjmallett#include <isa/pnpvar.h>
38232809Sjmallett
39232809Sjmallett#ifdef _KERNEL
40232809Sjmallett
41232809Sjmallett/*
42232809Sjmallett * ISA devices are partially ordered to ensure that devices which are
43232809Sjmallett * sensitive to other driver probe routines are probed first. Plug and
44232809Sjmallett * Play devices are added after devices with speculative probes so that
45232809Sjmallett * the legacy hardware can claim resources allowing the Plug and Play
46232809Sjmallett * hardware to choose different resources.
47232809Sjmallett */
48232809Sjmallett#define ISA_ORDER_SENSITIVE	0 /* legacy sensitive hardware */
49232809Sjmallett#define ISA_ORDER_SPECULATIVE	1 /* legacy non-sensitive hardware */
50232809Sjmallett#define ISA_ORDER_PNP		2 /* plug-and-play hardware */
51232809Sjmallett
52232809Sjmallett/*
53232809Sjmallett * Limits on resources that we can manage
54232809Sjmallett */
55232809Sjmallett#define	ISA_NPORT	50
56232809Sjmallett#define	ISA_NMEM	50
57232809Sjmallett#define	ISA_NIRQ	50
58232809Sjmallett#define	ISA_NDRQ	50
59232809Sjmallett
60232809Sjmallett/*
61232809Sjmallett * Limits on resources the hardware can actually handle
62232809Sjmallett */
63232809Sjmallett#define ISA_PNP_NPORT	8
64232809Sjmallett#define ISA_PNP_NMEM	4
65232809Sjmallett#define ISA_PNP_NIRQ	2
66232809Sjmallett#define ISA_PNP_NDRQ	2
67232809Sjmallett
68232809Sjmallett#define ISADMA_READ	0x00100000
69232809Sjmallett#define ISADMA_WRITE	0
70232809Sjmallett#define ISADMA_RAW	0x00080000
71232809Sjmallett/*
72232809Sjmallett * Plug and play cards can support a range of resource
73232809Sjmallett * configurations. This structure is used by the isapnp parser to
74232809Sjmallett * inform the isa bus about the resource possibilities of the
75232809Sjmallett * device. Each different alternative should be supplied by calling
76232809Sjmallett * ISA_ADD_CONFIG().
77232809Sjmallett */
78232809Sjmallettstruct isa_range {
79232809Sjmallett	u_int32_t		ir_start;
80232809Sjmallett	u_int32_t		ir_end;
81232809Sjmallett	u_int32_t		ir_size;
82232809Sjmallett	u_int32_t		ir_align;
83232809Sjmallett};
84232809Sjmallett
85232809Sjmallettstruct isa_config {
86232809Sjmallett	struct isa_range	ic_mem[ISA_NMEM];
87232809Sjmallett	struct isa_range	ic_port[ISA_NPORT];
88232809Sjmallett	u_int32_t		ic_irqmask[ISA_NIRQ];
89232809Sjmallett	u_int32_t		ic_drqmask[ISA_NDRQ];
90232809Sjmallett	int			ic_nmem;
91232809Sjmallett	int			ic_nport;
92232809Sjmallett	int			ic_nirq;
93232809Sjmallett	int			ic_ndrq;
94232809Sjmallett};
95232809Sjmallett
96232809Sjmallett/*
97232809Sjmallett * Used to build lists of IDs and description strings for PnP drivers.
98232809Sjmallett */
99232809Sjmallettstruct isa_pnp_id {
100232809Sjmallett	u_int32_t		ip_id;
101232809Sjmallett	const char		*ip_desc;
102232809Sjmallett};
103232809Sjmallett
104enum isa_device_ivars {
105	ISA_IVAR_PORT,
106	ISA_IVAR_PORT_0 = ISA_IVAR_PORT,
107	ISA_IVAR_PORT_1,
108	ISA_IVAR_PORTSIZE,
109	ISA_IVAR_PORTSIZE_0 = ISA_IVAR_PORTSIZE,
110	ISA_IVAR_PORTSIZE_1,
111	ISA_IVAR_MADDR,
112	ISA_IVAR_MADDR_0 = ISA_IVAR_MADDR,
113	ISA_IVAR_MADDR_1,
114	ISA_IVAR_MEMSIZE,
115	ISA_IVAR_MEMSIZE_0 = ISA_IVAR_MEMSIZE,
116	ISA_IVAR_MEMSIZE_1,
117	ISA_IVAR_IRQ,
118	ISA_IVAR_IRQ_0 = ISA_IVAR_IRQ,
119	ISA_IVAR_IRQ_1,
120	ISA_IVAR_DRQ,
121	ISA_IVAR_DRQ_0 = ISA_IVAR_DRQ,
122	ISA_IVAR_DRQ_1,
123	ISA_IVAR_VENDORID,
124	ISA_IVAR_SERIAL,
125	ISA_IVAR_LOGICALID,
126	ISA_IVAR_COMPATID,
127	ISA_IVAR_CONFIGATTR
128};
129
130/*
131 * ISA_IVAR_CONFIGATTR bits
132 */
133#define ISACFGATTR_CANDISABLE	(1 << 0)	/* can be disabled */
134#define ISACFGATTR_DYNAMIC	(1 << 1)	/* dynamic configuration */
135#define ISACFGATTR_MULTI	(1 << 2)	/* multiple configurations */
136
137/*
138 * Simplified accessors for isa devices
139 */
140#define ISA_ACCESSOR(var, ivar, type)					\
141	__BUS_ACCESSOR(isa, var, ISA, ivar, type)
142
143ISA_ACCESSOR(port, PORT, int)
144ISA_ACCESSOR(portsize, PORTSIZE, int)
145ISA_ACCESSOR(irq, IRQ, int)
146ISA_ACCESSOR(drq, DRQ, int)
147ISA_ACCESSOR(maddr, MADDR, int)
148ISA_ACCESSOR(msize, MEMSIZE, int)
149ISA_ACCESSOR(vendorid, VENDORID, int)
150ISA_ACCESSOR(serial, SERIAL, int)
151ISA_ACCESSOR(logicalid, LOGICALID, int)
152ISA_ACCESSOR(compatid, COMPATID, int)
153ISA_ACCESSOR(configattr, CONFIGATTR, int)
154
155/* Device class for ISA bridges. */
156extern devclass_t isab_devclass;
157
158extern intrmask_t isa_irq_pending(void);
159extern void	isa_probe_children(device_t dev);
160
161extern void	isa_dmacascade(int chan);
162extern void	isa_dmadone(int flags, caddr_t addr, int nbytes, int chan);
163extern void	isa_dmainit(int chan, u_int bouncebufsize);
164extern void	isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan);
165extern int	isa_dma_acquire(int chan);
166extern void	isa_dma_release(int chan);
167extern int	isa_dmastatus(int chan);
168extern int	isa_dmastop(int chan);
169
170int	isab_attach(device_t dev);
171
172#ifdef PC98
173#include <machine/bus.h>
174
175/*
176 * Allocate discontinuous resources for ISA bus.
177 */
178struct resource *
179isa_alloc_resourcev(device_t child, int type, int *rid,
180		    bus_addr_t *res, bus_size_t count, u_int flags);
181int
182isa_load_resourcev(struct resource *re, bus_addr_t *res, bus_size_t count);
183#endif
184
185#endif /* _KERNEL */
186
187#endif /* !_ISA_ISAVAR_H_ */
188