summaryrefslogtreecommitdiff
path: root/tests/testdisplay.c
diff options
context:
space:
mode:
authorPetri Latvala <petri.latvala@intel.com>2019-05-23 15:27:26 +0300
committerPetri Latvala <petri.latvala@intel.com>2019-05-27 12:47:43 +0300
commit81b44b085e6a1b213965a04e1f06fcd732e89735 (patch)
tree21557f0396656172bdf775ac594b950401028391 /tests/testdisplay.c
parent2fe849b5a88ded35b5d0ebb2e78333bcacf8b8b0 (diff)
testdisplay: Nuke custom main function
Signed-off-by: Petri Latvala <petri.latvala@intel.com> Reviewed-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Diffstat (limited to 'tests/testdisplay.c')
-rw-r--r--tests/testdisplay.c230
1 files changed, 103 insertions, 127 deletions
diff --git a/tests/testdisplay.c b/tests/testdisplay.c
index 67d1b68a..b4f0d45f 100644
--- a/tests/testdisplay.c
+++ b/tests/testdisplay.c
@@ -69,10 +69,8 @@
#include <stdlib.h>
#include <signal.h>
-#define SUBTEST_OPTS 1
-#define HELP_DESCRIPTION 2
-#define Yb_OPT 3
-#define Yf_OPT 4
+#define Yb_OPT 5
+#define Yf_OPT 6
static int tio_fd;
struct termios saved_tio;
@@ -87,6 +85,7 @@ int do_dpms = 0; /* This aliases to DPMS_ON */
uint32_t depth = 24, stride, bpp;
int qr_code = 0;
int specified_mode_num = -1, specified_disp_id = -1;
+bool opt_dump_info = false;
drmModeModeInfo force_timing;
@@ -519,29 +518,6 @@ int update_display(bool probe)
return 1;
}
-static char optstr[] = "3hiaf:s:d:p:mrto:j:y";
-
-static void __attribute__((noreturn)) usage(char *name, char opt)
-{
- igt_info("usage: %s [-hiasdpmtf]\n", name);
- igt_info("\t-i\tdump info\n");
- igt_info("\t-a\ttest all modes\n");
- igt_info("\t-s\t<duration>\tsleep between each mode test (default: 0)\n");
- igt_info("\t-d\t<depth>\tbit depth of scanout buffer\n");
- igt_info("\t-p\t<planew,h>,<crtcx,y>,<crtcw,h> test overlay plane\n");
- igt_info("\t-m\ttest the preferred mode\n");
- igt_info("\t-3\ttest all 3D modes\n");
- igt_info("\t-t\tuse a tiled framebuffer\n");
- igt_info("\t-j\tdo dpms off, optional arg to select dpms leve (1-3)\n");
- igt_info("\t-r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n");
- igt_info("\t-o\t<id of the display>,<number of the mode>\tonly test specified mode on the specified display\n");
- igt_info("\t-f\t<clock MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n");
- igt_info("\t\t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n");
- igt_info("\t\ttest force mode\n");
- igt_info("\tDefault is to test all modes.\n");
- exit((opt != 'h') ? -1 : 0);
-}
-
#define dump_resource(res) if (res) dump_##res()
static void __attribute__((noreturn)) cleanup_and_exit(int ret)
@@ -564,17 +540,12 @@ static gboolean input_event(GIOChannel *source, GIOCondition condition,
return TRUE;
}
-static void enter_exec_path(const char **argv)
+static void enter_exec_path(void)
{
- char *argv0, *exec_path;
- int ret;
+ char path[PATH_MAX];
- argv0 = strdup(argv[0]);
- igt_assert(argv0);
- exec_path = dirname(argv0);
- ret = chdir(exec_path);
- igt_assert_eq(ret, 0);
- free(argv0);
+ if (readlink("/proc/self/exe", path, sizeof(path)) > 0)
+ chdir(dirname(path));
}
static void restore_termio_mode(int sig)
@@ -600,101 +571,108 @@ static void set_termio_mode(void)
tcsetattr(tio_fd, TCSANOW, &tio);
}
-int main(int argc, char **argv)
+static char optstr[] = "3iaf:s:d:p:mrto:j:y";
+static struct option long_opts[] = {
+ {"yb", 0, 0, Yb_OPT},
+ {"yf", 0, 0, Yf_OPT},
+ { 0, 0, 0, 0 }
+};
+
+static const char *help_str =
+ " -i\tdump info\n"
+ " -a\ttest all modes\n"
+ " -s\t<duration>\tsleep between each mode test (default: 0)\n"
+ " -d\t<depth>\tbit depth of scanout buffer\n"
+ " -p\t<planew,h>,<crtcx,y>,<crtcw,h> test overlay plane\n"
+ " -m\ttest the preferred mode\n"
+ " -3\ttest all 3D modes\n"
+ " -t\tuse an X-tiled framebuffer\n"
+ " -y, --yb\n"
+ " \tuse a Y-tiled framebuffer\n"
+ " --yf\tuse a Yf-tiled framebuffer\n"
+ " -j\tdo dpms off, optional arg to select dpms level (1-3)\n"
+ " -r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n"
+ " -o\t<id of the display>,<number of the mode>\tonly test specified mode on the specified display\n"
+ " -f\t<clock MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n"
+ " \t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n"
+ " \ttest force mode\n"
+ " \tDefault is to test all modes.\n"
+ ;
+
+static int opt_handler(int opt, int opt_index, void *data)
+{
+ float force_clock;
+
+ switch (opt) {
+ case '3':
+ test_stereo_modes = 1;
+ break;
+ case 'i':
+ opt_dump_info = true;
+ break;
+ case 'a':
+ test_all_modes = 1;
+ break;
+ case 'f':
+ force_mode = 1;
+ if (sscanf(optarg,"%f,%hu,%hu,%hu,%hu,%hu,%hu,%hu,%hu",
+ &force_clock,&force_timing.hdisplay, &force_timing.hsync_start,&force_timing.hsync_end,&force_timing.htotal,
+ &force_timing.vdisplay, &force_timing.vsync_start, &force_timing.vsync_end, &force_timing.vtotal)!= 9)
+ return IGT_OPT_HANDLER_ERROR;
+ force_timing.clock = force_clock*1000;
+
+ break;
+ case 's':
+ sleep_between_modes = atoi(optarg);
+ break;
+ case 'j':
+ do_dpms = atoi(optarg);
+ if (do_dpms == 0)
+ do_dpms = DRM_MODE_DPMS_OFF;
+ break;
+ case 'd':
+ depth = atoi(optarg);
+ igt_info("using depth %d\n", depth);
+ break;
+ case 'p':
+ if (sscanf(optarg, "%d,%d,%d,%d,%d,%d", &plane_width,
+ &plane_height, &crtc_x, &crtc_y,
+ &crtc_w, &crtc_h) != 6)
+ return IGT_OPT_HANDLER_ERROR;
+ test_plane = 1;
+ break;
+ case 'm':
+ test_preferred_mode = 1;
+ break;
+ case 't':
+ tiling = LOCAL_I915_FORMAT_MOD_X_TILED;
+ break;
+ case 'y':
+ case Yb_OPT:
+ tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
+ break;
+ case Yf_OPT:
+ tiling = LOCAL_I915_FORMAT_MOD_Yf_TILED;
+ break;
+ case 'r':
+ qr_code = 1;
+ break;
+ case 'o':
+ sscanf(optarg, "%d,%d", &specified_disp_id, &specified_mode_num);
+ break;
+ }
+
+ return IGT_OPT_HANDLER_SUCCESS;
+}
+
+igt_simple_main_args(optstr, long_opts, help_str, opt_handler, NULL)
{
- int c;
int ret = 0;
GIOChannel *stdinchannel;
GMainLoop *mainloop;
- float force_clock;
- bool opt_dump_info = false;
- struct option long_opts[] = {
- {"list-subtests", 0, 0, SUBTEST_OPTS},
- {"run-subtest", 1, 0, SUBTEST_OPTS},
- {"help-description", 0, 0, HELP_DESCRIPTION},
- {"help", 0, 0, 'h'},
- {"yb", 0, 0, Yb_OPT},
- {"yf", 0, 0, Yf_OPT},
- { 0, 0, 0, 0 }
- };
-
igt_skip_on_simulation();
- enter_exec_path((const char **) argv);
-
- while ((c = getopt_long(argc, argv, optstr, long_opts, NULL)) != -1) {
- switch (c) {
- case '3':
- test_stereo_modes = 1;
- break;
- case 'i':
- opt_dump_info = true;
- break;
- case 'a':
- test_all_modes = 1;
- break;
- case 'f':
- force_mode = 1;
- if(sscanf(optarg,"%f,%hu,%hu,%hu,%hu,%hu,%hu,%hu,%hu",
- &force_clock,&force_timing.hdisplay, &force_timing.hsync_start,&force_timing.hsync_end,&force_timing.htotal,
- &force_timing.vdisplay, &force_timing.vsync_start, &force_timing.vsync_end, &force_timing.vtotal)!= 9)
- usage(argv[0], c);
- force_timing.clock = force_clock*1000;
-
- break;
- case 's':
- sleep_between_modes = atoi(optarg);
- break;
- case 'j':
- do_dpms = atoi(optarg);
- if (do_dpms == 0)
- do_dpms = DRM_MODE_DPMS_OFF;
- break;
- case 'd':
- depth = atoi(optarg);
- igt_info("using depth %d\n", depth);
- break;
- case 'p':
- if (sscanf(optarg, "%d,%d,%d,%d,%d,%d", &plane_width,
- &plane_height, &crtc_x, &crtc_y,
- &crtc_w, &crtc_h) != 6)
- usage(argv[0], c);
- test_plane = 1;
- break;
- case 'm':
- test_preferred_mode = 1;
- break;
- case 't':
- tiling = LOCAL_I915_FORMAT_MOD_X_TILED;
- break;
- case 'y':
- case Yb_OPT:
- tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
- break;
- case Yf_OPT:
- tiling = LOCAL_I915_FORMAT_MOD_Yf_TILED;
- break;
- case 'r':
- qr_code = 1;
- break;
- case 'o':
- sscanf(optarg, "%d,%d", &specified_disp_id, &specified_mode_num);
- break;
- case SUBTEST_OPTS:
- /* invalid subtest options */
- exit(IGT_EXIT_INVALID);
- break;
- case HELP_DESCRIPTION:
- igt_info("Tests display functionality.");
- exit(0);
- break;
- default:
- /* fall through */
- case 'h':
- usage(argv[0], c);
- break;
- }
- }
+ enter_exec_path();
set_termio_mode();
@@ -771,6 +749,4 @@ out_close:
close(drm_fd);
igt_assert_eq(ret, 0);
-
- igt_exit();
}