system.hh revision 6221
18012Ssaidi@eecs.umich.edu/*
28029Snate@binkert.org * Copyright (c) 2002-2005 The Regents of The University of Michigan
38029Snate@binkert.org * All rights reserved.
48029Snate@binkert.org *
58013Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without
68029Snate@binkert.org * modification, are permitted provided that the following conditions are
78029Snate@binkert.org * met: redistributions of source code must retain the above copyright
88029Snate@binkert.org * notice, this list of conditions and the following disclaimer;
98029Snate@binkert.org * redistributions in binary form must reproduce the above copyright
108029Snate@binkert.org * notice, this list of conditions and the following disclaimer in the
118029Snate@binkert.org * documentation and/or other materials provided with the distribution;
128029Snate@binkert.org * neither the name of the copyright holders nor the names of its
138029Snate@binkert.org * contributors may be used to endorse or promote products derived from
148029Snate@binkert.org * this software without specific prior written permission.
158029Snate@binkert.org *
168013Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
178029Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
188029Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
198029Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
208029Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
218029Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
228029Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238029Snate@binkert.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
248029Snate@binkert.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258029Snate@binkert.org * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
268029Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278029Snate@binkert.org *
288013Sbinkertn@umich.edu * Authors: Ali Saidi
298012Ssaidi@eecs.umich.edu */
308008Ssaidi@eecs.umich.edu
318008Ssaidi@eecs.umich.edu#ifndef __ARCH_SPARC_SYSTEM_HH__
328008Ssaidi@eecs.umich.edu#define __ARCH_SPARC_SYSTEM_HH__
338008Ssaidi@eecs.umich.edu
348008Ssaidi@eecs.umich.edu#include <string>
358023Ssaidi@eecs.umich.edu#include <vector>
368008Ssaidi@eecs.umich.edu
378008Ssaidi@eecs.umich.edu#include "base/loader/symtab.hh"
388008Ssaidi@eecs.umich.edu#include "cpu/pc_event.hh"
398008Ssaidi@eecs.umich.edu#include "kern/system_events.hh"
408008Ssaidi@eecs.umich.edu#include "params/SparcSystem.hh"
418013Sbinkertn@umich.edu#include "sim/sim_object.hh"
428013Sbinkertn@umich.edu#include "sim/system.hh"
438013Sbinkertn@umich.edu
448008Ssaidi@eecs.umich.educlass SparcSystem : public System
458008Ssaidi@eecs.umich.edu{
468008Ssaidi@eecs.umich.edu  public:
478008Ssaidi@eecs.umich.edu    typedef SparcSystemParams Params;
488023Ssaidi@eecs.umich.edu    SparcSystem(Params *p);
498023Ssaidi@eecs.umich.edu    ~SparcSystem();
508023Ssaidi@eecs.umich.edu
518023Ssaidi@eecs.umich.edu/**
528023Ssaidi@eecs.umich.edu * Serialization stuff
538023Ssaidi@eecs.umich.edu */
548023Ssaidi@eecs.umich.edu  public:
558023Ssaidi@eecs.umich.edu    virtual void serialize(std::ostream &os);
568023Ssaidi@eecs.umich.edu    virtual void unserialize(Checkpoint *cp, const std::string &section);
578023Ssaidi@eecs.umich.edu
588023Ssaidi@eecs.umich.edu    /** reset binary symbol table */
598023Ssaidi@eecs.umich.edu    SymbolTable *resetSymtab;
608024Ssaidi@eecs.umich.edu
618024Ssaidi@eecs.umich.edu    /** hypervison binary symbol table */
628024Ssaidi@eecs.umich.edu    SymbolTable *hypervisorSymtab;
638023Ssaidi@eecs.umich.edu
648023Ssaidi@eecs.umich.edu    /** openboot symbol table */
658008Ssaidi@eecs.umich.edu    SymbolTable *openbootSymtab;
668023Ssaidi@eecs.umich.edu
678023Ssaidi@eecs.umich.edu    /** nvram symbol table? */
688008Ssaidi@eecs.umich.edu    SymbolTable *nvramSymtab;
698008Ssaidi@eecs.umich.edu
708008Ssaidi@eecs.umich.edu    /** hypervisor desc symbol table? */
718008Ssaidi@eecs.umich.edu    SymbolTable *hypervisorDescSymtab;
728008Ssaidi@eecs.umich.edu
738008Ssaidi@eecs.umich.edu    /** partition desc symbol table? */
748008Ssaidi@eecs.umich.edu    SymbolTable *partitionDescSymtab;
758008Ssaidi@eecs.umich.edu
768008Ssaidi@eecs.umich.edu    /** Object pointer for the reset binary */
778008Ssaidi@eecs.umich.edu    ObjectFile *reset;
788008Ssaidi@eecs.umich.edu
798008Ssaidi@eecs.umich.edu    /** Object pointer for the hypervisor code */
808008Ssaidi@eecs.umich.edu    ObjectFile *hypervisor;
818008Ssaidi@eecs.umich.edu
828008Ssaidi@eecs.umich.edu    /** Object pointer for the openboot code */
838008Ssaidi@eecs.umich.edu    ObjectFile *openboot;
848008Ssaidi@eecs.umich.edu
858008Ssaidi@eecs.umich.edu    /** Object pointer for the nvram image */
868008Ssaidi@eecs.umich.edu    ObjectFile *nvram;
878008Ssaidi@eecs.umich.edu
888008Ssaidi@eecs.umich.edu    /** Object pointer for the hypervisor description image */
898008Ssaidi@eecs.umich.edu    ObjectFile *hypervisor_desc;
908008Ssaidi@eecs.umich.edu
918023Ssaidi@eecs.umich.edu    /** Object pointer for the partition description image */
928008Ssaidi@eecs.umich.edu    ObjectFile *partition_desc;
938008Ssaidi@eecs.umich.edu
948008Ssaidi@eecs.umich.edu    /** System Tick for syncronized tick across all cpus. */
958008Ssaidi@eecs.umich.edu    Tick sysTick;
968008Ssaidi@eecs.umich.edu
978008Ssaidi@eecs.umich.edu    /** functional port to ROM */
988008Ssaidi@eecs.umich.edu    FunctionalPort funcRomPort;
998008Ssaidi@eecs.umich.edu
1008008Ssaidi@eecs.umich.edu    /** functional port to nvram */
1018008Ssaidi@eecs.umich.edu    FunctionalPort funcNvramPort;
1028008Ssaidi@eecs.umich.edu
1038008Ssaidi@eecs.umich.edu    /** functional port to hypervisor description */
1048008Ssaidi@eecs.umich.edu    FunctionalPort funcHypDescPort;
1058008Ssaidi@eecs.umich.edu
1068008Ssaidi@eecs.umich.edu    /** functional port to partition description */
1078008Ssaidi@eecs.umich.edu    FunctionalPort funcPartDescPort;
1088008Ssaidi@eecs.umich.edu
1098013Sbinkertn@umich.edu  protected:
1108008Ssaidi@eecs.umich.edu    const Params *params() const { return (const Params *)_params; }
1118008Ssaidi@eecs.umich.edu
1128008Ssaidi@eecs.umich.edu    /** Add a function-based event to reset binary. */
1138008Ssaidi@eecs.umich.edu    template <class T>
1148008Ssaidi@eecs.umich.edu    T *addResetFuncEvent(const char *lbl)
1158008Ssaidi@eecs.umich.edu    {
1168008Ssaidi@eecs.umich.edu        return addFuncEvent<T>(resetSymtab, lbl);
1178008Ssaidi@eecs.umich.edu    }
1188008Ssaidi@eecs.umich.edu
1198008Ssaidi@eecs.umich.edu    /** Add a function-based event to the hypervisor. */
1208008Ssaidi@eecs.umich.edu    template <class T>
1218008Ssaidi@eecs.umich.edu    T *addHypervisorFuncEvent(const char *lbl)
1228008Ssaidi@eecs.umich.edu    {
1238008Ssaidi@eecs.umich.edu        return addFuncEvent<T>(hypervisorSymtab, lbl);
1248008Ssaidi@eecs.umich.edu    }
1258008Ssaidi@eecs.umich.edu
1268008Ssaidi@eecs.umich.edu    /** Add a function-based event to the openboot. */
1278008Ssaidi@eecs.umich.edu    template <class T>
1288008Ssaidi@eecs.umich.edu    T *addOpenbootFuncEvent(const char *lbl)
1298008Ssaidi@eecs.umich.edu    {
1308008Ssaidi@eecs.umich.edu        return addFuncEvent<T>(openbootSymtab, lbl);
1318008Ssaidi@eecs.umich.edu    }
1328008Ssaidi@eecs.umich.edu
1338008Ssaidi@eecs.umich.edu    virtual Addr fixFuncEventAddr(Addr addr)
1348008Ssaidi@eecs.umich.edu    {
1358008Ssaidi@eecs.umich.edu        //XXX This may eventually have to do something useful.
1368008Ssaidi@eecs.umich.edu        return addr;
1378008Ssaidi@eecs.umich.edu    }
1388008Ssaidi@eecs.umich.edu};
1398008Ssaidi@eecs.umich.edu
1408008Ssaidi@eecs.umich.edu#endif
1418008Ssaidi@eecs.umich.edu
1428008Ssaidi@eecs.umich.edu