system.hh revision 5569
110458Sandreas.hansson@arm.com/* 210458Sandreas.hansson@arm.com * Copyright (c) 2004-2006 The Regents of The University of Michigan 310458Sandreas.hansson@arm.com * All rights reserved. 410458Sandreas.hansson@arm.com * 510458Sandreas.hansson@arm.com * Redistribution and use in source and binary forms, with or without 610458Sandreas.hansson@arm.com * modification, are permitted provided that the following conditions are 710458Sandreas.hansson@arm.com * met: redistributions of source code must retain the above copyright 810458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer; 910458Sandreas.hansson@arm.com * redistributions in binary form must reproduce the above copyright 1010458Sandreas.hansson@arm.com * notice, this list of conditions and the following disclaimer in the 1110458Sandreas.hansson@arm.com * documentation and/or other materials provided with the distribution; 1210458Sandreas.hansson@arm.com * neither the name of the copyright holders nor the names of its 1310458Sandreas.hansson@arm.com * contributors may be used to endorse or promote products derived from 1410458Sandreas.hansson@arm.com * this software without specific prior written permission. 1510458Sandreas.hansson@arm.com * 1610458Sandreas.hansson@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1710458Sandreas.hansson@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1810458Sandreas.hansson@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1910458Sandreas.hansson@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2010458Sandreas.hansson@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2110458Sandreas.hansson@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2210458Sandreas.hansson@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2310458Sandreas.hansson@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2410458Sandreas.hansson@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2510458Sandreas.hansson@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2610458Sandreas.hansson@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2710458Sandreas.hansson@arm.com * 2810458Sandreas.hansson@arm.com * Authors: Ali Saidi 2910458Sandreas.hansson@arm.com * Lisa Hsu 3010458Sandreas.hansson@arm.com * Nathan Binkert 3110458Sandreas.hansson@arm.com */ 3210458Sandreas.hansson@arm.com 3310458Sandreas.hansson@arm.com#ifndef __ARCH_ALPHA_LINUX_SYSTEM_HH__ 3410458Sandreas.hansson@arm.com#define __ARCH_ALPHA_LINUX_SYSTEM_HH__ 3510458Sandreas.hansson@arm.com 3610458Sandreas.hansson@arm.comclass ThreadContext; 3710458Sandreas.hansson@arm.com 3810458Sandreas.hansson@arm.comclass BreakPCEvent; 3910458Sandreas.hansson@arm.comclass IdleStartEvent; 4010458Sandreas.hansson@arm.com 4110458Sandreas.hansson@arm.com#include "arch/alpha/idle_event.hh" 4210458Sandreas.hansson@arm.com#include "arch/alpha/system.hh" 4310458Sandreas.hansson@arm.com#include "kern/linux/events.hh" 4410458Sandreas.hansson@arm.com#include "params/LinuxAlphaSystem.hh" 4510458Sandreas.hansson@arm.com 4610458Sandreas.hansson@arm.comusing namespace AlphaISA; 4710458Sandreas.hansson@arm.comusing namespace Linux; 4810458Sandreas.hansson@arm.com 4910458Sandreas.hansson@arm.com/** 5010458Sandreas.hansson@arm.com * This class contains linux specific system code (Loading, Events). 5110458Sandreas.hansson@arm.com * It points to objects that are the system binaries to load and patches them 5210458Sandreas.hansson@arm.com * appropriately to work in simulator. 5310458Sandreas.hansson@arm.com */ 5410458Sandreas.hansson@arm.comclass LinuxAlphaSystem : public AlphaSystem 5510458Sandreas.hansson@arm.com{ 5610458Sandreas.hansson@arm.com private: 5710458Sandreas.hansson@arm.com struct SkipDelayLoopEvent : public SkipFuncEvent 5810458Sandreas.hansson@arm.com { 5910458Sandreas.hansson@arm.com SkipDelayLoopEvent(PCEventQueue *q, const std::string &desc, Addr addr) 6010458Sandreas.hansson@arm.com : SkipFuncEvent(q, desc, addr) {} 6110458Sandreas.hansson@arm.com virtual void process(ThreadContext *tc); 6210458Sandreas.hansson@arm.com }; 6310458Sandreas.hansson@arm.com 6410458Sandreas.hansson@arm.com struct PrintThreadInfo : public PCEvent 6510458Sandreas.hansson@arm.com { 6610458Sandreas.hansson@arm.com PrintThreadInfo(PCEventQueue *q, const std::string &desc, Addr addr) 6710458Sandreas.hansson@arm.com : PCEvent(q, desc, addr) {} 6810458Sandreas.hansson@arm.com virtual void process(ThreadContext *tc); 6910458Sandreas.hansson@arm.com }; 7010458Sandreas.hansson@arm.com 7110458Sandreas.hansson@arm.com /** 7210458Sandreas.hansson@arm.com * Addresses defining where the kernel bootloader places various 7310458Sandreas.hansson@arm.com * elements. Details found in include/asm-alpha/system.h 7410458Sandreas.hansson@arm.com */ 7510458Sandreas.hansson@arm.com Addr KernelStart; // Lookup the symbol swapper_pg_dir 7610458Sandreas.hansson@arm.com 7710458Sandreas.hansson@arm.com public: 7810458Sandreas.hansson@arm.com Addr InitStack() const { return KernelStart + 0x02000; } 7910458Sandreas.hansson@arm.com Addr EmptyPGT() const { return KernelStart + 0x04000; } 8010458Sandreas.hansson@arm.com Addr EmptyPGE() const { return KernelStart + 0x08000; } 8110458Sandreas.hansson@arm.com Addr ZeroPGE() const { return KernelStart + 0x0A000; } 8210458Sandreas.hansson@arm.com Addr StartAddr() const { return KernelStart + 0x10000; } 8310458Sandreas.hansson@arm.com 8410458Sandreas.hansson@arm.com Addr Param() const { return ZeroPGE() + 0x0; } 8510458Sandreas.hansson@arm.com Addr CommandLine() const { return Param() + 0x0; } 8610458Sandreas.hansson@arm.com Addr InitrdStart() const { return Param() + 0x100; } 8710458Sandreas.hansson@arm.com Addr InitrdSize() const { return Param() + 0x108; } 8810458Sandreas.hansson@arm.com static const int CommandLineSize = 256; 8910458Sandreas.hansson@arm.com 9010458Sandreas.hansson@arm.com private: 9110458Sandreas.hansson@arm.com#ifndef NDEBUG 9210458Sandreas.hansson@arm.com /** Event to halt the simulator if the kernel calls panic() */ 9310458Sandreas.hansson@arm.com BreakPCEvent *kernelPanicEvent; 9410458Sandreas.hansson@arm.com 9510458Sandreas.hansson@arm.com /** Event to halt the simulator if the kernel calls die_if_kernel */ 9610458Sandreas.hansson@arm.com BreakPCEvent *kernelDieEvent; 9710458Sandreas.hansson@arm.com#endif 9810458Sandreas.hansson@arm.com 9910458Sandreas.hansson@arm.com /** 10010458Sandreas.hansson@arm.com * Event to skip determine_cpu_caches() because we don't support 10110458Sandreas.hansson@arm.com * the IPRs that the code can access to figure out cache sizes 10210458Sandreas.hansson@arm.com */ 10310458Sandreas.hansson@arm.com SkipFuncEvent *skipCacheProbeEvent; 10410458Sandreas.hansson@arm.com 10510458Sandreas.hansson@arm.com /** PC based event to skip the ide_delay_50ms() call */ 10610458Sandreas.hansson@arm.com SkipFuncEvent *skipIdeDelay50msEvent; 10710458Sandreas.hansson@arm.com 10810458Sandreas.hansson@arm.com /** 10910458Sandreas.hansson@arm.com * PC based event to skip the dprink() call and emulate its 11010458Sandreas.hansson@arm.com * functionality 11110458Sandreas.hansson@arm.com */ 11210458Sandreas.hansson@arm.com DebugPrintkEvent *debugPrintkEvent; 11310458Sandreas.hansson@arm.com 11410458Sandreas.hansson@arm.com /** 11510458Sandreas.hansson@arm.com * Skip calculate_delay_loop() rather than waiting for this to be 116 * calculated 117 */ 118 SkipDelayLoopEvent *skipDelayLoopEvent; 119 120 /** 121 * Event to print information about thread switches if the trace flag 122 * Thread is set 123 */ 124 PrintThreadInfo *printThreadEvent; 125 126 /** Grab the PCBB of the idle process when it starts */ 127 IdleStartEvent *idleStartEvent; 128 129 public: 130 typedef LinuxAlphaSystemParams Params; 131 LinuxAlphaSystem(Params *p); 132 ~LinuxAlphaSystem(); 133 134 void setDelayLoop(ThreadContext *tc); 135}; 136 137#endif // __ARCH_ALPHA_LINUX_SYSTEM_HH__ 138