dev: Add a dummy VirtIO device
VirtIO transport interfaces always expect a VirtIO device pointer. However, there are cases (in particular when using VirtIO's MMIO interface) where we want to instantiate an interface without a device. Add a dummy device using VirtIO device ID 0 and no queues to handle this use case. Change-Id: I6cbe12fd403903ef585be40279c3b1321fde48ff Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Sudhanshu Jha <sudhanshu.jha@arm.com> Reviewed-by: Rekai Gonzalez Alberquilla <rekai.gonzalezalberquilla@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2325 Reviewed-by: Weiping Liao <weipingliao@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
parent
cd9ca71b25
commit
ba00d7449d
3 changed files with 33 additions and 4 deletions
|
@ -1,6 +1,6 @@
|
||||||
# -*- mode:python -*-
|
# -*- mode:python -*-
|
||||||
|
|
||||||
# Copyright (c) 2014 ARM Limited
|
# Copyright (c) 2014, 2016 ARM Limited
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# The license below extends only to copyright in the software and shall
|
# The license below extends only to copyright in the software and shall
|
||||||
|
@ -53,11 +53,15 @@ class VirtIODeviceBase(SimObject):
|
||||||
|
|
||||||
system = Param.System(Parent.any, "system object")
|
system = Param.System(Parent.any, "system object")
|
||||||
|
|
||||||
|
class VirtIODummyDevice(VirtIODeviceBase):
|
||||||
|
type = 'VirtIODummyDevice'
|
||||||
|
cxx_header = 'dev/virtio/base.hh'
|
||||||
|
|
||||||
class PciVirtIO(PciDevice):
|
class PciVirtIO(PciDevice):
|
||||||
type = 'PciVirtIO'
|
type = 'PciVirtIO'
|
||||||
cxx_header = 'dev/virtio/pci.hh'
|
cxx_header = 'dev/virtio/pci.hh'
|
||||||
|
|
||||||
vio = Param.VirtIODeviceBase("VirtIO device")
|
vio = Param.VirtIODeviceBase(VirtIODummyDevice(), "VirtIO device")
|
||||||
|
|
||||||
VendorID = 0x1AF4
|
VendorID = 0x1AF4
|
||||||
SubsystemVendorID = VendorID;
|
SubsystemVendorID = VendorID;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014 ARM Limited
|
* Copyright (c) 2014, 2016 ARM Limited
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
*
|
*
|
||||||
* The license below extends only to copyright in the software and shall
|
* The license below extends only to copyright in the software and shall
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
|
|
||||||
#include "debug/VIO.hh"
|
#include "debug/VIO.hh"
|
||||||
#include "params/VirtIODeviceBase.hh"
|
#include "params/VirtIODeviceBase.hh"
|
||||||
|
#include "params/VirtIODummyDevice.hh"
|
||||||
|
|
||||||
VirtDescriptor::VirtDescriptor(PortProxy &_memProxy, VirtQueue &_queue,
|
VirtDescriptor::VirtDescriptor(PortProxy &_memProxy, VirtQueue &_queue,
|
||||||
Index descIndex)
|
Index descIndex)
|
||||||
|
@ -477,3 +478,15 @@ VirtIODeviceBase::registerQueue(VirtQueue &queue)
|
||||||
{
|
{
|
||||||
_queues.push_back(&queue);
|
_queues.push_back(&queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VirtIODummyDevice::VirtIODummyDevice(VirtIODummyDeviceParams *params)
|
||||||
|
: VirtIODeviceBase(params, ID_INVALID, 0, 0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtIODummyDevice *
|
||||||
|
VirtIODummyDeviceParams::create()
|
||||||
|
{
|
||||||
|
return new VirtIODummyDevice(this);
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014 ARM Limited
|
* Copyright (c) 2014, 2016 ARM Limited
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
*
|
*
|
||||||
* The license below extends only to copyright in the software and shall
|
* The license below extends only to copyright in the software and shall
|
||||||
|
@ -48,6 +48,8 @@
|
||||||
#include "sim/sim_object.hh"
|
#include "sim/sim_object.hh"
|
||||||
|
|
||||||
struct VirtIODeviceBaseParams;
|
struct VirtIODeviceBaseParams;
|
||||||
|
struct VirtIODummyDeviceParams;
|
||||||
|
|
||||||
class VirtQueue;
|
class VirtQueue;
|
||||||
|
|
||||||
/** @{
|
/** @{
|
||||||
|
@ -875,4 +877,14 @@ class VirtIODeviceBase : public SimObject
|
||||||
Callback *transKick;
|
Callback *transKick;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class VirtIODummyDevice : public VirtIODeviceBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VirtIODummyDevice(VirtIODummyDeviceParams *params);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/** VirtIO device ID */
|
||||||
|
static const DeviceId ID_INVALID = 0x00;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // __DEV_VIRTIO_BASE_HH__
|
#endif // __DEV_VIRTIO_BASE_HH__
|
||||||
|
|
Loading…
Reference in a new issue