summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
Diffstat (limited to 'kern')
-rw-r--r--kern/freebsd/freebsd_system.cc158
-rw-r--r--kern/freebsd/freebsd_system.hh47
-rw-r--r--kern/kernel_stats.cc5
-rw-r--r--kern/kernel_stats.hh4
-rw-r--r--kern/linux/aligned.hh3
-rw-r--r--kern/linux/linux_system.cc4
-rw-r--r--kern/linux/linux_system.hh4
-rw-r--r--kern/linux/linux_threadinfo.hh2
-rw-r--r--kern/linux/printk.cc4
-rw-r--r--kern/linux/sched.hh3
-rw-r--r--kern/linux/thread_info.hh1
-rw-r--r--kern/system_events.cc5
-rw-r--r--kern/system_events.hh2
13 files changed, 205 insertions, 37 deletions
diff --git a/kern/freebsd/freebsd_system.cc b/kern/freebsd/freebsd_system.cc
new file mode 100644
index 000000000..35ac14330
--- /dev/null
+++ b/kern/freebsd/freebsd_system.cc
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2004-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file
+ * Modifications for the FreeBSD kernel.
+ * Based on kern/linux/linux_system.cc.
+ *
+ */
+
+#include "base/loader/symtab.hh"
+#include "cpu/exec_context.hh"
+#include "kern/freebsd/freebsd_system.hh"
+#include "mem/functional/memory_control.hh"
+#include "mem/functional/physical.hh"
+#include "sim/builder.hh"
+#include "targetarch/vtophys.hh"
+
+using namespace std;
+
+FreebsdSystem::FreebsdSystem(Params *p)
+ : System(p)
+{
+ Addr addr = 0;
+
+ /**
+ * Any time DELAY is called just skip the function.
+ */
+ skipDelayEvent = new SkipFuncEvent(&pcEventQueue, "DELAY");
+ if (kernelSymtab->findAddress("DELAY", addr))
+ skipDelayEvent->schedule(addr+sizeof(MachInst));
+
+ skipCalibrateClocks = new FreebsdSkipCalibrateClocksEvent(&pcEventQueue, "calibrate_clocks");
+ if (kernelSymtab->findAddress("calibrate_clocks", addr))
+ skipCalibrateClocks->schedule(addr + sizeof(MachInst) * 2);
+}
+
+
+FreebsdSystem::~FreebsdSystem()
+{
+ delete skipDelayEvent;
+ delete skipCalibrateClocks;
+}
+
+
+void
+FreebsdSystem::doCalibrateClocks(ExecContext *xc)
+{
+ Addr ppc_vaddr = 0;
+ Addr timer_vaddr = 0;
+ Addr ppc_paddr = 0;
+ Addr timer_paddr = 0;
+
+ ppc_vaddr = (Addr)xc->regs.intRegFile[ArgumentReg1];
+ timer_vaddr = (Addr)xc->regs.intRegFile[ArgumentReg2];
+
+ ppc_paddr = vtophys(physmem, ppc_vaddr);
+ timer_paddr = vtophys(physmem, timer_vaddr);
+
+ uint8_t *ppc = physmem->dma_addr(ppc_paddr, sizeof(uint32_t));
+ uint8_t *timer = physmem->dma_addr(timer_paddr, sizeof(uint32_t));
+
+ *(uint32_t *)ppc = htoa((uint32_t)2000000000);
+ *(uint32_t *)timer = htoa((uint32_t)1193180);
+}
+
+
+BEGIN_DECLARE_SIM_OBJECT_PARAMS(FreebsdSystem)
+
+ Param<Tick> boot_cpu_frequency;
+ SimObjectParam<MemoryController *> memctrl;
+ SimObjectParam<PhysicalMemory *> physmem;
+
+ Param<string> kernel;
+ Param<string> console;
+ Param<string> pal;
+
+ Param<string> boot_osflags;
+ Param<string> readfile;
+ Param<unsigned int> init_param;
+
+ Param<uint64_t> system_type;
+ Param<uint64_t> system_rev;
+
+ Param<bool> bin;
+ VectorParam<string> binned_fns;
+ Param<bool> bin_int;
+
+END_DECLARE_SIM_OBJECT_PARAMS(FreebsdSystem)
+
+BEGIN_INIT_SIM_OBJECT_PARAMS(FreebsdSystem)
+
+ INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
+ INIT_PARAM(memctrl, "memory controller"),
+ INIT_PARAM(physmem, "phsyical memory"),
+ INIT_PARAM(kernel, "file that contains the kernel code"),
+ INIT_PARAM(console, "file that contains the console code"),
+ INIT_PARAM(pal, "file that contains palcode"),
+ INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot",
+ "a"),
+ INIT_PARAM_DFLT(readfile, "file to read startup script from", ""),
+ INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0),
+ INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 34),
+ INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 1<<10),
+ INIT_PARAM_DFLT(bin, "is this system to be binned", false),
+ INIT_PARAM(binned_fns, "functions to be broken down and binned"),
+ INIT_PARAM_DFLT(bin_int, "is interrupt code binned seperately?", true)
+
+END_INIT_SIM_OBJECT_PARAMS(FreebsdSystem)
+
+CREATE_SIM_OBJECT(FreebsdSystem)
+{
+ System::Params *p = new System::Params;
+ p->name = getInstanceName();
+ p->boot_cpu_frequency = boot_cpu_frequency;
+ p->memctrl = memctrl;
+ p->physmem = physmem;
+ p->kernel_path = kernel;
+ p->console_path = console;
+ p->palcode = pal;
+ p->boot_osflags = boot_osflags;
+ p->init_param = init_param;
+ p->readfile = readfile;
+ p->system_type = system_type;
+ p->system_rev = system_rev;
+ p->bin = bin;
+ p->binned_fns = binned_fns;
+ p->bin_int = bin_int;
+ return new FreebsdSystem(p);
+}
+
+REGISTER_SIM_OBJECT("FreebsdSystem", FreebsdSystem)
+
diff --git a/kern/freebsd/freebsd_system.hh b/kern/freebsd/freebsd_system.hh
new file mode 100644
index 000000000..6429b5690
--- /dev/null
+++ b/kern/freebsd/freebsd_system.hh
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2004-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __KERN_FREEBSD_FREEBSD_SYSTEM_HH__
+#define __KERN_FREEBSD_FREEBSD_SYSTEM_HH__
+
+#include "kern/freebsd/freebsd_events.hh"
+
+class FreebsdSystem : public System
+{
+ private:
+ SkipFuncEvent *skipDelayEvent;
+ FreebsdSkipCalibrateClocksEvent *skipCalibrateClocks;
+
+ public:
+ FreebsdSystem(Params *p);
+ ~FreebsdSystem();
+ void doCalibrateClocks(ExecContext *xc);
+
+};
+
+#endif // __KERN_FREEBSD_FREEBSD_SYSTEM_HH__
diff --git a/kern/kernel_stats.cc b/kern/kernel_stats.cc
index 6e4a77f4e..3a7d12443 100644
--- a/kern/kernel_stats.cc
+++ b/kern/kernel_stats.cc
@@ -32,13 +32,8 @@
#include "arch/alpha/osfpal.hh"
#include "base/trace.hh"
-#include "base/statistics.hh"
-#include "base/stats/bin.hh"
#include "cpu/exec_context.hh"
-#include "cpu/pc_event.hh"
-#include "cpu/static_inst.hh"
#include "kern/kernel_stats.hh"
-#include "kern/linux/linux_syscalls.hh"
#include "kern/tru64/tru64_syscalls.hh"
using namespace std;
diff --git a/kern/kernel_stats.hh b/kern/kernel_stats.hh
index 66364d2d7..7b931ef79 100644
--- a/kern/kernel_stats.hh
+++ b/kern/kernel_stats.hh
@@ -34,10 +34,6 @@
#include <string>
#include <vector>
-#include "base/statistics.hh"
-#include "sim/serialize.hh"
-#include "targetarch/isa_traits.hh"
-
class BaseCPU;
class ExecContext;
class FnEvent;
diff --git a/kern/linux/aligned.hh b/kern/linux/aligned.hh
index 426299b5d..18d1b43c0 100644
--- a/kern/linux/aligned.hh
+++ b/kern/linux/aligned.hh
@@ -30,9 +30,6 @@
#define __KERN_LINUX_ALIGNED_HH__
-#include "sim/host.hh"
-#include "targetarch/isa_traits.hh"
-
/* GCC 3.3.X has a bug in which attributes+typedefs don't work. 3.2.X is fine
* as in 3.4.X, but the bug is marked will not fix in 3.3.X so here is
* the work around.
diff --git a/kern/linux/linux_system.cc b/kern/linux/linux_system.cc
index fd444341a..3f360efdd 100644
--- a/kern/linux/linux_system.cc
+++ b/kern/linux/linux_system.cc
@@ -36,19 +36,15 @@
*/
#include "base/loader/symtab.hh"
-#include "base/trace.hh"
#include "cpu/exec_context.hh"
#include "cpu/base.hh"
#include "kern/linux/linux_events.hh"
#include "kern/linux/linux_system.hh"
-#include "kern/system_events.hh"
#include "mem/functional/memory_control.hh"
#include "mem/functional/physical.hh"
#include "sim/builder.hh"
#include "dev/platform.hh"
-#include "targetarch/isa_traits.hh"
#include "targetarch/vtophys.hh"
-#include "sim/debug.hh"
using namespace std;
diff --git a/kern/linux/linux_system.hh b/kern/linux/linux_system.hh
index f870b7744..32b92f310 100644
--- a/kern/linux/linux_system.hh
+++ b/kern/linux/linux_system.hh
@@ -29,10 +29,6 @@
#ifndef __KERN_LINUX_LINUX_SYSTEM_HH__
#define __KERN_LINUX_LINUX_SYSTEM_HH__
-#include "sim/host.hh"
-#include "sim/system.hh"
-#include "targetarch/isa_traits.hh"
-
/**
* MAGIC address where the kernel arguments should go. Defined as
* PARAM in linux kernel alpha-asm.
diff --git a/kern/linux/linux_threadinfo.hh b/kern/linux/linux_threadinfo.hh
index 92cc181db..253b122bc 100644
--- a/kern/linux/linux_threadinfo.hh
+++ b/kern/linux/linux_threadinfo.hh
@@ -30,9 +30,7 @@
#define __LINUX_TREADNIFO_HH__
-#include "targetarch/isa_traits.hh"
#include "targetarch/vptr.hh"
-#include "cpu/exec_context.hh"
#include "kern/linux/thread_info.hh"
#include "kern/linux/sched.hh"
diff --git a/kern/linux/printk.cc b/kern/linux/printk.cc
index cafc9172a..fbc8bdad1 100644
--- a/kern/linux/printk.cc
+++ b/kern/linux/printk.cc
@@ -29,12 +29,8 @@
#include <sys/types.h>
#include <algorithm>
-#include "base/cprintf.hh"
#include "base/trace.hh"
-#include "sim/host.hh"
#include "targetarch/arguments.hh"
-#include "targetarch/vtophys.hh"
-#include "kern/linux/printk.hh"
using namespace std;
diff --git a/kern/linux/sched.hh b/kern/linux/sched.hh
index e3febb298..a11fa590d 100644
--- a/kern/linux/sched.hh
+++ b/kern/linux/sched.hh
@@ -29,9 +29,6 @@
#ifndef __KERN_LINUX_SCHED_HH__
#define __KERN_LINUX_SCHED_HH__
-#include "targetarch/isa_traits.hh"
-#include "kern/linux/aligned.hh"
-
namespace Linux {
struct task_struct {
uint8_t junk1[0xf4];
diff --git a/kern/linux/thread_info.hh b/kern/linux/thread_info.hh
index c8bcc726a..cf24ef939 100644
--- a/kern/linux/thread_info.hh
+++ b/kern/linux/thread_info.hh
@@ -30,7 +30,6 @@
#define __KERN_LINUX_THREAD_INFO_H__
#include "kern/linux/hwrpb.hh"
-#include "kern/linux/aligned.hh"
namespace Linux {
struct thread_info {
diff --git a/kern/system_events.cc b/kern/system_events.cc
index 40c223b5e..d5c0d242a 100644
--- a/kern/system_events.cc
+++ b/kern/system_events.cc
@@ -26,13 +26,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "cpu/exec_context.hh"
-#include "cpu/base.hh"
-#include "encumbered/cpu/full/bpred.hh"
#include "encumbered/cpu/full/cpu.hh"
#include "kern/kernel_stats.hh"
-#include "kern/system_events.hh"
-#include "sim/system.hh"
void
SkipFuncEvent::process(ExecContext *xc)
diff --git a/kern/system_events.hh b/kern/system_events.hh
index 24aa8f154..94f6efeba 100644
--- a/kern/system_events.hh
+++ b/kern/system_events.hh
@@ -29,8 +29,6 @@
#ifndef __SYSTEM_EVENTS_HH__
#define __SYSTEM_EVENTS_HH__
-#include "cpu/pc_event.hh"
-
class System;
class SkipFuncEvent : public PCEvent