0001
0002 #ifndef _LINUX_VIRTIO_H
0003 #define _LINUX_VIRTIO_H
0004
0005
0006 #include <linux/types.h>
0007 #include <linux/scatterlist.h>
0008 #include <linux/spinlock.h>
0009 #include <linux/device.h>
0010 #include <linux/mod_devicetable.h>
0011 #include <linux/gfp.h>
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 struct virtqueue {
0030 struct list_head list;
0031 void (*callback)(struct virtqueue *vq);
0032 const char *name;
0033 struct virtio_device *vdev;
0034 unsigned int index;
0035 unsigned int num_free;
0036 unsigned int num_max;
0037 void *priv;
0038 bool reset;
0039 };
0040
0041 int virtqueue_add_outbuf(struct virtqueue *vq,
0042 struct scatterlist sg[], unsigned int num,
0043 void *data,
0044 gfp_t gfp);
0045
0046 int virtqueue_add_inbuf(struct virtqueue *vq,
0047 struct scatterlist sg[], unsigned int num,
0048 void *data,
0049 gfp_t gfp);
0050
0051 int virtqueue_add_inbuf_ctx(struct virtqueue *vq,
0052 struct scatterlist sg[], unsigned int num,
0053 void *data,
0054 void *ctx,
0055 gfp_t gfp);
0056
0057 int virtqueue_add_sgs(struct virtqueue *vq,
0058 struct scatterlist *sgs[],
0059 unsigned int out_sgs,
0060 unsigned int in_sgs,
0061 void *data,
0062 gfp_t gfp);
0063
0064 bool virtqueue_kick(struct virtqueue *vq);
0065
0066 bool virtqueue_kick_prepare(struct virtqueue *vq);
0067
0068 bool virtqueue_notify(struct virtqueue *vq);
0069
0070 void *virtqueue_get_buf(struct virtqueue *vq, unsigned int *len);
0071
0072 void *virtqueue_get_buf_ctx(struct virtqueue *vq, unsigned int *len,
0073 void **ctx);
0074
0075 void virtqueue_disable_cb(struct virtqueue *vq);
0076
0077 bool virtqueue_enable_cb(struct virtqueue *vq);
0078
0079 unsigned virtqueue_enable_cb_prepare(struct virtqueue *vq);
0080
0081 bool virtqueue_poll(struct virtqueue *vq, unsigned);
0082
0083 bool virtqueue_enable_cb_delayed(struct virtqueue *vq);
0084
0085 void *virtqueue_detach_unused_buf(struct virtqueue *vq);
0086
0087 unsigned int virtqueue_get_vring_size(struct virtqueue *vq);
0088
0089 bool virtqueue_is_broken(struct virtqueue *vq);
0090
0091 const struct vring *virtqueue_get_vring(struct virtqueue *vq);
0092 dma_addr_t virtqueue_get_desc_addr(struct virtqueue *vq);
0093 dma_addr_t virtqueue_get_avail_addr(struct virtqueue *vq);
0094 dma_addr_t virtqueue_get_used_addr(struct virtqueue *vq);
0095
0096 int virtqueue_resize(struct virtqueue *vq, u32 num,
0097 void (*recycle)(struct virtqueue *vq, void *buf));
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114 struct virtio_device {
0115 int index;
0116 bool failed;
0117 bool config_enabled;
0118 bool config_change_pending;
0119 spinlock_t config_lock;
0120 spinlock_t vqs_list_lock;
0121 struct device dev;
0122 struct virtio_device_id id;
0123 const struct virtio_config_ops *config;
0124 const struct vringh_config_ops *vringh_config;
0125 struct list_head vqs;
0126 u64 features;
0127 void *priv;
0128 };
0129
0130 static inline struct virtio_device *dev_to_virtio(struct device *_dev)
0131 {
0132 return container_of(_dev, struct virtio_device, dev);
0133 }
0134
0135 void virtio_add_status(struct virtio_device *dev, unsigned int status);
0136 int register_virtio_device(struct virtio_device *dev);
0137 void unregister_virtio_device(struct virtio_device *dev);
0138 bool is_virtio_device(struct device *dev);
0139
0140 void virtio_break_device(struct virtio_device *dev);
0141 void __virtio_unbreak_device(struct virtio_device *dev);
0142
0143 void __virtqueue_break(struct virtqueue *_vq);
0144 void __virtqueue_unbreak(struct virtqueue *_vq);
0145
0146 void virtio_config_changed(struct virtio_device *dev);
0147 #ifdef CONFIG_PM_SLEEP
0148 int virtio_device_freeze(struct virtio_device *dev);
0149 int virtio_device_restore(struct virtio_device *dev);
0150 #endif
0151 void virtio_reset_device(struct virtio_device *dev);
0152
0153 size_t virtio_max_dma_size(struct virtio_device *vdev);
0154
0155 #define virtio_device_for_each_vq(vdev, vq) \
0156 list_for_each_entry(vq, &vdev->vqs, list)
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175 struct virtio_driver {
0176 struct device_driver driver;
0177 const struct virtio_device_id *id_table;
0178 const unsigned int *feature_table;
0179 unsigned int feature_table_size;
0180 const unsigned int *feature_table_legacy;
0181 unsigned int feature_table_size_legacy;
0182 int (*validate)(struct virtio_device *dev);
0183 int (*probe)(struct virtio_device *dev);
0184 void (*scan)(struct virtio_device *dev);
0185 void (*remove)(struct virtio_device *dev);
0186 void (*config_changed)(struct virtio_device *dev);
0187 #ifdef CONFIG_PM
0188 int (*freeze)(struct virtio_device *dev);
0189 int (*restore)(struct virtio_device *dev);
0190 #endif
0191 };
0192
0193 static inline struct virtio_driver *drv_to_virtio(struct device_driver *drv)
0194 {
0195 return container_of(drv, struct virtio_driver, driver);
0196 }
0197
0198 int register_virtio_driver(struct virtio_driver *drv);
0199 void unregister_virtio_driver(struct virtio_driver *drv);
0200
0201
0202
0203
0204
0205
0206 #define module_virtio_driver(__virtio_driver) \
0207 module_driver(__virtio_driver, register_virtio_driver, \
0208 unregister_virtio_driver)
0209 #endif