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