VirtIOMMIO.py revision 12740
112740Sandreas.sandberg@arm.com# -*- mode:python -*- 212740Sandreas.sandberg@arm.com 312740Sandreas.sandberg@arm.com# Copyright (c) 2014, 2016-2018 ARM Limited 412740Sandreas.sandberg@arm.com# All rights reserved. 512740Sandreas.sandberg@arm.com# 612740Sandreas.sandberg@arm.com# The license below extends only to copyright in the software and shall 712740Sandreas.sandberg@arm.com# not be construed as granting a license to any other intellectual 812740Sandreas.sandberg@arm.com# property including but not limited to intellectual property relating 912740Sandreas.sandberg@arm.com# to a hardware implementation of the functionality of the software 1012740Sandreas.sandberg@arm.com# licensed hereunder. You may use the software subject to the license 1112740Sandreas.sandberg@arm.com# terms below provided that you ensure that this notice is replicated 1212740Sandreas.sandberg@arm.com# unmodified and in its entirety in all distributions of the software, 1312740Sandreas.sandberg@arm.com# modified or unmodified, in source code or in binary form. 1412740Sandreas.sandberg@arm.com# 1512740Sandreas.sandberg@arm.com# Redistribution and use in source and binary forms, with or without 1612740Sandreas.sandberg@arm.com# modification, are permitted provided that the following conditions are 1712740Sandreas.sandberg@arm.com# met: redistributions of source code must retain the above copyright 1812740Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer; 1912740Sandreas.sandberg@arm.com# redistributions in binary form must reproduce the above copyright 2012740Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer in the 2112740Sandreas.sandberg@arm.com# documentation and/or other materials provided with the distribution; 2212740Sandreas.sandberg@arm.com# neither the name of the copyright holders nor the names of its 2312740Sandreas.sandberg@arm.com# contributors may be used to endorse or promote products derived from 2412740Sandreas.sandberg@arm.com# this software without specific prior written permission. 2512740Sandreas.sandberg@arm.com# 2612740Sandreas.sandberg@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2712740Sandreas.sandberg@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2812740Sandreas.sandberg@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2912740Sandreas.sandberg@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3012740Sandreas.sandberg@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3112740Sandreas.sandberg@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3212740Sandreas.sandberg@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3312740Sandreas.sandberg@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3412740Sandreas.sandberg@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3512740Sandreas.sandberg@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3612740Sandreas.sandberg@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3712740Sandreas.sandberg@arm.com# 3812740Sandreas.sandberg@arm.com# Authors: Andreas Sandberg 3912740Sandreas.sandberg@arm.com 4012740Sandreas.sandberg@arm.comfrom m5.SimObject import SimObject 4112740Sandreas.sandberg@arm.comfrom m5.params import * 4212740Sandreas.sandberg@arm.comfrom m5.proxy import * 4312740Sandreas.sandberg@arm.com 4412740Sandreas.sandberg@arm.comfrom Device import BasicPioDevice 4512740Sandreas.sandberg@arm.comfrom Gic import ArmInterruptPin 4612740Sandreas.sandberg@arm.comfrom VirtIO import VirtIODeviceBase, VirtIODummyDevice 4712740Sandreas.sandberg@arm.com 4812740Sandreas.sandberg@arm.comclass MmioVirtIO(BasicPioDevice): 4912740Sandreas.sandberg@arm.com type = 'MmioVirtIO' 5012740Sandreas.sandberg@arm.com cxx_header = 'dev/arm/vio_mmio.hh' 5112740Sandreas.sandberg@arm.com 5212740Sandreas.sandberg@arm.com pio_size = Param.Addr(4096, "IO range") 5312740Sandreas.sandberg@arm.com interrupt = Param.ArmInterruptPin("Interrupt to use for this device") 5412740Sandreas.sandberg@arm.com 5512740Sandreas.sandberg@arm.com vio = Param.VirtIODeviceBase(VirtIODummyDevice(), "VirtIO device") 5612740Sandreas.sandberg@arm.com 5712740Sandreas.sandberg@arm.com def generateDeviceTree(self, state): 5812740Sandreas.sandberg@arm.com node = self.generateBasicPioDeviceNode(state, 'virtio', self.pio_addr, 5912740Sandreas.sandberg@arm.com int(self.pio_size), [ 6012740Sandreas.sandberg@arm.com int(self.interrupt.num), 6112740Sandreas.sandberg@arm.com ]) 6212740Sandreas.sandberg@arm.com node.appendCompatible(["virtio,mmio"]) 6312740Sandreas.sandberg@arm.com yield node 64