mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
Initial VFIO platform device support, v2 (Eric Auger, et al.)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIbBAABAgAGBQJVdvdkAAoJECObm247sIsiuf8P92p6f53BdexSdumBnWsGiAjB AHKCYSzp8QaAD++PiMJ7g9PGX8rPrRlTZ8SmE4tOX27hmm8LMlQX7meHLfmu5ZBx f9W+dGqR7g+F6am5fOr+QfdAG+qmZGCsi5jUO8Q+RyQD1B80dPWWc5g0HqgB4sJY JZ+TKO6gyMkk1+Uf7ye23R7JAtqAkbJAyWjHmGCHw4jOUqo250FPTuaRoburG8ED dw9AHviBt5co4b2Ut5Tc69E/TLE8RK+egXeIQdVx2YAV4U0J1wVwXkAFsjtQo6Vi 5AlGDh3el4PhJwEMsaMk+WVxyvQlFOQq9VSe0smnZrRewwrNbXTfaHRVW7mv6v6E kaKfQ0Djlxy26jlbtW1hSfO+xYAEpnUDV94CUgRUHYYBUEZn16NPBTvbiMIW/re0 kpj6Ho0TVboHCIKR2vJxG/AA5ezAJ3g8nSGpMr33FBwY/3eZmE3Tz+fVzB3ilX8h aODq+r9uNiffspjDXsIGwazhBvBW/xH1Z3tyc8PsdVS2r0mJ+tITNBKOX25mrN/b 12Bhy1OTgO/xfU+mOzchEWR3mLQKs9/+uWdeNgKwswv1zrql83wZRSvvdUvykiTy mdTwgNl/nG4QOGippXbJBwjBRArwVdheLP6GHBeIWOmoYYMW7wTvMLZgIHO2GxBT GoFgSBBW/AageH/XCFM= =8dnK -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20150609.0' into staging Initial VFIO platform device support, v2 (Eric Auger, et al.) # gpg: Signature made Tue Jun 9 15:25:40 2015 BST using RSA key ID 3BB08B22 # gpg: Good signature from "Alex Williamson <alex.williamson@redhat.com>" # gpg: aka "Alex Williamson <alex@shazbot.org>" # gpg: aka "Alex Williamson <alwillia@redhat.com>" # gpg: aka "Alex Williamson <alex.l.williamson@gmail.com>" * remotes/awilliam/tags/vfio-update-20150609.0: hw/vfio/platform: calxeda xgmac device hw/vfio/platform: add irq assignment hw/vfio/platform: vfio-platform skeleton Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
eed8a8f572
7 changed files with 807 additions and 0 deletions
46
include/hw/vfio/vfio-calxeda-xgmac.h
Normal file
46
include/hw/vfio/vfio-calxeda-xgmac.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* VFIO calxeda xgmac device
|
||||
*
|
||||
* Copyright Linaro Limited, 2014
|
||||
*
|
||||
* Authors:
|
||||
* Eric Auger <eric.auger@linaro.org>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HW_VFIO_VFIO_CALXEDA_XGMAC_H
|
||||
#define HW_VFIO_VFIO_CALXEDA_XGMAC_H
|
||||
|
||||
#include "hw/vfio/vfio-platform.h"
|
||||
|
||||
#define TYPE_VFIO_CALXEDA_XGMAC "vfio-calxeda-xgmac"
|
||||
|
||||
/**
|
||||
* This device exposes:
|
||||
* - a single MMIO region corresponding to its register space
|
||||
* - 3 IRQS (main and 2 power related IRQs)
|
||||
*/
|
||||
typedef struct VFIOCalxedaXgmacDevice {
|
||||
VFIOPlatformDevice vdev;
|
||||
} VFIOCalxedaXgmacDevice;
|
||||
|
||||
typedef struct VFIOCalxedaXgmacDeviceClass {
|
||||
/*< private >*/
|
||||
VFIOPlatformDeviceClass parent_class;
|
||||
/*< public >*/
|
||||
DeviceRealize parent_realize;
|
||||
} VFIOCalxedaXgmacDeviceClass;
|
||||
|
||||
#define VFIO_CALXEDA_XGMAC_DEVICE(obj) \
|
||||
OBJECT_CHECK(VFIOCalxedaXgmacDevice, (obj), TYPE_VFIO_CALXEDA_XGMAC)
|
||||
#define VFIO_CALXEDA_XGMAC_DEVICE_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(VFIOCalxedaXgmacDeviceClass, (klass), \
|
||||
TYPE_VFIO_CALXEDA_XGMAC)
|
||||
#define VFIO_CALXEDA_XGMAC_DEVICE_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(VFIOCalxedaXgmacDeviceClass, (obj), \
|
||||
TYPE_VFIO_CALXEDA_XGMAC)
|
||||
|
||||
#endif
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
enum {
|
||||
VFIO_DEVICE_TYPE_PCI = 0,
|
||||
VFIO_DEVICE_TYPE_PLATFORM = 1,
|
||||
};
|
||||
|
||||
typedef struct VFIORegion {
|
||||
|
|
75
include/hw/vfio/vfio-platform.h
Normal file
75
include/hw/vfio/vfio-platform.h
Normal file
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* vfio based device assignment support - platform devices
|
||||
*
|
||||
* Copyright Linaro Limited, 2014
|
||||
*
|
||||
* Authors:
|
||||
* Kim Phillips <kim.phillips@linaro.org>
|
||||
*
|
||||
* This work is licensed under the terms of the GNU GPL, version 2. See
|
||||
* the COPYING file in the top-level directory.
|
||||
*
|
||||
* Based on vfio based PCI device assignment support:
|
||||
* Copyright Red Hat, Inc. 2012
|
||||
*/
|
||||
|
||||
#ifndef HW_VFIO_VFIO_PLATFORM_H
|
||||
#define HW_VFIO_VFIO_PLATFORM_H
|
||||
|
||||
#include "hw/sysbus.h"
|
||||
#include "hw/vfio/vfio-common.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "hw/irq.h"
|
||||
|
||||
#define TYPE_VFIO_PLATFORM "vfio-platform"
|
||||
|
||||
enum {
|
||||
VFIO_IRQ_INACTIVE = 0,
|
||||
VFIO_IRQ_PENDING = 1,
|
||||
VFIO_IRQ_ACTIVE = 2,
|
||||
/* VFIO_IRQ_ACTIVE_AND_PENDING cannot happen with VFIO */
|
||||
};
|
||||
|
||||
typedef struct VFIOINTp {
|
||||
QLIST_ENTRY(VFIOINTp) next; /* entry for IRQ list */
|
||||
QSIMPLEQ_ENTRY(VFIOINTp) pqnext; /* entry for pending IRQ queue */
|
||||
EventNotifier interrupt; /* eventfd triggered on interrupt */
|
||||
EventNotifier unmask; /* eventfd for unmask on QEMU bypass */
|
||||
qemu_irq qemuirq;
|
||||
struct VFIOPlatformDevice *vdev; /* back pointer to device */
|
||||
int state; /* inactive, pending, active */
|
||||
uint8_t pin; /* index */
|
||||
uint32_t flags; /* IRQ info flags */
|
||||
} VFIOINTp;
|
||||
|
||||
/* function type for user side eventfd handler */
|
||||
typedef void (*eventfd_user_side_handler_t)(VFIOINTp *intp);
|
||||
|
||||
typedef struct VFIOPlatformDevice {
|
||||
SysBusDevice sbdev;
|
||||
VFIODevice vbasedev; /* not a QOM object */
|
||||
VFIORegion **regions;
|
||||
QLIST_HEAD(, VFIOINTp) intp_list; /* list of IRQs */
|
||||
/* queue of pending IRQs */
|
||||
QSIMPLEQ_HEAD(pending_intp_queue, VFIOINTp) pending_intp_queue;
|
||||
char *compat; /* compatibility string */
|
||||
uint32_t mmap_timeout; /* delay to re-enable mmaps after interrupt */
|
||||
QEMUTimer *mmap_timer; /* allows fast-path resume after IRQ hit */
|
||||
QemuMutex intp_mutex; /* protect the intp_list IRQ state */
|
||||
} VFIOPlatformDevice;
|
||||
|
||||
typedef struct VFIOPlatformDeviceClass {
|
||||
/*< private >*/
|
||||
SysBusDeviceClass parent_class;
|
||||
/*< public >*/
|
||||
} VFIOPlatformDeviceClass;
|
||||
|
||||
#define VFIO_PLATFORM_DEVICE(obj) \
|
||||
OBJECT_CHECK(VFIOPlatformDevice, (obj), TYPE_VFIO_PLATFORM)
|
||||
#define VFIO_PLATFORM_DEVICE_CLASS(klass) \
|
||||
OBJECT_CLASS_CHECK(VFIOPlatformDeviceClass, (klass), TYPE_VFIO_PLATFORM)
|
||||
#define VFIO_PLATFORM_DEVICE_GET_CLASS(obj) \
|
||||
OBJECT_GET_CLASS(VFIOPlatformDeviceClass, (obj), TYPE_VFIO_PLATFORM)
|
||||
|
||||
#endif /*HW_VFIO_VFIO_PLATFORM_H*/
|
Loading…
Add table
Add a link
Reference in a new issue