| #ifndef _LINUX_VIRTIO_WL_H |
| #define _LINUX_VIRTIO_WL_H |
| /* |
| * This header is BSD licensed so anyone can use the definitions to implement |
| * compatible drivers/servers. |
| */ |
| #include <linux/virtio_ids.h> |
| #include <linux/virtio_config.h> |
| #include <linux/virtwl.h> |
| |
| #define VIRTWL_IN_BUFFER_SIZE 4096 |
| #define VIRTWL_OUT_BUFFER_SIZE 4096 |
| #define VIRTWL_VQ_IN 0 |
| #define VIRTWL_VQ_OUT 1 |
| #define VIRTWL_QUEUE_COUNT 2 |
| #define VIRTWL_MAX_QUEUES 4 |
| #define VIRTWL_MAX_ALLOC 0x800 |
| #define VIRTWL_PFN_SHIFT 12 |
| |
| /* Enables the transition to new flag semantics */ |
| #define VIRTIO_WL_F_TRANS_FLAGS 1 |
| |
| /* Enables virtio-magma child device */ |
| #define VIRTIO_WL_F_MAGMA 2 |
| |
| struct virtio_wl_config { |
| }; |
| |
| /* |
| * The structure of each of these is virtio_wl_ctrl_hdr or one of its subclasses |
| * where noted. |
| */ |
| enum virtio_wl_ctrl_type { |
| VIRTIO_WL_CMD_VFD_NEW = 0x100, /* virtio_wl_ctrl_vfd_new */ |
| VIRTIO_WL_CMD_VFD_CLOSE, /* virtio_wl_ctrl_vfd */ |
| VIRTIO_WL_CMD_VFD_SEND, /* virtio_wl_ctrl_vfd_send + data */ |
| VIRTIO_WL_CMD_VFD_RECV, /* virtio_wl_ctrl_vfd_recv + data */ |
| VIRTIO_WL_CMD_VFD_NEW_CTX, /* virtio_wl_ctrl_vfd_new */ |
| VIRTIO_WL_CMD_VFD_NEW_PIPE, /* virtio_wl_ctrl_vfd_new */ |
| VIRTIO_WL_CMD_VFD_HUP, /* virtio_wl_ctrl_vfd */ |
| VIRTIO_WL_CMD_VFD_NEW_DMABUF, /* virtio_wl_ctrl_vfd_new */ |
| VIRTIO_WL_CMD_VFD_DMABUF_SYNC, /* virtio_wl_ctrl_vfd_dmabuf_sync */ |
| |
| VIRTIO_WL_RESP_OK = 0x1000, |
| VIRTIO_WL_RESP_VFD_NEW = 0x1001, /* virtio_wl_ctrl_vfd_new */ |
| VIRTIO_WL_RESP_VFD_NEW_DMABUF = 0x1002, /* virtio_wl_ctrl_vfd_new */ |
| |
| VIRTIO_WL_RESP_ERR = 0x1100, |
| VIRTIO_WL_RESP_OUT_OF_MEMORY, |
| VIRTIO_WL_RESP_INVALID_ID, |
| VIRTIO_WL_RESP_INVALID_TYPE, |
| VIRTIO_WL_RESP_INVALID_FLAGS, |
| VIRTIO_WL_RESP_INVALID_CMD, |
| }; |
| |
| struct virtio_wl_ctrl_hdr { |
| __le32 type; /* one of virtio_wl_ctrl_type */ |
| __le32 flags; /* always 0 */ |
| }; |
| |
| enum virtio_wl_vfd_flags { |
| VIRTIO_WL_VFD_WRITE = 0x1, /* intended to be written by guest */ |
| VIRTIO_WL_VFD_READ = 0x2, /* intended to be read by guest */ |
| }; |
| |
| struct virtio_wl_ctrl_vfd { |
| struct virtio_wl_ctrl_hdr hdr; |
| __le32 vfd_id; |
| }; |
| |
| /* |
| * If this command is sent to the guest, it indicates that the VFD has been |
| * created and the fields indicate the properties of the VFD being offered. |
| * |
| * If this command is sent to the host, it represents a request to create a VFD |
| * of the given properties. The pfn field is ignored by the host. |
| */ |
| struct virtio_wl_ctrl_vfd_new { |
| struct virtio_wl_ctrl_hdr hdr; |
| __le32 vfd_id; /* MSB indicates device allocated vfd */ |
| __le32 flags; /* virtio_wl_vfd_flags */ |
| __le64 pfn; /* first guest physical page frame number if VFD_MAP */ |
| __le32 size; /* size in bytes if VIRTIO_WL_CMD_VFD_NEW* */ |
| /* buffer description if VIRTIO_WL_CMD_VFD_NEW_DMABUF */ |
| struct { |
| __le32 width; /* width in pixels */ |
| __le32 height; /* height in pixels */ |
| __le32 format; /* fourcc format */ |
| __le32 stride0; /* return stride0 */ |
| __le32 stride1; /* return stride1 */ |
| __le32 stride2; /* return stride2 */ |
| __le32 offset0; /* return offset0 */ |
| __le32 offset1; /* return offset1 */ |
| __le32 offset2; /* return offset2 */ |
| } dmabuf; |
| }; |
| |
| struct virtio_wl_ctrl_vfd_send { |
| struct virtio_wl_ctrl_hdr hdr; |
| __le32 vfd_id; |
| __le32 vfd_count; /* struct is followed by this many IDs */ |
| /* the remainder is raw data */ |
| }; |
| |
| struct virtio_wl_ctrl_vfd_recv { |
| struct virtio_wl_ctrl_hdr hdr; |
| __le32 vfd_id; |
| __le32 vfd_count; /* struct is followed by this many IDs */ |
| /* the remainder is raw data */ |
| }; |
| |
| struct virtio_wl_ctrl_vfd_dmabuf_sync { |
| struct virtio_wl_ctrl_hdr hdr; |
| __le32 vfd_id; |
| __le32 flags; |
| }; |
| |
| #endif /* _LINUX_VIRTIO_WL_H */ |