diff options
Diffstat (limited to 'drminfo.c')
-rw-r--r-- | drminfo.c | 103 |
1 files changed, 61 insertions, 42 deletions
@@ -75,6 +75,29 @@ static void drm_info_conn(int fd, drmModeConnector *conn) } } +static void drm_info_conns(int fd) +{ + drmModeConnector *conn; + drmModeRes *res; + int i; + + res = drmModeGetResources(fd); + if (res == NULL) { + fprintf(stderr, "drmModeGetResources() failed\n"); + exit(1); + } + + for (i = 0; i < res->count_connectors; i++) { + conn = drmModeGetConnector(fd, res->connectors[i]); + if (!conn) + continue; + + drm_info_conn(fd, conn); + drmModeFreeConnector(conn); + fprintf(stdout, "\n"); + } +} + static void drm_info_plane(int fd, drmModePlane *plane) { int i; @@ -92,6 +115,30 @@ static void drm_info_plane(int fd, drmModePlane *plane) fprintf(stdout, "\n"); } +static void drm_info_planes(int fd) +{ + drmModePlaneRes *pres; + drmModePlane *plane; + int i; + + drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); + pres = drmModeGetPlaneResources(fd); + if (pres == NULL) { + fprintf(stderr, "drmModeGetPlaneResources() failed\n"); + exit(1); + } + + for (i = 0; i < pres->count_planes; i++) { + plane = drmModeGetPlane(fd, pres->planes[i]); + if (!plane) + continue; + + drm_info_plane(fd, plane); + drmModeFreePlane(plane); + fprintf(stdout, "\n"); + } +} + static void drm_info_fmts(int fd) { int i; @@ -105,14 +152,10 @@ static void drm_info_fmts(int fd) fprintf(stdout, "\n"); } -static void drm_info(int devnr) +static int drm_open(int devnr) { - drmModeConnector *conn; - drmModePlaneRes *pres; - drmModePlane *plane; - drmModeRes *res; - char dev[64], *busid; - int fd, i; + char dev[64]; + int fd; snprintf(dev, sizeof(dev), DRM_DEV_NAME, DRM_DIR_NAME, devnr); fd = open(dev, O_RDWR); @@ -120,6 +163,12 @@ static void drm_info(int devnr) fprintf(stderr, "open %s: %s\n", dev, strerror(errno)); exit(1); } + return fd; +} + +static void drm_info_all(int fd) +{ + char *busid; busid = drmGetBusid(fd); if (busid) { @@ -127,39 +176,8 @@ static void drm_info(int devnr) } fprintf(stdout, "\n"); - res = drmModeGetResources(fd); - if (res == NULL) { - fprintf(stderr, "drmModeGetResources() failed\n"); - exit(1); - } - - for (i = 0; i < res->count_connectors; i++) { - conn = drmModeGetConnector(fd, res->connectors[i]); - if (!conn) - continue; - - drm_info_conn(fd, conn); - drmModeFreeConnector(conn); - fprintf(stdout, "\n"); - } - - drmSetClientCap(fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); - pres = drmModeGetPlaneResources(fd); - if (pres == NULL) { - fprintf(stderr, "drmModeGetPlaneResources() failed\n"); - exit(1); - } - - for (i = 0; i < pres->count_planes; i++) { - plane = drmModeGetPlane(fd, pres->planes[i]); - if (!plane) - continue; - - drm_info_plane(fd, plane); - drmModeFreePlane(plane); - fprintf(stdout, "\n"); - } - + drm_info_conns(fd); + drm_info_planes(fd); drm_info_fmts(fd); } @@ -193,7 +211,7 @@ static void usage(FILE *fp) int main(int argc, char **argv) { int card = 0; - int c; + int c, fd; for (;;) { c = getopt(argc, argv, "hlc:"); @@ -215,6 +233,7 @@ int main(int argc, char **argv) } } - drm_info(card); + fd = drm_open(card); + drm_info_all(fd); return 0; } |