176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#ifndef _DRM_DRIVER_H_ 376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#define _DRM_DRIVER_H_ 476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#include "pipe/p_compiler.h" 676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 776aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct pipe_screen; 876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct pipe_context; 976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct pipe_resource; 1076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 1176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#define DRM_API_HANDLE_TYPE_SHARED 0 1276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#define DRM_API_HANDLE_TYPE_KMS 1 1376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 1476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz/** 1576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * For use with pipe_screen::{texture_from_handle|texture_get_handle}. 1676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 1776aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct winsys_handle 1876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz{ 1976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 2076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Unused for texture_from_handle, always 2176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * DRM_API_HANDLE_TYPE_SHARED. Input to texture_get_handle, 2276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * use TEXTURE_USAGE to select handle for kms or ipc. 2376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 2476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz unsigned type; 2576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 2676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Input to texture_from_handle. 2776aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Output for texture_get_handle. 2876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 2976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz unsigned handle; 3076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 3176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Input to texture_from_handle. 3276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Output for texture_get_handle. 3376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 3476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz unsigned stride; 3576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz}; 3676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 37ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 38ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 39ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom/** 40ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * Configuration queries. 41ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom */ 42ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstromenum drm_conf { 43ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom /* How many frames to allow before throttling. Or -1 to indicate any number */ 44ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_THROTTLE, /* DRM_CONF_INT. */ 45ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_MAX 46ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom}; 47ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 48ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom/** 49ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * Type of configuration answer 50ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom */ 51ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstromenum drm_conf_type { 52ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_INT, 53ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_BOOL, 54ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_FLOAT, 55ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom DRM_CONF_POINTER 56ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom}; 57ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 58ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom/** 59ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * Return value from the configuration function. 60ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom */ 61ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstromstruct drm_conf_ret { 62ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom enum drm_conf_type type; 63ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom union { 64ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom int val_int; 65ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom bool val_bool; 66ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom float val_float; 67ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom void *val_pointer; 68ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom } val; 69ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom}; 70ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 7176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct drm_driver_descriptor 7276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz{ 7376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 7476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Identifying sufix/prefix of the binary, used by egl. 7576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 7676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz const char *name; 7776aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 7876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 7976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Kernel driver name, as accepted by drmOpenByName. 8076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 8176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz const char *driver_name; 8276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 8376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz /** 8476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Create a pipe srcreen. 8576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * 8676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * This function does any wrapping of the screen. 8776aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * For example wrapping trace or rbug debugging drivers around it. 8876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 8976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz struct pipe_screen* (*create_screen)(int drm_fd); 90ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 91ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom 92ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom /** 93ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * Return a configuration value. 94ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * 95ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * If this function is NULL, or if it returns NULL 96ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * the state tracker- or state 97ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom * tracker manager should provide a reasonable default value. 98ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom */ 99ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom const struct drm_conf_ret *(*configuration) (enum drm_conf conf); 10076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz}; 10176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 10276aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzextern struct drm_driver_descriptor driver_descriptor; 10376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 10476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz/** 10576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz * Instantiate a drm_driver_descriptor struct. 10676aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz */ 107ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom#define DRM_DRIVER_DESCRIPTOR(name_str, driver_name_str, func, conf) \ 10876aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantzstruct drm_driver_descriptor driver_descriptor = { \ 10976aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz .name = name_str, \ 11076aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz .driver_name = driver_name_str, \ 11176aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz .create_screen = func, \ 112ec7d5b8c021f655d49df4ba1ed2038ee423f9d5eThomas Hellstrom .configuration = (conf), \ 11376aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz}; 11476aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz 11576aed4b070be8950fd8ea5caff59321885ff0a06Jakob Bornecrantz#endif 116