1 /* $NetBSD: com_mainbus.c,v 1.16 2008/03/22 18:32:20 tsutsui Exp $ */
4 * Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions, and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 #include <sys/cdefs.h>
29 __KERNEL_RCSID(0, "$NetBSD: com_mainbus.c,v 1.16 2008/03/22 18:32:20 tsutsui Exp $");
31 #include <sys/param.h>
32 #include <sys/systm.h>
33 #include <sys/device.h>
34 #include <sys/termios.h>
36 #include <machine/autoconf.h>
37 #include <machine/intr.h>
38 #include <machine/bus.h>
40 #include <dev/ic/comreg.h>
41 #include <dev/ic/comvar.h>
43 #include <cobalt/cobalt/console.h>
44 #include <cobalt/dev/com_mainbusvar.h>
46 struct com_mainbus_softc
{
47 struct com_softc sc_com
;
51 #define COM_MAINBUS_FREQ (COM_FREQ * 10)
52 #define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
54 static int com_mainbus_probe(device_t
, cfdata_t
, void *);
55 static void com_mainbus_attach(device_t
, device_t
, void *);
57 CFATTACH_DECL_NEW(com_mainbus
, sizeof(struct com_mainbus_softc
),
58 com_mainbus_probe
, com_mainbus_attach
, NULL
, NULL
);
61 com_mainbus_probe(device_t parent
, cfdata_t match
, void *aux
)
75 com_mainbus_attach(device_t parent
, device_t self
, void *aux
)
77 struct com_mainbus_softc
*msc
= device_private(self
);
78 struct com_softc
*sc
= &msc
->sc_com
;
79 struct mainbus_attach_args
*maa
= aux
;
80 bus_space_handle_t ioh
;
83 if (!com_is_console(maa
->ma_iot
, maa
->ma_addr
, &ioh
) &&
84 bus_space_map(maa
->ma_iot
, maa
->ma_addr
, COM_NPORTS
, 0, &ioh
)) {
85 aprint_error(": can't map i/o space\n");
88 COM_INIT_REGS(sc
->sc_regs
, maa
->ma_iot
, ioh
, maa
->ma_addr
);
90 sc
->sc_frequency
= COM_MAINBUS_FREQ
;
94 cpu_intr_establish(maa
->ma_level
, IPL_SERIAL
, comintr
, sc
);
100 com_mainbus_cnprobe(struct consdev
*cn
)
103 cn
->cn_pri
= (console_present
!= 0 && cobalt_id
!= COBALT_ID_QUBE2700
)
104 ? CN_NORMAL
: CN_DEAD
;
108 com_mainbus_cninit(struct consdev
*cn
)
111 comcnattach(0, COM_BASE
, 115200, COM_MAINBUS_FREQ
, COM_TYPE_NORMAL
,