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