isavar.h revision 117337
138136Sdfr/*-
238136Sdfr * Copyright (c) 1998 Doug Rabson
338136Sdfr * All rights reserved.
438136Sdfr *
538136Sdfr * Redistribution and use in source and binary forms, with or without
638136Sdfr * modification, are permitted provided that the following conditions
738136Sdfr * are met:
838136Sdfr * 1. Redistributions of source code must retain the above copyright
938136Sdfr *    notice, this list of conditions and the following disclaimer.
1038136Sdfr * 2. Redistributions in binary form must reproduce the above copyright
1138136Sdfr *    notice, this list of conditions and the following disclaimer in the
1238136Sdfr *    documentation and/or other materials provided with the distribution.
1338136Sdfr *
1438136Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1538136Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1638136Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1738136Sdfr * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1838136Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1938136Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2038136Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2138136Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2238136Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2338136Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2438136Sdfr * SUCH DAMAGE.
2538136Sdfr *
2650477Speter * $FreeBSD: head/sys/isa/isavar.h 117337 2003-07-08 18:56:58Z jhb $
2738136Sdfr */
2838136Sdfr
2947613Sdfr#ifndef _ISA_ISAVAR_H_
3047613Sdfr#define _ISA_ISAVAR_H_
3147613Sdfr
3250769Sdfrstruct isa_config;
3350769Sdfrstruct isa_pnp_id;
3450769Sdfrtypedef void isa_config_cb(void *arg, struct isa_config *config, int enable);
3550769Sdfr
3647398Sdfr#include "isa_if.h"
3750769Sdfr#include <isa/pnpvar.h>
3847398Sdfr
3955206Speter#ifdef _KERNEL
4047613Sdfr
4147578Sdfr/*
4247578Sdfr * ISA devices are partially ordered to ensure that devices which are
4347578Sdfr * sensitive to other driver probe routines are probed first. Plug and
4447578Sdfr * Play devices are added after devices with speculative probes so that
4547578Sdfr * the legacy hardware can claim resources allowing the Plug and Play
4647578Sdfr * hardware to choose different resources.
4747578Sdfr */
4847578Sdfr#define ISA_ORDER_SENSITIVE	0 /* legacy sensitive hardware */
4947578Sdfr#define ISA_ORDER_SPECULATIVE	1 /* legacy non-sensitive hardware */
5047578Sdfr#define ISA_ORDER_PNP		2 /* plug-and-play hardware */
5147578Sdfr
5266840Smsmith/*
5366840Smsmith * Limits on resources that we can manage
5466840Smsmith */
5557368Sgj#define	ISA_NPORT	50
5666840Smsmith#define	ISA_NMEM	50
5766840Smsmith#define	ISA_NIRQ	50
5866840Smsmith#define	ISA_NDRQ	50
5941181Sdfr
6066840Smsmith/*
6166840Smsmith * Limits on resources the hardware can actually handle
6266840Smsmith */
6366840Smsmith#define ISA_PNP_NPORT	8
6466840Smsmith#define ISA_PNP_NMEM	4
6566840Smsmith#define ISA_PNP_NIRQ	2
6666840Smsmith#define ISA_PNP_NDRQ	2
6766840Smsmith
6857973Sphk#define ISADMA_READ	0x00100000
6957973Sphk#define ISADMA_WRITE	0
7057973Sphk#define ISADMA_RAW	0x00080000
7150769Sdfr/*
7250769Sdfr * Plug and play cards can support a range of resource
7350769Sdfr * configurations. This structure is used by the isapnp parser to
7450769Sdfr * inform the isa bus about the resource possibilities of the
7550769Sdfr * device. Each different alternative should be supplied by calling
7650769Sdfr * ISA_ADD_CONFIG().
7750769Sdfr */
7850769Sdfrstruct isa_range {
7950769Sdfr	u_int32_t		ir_start;
8050769Sdfr	u_int32_t		ir_end;
8150769Sdfr	u_int32_t		ir_size;
8250769Sdfr	u_int32_t		ir_align;
8350769Sdfr};
8450769Sdfr
8550769Sdfrstruct isa_config {
8650769Sdfr	struct isa_range	ic_mem[ISA_NMEM];
8750769Sdfr	struct isa_range	ic_port[ISA_NPORT];
8850769Sdfr	u_int32_t		ic_irqmask[ISA_NIRQ];
8950769Sdfr	u_int32_t		ic_drqmask[ISA_NDRQ];
9050769Sdfr	int			ic_nmem;
9150769Sdfr	int			ic_nport;
9250769Sdfr	int			ic_nirq;
9350769Sdfr	int			ic_ndrq;
9450769Sdfr};
9550769Sdfr
9650769Sdfr/*
9750769Sdfr * Used to build lists of IDs and description strings for PnP drivers.
9850769Sdfr */
9950769Sdfrstruct isa_pnp_id {
10050769Sdfr	u_int32_t		ip_id;
10150769Sdfr	const char		*ip_desc;
10250769Sdfr};
10350769Sdfr
10438136Sdfrenum isa_device_ivars {
10541181Sdfr	ISA_IVAR_PORT,
10641181Sdfr	ISA_IVAR_PORT_0 = ISA_IVAR_PORT,
10741181Sdfr	ISA_IVAR_PORT_1,
10841181Sdfr	ISA_IVAR_PORTSIZE,
10941181Sdfr	ISA_IVAR_PORTSIZE_0 = ISA_IVAR_PORTSIZE,
11041181Sdfr	ISA_IVAR_PORTSIZE_1,
11141181Sdfr	ISA_IVAR_MADDR,
11241181Sdfr	ISA_IVAR_MADDR_0 = ISA_IVAR_MADDR,
11341181Sdfr	ISA_IVAR_MADDR_1,
114105139Sjhb	ISA_IVAR_MEMSIZE,
115105139Sjhb	ISA_IVAR_MEMSIZE_0 = ISA_IVAR_MEMSIZE,
116105139Sjhb	ISA_IVAR_MEMSIZE_1,
11741181Sdfr	ISA_IVAR_IRQ,
11841181Sdfr	ISA_IVAR_IRQ_0 = ISA_IVAR_IRQ,
11941181Sdfr	ISA_IVAR_IRQ_1,
12041181Sdfr	ISA_IVAR_DRQ,
12141181Sdfr	ISA_IVAR_DRQ_0 = ISA_IVAR_DRQ,
12247613Sdfr	ISA_IVAR_DRQ_1,
12347613Sdfr	ISA_IVAR_VENDORID,
12447613Sdfr	ISA_IVAR_SERIAL,
12547613Sdfr	ISA_IVAR_LOGICALID,
12682863Syokota	ISA_IVAR_COMPATID,
12782863Syokota	ISA_IVAR_CONFIGATTR
12838136Sdfr};
12938136Sdfr
13038136Sdfr/*
13183051Syokota * ISA_IVAR_CONFIGATTR bits
13283051Syokota */
13383051Syokota#define ISACFGATTR_CANDISABLE	(1 << 0)	/* can be disabled */
13483051Syokota#define ISACFGATTR_DYNAMIC	(1 << 1)	/* dynamic configuration */
13583051Syokota#define ISACFGATTR_MULTI	(1 << 2)	/* multiple configurations */
13683051Syokota
13783051Syokota/*
13838136Sdfr * Simplified accessors for isa devices
13938136Sdfr */
140105139Sjhb#define ISA_ACCESSOR(var, ivar, type)					\
141105139Sjhb	__BUS_ACCESSOR(isa, var, ISA, ivar, type)
14238136Sdfr
14338136SdfrISA_ACCESSOR(port, PORT, int)
14438136SdfrISA_ACCESSOR(portsize, PORTSIZE, int)
14538136SdfrISA_ACCESSOR(irq, IRQ, int)
14645720SpeterISA_ACCESSOR(drq, DRQ, int)
14745720SpeterISA_ACCESSOR(maddr, MADDR, int)
148105139SjhbISA_ACCESSOR(msize, MEMSIZE, int)
14947613SdfrISA_ACCESSOR(vendorid, VENDORID, int)
15047613SdfrISA_ACCESSOR(serial, SERIAL, int)
15147613SdfrISA_ACCESSOR(logicalid, LOGICALID, int)
15247613SdfrISA_ACCESSOR(compatid, COMPATID, int)
15382863SyokotaISA_ACCESSOR(configattr, CONFIGATTR, int)
15447613Sdfr
155117337Sjhb/* Device class for ISA bridges. */
156117337Sjhbextern devclass_t isab_devclass;
157117337Sjhb
15850769Sdfrextern intrmask_t isa_irq_pending(void);
15950769Sdfrextern void	isa_probe_children(device_t dev);
16047613Sdfr
16192756Salfredextern void	isa_dmacascade(int chan);
16292756Salfredextern void	isa_dmadone(int flags, caddr_t addr, int nbytes, int chan);
16392756Salfredextern void	isa_dmainit(int chan, u_int bouncebufsize);
16492756Salfredextern void	isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan);
16592756Salfredextern int	isa_dma_acquire(int chan);
16692756Salfredextern void	isa_dma_release(int chan);
16792756Salfredextern int	isa_dmastatus(int chan);
16892756Salfredextern int	isa_dmastop(int chan);
16950769Sdfr
170117337Sjhbint	isab_attach(device_t dev);
171117337Sjhb
17267442Snyan#ifdef PC98
17367442Snyan#include <machine/bus.h>
17467442Snyan
17567442Snyan/*
17667442Snyan * Allocate discontinuous resources for ISA bus.
17767442Snyan */
17867442Snyanstruct resource *
17967442Snyanisa_alloc_resourcev(device_t child, int type, int *rid,
18067442Snyan		    bus_addr_t *res, bus_size_t count, u_int flags);
18167442Snyanint
18267442Snyanisa_load_resourcev(struct resource *re, bus_addr_t *res, bus_size_t count);
18367442Snyan#endif
18467442Snyan
18555206Speter#endif /* _KERNEL */
18647613Sdfr
18747613Sdfr#endif /* !_ISA_ISAVAR_H_ */
188