Merge branch 'master' into modesetting-101 - TTM & typedef removal
[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 "drmtest.h"
30
31 /** Open the first DRM device we can find, searching up to 16 device nodes */
32 int drm_open_any(void)
33 {
34         char name[20];
35         int i, fd;
36
37         for (i = 0; i < 16; i++) {
38                 sprintf(name, "/dev/dri/card%d", i);
39                 fd = open(name, O_RDWR);
40                 if (fd != -1)
41                         return fd;
42         }
43         abort();
44 }
45
46
47 /**
48  * Open the first DRM device we can find where we end up being the master.
49  */
50 int drm_open_any_master(void)
51 {
52         char name[20];
53         int i, fd;
54
55         for (i = 0; i < 16; i++) {
56                 drm_client_t client;
57                 int ret;
58
59                 sprintf(name, "/dev/dri/card%d", i);
60                 fd = open(name, O_RDWR);
61                 if (fd == -1)
62                         continue;
63
64                 /* Check that we're the only opener and authed. */
65                 client.idx = 0;
66                 ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
67                 assert (ret == 0);
68                 if (!client.auth) {
69                         close(fd);
70                         continue;
71                 }
72                 client.idx = 1;
73                 ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client);
74                 if (ret != -1 || errno != EINVAL) {
75                         close(fd);
76                         continue;
77                 }
78                 return fd;
79         }
80         fprintf(stderr, "Couldn't find an un-controlled DRM device\n");
81         abort();
82 }
83