Blame view

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