system.hh revision 1129
15086Sgblack@eecs.umich.edu/* 25086Sgblack@eecs.umich.edu * Copyright (c) 2002-2004 The Regents of The University of Michigan 38466Snilay@cs.wisc.edu * All rights reserved. 45086Sgblack@eecs.umich.edu * 55086Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 67087Snate@binkert.org * modification, are permitted provided that the following conditions are 77087Snate@binkert.org * met: redistributions of source code must retain the above copyright 87087Snate@binkert.org * notice, this list of conditions and the following disclaimer; 97087Snate@binkert.org * redistributions in binary form must reproduce the above copyright 107087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 117087Snate@binkert.org * documentation and/or other materials provided with the distribution; 127087Snate@binkert.org * neither the name of the copyright holders nor the names of its 137087Snate@binkert.org * contributors may be used to endorse or promote products derived from 145086Sgblack@eecs.umich.edu * this software without specific prior written permission. 157087Snate@binkert.org * 167087Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177087Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187087Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197087Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207087Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217087Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227087Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235086Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247087Snate@binkert.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255086Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265086Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275086Sgblack@eecs.umich.edu */ 285086Sgblack@eecs.umich.edu 295086Sgblack@eecs.umich.edu#ifndef __SYSTEM_HH__ 305086Sgblack@eecs.umich.edu#define __SYSTEM_HH__ 315086Sgblack@eecs.umich.edu 325086Sgblack@eecs.umich.edu#include <string> 335086Sgblack@eecs.umich.edu#include <vector> 345086Sgblack@eecs.umich.edu 355086Sgblack@eecs.umich.edu#include "base/loader/symtab.hh" 365086Sgblack@eecs.umich.edu#include "base/statistics.hh" 375086Sgblack@eecs.umich.edu#include "cpu/pc_event.hh" 385086Sgblack@eecs.umich.edu#include "kern/system_events.hh" 395086Sgblack@eecs.umich.edu#include "sim/sim_object.hh" 405086Sgblack@eecs.umich.edu 415647Sgblack@eecs.umich.educlass MemoryController; 428466Snilay@cs.wisc.educlass PhysicalMemory; 438466Snilay@cs.wisc.educlass Platform; 445086Sgblack@eecs.umich.educlass RemoteGDB; 455135Sgblack@eecs.umich.educlass GDBListener; 465647Sgblack@eecs.umich.educlass ObjectFile; 479889Sandreas@sandberg.pp.seclass ExecContext; 485234Sgblack@eecs.umich.edunamespace Kernel { class Binning; } 495086Sgblack@eecs.umich.edu 505086Sgblack@eecs.umich.educlass System : public SimObject 515086Sgblack@eecs.umich.edu{ 527707Sgblack@eecs.umich.edu public: 537707Sgblack@eecs.umich.edu MemoryController *memctrl; 547707Sgblack@eecs.umich.edu PhysicalMemory *physmem; 559887Sandreas@sandberg.pp.se Platform *platform; 569887Sandreas@sandberg.pp.se PCEventQueue pcEventQueue; 579887Sandreas@sandberg.pp.se uint64_t init_param; 589887Sandreas@sandberg.pp.se 599887Sandreas@sandberg.pp.se std::vector<ExecContext *> execContexts; 609887Sandreas@sandberg.pp.se 619887Sandreas@sandberg.pp.se /** kernel Symbol table */ 629887Sandreas@sandberg.pp.se SymbolTable *kernelSymtab; 639887Sandreas@sandberg.pp.se 649887Sandreas@sandberg.pp.se /** console symbol table */ 659887Sandreas@sandberg.pp.se SymbolTable *consoleSymtab; 669887Sandreas@sandberg.pp.se 679887Sandreas@sandberg.pp.se /** pal symbol table */ 689887Sandreas@sandberg.pp.se SymbolTable *palSymtab; 699887Sandreas@sandberg.pp.se 709887Sandreas@sandberg.pp.se /** Object pointer for the kernel code */ 719887Sandreas@sandberg.pp.se ObjectFile *kernel; 729887Sandreas@sandberg.pp.se 739887Sandreas@sandberg.pp.se /** Object pointer for the console code */ 745086Sgblack@eecs.umich.edu ObjectFile *console; 755135Sgblack@eecs.umich.edu 765135Sgblack@eecs.umich.edu /** Object pointer for the PAL code */ 775135Sgblack@eecs.umich.edu ObjectFile *pal; 786048Sgblack@eecs.umich.edu 796048Sgblack@eecs.umich.edu /** Begining of kernel code */ 806048Sgblack@eecs.umich.edu Addr kernelStart; 816048Sgblack@eecs.umich.edu 826048Sgblack@eecs.umich.edu /** End of kernel code */ 836048Sgblack@eecs.umich.edu Addr kernelEnd; 847720Sgblack@eecs.umich.edu 857720Sgblack@eecs.umich.edu /** Entry point in the kernel to start at */ 867720Sgblack@eecs.umich.edu Addr kernelEntry; 877720Sgblack@eecs.umich.edu 885135Sgblack@eecs.umich.edu Kernel::Binning *kernelBinning; 895135Sgblack@eecs.umich.edu 905135Sgblack@eecs.umich.edu#ifdef DEBUG 915135Sgblack@eecs.umich.edu /** Event to halt the simulator if the console calls panic() */ 925135Sgblack@eecs.umich.edu BreakPCEvent *consolePanicEvent; 935135Sgblack@eecs.umich.edu#endif 945135Sgblack@eecs.umich.edu 955135Sgblack@eecs.umich.edu public: 965135Sgblack@eecs.umich.edu std::vector<RemoteGDB *> remoteGDB; 975135Sgblack@eecs.umich.edu std::vector<GDBListener *> gdbListen; 985135Sgblack@eecs.umich.edu bool breakpoint(); 995135Sgblack@eecs.umich.edu 1005135Sgblack@eecs.umich.edu public: 1015135Sgblack@eecs.umich.edu struct Params 1025135Sgblack@eecs.umich.edu { 1035135Sgblack@eecs.umich.edu std::string name; 1045135Sgblack@eecs.umich.edu MemoryController *memctrl; 1055264Sgblack@eecs.umich.edu PhysicalMemory *physmem; 1065135Sgblack@eecs.umich.edu uint64_t init_param; 1075135Sgblack@eecs.umich.edu bool bin; 1085135Sgblack@eecs.umich.edu std::vector<std::string> binned_fns; 1095135Sgblack@eecs.umich.edu bool bin_int; 1105141Sgblack@eecs.umich.edu 1115141Sgblack@eecs.umich.edu std::string kernel_path; 1125141Sgblack@eecs.umich.edu std::string console_path; 1135141Sgblack@eecs.umich.edu std::string palcode; 1145141Sgblack@eecs.umich.edu std::string boot_osflags; 1155141Sgblack@eecs.umich.edu 1165141Sgblack@eecs.umich.edu std::string readfile; 1175141Sgblack@eecs.umich.edu uint64_t system_type; 1185141Sgblack@eecs.umich.edu uint64_t system_rev; 1195182Sgblack@eecs.umich.edu }; 1205141Sgblack@eecs.umich.edu Params *params; 1215141Sgblack@eecs.umich.edu 1225141Sgblack@eecs.umich.edu System(Params *p); 1235141Sgblack@eecs.umich.edu ~System(); 1245141Sgblack@eecs.umich.edu 1255141Sgblack@eecs.umich.edu void startup(); 1265135Sgblack@eecs.umich.edu 1275141Sgblack@eecs.umich.edu public: 1285141Sgblack@eecs.umich.edu /** 1295141Sgblack@eecs.umich.edu * Returns the addess the kernel starts at. 1305141Sgblack@eecs.umich.edu * @return address the kernel starts at 1315141Sgblack@eecs.umich.edu */ 1325141Sgblack@eecs.umich.edu Addr getKernelStart() const { return kernelStart; } 1335141Sgblack@eecs.umich.edu 1345141Sgblack@eecs.umich.edu /** 1355141Sgblack@eecs.umich.edu * Returns the addess the kernel ends at. 1365141Sgblack@eecs.umich.edu * @return address the kernel ends at 1375141Sgblack@eecs.umich.edu */ 1385141Sgblack@eecs.umich.edu Addr getKernelEnd() const { return kernelEnd; } 1395135Sgblack@eecs.umich.edu 1405141Sgblack@eecs.umich.edu /** 1415141Sgblack@eecs.umich.edu * Returns the addess the entry point to the kernel code. 1425135Sgblack@eecs.umich.edu * @return entry point of the kernel code 1435141Sgblack@eecs.umich.edu */ 1445141Sgblack@eecs.umich.edu Addr getKernelEntry() const { return kernelEntry; } 1455141Sgblack@eecs.umich.edu 1465141Sgblack@eecs.umich.edu int registerExecContext(ExecContext *xc); 1475135Sgblack@eecs.umich.edu void replaceExecContext(ExecContext *xc, int xcIndex); 1485141Sgblack@eecs.umich.edu 1495141Sgblack@eecs.umich.edu void regStats(); 1505141Sgblack@eecs.umich.edu void serialize(std::ostream &os); 1515141Sgblack@eecs.umich.edu void unserialize(Checkpoint *cp, const std::string §ion); 1525141Sgblack@eecs.umich.edu 1535141Sgblack@eecs.umich.edu public: 1545141Sgblack@eecs.umich.edu //////////////////////////////////////////// 1555141Sgblack@eecs.umich.edu // 1565141Sgblack@eecs.umich.edu // STATIC GLOBAL SYSTEM LIST 1575141Sgblack@eecs.umich.edu // 1585141Sgblack@eecs.umich.edu //////////////////////////////////////////// 1595141Sgblack@eecs.umich.edu 1605264Sgblack@eecs.umich.edu static std::vector<System *> systemList; 1615141Sgblack@eecs.umich.edu static int numSystemsRunning; 1625141Sgblack@eecs.umich.edu 1635141Sgblack@eecs.umich.edu static void printSystems(); 1645141Sgblack@eecs.umich.edu}; 1655141Sgblack@eecs.umich.edu 1665141Sgblack@eecs.umich.edu#endif // __SYSTEM_HH__ 1675141Sgblack@eecs.umich.edu