OSDN Git Service

android: add genrule for generated_static_table_fourcc.h
[android-x86/external-libdrm.git] / xf86drmMode.h
index 9d73be9..4bde6e3 100644 (file)
@@ -41,139 +41,25 @@ extern "C" {
 #endif
 
 #include <drm.h>
+#include <drm_mode.h>
+#include <stddef.h>
+#include <stdint.h>
 
 /*
  * This is the interface for modesetting for drm.
  *
- * In order to use this interface you must include either <stdint.h> or another
- * header defining uint32_t, int32_t and uint16_t.
- *
  * It aims to provide a randr1.2 compatible interface for modesettings in the
- * kernel, the interface is also ment to be used by libraries like EGL.
+ * kernel, the interface is also meant to be used by libraries like EGL.
  *
  * More information can be found in randrproto.txt which can be found here:
  * http://gitweb.freedesktop.org/?p=xorg/proto/randrproto.git
  *
- * There are some major diffrences to be noted. Unlike the randr1.2 proto you
+ * There are some major differences to be noted. Unlike the randr1.2 proto you
  * need to create the memory object of the framebuffer yourself with the ttm
  * buffer object interface. This object needs to be pinned.
  */
 
 /*
- * If we pickup an old version of drm.h which doesn't include drm_mode.h
- * we should redefine defines. This is so that builds doesn't breaks with
- * new libdrm on old kernels.
- */
-#ifndef _DRM_MODE_H
-
-#define DRM_DISPLAY_INFO_LEN    32
-#define DRM_CONNECTOR_NAME_LEN  32
-#define DRM_DISPLAY_MODE_LEN    32
-#define DRM_PROP_NAME_LEN       32
-
-#define DRM_MODE_TYPE_BUILTIN   (1<<0)
-#define DRM_MODE_TYPE_CLOCK_C   ((1<<1) | DRM_MODE_TYPE_BUILTIN)
-#define DRM_MODE_TYPE_CRTC_C    ((1<<2) | DRM_MODE_TYPE_BUILTIN)
-#define DRM_MODE_TYPE_PREFERRED (1<<3)
-#define DRM_MODE_TYPE_DEFAULT   (1<<4)
-#define DRM_MODE_TYPE_USERDEF   (1<<5)
-#define DRM_MODE_TYPE_DRIVER    (1<<6)
-
-/* Video mode flags */
-/* bit compatible with the xorg definitions. */
-#define DRM_MODE_FLAG_PHSYNC                   (1<<0)
-#define DRM_MODE_FLAG_NHSYNC                   (1<<1)
-#define DRM_MODE_FLAG_PVSYNC                   (1<<2)
-#define DRM_MODE_FLAG_NVSYNC                   (1<<3)
-#define DRM_MODE_FLAG_INTERLACE                        (1<<4)
-#define DRM_MODE_FLAG_DBLSCAN                  (1<<5)
-#define DRM_MODE_FLAG_CSYNC                    (1<<6)
-#define DRM_MODE_FLAG_PCSYNC                   (1<<7)
-#define DRM_MODE_FLAG_NCSYNC                   (1<<8)
-#define DRM_MODE_FLAG_HSKEW                    (1<<9) /* hskew provided */
-#define DRM_MODE_FLAG_BCAST                    (1<<10)
-#define DRM_MODE_FLAG_PIXMUX                   (1<<11)
-#define DRM_MODE_FLAG_DBLCLK                   (1<<12)
-#define DRM_MODE_FLAG_CLKDIV2                  (1<<13)
-#define DRM_MODE_FLAG_3D_MASK                  (0x1f<<14)
-#define  DRM_MODE_FLAG_3D_NONE                 (0<<14)
-#define  DRM_MODE_FLAG_3D_FRAME_PACKING                (1<<14)
-#define  DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE    (2<<14)
-#define  DRM_MODE_FLAG_3D_LINE_ALTERNATIVE     (3<<14)
-#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL    (4<<14)
-#define  DRM_MODE_FLAG_3D_L_DEPTH              (5<<14)
-#define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH        (6<<14)
-#define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM       (7<<14)
-#define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF    (8<<14)
-
-/* DPMS flags */
-/* bit compatible with the xorg definitions. */
-#define DRM_MODE_DPMS_ON        0
-#define DRM_MODE_DPMS_STANDBY   1
-#define DRM_MODE_DPMS_SUSPEND   2
-#define DRM_MODE_DPMS_OFF       3
-
-/* Scaling mode options */
-#define DRM_MODE_SCALE_NON_GPU          0
-#define DRM_MODE_SCALE_FULLSCREEN       1
-#define DRM_MODE_SCALE_NO_SCALE         2
-#define DRM_MODE_SCALE_ASPECT           3
-
-/* Dithering mode options */
-#define DRM_MODE_DITHERING_OFF  0
-#define DRM_MODE_DITHERING_ON   1
-
-#define DRM_MODE_ENCODER_NONE    0
-#define DRM_MODE_ENCODER_DAC     1
-#define DRM_MODE_ENCODER_TMDS    2
-#define DRM_MODE_ENCODER_LVDS    3
-#define DRM_MODE_ENCODER_TVDAC   4
-#define DRM_MODE_ENCODER_VIRTUAL 5
-#define DRM_MODE_ENCODER_DSI     6
-#define DRM_MODE_ENCODER_DPMST   7
-#define DRM_MODE_ENCODER_DPI     8
-
-#define DRM_MODE_SUBCONNECTOR_Automatic 0
-#define DRM_MODE_SUBCONNECTOR_Unknown   0
-#define DRM_MODE_SUBCONNECTOR_DVID      3
-#define DRM_MODE_SUBCONNECTOR_DVIA      4
-#define DRM_MODE_SUBCONNECTOR_Composite 5
-#define DRM_MODE_SUBCONNECTOR_SVIDEO    6
-#define DRM_MODE_SUBCONNECTOR_Component 8
-#define DRM_MODE_SUBCONNECTOR_SCART     9
-
-#define DRM_MODE_CONNECTOR_Unknown      0
-#define DRM_MODE_CONNECTOR_VGA          1
-#define DRM_MODE_CONNECTOR_DVII         2
-#define DRM_MODE_CONNECTOR_DVID         3
-#define DRM_MODE_CONNECTOR_DVIA         4
-#define DRM_MODE_CONNECTOR_Composite    5
-#define DRM_MODE_CONNECTOR_SVIDEO       6
-#define DRM_MODE_CONNECTOR_LVDS         7
-#define DRM_MODE_CONNECTOR_Component    8
-#define DRM_MODE_CONNECTOR_9PinDIN      9
-#define DRM_MODE_CONNECTOR_DisplayPort  10
-#define DRM_MODE_CONNECTOR_HDMIA        11
-#define DRM_MODE_CONNECTOR_HDMIB        12
-#define DRM_MODE_CONNECTOR_TV           13
-#define DRM_MODE_CONNECTOR_eDP          14
-#define DRM_MODE_CONNECTOR_VIRTUAL      15
-#define DRM_MODE_CONNECTOR_DSI          16
-#define DRM_MODE_CONNECTOR_DPI          17
-
-#define DRM_MODE_PROP_PENDING   (1<<0)
-#define DRM_MODE_PROP_RANGE     (1<<1)
-#define DRM_MODE_PROP_IMMUTABLE (1<<2)
-#define DRM_MODE_PROP_ENUM      (1<<3) /* enumerated type with text strings */
-#define DRM_MODE_PROP_BLOB      (1<<4)
-
-#define DRM_MODE_CURSOR_BO      (1<<0)
-#define DRM_MODE_CURSOR_MOVE    (1<<1)
-
-#endif /* _DRM_MODE_H */
-
-
-/*
  * Feature defines
  *
  * Just because these are defined doesn't mean that the kernel
@@ -223,6 +109,19 @@ typedef struct _drmModeFB {
        uint32_t handle;
 } drmModeFB, *drmModeFBPtr;
 
+typedef struct _drmModeFB2 {
+       uint32_t fb_id;
+       uint32_t width, height;
+       uint32_t pixel_format; /* fourcc code from drm_fourcc.h */
+       uint64_t modifier; /* applies to all buffers */
+       uint32_t flags;
+
+       /* per-plane GEM handle; may be duplicate entries for multiple planes */
+       uint32_t handles[4];
+       uint32_t pitches[4]; /* bytes */
+       uint32_t offsets[4]; /* bytes */
+} drmModeFB2, *drmModeFB2Ptr;
+
 typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
 
 typedef struct _drmModePropertyBlob {
@@ -252,6 +151,11 @@ static __inline int drm_property_type_is(drmModePropertyPtr property,
        return property->flags & type;
 }
 
+static inline uint32_t drmModeGetPropertyType(const drmModePropertyRes *prop)
+{
+       return prop->flags & (DRM_MODE_PROP_LEGACY_TYPE | DRM_MODE_PROP_EXTENDED_TYPE);
+}
+
 typedef struct _drmModeCrtc {
        uint32_t crtc_id;
        uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */
@@ -273,6 +177,18 @@ typedef struct _drmModeEncoder {
        uint32_t possible_clones;
 } drmModeEncoder, *drmModeEncoderPtr;
 
+/**
+ * Describes the connector status.
+ *
+ * DRM_MODE_CONNECTED means that the connector has a sink plugged in.
+ * DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used
+ * when it could be either.
+ *
+ * User-space should first try to enable DRM_MODE_CONNECTED connectors and
+ * ignore other connectors. If there are no DRM_MODE_CONNECTED connectors,
+ * user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION
+ * connectors.
+ */
 typedef enum {
        DRM_MODE_CONNECTED         = 1,
        DRM_MODE_DISCONNECTED      = 2,
@@ -341,6 +257,7 @@ typedef struct _drmModePlaneRes {
 extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
 extern void drmModeFreeResources( drmModeResPtr ptr );
 extern void drmModeFreeFB( drmModeFBPtr ptr );
+extern void drmModeFreeFB2( drmModeFB2Ptr ptr );
 extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
 extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
 extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
@@ -348,7 +265,14 @@ extern void drmModeFreePlane( drmModePlanePtr ptr );
 extern void drmModeFreePlaneResources(drmModePlaneResPtr ptr);
 
 /**
- * Retrives all of the resources associated with a card.
+ * Check whether the DRM node supports Kernel Mode-Setting.
+ *
+ * Returns 1 if suitable for KMS, 0 otherwise.
+ */
+extern int drmIsKMS(int fd);
+
+/**
+ * Retrieves all of the resources associated with a card.
  */
 extern drmModeResPtr drmModeGetResources(int fd);
 
@@ -357,9 +281,10 @@ extern drmModeResPtr drmModeGetResources(int fd);
  */
 
 /**
- * Retrive information about framebuffer bufferId
+ * Retrieve information about framebuffer bufferId
  */
 extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
+extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId);
 
 /**
  * Creates a new framebuffer with an buffer object as its scanout buffer.
@@ -369,15 +294,16 @@ extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
                        uint32_t *buf_id);
 /* ...with a specific pixel format */
 extern int drmModeAddFB2(int fd, uint32_t width, uint32_t height,
-                        uint32_t pixel_format, uint32_t bo_handles[4],
-                        uint32_t pitches[4], uint32_t offsets[4],
+                        uint32_t pixel_format, const uint32_t bo_handles[4],
+                        const uint32_t pitches[4], const uint32_t offsets[4],
                         uint32_t *buf_id, uint32_t flags);
 
 /* ...with format modifiers */
 int drmModeAddFB2WithModifiers(int fd, uint32_t width, uint32_t height,
-                              uint32_t pixel_format, uint32_t bo_handles[4],
-                              uint32_t pitches[4], uint32_t offsets[4],
-                              uint64_t modifier[4], uint32_t *buf_id, uint32_t flags);
+                              uint32_t pixel_format, const uint32_t bo_handles[4],
+                              const uint32_t pitches[4], const uint32_t offsets[4],
+                              const uint64_t modifier[4], uint32_t *buf_id,
+                                  uint32_t flags);
 
 /**
  * Destroies the given framebuffer.
@@ -396,7 +322,7 @@ extern int drmModeDirtyFB(int fd, uint32_t bufferId,
  */
 
 /**
- * Retrive information about the ctrt crtcId
+ * Retrieve information about the ctrt crtcId
  */
 extern drmModeCrtcPtr drmModeGetCrtc(int fd, uint32_t crtcId);
 
@@ -498,25 +424,6 @@ extern int drmModeObjectSetProperty(int fd, uint32_t object_id,
                                    uint64_t value);
 
 
-typedef struct _drmModePropertySet drmModePropertySet, *drmModePropertySetPtr;
-
-extern drmModePropertySetPtr drmModePropertySetAlloc(void);
-
-extern int drmModePropertySetAdd(drmModePropertySetPtr set,
-                                uint32_t object_id,
-                                uint32_t property_id,
-                                uint64_t value);
-extern int drmModePropertySetAddBlob(drmModePropertySetPtr set,
-                                    uint32_t object_id,
-                                    uint32_t property_id,
-                                    uint64_t length,
-                                    void *blob);
-
-extern int drmModePropertySetCommit(int fd, uint32_t flags,
-                                   void *user_data, drmModePropertySetPtr set);
-
-extern void drmModePropertySetFree(drmModePropertySetPtr set);
-
 typedef struct _drmModeAtomicReq drmModeAtomicReq, *drmModeAtomicReqPtr;
 
 extern drmModeAtomicReqPtr drmModeAtomicAlloc(void);
@@ -539,6 +446,28 @@ extern int drmModeCreatePropertyBlob(int fd, const void *data, size_t size,
                                     uint32_t *id);
 extern int drmModeDestroyPropertyBlob(int fd, uint32_t id);
 
+/*
+ * DRM mode lease APIs. These create and manage new drm_masters with
+ * access to a subset of the available DRM resources
+ */
+
+extern int drmModeCreateLease(int fd, const uint32_t *objects, int num_objects, int flags, uint32_t *lessee_id);
+
+typedef struct drmModeLesseeList {
+       uint32_t count;
+       uint32_t lessees[];
+} drmModeLesseeListRes, *drmModeLesseeListPtr;
+
+extern drmModeLesseeListPtr drmModeListLessees(int fd);
+
+typedef struct drmModeObjectList {
+       uint32_t count;
+       uint32_t objects[];
+} drmModeObjectListRes, *drmModeObjectListPtr;
+
+extern drmModeObjectListPtr drmModeGetLease(int fd);
+
+extern int drmModeRevokeLease(int fd, uint32_t lessee_id);
 
 #if defined(__cplusplus)
 }