system.hh revision 1762
15389Sgblack@eecs.umich.edu/*
25446Sgblack@eecs.umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan
35389Sgblack@eecs.umich.edu * All rights reserved.
45389Sgblack@eecs.umich.edu *
55389Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
65389Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
75389Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
85389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
95389Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
105389Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
115389Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
125389Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
135389Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
145389Sgblack@eecs.umich.edu * this software without specific prior written permission.
155389Sgblack@eecs.umich.edu *
165389Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175389Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185389Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195389Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205389Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215389Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225389Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235389Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245389Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255389Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265389Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
275389Sgblack@eecs.umich.edu */
285389Sgblack@eecs.umich.edu
295389Sgblack@eecs.umich.edu#ifndef __SYSTEM_HH__
305389Sgblack@eecs.umich.edu#define __SYSTEM_HH__
315389Sgblack@eecs.umich.edu
325389Sgblack@eecs.umich.edu#include <string>
335389Sgblack@eecs.umich.edu#include <vector>
345389Sgblack@eecs.umich.edu
3511793Sbrandon.potter@amd.com#include "base/statistics.hh"
3611793Sbrandon.potter@amd.com#include "cpu/pc_event.hh"
375389Sgblack@eecs.umich.edu#include "kern/system_events.hh"
385389Sgblack@eecs.umich.edu#include "sim/sim_object.hh"
395389Sgblack@eecs.umich.edu
405389Sgblack@eecs.umich.educlass BaseCPU;
415654Sgblack@eecs.umich.educlass ExecContext;
425389Sgblack@eecs.umich.educlass GDBListener;
436658Snate@binkert.orgclass MemoryController;
445389Sgblack@eecs.umich.educlass ObjectFile;
4511793Sbrandon.potter@amd.comclass PhysicalMemory;
465643Sgblack@eecs.umich.educlass Platform;
475636Sgblack@eecs.umich.educlass RemoteGDB;
485830Sgblack@eecs.umich.educlass SymbolTable;
495637Sgblack@eecs.umich.edunamespace Kernel { class Binning; }
505389Sgblack@eecs.umich.edu
515389Sgblack@eecs.umich.educlass System : public SimObject
525389Sgblack@eecs.umich.edu{
535389Sgblack@eecs.umich.edu  public:
545389Sgblack@eecs.umich.edu    MemoryController *memctrl;
555638Sgblack@eecs.umich.edu    PhysicalMemory *physmem;
565389Sgblack@eecs.umich.edu    Platform *platform;
575389Sgblack@eecs.umich.edu    PCEventQueue pcEventQueue;
585446Sgblack@eecs.umich.edu    uint64_t init_param;
595389Sgblack@eecs.umich.edu
605389Sgblack@eecs.umich.edu    std::vector<ExecContext *> execContexts;
615446Sgblack@eecs.umich.edu
625638Sgblack@eecs.umich.edu    /** kernel Symbol table */
635446Sgblack@eecs.umich.edu    SymbolTable *kernelSymtab;
645446Sgblack@eecs.umich.edu
655643Sgblack@eecs.umich.edu    /** console symbol table */
665643Sgblack@eecs.umich.edu    SymbolTable *consoleSymtab;
675643Sgblack@eecs.umich.edu
685643Sgblack@eecs.umich.edu    /** pal symbol table */
695636Sgblack@eecs.umich.edu    SymbolTable *palSymtab;
705446Sgblack@eecs.umich.edu
715446Sgblack@eecs.umich.edu    /** Object pointer for the kernel code */
725446Sgblack@eecs.umich.edu    ObjectFile *kernel;
735446Sgblack@eecs.umich.edu
745446Sgblack@eecs.umich.edu    /** Object pointer for the console code */
755635Sgblack@eecs.umich.edu    ObjectFile *console;
765635Sgblack@eecs.umich.edu
775643Sgblack@eecs.umich.edu    /** Object pointer for the PAL code */
785643Sgblack@eecs.umich.edu    ObjectFile *pal;
795643Sgblack@eecs.umich.edu
805643Sgblack@eecs.umich.edu    /** Begining of kernel code */
815643Sgblack@eecs.umich.edu    Addr kernelStart;
825643Sgblack@eecs.umich.edu
835654Sgblack@eecs.umich.edu    /** End of kernel code */
845643Sgblack@eecs.umich.edu    Addr kernelEnd;
855643Sgblack@eecs.umich.edu
865643Sgblack@eecs.umich.edu    /** Entry point in the kernel to start at */
875829Sgblack@eecs.umich.edu    Addr kernelEntry;
885829Sgblack@eecs.umich.edu
895829Sgblack@eecs.umich.edu    Kernel::Binning *kernelBinning;
905829Sgblack@eecs.umich.edu
915829Sgblack@eecs.umich.edu#ifdef DEBUG
925829Sgblack@eecs.umich.edu    /** Event to halt the simulator if the console calls panic() */
935829Sgblack@eecs.umich.edu    BreakPCEvent *consolePanicEvent;
945829Sgblack@eecs.umich.edu#endif
955829Sgblack@eecs.umich.edu
965829Sgblack@eecs.umich.edu  public:
975829Sgblack@eecs.umich.edu    std::vector<RemoteGDB *> remoteGDB;
985829Sgblack@eecs.umich.edu    std::vector<GDBListener *> gdbListen;
995829Sgblack@eecs.umich.edu    bool breakpoint();
1005829Sgblack@eecs.umich.edu
1015829Sgblack@eecs.umich.edu  public:
1025829Sgblack@eecs.umich.edu    struct Params
1035829Sgblack@eecs.umich.edu    {
1045843Sgblack@eecs.umich.edu        std::string name;
1055843Sgblack@eecs.umich.edu        Tick boot_cpu_frequency;
1065843Sgblack@eecs.umich.edu        MemoryController *memctrl;
1075843Sgblack@eecs.umich.edu        PhysicalMemory *physmem;
1085843Sgblack@eecs.umich.edu        uint64_t init_param;
1095843Sgblack@eecs.umich.edu        bool bin;
1106073Sgblack@eecs.umich.edu        std::vector<std::string> binned_fns;
1116073Sgblack@eecs.umich.edu        bool bin_int;
1126073Sgblack@eecs.umich.edu
1136073Sgblack@eecs.umich.edu        std::string kernel_path;
1146073Sgblack@eecs.umich.edu        std::string console_path;
1156073Sgblack@eecs.umich.edu        std::string palcode;
1166073Sgblack@eecs.umich.edu        std::string boot_osflags;
1175446Sgblack@eecs.umich.edu
1185446Sgblack@eecs.umich.edu        std::string readfile;
1195389Sgblack@eecs.umich.edu        uint64_t system_type;
1205638Sgblack@eecs.umich.edu        uint64_t system_rev;
1215389Sgblack@eecs.umich.edu    };
1225830Sgblack@eecs.umich.edu    Params *params;
1235830Sgblack@eecs.umich.edu
1245389Sgblack@eecs.umich.edu    System(Params *p);
1255389Sgblack@eecs.umich.edu    ~System();
1265389Sgblack@eecs.umich.edu
1275638Sgblack@eecs.umich.edu    void startup();
1285389Sgblack@eecs.umich.edu
1295389Sgblack@eecs.umich.edu  public:
1305389Sgblack@eecs.umich.edu    /**
1315389Sgblack@eecs.umich.edu     * Returns the addess the kernel starts at.
1325389Sgblack@eecs.umich.edu     * @return address the kernel starts at
1335389Sgblack@eecs.umich.edu     */
1345638Sgblack@eecs.umich.edu    Addr getKernelStart() const { return kernelStart; }
1355389Sgblack@eecs.umich.edu
1365842Sgblack@eecs.umich.edu    /**
1375389Sgblack@eecs.umich.edu     * Returns the addess the kernel ends at.
1385389Sgblack@eecs.umich.edu     * @return address the kernel ends at
1395389Sgblack@eecs.umich.edu     */
1405638Sgblack@eecs.umich.edu    Addr getKernelEnd() const { return kernelEnd; }
1415389Sgblack@eecs.umich.edu
1425842Sgblack@eecs.umich.edu    /**
1435389Sgblack@eecs.umich.edu     * Returns the addess the entry point to the kernel code.
1445389Sgblack@eecs.umich.edu     * @return entry point of the kernel code
1455638Sgblack@eecs.umich.edu     */
1465638Sgblack@eecs.umich.edu    Addr getKernelEntry() const { return kernelEntry; }
1475389Sgblack@eecs.umich.edu
1485638Sgblack@eecs.umich.edu    int registerExecContext(ExecContext *xc);
1495389Sgblack@eecs.umich.edu    void replaceExecContext(ExecContext *xc, int xcIndex);
150
151    void regStats();
152    void serialize(std::ostream &os);
153    void unserialize(Checkpoint *cp, const std::string &section);
154
155  public:
156    ////////////////////////////////////////////
157    //
158    // STATIC GLOBAL SYSTEM LIST
159    //
160    ////////////////////////////////////////////
161
162    static std::vector<System *> systemList;
163    static int numSystemsRunning;
164
165    static void printSystems();
166};
167
168#endif // __SYSTEM_HH__
169