Back to index

libdrm  2.4.37
Defines | Functions
drmtest.h File Reference
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <errno.h>
#include "xf86drm.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define DRM_TEST_MASTER   0x01

Functions

int drm_open_any (void)
int drm_open_any_master (void)
 Open the first DRM device we can find where we end up being the master.
int drm_open_matching (const char *pci_glob, int flags)
 Open the first DRM device matching the criteria.

Define Documentation

#define DRM_TEST_MASTER   0x01

Definition at line 36 of file drmtest.h.


Function Documentation

int drm_open_any ( void  )

Definition at line 109 of file drmtest.c.

{
       int fd = drm_open_matching("*:*", 0);

       if (fd < 0) {
              fprintf(stderr, "failed to open any drm device\n");
              exit(0);
       }

       return fd;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int drm_open_any_master ( void  )

Open the first DRM device we can find where we end up being the master.

Definition at line 124 of file drmtest.c.

{
       int fd = drm_open_matching("*:*", DRM_TEST_MASTER);

       if (fd < 0) {
              fprintf(stderr, "failed to open any drm device\n");
              exit(0);
       }

       return fd;

}

Here is the call graph for this function:

Here is the caller graph for this function:

int drm_open_matching ( const char *  pci_glob,
int  flags 
)

Open the first DRM device matching the criteria.

Definition at line 58 of file drmtest.c.

{
       struct udev *udev;
       struct udev_enumerate *e;
       struct udev_device *device, *parent;
        struct udev_list_entry *entry;
       const char *pci_id, *path;
       const char *usub, *dnode;
       int fd;

       udev = udev_new();
       if (udev == NULL) {
              fprintf(stderr, "failed to initialize udev context\n");
              abort();
       }

       fd = -1;
       e = udev_enumerate_new(udev);
       udev_enumerate_add_match_subsystem(e, "drm");
        udev_enumerate_scan_devices(e);
        udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) {
              path = udev_list_entry_get_name(entry);
              device = udev_device_new_from_syspath(udev, path);
              parent = udev_device_get_parent(device);
              usub = udev_device_get_subsystem(parent);
              /* Filter out KMS output devices. */
              if (!usub || (strcmp(usub, "pci") != 0))
                     continue;
              pci_id = udev_device_get_property_value(parent, "PCI_ID");
              if (fnmatch(pci_glob, pci_id, 0) != 0)
                     continue;
              dnode = udev_device_get_devnode(device);
              if (strstr(dnode, "control"))
                     continue;
              fd = open(dnode, O_RDWR);
              if (fd < 0)
                     continue;
              if ((flags & DRM_TEST_MASTER) && !is_master(fd)) {
                     close(fd);
                     fd = -1;
                     continue;
              }

              break;
       }
        udev_enumerate_unref(e);
       udev_unref(udev);

       return fd;
}

Here is the call graph for this function:

Here is the caller graph for this function: