diff options
author | Frank Binns | 2015-02-13 04:51:15 -0600 |
---|---|---|
committer | Emil Velikov | 2015-02-23 03:29:19 -0600 |
commit | 1f73578df32f895a678a41758f6c563f49484347 (patch) | |
tree | 4370fb5ecf5b2446045c62e6353d91ad77a0abdd /xf86drm.c | |
parent | 5c1c09e0d28cde4341777b966c21568fd9b51516 (diff) | |
download | external-libgbm-1f73578df32f895a678a41758f6c563f49484347.tar.gz external-libgbm-1f73578df32f895a678a41758f6c563f49484347.tar.xz external-libgbm-1f73578df32f895a678a41758f6c563f49484347.zip |
Add new drmGetNodeTypeFromFd function
Add a helper function that returns the type of device node from an fd.
Signed-off-by: Frank Binns <frank.binns@imgtec.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Diffstat (limited to 'xf86drm.c')
-rw-r--r-- | xf86drm.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -505,6 +505,23 @@ static int drmGetMinorBase(int type) | |||
505 | }; | 505 | }; |
506 | } | 506 | } |
507 | 507 | ||
508 | static int drmGetMinorType(int minor) | ||
509 | { | ||
510 | int type = minor >> 6; | ||
511 | |||
512 | if (minor < 0) | ||
513 | return -1; | ||
514 | |||
515 | switch (type) { | ||
516 | case DRM_NODE_PRIMARY: | ||
517 | case DRM_NODE_CONTROL: | ||
518 | case DRM_NODE_RENDER: | ||
519 | return type; | ||
520 | default: | ||
521 | return -1; | ||
522 | } | ||
523 | } | ||
524 | |||
508 | /** | 525 | /** |
509 | * Open the device by bus ID. | 526 | * Open the device by bus ID. |
510 | * | 527 | * |
@@ -2667,6 +2684,28 @@ char *drmGetDeviceNameFromFd(int fd) | |||
2667 | return strdup(name); | 2684 | return strdup(name); |
2668 | } | 2685 | } |
2669 | 2686 | ||
2687 | int drmGetNodeTypeFromFd(int fd) | ||
2688 | { | ||
2689 | struct stat sbuf; | ||
2690 | int maj, min, type; | ||
2691 | |||
2692 | if (fstat(fd, &sbuf)) | ||
2693 | return -1; | ||
2694 | |||
2695 | maj = major(sbuf.st_rdev); | ||
2696 | min = minor(sbuf.st_rdev); | ||
2697 | |||
2698 | if (maj != DRM_MAJOR || !S_ISCHR(sbuf.st_mode)) { | ||
2699 | errno = EINVAL; | ||
2700 | return -1; | ||
2701 | } | ||
2702 | |||
2703 | type = drmGetMinorType(min); | ||
2704 | if (type == -1) | ||
2705 | errno = ENODEV; | ||
2706 | return type; | ||
2707 | } | ||
2708 | |||
2670 | int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd) | 2709 | int drmPrimeHandleToFD(int fd, uint32_t handle, uint32_t flags, int *prime_fd) |
2671 | { | 2710 | { |
2672 | struct drm_prime_handle args; | 2711 | struct drm_prime_handle args; |