]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/libdrm.git/blobdiff - tests/modetest/modetest.c
modetest: support plane properties
[glsdk/libdrm.git] / tests / modetest / modetest.c
index 6deed69eaa45412655c4e2765cb9edfc7ddf5c4d..dc84cf32bda1ad68d67174c595f15a7a1d4c027c 100644 (file)
@@ -43,6 +43,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <inttypes.h>
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
@@ -145,7 +146,7 @@ void dump_encoders(void)
 
 void dump_mode(drmModeModeInfo *mode)
 {
-       printf("  %s %d %d %d %d %d %d %d %d %d\n",
+       printf("\t%s %d %d %d %d %d %d %d %d %d\n",
               mode->name,
               mode->vrefresh,
               mode->hdisplay,
@@ -159,16 +160,98 @@ void dump_mode(drmModeModeInfo *mode)
 }
 
 static void
-dump_props(drmModeConnector *connector)
+dump_blob(uint32_t blob_id)
+{
+       uint32_t i;
+       unsigned char *blob_data;
+       drmModePropertyBlobPtr blob;
+
+       blob = drmModeGetPropertyBlob(fd, blob_id);
+       if (!blob)
+               return;
+
+       blob_data = blob->data;
+
+       for (i = 0; i < blob->length; i++) {
+               if (i % 16 == 0)
+                       printf("\n\t\t\t");
+               printf("%.2hhx", blob_data[i]);
+       }
+       printf("\n");
+
+       drmModeFreePropertyBlob(blob);
+}
+
+static void
+dump_prop(uint32_t prop_id, uint64_t value)
 {
-       drmModePropertyPtr props;
        int i;
+       drmModePropertyPtr prop;
+
+       prop = drmModeGetProperty(fd, prop_id);
 
-       for (i = 0; i < connector->count_props; i++) {
-               props = drmModeGetProperty(fd, connector->props[i]);
-               printf("\t%s, flags %d\n", props->name, props->flags);
-               drmModeFreeProperty(props);
+       printf("\t%d", prop_id);
+       if (!prop) {
+               printf("\n");
+               return;
+       }
+
+       printf(" %s:\n", prop->name);
+
+       printf("\t\tflags:");
+       if (prop->flags & DRM_MODE_PROP_PENDING)
+               printf(" pending");
+       if (prop->flags & DRM_MODE_PROP_RANGE)
+               printf(" range");
+       if (prop->flags & DRM_MODE_PROP_IMMUTABLE)
+               printf(" immutable");
+       if (prop->flags & DRM_MODE_PROP_ENUM)
+               printf(" enum");
+       if (prop->flags & DRM_MODE_PROP_BITMASK)
+               printf(" bitmask");
+       if (prop->flags & DRM_MODE_PROP_BLOB)
+               printf(" blob");
+       printf("\n");
+
+       if (prop->flags & DRM_MODE_PROP_RANGE) {
+               printf("\t\tvalues:");
+               for (i = 0; i < prop->count_values; i++)
+                       printf(" %"PRIu64, prop->values[i]);
+               printf("\n");
        }
+
+       if (prop->flags & DRM_MODE_PROP_ENUM) {
+               printf("\t\tenums:");
+               for (i = 0; i < prop->count_enums; i++)
+                       printf(" %s=%llu", prop->enums[i].name,
+                              prop->enums[i].value);
+               printf("\n");
+       } else if (prop->flags & DRM_MODE_PROP_BITMASK) {
+               printf("\t\tvalues:");
+               for (i = 0; i < prop->count_enums; i++)
+                       printf(" %s=0x%llx", prop->enums[i].name,
+                              (1LL << prop->enums[i].value));
+               printf("\n");
+       } else {
+               assert(prop->count_enums == 0);
+       }
+
+       if (prop->flags & DRM_MODE_PROP_BLOB) {
+               printf("\t\tblobs:\n");
+               for (i = 0; i < prop->count_blobs; i++)
+                       dump_blob(prop->blob_ids[i]);
+               printf("\n");
+       } else {
+               assert(prop->count_blobs == 0);
+       }
+
+       printf("\t\tvalue:");
+       if (prop->flags & DRM_MODE_PROP_BLOB)
+               dump_blob(value);
+       else
+               printf(" %"PRIu64"\n", value);
+
+       drmModeFreeProperty(prop);
 }
 
 void dump_connectors(void)
@@ -201,13 +284,15 @@ void dump_connectors(void)
 
                if (connector->count_modes) {
                        printf("  modes:\n");
-                       printf("  name refresh (Hz) hdisp hss hse htot vdisp "
+                       printf("\tname refresh (Hz) hdisp hss hse htot vdisp "
                               "vss vse vtot)\n");
                        for (j = 0; j < connector->count_modes; j++)
                                dump_mode(&connector->modes[j]);
 
                        printf("  props:\n");
-                       dump_props(connector);
+                       for (j = 0; j < connector->count_props; j++)
+                               dump_prop(connector->props[j],
+                                         connector->prop_values[j]);
                }
 
                drmModeFreeConnector(connector);
@@ -218,7 +303,9 @@ void dump_connectors(void)
 void dump_crtcs(void)
 {
        drmModeCrtc *crtc;
+       drmModeObjectPropertiesPtr props;
        int i;
+       uint32_t j;
 
        printf("CRTCs:\n");
        printf("id\tfb\tpos\tsize\n");
@@ -237,6 +324,19 @@ void dump_crtcs(void)
                       crtc->width, crtc->height);
                dump_mode(&crtc->mode);
 
+               printf("  props:\n");
+               props = drmModeObjectGetProperties(fd, crtc->crtc_id,
+                                                  DRM_MODE_OBJECT_CRTC);
+               if (props) {
+                       for (j = 0; j < props->count_props; j++)
+                               dump_prop(props->props[j],
+                                         props->prop_values[j]);
+                       drmModeFreeObjectProperties(props);
+               } else {
+                       printf("\tcould not get crtc properties: %s\n",
+                              strerror(errno));
+               }
+
                drmModeFreeCrtc(crtc);
        }
        printf("\n");
@@ -269,6 +369,7 @@ void dump_framebuffers(void)
 
 static void dump_planes(void)
 {
+       drmModeObjectPropertiesPtr props;
        drmModePlaneRes *plane_resources;
        drmModePlane *ovr;
        unsigned int i, j;
@@ -303,6 +404,19 @@ static void dump_planes(void)
                        printf(" %4.4s", (char *)&ovr->formats[j]);
                printf("\n");
 
+               printf("  props:\n");
+               props = drmModeObjectGetProperties(fd, ovr->plane_id,
+                                                  DRM_MODE_OBJECT_PLANE);
+               if (props) {
+                       for (j = 0; j < props->count_props; j++)
+                               dump_prop(props->props[j],
+                                         props->prop_values[j]);
+                       drmModeFreeObjectProperties(props);
+               } else {
+                       printf("\tcould not get plane properties: %s\n",
+                              strerror(errno));
+               }
+
                drmModeFreePlane(ovr);
        }
        printf("\n");
@@ -1022,7 +1136,7 @@ int main(int argc, char **argv)
        int c;
        int encoders = 0, connectors = 0, crtcs = 0, planes = 0, framebuffers = 0;
        int test_vsync = 0;
-       char *modules[] = { "i915", "radeon", "nouveau", "vmwgfx", "omapdrm" };
+       char *modules[] = { "i915", "radeon", "nouveau", "vmwgfx", "omapdrm", "exynos" };
        unsigned int i;
        int count = 0, plane_count = 0;
        struct connector con_args[2];