diff options
author | jfgd <4610889+jfgd@users.noreply.github.com> | 2024-03-29 11:37:10 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-29 10:37:10 +0000 |
commit | 143b4f840b07990a759d0e7328475bdf90d7d6ba (patch) | |
tree | f1f8c906c3e2495639baaf0f5cf6bfd95b3d305c /test/py | |
parent | b646559cc90f1a1f475fc47048bbbd955e20f4a2 (diff) | |
download | libvfio-user-143b4f840b07990a759d0e7328475bdf90d7d6ba.zip libvfio-user-143b4f840b07990a759d0e7328475bdf90d7d6ba.tar.gz libvfio-user-143b4f840b07990a759d0e7328475bdf90d7d6ba.tar.bz2 |
Support 64 bits and prefetchable BARs (#792)
* Support 64 bits and prefetchable BARs
Add two new flags for lib user to request 64bits and/or prefetchable
BARs.
Tested with a vfio-user client patched QEMU.
Signed-off-by: Jérémy Fanguède <jfanguede@kalrayinc.com>
Diffstat (limited to 'test/py')
-rw-r--r-- | test/py/libvfio_user.py | 9 | ||||
-rw-r--r-- | test/py/test_vfu_realize_ctx.py | 20 |
2 files changed, 27 insertions, 2 deletions
diff --git a/test/py/libvfio_user.py b/test/py/libvfio_user.py index 289f10a..976590c 100644 --- a/test/py/libvfio_user.py +++ b/test/py/libvfio_user.py @@ -84,6 +84,13 @@ PCI_EXT_CAP_DSN_SIZEOF = 12 PCI_EXT_CAP_VNDR_HDR_SIZEOF = 8 +PCI_BASE_ADDRESS_SPACE_IO = 0x01 +PCI_BASE_ADDRESS_SPACE_MEMORY = 0x00 +PCI_BASE_ADDRESS_MEM_TYPE_32 = 0x00 +PCI_BASE_ADDRESS_MEM_TYPE_1M = 0x02 +PCI_BASE_ADDRESS_MEM_TYPE_64 = 0x04 +PCI_BASE_ADDRESS_MEM_PREFETCH = 0x08 + # MSI registers PCI_MSI_FLAGS = 2 # Message Control offset PCI_MSI_ADDRESS_LO = 4 # Message Address offset @@ -201,6 +208,8 @@ VFU_REGION_FLAG_WRITE = 2 VFU_REGION_FLAG_RW = (VFU_REGION_FLAG_READ | VFU_REGION_FLAG_WRITE) VFU_REGION_FLAG_MEM = 4 VFU_REGION_FLAG_ALWAYS_CB = 8 +VFU_REGION_FLAG_64_BITS = 16 +VFU_REGION_FLAG_PREFETCH = 32 VFIO_USER_F_DMA_REGION_READ = (1 << 0) VFIO_USER_F_DMA_REGION_WRITE = (1 << 1) diff --git a/test/py/test_vfu_realize_ctx.py b/test/py/test_vfu_realize_ctx.py index ab0b86a..4b001a4 100644 --- a/test/py/test_vfu_realize_ctx.py +++ b/test/py/test_vfu_realize_ctx.py @@ -73,14 +73,30 @@ def test_vfu_realize_ctx_pci_bars(): ret = vfu_setup_region(ctx, index=VFU_PCI_DEV_BAR1_REGION_IDX, size=4096, flags=(VFU_REGION_FLAG_RW | VFU_REGION_FLAG_MEM)) assert ret == 0 + ret = vfu_setup_region(ctx, index=VFU_PCI_DEV_BAR2_REGION_IDX, + size=1048576, + flags=(VFU_REGION_FLAG_RW | VFU_REGION_FLAG_MEM + | VFU_REGION_FLAG_64_BITS)) + assert ret == 0 + ret = vfu_setup_region(ctx, index=VFU_PCI_DEV_BAR4_REGION_IDX, + size=1073741824, + flags=(VFU_REGION_FLAG_RW | VFU_REGION_FLAG_MEM + | VFU_REGION_FLAG_64_BITS + | VFU_REGION_FLAG_PREFETCH)) + assert ret == 0 ret = vfu_realize_ctx(ctx) assert ret == 0 # region_type should be set non-MEM BAR, unset otherwise hdr = get_pci_header(ctx) - assert hdr.bars[0].io == 0x1 - assert hdr.bars[1].io == 0 + assert hdr.bars[0].io == PCI_BASE_ADDRESS_SPACE_IO + assert hdr.bars[1].mem == PCI_BASE_ADDRESS_SPACE_MEMORY + assert hdr.bars[2].mem == (PCI_BASE_ADDRESS_SPACE_MEMORY + | PCI_BASE_ADDRESS_MEM_TYPE_64) + assert hdr.bars[4].mem == (PCI_BASE_ADDRESS_SPACE_MEMORY + | PCI_BASE_ADDRESS_MEM_TYPE_64 + | PCI_BASE_ADDRESS_MEM_PREFETCH) vfu_destroy_ctx(ctx) |