root/drivers/nvdimm/virtio_pmem.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * virtio_pmem.h: virtio pmem Driver
   4  *
   5  * Discovers persistent memory range information
   6  * from host and provides a virtio based flushing
   7  * interface.
   8  **/
   9 
  10 #ifndef _LINUX_VIRTIO_PMEM_H
  11 #define _LINUX_VIRTIO_PMEM_H
  12 
  13 #include <linux/module.h>
  14 #include <uapi/linux/virtio_pmem.h>
  15 #include <linux/libnvdimm.h>
  16 #include <linux/spinlock.h>
  17 
  18 struct virtio_pmem_request {
  19         struct virtio_pmem_req req;
  20         struct virtio_pmem_resp resp;
  21 
  22         /* Wait queue to process deferred work after ack from host */
  23         wait_queue_head_t host_acked;
  24         bool done;
  25 
  26         /* Wait queue to process deferred work after virt queue buffer avail */
  27         wait_queue_head_t wq_buf;
  28         bool wq_buf_avail;
  29         struct list_head list;
  30 };
  31 
  32 struct virtio_pmem {
  33         struct virtio_device *vdev;
  34 
  35         /* Virtio pmem request queue */
  36         struct virtqueue *req_vq;
  37 
  38         /* nvdimm bus registers virtio pmem device */
  39         struct nvdimm_bus *nvdimm_bus;
  40         struct nvdimm_bus_descriptor nd_desc;
  41 
  42         /* List to store deferred work if virtqueue is full */
  43         struct list_head req_list;
  44 
  45         /* Synchronize virtqueue data */
  46         spinlock_t pmem_lock;
  47 
  48         /* Memory region information */
  49         __u64 start;
  50         __u64 size;
  51 };
  52 
  53 void virtio_pmem_host_ack(struct virtqueue *vq);
  54 int async_pmem_flush(struct nd_region *nd_region, struct bio *bio);
  55 #endif

/* [<][>][^][v][top][bottom][index][help] */