system.hh revision 1762
15389Sgblack@eecs.umich.edu/* 25446Sgblack@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan 35389Sgblack@eecs.umich.edu * All rights reserved. 45389Sgblack@eecs.umich.edu * 55389Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 65389Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 75389Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 85389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 95389Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 105389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 115389Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 125389Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 135389Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 145389Sgblack@eecs.umich.edu * this software without specific prior written permission. 155389Sgblack@eecs.umich.edu * 165389Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175389Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185389Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195389Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205389Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215389Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225389Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235389Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245389Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255389Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265389Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275389Sgblack@eecs.umich.edu */ 285389Sgblack@eecs.umich.edu 295389Sgblack@eecs.umich.edu#ifndef __SYSTEM_HH__ 305389Sgblack@eecs.umich.edu#define __SYSTEM_HH__ 315389Sgblack@eecs.umich.edu 325389Sgblack@eecs.umich.edu#include <string> 335389Sgblack@eecs.umich.edu#include <vector> 345389Sgblack@eecs.umich.edu 3511793Sbrandon.potter@amd.com#include "base/statistics.hh" 3611793Sbrandon.potter@amd.com#include "cpu/pc_event.hh" 375389Sgblack@eecs.umich.edu#include "kern/system_events.hh" 385389Sgblack@eecs.umich.edu#include "sim/sim_object.hh" 395389Sgblack@eecs.umich.edu 405389Sgblack@eecs.umich.educlass BaseCPU; 415654Sgblack@eecs.umich.educlass ExecContext; 425389Sgblack@eecs.umich.educlass GDBListener; 436658Snate@binkert.orgclass MemoryController; 445389Sgblack@eecs.umich.educlass ObjectFile; 4511793Sbrandon.potter@amd.comclass PhysicalMemory; 465643Sgblack@eecs.umich.educlass Platform; 475636Sgblack@eecs.umich.educlass RemoteGDB; 485830Sgblack@eecs.umich.educlass SymbolTable; 495637Sgblack@eecs.umich.edunamespace Kernel { class Binning; } 505389Sgblack@eecs.umich.edu 515389Sgblack@eecs.umich.educlass System : public SimObject 525389Sgblack@eecs.umich.edu{ 535389Sgblack@eecs.umich.edu public: 545389Sgblack@eecs.umich.edu MemoryController *memctrl; 555638Sgblack@eecs.umich.edu PhysicalMemory *physmem; 565389Sgblack@eecs.umich.edu Platform *platform; 575389Sgblack@eecs.umich.edu PCEventQueue pcEventQueue; 585446Sgblack@eecs.umich.edu uint64_t init_param; 595389Sgblack@eecs.umich.edu 605389Sgblack@eecs.umich.edu std::vector<ExecContext *> execContexts; 615446Sgblack@eecs.umich.edu 625638Sgblack@eecs.umich.edu /** kernel Symbol table */ 635446Sgblack@eecs.umich.edu SymbolTable *kernelSymtab; 645446Sgblack@eecs.umich.edu 655643Sgblack@eecs.umich.edu /** console symbol table */ 665643Sgblack@eecs.umich.edu SymbolTable *consoleSymtab; 675643Sgblack@eecs.umich.edu 685643Sgblack@eecs.umich.edu /** pal symbol table */ 695636Sgblack@eecs.umich.edu SymbolTable *palSymtab; 705446Sgblack@eecs.umich.edu 715446Sgblack@eecs.umich.edu /** Object pointer for the kernel code */ 725446Sgblack@eecs.umich.edu ObjectFile *kernel; 735446Sgblack@eecs.umich.edu 745446Sgblack@eecs.umich.edu /** Object pointer for the console code */ 755635Sgblack@eecs.umich.edu ObjectFile *console; 765635Sgblack@eecs.umich.edu 775643Sgblack@eecs.umich.edu /** Object pointer for the PAL code */ 785643Sgblack@eecs.umich.edu ObjectFile *pal; 795643Sgblack@eecs.umich.edu 805643Sgblack@eecs.umich.edu /** Begining of kernel code */ 815643Sgblack@eecs.umich.edu Addr kernelStart; 825643Sgblack@eecs.umich.edu 835654Sgblack@eecs.umich.edu /** End of kernel code */ 845643Sgblack@eecs.umich.edu Addr kernelEnd; 855643Sgblack@eecs.umich.edu 865643Sgblack@eecs.umich.edu /** Entry point in the kernel to start at */ 875829Sgblack@eecs.umich.edu Addr kernelEntry; 885829Sgblack@eecs.umich.edu 895829Sgblack@eecs.umich.edu Kernel::Binning *kernelBinning; 905829Sgblack@eecs.umich.edu 915829Sgblack@eecs.umich.edu#ifdef DEBUG 925829Sgblack@eecs.umich.edu /** Event to halt the simulator if the console calls panic() */ 935829Sgblack@eecs.umich.edu BreakPCEvent *consolePanicEvent; 945829Sgblack@eecs.umich.edu#endif 955829Sgblack@eecs.umich.edu 965829Sgblack@eecs.umich.edu public: 975829Sgblack@eecs.umich.edu std::vector<RemoteGDB *> remoteGDB; 985829Sgblack@eecs.umich.edu std::vector<GDBListener *> gdbListen; 995829Sgblack@eecs.umich.edu bool breakpoint(); 1005829Sgblack@eecs.umich.edu 1015829Sgblack@eecs.umich.edu public: 1025829Sgblack@eecs.umich.edu struct Params 1035829Sgblack@eecs.umich.edu { 1045843Sgblack@eecs.umich.edu std::string name; 1055843Sgblack@eecs.umich.edu Tick boot_cpu_frequency; 1065843Sgblack@eecs.umich.edu MemoryController *memctrl; 1075843Sgblack@eecs.umich.edu PhysicalMemory *physmem; 1085843Sgblack@eecs.umich.edu uint64_t init_param; 1095843Sgblack@eecs.umich.edu bool bin; 1106073Sgblack@eecs.umich.edu std::vector<std::string> binned_fns; 1116073Sgblack@eecs.umich.edu bool bin_int; 1126073Sgblack@eecs.umich.edu 1136073Sgblack@eecs.umich.edu std::string kernel_path; 1146073Sgblack@eecs.umich.edu std::string console_path; 1156073Sgblack@eecs.umich.edu std::string palcode; 1166073Sgblack@eecs.umich.edu std::string boot_osflags; 1175446Sgblack@eecs.umich.edu 1185446Sgblack@eecs.umich.edu std::string readfile; 1195389Sgblack@eecs.umich.edu uint64_t system_type; 1205638Sgblack@eecs.umich.edu uint64_t system_rev; 1215389Sgblack@eecs.umich.edu }; 1225830Sgblack@eecs.umich.edu Params *params; 1235830Sgblack@eecs.umich.edu 1245389Sgblack@eecs.umich.edu System(Params *p); 1255389Sgblack@eecs.umich.edu ~System(); 1265389Sgblack@eecs.umich.edu 1275638Sgblack@eecs.umich.edu void startup(); 1285389Sgblack@eecs.umich.edu 1295389Sgblack@eecs.umich.edu public: 1305389Sgblack@eecs.umich.edu /** 1315389Sgblack@eecs.umich.edu * Returns the addess the kernel starts at. 1325389Sgblack@eecs.umich.edu * @return address the kernel starts at 1335389Sgblack@eecs.umich.edu */ 1345638Sgblack@eecs.umich.edu Addr getKernelStart() const { return kernelStart; } 1355389Sgblack@eecs.umich.edu 1365842Sgblack@eecs.umich.edu /** 1375389Sgblack@eecs.umich.edu * Returns the addess the kernel ends at. 1385389Sgblack@eecs.umich.edu * @return address the kernel ends at 1395389Sgblack@eecs.umich.edu */ 1405638Sgblack@eecs.umich.edu Addr getKernelEnd() const { return kernelEnd; } 1415389Sgblack@eecs.umich.edu 1425842Sgblack@eecs.umich.edu /** 1435389Sgblack@eecs.umich.edu * Returns the addess the entry point to the kernel code. 1445389Sgblack@eecs.umich.edu * @return entry point of the kernel code 1455638Sgblack@eecs.umich.edu */ 1465638Sgblack@eecs.umich.edu Addr getKernelEntry() const { return kernelEntry; } 1475389Sgblack@eecs.umich.edu 1485638Sgblack@eecs.umich.edu int registerExecContext(ExecContext *xc); 1495389Sgblack@eecs.umich.edu void replaceExecContext(ExecContext *xc, int xcIndex); 150 151 void regStats(); 152 void serialize(std::ostream &os); 153 void unserialize(Checkpoint *cp, const std::string §ion); 154 155 public: 156 //////////////////////////////////////////// 157 // 158 // STATIC GLOBAL SYSTEM LIST 159 // 160 //////////////////////////////////////////// 161 162 static std::vector<System *> systemList; 163 static int numSystemsRunning; 164 165 static void printSystems(); 166}; 167 168#endif // __SYSTEM_HH__ 169