From 22aa9544dc826dc4c70af0ac1d47596ac6fc3d77 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Wed, 9 Jan 2019 09:22:11 +0100 Subject: add prime.c --- prime.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 prime.c (limited to 'prime.c') diff --git a/prime.c b/prime.c new file mode 100644 index 0000000..8a11656 --- /dev/null +++ b/prime.c @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +/* ------------------------------------------------------------------ */ + +int drm_init_dev(const char *devname) +{ + uint64_t prime, dumb; + int fd, rc; + + /* open device */ + fd = open(devname, O_RDWR); + if (fd < 0) { + fprintf(stderr, "open %s: %s\n", devname, strerror(errno)); + exit(1); + } + + rc = drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &dumb); + if (rc < 0) { + fprintf(stderr, "drmGetCap(DRM_CAP_DUMB_BUFFER): %s\n", strerror(errno)); + exit(1); + } + rc = drmGetCap(fd, DRM_CAP_PRIME, &prime); + if (rc < 0) { + fprintf(stderr, "drmGetCap(DRM_CAP_PRIME): %s\n", strerror(errno)); + exit(1); + } + + fprintf(stderr, "%s:\n", devname); + fprintf(stderr, " dumb buffers: %s\n", + dumb ? "yes" : "no"); + fprintf(stderr, " prime import: %s\n", + prime & DRM_PRIME_CAP_IMPORT ? "yes" : "no"); + fprintf(stderr, " prime export: %s\n", + prime & DRM_PRIME_CAP_EXPORT ? "yes" : "no"); + + return fd; +} + +/* ------------------------------------------------------------------ */ + +static void usage(FILE *fp) +{ + fprintf(fp, + "\n" + "usage: prime [ options ]\n" + "\n" + "options:\n" + " -h print this\n" + "\n"); +} + +int main(int argc, char **argv) +{ + char devname[64]; + int card, c, i; + + for (;;) { + c = getopt(argc, argv, "h"); + if (c == -1) + break; + switch (c) { + case 'h': + usage(stdout); + exit(0); + default: + usage(stderr); + exit(1); + } + } + + for (i = 0;; i++) { + snprintf(devname, sizeof(devname), DRM_DEV_NAME, DRM_DIR_NAME, i); + if (access(devname, R_OK | W_OK) != 0) + break; + card = drm_init_dev(devname); + close(card); + } + + return 0; +} -- cgit