consinit.c revision 1.3.2.5 1 1.3.2.5 skrll /* $NetBSD: consinit.c,v 1.3.2.5 2005/04/01 14:29:11 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.5 skrll __KERNEL_RCSID(0, "$NetBSD: consinit.c,v 1.3.2.5 2005/04/01 14:29:11 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.2 skrll #ifndef __x86_64__
69 1.3.2.2 skrll #include "pc.h"
70 1.3.2.2 skrll #endif
71 1.3.2.2 skrll #if (NPC > 0)
72 1.3.2.2 skrll #include <machine/pccons.h>
73 1.3.2.2 skrll #endif
74 1.3.2.2 skrll
75 1.3.2.2 skrll #include "opt_xen.h"
76 1.3.2.2 skrll #if (XEN > 0)
77 1.3.2.2 skrll #include <machine/xen.h>
78 1.3.2.2 skrll #include <dev/pckbport/pckbportvar.h>
79 1.3.2.2 skrll #include <machine/hypervisor.h>
80 1.3.2.2 skrll #endif
81 1.3.2.2 skrll
82 1.3.2.2 skrll #include "com.h"
83 1.3.2.2 skrll #if (NCOM > 0)
84 1.3.2.2 skrll #include <sys/termios.h>
85 1.3.2.2 skrll #include <dev/ic/comreg.h>
86 1.3.2.2 skrll #include <dev/ic/comvar.h>
87 1.3.2.2 skrll #endif
88 1.3.2.2 skrll
89 1.3.2.2 skrll #include "ukbd.h"
90 1.3.2.2 skrll #if (NUKBD > 0)
91 1.3.2.2 skrll #include <dev/usb/ukbdvar.h>
92 1.3.2.2 skrll #endif
93 1.3.2.2 skrll
94 1.3.2.2 skrll #ifndef CONSDEVNAME
95 1.3.2.2 skrll #define CONSDEVNAME "pc"
96 1.3.2.2 skrll #endif
97 1.3.2.2 skrll
98 1.3.2.2 skrll #if (NCOM > 0)
99 1.3.2.2 skrll #ifndef CONADDR
100 1.3.2.2 skrll #define CONADDR 0x3f8
101 1.3.2.2 skrll #endif
102 1.3.2.2 skrll #ifndef CONSPEED
103 1.3.2.2 skrll #define CONSPEED TTYDEF_SPEED
104 1.3.2.2 skrll #endif
105 1.3.2.2 skrll #ifndef CONMODE
106 1.3.2.2 skrll #define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
107 1.3.2.2 skrll #endif
108 1.3.2.2 skrll int comcnmode = CONMODE;
109 1.3.2.2 skrll #endif /* NCOM */
110 1.3.2.2 skrll
111 1.3.2.2 skrll const struct btinfo_console default_consinfo = {
112 1.3.2.2 skrll {0, 0},
113 1.3.2.2 skrll CONSDEVNAME,
114 1.3.2.2 skrll #if (NCOM > 0)
115 1.3.2.2 skrll CONADDR, CONSPEED
116 1.3.2.2 skrll #else
117 1.3.2.2 skrll 0, 0
118 1.3.2.2 skrll #endif
119 1.3.2.2 skrll };
120 1.3.2.2 skrll
121 1.3.2.2 skrll #ifdef KGDB
122 1.3.2.2 skrll #ifndef KGDB_DEVNAME
123 1.3.2.2 skrll #define KGDB_DEVNAME "com"
124 1.3.2.2 skrll #endif
125 1.3.2.2 skrll const char kgdb_devname[] = KGDB_DEVNAME;
126 1.3.2.2 skrll
127 1.3.2.2 skrll #if (NCOM > 0)
128 1.3.2.2 skrll #ifndef KGDB_DEVADDR
129 1.3.2.2 skrll #define KGDB_DEVADDR 0x3f8
130 1.3.2.2 skrll #endif
131 1.3.2.2 skrll int comkgdbaddr = KGDB_DEVADDR;
132 1.3.2.2 skrll #ifndef KGDB_DEVRATE
133 1.3.2.2 skrll #define KGDB_DEVRATE TTYDEF_SPEED
134 1.3.2.2 skrll #endif
135 1.3.2.2 skrll int comkgdbrate = KGDB_DEVRATE;
136 1.3.2.2 skrll #ifndef KGDB_DEVMODE
137 1.3.2.2 skrll #define KGDB_DEVMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
138 1.3.2.2 skrll #endif
139 1.3.2.2 skrll int comkgdbmode = KGDB_DEVMODE;
140 1.3.2.2 skrll #endif /* NCOM */
141 1.3.2.2 skrll
142 1.3.2.2 skrll #endif /* KGDB */
143 1.3.2.2 skrll
144 1.3.2.2 skrll /*
145 1.3.2.2 skrll * consinit:
146 1.3.2.2 skrll * initialize the system console.
147 1.3.2.2 skrll * XXX - shouldn't deal with this initted thing, but then,
148 1.3.2.2 skrll * it shouldn't be called from init386 either.
149 1.3.2.2 skrll */
150 1.3.2.2 skrll void
151 1.3.2.2 skrll consinit()
152 1.3.2.2 skrll {
153 1.3.2.5 skrll static int initted = 0;
154 1.3.2.5 skrll union xen_cmdline_parseinfo xcp;
155 1.3.2.2 skrll
156 1.3.2.5 skrll if (initted) {
157 1.3.2.2 skrll return;
158 1.3.2.5 skrll }
159 1.3.2.2 skrll initted = 1;
160 1.3.2.5 skrll xen_parse_cmdline(XEN_PARSE_CONSOLE, &xcp);
161 1.3.2.5 skrll
162 1.3.2.5 skrll #if (NVGA > 0)
163 1.3.2.5 skrll if (xen_start_info.flags & SIF_PRIVILEGED) {
164 1.3.2.5 skrll #ifdef CONS_OVERRIDE
165 1.3.2.5 skrll if (strcmp(default_consinfo.devname, "tty0") == 0 ||
166 1.3.2.5 skrll strcmp(default_consinfo.devname, "pc") == 0)) {
167 1.3.2.5 skrll #else
168 1.3.2.5 skrll if (strcmp(xcp.xcp_console, "tty0") == 0 || /* linux name */
169 1.3.2.5 skrll strcmp(xcp.xcp_console, "pc") == 0) { /* NetBSD name */
170 1.3.2.5 skrll #endif /* CONS_OVERRIDE */
171 1.3.2.5 skrll vga_cnattach(X86_BUS_SPACE_IO, X86_BUS_SPACE_MEM,
172 1.3.2.5 skrll -1, 1);
173 1.3.2.5 skrll pckbc_cnattach(X86_BUS_SPACE_IO, IO_KBD, KBCMDP,
174 1.3.2.5 skrll PCKBC_KBD_SLOT);
175 1.3.2.2 skrll return;
176 1.3.2.2 skrll }
177 1.3.2.2 skrll }
178 1.3.2.5 skrll #endif /* NVGA */
179 1.3.2.5 skrll #if NXENCONS > 0
180 1.3.2.2 skrll xenconscn_attach();
181 1.3.2.2 skrll return;
182 1.3.2.5 skrll #endif /* NXENCONS */
183 1.3.2.5 skrll panic("consinit: no console");
184 1.3.2.2 skrll }
185 1.3.2.2 skrll
186 1.3.2.2 skrll #if (NPCKBC > 0) && (NPCKBD == 0)
187 1.3.2.2 skrll /*
188 1.3.2.2 skrll * glue code to support old console code with the
189 1.3.2.2 skrll * mi keyboard controller driver
190 1.3.2.2 skrll */
191 1.3.2.2 skrll int
192 1.3.2.2 skrll pckbport_machdep_cnattach(kbctag, kbcslot)
193 1.3.2.2 skrll pckbport_tag_t kbctag;
194 1.3.2.2 skrll pckbport_slot_t kbcslot;
195 1.3.2.2 skrll {
196 1.3.2.2 skrll #if (NPC > 0) && (NPCCONSKBD > 0)
197 1.3.2.2 skrll return (pcconskbd_cnattach(kbctag, kbcslot));
198 1.3.2.2 skrll #else
199 1.3.2.2 skrll return (ENXIO);
200 1.3.2.2 skrll #endif
201 1.3.2.2 skrll }
202 1.3.2.2 skrll #endif
203 1.3.2.2 skrll
204 1.3.2.2 skrll #ifdef KGDB
205 1.3.2.2 skrll void
206 1.3.2.2 skrll kgdb_port_init()
207 1.3.2.2 skrll {
208 1.3.2.2 skrll #if (NCOM > 0)
209 1.3.2.2 skrll if(!strcmp(kgdb_devname, "com")) {
210 1.3.2.2 skrll bus_space_tag_t tag = X86_BUS_SPACE_IO;
211 1.3.2.2 skrll
212 1.3.2.2 skrll com_kgdb_attach(tag, comkgdbaddr, comkgdbrate, COM_FREQ,
213 1.3.2.2 skrll COM_TYPE_NORMAL, comkgdbmode);
214 1.3.2.2 skrll }
215 1.3.2.2 skrll #endif
216 1.3.2.2 skrll }
217 1.3.2.2 skrll #endif
218