Home | History | Annotate | Download | only in wayland
      1 /*
      2  * Copyright  2008-2011 Kristian Hgsberg
      3  * Copyright  2010-2011 Intel Corporation
      4  *
      5  * Permission to use, copy, modify, distribute, and sell this
      6  * software and its documentation for any purpose is hereby granted
      7  * without fee, provided that\n the above copyright notice appear in
      8  * all copies and that both that copyright notice and this permission
      9  * notice appear in supporting documentation, and that the name of
     10  * the copyright holders not be used in advertising or publicity
     11  * pertaining to distribution of the software without specific,
     12  * written prior permission.  The copyright holders make no
     13  * representations about the suitability of this software for any
     14  * purpose.  It is provided "as is" without express or implied
     15  * warranty.
     16  *
     17  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
     18  * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
     19  * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
     20  * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     21  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
     22  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
     23  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
     24  * THIS SOFTWARE.
     25  */
     26 
     27 #ifndef DRM_CLIENT_PROTOCOL_H
     28 #define DRM_CLIENT_PROTOCOL_H
     29 
     30 #ifdef  __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 #include <stdint.h>
     35 #include <stddef.h>
     36 #include "wayland-client.h"
     37 
     38 struct wl_client;
     39 struct wl_resource;
     40 
     41 struct wl_drm;
     42 
     43 extern const struct wl_interface wl_drm_interface;
     44 
     45 #ifndef WL_DRM_ERROR_ENUM
     46 #define WL_DRM_ERROR_ENUM
     47 enum wl_drm_error {
     48 	WL_DRM_ERROR_AUTHENTICATE_FAIL = 0,
     49 	WL_DRM_ERROR_INVALID_FORMAT = 1,
     50 	WL_DRM_ERROR_INVALID_NAME = 2,
     51 };
     52 #endif /* WL_DRM_ERROR_ENUM */
     53 
     54 #ifndef WL_DRM_FORMAT_ENUM
     55 #define WL_DRM_FORMAT_ENUM
     56 enum wl_drm_format {
     57 	WL_DRM_FORMAT_C8 = 0x20203843,
     58 	WL_DRM_FORMAT_RGB332 = 0x38424752,
     59 	WL_DRM_FORMAT_BGR233 = 0x38524742,
     60 	WL_DRM_FORMAT_XRGB4444 = 0x32315258,
     61 	WL_DRM_FORMAT_XBGR4444 = 0x32314258,
     62 	WL_DRM_FORMAT_RGBX4444 = 0x32315852,
     63 	WL_DRM_FORMAT_BGRX4444 = 0x32315842,
     64 	WL_DRM_FORMAT_ARGB4444 = 0x32315241,
     65 	WL_DRM_FORMAT_ABGR4444 = 0x32314241,
     66 	WL_DRM_FORMAT_RGBA4444 = 0x32314152,
     67 	WL_DRM_FORMAT_BGRA4444 = 0x32314142,
     68 	WL_DRM_FORMAT_XRGB1555 = 0x35315258,
     69 	WL_DRM_FORMAT_XBGR1555 = 0x35314258,
     70 	WL_DRM_FORMAT_RGBX5551 = 0x35315852,
     71 	WL_DRM_FORMAT_BGRX5551 = 0x35315842,
     72 	WL_DRM_FORMAT_ARGB1555 = 0x35315241,
     73 	WL_DRM_FORMAT_ABGR1555 = 0x35314241,
     74 	WL_DRM_FORMAT_RGBA5551 = 0x35314152,
     75 	WL_DRM_FORMAT_BGRA5551 = 0x35314142,
     76 	WL_DRM_FORMAT_RGB565 = 0x36314752,
     77 	WL_DRM_FORMAT_BGR565 = 0x36314742,
     78 	WL_DRM_FORMAT_RGB888 = 0x34324752,
     79 	WL_DRM_FORMAT_BGR888 = 0x34324742,
     80 	WL_DRM_FORMAT_XRGB8888 = 0x34325258,
     81 	WL_DRM_FORMAT_XBGR8888 = 0x34324258,
     82 	WL_DRM_FORMAT_RGBX8888 = 0x34325852,
     83 	WL_DRM_FORMAT_BGRX8888 = 0x34325842,
     84 	WL_DRM_FORMAT_ARGB8888 = 0x34325241,
     85 	WL_DRM_FORMAT_ABGR8888 = 0x34324241,
     86 	WL_DRM_FORMAT_RGBA8888 = 0x34324152,
     87 	WL_DRM_FORMAT_BGRA8888 = 0x34324142,
     88 	WL_DRM_FORMAT_XRGB2101010 = 0x30335258,
     89 	WL_DRM_FORMAT_XBGR2101010 = 0x30334258,
     90 	WL_DRM_FORMAT_RGBX1010102 = 0x30335852,
     91 	WL_DRM_FORMAT_BGRX1010102 = 0x30335842,
     92 	WL_DRM_FORMAT_ARGB2101010 = 0x30335241,
     93 	WL_DRM_FORMAT_ABGR2101010 = 0x30334241,
     94 	WL_DRM_FORMAT_RGBA1010102 = 0x30334152,
     95 	WL_DRM_FORMAT_BGRA1010102 = 0x30334142,
     96 	WL_DRM_FORMAT_YUYV = 0x56595559,
     97 	WL_DRM_FORMAT_YVYU = 0x55595659,
     98 	WL_DRM_FORMAT_UYVY = 0x59565955,
     99 	WL_DRM_FORMAT_VYUY = 0x59555956,
    100 	WL_DRM_FORMAT_AYUV = 0x56555941,
    101 	WL_DRM_FORMAT_NV12 = 0x3231564e,
    102 	WL_DRM_FORMAT_NV21 = 0x3132564e,
    103 	WL_DRM_FORMAT_NV16 = 0x3631564e,
    104 	WL_DRM_FORMAT_NV61 = 0x3136564e,
    105 	WL_DRM_FORMAT_YUV410 = 0x39565559,
    106 	WL_DRM_FORMAT_YVU410 = 0x39555659,
    107 	WL_DRM_FORMAT_YUV411 = 0x31315559,
    108 	WL_DRM_FORMAT_YVU411 = 0x31315659,
    109 	WL_DRM_FORMAT_YUV420 = 0x32315559,
    110 	WL_DRM_FORMAT_YVU420 = 0x32315659,
    111 	WL_DRM_FORMAT_YUV422 = 0x36315559,
    112 	WL_DRM_FORMAT_YVU422 = 0x36315659,
    113 	WL_DRM_FORMAT_YUV444 = 0x34325559,
    114 	WL_DRM_FORMAT_YVU444 = 0x34325659,
    115 };
    116 #endif /* WL_DRM_FORMAT_ENUM */
    117 
    118 struct wl_drm_listener {
    119 	/**
    120 	 * device - device
    121 	 * @name: name
    122 	 */
    123 	void (*device)(void *data,
    124 		       struct wl_drm *wl_drm,
    125 		       const char *name);
    126 	/**
    127 	 * format - format
    128 	 * @format: format
    129 	 */
    130 	void (*format)(void *data,
    131 		       struct wl_drm *wl_drm,
    132 		       uint32_t format);
    133 	/**
    134 	 * authenticated - authenticated
    135 	 */
    136 	void (*authenticated)(void *data,
    137 			      struct wl_drm *wl_drm);
    138 };
    139 
    140 static inline int
    141 wl_drm_add_listener(struct wl_drm *wl_drm,
    142 		    const struct wl_drm_listener *listener, void *data)
    143 {
    144 	return wl_proxy_add_listener((struct wl_proxy *) wl_drm,
    145 				     (void (**)(void)) listener, data);
    146 }
    147 
    148 #define WL_DRM_AUTHENTICATE	0
    149 #define WL_DRM_CREATE_BUFFER	1
    150 #define WL_DRM_CREATE_PLANAR_BUFFER	2
    151 
    152 static inline void
    153 wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data)
    154 {
    155 	wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data);
    156 }
    157 
    158 static inline void *
    159 wl_drm_get_user_data(struct wl_drm *wl_drm)
    160 {
    161 	return wl_proxy_get_user_data((struct wl_proxy *) wl_drm);
    162 }
    163 
    164 static inline void
    165 wl_drm_destroy(struct wl_drm *wl_drm)
    166 {
    167 	wl_proxy_destroy((struct wl_proxy *) wl_drm);
    168 }
    169 
    170 static inline void
    171 wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id)
    172 {
    173 	wl_proxy_marshal((struct wl_proxy *) wl_drm,
    174 			 WL_DRM_AUTHENTICATE, id);
    175 }
    176 
    177 static inline struct wl_buffer *
    178 wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t stride, uint32_t format)
    179 {
    180 	struct wl_proxy *id;
    181 
    182 	id = wl_proxy_create((struct wl_proxy *) wl_drm,
    183 			     &wl_buffer_interface);
    184 	if (!id)
    185 		return NULL;
    186 
    187 	wl_proxy_marshal((struct wl_proxy *) wl_drm,
    188 			 WL_DRM_CREATE_BUFFER, id, name, width, height, stride, format);
    189 
    190 	return (struct wl_buffer *) id;
    191 }
    192 
    193 static inline struct wl_buffer *
    194 wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, int32_t height, uint32_t format, int32_t offset0, int32_t stride0, int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2)
    195 {
    196 	struct wl_proxy *id;
    197 
    198 	id = wl_proxy_create((struct wl_proxy *) wl_drm,
    199 			     &wl_buffer_interface);
    200 	if (!id)
    201 		return NULL;
    202 
    203 	wl_proxy_marshal((struct wl_proxy *) wl_drm,
    204 			 WL_DRM_CREATE_PLANAR_BUFFER, id, name, width, height, format, offset0, stride0, offset1, stride1, offset2, stride2);
    205 
    206 	return (struct wl_buffer *) id;
    207 }
    208 
    209 #ifdef  __cplusplus
    210 }
    211 #endif
    212 
    213 #endif
    214