/[gxemul]/upstream/0.4.4/src/machines/machine_arc.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /upstream/0.4.4/src/machines/machine_arc.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (show annotations)
Mon Oct 8 16:21:26 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 12090 byte(s)
0.4.4
1 /*
2 * Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * 3. The name of the author may not be used to endorse or promote products
13 * derived from this software without specific prior written permission.
14 *
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
25 * SUCH DAMAGE.
26 *
27 *
28 * $Id: machine_arc.c,v 1.13 2007/02/10 14:21:10 debug Exp $
29 */
30
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34
35 #include "arcbios.h"
36 #include "bus_isa.h"
37 #include "cpu.h"
38 #include "device.h"
39 #include "devices.h"
40 #include "machine.h"
41 #include "memory.h"
42 #include "misc.h"
43
44 #define MACHINE_NAME_MAXBUF 100
45
46
47 MACHINE_SETUP(arc)
48 {
49 struct pci_data *pci_data;
50 void *jazz_data;
51 struct memory *mem = machine->memory;
52 char tmpstr[1000];
53 char tmpstr2[1000];
54 int i, j;
55 char *eaddr_string = "eaddr=10:20:30:40:50:60"; /* bogus */
56 unsigned char macaddr[6];
57
58 machine->machine_name = malloc(MACHINE_NAME_MAXBUF);
59 if (machine->machine_name == NULL) {
60 fprintf(stderr, "out of memory\n");
61 exit(1);
62 }
63
64 cpu->byte_order = EMUL_LITTLE_ENDIAN;
65 snprintf(machine->machine_name, MACHINE_NAME_MAXBUF, "ARC");
66
67 switch (machine->machine_subtype) {
68
69 case MACHINE_ARC_NEC_RD94:
70 case MACHINE_ARC_NEC_R94:
71 case MACHINE_ARC_NEC_R96:
72 /*
73 * "NEC-RD94" (NEC RISCstation 2250)
74 * "NEC-R94" (NEC RISCstation 2200)
75 * "NEC-R96" (NEC Express RISCserver)
76 *
77 * http://mirror.aarnet.edu.au/pub/NetBSD/misc/chs/arcdiag.out
78 * (NEC-R96)
79 */
80
81 switch (machine->machine_subtype) {
82 case MACHINE_ARC_NEC_RD94:
83 strlcat(machine->machine_name,
84 " (NEC-RD94, NEC RISCstation 2250)",
85 MACHINE_NAME_MAXBUF);
86 break;
87 case MACHINE_ARC_NEC_R94:
88 strlcat(machine->machine_name,
89 " (NEC-R94; NEC RISCstation 2200)",
90 MACHINE_NAME_MAXBUF);
91 break;
92 case MACHINE_ARC_NEC_R96:
93 strlcat(machine->machine_name,
94 " (NEC-R96; NEC Express RISCserver)",
95 MACHINE_NAME_MAXBUF);
96 break;
97 }
98
99 /* TODO: interrupt controller! */
100
101 pci_data = device_add(machine,
102 "rd94 addr=0x80000000, irq=0");
103
104 device_add(machine, "sn addr=0x80001000 irq=0");
105 dev_mc146818_init(machine, mem, 0x80004000ULL, 0,
106 MC146818_ARC_NEC, 1);
107
108 fatal("TODO: legacy rewrite\n");
109 abort();
110 // i = dev_pckbc_init(machine, mem, 0x80005000ULL, PCKBC_8042,
111 // 0, 0, machine->use_x11, 0);
112
113 snprintf(tmpstr, sizeof(tmpstr),
114 "ns16550 irq=3 addr=0x80006000 in_use=%i name2=tty0",
115 machine->use_x11? 0 : 1);
116 j = (size_t)device_add(machine, tmpstr);
117 snprintf(tmpstr, sizeof(tmpstr),
118 "ns16550 irq=0 addr=0x80007000 in_use=%i name2=tty1", 0);
119 device_add(machine, tmpstr);
120
121 if (machine->use_x11)
122 machine->main_console_handle = i;
123 else
124 machine->main_console_handle = j;
125
126 /* lpt at 0x80008000 */
127
128 device_add(machine, "fdc addr=0x8000c000, irq=0");
129
130 switch (machine->machine_subtype) {
131 case MACHINE_ARC_NEC_RD94:
132 case MACHINE_ARC_NEC_R94:
133 /* PCI devices: (NOTE: bus must be 0, device must be
134 3, 4, or 5, for NetBSD to accept interrupts) */
135 bus_pci_add(machine, pci_data, mem, 0, 3, 0,
136 "dec21030"); /* tga graphics */
137 break;
138 case MACHINE_ARC_NEC_R96:
139 dev_fb_init(machine, mem, 0x100e00000ULL,
140 VFB_GENERIC, 640,480, 1024,480,
141 8, "necvdfrb");
142 break;
143 }
144 break;
145
146 case MACHINE_ARC_NEC_R98:
147 /*
148 * "NEC-R98" (NEC RISCserver 4200)
149 *
150 * According to http://mail-index.netbsd.org/port-arc/
151 * 2004/02/01/0001.html:
152 *
153 * Network adapter at "start: 0x 0 18600000, length:
154 * 0x1000, level: 4, vector: 9"
155 * Disk at "start: 0x 0 18c103f0, length: 0x1000, level:
156 * 5, vector: 6"
157 * Keyboard at "start: 0x 0 18c20060, length: 0x1000,
158 * level: 5, vector: 3"
159 * Serial at "start: 0x 0 18c103f8, length: 0x1000,
160 * level: 5, vector: 4"
161 * Serial at "start: 0x 0 18c102f8, length: 0x1000,
162 * level: 5, vector: 4"
163 * Parallel at "start: 0x 0 18c10278, length: 0x1000,
164 * level: 5, vector: 5"
165 */
166
167 strlcat(machine->machine_name,
168 " (NEC-R98; NEC RISCserver 4200)", MACHINE_NAME_MAXBUF);
169
170 /*
171 * Windows NT access stuff at these addresses:
172 *
173 * 19980308, 18000210, 18c0a008,
174 * 19022018, 19026010, andso on.
175 */
176 break;
177
178 case MACHINE_ARC_JAZZ_PICA:
179 case MACHINE_ARC_JAZZ_MAGNUM:
180 /*
181 * "PICA-61"
182 *
183 * According to NetBSD 1.6.2:
184 *
185 * jazzio0 at mainbus0
186 * timer0 at jazzio0 addr 0xe0000228
187 * mcclock0 at jazzio0 addr 0xe0004000: mc146818 or compatible
188 * lpt at jazzio0 addr 0xe0008000 intr 0 not configured
189 * fdc at jazzio0 addr 0xe0003000 intr 1 not configured
190 * MAGNUM at jazzio0 addr 0xe000c000 intr 2 not configured
191 * ALI_S3 at jazzio0 addr 0xe0800000 intr 3 not configured
192 * sn0 at jazzio0 addr 0xe0001000 intr 4: SONIC Ethernet
193 * sn0: Ethernet address 69:6a:6b:6c:00:00
194 * asc0 at jazzio0 addr 0xe0002000 intr 5: NCR53C94, target 0
195 * pckbd at jazzio0 addr 0xe0005000 intr 6 not configured
196 * pms at jazzio0 addr 0xe0005000 intr 7 not configured
197 * com0 at jazzio0 addr 0xe0006000 intr 8: ns16550a,
198 * working fifo
199 * com at jazzio0 addr 0xe0007000 intr 9 not configured
200 * jazzisabr0 at mainbus0
201 * isa0 at jazzisabr0 isa_io_base 0xe2000000 isa_mem_base
202 * 0xe3000000
203 *
204 * "Microsoft-Jazz", "MIPS Magnum"
205 *
206 * timer0 at jazzio0 addr 0xe0000228
207 * mcclock0 at jazzio0 addr 0xe0004000: mc146818 or compatible
208 * lpt at jazzio0 addr 0xe0008000 intr 0 not configured
209 * fdc at jazzio0 addr 0xe0003000 intr 1 not configured
210 * MAGNUM at jazzio0 addr 0xe000c000 intr 2 not configured
211 * VXL at jazzio0 addr 0xe0800000 intr 3 not configured
212 * sn0 at jazzio0 addr 0xe0001000 intr 4: SONIC Ethernet
213 * sn0: Ethernet address 69:6a:6b:6c:00:00
214 * asc0 at jazzio0 addr 0xe0002000 intr 5: NCR53C94, target 0
215 * scsibus0 at asc0: 8 targets, 8 luns per target
216 * pckbd at jazzio0 addr 0xe0005000 intr 6 not configured
217 * pms at jazzio0 addr 0xe0005000 intr 7 not configured
218 * com0 at jazzio0 addr 0xe0006000 intr 8: ns16550a,
219 * working fifo
220 * com at jazzio0 addr 0xe0007000 intr 9 not configured
221 * jazzisabr0 at mainbus0
222 * isa0 at jazzisabr0 isa_io_base 0xe2000000 isa_mem_base
223 * 0xe3000000
224 */
225
226 switch (machine->machine_subtype) {
227 case MACHINE_ARC_JAZZ_PICA:
228 strlcat(machine->machine_name,
229 " (Microsoft Jazz, Acer PICA-61)",
230 MACHINE_NAME_MAXBUF);
231 machine->stable = 1;
232 break;
233 case MACHINE_ARC_JAZZ_MAGNUM:
234 strlcat(machine->machine_name,
235 " (Microsoft Jazz, MIPS Magnum)",
236 MACHINE_NAME_MAXBUF);
237 break;
238 default:
239 fatal("error in machine.c. jazz\n");
240 exit(1);
241 }
242
243 jazz_data = device_add(machine, "jazz addr=0x80000000");
244
245 /* Keyboard IRQ is jazz.6, mouse is jazz.7 */
246 snprintf(tmpstr, sizeof(tmpstr),
247 "%s.cpu[%i].jazz.6", machine->path,
248 machine->bootstrap_cpu);
249 snprintf(tmpstr2, sizeof(tmpstr2),
250 "%s.cpu[%i].jazz.7", machine->path,
251 machine->bootstrap_cpu);
252 i = dev_pckbc_init(machine, mem, 0x80005000ULL,
253 PCKBC_JAZZ, tmpstr, tmpstr2,
254 machine->use_x11, 0);
255
256 /* Serial controllers at JAZZ irq 8 and 9: */
257 snprintf(tmpstr, sizeof(tmpstr),
258 "ns16550 irq=%s.cpu[%i].jazz.8 addr=0x80006000"
259 " in_use=%i name2=tty0", machine->path,
260 machine->bootstrap_cpu, machine->use_x11? 0 : 1);
261 j = (size_t)device_add(machine, tmpstr);
262 snprintf(tmpstr, sizeof(tmpstr),
263 "ns16550 irq=%s.cpu[%i].jazz.9 addr=0x80007000"
264 " in_use=0 name2=tty1", machine->path,
265 machine->bootstrap_cpu);
266 device_add(machine, tmpstr);
267
268 if (machine->use_x11)
269 machine->main_console_handle = i;
270 else
271 machine->main_console_handle = j;
272
273 switch (machine->machine_subtype) {
274 case MACHINE_ARC_JAZZ_PICA:
275 if (machine->use_x11) {
276 dev_vga_init(machine, mem, 0x400a0000ULL,
277 0x600003c0ULL, machine->machine_name);
278 arcbios_console_init(machine,
279 0x400b8000ULL, 0x600003c0ULL);
280 }
281 break;
282 case MACHINE_ARC_JAZZ_MAGNUM:
283 /* PROM mirror? */
284 dev_ram_init(machine, 0xfff00000, 0x100000,
285 DEV_RAM_MIRROR | DEV_RAM_MIGHT_POINT_TO_DEVICES,
286 0x1fc00000);
287
288 /* VXL. TODO */
289 /* control at 0x60100000? */
290 dev_fb_init(machine, mem, 0x60200000ULL,
291 VFB_GENERIC, 1024,768, 1024,768, 8, "VXL");
292 break;
293 }
294
295 /* SN at JAZZ irq 4 */
296 snprintf(tmpstr, sizeof(tmpstr),
297 "sn addr=0x80001000 irq=%s.cpu[%i].jazz.4",
298 machine->path, machine->bootstrap_cpu);
299 device_add(machine, tmpstr);
300
301 /* ASC at JAZZ irq 5 */
302 snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].jazz.5",
303 machine->path, machine->bootstrap_cpu);
304 dev_asc_init(machine, mem, 0x80002000ULL, tmpstr, NULL,
305 DEV_ASC_PICA, dev_jazz_dma_controller, jazz_data);
306
307 /* FDC at JAZZ irq 1 */
308 snprintf(tmpstr, sizeof(tmpstr),
309 "fdc addr=0x80003000 irq=%s.cpu[%i].jazz.1",
310 machine->path, machine->bootstrap_cpu);
311 device_add(machine, tmpstr);
312
313 /* MC146818 at MIPS irq 2: */
314 snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2",
315 machine->path, machine->bootstrap_cpu);
316 dev_mc146818_init(machine, mem,
317 0x80004000ULL, tmpstr, MC146818_ARC_JAZZ, 1);
318
319 #if 0
320 Not yet.
321 /* WDC at ISA irq 14 */
322 device_add(machine, "wdc addr=0x900001f0, irq=38");
323 #endif
324
325 break;
326
327 default:fatal("Unimplemented ARC machine type %i\n",
328 machine->machine_subtype);
329 exit(1);
330 }
331
332 /*
333 * NOTE: ARCBIOS shouldn't be used before this point. (The only
334 * exception is that arcbios_console_init() may be called.)
335 */
336
337 if (!machine->prom_emulation)
338 return;
339
340 arcbios_init(machine, 0, 0, eaddr_string, macaddr);
341 }
342
343
344 MACHINE_DEFAULT_CPU(arc)
345 {
346 switch (machine->machine_subtype) {
347 case MACHINE_ARC_JAZZ_PICA:
348 machine->cpu_name = strdup("R4000");
349 break;
350 default:
351 machine->cpu_name = strdup("R4400");
352 }
353 }
354
355
356 MACHINE_DEFAULT_RAM(arc)
357 {
358 machine->physical_ram_in_mb = 64;
359 }
360
361
362 MACHINE_REGISTER(arc)
363 {
364 MR_DEFAULT(arc, "ARC", ARCH_MIPS, MACHINE_ARC);
365
366 me->set_default_ram = machine_default_ram_arc;
367
368 machine_entry_add_alias(me, "arc");
369
370 machine_entry_add_subtype(me, "Acer PICA-61", MACHINE_ARC_JAZZ_PICA,
371 "pica-61", "acer pica", "pica", NULL);
372
373 machine_entry_add_subtype(me, "Deskstation Tyne",
374 MACHINE_ARC_DESKTECH_TYNE,
375 "deskstation tyne", "desktech", "tyne", NULL);
376
377 machine_entry_add_subtype(me, "Jazz Magnum", MACHINE_ARC_JAZZ_MAGNUM,
378 "magnum", "jazz magnum", NULL);
379
380 machine_entry_add_subtype(me, "NEC-R94", MACHINE_ARC_NEC_R94,
381 "nec-r94", "r94", NULL);
382
383 machine_entry_add_subtype(me, "NEC-RD94", MACHINE_ARC_NEC_RD94,
384 "nec-rd94", "rd94", NULL);
385
386 machine_entry_add_subtype(me, "NEC-R96", MACHINE_ARC_NEC_R96,
387 "nec-r96", "r96", NULL);
388
389 machine_entry_add_subtype(me, "NEC-R98", MACHINE_ARC_NEC_R98,
390 "nec-r98", "r98", NULL);
391
392 machine_entry_add_subtype(me, "Olivetti M700", MACHINE_ARC_JAZZ_M700,
393 "olivetti", "m700", NULL);
394 }
395

  ViewVC Help
Powered by ViewVC 1.1.26