1 2#ifndef _DRM_DRIVER_H_ 3#define _DRM_DRIVER_H_ 4 5#include "pipe/p_compiler.h" 6 7struct pipe_screen; 8struct pipe_context; 9struct pipe_resource; 10 11#define DRM_API_HANDLE_TYPE_SHARED 0 12#define DRM_API_HANDLE_TYPE_KMS 1 13 14/** 15 * For use with pipe_screen::{texture_from_handle|texture_get_handle}. 16 */ 17struct winsys_handle 18{ 19 /** 20 * Unused for texture_from_handle, always 21 * DRM_API_HANDLE_TYPE_SHARED. Input to texture_get_handle, 22 * use TEXTURE_USAGE to select handle for kms or ipc. 23 */ 24 unsigned type; 25 /** 26 * Input to texture_from_handle. 27 * Output for texture_get_handle. 28 */ 29 unsigned handle; 30 /** 31 * Input to texture_from_handle. 32 * Output for texture_get_handle. 33 */ 34 unsigned stride; 35}; 36 37 38 39/** 40 * Configuration queries. 41 */ 42enum drm_conf { 43 /* How many frames to allow before throttling. Or -1 to indicate any number */ 44 DRM_CONF_THROTTLE, /* DRM_CONF_INT. */ 45 DRM_CONF_MAX 46}; 47 48/** 49 * Type of configuration answer 50 */ 51enum drm_conf_type { 52 DRM_CONF_INT, 53 DRM_CONF_BOOL, 54 DRM_CONF_FLOAT, 55 DRM_CONF_POINTER 56}; 57 58/** 59 * Return value from the configuration function. 60 */ 61struct drm_conf_ret { 62 enum drm_conf_type type; 63 union { 64 int val_int; 65 bool val_bool; 66 float val_float; 67 void *val_pointer; 68 } val; 69}; 70 71struct drm_driver_descriptor 72{ 73 /** 74 * Identifying sufix/prefix of the binary, used by egl. 75 */ 76 const char *name; 77 78 /** 79 * Kernel driver name, as accepted by drmOpenByName. 80 */ 81 const char *driver_name; 82 83 /** 84 * Create a pipe srcreen. 85 * 86 * This function does any wrapping of the screen. 87 * For example wrapping trace or rbug debugging drivers around it. 88 */ 89 struct pipe_screen* (*create_screen)(int drm_fd); 90 91 92 /** 93 * Return a configuration value. 94 * 95 * If this function is NULL, or if it returns NULL 96 * the state tracker- or state 97 * tracker manager should provide a reasonable default value. 98 */ 99 const struct drm_conf_ret *(*configuration) (enum drm_conf conf); 100}; 101 102extern struct drm_driver_descriptor driver_descriptor; 103 104/** 105 * Instantiate a drm_driver_descriptor struct. 106 */ 107#define DRM_DRIVER_DESCRIPTOR(name_str, driver_name_str, func, conf) \ 108struct drm_driver_descriptor driver_descriptor = { \ 109 .name = name_str, \ 110 .driver_name = driver_name_str, \ 111 .create_screen = func, \ 112 .configuration = (conf), \ 113}; 114 115#endif 116