consinit.c revision 1.3.2.6 1 1.3.2.6 skrll /* $NetBSD: consinit.c,v 1.3.2.6 2005/11/10 14:00:34 skrll Exp $ */
2 1.3.2.2 skrll /* NetBSD: consinit.c,v 1.4 2004/03/13 17:31:34 bjh21 Exp */
3 1.3.2.2 skrll
4 1.3.2.2 skrll /*
5 1.3.2.2 skrll * Copyright (c) 1998
6 1.3.2.2 skrll * Matthias Drochner. All rights reserved.
7 1.3.2.2 skrll *
8 1.3.2.2 skrll * Redistribution and use in source and binary forms, with or without
9 1.3.2.2 skrll * modification, are permitted provided that the following conditions
10 1.3.2.2 skrll * are met:
11 1.3.2.2 skrll * 1. Redistributions of source code must retain the above copyright
12 1.3.2.2 skrll * notice, this list of conditions and the following disclaimer.
13 1.3.2.2 skrll * 2. Redistributions in binary form must reproduce the above copyright
14 1.3.2.2 skrll * notice, this list of conditions and the following disclaimer in the
15 1.3.2.2 skrll * documentation and/or other materials provided with the distribution.
16 1.3.2.2 skrll *
17 1.3.2.2 skrll * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 1.3.2.2 skrll * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 1.3.2.2 skrll * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 1.3.2.2 skrll * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 1.3.2.2 skrll * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 1.3.2.2 skrll * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 1.3.2.2 skrll * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 1.3.2.2 skrll * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 1.3.2.2 skrll * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 1.3.2.2 skrll * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 1.3.2.2 skrll *
28 1.3.2.2 skrll */
29 1.3.2.2 skrll
30 1.3.2.2 skrll #include <sys/cdefs.h>
31 1.3.2.6 skrll __KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.3.2.6 2005/11/10 14:00:34 skrll Exp $");
32 1.3.2.2 skrll
33 1.3.2.2 skrll #include "opt_kgdb.h"
34 1.3.2.2 skrll
35 1.3.2.2 skrll #include <sys/param.h>
36 1.3.2.2 skrll #include <sys/systm.h>
37 1.3.2.2 skrll #include <sys/device.h>
38 1.3.2.2 skrll #include <machine/bus.h>
39 1.3.2.2 skrll #include <machine/bootinfo.h>
40 1.3.2.2 skrll
41 1.3.2.5 skrll #include "xencons.h"
42 1.3.2.2 skrll #include "vga.h"
43 1.3.2.2 skrll #include "ega.h"
44 1.3.2.2 skrll #include "pcdisplay.h"
45 1.3.2.2 skrll #if (NVGA > 0) || (NEGA > 0) || (NPCDISPLAY > 0)
46 1.3.2.2 skrll #include <dev/ic/mc6845reg.h>
47 1.3.2.2 skrll #include <dev/ic/pcdisplayvar.h>
48 1.3.2.2 skrll #if (NVGA > 0)
49 1.3.2.2 skrll #include <dev/ic/vgareg.h>
50 1.3.2.2 skrll #include <dev/ic/vgavar.h>
51 1.3.2.2 skrll #endif
52 1.3.2.2 skrll #if (NEGA > 0)
53 1.3.2.2 skrll #include <dev/isa/egavar.h>
54 1.3.2.2 skrll #endif
55 1.3.2.2 skrll #if (NPCDISPLAY > 0)
56 1.3.2.2 skrll #include <dev/isa/pcdisplayvar.h>
57 1.3.2.2 skrll #endif
58 1.3.2.2 skrll #endif
59 1.3.2.2 skrll
60 1.3.2.2 skrll #include "pckbc.h"
61 1.3.2.2 skrll #if (NPCKBC > 0)
62 1.3.2.2 skrll #include <dev/isa/isareg.h>
63 1.3.2.2 skrll #include <dev/ic/i8042reg.h>
64 1.3.2.2 skrll #include <dev/ic/pckbcvar.h>
65 1.3.2.2 skrll #endif
66 1.3.2.2 skrll #include "pckbd.h" /* for pckbc_machdep_cnattach */
67 1.3.2.2 skrll
68 1.3.2.6 skrll #include "ukbd.h"
69 1.3.2.6 skrll #if (NUKBD > 0)
70 1.3.2.6 skrll #include <dev/usb/ukbdvar.h>
71 1.3.2.6 skrll #endif
72 1.3.2.6 skrll
73 1.3.2.2 skrll #ifndef __x86_64__
74 1.3.2.2 skrll #include "pc.h"
75 1.3.2.2 skrll #endif
76 1.3.2.2 skrll #if (NPC > 0)
77 1.3.2.2 skrll #include <machine/pccons.h>
78 1.3.2.2 skrll #endif
79 1.3.2.2 skrll
80 1.3.2.2 skrll #include "opt_xen.h"
81 1.3.2.2 skrll #if (XEN > 0)
82 1.3.2.2 skrll #include <machine/xen.h>
83 1.3.2.2 skrll #include <dev/pckbport/pckbportvar.h>
84 1.3.2.2 skrll #include <machine/hypervisor.h>
85 1.3.2.2 skrll #endif
86 1.3.2.2 skrll
87 1.3.2.2 skrll #include "com.h"
88 1.3.2.2 skrll #if (NCOM > 0)
89 1.3.2.2 skrll #include <sys/termios.h>
90 1.3.2.2 skrll #include <dev/ic/comreg.h>
91 1.3.2.2 skrll #include <dev/ic/comvar.h>
92 1.3.2.2 skrll #endif
93 1.3.2.2 skrll
94 1.3.2.2 skrll #include "ukbd.h"
95 1.3.2.2 skrll #if (NUKBD > 0)
96 1.3.2.2 skrll #include <dev/usb/ukbdvar.h>
97 1.3.2.2 skrll #endif
98 1.3.2.2 skrll
99 1.3.2.2 skrll #ifndef CONSDEVNAME
100 1.3.2.2 skrll #define CONSDEVNAME "pc"
101 1.3.2.2 skrll #endif
102 1.3.2.2 skrll
103 1.3.2.2 skrll #if (NCOM > 0)
104 1.3.2.2 skrll #ifndef CONADDR
105 1.3.2.2 skrll #define CONADDR 0x3f8
106 1.3.2.2 skrll #endif
107 1.3.2.2 skrll #ifndef CONSPEED
108 1.3.2.2 skrll #define CONSPEED TTYDEF_SPEED
109 1.3.2.2 skrll #endif
110 1.3.2.2 skrll #ifndef CONMODE
111 1.3.2.2 skrll #define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
112 1.3.2.2 skrll #endif
113 1.3.2.2 skrll int comcnmode = CONMODE;
114 1.3.2.2 skrll #endif /* NCOM */
115 1.3.2.2 skrll
116 1.3.2.2 skrll const struct btinfo_console default_consinfo = {
117 1.3.2.2 skrll {0, 0},
118 1.3.2.2 skrll CONSDEVNAME,
119 1.3.2.2 skrll #if (NCOM > 0)
120 1.3.2.2 skrll CONADDR, CONSPEED
121 1.3.2.2 skrll #else
122 1.3.2.2 skrll 0, 0
123 1.3.2.2 skrll #endif
124 1.3.2.2 skrll };
125 1.3.2.2 skrll
126 1.3.2.2 skrll #ifdef KGDB
127 1.3.2.2 skrll #ifndef KGDB_DEVNAME
128 1.3.2.2 skrll #define KGDB_DEVNAME "com"
129 1.3.2.2 skrll #endif
130 1.3.2.2 skrll const char kgdb_devname[] = KGDB_DEVNAME;
131 1.3.2.2 skrll
132 1.3.2.2 skrll #if (NCOM > 0)
133 1.3.2.2 skrll #ifndef KGDB_DEVADDR
134 1.3.2.2 skrll #define KGDB_DEVADDR 0x3f8
135 1.3.2.2 skrll #endif
136 1.3.2.2 skrll int comkgdbaddr = KGDB_DEVADDR;
137 1.3.2.2 skrll #ifndef KGDB_DEVRATE
138 1.3.2.2 skrll #define KGDB_DEVRATE TTYDEF_SPEED
139 1.3.2.2 skrll #endif
140 1.3.2.2 skrll int comkgdbrate = KGDB_DEVRATE;
141 1.3.2.2 skrll #ifndef KGDB_DEVMODE
142 1.3.2.2 skrll #define KGDB_DEVMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
143 1.3.2.2 skrll #endif
144 1.3.2.2 skrll int comkgdbmode = KGDB_DEVMODE;
145 1.3.2.2 skrll #endif /* NCOM */
146 1.3.2.2 skrll
147 1.3.2.2 skrll #endif /* KGDB */
148 1.3.2.2 skrll
149 1.3.2.2 skrll /*
150 1.3.2.2 skrll * consinit:
151 1.3.2.2 skrll * initialize the system console.
152 1.3.2.2 skrll * XXX - shouldn't deal with this initted thing, but then,
153 1.3.2.2 skrll * it shouldn't be called from init386 either.
154 1.3.2.2 skrll */
155 1.3.2.2 skrll void
156 1.3.2.2 skrll consinit()
157 1.3.2.2 skrll {
158 1.3.2.5 skrll static int initted = 0;
159 1.3.2.5 skrll union xen_cmdline_parseinfo xcp;
160 1.3.2.2 skrll
161 1.3.2.5 skrll if (initted) {
162 1.3.2.2 skrll return;
163 1.3.2.5 skrll }
164 1.3.2.2 skrll initted = 1;
165 1.3.2.5 skrll xen_parse_cmdline(XEN_PARSE_CONSOLE, &xcp);
166 1.3.2.5 skrll
167 1.3.2.5 skrll #if (NVGA > 0)
168 1.3.2.5 skrll if (xen_start_info.flags & SIF_PRIVILEGED) {
169 1.3.2.5 skrll #ifdef CONS_OVERRIDE
170 1.3.2.5 skrll if (strcmp(default_consinfo.devname, "tty0") == 0 ||
171 1.3.2.5 skrll strcmp(default_consinfo.devname, "pc") == 0)) {
172 1.3.2.5 skrll #else
173 1.3.2.5 skrll if (strcmp(xcp.xcp_console, "tty0") == 0 || /* linux name */
174 1.3.2.5 skrll strcmp(xcp.xcp_console, "pc") == 0) { /* NetBSD name */
175 1.3.2.5 skrll #endif /* CONS_OVERRIDE */
176 1.3.2.6 skrll int error;
177 1.3.2.5 skrll vga_cnattach(X86_BUS_SPACE_IO, X86_BUS_SPACE_MEM,
178 1.3.2.5 skrll -1, 1);
179 1.3.2.6 skrll error = ENODEV;
180 1.3.2.6 skrll #if (NPCKBC > 0)
181 1.3.2.6 skrll error = pckbc_cnattach(X86_BUS_SPACE_IO, IO_KBD, KBCMDP,
182 1.3.2.5 skrll PCKBC_KBD_SLOT);
183 1.3.2.6 skrll #endif
184 1.3.2.6 skrll #if (NUKBD > 0)
185 1.3.2.6 skrll if (error)
186 1.3.2.6 skrll error = ukbd_cnattach();
187 1.3.2.6 skrll #endif
188 1.3.2.6 skrll if (error)
189 1.3.2.6 skrll printf("WARNING: no console keyboard, "
190 1.3.2.6 skrll "error=%d\n", error);
191 1.3.2.2 skrll return;
192 1.3.2.2 skrll }
193 1.3.2.2 skrll }
194 1.3.2.5 skrll #endif /* NVGA */
195 1.3.2.5 skrll #if NXENCONS > 0
196 1.3.2.2 skrll xenconscn_attach();
197 1.3.2.2 skrll return;
198 1.3.2.5 skrll #endif /* NXENCONS */
199 1.3.2.5 skrll panic("consinit: no console");
200 1.3.2.2 skrll }
201 1.3.2.2 skrll
202 1.3.2.2 skrll #if (NPCKBC > 0) && (NPCKBD == 0)
203 1.3.2.2 skrll /*
204 1.3.2.2 skrll * glue code to support old console code with the
205 1.3.2.2 skrll * mi keyboard controller driver
206 1.3.2.2 skrll */
207 1.3.2.2 skrll int
208 1.3.2.2 skrll pckbport_machdep_cnattach(kbctag, kbcslot)
209 1.3.2.2 skrll pckbport_tag_t kbctag;
210 1.3.2.2 skrll pckbport_slot_t kbcslot;
211 1.3.2.2 skrll {
212 1.3.2.2 skrll #if (NPC > 0) && (NPCCONSKBD > 0)
213 1.3.2.2 skrll return (pcconskbd_cnattach(kbctag, kbcslot));
214 1.3.2.2 skrll #else
215 1.3.2.2 skrll return (ENXIO);
216 1.3.2.2 skrll #endif
217 1.3.2.2 skrll }
218 1.3.2.2 skrll #endif
219 1.3.2.2 skrll
220 1.3.2.2 skrll #ifdef KGDB
221 1.3.2.2 skrll void
222 1.3.2.2 skrll kgdb_port_init()
223 1.3.2.2 skrll {
224 1.3.2.2 skrll #if (NCOM > 0)
225 1.3.2.2 skrll if(!strcmp(kgdb_devname, "com")) {
226 1.3.2.2 skrll bus_space_tag_t tag = X86_BUS_SPACE_IO;
227 1.3.2.2 skrll
228 1.3.2.2 skrll com_kgdb_attach(tag, comkgdbaddr, comkgdbrate, COM_FREQ,
229 1.3.2.2 skrll COM_TYPE_NORMAL, comkgdbmode);
230 1.3.2.2 skrll }
231 1.3.2.2 skrll #endif
232 1.3.2.2 skrll }
233 1.3.2.2 skrll #endif
234