Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.  * \file xf86drmMode.h
  3.  * Header for DRM modesetting interface.
  4.  *
  5.  * \author Jakob Bornecrantz <wallbraker@gmail.com>
  6.  *
  7.  * \par Acknowledgements:
  8.  * Feb 2007, Dave Airlie <airlied@linux.ie>
  9.  */
  10.  
  11. /*
  12.  * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, Texas.
  13.  * Copyright (c) 2007-2008 Dave Airlie <airlied@linux.ie>
  14.  * Copyright (c) 2007-2008 Jakob Bornecrantz <wallbraker@gmail.com>
  15.  *
  16.  * Permission is hereby granted, free of charge, to any person obtaining a
  17.  * copy of this software and associated documentation files (the "Software"),
  18.  * to deal in the Software without restriction, including without limitation
  19.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  20.  * and/or sell copies of the Software, and to permit persons to whom the
  21.  * Software is furnished to do so, subject to the following conditions:
  22.  *
  23.  * The above copyright notice and this permission notice shall be included in
  24.  * all copies or substantial portions of the Software.
  25.  *
  26.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  27.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  28.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  29.  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  30.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  31.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  32.  * IN THE SOFTWARE.
  33.  *
  34.  */
  35.  
  36. #ifndef _XF86DRMMODE_H_
  37. #define _XF86DRMMODE_H_
  38.  
  39. #if defined(__cplusplus) || defined(c_plusplus)
  40. extern "C" {
  41. #endif
  42.  
  43. #include <drm.h>
  44.  
  45. /*
  46.  * This is the interface for modesetting for drm.
  47.  *
  48.  * In order to use this interface you must include either <stdint.h> or another
  49.  * header defining uint32_t, int32_t and uint16_t.
  50.  *
  51.  * It aims to provide a randr1.2 compatible interface for modesettings in the
  52.  * kernel, the interface is also ment to be used by libraries like EGL.
  53.  *
  54.  * More information can be found in randrproto.txt which can be found here:
  55.  * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
  56.  *
  57.  * There are some major diffrences to be noted. Unlike the randr1.2 proto you
  58.  * need to create the memory object of the framebuffer yourself with the ttm
  59.  * buffer object interface. This object needs to be pinned.
  60.  */
  61.  
  62. /*
  63.  * If we pickup an old version of drm.h which doesn't include drm_mode.h
  64.  * we should redefine defines. This is so that builds doesn't breaks with
  65.  * new libdrm on old kernels.
  66.  */
  67. #ifndef _DRM_MODE_H
  68.  
  69. #define DRM_DISPLAY_INFO_LEN    32
  70. #define DRM_CONNECTOR_NAME_LEN  32
  71. #define DRM_DISPLAY_MODE_LEN    32
  72. #define DRM_PROP_NAME_LEN       32
  73.  
  74. #define DRM_MODE_TYPE_BUILTIN   (1<<0)
  75. #define DRM_MODE_TYPE_CLOCK_C   ((1<<1) | DRM_MODE_TYPE_BUILTIN)
  76. #define DRM_MODE_TYPE_CRTC_C    ((1<<2) | DRM_MODE_TYPE_BUILTIN)
  77. #define DRM_MODE_TYPE_PREFERRED (1<<3)
  78. #define DRM_MODE_TYPE_DEFAULT   (1<<4)
  79. #define DRM_MODE_TYPE_USERDEF   (1<<5)
  80. #define DRM_MODE_TYPE_DRIVER    (1<<6)
  81.  
  82. /* Video mode flags */
  83. /* bit compatible with the xorg definitions. */
  84. #define DRM_MODE_FLAG_PHSYNC                    (1<<0)
  85. #define DRM_MODE_FLAG_NHSYNC                    (1<<1)
  86. #define DRM_MODE_FLAG_PVSYNC                    (1<<2)
  87. #define DRM_MODE_FLAG_NVSYNC                    (1<<3)
  88. #define DRM_MODE_FLAG_INTERLACE                 (1<<4)
  89. #define DRM_MODE_FLAG_DBLSCAN                   (1<<5)
  90. #define DRM_MODE_FLAG_CSYNC                     (1<<6)
  91. #define DRM_MODE_FLAG_PCSYNC                    (1<<7)
  92. #define DRM_MODE_FLAG_NCSYNC                    (1<<8)
  93. #define DRM_MODE_FLAG_HSKEW                     (1<<9) /* hskew provided */
  94. #define DRM_MODE_FLAG_BCAST                     (1<<10)
  95. #define DRM_MODE_FLAG_PIXMUX                    (1<<11)
  96. #define DRM_MODE_FLAG_DBLCLK                    (1<<12)
  97. #define DRM_MODE_FLAG_CLKDIV2                   (1<<13)
  98. #define DRM_MODE_FLAG_3D_MASK                   (0x1f<<14)
  99. #define  DRM_MODE_FLAG_3D_NONE                  (0<<14)
  100. #define  DRM_MODE_FLAG_3D_FRAME_PACKING         (1<<14)
  101. #define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE     (2<<14)
  102. #define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE      (3<<14)
  103. #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL     (4<<14)
  104. #define  DRM_MODE_FLAG_3D_L_DEPTH               (5<<14)
  105. #define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH (6<<14)
  106. #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM        (7<<14)
  107. #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF     (8<<14)
  108.  
  109. /* DPMS flags */
  110. /* bit compatible with the xorg definitions. */
  111. #define DRM_MODE_DPMS_ON        0
  112. #define DRM_MODE_DPMS_STANDBY   1
  113. #define DRM_MODE_DPMS_SUSPEND   2
  114. #define DRM_MODE_DPMS_OFF       3
  115.  
  116. /* Scaling mode options */
  117. #define DRM_MODE_SCALE_NON_GPU          0
  118. #define DRM_MODE_SCALE_FULLSCREEN       1
  119. #define DRM_MODE_SCALE_NO_SCALE         2
  120. #define DRM_MODE_SCALE_ASPECT           3
  121.  
  122. /* Dithering mode options */
  123. #define DRM_MODE_DITHERING_OFF  0
  124. #define DRM_MODE_DITHERING_ON   1
  125.  
  126. #define DRM_MODE_ENCODER_NONE   0
  127. #define DRM_MODE_ENCODER_DAC    1
  128. #define DRM_MODE_ENCODER_TMDS   2
  129. #define DRM_MODE_ENCODER_LVDS   3
  130. #define DRM_MODE_ENCODER_TVDAC  4
  131. #define DRM_MODE_ENCODER_VIRTUAL 5
  132. #define DRM_MODE_ENCODER_DSI    6
  133.  
  134. #define DRM_MODE_SUBCONNECTOR_Automatic 0
  135. #define DRM_MODE_SUBCONNECTOR_Unknown   0
  136. #define DRM_MODE_SUBCONNECTOR_DVID      3
  137. #define DRM_MODE_SUBCONNECTOR_DVIA      4
  138. #define DRM_MODE_SUBCONNECTOR_Composite 5
  139. #define DRM_MODE_SUBCONNECTOR_SVIDEO    6
  140. #define DRM_MODE_SUBCONNECTOR_Component 8
  141. #define DRM_MODE_SUBCONNECTOR_SCART     9
  142.  
  143. #define DRM_MODE_CONNECTOR_Unknown      0
  144. #define DRM_MODE_CONNECTOR_VGA          1
  145. #define DRM_MODE_CONNECTOR_DVII         2
  146. #define DRM_MODE_CONNECTOR_DVID         3
  147. #define DRM_MODE_CONNECTOR_DVIA         4
  148. #define DRM_MODE_CONNECTOR_Composite    5
  149. #define DRM_MODE_CONNECTOR_SVIDEO       6
  150. #define DRM_MODE_CONNECTOR_LVDS         7
  151. #define DRM_MODE_CONNECTOR_Component    8
  152. #define DRM_MODE_CONNECTOR_9PinDIN      9
  153. #define DRM_MODE_CONNECTOR_DisplayPort  10
  154. #define DRM_MODE_CONNECTOR_HDMIA        11
  155. #define DRM_MODE_CONNECTOR_HDMIB        12
  156. #define DRM_MODE_CONNECTOR_TV           13
  157. #define DRM_MODE_CONNECTOR_eDP          14
  158. #define DRM_MODE_CONNECTOR_VIRTUAL      15
  159. #define DRM_MODE_CONNECTOR_DSI          16
  160.  
  161. #define DRM_MODE_PROP_PENDING   (1<<0)
  162. #define DRM_MODE_PROP_RANGE     (1<<1)
  163. #define DRM_MODE_PROP_IMMUTABLE (1<<2)
  164. #define DRM_MODE_PROP_ENUM      (1<<3) /* enumerated type with text strings */
  165. #define DRM_MODE_PROP_BLOB      (1<<4)
  166.  
  167. #define DRM_MODE_CURSOR_BO      (1<<0)
  168. #define DRM_MODE_CURSOR_MOVE    (1<<1)
  169.  
  170. #endif /* _DRM_MODE_H */
  171.  
  172.  
  173. /*
  174.  * Feature defines
  175.  *
  176.  * Just because these are defined doesn't mean that the kernel
  177.  * can do that feature, its just for new code vs old libdrm.
  178.  */
  179. #define DRM_MODE_FEATURE_KMS            1
  180. #define DRM_MODE_FEATURE_DIRTYFB        1
  181.  
  182.  
  183. typedef struct _drmModeRes {
  184.  
  185.         int count_fbs;
  186.         uint32_t *fbs;
  187.  
  188.         int count_crtcs;
  189.         uint32_t *crtcs;
  190.  
  191.         int count_connectors;
  192.         uint32_t *connectors;
  193.  
  194.         int count_encoders;
  195.         uint32_t *encoders;
  196.  
  197.         uint32_t min_width, max_width;
  198.         uint32_t min_height, max_height;
  199. } drmModeRes, *drmModeResPtr;
  200.  
  201. typedef struct _drmModeModeInfo {
  202.         uint32_t clock;
  203.         uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew;
  204.         uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan;
  205.  
  206.         uint32_t vrefresh;
  207.  
  208.         uint32_t flags;
  209.         uint32_t type;
  210.         char name[DRM_DISPLAY_MODE_LEN];
  211. } drmModeModeInfo, *drmModeModeInfoPtr;
  212.  
  213. typedef struct _drmModeFB {
  214.         uint32_t fb_id;
  215.         uint32_t width, height;
  216.         uint32_t pitch;
  217.         uint32_t bpp;
  218.         uint32_t depth;
  219.         /* driver specific handle */
  220.         uint32_t handle;
  221. } drmModeFB, *drmModeFBPtr;
  222.  
  223. typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
  224.  
  225. typedef struct _drmModePropertyBlob {
  226.         uint32_t id;
  227.         uint32_t length;
  228.         void *data;
  229. } drmModePropertyBlobRes, *drmModePropertyBlobPtr;
  230.  
  231. typedef struct _drmModeProperty {
  232.         uint32_t prop_id;
  233.         uint32_t flags;
  234.         char name[DRM_PROP_NAME_LEN];
  235.         int count_values;
  236.         uint64_t *values; /* store the blob lengths */
  237.         int count_enums;
  238.         struct drm_mode_property_enum *enums;
  239.         int count_blobs;
  240.         uint32_t *blob_ids; /* store the blob IDs */
  241. } drmModePropertyRes, *drmModePropertyPtr;
  242.  
  243. typedef struct _drmModeCrtc {
  244.         uint32_t crtc_id;
  245.         uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
  246.  
  247.         uint32_t x, y; /**< Position on the framebuffer */
  248.         uint32_t width, height;
  249.         int mode_valid;
  250.         drmModeModeInfo mode;
  251.  
  252.         int gamma_size; /**< Number of gamma stops */
  253.  
  254. } drmModeCrtc, *drmModeCrtcPtr;
  255.  
  256. typedef struct _drmModeEncoder {
  257.         uint32_t encoder_id;
  258.         uint32_t encoder_type;
  259.         uint32_t crtc_id;
  260.         uint32_t possible_crtcs;
  261.         uint32_t possible_clones;
  262. } drmModeEncoder, *drmModeEncoderPtr;
  263.  
  264. typedef enum {
  265.         DRM_MODE_CONNECTED         = 1,
  266.         DRM_MODE_DISCONNECTED      = 2,
  267.         DRM_MODE_UNKNOWNCONNECTION = 3
  268. } drmModeConnection;
  269.  
  270. typedef enum {
  271.         DRM_MODE_SUBPIXEL_UNKNOWN        = 1,
  272.         DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
  273.         DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
  274.         DRM_MODE_SUBPIXEL_VERTICAL_RGB   = 4,
  275.         DRM_MODE_SUBPIXEL_VERTICAL_BGR   = 5,
  276.         DRM_MODE_SUBPIXEL_NONE           = 6
  277. } drmModeSubPixel;
  278.  
  279. typedef struct _drmModeConnector {
  280.         uint32_t connector_id;
  281.         uint32_t encoder_id; /**< Encoder currently connected to */
  282.         uint32_t connector_type;
  283.         uint32_t connector_type_id;
  284.         drmModeConnection connection;
  285.         uint32_t mmWidth, mmHeight; /**< HxW in millimeters */
  286.         drmModeSubPixel subpixel;
  287.  
  288.         int count_modes;
  289.         drmModeModeInfoPtr modes;
  290.  
  291.         int count_props;
  292.         uint32_t *props; /**< List of property ids */
  293.         uint64_t *prop_values; /**< List of property values */
  294.  
  295.         int count_encoders;
  296.         uint32_t *encoders; /**< List of encoder ids */
  297. } drmModeConnector, *drmModeConnectorPtr;
  298.  
  299. #define DRM_PLANE_TYPE_OVERLAY 0
  300. #define DRM_PLANE_TYPE_PRIMARY 1
  301. #define DRM_PLANE_TYPE_CURSOR  2
  302.  
  303. typedef struct _drmModeObjectProperties {
  304.         uint32_t count_props;
  305.         uint32_t *props;
  306.         uint64_t *prop_values;
  307. } drmModeObjectProperties, *drmModeObjectPropertiesPtr;
  308.  
  309. typedef struct _drmModePlane {
  310.         uint32_t count_formats;
  311.         uint32_t *formats;
  312.         uint32_t plane_id;
  313.  
  314.         uint32_t crtc_id;
  315.         uint32_t fb_id;
  316.  
  317.         uint32_t crtc_x, crtc_y;
  318.         uint32_t x, y;
  319.  
  320.         uint32_t possible_crtcs;
  321.         uint32_t gamma_size;
  322. } drmModePlane, *drmModePlanePtr;
  323.  
  324. typedef struct _drmModePlaneRes {
  325.         uint32_t count_planes;
  326.         uint32_t *planes;
  327. } drmModePlaneRes, *drmModePlaneResPtr;
  328.  
  329. extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
  330. extern void drmModeFreeResources( drmModeResPtr ptr );
  331. extern void drmModeFreeFB( drmModeFBPtr ptr );
  332. extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
  333. extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
  334. extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
  335. extern void drmModeFreePlane( drmModePlanePtr ptr );
  336. extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr);
  337.  
  338. /**
  339.  * Retrives all of the resources associated with a card.
  340.  */
  341. extern drmModeResPtr drmModeGetResources(int fd);
  342.  
  343. /*
  344.  * FrameBuffer manipulation.
  345.  */
  346.  
  347. /**
  348.  * Retrive information about framebuffer bufferId
  349.  */
  350. extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
  351.  
  352. /**
  353.  * Creates a new framebuffer with an buffer object as its scanout buffer.
  354.  */
  355. extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
  356.                         uint8_t bpp, uint32_t pitch, uint32_t bo_handle,
  357.                         uint32_t *buf_id);
  358. /* ...with a specific pixel format */
  359. extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
  360.                          uint32_t pixel_format, uint32_t bo_handles[4],
  361.                          uint32_t pitches[4], uint32_t offsets[4],
  362.                          uint32_t *buf_id, uint32_t flags);
  363. /**
  364.  * Destroies the given framebuffer.
  365.  */
  366. extern int drmModeRmFB(int fd, uint32_t bufferId);
  367.  
  368. /**
  369.  * Mark a region of a framebuffer as dirty.
  370.  */
  371. extern int drmModeDirtyFB(int fd, uint32_t bufferId,
  372.                           drmModeClipPtr clips, uint32_t num_clips);
  373.  
  374.  
  375. /*
  376.  * Crtc functions
  377.  */
  378.  
  379. /**
  380.  * Retrive information about the ctrt crtcId
  381.  */
  382. extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
  383.  
  384. /**
  385.  * Set the mode on a crtc crtcId with the given mode modeId.
  386.  */
  387. int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId,
  388.                    uint32_t x, uint32_t y, uint32_t *connectors, int count,
  389.                    drmModeModeInfoPtr mode);
  390.  
  391. /*
  392.  * Cursor functions
  393.  */
  394.  
  395. /**
  396.  * Set the cursor on crtc
  397.  */
  398. int drmModeSetCursor(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height);
  399.  
  400. int drmModeSetCursor2(int fd, uint32_t crtcId, uint32_t bo_handle, uint32_t width, uint32_t height, int32_t hot_x, int32_t hot_y);
  401. /**
  402.  * Move the cursor on crtc
  403.  */
  404. int drmModeMoveCursor(int fd, uint32_t crtcId, int x, int y);
  405.  
  406. /**
  407.  * Encoder functions
  408.  */
  409. drmModeEncoderPtr drmModeGetEncoder(int fd, uint32_t encoder_id);
  410.  
  411. /*
  412.  * Connector manipulation
  413.  */
  414.  
  415. /**
  416.  * Retrive information about the connector connectorId.
  417.  */
  418. extern drmModeConnectorPtr drmModeGetConnector(int fd,
  419.                 uint32_t connectorId);
  420.  
  421. /**
  422.  * Attaches the given mode to an connector.
  423.  */
  424. extern int drmModeAttachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
  425.  
  426. /**
  427.  * Detaches a mode from the connector
  428.  * must be unused, by the given mode.
  429.  */
  430. extern int drmModeDetachMode(int fd, uint32_t connectorId, drmModeModeInfoPtr mode_info);
  431.  
  432. extern drmModePropertyPtr drmModeGetProperty(int fd, uint32_t propertyId);
  433. extern void drmModeFreeProperty(drmModePropertyPtr ptr);
  434.  
  435. extern drmModePropertyBlobPtr drmModeGetPropertyBlob(int fd, uint32_t blob_id);
  436. extern void drmModeFreePropertyBlob(drmModePropertyBlobPtr ptr);
  437. extern int drmModeConnectorSetProperty(int fd, uint32_t connector_id, uint32_t property_id,
  438.                                     uint64_t value);
  439. extern int drmCheckModesettingSupported(const char *busid);
  440.  
  441. extern int drmModeCrtcSetGamma(int fd, uint32_t crtc_id, uint32_t size,
  442.                                uint16_t *red, uint16_t *green, uint16_t *blue);
  443. extern int drmModeCrtcGetGamma(int fd, uint32_t crtc_id, uint32_t size,
  444.                                uint16_t *red, uint16_t *green, uint16_t *blue);
  445. extern int drmModePageFlip(int fd, uint32_t crtc_id, uint32_t fb_id,
  446.                            uint32_t flags, void *user_data);
  447.  
  448. extern drmModePlaneResPtr drmModeGetPlaneResources(int fd);
  449. extern drmModePlanePtr drmModeGetPlane(int fd, uint32_t plane_id);
  450. extern int drmModeSetPlane(int fd, uint32_t plane_id, uint32_t crtc_id,
  451.                            uint32_t fb_id, uint32_t flags,
  452.                            int32_t crtc_x, int32_t crtc_y,
  453.                            uint32_t crtc_w, uint32_t crtc_h,
  454.                            uint32_t src_x, uint32_t src_y,
  455.                            uint32_t src_w, uint32_t src_h);
  456.  
  457. extern drmModeObjectPropertiesPtr drmModeObjectGetProperties(int fd,
  458.                                                         uint32_t object_id,
  459.                                                         uint32_t object_type);
  460. extern void drmModeFreeObjectProperties(drmModeObjectPropertiesPtr ptr);
  461. extern int drmModeObjectSetProperty(int fd, uint32_t object_id,
  462.                                     uint32_t object_type, uint32_t property_id,
  463.                                     uint64_t value);
  464.  
  465. #if defined(__cplusplus) || defined(c_plusplus)
  466. }
  467. #endif
  468.  
  469. #endif
  470.