1139749Simp/*-
212090Sgibbs * EISA bus device definitions
38012Sjulian *
415329Sgibbs * Copyright (c) 1995, 1996 Justin T. Gibbs.
512090Sgibbs * All rights reserved.
615329Sgibbs *
712090Sgibbs * Redistribution and use in source and binary forms, with or without
812090Sgibbs * modification, are permitted provided that the following conditions
912090Sgibbs * are met:
1012090Sgibbs * 1. Redistributions of source code must retain the above copyright
1112090Sgibbs *    notice immediately at the beginning of the file, without modification,
1212090Sgibbs *    this list of conditions, and the following disclaimer.
1312090Sgibbs * 2. Redistributions in binary form must reproduce the above copyright
1412090Sgibbs *    notice, this list of conditions and the following disclaimer in the
1512090Sgibbs *    documentation and/or other materials provided with the distribution.
1615329Sgibbs * 3. The name of the author may not be used to endorse or promote products
1715329Sgibbs *    derived from this software without specific prior written permission.
188012Sjulian *
1915329Sgibbs * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2015329Sgibbs * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2115329Sgibbs * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2215329Sgibbs * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
2315329Sgibbs * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2415329Sgibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2515329Sgibbs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2615329Sgibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2715329Sgibbs * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2815329Sgibbs * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2915329Sgibbs * SUCH DAMAGE.
3015329Sgibbs *
3150477Speter * $FreeBSD$
328012Sjulian */
338012Sjulian
34130274Simp#ifndef _DEV_EISA_EISACONF_H_
35130274Simp#define _DEV_EISA_EISACONF_H_ 1
368012Sjulian
37130274Simp#include "eisa_if.h"
3813691Sgibbs#define EISA_SLOT_SIZE 0x1000
3912090Sgibbs
4012122Sgibbs#define EISA_MFCTR_CHAR0(ID) (char)(((ID>>26) & 0x1F) | '@')  /* Bits 26-30 */
4112122Sgibbs#define EISA_MFCTR_CHAR1(ID) (char)(((ID>>21) & 0x1F) | '@')  /* Bits 21-25 */
4212122Sgibbs#define EISA_MFCTR_CHAR2(ID) (char)(((ID>>16) & 0x1F) | '@')  /* Bits 16-20 */
4312122Sgibbs#define EISA_MFCTR_ID(ID)    (short)((ID>>16) & 0xFF)	      /* Bits 16-31 */
4412122Sgibbs#define EISA_PRODUCT_ID(ID)  (short)((ID>>4)  & 0xFFF)        /* Bits  4-15 */
4512122Sgibbs#define EISA_REVISION_ID(ID) (u_char)(ID & 0x0F)              /* Bits  0-3  */
4612090Sgibbs
4723855Sjoergextern int num_eisa_slots;
4812090Sgibbs
4913691Sgibbstypedef u_int32_t eisa_id_t;
5012090Sgibbs
5145791Speterenum eisa_device_ivars {
5245791Speter    EISA_IVAR_SLOT,
5345791Speter    EISA_IVAR_ID,
5445791Speter    EISA_IVAR_IRQ
5545791Speter};
5645791Speter
5749360Smdodd#define EISA_TRIGGER_EDGE       0x0
5849360Smdodd#define EISA_TRIGGER_LEVEL      0x1
5949360Smdodd
6045791Speter/*
6145791Speter * Simplified accessors for isa devices
6245791Speter */
63102177Smux#define EISA_ACCESSOR(var, ivar, type)					 \
64102177Smux	__BUS_ACCESSOR(eisa, var, EISA, ivar, type)
6545791Speter
6645791SpeterEISA_ACCESSOR(slot, SLOT, int)
6745791SpeterEISA_ACCESSOR(id, ID, eisa_id_t)
6845791SpeterEISA_ACCESSOR(irq, IRQ, eisa_id_t)
6945791Speter
70102177Smux#undef EISA_ACCESSOR
71102177Smux
7213691Sgibbs#define		RESVADDR_NONE		0x00
7313691Sgibbs#define		RESVADDR_BITMASK	0x01	/* size is a mask of reserved
7413691Sgibbs						 * bits at addr
7513691Sgibbs						 */
7613691Sgibbs#define		RESVADDR_RELOCATABLE	0x02
7713691Sgibbs
78130274Simpstatic __inline int
79130274Simpeisa_add_intr(device_t dev, int irq, int trigger)
80130274Simp{
81130274Simp	return (EISA_ADD_INTR(device_get_parent(dev), dev, irq, trigger));
82130274Simp}
83130274Simp
84130274Simpstatic __inline int
85130274Simpeisa_add_iospace(device_t dev, u_long iobase, u_long iosize, int flags)
86130274Simp{
87130274Simp	return (EISA_ADD_IOSPACE(device_get_parent(dev), dev, iobase, iosize,
88130274Simp	    flags));
89130274Simp}
90130274Simp
91130274Simpstatic __inline int
92130274Simpeisa_add_mspace(device_t dev, u_long mbase, u_long msize, int flags)
93130274Simp{
94130274Simp	return (EISA_ADD_MSPACE(device_get_parent(dev), dev, mbase, msize,
95130274Simp	    flags));
96130274Simp}
97130274Simp
98130274Simp#endif /* _DEV_EISA_EISACONF_H_ */
99