1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; 9 * 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 * neither the name of the copyright holders nor the names of its 13 * contributors may be used to endorse or promote products derived from 14 * this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * Authors: Ben Nash 29 */ 30 31/** 32 * @file 33 * Modifications for the FreeBSD kernel. 34 * Based on kern/linux/linux_system.cc. 35 * 36 */ 37
|
38#include "arch/alpha/system.hh"
|
38#include "arch/alpha/freebsd/system.hh"
|
39#include "arch/alpha/system.hh" 40#include "arch/isa_traits.hh" 41#include "arch/vtophys.hh" |
42#include "base/loader/symtab.hh" 43#include "cpu/thread_context.hh" 44#include "mem/physical.hh" 45#include "mem/port.hh"
|
44#include "arch/isa_traits.hh"
45#include "sim/builder.hh"
|
46#include "sim/byteswap.hh"
|
47#include "arch/vtophys.hh"
|
47 48#define TIMER_FREQUENCY 1193180 49 50using namespace std; 51using namespace AlphaISA; 52 53FreebsdAlphaSystem::FreebsdAlphaSystem(Params *p) 54 : AlphaSystem(p) 55{ 56 /** 57 * Any time DELAY is called just skip the function. 58 * Shouldn't we actually emulate the delay? 59 */ 60 skipDelayEvent = addKernelFuncEvent<SkipFuncEvent>("DELAY"); 61 skipCalibrateClocks = 62 addKernelFuncEvent<SkipCalibrateClocksEvent>("calibrate_clocks"); 63} 64 65 66FreebsdAlphaSystem::~FreebsdAlphaSystem() 67{ 68 delete skipDelayEvent; 69 delete skipCalibrateClocks; 70} 71 72 73void 74FreebsdAlphaSystem::doCalibrateClocks(ThreadContext *tc) 75{ 76 Addr ppc_vaddr = 0; 77 Addr timer_vaddr = 0; 78 79 ppc_vaddr = (Addr)tc->readIntReg(ArgumentReg1); 80 timer_vaddr = (Addr)tc->readIntReg(ArgumentReg2); 81 82 virtPort.write(ppc_vaddr, (uint32_t)Clock::Frequency); 83 virtPort.write(timer_vaddr, (uint32_t)TIMER_FREQUENCY); 84} 85 86 87void 88FreebsdAlphaSystem::SkipCalibrateClocksEvent::process(ThreadContext *tc) 89{ 90 SkipFuncEvent::process(tc); 91 ((FreebsdAlphaSystem *)tc->getSystemPtr())->doCalibrateClocks(tc); 92} 93
|
95
96BEGIN_DECLARE_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
97
98 Param<Tick> boot_cpu_frequency;
99 SimObjectParam<PhysicalMemory *> physmem;
100 SimpleEnumParam<System::MemoryMode> mem_mode;
101
102 Param<string> kernel;
103 Param<string> console;
104 Param<string> pal;
105
106 Param<string> boot_osflags;
107 Param<string> readfile;
108 Param<string> symbolfile;
109 Param<unsigned int> init_param;
110
111 Param<uint64_t> system_type;
112 Param<uint64_t> system_rev;
113
114END_DECLARE_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
115
116BEGIN_INIT_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
117
118 INIT_PARAM(boot_cpu_frequency, "Frequency of the boot CPU"),
119 INIT_PARAM(physmem, "phsyical memory"),
120 INIT_ENUM_PARAM(mem_mode, "Memory Mode, (1=atomic, 2=timing)",
121 System::MemoryModeStrings),
122 INIT_PARAM(kernel, "file that contains the kernel code"),
123 INIT_PARAM(console, "file that contains the console code"),
124 INIT_PARAM(pal, "file that contains palcode"),
125 INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot",
126 "a"),
127 INIT_PARAM_DFLT(readfile, "file to read startup script from", ""),
128 INIT_PARAM_DFLT(symbolfile, "file to read symbols from", ""),
129 INIT_PARAM_DFLT(init_param, "numerical value to pass into simulator", 0),
130 INIT_PARAM_DFLT(system_type, "Type of system we are emulating", 34),
131 INIT_PARAM_DFLT(system_rev, "Revision of system we are emulating", 1<<10)
132
133END_INIT_SIM_OBJECT_PARAMS(FreebsdAlphaSystem)
134
135CREATE_SIM_OBJECT(FreebsdAlphaSystem)
|
94FreebsdAlphaSystem * 95FreebsdAlphaSystemParams::create() |
96{
|
137 AlphaSystem::Params *p = new AlphaSystem::Params;
138 p->name = getInstanceName();
139 p->boot_cpu_frequency = boot_cpu_frequency;
140 p->physmem = physmem;
141 p->mem_mode = mem_mode;
142 p->kernel_path = kernel;
143 p->console_path = console;
144 p->palcode = pal;
145 p->boot_osflags = boot_osflags;
146 p->init_param = init_param;
147 p->readfile = readfile;
148 p->symbolfile = symbolfile;
149 p->system_type = system_type;
150 p->system_rev = system_rev;
151 return new FreebsdAlphaSystem(p);
|
97 return new FreebsdAlphaSystem(this); |
98}
|
153
154REGISTER_SIM_OBJECT("FreebsdAlphaSystem", FreebsdAlphaSystem)
155
|
|