diff options
-rw-r--r-- | tools/Makefile.sources | 1 | ||||
-rw-r--r-- | tools/igt_compliance_utils.c | 82 | ||||
-rw-r--r-- | tools/igt_dp_compliance.h | 8 | ||||
-rw-r--r-- | tools/intel_dp_compliance.c | 47 | ||||
-rw-r--r-- | tools/meson.build | 3 |
5 files changed, 93 insertions, 48 deletions
diff --git a/tools/Makefile.sources b/tools/Makefile.sources index c28bef2f8..47171490a 100644 --- a/tools/Makefile.sources +++ b/tools/Makefile.sources @@ -65,6 +65,7 @@ intel_dp_compliance_SOURCES = \ intel_dp_compliance.c \ igt_dp_compliance.h \ igt_dp_compliance_hotplug.c \ + igt_compliance_utils.c \ $(NULL) amd_hdmi_compliance_SOURCES = \ diff --git a/tools/igt_compliance_utils.c b/tools/igt_compliance_utils.c new file mode 100644 index 000000000..d6a2e4e52 --- /dev/null +++ b/tools/igt_compliance_utils.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + * Copyright 2017 Intel Corporation + * Jesse Barnes <jesse.barnes@intel.com> + * Manasi Navare <manasi.d.navare@intel.com> + * + * 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 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. + */ + +#include "igt.h" +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <signal.h> +#include <termios.h> + +#include <sys/stat.h> + +#include "igt_dp_compliance.h" + +static int tio_fd; +struct termios saved_tio; + +void enter_exec_path(char **argv) +{ + char *exec_path = NULL; + char *pos = NULL; + short len_path = 0; + int ret; + + len_path = strlen(argv[0]); + exec_path = (char *) malloc(len_path); + + memcpy(exec_path, argv[0], len_path); + pos = strrchr(exec_path, '/'); + if (pos != NULL) + *(pos+1) = '\0'; + + ret = chdir(exec_path); + igt_assert_eq(ret, 0); + free(exec_path); +} + +static void restore_termio_mode(int sig) +{ + tcsetattr(tio_fd, TCSANOW, &saved_tio); + close(tio_fd); +} + +void set_termio_mode(void) +{ + struct termios tio; + + /* don't attempt to set terminal attributes if not in the foreground + * process group + */ + if (getpgrp() != tcgetpgrp(STDOUT_FILENO)) + return; + + tio_fd = dup(STDIN_FILENO); + tcgetattr(tio_fd, &saved_tio); + igt_install_exit_handler(restore_termio_mode); + tio = saved_tio; + tio.c_lflag &= ~(ICANON | ECHO); + tcsetattr(tio_fd, TCSANOW, &tio); +} diff --git a/tools/igt_dp_compliance.h b/tools/igt_dp_compliance.h index bf2b07014..5b1688039 100644 --- a/tools/igt_dp_compliance.h +++ b/tools/igt_dp_compliance.h @@ -22,6 +22,9 @@ * IN THE SOFTWARE. */ +#ifndef __IGT_DP_COMPLIANCE_H__ +#define __IGT_DP_COMPLIANCE_H__ + #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -32,5 +35,10 @@ extern int drm_fd; gboolean igt_dp_compliance_setup_hotplug(void); void igt_dp_compliance_cleanup_hotplug(void); +void enter_exec_path(char **argv); +void set_termio_mode(void); + /* called by the hotplug code */ int update_display(int mode, bool is_compliance_test); + +#endif /* __IGT_DP_COMPLIANCE_H__ */ diff --git a/tools/intel_dp_compliance.c b/tools/intel_dp_compliance.c index c8c5c8412..217a12479 100644 --- a/tools/intel_dp_compliance.c +++ b/tools/intel_dp_compliance.c @@ -172,9 +172,6 @@ uint16_t hdisplay; uint16_t vdisplay; uint8_t bitdepth; -static int tio_fd; -struct termios saved_tio; - drmModeRes *resources; int drm_fd, modes, gen; uint64_t tiling = LOCAL_DRM_FORMAT_MOD_NONE; @@ -825,50 +822,6 @@ static gboolean input_event(GIOChannel *source, GIOCondition condition, return TRUE; } -static void enter_exec_path(char **argv) -{ - char *exec_path = NULL; - char *pos = NULL; - short len_path = 0; - int ret; - - len_path = strlen(argv[0]); - exec_path = (char *) malloc(len_path); - - memcpy(exec_path, argv[0], len_path); - pos = strrchr(exec_path, '/'); - if (pos != NULL) - *(pos+1) = '\0'; - - ret = chdir(exec_path); - igt_assert_eq(ret, 0); - free(exec_path); -} - -static void restore_termio_mode(int sig) -{ - tcsetattr(tio_fd, TCSANOW, &saved_tio); - close(tio_fd); -} - -static void set_termio_mode(void) -{ - struct termios tio; - - /* don't attempt to set terminal attributes if not in the foreground - * process group - */ - if (getpgrp() != tcgetpgrp(STDOUT_FILENO)) - return; - - tio_fd = dup(STDIN_FILENO); - tcgetattr(tio_fd, &saved_tio); - igt_install_exit_handler(restore_termio_mode); - tio = saved_tio; - tio.c_lflag &= ~(ICANON | ECHO); - tcsetattr(tio_fd, TCSANOW, &tio); -} - int main(int argc, char **argv) { int c; diff --git a/tools/meson.build b/tools/meson.build index 05f2a1726..56877fb39 100644 --- a/tools/meson.build +++ b/tools/meson.build @@ -60,7 +60,8 @@ endforeach if libudev.found() intel_dp_compliance_src = [ 'intel_dp_compliance.c', - 'igt_dp_compliance_hotplug.c' + 'igt_dp_compliance_hotplug.c', + 'igt_compliance_utils.c' ] executable('intel_dp_compliance', sources : intel_dp_compliance_src, dependencies : [tool_deps, libudev], |