diff options
Diffstat (limited to 'usr/src/cmd/drm-tests/misc2')
-rw-r--r-- | usr/src/cmd/drm-tests/misc2/Makefile | 36 | ||||
-rw-r--r-- | usr/src/cmd/drm-tests/misc2/Makefile.com | 58 | ||||
-rw-r--r-- | usr/src/cmd/drm-tests/misc2/amd64/Makefile | 6 | ||||
-rw-r--r-- | usr/src/cmd/drm-tests/misc2/common/drmtest_sun.c | 142 | ||||
-rw-r--r-- | usr/src/cmd/drm-tests/misc2/i386/Makefile | 5 |
5 files changed, 247 insertions, 0 deletions
diff --git a/usr/src/cmd/drm-tests/misc2/Makefile b/usr/src/cmd/drm-tests/misc2/Makefile new file mode 100644 index 0000000..91acb2f --- /dev/null +++ b/usr/src/cmd/drm-tests/misc2/Makefile @@ -0,0 +1,36 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Gordon W. Ross +# + +include $(SRC)/Makefile.master + +SUBDIRS= $(MACH) +$(BUILD64)SUBDIRS += $(MACH64) + +all := TARGET = all +install := TARGET = install +clean := TARGET = clean +clobber := TARGET = clobber +lint := TARGET = lint + +all: $(SUBDIRS) + +clean clobber lint: $(SUBDIRS) + +install: $(SUBDIRS) + +$(SUBDIRS): FRC + @cd $@; pwd; $(MAKE) $(TARGET) + +FRC: diff --git a/usr/src/cmd/drm-tests/misc2/Makefile.com b/usr/src/cmd/drm-tests/misc2/Makefile.com new file mode 100644 index 0000000..dd2862b --- /dev/null +++ b/usr/src/cmd/drm-tests/misc2/Makefile.com @@ -0,0 +1,58 @@ +# +# This file and its contents are supplied under the terms of the +# Common Development and Distribution License ("CDDL"), version 1.0. +# You may only use this file in accordance with the terms of version +# 1.0 of the CDDL. +# +# A full copy of the text of the CDDL should have accompanied this +# source. A copy of the CDDL is also available via the Internet at +# http://www.illumos.org/license/CDDL. +# + +# +# Copyright 2016 Gordon W. Ross +# + +PROG= \ + openclose \ + getversion \ + getclient \ + getstats \ + setversion \ + updatedraw \ + name_from_fd + +# All programs here require this devinfo object. +DEVOBJ=drmtest_sun.o + +include ../../Makefile.drm + +SRCDIR= $(LIBDRM_CMN_DIR)/tests + +LDLIBS += -ldrm -lm -ldevinfo + +LDLIBS32 += -L$(ROOT)/usr/lib/xorg \ + -R/usr/lib/xorg +LDLIBS64 += -L$(ROOT)/usr/lib/xorg/$(MACH64) \ + -R/usr/lib/xorg/$(MACH64) + +all: $(PROG) + +#This is in the lower Makefile +#install: $(ROOTCMD) + +lint: + +clean: + $(RM) $(PROG:%=%.o) $(DEVOBJ) + +% : $(SRCDIR)/%.c $(DEVOBJ) + $(COMPILE.c) -o $@.o $< + $(LINK.c) -o $@ $@.o $(DEVOBJ) $(LDLIBS) + +%.o : ../common/%.c + $(COMPILE.c) -o $@ -c $< + +.KEEP_STATE: + +include ../../../Makefile.targ diff --git a/usr/src/cmd/drm-tests/misc2/amd64/Makefile b/usr/src/cmd/drm-tests/misc2/amd64/Makefile new file mode 100644 index 0000000..2f29a7f --- /dev/null +++ b/usr/src/cmd/drm-tests/misc2/amd64/Makefile @@ -0,0 +1,6 @@ +include ../Makefile.com +include $(SRC)/cmd/Makefile.cmd.64 + +LDLIBS += $(LDLIBS64) + +install: all $(ROOTCMD64) diff --git a/usr/src/cmd/drm-tests/misc2/common/drmtest_sun.c b/usr/src/cmd/drm-tests/misc2/common/drmtest_sun.c new file mode 100644 index 0000000..6328803 --- /dev/null +++ b/usr/src/cmd/drm-tests/misc2/common/drmtest_sun.c @@ -0,0 +1,142 @@ +/* + * Copyright © 2007 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Eric Anholt <eric@anholt.net> + * + */ + +#include <string.h> +#include <fcntl.h> +#include <fnmatch.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include "drmtest.h" + +#include <libdevinfo.h> + +static int is_master(int fd) +{ + drm_client_t client; + int ret; + + /* Check that we're the only opener and authed. */ + client.idx = 0; + ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client); + assert (ret == 0); + if (!client.auth) + return 0; + client.idx = 1; + ret = ioctl(fd, DRM_IOCTL_GET_CLIENT, &client); + if (ret != -1 || errno != EINVAL) + return 0; + + return 1; +} + +/** Open the first DRM device matching the criteria */ +int drm_open_matching(const char *pci_glob, int flags) +{ + di_node_t udev; +// struct udev_enumerate *e; +// struct udev_device *device, *parent; +// struct udev_list_entry *entry; + const char *pci_id, *path; + const char *usub, *dnode; + uint_t di_flags; + int fd; + + /* Get everything? */ + di_flags = DINFOSUBTREE | DINFOPROP | DINFOMINOR | DINFOPATH | DINFOLYR; + udev = di_init("/", di_flags); + if (udev == DI_NODE_NIL) { + fprintf(stderr, "failed to initialize devinfo context\n"); + exit (1); + } + + fd = -1; +#if 0 // Todo + 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); +#else + exit (1); +#endif + + di_fini(udev); + + return fd; +} + +int drm_open_any(void) +{ + int fd = drm_open_matching("*:*", 0); + + if (fd < 0) { + fprintf(stderr, "failed to open any drm device\n"); + exit(0); + } + + return fd; +} + +/** + * Open the first DRM device we can find where we end up being the master. + */ +int drm_open_any_master(void) +{ + int fd = drm_open_matching("*:*", DRM_TEST_MASTER); + + if (fd < 0) { + fprintf(stderr, "failed to open any drm device\n"); + exit(0); + } + + return fd; + +} diff --git a/usr/src/cmd/drm-tests/misc2/i386/Makefile b/usr/src/cmd/drm-tests/misc2/i386/Makefile new file mode 100644 index 0000000..e72ca97 --- /dev/null +++ b/usr/src/cmd/drm-tests/misc2/i386/Makefile @@ -0,0 +1,5 @@ +include ../Makefile.com + +LDLIBS += $(LDLIBS32) + +install: all $(ROOTCMD) |