diff --git a/xf86drm_redox.h b/xf86drm_redox.h new file mode 100644 index 0000000..425b079 --- /dev/null +++ b/xf86drm_redox.h @@ -0,0 +1,180 @@ +#ifndef _XF86DRM_REDOX_H_ +#define _XF86DRM_REDOX_H_ + +#if defined(__redox__) + +#include +#include + +#define REDOX_DRM_IOCTL_BASE 0x00A0UL + +#define REDOX_LINUX_IOCTL_NR(request) ((unsigned long)((request) & 0xffUL)) +#define REDOX_LINUX_IOCTL_SIZE(request) (((unsigned long)(request) >> 16) & 0x3fffUL) + +#define REDOX_DRM_IOCTL_MODE_GETRESOURCES (REDOX_DRM_IOCTL_BASE + 0) +#define REDOX_DRM_IOCTL_MODE_SETCRTC (REDOX_DRM_IOCTL_BASE + 2) +#define REDOX_DRM_IOCTL_MODE_GETCRTC (REDOX_DRM_IOCTL_BASE + 3) +#define REDOX_DRM_IOCTL_MODE_GETENCODER (REDOX_DRM_IOCTL_BASE + 6) +#define REDOX_DRM_IOCTL_MODE_GETCONNECTOR (REDOX_DRM_IOCTL_BASE + 7) +#define REDOX_DRM_IOCTL_MODE_PAGE_FLIP (REDOX_DRM_IOCTL_BASE + 16) +#define REDOX_DRM_IOCTL_MODE_CREATE_DUMB (REDOX_DRM_IOCTL_BASE + 18) +#define REDOX_DRM_IOCTL_MODE_MAP_DUMB (REDOX_DRM_IOCTL_BASE + 19) +#define REDOX_DRM_IOCTL_MODE_DESTROY_DUMB (REDOX_DRM_IOCTL_BASE + 20) +#define REDOX_DRM_IOCTL_MODE_ADDFB (REDOX_DRM_IOCTL_BASE + 21) +#define REDOX_DRM_IOCTL_MODE_RMFB (REDOX_DRM_IOCTL_BASE + 22) +#define REDOX_DRM_IOCTL_GET_CAP (REDOX_DRM_IOCTL_BASE + 23) +#define REDOX_DRM_IOCTL_SET_CLIENT_CAP (REDOX_DRM_IOCTL_BASE + 24) +#define REDOX_DRM_IOCTL_VERSION (REDOX_DRM_IOCTL_BASE + 25) +#define REDOX_DRM_IOCTL_GEM_CLOSE (REDOX_DRM_IOCTL_BASE + 27) +#define REDOX_DRM_IOCTL_PRIME_HANDLE_TO_FD (REDOX_DRM_IOCTL_BASE + 29) +#define REDOX_DRM_IOCTL_PRIME_FD_TO_HANDLE (REDOX_DRM_IOCTL_BASE + 30) +#define REDOX_DRM_IOCTL_VIRTGPU_MAP (REDOX_DRM_IOCTL_BASE + 31) +#define REDOX_DRM_IOCTL_VIRTGPU_EXECBUFFER (REDOX_DRM_IOCTL_BASE + 32) +#define REDOX_DRM_IOCTL_VIRTGPU_GETPARAM (REDOX_DRM_IOCTL_BASE + 33) +#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_CREATE (REDOX_DRM_IOCTL_BASE + 34) +#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_INFO (REDOX_DRM_IOCTL_BASE + 35) +#define REDOX_DRM_IOCTL_VIRTGPU_TRANSFER_FROM_HOST (REDOX_DRM_IOCTL_BASE + 36) +#define REDOX_DRM_IOCTL_VIRTGPU_TRANSFER_TO_HOST (REDOX_DRM_IOCTL_BASE + 37) +#define REDOX_DRM_IOCTL_VIRTGPU_WAIT (REDOX_DRM_IOCTL_BASE + 38) +#define REDOX_DRM_IOCTL_VIRTGPU_GET_CAPS (REDOX_DRM_IOCTL_BASE + 39) +#define REDOX_DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB (REDOX_DRM_IOCTL_BASE + 40) +#define REDOX_DRM_IOCTL_VIRTGPU_CONTEXT_INIT (REDOX_DRM_IOCTL_BASE + 41) + +#define REDOX_DRM_IOCTL_GET_MAGIC (REDOX_DRM_IOCTL_BASE + 33) +#define REDOX_DRM_IOCTL_AUTH_MAGIC (REDOX_DRM_IOCTL_BASE + 34) +#define REDOX_DRM_IOCTL_SET_MASTER (REDOX_DRM_IOCTL_BASE + 35) +#define REDOX_DRM_IOCTL_DROP_MASTER (REDOX_DRM_IOCTL_BASE + 36) +#define REDOX_DRM_IOCTL_GET_PCI_INFO (REDOX_DRM_IOCTL_BASE + 0x60) + +struct redox_drm_resources_wire { + uint32_t connector_count; + uint32_t crtc_count; + uint32_t encoder_count; +}; + +struct redox_drm_connector_wire { + uint32_t connector_id; + uint32_t connection; + uint32_t connector_type; + uint32_t mm_width; + uint32_t mm_height; + uint32_t encoder_id; + uint32_t mode_count; +}; + +struct redox_drm_mode_wire { + uint32_t clock; + uint16_t hdisplay; + uint16_t hsync_start; + uint16_t hsync_end; + uint16_t htotal; + uint16_t hskew; + uint16_t vdisplay; + uint16_t vsync_start; + uint16_t vsync_end; + uint16_t vtotal; + uint16_t vscan; + uint32_t vrefresh; + uint32_t flags; + uint32_t type; +}; + +struct redox_drm_set_crtc_wire { + uint32_t crtc_id; + uint32_t fb_handle; + uint32_t connector_count; + uint32_t connectors[8]; + struct redox_drm_mode_wire mode; +}; + +struct redox_drm_page_flip_wire { + uint32_t crtc_id; + uint32_t fb_handle; + uint32_t flags; +}; + +struct redox_drm_create_dumb_wire { + uint32_t width; + uint32_t height; + uint32_t bpp; + uint32_t flags; + uint32_t pitch; + uint32_t reserved0; + uint64_t size; + uint32_t handle; + uint32_t reserved1; +}; + +struct redox_drm_map_dumb_wire { + uint32_t handle; + uint32_t pad; + uint64_t offset; +}; + +struct redox_drm_destroy_dumb_wire { + uint32_t handle; +}; + +struct redox_drm_add_fb_wire { + uint32_t width; + uint32_t height; + uint32_t pitch; + uint32_t bpp; + uint32_t depth; + uint32_t handle; + uint32_t fb_id; +}; + +struct redox_drm_rm_fb_wire { + uint32_t fb_id; +}; + +struct redox_drm_get_crtc_wire { + uint32_t crtc_id; + uint32_t fb_id; + uint32_t x; + uint32_t y; + uint32_t mode_valid; + struct redox_drm_mode_wire mode; +}; + +struct redox_drm_version_wire { + int32_t major; + int32_t minor; + int32_t patch; + char name[64]; +}; + +struct redox_drm_prime_handle_to_fd_wire { + uint32_t handle; + uint32_t flags; +}; + +struct redox_drm_prime_handle_to_fd_response_wire { + int32_t fd; + uint32_t pad; +}; + +struct redox_drm_prime_fd_to_handle_wire { + int32_t fd; + uint32_t pad; +}; + +struct redox_drm_prime_fd_to_handle_response_wire { + uint32_t handle; + uint32_t pad; +}; + +unsigned long redox_translate_request(unsigned long linux_nr); +int redox_drm_simple_ioctl(int fd, unsigned long request, void *arg); +int redox_drm_exchange(int fd, unsigned long request_code, + const void *payload, size_t payload_size, + void *response, size_t response_capacity, + size_t *response_size); +int redox_drm_exchange_alloc(int fd, unsigned long request_code, + const void *payload, size_t payload_size, + void **response, size_t *response_size); + +#endif + +#endif