system.hh revision 9292
14484Sbinkertn@umich.edu/*
24484Sbinkertn@umich.edu * Copyright (c) 2010 ARM Limited
34484Sbinkertn@umich.edu * All rights reserved
44484Sbinkertn@umich.edu *
54484Sbinkertn@umich.edu * The license below extends only to copyright in the software and shall
64484Sbinkertn@umich.edu * not be construed as granting a license to any other intellectual
74484Sbinkertn@umich.edu * property including but not limited to intellectual property relating
84484Sbinkertn@umich.edu * to a hardware implementation of the functionality of the software
94484Sbinkertn@umich.edu * licensed hereunder.  You may use the software subject to the license
104484Sbinkertn@umich.edu * terms below provided that you ensure that this notice is replicated
114484Sbinkertn@umich.edu * unmodified and in its entirety in all distributions of the software,
124484Sbinkertn@umich.edu * modified or unmodified, in source code or in binary form.
134484Sbinkertn@umich.edu *
144484Sbinkertn@umich.edu * Copyright (c) 2002-2005 The Regents of The University of Michigan
154484Sbinkertn@umich.edu * All rights reserved.
164484Sbinkertn@umich.edu *
174484Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without
184484Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are
194484Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright
204484Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer;
214484Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright
224484Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the
234484Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution;
244484Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its
254484Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from
264484Sbinkertn@umich.edu * this software without specific prior written permission.
274484Sbinkertn@umich.edu *
284484Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
294484Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
304484Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
314494Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
324484Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
336121Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
344484Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
354484Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
364484Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
374484Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
384781Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
394484Sbinkertn@umich.edu *
404484Sbinkertn@umich.edu * Authors: Ali Saidi
414484Sbinkertn@umich.edu */
424484Sbinkertn@umich.edu
434484Sbinkertn@umich.edu#ifndef __ARCH_ARM_SYSTEM_HH__
444484Sbinkertn@umich.edu#define __ARCH_ARM_SYSTEM_HH__
454484Sbinkertn@umich.edu
464484Sbinkertn@umich.edu#include <string>
474484Sbinkertn@umich.edu#include <vector>
484484Sbinkertn@umich.edu
494484Sbinkertn@umich.edu#include "kern/linux/events.hh"
504484Sbinkertn@umich.edu#include "params/ArmSystem.hh"
514484Sbinkertn@umich.edu#include "sim/sim_object.hh"
524484Sbinkertn@umich.edu#include "sim/system.hh"
534484Sbinkertn@umich.edu
544484Sbinkertn@umich.educlass ArmSystem : public System
554484Sbinkertn@umich.edu{
564484Sbinkertn@umich.edu  protected:
574484Sbinkertn@umich.edu    /**
584484Sbinkertn@umich.edu     * PC based event to skip the dprink() call and emulate its
594484Sbinkertn@umich.edu     * functionality
604484Sbinkertn@umich.edu     */
614484Sbinkertn@umich.edu    Linux::DebugPrintkEvent *debugPrintkEvent;
624484Sbinkertn@umich.edu
634484Sbinkertn@umich.edu    /**
644484Sbinkertn@umich.edu     * Pointer to the bootloader object
654484Sbinkertn@umich.edu     */
664484Sbinkertn@umich.edu    ObjectFile *bootldr;
674484Sbinkertn@umich.edu
684484Sbinkertn@umich.edu  public:
694484Sbinkertn@umich.edu    typedef ArmSystemParams Params;
704484Sbinkertn@umich.edu    const Params *
714484Sbinkertn@umich.edu    params() const
724484Sbinkertn@umich.edu    {
734484Sbinkertn@umich.edu        return dynamic_cast<const Params *>(_params);
744484Sbinkertn@umich.edu    }
754484Sbinkertn@umich.edu
764484Sbinkertn@umich.edu    ArmSystem(Params *p);
774484Sbinkertn@umich.edu    ~ArmSystem();
784484Sbinkertn@umich.edu
794484Sbinkertn@umich.edu    /**
804484Sbinkertn@umich.edu     * Initialise the system
814484Sbinkertn@umich.edu     */
824484Sbinkertn@umich.edu    virtual void initState();
834484Sbinkertn@umich.edu
844484Sbinkertn@umich.edu    /** Check if an address should be uncacheable until all caches are enabled.
854484Sbinkertn@umich.edu     * This exits because coherence on some addresses at boot is maintained via
864484Sbinkertn@umich.edu     * sw coherence until the caches are enbaled. Since we don't support sw
874484Sbinkertn@umich.edu     * coherence operations in gem5, this is a method that allows a system
884484Sbinkertn@umich.edu     * type to designate certain addresses that should remain uncachebale
894484Sbinkertn@umich.edu     * for a while.
906121Snate@binkert.org     */
916121Snate@binkert.org    virtual bool adderBootUncacheable(Addr a) { return false; }
926121Snate@binkert.org
935765Snate@binkert.org    virtual Addr fixFuncEventAddr(Addr addr)
945765Snate@binkert.org    {
955765Snate@binkert.org        // Remove the low bit that thumb symbols have set
965397Ssaidi@eecs.umich.edu        // but that aren't actually odd aligned
975274Ssaidi@eecs.umich.edu        if (addr & 0x1)
984494Ssaidi@eecs.umich.edu            return addr & ~1;
994504Ssaidi@eecs.umich.edu        return addr;
1004494Ssaidi@eecs.umich.edu    }
1014494Ssaidi@eecs.umich.edu
1024496Ssaidi@eecs.umich.edu    /** true if this a multiprocessor system */
1034504Ssaidi@eecs.umich.edu    bool multiProc;
1044504Ssaidi@eecs.umich.edu};
1054500Sbinkertn@umich.edu
1064500Sbinkertn@umich.edu#endif
1074496Ssaidi@eecs.umich.edu
1084496Ssaidi@eecs.umich.edu