1139749Simp/*-
256505Speter * Device driver for Specialix range (SI/XIO) of serial line multiplexors.
356505Speter *
456505Speter * Copyright (C) 2000, Peter Wemm <peter@netplex.com.au>
556505Speter *
656505Speter * Redistribution and use in source and binary forms, with or without
756505Speter * modification, are permitted provided that the following conditions
856505Speter * are met:
956505Speter * 1. Redistributions of source code must retain the above copyright
1056505Speter *    notices, this list of conditions and the following disclaimer.
1156505Speter * 2. Redistributions in binary form must reproduce the above copyright
1256505Speter *    notices, this list of conditions and the following disclaimer in the
1356505Speter *    documentation and/or other materials provided with the distribution.
1456505Speter *
1556505Speter * THIS SOFTWARE IS PROVIDED BY ``AS IS'' AND ANY EXPRESS OR IMPLIED
1656505Speter * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1756505Speter * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
1856505Speter * NO EVENT SHALL THE AUTHORS BE LIABLE.
1956505Speter *
2056505Speter * $FreeBSD$
2156505Speter */
2256505Speter
23136062Sphk#ifdef _KERNEL
2456505Speterint	siattach(device_t dev);
2556505Spetervoid	si_intr(void *);
2656505Speter
2756505Speterextern devclass_t si_devclass;
2856505Speter
2956505Speter/* where the firmware lives; defined in si2_z280.c and si3_t225.c */
3056505Speter/* old: si2_z280.c */
3156505Speterextern unsigned char si2_z280_download[];
3256505Speterextern unsigned short si2_z280_downloadaddr;
3356505Speterextern int si2_z280_dsize;
3456505Speter/* new: si3_t225.c */
3556505Speterextern unsigned char si3_t225_download[];
3656505Speterextern unsigned short si3_t225_downloadaddr;
3756505Speterextern int si3_t225_dsize;
3856505Speterextern unsigned char si3_t225_bootstrap[];
3956505Speterextern unsigned short si3_t225_bootloadaddr;
4056505Speterextern int si3_t225_bsize;
4156505Speter
4256505Speterstruct si_softc {
4356505Speter	int 		sc_type;	/* adapter type */
44136058Sphk	const char	*sc_typename;	/* adapter type string */
4556505Speter
4656505Speter	struct si_port	*sc_ports;	/* port structures for this card */
4756505Speter
4856505Speter	caddr_t		sc_paddr;	/* physical addr of iomem */
4956505Speter	caddr_t		sc_maddr;	/* kvaddr of iomem */
5056505Speter	int		sc_nport;	/* # ports on this card */
5156505Speter	int		sc_irq;		/* copy of attach irq */
5256505Speter	int		sc_iobase;	/* EISA io port address */
5356505Speter	struct resource *sc_port_res;
5456505Speter	struct resource *sc_irq_res;
5556505Speter	struct resource *sc_mem_res;
5656505Speter	int		sc_port_rid;
5756505Speter	int		sc_irq_rid;
5856505Speter	int		sc_mem_rid;
5956505Speter	int		sc_memsize;
6056505Speter};
6156505Speter
62136062Sphk#endif /* _KERNEL */
63136062Sphk
6456505Speter#ifdef SI_DEBUG
6556505Speter/*
6656505Speter * debugging stuff - manipulated using siconfig(8)
6756505Speter */
6856505Speter
6956505Spetervoid	si_dprintf(struct si_port *pp, int flags, const char *fmt, ...);
7056505Speter
7156505Speter#define DPRINT(x)	si_dprintf x
7256505Speter
73136058Sphk/*
74136058Sphk * Extensive debugging stuff - manipulated using siconfig(8)
75136058Sphk */
7656505Speter#define	DBG_ENTRY		0x00000001
7756505Speter#define	DBG_DRAIN		0x00000002
7856505Speter#define	DBG_OPEN		0x00000004
7956505Speter#define	DBG_CLOSE		0x00000008
8056505Speter#define	DBG_READ		0x00000010
8156505Speter#define	DBG_WRITE		0x00000020
8256505Speter#define	DBG_PARAM		0x00000040
8356505Speter#define	DBG_INTR		0x00000080
8456505Speter#define	DBG_IOCTL		0x00000100
8556505Speter/*				0x00000200 */
8656505Speter#define	DBG_SELECT		0x00000400
8756505Speter#define	DBG_OPTIM		0x00000800
8856505Speter#define	DBG_START		0x00001000
8956505Speter#define	DBG_EXIT		0x00002000
9056505Speter#define	DBG_FAIL		0x00004000
9156505Speter#define	DBG_STOP		0x00008000
9256505Speter#define	DBG_AUTOBOOT		0x00010000
9356505Speter#define	DBG_MODEM		0x00020000
9456505Speter#define	DBG_DOWNLOAD		0x00040000
9556505Speter#define	DBG_LSTART		0x00080000
9656505Speter#define	DBG_POLL		0x00100000
9756505Speter#define	DBG_ALL			0xffffffff
9856505Speter
9956505Speter#else
10056505Speter#define DPRINT(x)	/* void */
10156505Speter#endif
10256505Speter
10356505Speter/* Adapter types */
10456505Speter#define SIEMPTY		0
10556505Speter#define SIHOST		1
10656505Speter#define SIMCA		2
10756505Speter#define SIHOST2		3
10856505Speter#define SIEISA		4
10956505Speter#define SIPCI		5
11056505Speter#define SIJETPCI	6
11156505Speter#define SIJETISA	7
11256505Speter
11356505Speter#define SI_ISJET(x)	(((x) == SIJETPCI) || ((x) == SIJETISA))
114