Merge branch 'master' into modesetting-gem
[platform/upstream/libdrm.git] / tests / drmtest.c
1 /*
2  * Copyright © 2007 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *    Eric Anholt <eric@anholt.net>
25  *
26  */
27
28 #include <fcntl.h>
29 #include <sys/stat.h>
30 #include "drmtest.h"
31
32 /** Open the first DRM device we can find, searching up to 16 device nodes */
33 int drm_open_any(void)
34 {
35         char name[20];
36         int i, fd;
37
38         for (i = 0; i < 16; i++) {
39                 sprintf(name, "/dev/dri/card%d", i);
40                 fd = open(name, O_RDWR);
41                 if (fd != -1)
42                         return fd;
43         }
44         abort();
45 }
46
47
48 /**
49  * Open the first DRM device we can find where we end up being the master.
50  */
51 int drm_open_any_master(void)
52 {
53         char name[20];
54         int i, fd;
55
56         for (i = 0; i < 16; i++) {
57                 drm_client_t client;
58                 int ret;
59
60                 sprintf(name, "/dev/dri/card%d", i);
61                 fd = open(name, O_RDWR);
62                 if (fd == -1)
63                         continue;
64
65                 /* Check that we're the only opener and authed. */
66                 client.idx = 0;
67                 ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
68                 assert (ret == 0);
69                 if (!client.auth) {
70                         close(fd);
71                         continue;
72                 }
73                 client.idx = 1;
74                 ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
75                 if (ret != -1 || errno != EINVAL) {
76                         close(fd);
77                         continue;
78                 }
79                 return fd;
80         }
81         fprintf(stderr, "Couldn't find an un-controlled DRM device\n");
82         abort();
83 }