# -*- mode:python -*-

# Copyright (c) 2009, 2012-2013, 2020 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
# not be construed as granting a license to any other intellectual
# property including but not limited to intellectual property relating
# to a hardware implementation of the functionality of the software
# licensed hereunder.  You may use the software subject to the license
# terms below provided that you ensure that this notice is replicated
# unmodified and in its entirety in all distributions of the software,
# modified or unmodified, in source code or in binary form.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Import('*')

SimObject('AbstractNVM.py', sim_objects=['AbstractNVM'], tags='arm isa')
SimObject('Display.py', sim_objects=['Display'], tags='arm isa')
SimObject('Doorbell.py', sim_objects=['Doorbell'], tags='arm isa')
SimObject('FlashDevice.py', sim_objects=['FlashDevice'],
        enums=['DataDistribution'], tags='arm isa')
SimObject('GenericTimer.py', sim_objects=[
    'SystemCounter', 'GenericTimer', 'GenericTimerFrame',
    'GenericTimerMem'], tags='arm isa')
SimObject('Gic.py', sim_objects=[
    'BaseGic', 'ArmInterruptPin', 'ArmSPI', 'ArmPPI', 'ArmSigInterruptPin',
    'GicV2', 'Gicv2mFrame', 'Gicv2m', 'VGic', 'Gicv3Its', 'Gicv3'],
    enums=['ArmInterruptType'], tags='arm isa')
SimObject('RealView.py', sim_objects=[
    'AmbaPioDevice', 'AmbaIntDevice', 'AmbaDmaDevice', 'A9SCU',
    'GenericArmPciHost', 'RealViewCtrl', 'RealViewOsc',
    'RealViewTemperatureSensor', 'AmbaFake', 'Pl011', 'Sp804', 'Sp805',
    'GenericWatchdog', 'CpuLocalTimer', 'PL031', 'Pl050', 'Pl111', 'HDLcd',
    'FVPBasePwrCtrl', 'RealView', 'SysSecCtrl'],
    enums=['ArmPciIntRouting'], tags='arm isa')
SimObject('SMMUv3.py', sim_objects=['SMMUv3DeviceInterface', 'SMMUv3'],
    tags='arm isa')
SimObject('UFSHostDevice.py', sim_objects=['UFSHostDevice'], tags='arm isa')
SimObject('EnergyCtrl.py', sim_objects=['EnergyCtrl'], tags='arm isa')
SimObject('NoMali.py', sim_objects=['NoMaliGpu', 'CustomNoMaliGpu'],
    enums=['NoMaliGpuType'], tags='arm isa')
SimObject('VirtIOMMIO.py', sim_objects=['MmioVirtIO'], tags='arm isa')
if env['CONF']['USE_ARM_FASTMODEL']:
    SimObject('VExpressFastmodel.py', sim_objects=[], tags='arm isa')

Source('a9scu.cc', tags='arm isa')
Source('amba_device.cc', tags='arm isa')
Source('amba_fake.cc', tags='arm isa')
Source('base_gic.cc', tags='arm isa')
Source('display.cc', tags='arm isa')
Source('flash_device.cc', tags='arm isa')
Source('generic_timer.cc', tags='arm isa')
Source('gic_v2.cc', tags='arm isa')
Source('gic_v2m.cc', tags='arm isa')
Source('gic_v3.cc', tags='arm isa')
Source('gic_v3_cpu_interface.cc', tags='arm isa')
Source('gic_v3_distributor.cc', tags='arm isa')
Source('gic_v3_redistributor.cc', tags='arm isa')
Source('gic_v3_its.cc', tags='arm isa')
Source('pl011.cc', tags='arm isa')
Source('pl111.cc', tags='arm isa')
Source('hdlcd.cc', tags='arm isa')
Source('kmi.cc', tags='arm isa')
Source('smmu_v3.cc', tags='arm isa');
Source('smmu_v3_caches.cc', tags='arm isa');
Source('smmu_v3_cmdexec.cc', tags='arm isa');
Source('smmu_v3_events.cc', tags='arm isa');
Source('smmu_v3_ports.cc', tags='arm isa');
Source('smmu_v3_proc.cc', tags='arm isa');
Source('smmu_v3_deviceifc.cc', tags='arm isa');
Source('smmu_v3_transl.cc', tags='arm isa');
Source('ssc.cc', tags='arm isa');
Source('timer_sp804.cc', tags='arm isa')
Source('watchdog_generic.cc', tags='arm isa')
Source('watchdog_sp805.cc', tags='arm isa')
Source('gpu_nomali.cc', tags='arm isa')
Source('pci_host.cc', tags='arm isa')
Source('rv_ctrl.cc', tags='arm isa')
Source('realview.cc', tags='arm isa')
Source('rtc_pl031.cc', tags='arm isa')
Source('timer_cpulocal.cc', tags='arm isa')
Source('vgic.cc', tags='arm isa')
Source('vio_mmio.cc', tags='arm isa')
Source('ufs_device.cc', tags='arm isa')
Source('energy_ctrl.cc', tags='arm isa')
Source('fvp_base_pwr_ctrl.cc', tags='arm isa')

DebugFlag('AMBA', tags='arm isa')
DebugFlag('FlashDevice', tags='arm isa')
DebugFlag('HDLcd', tags='arm isa')
DebugFlag('PL111', tags='arm isa')
DebugFlag('GICV2M', tags='arm isa')
DebugFlag('Pl050', tags='arm isa')
DebugFlag('GIC', tags='arm isa')
DebugFlag('ITS', tags='arm isa')
DebugFlag('RVCTRL', tags='arm isa')
DebugFlag('SMMUv3', tags='arm isa')
DebugFlag('SMMUv3Hazard', tags='arm isa')
DebugFlag('Sp805', tags='arm isa')
DebugFlag('EnergyCtrl', tags='arm isa')
DebugFlag('FVPBasePwrCtrl', tags='arm isa')
DebugFlag('UFSHostDevice', tags='arm isa')
DebugFlag('VGIC', tags='arm isa')
DebugFlag('NoMali', tags='arm isa')
