summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile.sources2
-rw-r--r--lib/drmtest.c188
-rw-r--r--lib/drmtest.h36
-rw-r--r--lib/igt_aux.c249
-rw-r--r--lib/igt_aux.h67
-rw-r--r--lib/igt_core.c1
-rw-r--r--lib/igt_kms.c1
-rw-r--r--lib/igt_kms.h3
-rw-r--r--lib/intel_os.c2
-rw-r--r--lib/rendercopy_gen8.c7
10 files changed, 331 insertions, 225 deletions
diff --git a/lib/Makefile.sources b/lib/Makefile.sources
index 3e2a4b5b..4e83d311 100644
--- a/lib/Makefile.sources
+++ b/lib/Makefile.sources
@@ -10,6 +10,8 @@ libintel_tools_la_SOURCES = \
igt_debugfs.h \
igt_display.c \
igt_display.h \
+ igt_aux.c \
+ igt_aux.h \
instdone.c \
instdone.h \
intel_batchbuffer.c \
diff --git a/lib/drmtest.c b/lib/drmtest.c
index 9fcd221b..8bb64f0c 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -277,191 +277,3 @@ int drm_open_any_render(void)
return fd;
}
-
-/* signal interrupt helpers */
-static struct igt_helper_process signal_helper;
-long long int sig_stat;
-static void __attribute__((noreturn)) signal_helper_process(pid_t pid)
-{
- /* Interrupt the parent process at 500Hz, just to be annoying */
- while (1) {
- usleep(1000 * 1000 / 500);
- if (kill(pid, SIGUSR1)) /* Parent has died, so must we. */
- exit(0);
- }
-}
-
-static void sig_handler(int i)
-{
- sig_stat++;
-}
-
-void igt_fork_signal_helper(void)
-{
- if (igt_only_list_subtests())
- return;
-
- signal(SIGUSR1, sig_handler);
-
- igt_fork_helper(&signal_helper) {
- signal_helper_process(getppid());
- }
-}
-
-void igt_stop_signal_helper(void)
-{
- if (igt_only_list_subtests())
- return;
-
- igt_stop_helper(&signal_helper);
-
- sig_stat = 0;
-}
-
-bool igt_env_set(const char *env_var, bool default_value)
-{
- char *val;
-
- val = getenv(env_var);
- if (!val)
- return default_value;
-
- return atoi(val) != 0;
-}
-
-bool igt_aub_dump_enabled(void)
-{
- static int dump_aub = -1;
-
- if (dump_aub == -1)
- dump_aub = igt_env_set("IGT_DUMP_AUB", false);
-
- return dump_aub;
-}
-
-/* other helpers */
-void igt_exchange_int(void *array, unsigned i, unsigned j)
-{
- int *int_arr, tmp;
- int_arr = array;
-
- tmp = int_arr[i];
- int_arr[i] = int_arr[j];
- int_arr[j] = tmp;
-}
-
-void igt_permute_array(void *array, unsigned size,
- void (*exchange_func)(void *array,
- unsigned i,
- unsigned j))
-{
- int i;
-
- for (i = size - 1; i > 1; i--) {
- /* yes, not perfectly uniform, who cares */
- long l = random() % (i +1);
- if (i != l)
- exchange_func(array, i, l);
- }
-}
-
-void igt_progress(const char *header, uint64_t i, uint64_t total)
-{
- int divider = 200;
-
- if (!isatty(fileno(stderr)))
- return;
-
- if (i+1 >= total) {
- fprintf(stderr, "\r%s100%%\n", header);
- return;
- }
-
- if (total / 200 == 0)
- divider = 1;
-
- /* only bother updating about every 0.5% */
- if (i % (total / divider) == 0 || i+1 >= total) {
- fprintf(stderr, "\r%s%3llu%%", header,
- (long long unsigned) i * 100 / total);
- }
-}
-
-/* mappable aperture trasher helper */
-drm_intel_bo **trash_bos;
-int num_trash_bos;
-
-void igt_init_aperture_trashers(drm_intel_bufmgr *bufmgr)
-{
- int i;
-
- num_trash_bos = gem_mappable_aperture_size() / (1024*1024);
-
- trash_bos = malloc(num_trash_bos * sizeof(drm_intel_bo *));
- igt_assert(trash_bos);
-
- for (i = 0; i < num_trash_bos; i++)
- trash_bos[i] = drm_intel_bo_alloc(bufmgr, "trash bo", 1024*1024, 4096);
-}
-
-void igt_trash_aperture(void)
-{
- int i;
- uint8_t *gtt_ptr;
-
- for (i = 0; i < num_trash_bos; i++) {
- drm_intel_gem_bo_map_gtt(trash_bos[i]);
- gtt_ptr = trash_bos[i]->virtual;
- *gtt_ptr = 0;
- drm_intel_gem_bo_unmap_gtt(trash_bos[i]);
- }
-}
-
-void igt_cleanup_aperture_trashers(void)
-{
- int i;
-
- for (i = 0; i < num_trash_bos; i++)
- drm_intel_bo_unreference(trash_bos[i]);
-
- free(trash_bos);
-}
-
-void igt_system_suspend_autoresume(void)
-{
- int ret;
-
- /* FIXME: Simulation doesn't like suspend/resume, and not even a lighter
- * approach using /sys/power/pm_test to just test our driver's callbacks
- * seems to fare better. We need to investigate what's going on. */
- igt_skip_on_simulation();
-
- ret = system("rtcwake -s 30 -m mem");
- igt_assert(ret == 0);
-}
-
-void igt_drop_root(void)
-{
- igt_assert(getuid() == 0);
-
- igt_assert(setgid(2) == 0);
- igt_assert(setuid(2) == 0);
-
- igt_assert(getgid() == 2);
- igt_assert(getuid() == 2);
-}
-
-void igt_wait_for_keypress(void)
-{
- struct termios oldt, newt;
-
- if (!isatty(STDIN_FILENO))
- return;
-
- tcgetattr ( STDIN_FILENO, &oldt );
- newt = oldt;
- newt.c_lflag &= ~( ICANON | ECHO );
- tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
- getchar();
- tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
-}
diff --git a/lib/drmtest.h b/lib/drmtest.h
index 0985109b..631627cc 100644
--- a/lib/drmtest.h
+++ b/lib/drmtest.h
@@ -34,7 +34,8 @@
#include <sys/mman.h>
#include <xf86drm.h>
-#include <intel_batchbuffer.h>
+
+#include "intel_batchbuffer.h"
#ifdef ANDROID
#ifndef HAVE_MMAP64
@@ -55,40 +56,7 @@ int drm_open_any_render(void);
void gem_quiescent_gpu(int fd);
-/* generally useful helpers */
-void igt_fork_signal_helper(void);
-void igt_stop_signal_helper(void);
-void igt_exchange_int(void *array, unsigned i, unsigned j);
-void igt_permute_array(void *array, unsigned size,
- void (*exchange_func)(void *array,
- unsigned i,
- unsigned j));
-void igt_progress(const char *header, uint64_t i, uint64_t total);
-bool igt_env_set(const char *env_var, bool default_value);
-
-bool igt_aub_dump_enabled(void);
-
-/* helpers based upon the libdrm buffer manager */
-void igt_init_aperture_trashers(drm_intel_bufmgr *bufmgr);
-void igt_trash_aperture(void);
-void igt_cleanup_aperture_trashers(void);
-
#define do_or_die(x) igt_assert((x) == 0)
#define do_ioctl(fd, ptr, sz) igt_assert(drmIoctl((fd), (ptr), (sz)) == 0)
-/* set vt into graphics mode, required to prevent fbcon from interfering */
-void igt_set_vt_graphics_mode(void);
-
-/* suspend and auto-resume system */
-void igt_system_suspend_autoresume(void);
-
-/* dropping priviledges */
-void igt_drop_root(void);
-
-void igt_wait_for_keypress(void);
-
-/* sysinfo cross-arch wrappers from intel_os.c */
-uint64_t intel_get_total_ram_mb(void);
-uint64_t intel_get_total_swap_mb(void);
-
#endif /* DRMTEST_H */
diff --git a/lib/igt_aux.c b/lib/igt_aux.c
new file mode 100644
index 00000000..fff5f0e8
--- /dev/null
+++ b/lib/igt_aux.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright © 2007, 2011, 2013, 2014 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>
+ * Daniel Vetter <daniel.vetter@ffwll.ch>
+ *
+ */
+
+#ifndef ANDROID
+#define _GNU_SOURCE
+#else
+#include <libgen.h>
+#endif
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <signal.h>
+#include <pciaccess.h>
+#include <getopt.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/syscall.h>
+#include <sys/utsname.h>
+#include <termios.h>
+
+#include "drmtest.h"
+#include "i915_drm.h"
+#include "intel_chipset.h"
+#include "igt_aux.h"
+#include "igt_debugfs.h"
+#include "../version.h"
+#include "config.h"
+#include "intel_reg.h"
+#include "ioctl_wrappers.h"
+
+
+
+/* signal interrupt helpers */
+static struct igt_helper_process signal_helper;
+long long int sig_stat;
+static void __attribute__((noreturn)) signal_helper_process(pid_t pid)
+{
+ /* Interrupt the parent process at 500Hz, just to be annoying */
+ while (1) {
+ usleep(1000 * 1000 / 500);
+ if (kill(pid, SIGUSR1)) /* Parent has died, so must we. */
+ exit(0);
+ }
+}
+
+static void sig_handler(int i)
+{
+ sig_stat++;
+}
+
+void igt_fork_signal_helper(void)
+{
+ if (igt_only_list_subtests())
+ return;
+
+ signal(SIGUSR1, sig_handler);
+
+ igt_fork_helper(&signal_helper) {
+ signal_helper_process(getppid());
+ }
+}
+
+void igt_stop_signal_helper(void)
+{
+ if (igt_only_list_subtests())
+ return;
+
+ igt_stop_helper(&signal_helper);
+
+ sig_stat = 0;
+}
+
+bool igt_env_set(const char *env_var, bool default_value)
+{
+ char *val;
+
+ val = getenv(env_var);
+ if (!val)
+ return default_value;
+
+ return atoi(val) != 0;
+}
+
+bool igt_aub_dump_enabled(void)
+{
+ static int dump_aub = -1;
+
+ if (dump_aub == -1)
+ dump_aub = igt_env_set("IGT_DUMP_AUB", false);
+
+ return dump_aub;
+}
+
+/* other helpers */
+void igt_exchange_int(void *array, unsigned i, unsigned j)
+{
+ int *int_arr, tmp;
+ int_arr = array;
+
+ tmp = int_arr[i];
+ int_arr[i] = int_arr[j];
+ int_arr[j] = tmp;
+}
+
+void igt_permute_array(void *array, unsigned size,
+ void (*exchange_func)(void *array,
+ unsigned i,
+ unsigned j))
+{
+ int i;
+
+ for (i = size - 1; i > 1; i--) {
+ /* yes, not perfectly uniform, who cares */
+ long l = random() % (i +1);
+ if (i != l)
+ exchange_func(array, i, l);
+ }
+}
+
+void igt_progress(const char *header, uint64_t i, uint64_t total)
+{
+ int divider = 200;
+
+ if (!isatty(fileno(stderr)))
+ return;
+
+ if (i+1 >= total) {
+ fprintf(stderr, "\r%s100%%\n", header);
+ return;
+ }
+
+ if (total / 200 == 0)
+ divider = 1;
+
+ /* only bother updating about every 0.5% */
+ if (i % (total / divider) == 0 || i+1 >= total) {
+ fprintf(stderr, "\r%s%3llu%%", header,
+ (long long unsigned) i * 100 / total);
+ }
+}
+
+/* mappable aperture trasher helper */
+drm_intel_bo **trash_bos;
+int num_trash_bos;
+
+void igt_init_aperture_trashers(drm_intel_bufmgr *bufmgr)
+{
+ int i;
+
+ num_trash_bos = gem_mappable_aperture_size() / (1024*1024);
+
+ trash_bos = malloc(num_trash_bos * sizeof(drm_intel_bo *));
+ igt_assert(trash_bos);
+
+ for (i = 0; i < num_trash_bos; i++)
+ trash_bos[i] = drm_intel_bo_alloc(bufmgr, "trash bo", 1024*1024, 4096);
+}
+
+void igt_trash_aperture(void)
+{
+ int i;
+ uint8_t *gtt_ptr;
+
+ for (i = 0; i < num_trash_bos; i++) {
+ drm_intel_gem_bo_map_gtt(trash_bos[i]);
+ gtt_ptr = trash_bos[i]->virtual;
+ *gtt_ptr = 0;
+ drm_intel_gem_bo_unmap_gtt(trash_bos[i]);
+ }
+}
+
+void igt_cleanup_aperture_trashers(void)
+{
+ int i;
+
+ for (i = 0; i < num_trash_bos; i++)
+ drm_intel_bo_unreference(trash_bos[i]);
+
+ free(trash_bos);
+}
+
+void igt_system_suspend_autoresume(void)
+{
+ int ret;
+
+ /* FIXME: Simulation doesn't like suspend/resume, and not even a lighter
+ * approach using /sys/power/pm_test to just test our driver's callbacks
+ * seems to fare better. We need to investigate what's going on. */
+ igt_skip_on_simulation();
+
+ ret = system("rtcwake -s 30 -m mem");
+ igt_assert(ret == 0);
+}
+
+void igt_drop_root(void)
+{
+ igt_assert(getuid() == 0);
+
+ igt_assert(setgid(2) == 0);
+ igt_assert(setuid(2) == 0);
+
+ igt_assert(getgid() == 2);
+ igt_assert(getuid() == 2);
+}
+
+void igt_wait_for_keypress(void)
+{
+ struct termios oldt, newt;
+
+ if (!isatty(STDIN_FILENO))
+ return;
+
+ tcgetattr ( STDIN_FILENO, &oldt );
+ newt = oldt;
+ newt.c_lflag &= ~( ICANON | ECHO );
+ tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
+ getchar();
+ tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
+}
diff --git a/lib/igt_aux.h b/lib/igt_aux.h
new file mode 100644
index 00000000..eb637128
--- /dev/null
+++ b/lib/igt_aux.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2014 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:
+ * Daniel Vetter <daniel.vetter@ffwll.ch>
+ *
+ */
+
+#ifndef IGT_AUX_H
+#define IGT_AUX_H
+
+#include <intel_bufmgr.h>
+
+/* auxialiary igt helpers from igt_aux.c */
+/* generally useful helpers */
+void igt_fork_signal_helper(void);
+void igt_stop_signal_helper(void);
+void igt_exchange_int(void *array, unsigned i, unsigned j);
+void igt_permute_array(void *array, unsigned size,
+ void (*exchange_func)(void *array,
+ unsigned i,
+ unsigned j));
+void igt_progress(const char *header, uint64_t i, uint64_t total);
+bool igt_env_set(const char *env_var, bool default_value);
+
+bool igt_aub_dump_enabled(void);
+
+/* helpers based upon the libdrm buffer manager */
+void igt_init_aperture_trashers(drm_intel_bufmgr *bufmgr);
+void igt_trash_aperture(void);
+void igt_cleanup_aperture_trashers(void);
+
+/* suspend and auto-resume system */
+void igt_system_suspend_autoresume(void);
+
+/* dropping priviledges */
+void igt_drop_root(void);
+
+void igt_wait_for_keypress(void);
+
+/* sysinfo cross-arch wrappers from intel_os.c */
+
+/* These are separate to allow easier testing when porting, see the comment at
+ * the bottom of intel_os.c. */
+uint64_t intel_get_total_ram_mb(void);
+uint64_t intel_get_total_swap_mb(void);
+
+#endif /* IGT_AUX_H */
diff --git a/lib/igt_core.c b/lib/igt_core.c
index cd094c43..ed631f16 100644
--- a/lib/igt_core.c
+++ b/lib/igt_core.c
@@ -58,6 +58,7 @@
#include "config.h"
#include "igt_core.h"
+#include "igt_aux.h"
/**
* SECTION:igt_core
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f74f7070..5b7aca71 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -38,6 +38,7 @@
#include "drmtest.h"
#include "igt_kms.h"
+#include "igt_aux.h"
#include "ioctl_wrappers.h"
/* helpers to create nice-looking framebuffers */
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 95735e8f..19c2649c 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -164,6 +164,9 @@ struct igt_display {
igt_pipe_t pipes[I915_MAX_PIPES];
};
+/* set vt into graphics mode, required to prevent fbcon from interfering */
+void igt_set_vt_graphics_mode(void);
+
void igt_display_init(igt_display_t *display, int drm_fd);
void igt_display_fini(igt_display_t *display);
int igt_display_commit(igt_display_t *display);
diff --git a/lib/intel_os.c b/lib/intel_os.c
index 14dda147..3a7397aa 100644
--- a/lib/intel_os.c
+++ b/lib/intel_os.c
@@ -48,8 +48,8 @@
#endif
#include "intel_io.h"
-#include "i915_drm.h"
#include "drmtest.h"
+#include "igt_aux.h"
uint64_t
intel_get_total_ram_mb(void)
diff --git a/lib/rendercopy_gen8.c b/lib/rendercopy_gen8.c
index 02333cfd..e8463766 100644
--- a/lib/rendercopy_gen8.c
+++ b/lib/rendercopy_gen8.c
@@ -10,8 +10,10 @@
#include <sys/stat.h>
#include <sys/time.h>
#include <getopt.h>
-#include "drm.h"
-#include "i915_drm.h"
+
+#include <drm.h>
+#include <i915_drm.h>
+
#include "drmtest.h"
#include "intel_bufmgr.h"
#include "intel_batchbuffer.h"
@@ -19,6 +21,7 @@
#include "rendercopy.h"
#include "gen8_render.h"
#include "intel_reg.h"
+#include "igt_aux.h"
#include <intel_aub.h>