system.hh revision 1070
12810Srdreslin@umich.edu/* 211051Sandreas.hansson@arm.com * Copyright (c) 2002-2004 The Regents of The University of Michigan 311051Sandreas.hansson@arm.com * All rights reserved. 411051Sandreas.hansson@arm.com * 511051Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 611051Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 711051Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 811051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 911051Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1011051Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1111051Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 1211051Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 1311051Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1411051Sandreas.hansson@arm.com * this software without specific prior written permission. 1511051Sandreas.hansson@arm.com * 162810Srdreslin@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172810Srdreslin@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182810Srdreslin@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192810Srdreslin@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202810Srdreslin@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212810Srdreslin@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222810Srdreslin@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232810Srdreslin@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242810Srdreslin@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252810Srdreslin@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262810Srdreslin@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272810Srdreslin@umich.edu */ 282810Srdreslin@umich.edu 292810Srdreslin@umich.edu#ifndef __SYSTEM_HH__ 302810Srdreslin@umich.edu#define __SYSTEM_HH__ 312810Srdreslin@umich.edu 322810Srdreslin@umich.edu#include <string> 332810Srdreslin@umich.edu#include <vector> 342810Srdreslin@umich.edu 352810Srdreslin@umich.edu#include "base/loader/symtab.hh" 362810Srdreslin@umich.edu#include "base/statistics.hh" 372810Srdreslin@umich.edu#include "cpu/pc_event.hh" 382810Srdreslin@umich.edu#include "kern/system_events.hh" 392810Srdreslin@umich.edu#include "sim/sim_object.hh" 402810Srdreslin@umich.edu 412810Srdreslin@umich.educlass MemoryController; 4211051Sandreas.hansson@arm.comclass PhysicalMemory; 4311051Sandreas.hansson@arm.comclass Platform; 442810Srdreslin@umich.educlass RemoteGDB; 4511051Sandreas.hansson@arm.comclass GDBListener; 4611051Sandreas.hansson@arm.comclass ObjectFile; 472810Srdreslin@umich.educlass ExecContext; 482810Srdreslin@umich.edunamespace Kernel { class Binning; } 492810Srdreslin@umich.edu 502810Srdreslin@umich.educlass System : public SimObject 5111051Sandreas.hansson@arm.com{ 522810Srdreslin@umich.edu public: 532810Srdreslin@umich.edu MemoryController *memctrl; 5411051Sandreas.hansson@arm.com PhysicalMemory *physmem; 552810Srdreslin@umich.edu Platform *platform; 5611051Sandreas.hansson@arm.com PCEventQueue pcEventQueue; 5711051Sandreas.hansson@arm.com uint64_t init_param; 5811051Sandreas.hansson@arm.com 5911051Sandreas.hansson@arm.com std::vector<ExecContext *> execContexts; 6011051Sandreas.hansson@arm.com 6111051Sandreas.hansson@arm.com /** kernel Symbol table */ 6211051Sandreas.hansson@arm.com SymbolTable *kernelSymtab; 6311051Sandreas.hansson@arm.com 6411051Sandreas.hansson@arm.com /** console symbol table */ 6511051Sandreas.hansson@arm.com SymbolTable *consoleSymtab; 6611053Sandreas.hansson@arm.com 6711053Sandreas.hansson@arm.com /** Object pointer for the kernel code */ 6811051Sandreas.hansson@arm.com ObjectFile *kernel; 6911051Sandreas.hansson@arm.com 7011051Sandreas.hansson@arm.com /** Object pointer for the console code */ 7111197Sandreas.hansson@arm.com ObjectFile *console; 7211197Sandreas.hansson@arm.com 7311199Sandreas.hansson@arm.com /** Object pointer for the PAL code */ 7411197Sandreas.hansson@arm.com ObjectFile *pal; 7511197Sandreas.hansson@arm.com 7611197Sandreas.hansson@arm.com /** Begining of kernel code */ 7711051Sandreas.hansson@arm.com Addr kernelStart; 7811051Sandreas.hansson@arm.com 7911051Sandreas.hansson@arm.com /** End of kernel code */ 8011051Sandreas.hansson@arm.com Addr kernelEnd; 8111051Sandreas.hansson@arm.com 8211051Sandreas.hansson@arm.com /** Entry point in the kernel to start at */ 8311051Sandreas.hansson@arm.com Addr kernelEntry; 8411051Sandreas.hansson@arm.com 8511051Sandreas.hansson@arm.com Kernel::Binning *kernelBinning; 8611051Sandreas.hansson@arm.com 8711051Sandreas.hansson@arm.com#ifdef DEBUG 8811051Sandreas.hansson@arm.com /** Event to halt the simulator if the console calls panic() */ 8911051Sandreas.hansson@arm.com BreakPCEvent *consolePanicEvent; 9011051Sandreas.hansson@arm.com#endif 9111051Sandreas.hansson@arm.com 9211051Sandreas.hansson@arm.com public: 9311051Sandreas.hansson@arm.com std::vector<RemoteGDB *> remoteGDB; 9411051Sandreas.hansson@arm.com std::vector<GDBListener *> gdbListen; 9511051Sandreas.hansson@arm.com bool breakpoint(); 9611051Sandreas.hansson@arm.com 9711051Sandreas.hansson@arm.com public: 9811051Sandreas.hansson@arm.com struct Params 9911051Sandreas.hansson@arm.com { 10011051Sandreas.hansson@arm.com std::string name; 10111051Sandreas.hansson@arm.com MemoryController *memctrl; 10211051Sandreas.hansson@arm.com PhysicalMemory *physmem; 10311051Sandreas.hansson@arm.com uint64_t init_param; 10411051Sandreas.hansson@arm.com bool bin; 10511051Sandreas.hansson@arm.com std::vector<std::string> binned_fns; 10611051Sandreas.hansson@arm.com 10711051Sandreas.hansson@arm.com std::string kernel_path; 10811051Sandreas.hansson@arm.com std::string console_path; 10911051Sandreas.hansson@arm.com std::string palcode; 11011051Sandreas.hansson@arm.com std::string boot_osflags; 11111051Sandreas.hansson@arm.com 11211051Sandreas.hansson@arm.com std::string readfile; 11311051Sandreas.hansson@arm.com uint64_t system_type; 11411051Sandreas.hansson@arm.com uint64_t system_rev; 11511051Sandreas.hansson@arm.com }; 11611051Sandreas.hansson@arm.com Params *params; 11711051Sandreas.hansson@arm.com 11811051Sandreas.hansson@arm.com System(Params *p); 11911051Sandreas.hansson@arm.com ~System(); 12011051Sandreas.hansson@arm.com 12111051Sandreas.hansson@arm.com public: 12211051Sandreas.hansson@arm.com /** 12311051Sandreas.hansson@arm.com * Returns the addess the kernel starts at. 12411051Sandreas.hansson@arm.com * @return address the kernel starts at 12511051Sandreas.hansson@arm.com */ 12611051Sandreas.hansson@arm.com Addr getKernelStart() const { return kernelStart; } 12711051Sandreas.hansson@arm.com 12811051Sandreas.hansson@arm.com /** 12911051Sandreas.hansson@arm.com * Returns the addess the kernel ends at. 13011051Sandreas.hansson@arm.com * @return address the kernel ends at 13111051Sandreas.hansson@arm.com */ 13211051Sandreas.hansson@arm.com Addr getKernelEnd() const { return kernelEnd; } 13311051Sandreas.hansson@arm.com 13411051Sandreas.hansson@arm.com /** 13511051Sandreas.hansson@arm.com * Returns the addess the entry point to the kernel code. 13611051Sandreas.hansson@arm.com * @return entry point of the kernel code 13711051Sandreas.hansson@arm.com */ 13811051Sandreas.hansson@arm.com Addr getKernelEntry() const { return kernelEntry; } 13911051Sandreas.hansson@arm.com 14011051Sandreas.hansson@arm.com int registerExecContext(ExecContext *xc); 14111051Sandreas.hansson@arm.com void replaceExecContext(ExecContext *xc, int xcIndex); 14211051Sandreas.hansson@arm.com 14311051Sandreas.hansson@arm.com void regStats(); 14411051Sandreas.hansson@arm.com void serialize(std::ostream &os); 14511051Sandreas.hansson@arm.com void unserialize(Checkpoint *cp, const std::string §ion); 14611051Sandreas.hansson@arm.com 14711051Sandreas.hansson@arm.com public: 14811051Sandreas.hansson@arm.com //////////////////////////////////////////// 14911051Sandreas.hansson@arm.com // 15011051Sandreas.hansson@arm.com // STATIC GLOBAL SYSTEM LIST 15111051Sandreas.hansson@arm.com // 15211051Sandreas.hansson@arm.com //////////////////////////////////////////// 15311051Sandreas.hansson@arm.com 15411051Sandreas.hansson@arm.com static std::vector<System *> systemList; 15511051Sandreas.hansson@arm.com static int numSystemsRunning; 15611051Sandreas.hansson@arm.com 15711051Sandreas.hansson@arm.com static void printSystems(); 15811051Sandreas.hansson@arm.com}; 15911051Sandreas.hansson@arm.com 16011284Sandreas.hansson@arm.com#endif // __SYSTEM_HH__ 16111051Sandreas.hansson@arm.com