This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 89c49c53a755cf5fc91036940e9fccb042d6a233 Author: Bowen Wang <[email protected]> AuthorDate: Tue Oct 31 21:15:09 2023 +0800 virtio-mmio/pci: add alloc_buf/free_buf for mmio and pci transport layer And remove the virtio_alloc/free_buf implementation in virtio.c, because these two apis has been moved to the OpenAMP Signed-off-by: Bowen Wang <[email protected]> --- drivers/virtio/virtio-mmio.c | 31 +++++++++++++++++++++++++++++++ drivers/virtio/virtio-pci.c | 32 ++++++++++++++++++++++++++++++++ drivers/virtio/virtio.c | 42 ------------------------------------------ include/nuttx/virtio/virtio.h | 27 ++++++++++++--------------- 4 files changed, 75 insertions(+), 57 deletions(-) diff --git a/drivers/virtio/virtio-mmio.c b/drivers/virtio/virtio-mmio.c index 9c26fb5a66..c5fb423f28 100644 --- a/drivers/virtio/virtio-mmio.c +++ b/drivers/virtio/virtio-mmio.c @@ -196,6 +196,10 @@ static uint32_t virtio_mmio_get_queue_len(FAR struct metal_io_region *io, int idx); static int virtio_mmio_config_virtqueue(FAR struct metal_io_region *io, FAR struct virtqueue *vq); +static FAR void *virtio_mmio_alloc_buf(FAR struct virtio_device *vdev, + size_t size, size_t align); +static void virtio_mmio_free_buf(FAR struct virtio_device *vdev, + FAR void *buf); static int virtio_mmio_init_device(FAR struct virtio_mmio_device_s *vmdev, FAR void *regs, int irq); @@ -252,6 +256,12 @@ static const struct virtio_dispatch g_virtio_mmio_dispatch = virtio_mmio_notify, /* notify */ }; +static const struct virtio_memory_ops g_virtio_mmio_mmops = +{ + virtio_mmio_alloc_buf, /* Alloc */ + virtio_mmio_free_buf, /* Free */ +}; + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -749,6 +759,26 @@ static int virtio_mmio_interrupt(int irq, FAR void *context, FAR void *arg) return OK; } +/**************************************************************************** + * Name: virtio_mmio_alloc_buf + ****************************************************************************/ + +static FAR void *virtio_mmio_alloc_buf(FAR struct virtio_device *vdev, + size_t size, size_t align) +{ + return kmm_memalign(align, size); +} + +/**************************************************************************** + * Name: virtio_mmio_free_buf + ****************************************************************************/ + +static void virtio_mmio_free_buf(FAR struct virtio_device *vdev, + FAR void *buf) +{ + kmm_free(buf); +} + /**************************************************************************** * Name: virtio_mmio_init_device ****************************************************************************/ @@ -778,6 +808,7 @@ static int virtio_mmio_init_device(FAR struct virtio_mmio_device_s *vmdev, vdev->role = VIRTIO_DEV_DRIVER; vdev->func = &g_virtio_mmio_dispatch; + vdev->mmops = &g_virtio_mmio_mmops; magic = metal_io_read32(&vmdev->cfg_io, VIRTIO_MMIO_MAGIC_VALUE); if (magic != VIRTIO_MMIO_MAGIC_VALUE_STRING) diff --git a/drivers/virtio/virtio-pci.c b/drivers/virtio/virtio-pci.c index 5c8eafd241..dd88fab518 100644 --- a/drivers/virtio/virtio-pci.c +++ b/drivers/virtio/virtio-pci.c @@ -45,6 +45,11 @@ * Private Function Prototypes ****************************************************************************/ +static FAR void *virtio_pci_alloc_buf(FAR struct virtio_device *vdev, + size_t size, size_t align); +static void virtio_pci_free_buf(FAR struct virtio_device *vdev, + FAR void *buf); + static int virtio_pci_probe(FAR struct pci_device_s *dev); static void virtio_pci_remove(FAR struct pci_device_s *dev); @@ -69,6 +74,12 @@ static struct pci_driver_s g_virtio_pci_drv = virtio_pci_remove }; +static const struct virtio_memory_ops g_virtio_pci_mmops = +{ + virtio_pci_alloc_buf, /* Alloc */ + virtio_pci_free_buf, /* Free */ +}; + /**************************************************************************** * Private Functions ****************************************************************************/ @@ -135,6 +146,26 @@ static void virtio_pci_wdog(wdparm_t arg) } #endif +/**************************************************************************** + * Name: virtio_pci_alloc_buf + ****************************************************************************/ + +static FAR void *virtio_pci_alloc_buf(FAR struct virtio_device *vdev, + size_t size, size_t align) +{ + return kmm_memalign(align, size); +} + +/**************************************************************************** + * Name: virtio_pci_free_buf + ****************************************************************************/ + +static void virtio_pci_free_buf(FAR struct virtio_device *vdev, + FAR void *buf) +{ + return kmm_free(buf); +} + /**************************************************************************** * Name: virtio_pci_probe ****************************************************************************/ @@ -163,6 +194,7 @@ static int virtio_pci_probe(FAR struct pci_device_s *dev) dev->priv = vpdev; vpdev->dev = dev; vdev = &vpdev->vdev; + vdev->mmops = &g_virtio_pci_mmops; /* Virtio device initialize */ diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 21508db483..1addf34b0b 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c @@ -72,48 +72,6 @@ static struct virtio_bus_s g_virtio_bus = * Public Functions ****************************************************************************/ -/**************************************************************************** - * Name: virtio_alloc_buf - ****************************************************************************/ - -FAR void *virtio_alloc_buf(FAR struct virtio_device *vdev, - size_t size, size_t align) -{ - if (align == 0) - { - return kmm_malloc(size); - } - else - { - return kmm_memalign(align, size); - } -} - -/**************************************************************************** - * Name: virtio_zalloc_buf - ****************************************************************************/ - -FAR void *virtio_zalloc_buf(FAR struct virtio_device *vdev, - size_t size, size_t align) -{ - FAR void *ptr = virtio_alloc_buf(vdev, size, align); - if (ptr != NULL) - { - memset(ptr, 0, size); - } - - return ptr; -} - -/**************************************************************************** - * Name: virtio_mmio_free_buf - ****************************************************************************/ - -void virtio_free_buf(FAR struct virtio_device *vdev, FAR void *buf) -{ - kmm_free(buf); -} - /**************************************************************************** * Name: virtio_register_drivers ****************************************************************************/ diff --git a/include/nuttx/virtio/virtio.h b/include/nuttx/virtio/virtio.h index 92f039af81..bef7383d80 100644 --- a/include/nuttx/virtio/virtio.h +++ b/include/nuttx/virtio/virtio.h @@ -208,6 +208,18 @@ extern "C" #define EXTERN extern #endif +static inline_function FAR void * +virtio_zalloc_buf(FAR struct virtio_device *vdev, size_t size, size_t align) +{ + FAR void *buf = virtio_alloc_buf(vdev, size, align); + if (buf != NULL) + { + memset(buf, 0, size); + } + + return buf; +} + /* Driver and device register/unregister function */ int virtio_register_driver(FAR struct virtio_driver *driver); @@ -216,21 +228,6 @@ int virtio_register_device(FAR struct virtio_device *device); int virtio_unregister_driver(FAR struct virtio_driver *driver); int virtio_unregister_device(FAR struct virtio_device *device); -/* Virtio alloc/free buffer API - * NOTE: - * For now, these three apis are implemented in NuttX, and direclty mapping - * to kmm_memalgin/kmm_free, so it's only compatible with virtio mmio - * transport for now. After the virtio remoteproc transport layer completed, - * these three apis should be moved to OpenAmp, and different transport layer - * provide different implementation. - */ - -FAR void *virtio_alloc_buf(FAR struct virtio_device *vdev, - size_t size, size_t align); -FAR void *virtio_zalloc_buf(FAR struct virtio_device *vdev, - size_t size, size_t align); -void virtio_free_buf(FAR struct virtio_device *vdev, FAR void *buf); - /* Virtio driver initailied function, called in NuttX driver_intialize() */ void virtio_register_drivers(void);
