aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2016-03-23 08:10:05 +0100
committerGerd Hoffmann <kraxel@redhat.com>2016-03-23 08:10:05 +0100
commit2d4d026a09d9506fac0dac13f570cc50fe6d7b77 (patch)
treeccbbb4dd3dbc4ff7e276ee2dfd1d2268993828ce
parentda699145758cb45225a0567299d2d59d95563501 (diff)
downloaddrminfo-2d4d026a09d9506fac0dac13f570cc50fe6d7b77.tar.gz
drmtools
-rw-r--r--Makefile4
-rw-r--r--drminfo.c62
-rw-r--r--drmtest.c32
-rw-r--r--drmtools.c76
-rw-r--r--drmtools.h3
5 files changed, 110 insertions, 67 deletions
diff --git a/Makefile b/Makefile
index 26b06bb..a4ea727 100644
--- a/Makefile
+++ b/Makefile
@@ -13,5 +13,5 @@ clean:
rm -f $(TARGETS)
rm -f *~
-drminfo: drminfo.o
-drmtest: drmtest.o
+drminfo: drminfo.o drmtools.o
+drmtest: drmtest.o drmtools.o
diff --git a/drminfo.c b/drminfo.c
index 7e35f58..173ae15 100644
--- a/drminfo.c
+++ b/drminfo.c
@@ -12,61 +12,7 @@
#include <xf86drm.h>
#include <xf86drmMode.h>
-/* ------------------------------------------------------------------ */
-
-static const char *conn_type[] = {
- [ DRM_MODE_CONNECTOR_Unknown ] = "Unknown",
- [ DRM_MODE_CONNECTOR_VGA ] = "VGA",
- [ DRM_MODE_CONNECTOR_DVII ] = "DVII",
- [ DRM_MODE_CONNECTOR_DVID ] = "DVID",
- [ DRM_MODE_CONNECTOR_DVIA ] = "DVIA",
- [ DRM_MODE_CONNECTOR_Composite ] = "Composite",
- [ DRM_MODE_CONNECTOR_SVIDEO ] = "SVIDEO",
- [ DRM_MODE_CONNECTOR_LVDS ] = "LVDS",
- [ DRM_MODE_CONNECTOR_Component ] = "Component",
- [ DRM_MODE_CONNECTOR_9PinDIN ] = "9PinDIN",
- [ DRM_MODE_CONNECTOR_DisplayPort ] = "DisplayPort",
- [ DRM_MODE_CONNECTOR_HDMIA ] = "HDMIA",
- [ DRM_MODE_CONNECTOR_HDMIB ] = "HDMIB",
- [ DRM_MODE_CONNECTOR_TV ] = "TV",
- [ DRM_MODE_CONNECTOR_eDP ] = "eDP",
- [ DRM_MODE_CONNECTOR_VIRTUAL ] = "VIRTUAL",
- [ DRM_MODE_CONNECTOR_DSI ] = "DSI",
-};
-
-static const char *conn_mode[] = {
- [ DRM_MODE_CONNECTED ] = "connected",
- [ DRM_MODE_DISCONNECTED ] = "disconnected",
- [ DRM_MODE_UNKNOWNCONNECTION ] = "unknown",
-};
-
-static const char *enc_type[] = {
- [ DRM_MODE_ENCODER_NONE ] = "NONE",
- [ DRM_MODE_ENCODER_DAC ] = "DAC",
- [ DRM_MODE_ENCODER_TMDS ] = "TMDS",
- [ DRM_MODE_ENCODER_LVDS ] = "LVDS",
- [ DRM_MODE_ENCODER_TVDAC ] = "TVDAC",
- [ DRM_MODE_ENCODER_VIRTUAL ] = "VIRTUAL",
- [ DRM_MODE_ENCODER_DSI ] = "DSI",
-};
-
-static const char *enum2name(const char *names[], int len, int nr)
-{
- if (nr >= len)
- return "???";
- if (!names[nr])
- return "???";
- return names[nr];
-}
-
-#define connector_type_name(_i) \
- enum2name((conn_type), (sizeof(conn_type)/sizeof(conn_type[0])), (_i))
-
-#define connector_mode_name(_i) \
- enum2name((conn_mode), (sizeof(conn_mode)/sizeof(conn_mode[0])), (_i))
-
-#define encoder_type_name(_i) \
- enum2name((enc_type), (sizeof(enc_type)/sizeof(enc_type[0])), (_i))
+#include "drmtools.h"
/* ------------------------------------------------------------------ */
@@ -99,9 +45,9 @@ static void drm_info(int devnr)
fprintf(stdout, "id %d: %s-%d, %s\n",
conn->connector_id,
- connector_type_name(conn->connector_type),
+ drm_connector_type_name(conn->connector_type),
conn->connector_type_id,
- connector_mode_name(conn->connection));
+ drm_connector_mode_name(conn->connection));
if (conn->count_encoders) {
fprintf(stdout, " %d encoders\n",
@@ -112,7 +58,7 @@ static void drm_info(int devnr)
continue;
fprintf(stdout, " id %d: %s",
enc->encoder_id,
- encoder_type_name(enc->encoder_type));
+ drm_encoder_type_name(enc->encoder_type));
if (enc->encoder_id == conn->encoder_id)
fprintf(stdout, ", active");
if (enc->crtc_id) {
diff --git a/drmtest.c b/drmtest.c
index dd05f49..0ad5bde 100644
--- a/drmtest.c
+++ b/drmtest.c
@@ -27,6 +27,8 @@ static struct drm_mode_create_dumb creq;
static uint32_t fb_id;
static uint8_t *fbmem;
+/* ------------------------------------------------------------------ */
+
static void drm_init_dev(int devnr, bool need_dumb, bool need_master)
{
drmModeRes *res;
@@ -95,6 +97,8 @@ static void drm_fini_dev(void)
}
}
+/* ------------------------------------------------------------------ */
+
static void drm_init_dumb_fb(void)
{
struct drm_mode_map_dumb mreq;
@@ -164,6 +168,10 @@ static void drm_show_dumb_fb(void)
/* ------------------------------------------------------------------ */
+
+
+/* ------------------------------------------------------------------ */
+
static void usage(FILE *fp)
{
fprintf(fp,
@@ -179,16 +187,20 @@ static void usage(FILE *fp)
int main(int argc, char **argv)
{
int card = 0;
+ bool gl = false;
int c;
for (;;) {
- c = getopt(argc, argv, "hc:");
+ c = getopt(argc, argv, "hgc:");
if (c == -1)
break;
switch (c) {
case 'c':
card = atoi(optarg);
break;
+ case 'g':
+ gl = true;
+ break;
case 'h':
usage(stdout);
exit(0);
@@ -198,11 +210,17 @@ int main(int argc, char **argv)
}
}
- drm_init_dev(card, true, true);
- drm_init_dumb_fb();
- drm_draw_dumb_fb();
- drm_show_dumb_fb();
- sleep(3);
- drm_fini_dev();
+ if (gl) {
+ drm_init_dev(card, true, true);
+ sleep(3);
+ drm_fini_dev();
+ } else {
+ drm_init_dev(card, true, true);
+ drm_init_dumb_fb();
+ drm_draw_dumb_fb();
+ drm_show_dumb_fb();
+ sleep(3);
+ drm_fini_dev();
+ }
return 0;
}
diff --git a/drmtools.c b/drmtools.c
new file mode 100644
index 0000000..46f321a
--- /dev/null
+++ b/drmtools.c
@@ -0,0 +1,76 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <string.h>
+#include <inttypes.h>
+
+#include <sys/ioctl.h>
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+#include "drmtools.h"
+
+/* ------------------------------------------------------------------ */
+
+static const char *conn_type[] = {
+ [ DRM_MODE_CONNECTOR_Unknown ] = "Unknown",
+ [ DRM_MODE_CONNECTOR_VGA ] = "VGA",
+ [ DRM_MODE_CONNECTOR_DVII ] = "DVII",
+ [ DRM_MODE_CONNECTOR_DVID ] = "DVID",
+ [ DRM_MODE_CONNECTOR_DVIA ] = "DVIA",
+ [ DRM_MODE_CONNECTOR_Composite ] = "Composite",
+ [ DRM_MODE_CONNECTOR_SVIDEO ] = "SVIDEO",
+ [ DRM_MODE_CONNECTOR_LVDS ] = "LVDS",
+ [ DRM_MODE_CONNECTOR_Component ] = "Component",
+ [ DRM_MODE_CONNECTOR_9PinDIN ] = "9PinDIN",
+ [ DRM_MODE_CONNECTOR_DisplayPort ] = "DisplayPort",
+ [ DRM_MODE_CONNECTOR_HDMIA ] = "HDMIA",
+ [ DRM_MODE_CONNECTOR_HDMIB ] = "HDMIB",
+ [ DRM_MODE_CONNECTOR_TV ] = "TV",
+ [ DRM_MODE_CONNECTOR_eDP ] = "eDP",
+ [ DRM_MODE_CONNECTOR_VIRTUAL ] = "VIRTUAL",
+ [ DRM_MODE_CONNECTOR_DSI ] = "DSI",
+};
+
+static const char *conn_mode[] = {
+ [ DRM_MODE_CONNECTED ] = "connected",
+ [ DRM_MODE_DISCONNECTED ] = "disconnected",
+ [ DRM_MODE_UNKNOWNCONNECTION ] = "unknown",
+};
+
+static const char *enc_type[] = {
+ [ DRM_MODE_ENCODER_NONE ] = "NONE",
+ [ DRM_MODE_ENCODER_DAC ] = "DAC",
+ [ DRM_MODE_ENCODER_TMDS ] = "TMDS",
+ [ DRM_MODE_ENCODER_LVDS ] = "LVDS",
+ [ DRM_MODE_ENCODER_TVDAC ] = "TVDAC",
+ [ DRM_MODE_ENCODER_VIRTUAL ] = "VIRTUAL",
+ [ DRM_MODE_ENCODER_DSI ] = "DSI",
+};
+
+static const char *enum2name(const char *names[], int len, int nr)
+{
+ if (nr >= len)
+ return "???";
+ if (!names[nr])
+ return "???";
+ return names[nr];
+}
+
+const char *drm_connector_type_name(int nr)
+{
+ return enum2name(conn_type, sizeof(conn_type)/sizeof(conn_type[0]), nr);
+}
+
+const char *drm_connector_mode_name(int nr)
+{
+ return enum2name(conn_mode, sizeof(conn_mode)/sizeof(conn_mode[0]), nr);
+}
+
+const char *drm_encoder_type_name(int nr)
+{
+ return enum2name(enc_type, sizeof(enc_type)/sizeof(enc_type[0]), nr);
+}
diff --git a/drmtools.h b/drmtools.h
new file mode 100644
index 0000000..910f83d
--- /dev/null
+++ b/drmtools.h
@@ -0,0 +1,3 @@
+const char *drm_connector_type_name(int nr);
+const char *drm_connector_mode_name(int nr);
+const char *drm_encoder_type_name(int nr);