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