#ifndef _LINUX_VIRTWL_H #define _LINUX_VIRTWL_H #include #include #define VIRTWL_SEND_MAX_ALLOCS 28 #define VIRTWL_IOCTL_BASE 'w' #define VIRTWL_IO(nr) _IO(VIRTWL_IOCTL_BASE, nr) #define VIRTWL_IOR(nr, type) _IOR(VIRTWL_IOCTL_BASE, nr, type) #define VIRTWL_IOW(nr, type) _IOW(VIRTWL_IOCTL_BASE, nr, type) #define VIRTWL_IOWR(nr, type) _IOWR(VIRTWL_IOCTL_BASE, nr, type) enum virtwl_ioctl_new_type { VIRTWL_IOCTL_NEW_CTX, /* open a new wayland connection context */ VIRTWL_IOCTL_NEW_ALLOC, /* create a new virtwl shm allocation */ /* create a new virtwl pipe that is readable via the returned fd */ VIRTWL_IOCTL_NEW_PIPE_READ, /* create a new virtwl pipe that is writable via the returned fd */ VIRTWL_IOCTL_NEW_PIPE_WRITE, /* create a new virtwl dmabuf that is writable via the returned fd */ VIRTWL_IOCTL_NEW_DMABUF, }; struct virtwl_ioctl_new { __u32 type; /* VIRTWL_IOCTL_NEW_* */ int fd; /* return fd */ __u32 flags; /* currently always 0 */ union { /* size of allocation if type == VIRTWL_IOCTL_NEW_ALLOC */ __u32 size; /* buffer description if type == VIRTWL_IOCTL_NEW_DMABUF */ struct { __u32 width; /* width in pixels */ __u32 height; /* height in pixels */ __u32 format; /* fourcc format */ __u32 stride0; /* return stride0 */ __u32 stride1; /* return stride1 */ __u32 stride2; /* return stride2 */ __u32 offset0; /* return offset0 */ __u32 offset1; /* return offset1 */ __u32 offset2; /* return offset2 */ } dmabuf; }; }; struct virtwl_ioctl_txn { int fds[VIRTWL_SEND_MAX_ALLOCS]; __u32 len; __u8 data[0]; }; struct virtwl_ioctl_dmabuf_sync { __u32 flags; /* synchronization flags (see dma-buf.h) */ }; #define VIRTWL_IOCTL_NEW VIRTWL_IOWR(0x00, struct virtwl_ioctl_new) #define VIRTWL_IOCTL_SEND VIRTWL_IOR(0x01, struct virtwl_ioctl_txn) #define VIRTWL_IOCTL_RECV VIRTWL_IOW(0x02, struct virtwl_ioctl_txn) #define VIRTWL_IOCTL_DMABUF_SYNC VIRTWL_IOR(0x03, \ struct virtwl_ioctl_dmabuf_sync) #endif /* _LINUX_VIRTWL_H */