1/* |
2 * Copyright (c) 2002-2005 The Regents of The University of Michigan 3 * Copyright (c) 2011 Regents of the University of California 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer; --- 29 unchanged lines hidden (view full) --- 39#include <vector> 40 41#include "base/loader/symtab.hh" 42#include "base/misc.hh" 43#include "base/statistics.hh" 44#include "config/full_system.hh" 45#include "cpu/pc_event.hh" 46#include "enums/MemoryMode.hh" |
47#include "mem/port.hh" 48#include "params/System.hh" |
49#include "sim/sim_object.hh" |
50 51#if FULL_SYSTEM 52#include "kern/system_events.hh" 53#endif 54 55class BaseCPU; 56class ThreadContext; 57class ObjectFile; 58class PhysicalMemory; 59 60#if FULL_SYSTEM 61class Platform; |
62class FunctionalPort; 63class VirtualPort; |
64#endif 65class GDBListener; 66class BaseRemoteGDB; 67 |
68class System : public SimObject |
69{ |
70 public: 71 |
72 static const char *MemoryModeStrings[3]; 73 74 Enums::MemoryMode 75 getMemoryMode() 76 { 77 assert(memoryMode); 78 return memoryMode; 79 } --- 29 unchanged lines hidden (view full) --- 109 AddrRangeList memRanges; 110 111 /** check if an address points to valid system memory 112 * and thus we can fetch instructions out of it 113 */ 114 bool isMemory(const Addr addr) const; 115 116#if FULL_SYSTEM |
117 uint64_t init_param; 118 119 /** Port to physical memory used for writing object files into ram at 120 * boot.*/ |
121 FunctionalPort *functionalPort; 122 VirtualPort *virtPort; |
123 124 /** kernel symbol table */ 125 SymbolTable *kernelSymtab; 126 127 /** Object pointer for the kernel code */ 128 ObjectFile *kernel; 129 130 /** Begining of kernel code */ --- 34 unchanged lines hidden (view full) --- 165 166 167#endif // FULL_SYSTEM 168 169 protected: 170 Enums::MemoryMode memoryMode; 171 uint64_t workItemsBegin; 172 uint64_t workItemsEnd; |
173 std::vector<bool> activeCpus; 174 175 public: |
176 /** 177 * Called by pseudo_inst to track the number of work items started by this 178 * system. 179 */ |
180 uint64_t |
181 incWorkItemsBegin() 182 { 183 return ++workItemsBegin; 184 } 185 186 /** 187 * Called by pseudo_inst to track the number of work items completed by 188 * this system. --- 17 unchanged lines hidden (view full) --- 206 activeCpus[index] = true; 207 for (std::vector<bool>::iterator i = activeCpus.begin(); 208 i < activeCpus.end(); i++) { 209 if (*i) count++; 210 } 211 return count; 212 } 213 |
214#if FULL_SYSTEM 215 /** 216 * Fix up an address used to match PCs for hooking simulator 217 * events on to target function executions. See comment in 218 * system.cc for details. 219 */ 220 virtual Addr fixFuncEventAddr(Addr addr) = 0; 221 --- 59 unchanged lines hidden (view full) --- 281 /** 282 * Returns the addess the entry point to the kernel code. 283 * @return entry point of the kernel code 284 */ 285 Addr getKernelEntry() const { return kernelEntry; } 286 287#else 288 |
289 Addr new_page(); |
290 291#endif // FULL_SYSTEM 292 293 int registerThreadContext(ThreadContext *tc, int assigned=-1); 294 void replaceThreadContext(ThreadContext *tc, int context_id); 295 296 void serialize(std::ostream &os); 297 void unserialize(Checkpoint *cp, const std::string §ion); 298 virtual void resume(); 299 300 public: 301 Counter totalNumInsts; 302 EventQueue instEventQueue; |
303 304 //////////////////////////////////////////// 305 // 306 // STATIC GLOBAL SYSTEM LIST 307 // 308 //////////////////////////////////////////// 309 310 static std::vector<System *> systemList; 311 static int numSystemsRunning; 312 313 static void printSystems(); 314 315 316}; 317 318#endif // __SYSTEM_HH__ |