system.hh revision 8706
111784Sarthur.perais@inria.fr/*
211784Sarthur.perais@inria.fr * Copyright (c) 2002-2005 The Regents of The University of Michigan
311784Sarthur.perais@inria.fr * All rights reserved.
411784Sarthur.perais@inria.fr *
511784Sarthur.perais@inria.fr * Redistribution and use in source and binary forms, with or without
611784Sarthur.perais@inria.fr * modification, are permitted provided that the following conditions are
711784Sarthur.perais@inria.fr * met: redistributions of source code must retain the above copyright
811784Sarthur.perais@inria.fr * notice, this list of conditions and the following disclaimer;
911784Sarthur.perais@inria.fr * redistributions in binary form must reproduce the above copyright
1011784Sarthur.perais@inria.fr * notice, this list of conditions and the following disclaimer in the
1111784Sarthur.perais@inria.fr * documentation and/or other materials provided with the distribution;
1211784Sarthur.perais@inria.fr * neither the name of the copyright holders nor the names of its
1311784Sarthur.perais@inria.fr * contributors may be used to endorse or promote products derived from
1411784Sarthur.perais@inria.fr * this software without specific prior written permission.
1511784Sarthur.perais@inria.fr *
1611784Sarthur.perais@inria.fr * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1711784Sarthur.perais@inria.fr * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1811784Sarthur.perais@inria.fr * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1911784Sarthur.perais@inria.fr * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2011784Sarthur.perais@inria.fr * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2111784Sarthur.perais@inria.fr * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2211784Sarthur.perais@inria.fr * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2311784Sarthur.perais@inria.fr * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2411784Sarthur.perais@inria.fr * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2511784Sarthur.perais@inria.fr * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2611784Sarthur.perais@inria.fr * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2711784Sarthur.perais@inria.fr *
2811784Sarthur.perais@inria.fr * Authors: Ali Saidi
2911784Sarthur.perais@inria.fr *          Nathan Binkert
3011784Sarthur.perais@inria.fr */
3111784Sarthur.perais@inria.fr
3211784Sarthur.perais@inria.fr#ifndef __ARCH_ALPHA_SYSTEM_HH__
3311784Sarthur.perais@inria.fr#define __ARCH_ALPHA_SYSTEM_HH__
3411784Sarthur.perais@inria.fr
3511784Sarthur.perais@inria.fr#include <string>
3611784Sarthur.perais@inria.fr#include <vector>
3711784Sarthur.perais@inria.fr
3811784Sarthur.perais@inria.fr#include "base/loader/symtab.hh"
3911784Sarthur.perais@inria.fr#include "cpu/pc_event.hh"
4011784Sarthur.perais@inria.fr#include "kern/system_events.hh"
4111784Sarthur.perais@inria.fr#include "params/AlphaSystem.hh"
4211784Sarthur.perais@inria.fr#include "sim/sim_object.hh"
4311784Sarthur.perais@inria.fr#include "sim/system.hh"
4412334Sgabeblack@google.com
4511784Sarthur.perais@inria.frclass AlphaSystem : public System
4611784Sarthur.perais@inria.fr{
4711784Sarthur.perais@inria.fr  public:
4811784Sarthur.perais@inria.fr    typedef AlphaSystemParams Params;
4911784Sarthur.perais@inria.fr    AlphaSystem(Params *p);
5011784Sarthur.perais@inria.fr    ~AlphaSystem();
5111784Sarthur.perais@inria.fr
5213420Spau.cabre@metempsy.com  public:
5311784Sarthur.perais@inria.fr
5411784Sarthur.perais@inria.fr    /**
5511784Sarthur.perais@inria.fr     * Initialise the state of the system.
5613443Spau.cabre@metempsy.com     */
5711784Sarthur.perais@inria.fr    virtual void initState();
5811784Sarthur.perais@inria.fr
5911784Sarthur.perais@inria.fr    /**
6013444Spau.cabre@metempsy.com     * Serialization stuff
6113442Spau.cabre@metempsy.com     */
6213442Spau.cabre@metempsy.com    virtual void serialize(std::ostream &os);
6313442Spau.cabre@metempsy.com    virtual void unserialize(Checkpoint *cp, const std::string &section);
6413442Spau.cabre@metempsy.com
6513444Spau.cabre@metempsy.com    /**
6613442Spau.cabre@metempsy.com     * Set the m5AlphaAccess pointer in the console
6713442Spau.cabre@metempsy.com     */
6813442Spau.cabre@metempsy.com    void setAlphaAccess(Addr access);
6913444Spau.cabre@metempsy.com
7013444Spau.cabre@metempsy.com    /** console symbol table */
7113444Spau.cabre@metempsy.com    SymbolTable *consoleSymtab;
7213444Spau.cabre@metempsy.com
7313444Spau.cabre@metempsy.com    /** pal symbol table */
7413444Spau.cabre@metempsy.com    SymbolTable *palSymtab;
7511784Sarthur.perais@inria.fr
7613443Spau.cabre@metempsy.com    /** Object pointer for the console code */
7713443Spau.cabre@metempsy.com    ObjectFile *console;
7813443Spau.cabre@metempsy.com
7913443Spau.cabre@metempsy.com    /** Object pointer for the PAL code */
8013443Spau.cabre@metempsy.com    ObjectFile *pal;
8113442Spau.cabre@metempsy.com
8213442Spau.cabre@metempsy.com#ifndef NDEBUG
8313442Spau.cabre@metempsy.com    /** Event to halt the simulator if the console calls panic() */
8413442Spau.cabre@metempsy.com    BreakPCEvent *consolePanicEvent;
8513442Spau.cabre@metempsy.com#endif
8613444Spau.cabre@metempsy.com
8713444Spau.cabre@metempsy.com  protected:
8813444Spau.cabre@metempsy.com    const Params *params() const { return (const Params *)_params; }
8913444Spau.cabre@metempsy.com
9013444Spau.cabre@metempsy.com    /** Add a function-based event to PALcode. */
9113444Spau.cabre@metempsy.com    template <class T>
9213444Spau.cabre@metempsy.com    T *
9313444Spau.cabre@metempsy.com    addPalFuncEvent(const char *lbl)
9413444Spau.cabre@metempsy.com    {
9513444Spau.cabre@metempsy.com        return addFuncEvent<T>(palSymtab, lbl);
9611784Sarthur.perais@inria.fr    }
9711784Sarthur.perais@inria.fr
9811784Sarthur.perais@inria.fr    /** Add a function-based event to the console code. */
9911784Sarthur.perais@inria.fr    template <class T>
10011784Sarthur.perais@inria.fr    T *
10111784Sarthur.perais@inria.fr    addConsoleFuncEvent(const char *lbl)
10211784Sarthur.perais@inria.fr    {
10311784Sarthur.perais@inria.fr        return addFuncEvent<T>(consoleSymtab, lbl);
10411784Sarthur.perais@inria.fr    }
10511784Sarthur.perais@inria.fr
10611784Sarthur.perais@inria.fr    virtual Addr fixFuncEventAddr(Addr addr);
10711784Sarthur.perais@inria.fr};
10811784Sarthur.perais@inria.fr
10911784Sarthur.perais@inria.fr#endif // __ARCH_ALPHA_SYSTEM_HH__
11011784Sarthur.perais@inria.fr
11111784Sarthur.perais@inria.fr