2003-01-28 15:35:31 +03:00
|
|
|
/* $NetBSD: zs.c,v 1.31 2003/01/28 12:35:33 pk Exp $ */
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-09 20:35:24 +03:00
|
|
|
/*-
|
|
|
|
* Copyright (c) 1996 The NetBSD Foundation, Inc.
|
1995-07-26 03:11:53 +04:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
1996-12-09 20:35:24 +03:00
|
|
|
* This code is derived from software contributed to The NetBSD Foundation
|
|
|
|
* by Gordon W. Ross.
|
|
|
|
*
|
1995-07-26 03:11:53 +04:00
|
|
|
* 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.
|
1996-12-09 20:35:24 +03:00
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
1996-04-26 22:59:58 +04:00
|
|
|
* must display the following acknowledgement:
|
1996-12-09 20:35:24 +03:00
|
|
|
* This product includes software developed by the NetBSD
|
|
|
|
* Foundation, Inc. and its contributors.
|
|
|
|
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
|
|
|
* contributors may be used to endorse or promote products derived
|
|
|
|
* from this software without specific prior written permission.
|
1995-07-26 03:11:53 +04:00
|
|
|
*
|
1996-12-09 20:35:24 +03:00
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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
|
1997-02-05 17:06:58 +03:00
|
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
|
|
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
1996-12-09 20:35:24 +03:00
|
|
|
* 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.
|
1995-07-26 03:11:53 +04:00
|
|
|
*/
|
1996-04-26 22:59:58 +04:00
|
|
|
|
1995-07-26 03:11:53 +04:00
|
|
|
/*
|
1996-04-26 22:59:58 +04:00
|
|
|
* Zilog Z8530 Dual UART driver (machine-dependent part)
|
|
|
|
*
|
|
|
|
* Runs two serial lines per chip using slave drivers.
|
|
|
|
* Plain tty/async lines use the zs_async slave.
|
|
|
|
*
|
|
|
|
* Modified for NetBSD/mvme68k by Jason R. Thorpe <thorpej@NetBSD.ORG>
|
1995-07-26 03:11:53 +04:00
|
|
|
*/
|
1996-04-26 22:59:58 +04:00
|
|
|
|
1995-07-26 03:11:53 +04:00
|
|
|
#include <sys/param.h>
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <sys/systm.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
#include <sys/conf.h>
|
1996-12-18 01:30:13 +03:00
|
|
|
#include <sys/device.h>
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <sys/file.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
#include <sys/ioctl.h>
|
1996-12-18 01:30:13 +03:00
|
|
|
#include <sys/kernel.h>
|
|
|
|
#include <sys/proc.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
#include <sys/tty.h>
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <sys/time.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
#include <sys/syslog.h>
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <dev/cons.h>
|
|
|
|
#include <dev/ic/z8530reg.h>
|
|
|
|
#include <machine/z8530var.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <machine/cpu.h>
|
2000-03-19 01:33:02 +03:00
|
|
|
#include <machine/bus.h>
|
2000-07-21 00:40:34 +04:00
|
|
|
#include <machine/intr.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
#include <mvme68k/dev/zsvar.h>
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/*
|
|
|
|
* Some warts needed by z8530tty.c -
|
|
|
|
* The default parity REALLY needs to be the same as the PROM uses,
|
|
|
|
* or you can not see messages done with printf during boot-up...
|
|
|
|
*/
|
|
|
|
int zs_def_cflag = (CREAD | CS8 | HUPCL);
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/* Flags from zscnprobe() */
|
1996-12-18 01:30:13 +03:00
|
|
|
static int zs_hwflags[NZSC][2];
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/* Default speed for each channel */
|
1996-12-18 01:30:13 +03:00
|
|
|
static int zs_defspeed[NZSC][2] = {
|
1996-04-26 22:59:58 +04:00
|
|
|
{ 9600, /* port 1 */
|
|
|
|
9600 }, /* port 2 */
|
|
|
|
{ 9600, /* port 3 */
|
|
|
|
9600 }, /* port 4 */
|
1996-03-17 04:26:49 +03:00
|
|
|
};
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
static struct zs_chanstate zs_conschan_store;
|
|
|
|
static struct zs_chanstate *zs_conschan;
|
|
|
|
|
|
|
|
u_char zs_init_reg[16] = {
|
|
|
|
0, /* 0: CMD (reset, etc.) */
|
1996-12-18 01:30:13 +03:00
|
|
|
0, /* 1: No interrupts yet. */
|
1996-04-26 22:59:58 +04:00
|
|
|
0x18 + ZSHARD_PRI, /* IVECT */
|
|
|
|
ZSWR3_RX_8 | ZSWR3_RX_ENABLE,
|
|
|
|
ZSWR4_CLK_X16 | ZSWR4_ONESB | ZSWR4_EVENP,
|
|
|
|
ZSWR5_TX_8 | ZSWR5_TX_ENABLE,
|
|
|
|
0, /* 6: TXSYNC/SYNCLO */
|
|
|
|
0, /* 7: RXSYNC/SYNCHI */
|
|
|
|
0, /* 8: alias for data port */
|
|
|
|
ZSWR9_MASTER_IE,
|
|
|
|
0, /*10: Misc. TX/RX control bits */
|
|
|
|
ZSWR11_TXCLK_BAUD | ZSWR11_RXCLK_BAUD,
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
0, /*12: BAUDLO (default=9600) */
|
1999-02-11 18:28:03 +03:00
|
|
|
0, /*13: BAUDHI (default=9600) */
|
1996-12-18 01:30:13 +03:00
|
|
|
ZSWR14_BAUD_ENA | ZSWR14_BAUD_FROM_PCLK,
|
1999-02-03 23:25:05 +03:00
|
|
|
ZSWR15_BREAK_IE,
|
1995-07-26 03:11:53 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/****************************************************************
|
|
|
|
* Autoconfig
|
|
|
|
****************************************************************/
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/* Definition of the driver for autoconfig. */
|
1996-08-28 01:53:46 +04:00
|
|
|
static int zsc_print __P((void *, const char *name));
|
2000-03-19 01:33:02 +03:00
|
|
|
int zs_getc __P((void *));
|
|
|
|
void zs_putc __P((void *, int));
|
1995-07-26 03:11:53 +04:00
|
|
|
|
2000-03-19 01:33:02 +03:00
|
|
|
#if 0
|
1996-12-18 01:30:13 +03:00
|
|
|
static int zs_get_speed __P((struct zs_chanstate *));
|
2000-03-19 01:33:02 +03:00
|
|
|
#endif
|
1996-12-18 01:30:13 +03:00
|
|
|
|
1998-01-12 22:51:03 +03:00
|
|
|
extern struct cfdriver zsc_cd;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
2000-03-19 01:33:02 +03:00
|
|
|
cons_decl(zsc_pcc);
|
|
|
|
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Configure children of an SCC.
|
|
|
|
*/
|
|
|
|
void
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
zs_config(zsc, zs, vector, pclk)
|
1996-04-26 22:59:58 +04:00
|
|
|
struct zsc_softc *zsc;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
struct zsdevice *zs;
|
|
|
|
int vector, pclk;
|
1996-04-26 22:59:58 +04:00
|
|
|
{
|
|
|
|
struct zsc_attach_args zsc_args;
|
|
|
|
volatile struct zschan *zc;
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
int zsc_unit, channel, s;
|
|
|
|
|
|
|
|
zsc_unit = zsc->zsc_dev.dv_unit;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
printf(": Zilog 8530 SCC at vector 0x%x\n", vector);
|
2000-03-19 01:33:02 +03:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Initialize software state for each channel.
|
|
|
|
*/
|
|
|
|
for (channel = 0; channel < 2; channel++) {
|
1996-12-18 01:30:13 +03:00
|
|
|
zsc_args.channel = channel;
|
|
|
|
zsc_args.hwflags = zs_hwflags[zsc_unit][channel];
|
|
|
|
cs = &zsc->zsc_cs_store[channel];
|
|
|
|
zsc->zsc_cs[channel] = cs;
|
2003-01-28 15:35:31 +03:00
|
|
|
simple_lock_init(&cs->cs_lock);
|
1996-04-26 22:59:58 +04:00
|
|
|
|
|
|
|
/*
|
|
|
|
* If we're the console, copy the channel state, and
|
|
|
|
* adjust the console channel pointer.
|
|
|
|
*/
|
1996-12-18 01:30:13 +03:00
|
|
|
if (zsc_args.hwflags & ZS_HWFLAG_CONSOLE) {
|
2001-07-07 11:51:37 +04:00
|
|
|
memcpy(cs, zs_conschan, sizeof(struct zs_chanstate));
|
1996-04-26 22:59:58 +04:00
|
|
|
zs_conschan = cs;
|
|
|
|
} else {
|
2000-03-19 01:33:02 +03:00
|
|
|
zc = (channel == 0) ? &zs->zs_chan_a : &zs->zs_chan_b;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
cs->cs_reg_csr = zc->zc_csr;
|
|
|
|
cs->cs_reg_data = zc->zc_data;
|
2001-07-07 11:51:37 +04:00
|
|
|
memcpy(cs->cs_creg, zs_init_reg, 16);
|
|
|
|
memcpy(cs->cs_preg, zs_init_reg, 16);
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_defspeed = zs_defspeed[zsc_unit][channel];
|
1996-04-26 22:59:58 +04:00
|
|
|
}
|
2000-11-21 14:41:37 +03:00
|
|
|
|
|
|
|
cs->cs_brg_clk = pclk / 16;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
cs->cs_creg[2] = cs->cs_preg[2] = vector;
|
2000-11-21 14:41:37 +03:00
|
|
|
zs_set_speed(cs, cs->cs_defspeed);
|
|
|
|
cs->cs_creg[12] = cs->cs_preg[12];
|
|
|
|
cs->cs_creg[13] = cs->cs_preg[13];
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_defcflag = zs_def_cflag;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1997-02-05 17:06:58 +03:00
|
|
|
/* Make these correspond to cs_defcflag (-crtscts) */
|
|
|
|
cs->cs_rr0_dcd = ZSRR0_DCD;
|
|
|
|
cs->cs_rr0_cts = 0;
|
|
|
|
cs->cs_wr5_dtr = ZSWR5_DTR | ZSWR5_RTS;
|
|
|
|
cs->cs_wr5_rts = 0;
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
cs->cs_channel = channel;
|
|
|
|
cs->cs_private = NULL;
|
|
|
|
cs->cs_ops = &zsops_null;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Clear the master interrupt enable.
|
|
|
|
* The INTENA is common to both channels,
|
|
|
|
* so just do it on the A channel.
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
* Write the interrupt vector while we're at it.
|
1996-04-26 22:59:58 +04:00
|
|
|
*/
|
|
|
|
if (channel == 0) {
|
|
|
|
zs_write_reg(cs, 9, 0);
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
zs_write_reg(cs, 2, vector);
|
1996-04-26 22:59:58 +04:00
|
|
|
}
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Look for a child driver for this channel.
|
|
|
|
* The child attach will setup the hardware.
|
|
|
|
*/
|
1996-12-18 01:30:13 +03:00
|
|
|
if (!config_found(&zsc->zsc_dev, (void *)&zsc_args, zsc_print)) {
|
1996-04-26 22:59:58 +04:00
|
|
|
/* No sub-driver. Just reset it. */
|
1996-12-18 01:30:13 +03:00
|
|
|
u_char reset = (channel == 0) ?
|
1996-04-26 22:59:58 +04:00
|
|
|
ZSWR9_A_RESET : ZSWR9_B_RESET;
|
|
|
|
s = splzs();
|
|
|
|
zs_write_reg(cs, 9, reset);
|
|
|
|
splx(s);
|
|
|
|
}
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
2000-07-21 00:40:34 +04:00
|
|
|
* Allocate a software interrupt cookie.
|
1996-04-26 22:59:58 +04:00
|
|
|
*/
|
2000-07-21 00:40:34 +04:00
|
|
|
zsc->zsc_softintr_cookie = softintr_establish(IPL_SOFTSERIAL,
|
|
|
|
(void (*)(void *)) zsc_intr_soft, zsc);
|
2000-07-22 00:18:35 +04:00
|
|
|
#ifdef DEBUG
|
2000-07-21 00:40:34 +04:00
|
|
|
assert(zsc->zsc_softintr_cookie);
|
2000-07-22 00:18:35 +04:00
|
|
|
#endif
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
static int
|
|
|
|
zsc_print(aux, name)
|
|
|
|
void *aux;
|
1996-08-28 01:53:46 +04:00
|
|
|
const char *name;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
struct zsc_attach_args *args = aux;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
if (name != NULL)
|
2003-01-01 04:47:30 +03:00
|
|
|
aprint_normal("%s: ", name);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
if (args->channel != -1)
|
2003-01-01 04:47:30 +03:00
|
|
|
aprint_normal(" channel %d", args->channel);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
return UNCONF;
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
2000-11-20 22:35:28 +03:00
|
|
|
#if defined(MVME162) || defined(MVME172)
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
/*
|
|
|
|
* Our ZS chips each have their own interrupt vector.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
zshard_unshared(arg)
|
|
|
|
void *arg;
|
|
|
|
{
|
|
|
|
struct zsc_softc *zsc = arg;
|
|
|
|
int rval;
|
|
|
|
|
|
|
|
rval = zsc_intr_hard(zsc);
|
|
|
|
|
2001-05-31 22:46:07 +04:00
|
|
|
if (rval) {
|
|
|
|
if ((zsc->zsc_cs[0]->cs_softreq) ||
|
|
|
|
(zsc->zsc_cs[1]->cs_softreq))
|
|
|
|
softintr_schedule(zsc->zsc_softintr_cookie);
|
|
|
|
zsc->zsc_evcnt.ev_count++;
|
|
|
|
}
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
|
|
|
|
return (rval);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef MVME147
|
1996-12-18 01:30:13 +03:00
|
|
|
/*
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
* Our ZS chips all share a common, PCC-vectored interrupt,
|
1996-12-18 01:30:13 +03:00
|
|
|
* so we have to look at all of them on each interrupt.
|
|
|
|
*/
|
1996-04-26 22:59:58 +04:00
|
|
|
int
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
zshard_shared(arg)
|
1996-04-26 22:59:58 +04:00
|
|
|
void *arg;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
struct zsc_softc *zsc;
|
|
|
|
int unit, rval;
|
1996-04-26 22:59:58 +04:00
|
|
|
|
|
|
|
rval = 0;
|
1996-12-18 01:30:13 +03:00
|
|
|
for (unit = 0; unit < zsc_cd.cd_ndevs; unit++) {
|
1996-04-26 22:59:58 +04:00
|
|
|
zsc = zsc_cd.cd_devs[unit];
|
2001-05-31 22:46:07 +04:00
|
|
|
if (zsc != NULL && zsc_intr_hard(zsc)) {
|
|
|
|
if ((zsc->zsc_cs[0]->cs_softreq) ||
|
|
|
|
(zsc->zsc_cs[1]->cs_softreq))
|
|
|
|
softintr_schedule(zsc->zsc_softintr_cookie);
|
|
|
|
zsc->zsc_evcnt.ev_count++;
|
|
|
|
rval++;
|
|
|
|
}
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
1996-04-26 22:59:58 +04:00
|
|
|
return (rval);
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
#endif
|
1995-07-26 03:11:53 +04:00
|
|
|
|
|
|
|
|
2000-03-19 01:33:02 +03:00
|
|
|
#if 0
|
1996-12-18 01:30:13 +03:00
|
|
|
/*
|
|
|
|
* Compute the current baud rate given a ZSCC channel.
|
|
|
|
*/
|
|
|
|
static int
|
|
|
|
zs_get_speed(cs)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
{
|
|
|
|
int tconst;
|
|
|
|
|
|
|
|
tconst = zs_read_reg(cs, 12);
|
|
|
|
tconst |= zs_read_reg(cs, 13) << 8;
|
|
|
|
return (TCONST_TO_BPS(cs->cs_brg_clk, tconst));
|
|
|
|
}
|
2000-03-19 01:33:02 +03:00
|
|
|
#endif
|
1996-12-18 01:30:13 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* MD functions for setting the baud rate and control modes.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
zs_set_speed(cs, bps)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
int bps; /* bits per second */
|
|
|
|
{
|
|
|
|
int tconst, real_bps;
|
|
|
|
|
|
|
|
if (bps == 0)
|
|
|
|
return (0);
|
|
|
|
|
|
|
|
#ifdef DIAGNOSTIC
|
|
|
|
if (cs->cs_brg_clk == 0)
|
|
|
|
panic("zs_set_speed");
|
|
|
|
#endif
|
|
|
|
|
|
|
|
tconst = BPS_TO_TCONST(cs->cs_brg_clk, bps);
|
|
|
|
if (tconst < 0)
|
|
|
|
return (EINVAL);
|
|
|
|
|
|
|
|
/* Convert back to make sure we can do it. */
|
|
|
|
real_bps = TCONST_TO_BPS(cs->cs_brg_clk, tconst);
|
|
|
|
|
2000-11-19 01:34:25 +03:00
|
|
|
/* Allow 2% tolerance WRT the required bps */
|
2000-11-19 01:46:07 +03:00
|
|
|
if (((abs(real_bps - bps) * 1000) / bps) > 20)
|
1996-12-18 01:30:13 +03:00
|
|
|
return (EINVAL);
|
|
|
|
|
|
|
|
cs->cs_preg[12] = tconst;
|
|
|
|
cs->cs_preg[13] = tconst >> 8;
|
|
|
|
|
|
|
|
/* Caller will stuff the pending registers. */
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
zs_set_modes(cs, cflag)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
int cflag; /* bits per second */
|
|
|
|
{
|
|
|
|
int s;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Output hardware flow control on the chip is horrendous:
|
|
|
|
* if carrier detect drops, the receiver is disabled, and if
|
|
|
|
* CTS drops, the transmitter is stoped IN MID CHARACTER!
|
|
|
|
* Therefore, NEVER set the HFC bit, and instead use the
|
|
|
|
* status interrupt to detect CTS changes.
|
|
|
|
*/
|
|
|
|
s = splzs();
|
1999-03-27 04:21:36 +03:00
|
|
|
cs->cs_rr0_pps = 0;
|
|
|
|
if ((cflag & (CLOCAL | MDMBUF)) != 0) {
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_rr0_dcd = 0;
|
1999-03-27 04:21:36 +03:00
|
|
|
if ((cflag & MDMBUF) == 0)
|
|
|
|
cs->cs_rr0_pps = ZSRR0_DCD;
|
|
|
|
} else
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_rr0_dcd = ZSRR0_DCD;
|
1997-11-02 11:05:06 +03:00
|
|
|
if ((cflag & CRTSCTS) != 0) {
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_wr5_dtr = ZSWR5_DTR;
|
|
|
|
cs->cs_wr5_rts = ZSWR5_RTS;
|
|
|
|
cs->cs_rr0_cts = ZSRR0_CTS;
|
1997-11-02 11:05:06 +03:00
|
|
|
} else if ((cflag & MDMBUF) != 0) {
|
|
|
|
cs->cs_wr5_dtr = 0;
|
|
|
|
cs->cs_wr5_rts = ZSWR5_DTR;
|
|
|
|
cs->cs_rr0_cts = ZSRR0_DCD;
|
1996-12-18 01:30:13 +03:00
|
|
|
} else {
|
|
|
|
cs->cs_wr5_dtr = ZSWR5_DTR | ZSWR5_RTS;
|
|
|
|
cs->cs_wr5_rts = 0;
|
|
|
|
cs->cs_rr0_cts = 0;
|
|
|
|
}
|
|
|
|
splx(s);
|
|
|
|
|
|
|
|
/* Caller will stuff the pending registers. */
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Read or write the chip with suitable delays.
|
|
|
|
*/
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
u_char
|
|
|
|
zs_read_reg(cs, reg)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
u_char reg;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
u_char val;
|
|
|
|
|
|
|
|
*cs->cs_reg_csr = reg;
|
|
|
|
ZS_DELAY();
|
|
|
|
val = *cs->cs_reg_csr;
|
|
|
|
ZS_DELAY();
|
|
|
|
return val;
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
void
|
|
|
|
zs_write_reg(cs, reg, val)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
u_char reg, val;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
*cs->cs_reg_csr = reg;
|
|
|
|
ZS_DELAY();
|
|
|
|
*cs->cs_reg_csr = val;
|
|
|
|
ZS_DELAY();
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
u_char zs_read_csr(cs)
|
|
|
|
struct zs_chanstate *cs;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
u_char val;
|
1996-04-26 22:59:58 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
val = *cs->cs_reg_csr;
|
1996-04-26 22:59:58 +04:00
|
|
|
ZS_DELAY();
|
1996-12-18 01:30:13 +03:00
|
|
|
return val;
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
void zs_write_csr(cs, val)
|
1996-04-26 22:59:58 +04:00
|
|
|
struct zs_chanstate *cs;
|
1996-12-18 01:30:13 +03:00
|
|
|
u_char val;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-12-18 01:30:13 +03:00
|
|
|
*cs->cs_reg_csr = val;
|
1996-04-26 22:59:58 +04:00
|
|
|
ZS_DELAY();
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
u_char zs_read_data(cs)
|
1996-04-26 22:59:58 +04:00
|
|
|
struct zs_chanstate *cs;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
u_char val;
|
1996-12-18 01:30:13 +03:00
|
|
|
|
|
|
|
val = *cs->cs_reg_data;
|
1996-04-26 22:59:58 +04:00
|
|
|
ZS_DELAY();
|
1996-12-18 01:30:13 +03:00
|
|
|
return val;
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
void zs_write_data(cs, val)
|
|
|
|
struct zs_chanstate *cs;
|
|
|
|
u_char val;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
*cs->cs_reg_data = val;
|
|
|
|
ZS_DELAY();
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/****************************************************************
|
|
|
|
* Console support functions (MVME specific!)
|
|
|
|
****************************************************************/
|
|
|
|
|
1995-07-26 03:11:53 +04:00
|
|
|
/*
|
1996-04-26 22:59:58 +04:00
|
|
|
* Polled input char.
|
1995-07-26 03:11:53 +04:00
|
|
|
*/
|
|
|
|
int
|
1996-04-26 22:59:58 +04:00
|
|
|
zs_getc(arg)
|
|
|
|
void *arg;
|
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
struct zs_chanstate *cs = arg;
|
|
|
|
int s, c, rr0, stat;
|
1996-04-26 22:59:58 +04:00
|
|
|
|
|
|
|
s = splhigh();
|
|
|
|
top:
|
|
|
|
/* Wait for a character to arrive. */
|
|
|
|
do {
|
1996-05-27 00:42:58 +04:00
|
|
|
rr0 = *cs->cs_reg_csr;
|
1996-04-26 22:59:58 +04:00
|
|
|
ZS_DELAY();
|
|
|
|
} while ((rr0 & ZSRR0_RX_READY) == 0);
|
|
|
|
|
|
|
|
/* Read error register. */
|
|
|
|
stat = zs_read_reg(cs, 1) & (ZSRR1_FE | ZSRR1_DO | ZSRR1_PE);
|
|
|
|
if (stat) {
|
|
|
|
zs_write_csr(cs, ZSM_RESET_ERR);
|
|
|
|
goto top;
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/* Read character. */
|
|
|
|
c = *cs->cs_reg_data;
|
|
|
|
ZS_DELAY();
|
|
|
|
splx(s);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
return (c);
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Polled output char.
|
|
|
|
*/
|
1995-07-26 03:11:53 +04:00
|
|
|
void
|
1996-04-26 22:59:58 +04:00
|
|
|
zs_putc(arg, c)
|
|
|
|
void *arg;
|
|
|
|
int c;
|
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
struct zs_chanstate *cs = arg;
|
|
|
|
int s, rr0;
|
1996-04-26 22:59:58 +04:00
|
|
|
|
|
|
|
s = splhigh();
|
|
|
|
/* Wait for transmitter to become ready. */
|
|
|
|
do {
|
|
|
|
rr0 = *cs->cs_reg_csr;
|
|
|
|
ZS_DELAY();
|
|
|
|
} while ((rr0 & ZSRR0_TX_READY) == 0);
|
|
|
|
|
|
|
|
*cs->cs_reg_data = c;
|
|
|
|
ZS_DELAY();
|
1995-07-26 03:11:53 +04:00
|
|
|
splx(s);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
1996-04-26 22:59:58 +04:00
|
|
|
* Common parts of console init.
|
1995-07-26 03:11:53 +04:00
|
|
|
*/
|
|
|
|
void
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
zs_cnconfig(zsc_unit, channel, zs, pclk)
|
1996-04-26 22:59:58 +04:00
|
|
|
int zsc_unit, channel;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
struct zsdevice *zs;
|
|
|
|
int pclk;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
struct zs_chanstate *cs;
|
2000-03-19 01:33:02 +03:00
|
|
|
struct zschan *zc;
|
|
|
|
|
|
|
|
zc = (channel == 0) ? &zs->zs_chan_a : &zs->zs_chan_b;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Pointer to channel state. Later, the console channel
|
|
|
|
* state is copied into the softc, and the console channel
|
|
|
|
* pointer adjusted to point to the new copy.
|
|
|
|
*/
|
|
|
|
zs_conschan = cs = &zs_conschan_store;
|
|
|
|
zs_hwflags[zsc_unit][channel] = ZS_HWFLAG_CONSOLE;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/* Setup temporary chanstate. */
|
2000-11-21 14:41:37 +03:00
|
|
|
cs->cs_brg_clk = pclk / 16;
|
Add preliminary support for the MVME162-LX 200/300 series of boards.
Currently, the major onboard devices are supported (disk, network,
rs232 and VMEbus). However, work is still need to support the remaining
devices (eg. IndustryPack sites).
These boards are available with a dazzling array of build options. At
this time, the following options are *required*:
o Real floating point hardware (the 68LC040 model isn't tested),
o The VMEchip2 must be present,
o If offboard VMEbus RAM is not present, at least 8MB of onboard
RAM is required.
o Even if offboard VMEbus RAM *is* present, at least 4MB of onboard
RAM is required. (Boards with 1 or 2MB onboard RAM *can* be
supported with offboard RAM, but not without some funky values in
the VMEbus Master mapping registers.)
There is no support for boards other than those in the -LX 200/300 series.
2000-09-06 23:51:42 +04:00
|
|
|
cs->cs_reg_csr = zc->zc_csr;
|
|
|
|
cs->cs_reg_data = zc->zc_data;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/* Initialize the pending registers. */
|
2001-07-07 11:51:37 +04:00
|
|
|
memcpy(cs->cs_preg, zs_init_reg, 16);
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_preg[5] |= (ZSWR5_DTR | ZSWR5_RTS);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
2000-03-19 01:33:02 +03:00
|
|
|
#if 0
|
1996-12-18 01:30:13 +03:00
|
|
|
/* XXX: Preserve BAUD rate from boot loader. */
|
|
|
|
/* XXX: Also, why reset the chip here? -gwr */
|
2000-03-19 01:33:02 +03:00
|
|
|
cs->cs_defspeed = zs_get_speed(cs);
|
|
|
|
#else
|
1996-12-18 01:30:13 +03:00
|
|
|
cs->cs_defspeed = 9600; /* XXX */
|
2000-03-19 01:33:02 +03:00
|
|
|
#endif
|
2000-11-21 14:41:37 +03:00
|
|
|
zs_set_speed(cs, cs->cs_defspeed);
|
|
|
|
cs->cs_creg[12] = cs->cs_preg[12];
|
|
|
|
cs->cs_creg[13] = cs->cs_preg[13];
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/* Clear the master interrupt enable. */
|
|
|
|
zs_write_reg(cs, 9, 0);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/* Reset the whole SCC chip. */
|
|
|
|
zs_write_reg(cs, 9, ZSWR9_HARD_RESET);
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-12-18 01:30:13 +03:00
|
|
|
/* Copy "pending" to "current" and H/W. */
|
|
|
|
zs_loadchannelregs(cs);
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Polled console input putchar.
|
|
|
|
*/
|
1995-07-26 03:11:53 +04:00
|
|
|
int
|
2000-03-19 01:33:02 +03:00
|
|
|
zsc_pcccngetc(dev)
|
1996-04-26 22:59:58 +04:00
|
|
|
dev_t dev;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
struct zs_chanstate *cs = zs_conschan;
|
|
|
|
int c;
|
1995-07-26 03:11:53 +04:00
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
c = zs_getc(cs);
|
|
|
|
return (c);
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
1996-04-26 22:59:58 +04:00
|
|
|
/*
|
|
|
|
* Polled console output putchar.
|
|
|
|
*/
|
|
|
|
void
|
2000-03-19 01:33:02 +03:00
|
|
|
zsc_pcccnputc(dev, c)
|
1996-04-26 22:59:58 +04:00
|
|
|
dev_t dev;
|
|
|
|
int c;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1998-08-22 14:55:33 +04:00
|
|
|
struct zs_chanstate *cs = zs_conschan;
|
1996-04-26 22:59:58 +04:00
|
|
|
|
|
|
|
zs_putc(cs, c);
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
1996-04-26 22:59:58 +04:00
|
|
|
* Handle user request to enter kernel debugger.
|
1995-07-26 03:11:53 +04:00
|
|
|
*/
|
1996-04-26 22:59:58 +04:00
|
|
|
void
|
1996-12-18 01:30:13 +03:00
|
|
|
zs_abort(cs)
|
|
|
|
struct zs_chanstate *cs;
|
1995-07-26 03:11:53 +04:00
|
|
|
{
|
1996-04-26 22:59:58 +04:00
|
|
|
int rr0;
|
|
|
|
|
|
|
|
/* Wait for end of break to avoid PROM abort. */
|
|
|
|
/* XXX - Limit the wait? */
|
|
|
|
do {
|
|
|
|
rr0 = *cs->cs_reg_csr;
|
|
|
|
ZS_DELAY();
|
|
|
|
} while (rr0 & ZSRR0_BREAK);
|
|
|
|
|
|
|
|
mvme68k_abort("SERIAL LINE ABORT");
|
1995-07-26 03:11:53 +04:00
|
|
|
}
|