/[gxemul]/upstream/0.4.6/src/machines/machine_mvmeppc.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.6/src/machines/machine_mvmeppc.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 43 - (show annotations)
Mon Oct 8 16:22:43 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 5982 byte(s)
0.4.6
1 /*
2 * Copyright (C) 2006-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_mvmeppc.c,v 1.22 2007/06/15 18:08:10 debug Exp $
29 *
30 * COMMENT: MVMEPPC machines
31 *
32 * This is for experiments with NetBSD/mvmeppc or RTEMS.
33 * (ftp://ftp.netbsd.org/pub/NetBSD/arch/mvmeppc/snapshot/20020302/README)
34 *
35 * Note: MVME machines that really adhere to the PReP standard should be
36 * in machine_prep.c instead.
37 *
38 *
39 * TODO: This is mostly bogus.
40 */
41
42 #include <stdio.h>
43 #include <stdlib.h>
44 #include <string.h>
45
46 #include "bus_isa.h"
47 #include "bus_pci.h"
48 #include "cpu.h"
49 #include "device.h"
50 #include "devices.h"
51 #include "diskimage.h"
52 #include "machine.h"
53 #include "memory.h"
54 #include "misc.h"
55
56
57 MACHINE_SETUP(mvmeppc)
58 {
59 char tmpstr[300];
60 struct pci_data *pci_data = NULL;
61
62 switch (machine->machine_subtype) {
63
64 case MACHINE_MVMEPPC_1600:
65 machine->machine_name = "MVME1600";
66
67 snprintf(tmpstr, sizeof(tmpstr), "eagle irq=%s.cpu[%i]",
68 machine->path, machine->bootstrap_cpu);
69 device_add(machine, tmpstr);
70
71 bus_pci_add(machine, pci_data, machine->memory,
72 0, 14, 0, "dec21143");
73
74 device_add(machine, "nvram addr=0x80000074 name2=mvme1600");
75
76 /*
77 * "DRAM size register": TODO: turn this into a device?
78 * See the definition of p160x_dram_size in NetBSD's
79 * .../arch/mvmeppc/platform_160x.c for details.
80 *
81 * 0x11 = two banks of 32 MB each.
82 */
83 dev_ram_init(machine, 0x80000804, 1, DEV_RAM_RAM, 0);
84 store_byte(cpu, 0x80000804, 0x11);
85
86 break;
87
88 case MACHINE_MVMEPPC_2100:
89 machine->machine_name = "MVME2100";
90
91 /* 0xfe000000 isa bus space */
92 /* 0xfec00000 pci indirect addr */
93 /* 0xfee00000 pci indirect data */
94
95 /* TODO: irq */
96 device_add(machine, "ns16550 irq=0 addr=0xffe10000");
97
98 break;
99
100 case MACHINE_MVMEPPC_5500:
101 machine->machine_name = "MVME5500";
102
103 /* GT64260 interrupt and PCI controller: */
104 pci_data = dev_gt_init(machine, machine->memory,
105 0xf1000000, "TODO: timer irq", "TODO: isa irq", 260);
106
107 /* TODO: irq */
108 device_add(machine, "ns16550 irq=0 addr=0xf1120000");
109
110 break;
111
112 default:fatal("Unimplemented MVMEPPC machine subtype %i\n",
113 machine->machine_subtype);
114 exit(1);
115 }
116
117 if (!machine->prom_emulation)
118 return;
119
120 /* r3 = start of kernel, r4 = end of kernel (for NetBSD/mvmeppc) */
121 cpu->cd.ppc.gpr[3] = 0;
122 cpu->cd.ppc.gpr[4] = 1048576 * 10;
123 cpu->cd.ppc.gpr[5] = machine->physical_ram_in_mb * 1048576-0x100;
124 store_string(cpu, cpu->cd.ppc.gpr[5]+ 44, "PC16550");
125 store_32bit_word(cpu, cpu->cd.ppc.gpr[5]+ 68, 9600);
126 store_32bit_word(cpu, cpu->cd.ppc.gpr[5]+ 72, 0);
127
128 store_16bit_word(cpu, cpu->cd.ppc.gpr[5]+ 76, 0x1600);
129 store_32bit_word(cpu, cpu->cd.ppc.gpr[5]+ 80,
130 machine->physical_ram_in_mb * 1048576);
131 store_32bit_word(cpu, cpu->cd.ppc.gpr[5]+ 84, 33 * 1000000);
132 store_32bit_word(cpu, cpu->cd.ppc.gpr[5]+ 88, 33 * 1000000);
133 #if 0
134 0 u_int32_t bi_boothowto;
135 4 u_int32_t bi_bootaddr;
136 8 u_int16_t bi_bootclun;
137 10 u_int16_t bi_bootdlun;
138 12 char bi_bootline[BOOTLINE_LEN]; (32)
139 44 char bi_consoledev[CONSOLEDEV_LEN]; (16)
140 60 u_int32_t bi_consoleaddr;
141 64 u_int32_t bi_consolechan;
142 68 u_int32_t bi_consolespeed;
143 72 u_int32_t bi_consolecflag;
144 76 u_int16_t bi_modelnumber;
145 80 u_int32_t bi_memsize;
146 84 u_int32_t bi_mpuspeed;
147 88 u_int32_t bi_busspeed;
148 92 u_int32_t bi_clocktps;
149 #endif
150 }
151
152
153 MACHINE_DEFAULT_CPU(mvmeppc)
154 {
155 switch (machine->machine_subtype) {
156
157 case MACHINE_MVMEPPC_1600:
158 /* Suitable for NetBSD/mvmeppc: */
159 machine->cpu_name = strdup("PPC603e");
160 break;
161
162 case MACHINE_MVMEPPC_2100:
163 machine->cpu_name = strdup("PPC603e");
164 break;
165
166 case MACHINE_MVMEPPC_5500:
167 machine->cpu_name = strdup("PPC750");
168 break;
169
170 default:fatal("Unimplemented MVMEPPC machine subtype %i\n",
171 machine->machine_subtype);
172 exit(1);
173 }
174 }
175
176
177 MACHINE_DEFAULT_RAM(mvmeppc)
178 {
179 machine->physical_ram_in_mb = 64;
180 }
181
182
183 MACHINE_REGISTER(mvmeppc)
184 {
185 MR_DEFAULT(mvmeppc, "MVMEPPC", ARCH_PPC, MACHINE_MVMEPPC);
186
187 machine_entry_add_alias(me, "mvmeppc");
188
189 machine_entry_add_subtype(me, "MVME1600", MACHINE_MVMEPPC_1600,
190 "mvme1600", NULL);
191
192 machine_entry_add_subtype(me, "MVME2100", MACHINE_MVMEPPC_2100,
193 "mvme2100", NULL);
194
195 machine_entry_add_subtype(me, "MVME5500", MACHINE_MVMEPPC_5500,
196 "mvme5500", NULL);
197
198 me->set_default_ram = machine_default_ram_mvmeppc;
199 }
200

  ViewVC Help
Powered by ViewVC 1.1.26