Home | History | Annotate | Line # | Download | only in arc
      1 /*	$NetBSD: c_jazz_eisa.c,v 1.14 2012/10/13 17:58:53 jdc Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 1998
      5  *	Matthias Drochner.  All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26  *
     27  */
     28 
     29 /*
     30  * for Magnum derived machines like Microsoft-Jazz and PICA-61,
     31  * and NEC EISA generation machines.
     32  */
     33 
     34 #include <sys/cdefs.h>
     35 __KERNEL_RCSID(0, "$NetBSD: c_jazz_eisa.c,v 1.14 2012/10/13 17:58:53 jdc Exp $");
     36 
     37 #include <sys/param.h>
     38 #include <sys/systm.h>
     39 #include <sys/kcore.h>
     40 #include <sys/device.h>
     41 
     42 #include <machine/autoconf.h>
     43 #include <sys/bus.h>
     44 #include <machine/pio.h>
     45 #include <machine/platform.h>
     46 
     47 #include <dev/clock_subr.h>
     48 #include <dev/ic/mc146818var.h>
     49 
     50 #include <arc/arc/arcbios.h>
     51 #include <arc/jazz/pica.h>
     52 #include <arc/jazz/jazziovar.h>
     53 #include <arc/jazz/mcclock_jazziovar.h>
     54 
     55 #include "pc.h"
     56 #if NPC_JAZZIO > 0
     57 #include <arc/jazz/pccons_jazziovar.h>
     58 #endif
     59 
     60 #include "vga_isa.h"
     61 #if NVGA_ISA > 0
     62 #include <dev/isa/vga_isavar.h>
     63 #endif
     64 
     65 #include "vga_jazzio.h"
     66 #if NVGA_JAZZIO > 0
     67 #include <arc/jazz/vga_jazziovar.h>
     68 #endif
     69 
     70 #include "rasdisplay_jazzio.h"
     71 #if NRASDISPLAY_JAZZIO > 0
     72 #include <arc/jazz/rasdisplay_jazziovar.h>
     73 #endif
     74 
     75 #include "pckbc_jazzio.h"
     76 #if NPCKBC_JAZZIO > 0
     77 #include <arc/jazz/pckbc_jazzioreg.h>
     78 #include <dev/ic/pckbcvar.h>
     79 #endif
     80 
     81 #include "com.h"
     82 #if NCOM > 0
     83 #include <sys/termios.h>
     84 #include <dev/ic/comreg.h>
     85 #include <dev/ic/comvar.h>
     86 #endif
     87 
     88 const char *c_jazz_eisa_mainbusdevs[] = {
     89 	"jazzio",
     90 	"jazzisabr",
     91 	NULL,
     92 };
     93 
     94 /*
     95  * chipset-dependent mcclock routines.
     96  */
     97 static u_int mc_jazz_eisa_read(struct mc146818_softc *, u_int);
     98 static void mc_jazz_eisa_write(struct mc146818_softc *, u_int, u_int);
     99 
    100 struct mcclock_jazzio_config mcclock_jazz_eisa_conf = {
    101 	0x80004000,		/* I/O base */
    102 	1,			/* I/O size */
    103 	mc_jazz_eisa_read,	/* read function */
    104 	mc_jazz_eisa_write	/* write function */
    105 };
    106 
    107 static u_int
    108 mc_jazz_eisa_read(struct mc146818_softc *sc, u_int reg)
    109 {
    110 	u_int i, as;
    111 
    112 	as = in32(arc_bus_io.bs_vbase + C_JAZZ_EISA_TODCLOCK_AS) & 0x80;
    113 	out32(arc_bus_io.bs_vbase + C_JAZZ_EISA_TODCLOCK_AS, as | reg);
    114 	i = bus_space_read_1(sc->sc_bst, sc->sc_bsh, 0);
    115 	return i;
    116 }
    117 
    118 static void
    119 mc_jazz_eisa_write(struct mc146818_softc *sc, u_int reg, u_int datum)
    120 {
    121 	u_int as;
    122 
    123 	as = in32(arc_bus_io.bs_vbase + C_JAZZ_EISA_TODCLOCK_AS) & 0x80;
    124 	out32(arc_bus_io.bs_vbase + C_JAZZ_EISA_TODCLOCK_AS, as | reg);
    125 	bus_space_write_1(sc->sc_bst, sc->sc_bsh, 0, datum);
    126 }
    127 
    128 /*
    129  * common configuration for Magnum derived and NEC EISA generation machines.
    130  */
    131 void
    132 c_jazz_eisa_init(void)
    133 {
    134 
    135 	/* chipset-dependent mcclock configuration */
    136         mcclock_jazzio_conf = &mcclock_jazz_eisa_conf;
    137 }
    138 
    139 /*
    140  * console initialization
    141  */
    142 void
    143 c_jazz_eisa_cons_init(void)
    144 {
    145 
    146 	if (!com_console) {
    147 
    148 #if NRASDISPLAY_JAZZIO > 0
    149 		if (rasdisplay_jazzio_cnattach(arc_displayc_id) == 0) {
    150 #if NPCKBC_JAZZIO > 0
    151 			pckbc_cnattach(&jazzio_bus, PICA_SYS_KBD,
    152 			    JAZZIO_KBCMDP, PCKBC_KBD_SLOT, 0);
    153 #endif
    154 			return;
    155 		}
    156 #endif
    157 
    158 #if NVGA_JAZZIO > 0
    159 		if (vga_jazzio_cnattach(arc_displayc_id) == 0) {
    160 #if NPCKBC_JAZZIO > 0
    161 			pckbc_cnattach(&jazzio_bus, PICA_SYS_KBD,
    162 			    JAZZIO_KBCMDP, PCKBC_KBD_SLOT, 0);
    163 #endif
    164 			return;
    165 		}
    166 #endif
    167 
    168 #if NVGA_ISA > 0
    169 		if (strcmp(arc_displayc_id, "necvdfrb") == 0
    170 			/* NEC RISCserver 2200 R4400 EISA [NEC-R96] */
    171 			/* NEC Express5800/240 R4400 EISA [NEC-J96A] */
    172 		    ) {
    173 			if (vga_isa_cnattach(&arc_bus_io, &arc_bus_mem) == 0) {
    174 #if NPCKBC_JAZZIO > 0
    175 				pckbc_cnattach(&jazzio_bus, PICA_SYS_KBD,
    176 				    JAZZIO_KBCMDP, PCKBC_KBD_SLOT, 0);
    177 #endif
    178 				return;
    179 			}
    180 		}
    181 #endif
    182 
    183 #if NPC_JAZZIO > 0
    184 		if (pccons_jazzio_cnattach(arc_displayc_id, &jazzio_bus) == 0)
    185 			return;
    186 #endif
    187 		printf("jazz: display controller [%s] is not configured\n",
    188 		    arc_displayc_id);
    189 	}
    190 
    191 #if NCOM > 0
    192 	if (com_console_address == 0) {
    193 		/*
    194 		 * XXX
    195 		 * the following is either PICA_SYS_COM1 or RD94_SYS_COM1.
    196 		 */
    197 		com_console_address = jazzio_bus.bs_start + 0x6000;
    198 	}
    199 	comcnattach(&jazzio_bus, com_console_address,
    200 	    com_console_speed, com_freq, COM_TYPE_NORMAL, com_console_mode);
    201 #endif
    202 }
    203