system.hh revision 75
17506Stjones1@inf.ed.ac.uk/*
27506Stjones1@inf.ed.ac.uk * Copyright (c) 2003 The Regents of The University of Michigan
37506Stjones1@inf.ed.ac.uk * All rights reserved.
47506Stjones1@inf.ed.ac.uk *
57506Stjones1@inf.ed.ac.uk * Redistribution and use in source and binary forms, with or without
67506Stjones1@inf.ed.ac.uk * modification, are permitted provided that the following conditions are
77506Stjones1@inf.ed.ac.uk * met: redistributions of source code must retain the above copyright
87506Stjones1@inf.ed.ac.uk * notice, this list of conditions and the following disclaimer;
97506Stjones1@inf.ed.ac.uk * redistributions in binary form must reproduce the above copyright
107506Stjones1@inf.ed.ac.uk * notice, this list of conditions and the following disclaimer in the
117506Stjones1@inf.ed.ac.uk * documentation and/or other materials provided with the distribution;
127506Stjones1@inf.ed.ac.uk * neither the name of the copyright holders nor the names of its
137506Stjones1@inf.ed.ac.uk * contributors may be used to endorse or promote products derived from
147506Stjones1@inf.ed.ac.uk * this software without specific prior written permission.
157506Stjones1@inf.ed.ac.uk *
167506Stjones1@inf.ed.ac.uk * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177506Stjones1@inf.ed.ac.uk * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187506Stjones1@inf.ed.ac.uk * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197506Stjones1@inf.ed.ac.uk * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207506Stjones1@inf.ed.ac.uk * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
217506Stjones1@inf.ed.ac.uk * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227506Stjones1@inf.ed.ac.uk * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
237506Stjones1@inf.ed.ac.uk * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
247506Stjones1@inf.ed.ac.uk * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257506Stjones1@inf.ed.ac.uk * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
267506Stjones1@inf.ed.ac.uk * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
277506Stjones1@inf.ed.ac.uk */
287506Stjones1@inf.ed.ac.uk
297506Stjones1@inf.ed.ac.uk#ifndef __SYSTEM_HH__
307506Stjones1@inf.ed.ac.uk#define __SYSTEM_HH__
317506Stjones1@inf.ed.ac.uk
327506Stjones1@inf.ed.ac.uk#include <string>
337506Stjones1@inf.ed.ac.uk#include <vector>
347506Stjones1@inf.ed.ac.uk
357506Stjones1@inf.ed.ac.uk#include "sim/sim_object.hh"
3611793Sbrandon.potter@amd.com#include "cpu/pc_event.hh"
377698SAli.Saidi@ARM.com#include "base/loader/symtab.hh"
387506Stjones1@inf.ed.ac.uk
397506Stjones1@inf.ed.ac.ukclass MemoryController;
407506Stjones1@inf.ed.ac.ukclass PhysicalMemory;
417506Stjones1@inf.ed.ac.ukclass RemoteGDB;
427506Stjones1@inf.ed.ac.ukclass GDBListener;
437506Stjones1@inf.ed.ac.uk
447506Stjones1@inf.ed.ac.ukclass ExecContext;
457506Stjones1@inf.ed.ac.uk
467506Stjones1@inf.ed.ac.ukclass System : public SimObject
477506Stjones1@inf.ed.ac.uk{
487506Stjones1@inf.ed.ac.uk  private:
497506Stjones1@inf.ed.ac.uk
507506Stjones1@inf.ed.ac.uk    SymbolTable *kernelSymtab;
517506Stjones1@inf.ed.ac.uk    SymbolTable *consoleSymtab;
529920Syasuko.eckert@amd.com
539920Syasuko.eckert@amd.com    BreakPCEvent kernel_panic_event;
549920Syasuko.eckert@amd.com    BreakPCEvent console_panic_event;
557506Stjones1@inf.ed.ac.uk    BadAddrEvent badaddr_event;
567506Stjones1@inf.ed.ac.uk    SkipFuncEvent skip_power_state;
577506Stjones1@inf.ed.ac.uk    SkipFuncEvent skip_scavenge_boot;
587506Stjones1@inf.ed.ac.uk    PrintfEvent printf_event;
597720Sgblack@eecs.umich.edu    DebugPrintfEvent debug_printf_event;
607506Stjones1@inf.ed.ac.uk    DebugPrintfEvent debug_printfr_event;
617506Stjones1@inf.ed.ac.uk    DumpMbufEvent dump_mbuf_event;
628787Sgblack@eecs.umich.edu
638787Sgblack@eecs.umich.edu    RegFile *initRegs;
648787Sgblack@eecs.umich.edu
658787Sgblack@eecs.umich.edu    Addr kernelStart;
668787Sgblack@eecs.umich.edu    Addr kernelEnd;
678787Sgblack@eecs.umich.edu    Addr kernelEntry;
688787Sgblack@eecs.umich.edu
697693SAli.Saidi@ARM.com  public:
707693SAli.Saidi@ARM.com
717693SAli.Saidi@ARM.com    MemoryController *memCtrl;
727693SAli.Saidi@ARM.com    PhysicalMemory *physmem;
737693SAli.Saidi@ARM.com
747693SAli.Saidi@ARM.com    PCEventQueue pcEventQueue;
758791Sgblack@eecs.umich.edu
768791Sgblack@eecs.umich.edu    std::vector<ExecContext *> xcvec;
778791Sgblack@eecs.umich.edu
788791Sgblack@eecs.umich.edu    RemoteGDB *remoteGDB;
798791Sgblack@eecs.umich.edu    GDBListener *gdbListen;
808791Sgblack@eecs.umich.edu
817693SAli.Saidi@ARM.com    System(const std::string name,
827811Ssteve.reinhardt@amd.com           MemoryController *, PhysicalMemory *,
83           const std::string &kernel_path, const std::string &console_path,
84           const std::string &palcode, const std::string &boot_osflags);
85
86    ~System();
87
88    const SymbolTable *getKernelSymtab() const { return kernelSymtab; }
89    const SymbolTable *getConsoleSymtab() const { return consoleSymtab; }
90
91    Addr getKernelStart() const { return kernelStart; }
92    Addr getKernelEnd() const { return kernelEnd; }
93    Addr getKernelEntry() const { return kernelEntry; }
94
95    void initBootContext(ExecContext *xc);
96    void registerExecContext(ExecContext *xc);
97
98    ////////////////////////////////////////////
99    //
100    // STATIC GLOBAL SYSTEM LIST
101    //
102    ////////////////////////////////////////////
103
104  public:
105
106    static std::vector<System *> systemList;
107
108    static int numSystemsRunning;
109
110    static void printSystems();
111};
112
113#endif // __SYSTEM_HH__
114