/[gxemul]/trunk/src/machines/machine_cobalt.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 /trunk/src/machines/machine_cobalt.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 26 - (show annotations)
Mon Oct 8 16:20:10 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 4976 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1264 2006/06/25 11:08:04 debug Exp $
20060624	Replacing the error-prone machine type initialization stuff
		with something more reasonable.
		Finally removing the old "cpu_run" kludge; moving around stuff
		in machine.c and emul.c to better suit the dyntrans system.
		Various minor dyntrans cleanups (renaming translate_address to
		translate_v2p, and experimenting with template physpages).
20060625	Removing the speed hack which separated the vph entries into
		two halves (code vs data); things seem a lot more stable now.
		Minor performance hack: R2000/R3000 cache isolation now only
		clears address translations when going into isolation, not
		when going out of it.
		Fixing the MIPS interrupt problems by letting mtc0 immediately
		cause interrupts.

==============  RELEASE 0.4.0.1  ==============


1 /*
2 * Copyright (C) 2003-2006 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_cobalt.c,v 1.3 2006/06/24 10:19:19 debug Exp $
29 */
30
31 #include <stdio.h>
32 #include <string.h>
33
34 #include "bus_pci.h"
35 #include "cpu.h"
36 #include "device.h"
37 #include "devices.h"
38 #include "machine.h"
39 #include "machine_interrupts.h"
40 #include "memory.h"
41 #include "misc.h"
42
43
44 MACHINE_SETUP(cobalt)
45 {
46 char tmpstr[500];
47 struct pci_data *pci_data;
48 struct memory *mem = machine->memory;
49
50 cpu->byte_order = EMUL_LITTLE_ENDIAN;
51 machine->machine_name = "Cobalt";
52 machine->stable = 1;
53
54 /*
55 * Interrupts seem to be the following:
56 * (according to http://www.funet.fi/pub/Linux/PEOPLE/Linus/v2.4/
57 * patch-html/patch-2.4.19/linux-2.4.19_arch_mips_cobalt_irq.c.html)
58 *
59 * 2 Galileo chip (timer)
60 * 3 Tulip 0 + NCR SCSI
61 * 4 Tulip 1
62 * 5 16550 UART (serial console)
63 * 6 VIA southbridge PIC
64 * 7 PCI (Note: Not used. The PCI controller
65 * interrupts at ISA interrupt 9.)
66 */
67
68 /* ISA interrupt controllers: */
69 snprintf(tmpstr, sizeof(tmpstr), "8259 irq=24 addr=0x10000020");
70 machine->isa_pic_data.pic1 = device_add(machine, tmpstr);
71 snprintf(tmpstr, sizeof(tmpstr), "8259 irq=24 addr=0x100000a0");
72 machine->isa_pic_data.pic2 = device_add(machine, tmpstr);
73 machine->md_interrupt = isa8_interrupt;
74 machine->isa_pic_data.native_irq = 6;
75
76 dev_mc146818_init(machine, mem, 0x10000070, 0, MC146818_PC_CMOS, 4);
77
78 machine->main_console_handle = (size_t) device_add(machine,
79 "ns16550 irq=5 addr=0x1c800000 name2=tty0 in_use=1");
80
81 /* TODO: bus_isa_init() ? */
82
83 #if 0
84 device_add(machine,
85 "ns16550 irq=0 addr=0x1f000010 name2=tty1 in_use=0");
86 #endif
87
88 /*
89 * According to NetBSD/cobalt:
90 *
91 * pchb0 at pci0 dev 0 function 0: Galileo GT-64111 System Controller,
92 * rev 1 (NOTE: added by dev_gt_init())
93 * tlp0 at pci0 dev 7 function 0: DECchip 21143 Ethernet, pass 4.1
94 * Symbios Logic 53c860 (SCSI mass storage, revision 0x02) at pci0
95 * dev 8
96 * pcib0 at pci0 dev 9 function 0, VIA Technologies VT82C586 (Apollo
97 * VP) PCI-ISA Bridge, rev 37
98 * pciide0 at pci0 dev 9 function 1: VIA Technologies VT82C586 (Apollo
99 * VP) ATA33 cr
100 * tlp1 at pci0 dev 12 function 0: DECchip 21143 Ethernet, pass 4.1
101 *
102 * The PCI controller interrupts at ISA interrupt 9.
103 */
104 pci_data = dev_gt_init(machine, mem, 0x14000000, 2, 8 + 9, 11);
105 bus_pci_add(machine, pci_data, mem, 0, 7, 0, "dec21143");
106 /* bus_pci_add(machine, pci_data, mem, 0, 8, 0, "symbios_860");
107 PCI_VENDOR_SYMBIOS, PCI_PRODUCT_SYMBIOS_860 */
108 bus_pci_add(machine, pci_data, mem, 0, 9, 0, "vt82c586_isa");
109 bus_pci_add(machine, pci_data, mem, 0, 9, 1, "vt82c586_ide");
110 bus_pci_add(machine, pci_data, mem, 0, 12, 0, "dec21143");
111
112 if (!machine->prom_emulation)
113 return;
114
115
116 /*
117 * NetBSD/cobalt expects memsize in a0, but it seems that what
118 * it really wants is the end of memory + 0x80000000.
119 *
120 * The bootstring is stored 512 bytes before the end of
121 * physical ram.
122 */
123 cpu->cd.mips.gpr[MIPS_GPR_A0] =
124 machine->physical_ram_in_mb * 1048576 + 0xffffffff80000000ULL;
125 machine->bootstr = "root=/dev/hda1 ro";
126 /* bootstr = "nfsroot=/usr/cobalt/"; */
127 /* TODO: bootarg, and/or automagic boot device detection */
128 store_string(cpu, cpu->cd.mips.gpr[MIPS_GPR_A0] - 512,
129 machine->bootstr);
130 }
131
132
133 MACHINE_DEFAULT_CPU(cobalt)
134 {
135 machine->cpu_name = strdup("RM5200");
136 }
137
138
139 MACHINE_REGISTER(cobalt)
140 {
141 MR_DEFAULT(cobalt, "Cobalt", ARCH_MIPS, MACHINE_COBALT);
142
143 machine_entry_add_alias(me, "cobalt");
144 }
145

  ViewVC Help
Powered by ViewVC 1.1.26