system.hh revision 5991
13101Sstever@eecs.umich.edu/* 23101Sstever@eecs.umich.edu * Copyright (c) 2004-2006 The Regents of The University of Michigan 33101Sstever@eecs.umich.edu * All rights reserved. 43101Sstever@eecs.umich.edu * 53101Sstever@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 63101Sstever@eecs.umich.edu * modification, are permitted provided that the following conditions are 73101Sstever@eecs.umich.edu * met: redistributions of source code must retain the above copyright 83101Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 93101Sstever@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 103101Sstever@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 113101Sstever@eecs.umich.edu * documentation and/or other materials provided with the distribution; 123101Sstever@eecs.umich.edu * neither the name of the copyright holders nor the names of its 133101Sstever@eecs.umich.edu * contributors may be used to endorse or promote products derived from 143101Sstever@eecs.umich.edu * this software without specific prior written permission. 153101Sstever@eecs.umich.edu * 163101Sstever@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173101Sstever@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183101Sstever@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193101Sstever@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203101Sstever@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213101Sstever@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223101Sstever@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233101Sstever@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243101Sstever@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253101Sstever@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263101Sstever@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273101Sstever@eecs.umich.edu * 283101Sstever@eecs.umich.edu * Authors: Ali Saidi 293101Sstever@eecs.umich.edu * Lisa Hsu 303101Sstever@eecs.umich.edu * Nathan Binkert 313101Sstever@eecs.umich.edu */ 323101Sstever@eecs.umich.edu 333101Sstever@eecs.umich.edu#ifndef __ARCH_ALPHA_LINUX_SYSTEM_HH__ 343101Sstever@eecs.umich.edu#define __ARCH_ALPHA_LINUX_SYSTEM_HH__ 353101Sstever@eecs.umich.edu 363101Sstever@eecs.umich.educlass ThreadContext; 373101Sstever@eecs.umich.edu 383101Sstever@eecs.umich.educlass BreakPCEvent; 393101Sstever@eecs.umich.educlass IdleStartEvent; 403101Sstever@eecs.umich.edu 413101Sstever@eecs.umich.edu#include "arch/alpha/idle_event.hh" 423101Sstever@eecs.umich.edu#include "arch/alpha/system.hh" 433101Sstever@eecs.umich.edu#include "kern/linux/events.hh" 443101Sstever@eecs.umich.edu#include "params/LinuxAlphaSystem.hh" 453101Sstever@eecs.umich.edu 463101Sstever@eecs.umich.edu/** 473885Sbinkertn@umich.edu * This class contains linux specific system code (Loading, Events). 483885Sbinkertn@umich.edu * It points to objects that are the system binaries to load and patches them 493885Sbinkertn@umich.edu * appropriately to work in simulator. 503885Sbinkertn@umich.edu */ 513885Sbinkertn@umich.educlass LinuxAlphaSystem : public AlphaSystem 523885Sbinkertn@umich.edu{ 533101Sstever@eecs.umich.edu private: 544380Sbinkertn@umich.edu struct SkipDelayLoopEvent : public SkipFuncEvent 554167Sbinkertn@umich.edu { 563102Sstever@eecs.umich.edu SkipDelayLoopEvent(PCEventQueue *q, const std::string &desc, Addr addr) 573101Sstever@eecs.umich.edu : SkipFuncEvent(q, desc, addr) {} 583101Sstever@eecs.umich.edu virtual void process(ThreadContext *tc); 593101Sstever@eecs.umich.edu }; 603101Sstever@eecs.umich.edu 613101Sstever@eecs.umich.edu struct PrintThreadInfo : public PCEvent 623101Sstever@eecs.umich.edu { 633101Sstever@eecs.umich.edu PrintThreadInfo(PCEventQueue *q, const std::string &desc, Addr addr) 643101Sstever@eecs.umich.edu : PCEvent(q, desc, addr) {} 653101Sstever@eecs.umich.edu virtual void process(ThreadContext *tc); 663101Sstever@eecs.umich.edu }; 673101Sstever@eecs.umich.edu 683101Sstever@eecs.umich.edu /** 693101Sstever@eecs.umich.edu * Addresses defining where the kernel bootloader places various 703101Sstever@eecs.umich.edu * elements. Details found in include/asm-alpha/system.h 713101Sstever@eecs.umich.edu */ 723101Sstever@eecs.umich.edu Addr KernelStart; // Lookup the symbol swapper_pg_dir 733101Sstever@eecs.umich.edu 743101Sstever@eecs.umich.edu public: 753101Sstever@eecs.umich.edu Addr InitStack() const { return KernelStart + 0x02000; } 763101Sstever@eecs.umich.edu Addr EmptyPGT() const { return KernelStart + 0x04000; } 773101Sstever@eecs.umich.edu Addr EmptyPGE() const { return KernelStart + 0x08000; } 783101Sstever@eecs.umich.edu Addr ZeroPGE() const { return KernelStart + 0x0A000; } 793101Sstever@eecs.umich.edu Addr StartAddr() const { return KernelStart + 0x10000; } 803101Sstever@eecs.umich.edu 813101Sstever@eecs.umich.edu Addr Param() const { return ZeroPGE() + 0x0; } 823101Sstever@eecs.umich.edu Addr CommandLine() const { return Param() + 0x0; } 833101Sstever@eecs.umich.edu Addr InitrdStart() const { return Param() + 0x100; } 843101Sstever@eecs.umich.edu Addr InitrdSize() const { return Param() + 0x108; } 853101Sstever@eecs.umich.edu static const int CommandLineSize = 256; 863101Sstever@eecs.umich.edu 873101Sstever@eecs.umich.edu private: 883101Sstever@eecs.umich.edu#ifndef NDEBUG 893101Sstever@eecs.umich.edu /** Event to halt the simulator if the kernel calls panic() */ 903101Sstever@eecs.umich.edu BreakPCEvent *kernelPanicEvent; 913101Sstever@eecs.umich.edu 923101Sstever@eecs.umich.edu /** Event to halt the simulator if the kernel calls die_if_kernel */ 933101Sstever@eecs.umich.edu BreakPCEvent *kernelDieEvent; 943101Sstever@eecs.umich.edu#endif 953101Sstever@eecs.umich.edu 963101Sstever@eecs.umich.edu /** 973101Sstever@eecs.umich.edu * Event to skip determine_cpu_caches() because we don't support 983101Sstever@eecs.umich.edu * the IPRs that the code can access to figure out cache sizes 993101Sstever@eecs.umich.edu */ 1003101Sstever@eecs.umich.edu SkipFuncEvent *skipCacheProbeEvent; 1013101Sstever@eecs.umich.edu 1023101Sstever@eecs.umich.edu /** PC based event to skip the ide_delay_50ms() call */ 1033101Sstever@eecs.umich.edu SkipFuncEvent *skipIdeDelay50msEvent; 1043101Sstever@eecs.umich.edu 1053101Sstever@eecs.umich.edu /** 1063101Sstever@eecs.umich.edu * PC based event to skip the dprink() call and emulate its 1073101Sstever@eecs.umich.edu * functionality 1083101Sstever@eecs.umich.edu */ 1093101Sstever@eecs.umich.edu Linux::DebugPrintkEvent *debugPrintkEvent; 1103101Sstever@eecs.umich.edu 1113102Sstever@eecs.umich.edu /** 1123101Sstever@eecs.umich.edu * Skip calculate_delay_loop() rather than waiting for this to be 1133102Sstever@eecs.umich.edu * calculated 1143101Sstever@eecs.umich.edu */ 1153101Sstever@eecs.umich.edu SkipDelayLoopEvent *skipDelayLoopEvent; 1163101Sstever@eecs.umich.edu 1173102Sstever@eecs.umich.edu /** 1183102Sstever@eecs.umich.edu * Event to print information about thread switches if the trace flag 1193101Sstever@eecs.umich.edu * Thread is set 1203101Sstever@eecs.umich.edu */ 1213101Sstever@eecs.umich.edu PrintThreadInfo *printThreadEvent; 1223101Sstever@eecs.umich.edu 1233101Sstever@eecs.umich.edu /** Grab the PCBB of the idle process when it starts */ 1243101Sstever@eecs.umich.edu IdleStartEvent *idleStartEvent; 1253101Sstever@eecs.umich.edu 1263101Sstever@eecs.umich.edu public: 1273101Sstever@eecs.umich.edu typedef LinuxAlphaSystemParams Params; 1283101Sstever@eecs.umich.edu LinuxAlphaSystem(Params *p); 1293101Sstever@eecs.umich.edu ~LinuxAlphaSystem(); 1303101Sstever@eecs.umich.edu 1313101Sstever@eecs.umich.edu void setDelayLoop(ThreadContext *tc); 1323102Sstever@eecs.umich.edu}; 1333101Sstever@eecs.umich.edu 1343101Sstever@eecs.umich.edu#endif // __ARCH_ALPHA_LINUX_SYSTEM_HH__ 1353101Sstever@eecs.umich.edu