mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
VFIO updates 2015-09-23
- Tracing improvements to use common prefixes for functional areas - Quirks overhaul: - Split PCI quirks to separate file - Make them understandable and more extensible - Improve use of MemoryRegions and eliminate use of target pagesize - Eliminate build-time debugging, everything migrated to runtime opts -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJWAwbhAAoJECObm247sIsiWfcP/R8H6v29KOq9deXhZFJ7pQDV l63Rm3ppGkwNcKhib1JouJTaTlUP7YZGnOW3mYvy9Ku2UEZRgKSZ7m84lT83actC OoZkaPKHj2RhNz2Ur86fPt5FJZXRKLl1QgoXAPMqa42JyOOYOaGaEuejoW5qVwv6 GfyKt/DKU/gzlrgC5w1JyeGsuRICDtTy9W2/Vi14ZPFJgnDyeYdd4K+J97dBMpbe tdeakeWWRMo+i6FIvARriCuYor9TPjK8JQcHAZFqtjH0CMuEHRuCswNcw9mM0tT3 yooepWSHVA1zC8nyrpXvg002mMd1bS1mnC17h3LxFbHQ/bpAkT3zCj/rtmlGN6cD 9Ou+48QbCtyaHNufpxumi3H+V5AV0+BL6cYJeDJ+pCxIA0m17gbgnu5ROOLd0F4m F0hFIfEWzrA8eUqCmb7YnFF1S5Tf0cn6MAmsAgNkfmB3zNFLpqqTF55Jjcn/pfnl XYjtxF5p37Lda20uRpyBn3OfAstzAPMsBE2SgbG6JLCIMwSFLJ8AxSxI+xQeOy7H nmSDmxdwTR1txr7jw81O6WXYAfjjNq3jvPoO71rSyJlV0Kwy0jLf1G456h/FtqdY j2ZVnDEcPkpgrpW3+3tudB5KL6LDR2n4eZDnym1ZOckBMWBNJ874pt7QZolWiKrt 2dwgRFeA5RYsMDaSCA8Q =0W3O -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20150923.0' into staging VFIO updates 2015-09-23 - Tracing improvements to use common prefixes for functional areas - Quirks overhaul: - Split PCI quirks to separate file - Make them understandable and more extensible - Improve use of MemoryRegions and eliminate use of target pagesize - Eliminate build-time debugging, everything migrated to runtime opts # gpg: Signature made Wed 23 Sep 2015 21:09:05 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-20150923.0: vfio/pci: Add emulated PCI IDs vfio/pci: Cache vendor and device ID vfio/pci: Move AMD device specific reset to quirks vfio/pci: Remove old config window and mirror quirks vfio/pci: Config mirror quirk vfio/pci: Config window quirks vfio/pci: Rework RTL8168 quirk vfio/pci: Cleanup Nvidia 0x3d0 quirk vfio/pci: Cleanup ATI 0x3c3 quirk vfio/pci: Foundation for new quirk structure vfio/pci: Cleanup ROM blacklist quirk vfio/pci: Split quirks to a separate file vfio/pci: Extract PCI structures to a separate header vfio: Change polarity of our no-mmap option vfio/pci: Make interrupt bypass runtime configurable vfio/pci: Rename MSI/X functions for easier tracing vfio/pci: Rename INTx functions for easier tracing vfio/pci: Cleanup vfio_early_setup_msix() error path vfio/pci: Cleanup RTL8168 quirk and tracing Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
fefa4b128d
8 changed files with 1558 additions and 1329 deletions
|
@ -1,6 +1,6 @@
|
|||
ifeq ($(CONFIG_LINUX), y)
|
||||
obj-$(CONFIG_SOFTMMU) += common.o
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
obj-$(CONFIG_PCI) += pci.o pci-quirks.o
|
||||
obj-$(CONFIG_SOFTMMU) += platform.o
|
||||
obj-$(CONFIG_SOFTMMU) += calxeda-xgmac.o
|
||||
endif
|
||||
|
|
|
@ -496,7 +496,7 @@ int vfio_mmap_region(Object *obj, VFIORegion *region,
|
|||
int ret = 0;
|
||||
VFIODevice *vbasedev = region->vbasedev;
|
||||
|
||||
if (vbasedev->allow_mmap && size && region->flags &
|
||||
if (!vbasedev->no_mmap && size && region->flags &
|
||||
VFIO_REGION_INFO_FLAG_MMAP) {
|
||||
int prot = 0;
|
||||
|
||||
|
|
1204
hw/vfio/pci-quirks.c
Normal file
1204
hw/vfio/pci-quirks.c
Normal file
File diff suppressed because it is too large
Load diff
1424
hw/vfio/pci.c
1424
hw/vfio/pci.c
File diff suppressed because it is too large
Load diff
159
hw/vfio/pci.h
Normal file
159
hw/vfio/pci.h
Normal file
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
* vfio based device assignment support - PCI devices
|
||||
*
|
||||
* Copyright Red Hat, Inc. 2012-2015
|
||||
*
|
||||
* Authors:
|
||||
* Alex Williamson <alex.williamson@redhat.com>
|
||||
*
|
||||
* 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_PCI_H
|
||||
#define HW_VFIO_VFIO_PCI_H
|
||||
|
||||
#include "qemu-common.h"
|
||||
#include "exec/memory.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/vfio/vfio-common.h"
|
||||
#include "qemu/event_notifier.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "qemu/timer.h"
|
||||
|
||||
#define PCI_ANY_ID (~0)
|
||||
|
||||
struct VFIOPCIDevice;
|
||||
|
||||
typedef struct VFIOQuirk {
|
||||
QLIST_ENTRY(VFIOQuirk) next;
|
||||
void *data;
|
||||
int nr_mem;
|
||||
MemoryRegion *mem;
|
||||
} VFIOQuirk;
|
||||
|
||||
typedef struct VFIOBAR {
|
||||
VFIORegion region;
|
||||
bool ioport;
|
||||
bool mem64;
|
||||
QLIST_HEAD(, VFIOQuirk) quirks;
|
||||
} VFIOBAR;
|
||||
|
||||
typedef struct VFIOVGARegion {
|
||||
MemoryRegion mem;
|
||||
off_t offset;
|
||||
int nr;
|
||||
QLIST_HEAD(, VFIOQuirk) quirks;
|
||||
} VFIOVGARegion;
|
||||
|
||||
typedef struct VFIOVGA {
|
||||
off_t fd_offset;
|
||||
int fd;
|
||||
VFIOVGARegion region[QEMU_PCI_VGA_NUM_REGIONS];
|
||||
} VFIOVGA;
|
||||
|
||||
typedef struct VFIOINTx {
|
||||
bool pending; /* interrupt pending */
|
||||
bool kvm_accel; /* set when QEMU bypass through KVM enabled */
|
||||
uint8_t pin; /* which pin to pull for qemu_set_irq */
|
||||
EventNotifier interrupt; /* eventfd triggered on interrupt */
|
||||
EventNotifier unmask; /* eventfd for unmask on QEMU bypass */
|
||||
PCIINTxRoute route; /* routing info for QEMU bypass */
|
||||
uint32_t mmap_timeout; /* delay to re-enable mmaps after interrupt */
|
||||
QEMUTimer *mmap_timer; /* enable mmaps after periods w/o interrupts */
|
||||
} VFIOINTx;
|
||||
|
||||
typedef struct VFIOMSIVector {
|
||||
/*
|
||||
* Two interrupt paths are configured per vector. The first, is only used
|
||||
* for interrupts injected via QEMU. This is typically the non-accel path,
|
||||
* but may also be used when we want QEMU to handle masking and pending
|
||||
* bits. The KVM path bypasses QEMU and is therefore higher performance,
|
||||
* but requires masking at the device. virq is used to track the MSI route
|
||||
* through KVM, thus kvm_interrupt is only available when virq is set to a
|
||||
* valid (>= 0) value.
|
||||
*/
|
||||
EventNotifier interrupt;
|
||||
EventNotifier kvm_interrupt;
|
||||
struct VFIOPCIDevice *vdev; /* back pointer to device */
|
||||
int virq;
|
||||
bool use;
|
||||
} VFIOMSIVector;
|
||||
|
||||
enum {
|
||||
VFIO_INT_NONE = 0,
|
||||
VFIO_INT_INTx = 1,
|
||||
VFIO_INT_MSI = 2,
|
||||
VFIO_INT_MSIX = 3,
|
||||
};
|
||||
|
||||
/* Cache of MSI-X setup plus extra mmap and memory region for split BAR map */
|
||||
typedef struct VFIOMSIXInfo {
|
||||
uint8_t table_bar;
|
||||
uint8_t pba_bar;
|
||||
uint16_t entries;
|
||||
uint32_t table_offset;
|
||||
uint32_t pba_offset;
|
||||
MemoryRegion mmap_mem;
|
||||
void *mmap;
|
||||
} VFIOMSIXInfo;
|
||||
|
||||
typedef struct VFIOPCIDevice {
|
||||
PCIDevice pdev;
|
||||
VFIODevice vbasedev;
|
||||
VFIOINTx intx;
|
||||
unsigned int config_size;
|
||||
uint8_t *emulated_config_bits; /* QEMU emulated bits, little-endian */
|
||||
off_t config_offset; /* Offset of config space region within device fd */
|
||||
unsigned int rom_size;
|
||||
off_t rom_offset; /* Offset of ROM region within device fd */
|
||||
void *rom;
|
||||
int msi_cap_size;
|
||||
VFIOMSIVector *msi_vectors;
|
||||
VFIOMSIXInfo *msix;
|
||||
int nr_vectors; /* Number of MSI/MSIX vectors currently in use */
|
||||
int interrupt; /* Current interrupt type */
|
||||
VFIOBAR bars[PCI_NUM_REGIONS - 1]; /* No ROM */
|
||||
VFIOVGA vga; /* 0xa0000, 0x3b0, 0x3c0 */
|
||||
PCIHostDeviceAddress host;
|
||||
EventNotifier err_notifier;
|
||||
EventNotifier req_notifier;
|
||||
int (*resetfn)(struct VFIOPCIDevice *);
|
||||
uint32_t vendor_id;
|
||||
uint32_t device_id;
|
||||
uint32_t sub_vendor_id;
|
||||
uint32_t sub_device_id;
|
||||
uint32_t features;
|
||||
#define VFIO_FEATURE_ENABLE_VGA_BIT 0
|
||||
#define VFIO_FEATURE_ENABLE_VGA (1 << VFIO_FEATURE_ENABLE_VGA_BIT)
|
||||
#define VFIO_FEATURE_ENABLE_REQ_BIT 1
|
||||
#define VFIO_FEATURE_ENABLE_REQ (1 << VFIO_FEATURE_ENABLE_REQ_BIT)
|
||||
int32_t bootindex;
|
||||
uint8_t pm_cap;
|
||||
bool has_vga;
|
||||
bool pci_aer;
|
||||
bool req_enabled;
|
||||
bool has_flr;
|
||||
bool has_pm_reset;
|
||||
bool rom_read_failed;
|
||||
bool no_kvm_intx;
|
||||
bool no_kvm_msi;
|
||||
bool no_kvm_msix;
|
||||
} VFIOPCIDevice;
|
||||
|
||||
uint32_t vfio_pci_read_config(PCIDevice *pdev, uint32_t addr, int len);
|
||||
void vfio_pci_write_config(PCIDevice *pdev,
|
||||
uint32_t addr, uint32_t val, int len);
|
||||
|
||||
uint64_t vfio_vga_read(void *opaque, hwaddr addr, unsigned size);
|
||||
void vfio_vga_write(void *opaque, hwaddr addr, uint64_t data, unsigned size);
|
||||
|
||||
bool vfio_blacklist_opt_rom(VFIOPCIDevice *vdev);
|
||||
void vfio_vga_quirk_setup(VFIOPCIDevice *vdev);
|
||||
void vfio_vga_quirk_teardown(VFIOPCIDevice *vdev);
|
||||
void vfio_vga_quirk_free(VFIOPCIDevice *vdev);
|
||||
void vfio_bar_quirk_setup(VFIOPCIDevice *vdev, int nr);
|
||||
void vfio_bar_quirk_teardown(VFIOPCIDevice *vdev, int nr);
|
||||
void vfio_bar_quirk_free(VFIOPCIDevice *vdev, int nr);
|
||||
void vfio_setup_resetfn_quirk(VFIOPCIDevice *vdev);
|
||||
|
||||
#endif /* HW_VFIO_VFIO_PCI_H */
|
|
@ -678,7 +678,7 @@ static const VMStateDescription vfio_platform_vmstate = {
|
|||
|
||||
static Property vfio_platform_dev_properties[] = {
|
||||
DEFINE_PROP_STRING("host", VFIOPlatformDevice, vbasedev.name),
|
||||
DEFINE_PROP_BOOL("x-mmap", VFIOPlatformDevice, vbasedev.allow_mmap, true),
|
||||
DEFINE_PROP_BOOL("x-no-mmap", VFIOPlatformDevice, vbasedev.no_mmap, false),
|
||||
DEFINE_PROP_UINT32("mmap-timeout-ms", VFIOPlatformDevice,
|
||||
mmap_timeout, 1100),
|
||||
DEFINE_PROP_BOOL("x-irqfd", VFIOPlatformDevice, irqfd_allowed, true),
|
||||
|
|
|
@ -35,11 +35,6 @@
|
|||
do { } while (0)
|
||||
#endif
|
||||
|
||||
/* Extra debugging, trap acceleration paths for more logging */
|
||||
#define VFIO_ALLOW_KVM_INTX 1
|
||||
#define VFIO_ALLOW_KVM_MSI 1
|
||||
#define VFIO_ALLOW_KVM_MSIX 1
|
||||
|
||||
enum {
|
||||
VFIO_DEVICE_TYPE_PCI = 0,
|
||||
VFIO_DEVICE_TYPE_PLATFORM = 1,
|
||||
|
@ -102,7 +97,7 @@ typedef struct VFIODevice {
|
|||
int type;
|
||||
bool reset_works;
|
||||
bool needs_reset;
|
||||
bool allow_mmap;
|
||||
bool no_mmap;
|
||||
VFIODeviceOps *ops;
|
||||
unsigned int num_irqs;
|
||||
unsigned int num_regions;
|
||||
|
|
87
trace-events
87
trace-events
|
@ -1522,56 +1522,30 @@ xen_pv_mmio_write(uint64_t addr) "WARNING: write to Xen PV Device MMIO space (ad
|
|||
pci_cfg_read(const char *dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val) "%s %02u:%u @0x%x -> 0x%x"
|
||||
pci_cfg_write(const char *dev, unsigned devid, unsigned fnid, unsigned offs, unsigned val) "%s %02u:%u @0x%x <- 0x%x"
|
||||
|
||||
# hw/vfio/vfio-pci.c
|
||||
# hw/vfio/pci.c
|
||||
vfio_intx_interrupt(const char *name, char line) " (%s) Pin %c"
|
||||
vfio_eoi(const char *name) " (%s) EOI"
|
||||
vfio_enable_intx_kvm(const char *name) " (%s) KVM INTx accel enabled"
|
||||
vfio_disable_intx_kvm(const char *name) " (%s) KVM INTx accel disabled"
|
||||
vfio_update_irq(const char *name, int new_irq, int target_irq) " (%s) IRQ moved %d -> %d"
|
||||
vfio_enable_intx(const char *name) " (%s)"
|
||||
vfio_disable_intx(const char *name) " (%s)"
|
||||
vfio_intx_eoi(const char *name) " (%s) EOI"
|
||||
vfio_intx_enable_kvm(const char *name) " (%s) KVM INTx accel enabled"
|
||||
vfio_intx_disable_kvm(const char *name) " (%s) KVM INTx accel disabled"
|
||||
vfio_intx_update(const char *name, int new_irq, int target_irq) " (%s) IRQ moved %d -> %d"
|
||||
vfio_intx_enable(const char *name) " (%s)"
|
||||
vfio_intx_disable(const char *name) " (%s)"
|
||||
vfio_msi_interrupt(const char *name, int index, uint64_t addr, int data) " (%s) vector %d 0x%"PRIx64"/0x%x"
|
||||
vfio_msix_vector_do_use(const char *name, int index) " (%s) vector %d used"
|
||||
vfio_msix_vector_release(const char *name, int index) " (%s) vector %d released"
|
||||
vfio_enable_msix(const char *name) " (%s)"
|
||||
vfio_enable_msi(const char *name, int nr_vectors) " (%s) Enabled %d MSI vectors"
|
||||
vfio_disable_msix(const char *name) " (%s)"
|
||||
vfio_disable_msi(const char *name) " (%s)"
|
||||
vfio_msix_enable(const char *name) " (%s)"
|
||||
vfio_msix_disable(const char *name) " (%s)"
|
||||
vfio_msi_enable(const char *name, int nr_vectors) " (%s) Enabled %d MSI vectors"
|
||||
vfio_msi_disable(const char *name) " (%s)"
|
||||
vfio_pci_load_rom(const char *name, unsigned long size, unsigned long offset, unsigned long flags) "Device %s ROM:\n size: 0x%lx, offset: 0x%lx, flags: 0x%lx"
|
||||
vfio_rom_read(const char *name, uint64_t addr, int size, uint64_t data) " (%s, 0x%"PRIx64", 0x%x) = 0x%"PRIx64
|
||||
vfio_pci_size_rom(const char *name, int size) "%s ROM size 0x%x"
|
||||
vfio_vga_write(uint64_t addr, uint64_t data, int size) " (0x%"PRIx64", 0x%"PRIx64", %d)"
|
||||
vfio_vga_read(uint64_t addr, int size, uint64_t data) " (0x%"PRIx64", %d) = 0x%"PRIx64
|
||||
# remove ) =
|
||||
vfio_generic_window_quirk_read(const char * region_name, const char *name, int index, uint64_t addr, int size, uint64_t data) "%s read(%s:BAR%d+0x%"PRIx64", %d = 0x%"PRIx64
|
||||
## remove )
|
||||
vfio_generic_window_quirk_write(const char * region_name, const char *name, int index, uint64_t addr, uint64_t data, int size) "%s write(%s:BAR%d+0x%"PRIx64", 0x%"PRIx64", %d"
|
||||
# remove ) =
|
||||
vfio_generic_quirk_read(const char * region_name, const char *name, int index, uint64_t addr, int size, uint64_t data) "%s read(%s:BAR%d+0x%"PRIx64", %d = 0x%"PRIx64
|
||||
# remove )
|
||||
vfio_generic_quirk_write(const char * region_name, const char *name, int index, uint64_t addr, uint64_t data, int size) "%s write(%s:BAR%d+0x%"PRIx64", 0x%"PRIx64", %d"
|
||||
vfio_ati_3c3_quirk_read(uint64_t data) " (0x3c3, 1) = 0x%"PRIx64
|
||||
vfio_vga_probe_ati_3c3_quirk(const char *name) "Enabled ATI/AMD quirk 0x3c3 BAR4for device %s"
|
||||
vfio_probe_ati_bar4_window_quirk(const char *name) "Enabled ATI/AMD BAR4 window quirk for device %s"
|
||||
#issue with )
|
||||
vfio_rtl8168_window_quirk_read_fake(const char *region_name, const char *name) "%s fake read(%s"
|
||||
vfio_rtl8168_window_quirk_read_table(const char *region_name, const char *name) "%s MSI-X table read(%s"
|
||||
vfio_rtl8168_window_quirk_read_direct(const char *region_name, const char *name) "%s direct read(%s"
|
||||
vfio_rtl8168_window_quirk_write_table(const char *region_name, const char *name) "%s MSI-X table write(%s"
|
||||
vfio_rtl8168_window_quirk_write_direct(const char *region_name, const char *name) "%s direct write(%s"
|
||||
vfio_probe_rtl8168_bar2_window_quirk(const char *name) "Enabled RTL8168 BAR2 window quirk for device %s"
|
||||
vfio_probe_ati_bar2_4000_quirk(const char *name) "Enabled ATI/AMD BAR2 0x4000 quirk for device %s"
|
||||
vfio_nvidia_3d0_quirk_read(int size, uint64_t data) " (0x3d0, %d) = 0x%"PRIx64
|
||||
vfio_nvidia_3d0_quirk_write(uint64_t data, int size) " (0x3d0, 0x%"PRIx64", %d)"
|
||||
vfio_vga_probe_nvidia_3d0_quirk(const char *name) "Enabled NVIDIA VGA 0x3d0 quirk for device %s"
|
||||
vfio_probe_nvidia_bar5_window_quirk(const char *name) "Enabled NVIDIA BAR5 window quirk for device %s"
|
||||
vfio_probe_nvidia_bar0_88000_quirk(const char *name) "Enabled NVIDIA BAR0 0x88000 quirk for device %s"
|
||||
vfio_probe_nvidia_bar0_1800_quirk_id(int id) "Nvidia NV%02x"
|
||||
vfio_probe_nvidia_bar0_1800_quirk(const char *name) "Enabled NVIDIA BAR0 0x1800 quirk for device %s"
|
||||
vfio_pci_read_config(const char *name, int addr, int len, int val) " (%s, @0x%x, len=0x%x) %x"
|
||||
vfio_pci_write_config(const char *name, int addr, int val, int len) " (%s, @0x%x, 0x%x, len=0x%x)"
|
||||
vfio_setup_msi(const char *name, int pos) "%s PCI MSI CAP @0x%x"
|
||||
vfio_early_setup_msix(const char *name, int pos, int table_bar, int offset, int entries) "%s PCI MSI-X CAP @0x%x, BAR %d, offset 0x%x, entries %d"
|
||||
vfio_msi_setup(const char *name, int pos) "%s PCI MSI CAP @0x%x"
|
||||
vfio_msix_early_setup(const char *name, int pos, int table_bar, int offset, int entries) "%s PCI MSI-X CAP @0x%x, BAR %d, offset 0x%x, entries %d"
|
||||
vfio_check_pcie_flr(const char *name) "%s Supports FLR via PCIe cap"
|
||||
vfio_check_pm_reset(const char *name) "%s Supports PM reset"
|
||||
vfio_check_af_flr(const char *name) "%s Supports FLR via AF cap"
|
||||
|
@ -1586,6 +1560,41 @@ vfio_initfn(const char *name, int group_id) " (%s) group %d"
|
|||
vfio_pci_reset(const char *name) " (%s)"
|
||||
vfio_pci_reset_flr(const char *name) "%s FLR/VFIO_DEVICE_RESET"
|
||||
vfio_pci_reset_pm(const char *name) "%s PCI PM Reset"
|
||||
vfio_pci_emulated_vendor_id(const char *name, uint16_t val) "%s %04x"
|
||||
vfio_pci_emulated_device_id(const char *name, uint16_t val) "%s %04x"
|
||||
vfio_pci_emulated_sub_vendor_id(const char *name, uint16_t val) "%s %04x"
|
||||
vfio_pci_emulated_sub_device_id(const char *name, uint16_t val) "%s %04x"
|
||||
|
||||
# hw/vfio/pci-quirks.
|
||||
vfio_quirk_rom_blacklisted(const char *name, uint16_t vid, uint16_t did) "%s %04x:%04x"
|
||||
vfio_quirk_generic_window_address_write(const char *name, const char * region_name, uint64_t data) "%s %s 0x%"PRIx64
|
||||
vfio_quirk_generic_window_data_read(const char *name, const char * region_name, uint64_t data) "%s %s 0x%"PRIx64
|
||||
vfio_quirk_generic_window_data_write(const char *name, const char * region_name, uint64_t data) "%s %s 0x%"PRIx64
|
||||
vfio_quirk_generic_mirror_read(const char *name, const char * region_name, uint64_t addr, uint64_t data) "%s %s 0x%"PRIx64": 0x%"PRIx64
|
||||
vfio_quirk_generic_mirror_write(const char *name, const char * region_name, uint64_t addr, uint64_t data) "%s %s 0x%"PRIx64": 0x%"PRIx64
|
||||
vfio_quirk_ati_3c3_read(const char *name, uint64_t data) "%s 0x%"PRIx64
|
||||
vfio_quirk_ati_3c3_probe(const char *name) "%s"
|
||||
vfio_quirk_ati_bar4_probe(const char *name) "%s"
|
||||
vfio_quirk_ati_bar2_probe(const char *name) "%s"
|
||||
vfio_quirk_nvidia_3d0_state(const char *name, const char *state) "%s %s"
|
||||
vfio_quirk_nvidia_3d0_read(const char *name, uint8_t offset, unsigned size, uint64_t val) " (%s, @0x%x, len=0x%x) %"PRIx64
|
||||
vfio_quirk_nvidia_3d0_write(const char *name, uint8_t offset, uint64_t data, unsigned size) "(%s, @0x%x, 0x%"PRIx64", len=0x%x)"
|
||||
vfio_quirk_nvidia_3d0_probe(const char *name) "%s"
|
||||
vfio_quirk_nvidia_bar5_state(const char *name, const char *state) "%s %s"
|
||||
vfio_quirk_nvidia_bar5_probe(const char *name) "%s"
|
||||
vfio_quirk_nvidia_bar0_msi_ack(const char *name) "%s"
|
||||
vfio_quirk_nvidia_bar0_probe(const char *name) "%s"
|
||||
vfio_quirk_rtl8168_fake_latch(const char *name, uint64_t val) "%s 0x%"PRIx64
|
||||
vfio_quirk_rtl8168_msix_write(const char *name, uint16_t offset, uint64_t val) "%s MSI-X table write[0x%x]: 0x%"PRIx64
|
||||
vfio_quirk_rtl8168_msix_read(const char *name, uint16_t offset, uint64_t val) "%s MSI-X table read[0x%x]: 0x%"PRIx64
|
||||
vfio_quirk_rtl8168_probe(const char *name) "%s"
|
||||
|
||||
vfio_quirk_ati_bonaire_reset_skipped(const char *name) "%s"
|
||||
vfio_quirk_ati_bonaire_reset_no_smc(const char *name) "%s"
|
||||
vfio_quirk_ati_bonaire_reset_timeout(const char *name) "%s"
|
||||
vfio_quirk_ati_bonaire_reset_done(const char *name) "%s"
|
||||
vfio_quirk_ati_bonaire_reset(const char *name) "%s"
|
||||
|
||||
|
||||
# hw/vfio/vfio-common.c
|
||||
vfio_region_write(const char *name, int index, uint64_t addr, uint64_t data, unsigned size) " (%s:region%d+0x%"PRIx64", 0x%"PRIx64 ", %d)"
|
||||
|
|
Loading…
Reference in a new issue