diff options
-rw-r--r-- | tools/.gitignore | 1 | ||||
-rw-r--r-- | tools/Makefile.sources | 1 | ||||
-rw-r--r-- | tools/intel_display_crc.c | 110 |
3 files changed, 112 insertions, 0 deletions
diff --git a/tools/.gitignore b/tools/.gitignore index b47fafda..5a2f5ffb 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -4,6 +4,7 @@ intel_audio_dump intel_backlight intel_bios_dumper intel_bios_reader +intel_display_crc intel_display_poller intel_dump_decode intel_error_decode diff --git a/tools/Makefile.sources b/tools/Makefile.sources index b07a71c6..5acf45ad 100644 --- a/tools/Makefile.sources +++ b/tools/Makefile.sources @@ -10,6 +10,7 @@ bin_PROGRAMS = \ intel_backlight \ intel_bios_dumper \ intel_bios_reader \ + intel_display_crc \ intel_display_poller \ intel_dump_decode \ intel_error_decode \ diff --git a/tools/intel_display_crc.c b/tools/intel_display_crc.c new file mode 100644 index 00000000..ba9ec5ba --- /dev/null +++ b/tools/intel_display_crc.c @@ -0,0 +1,110 @@ +/* + * Copyright © 2015 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: + * Damien Lespiau <damien.lespiau@intel.com> + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "igt_core.h" +#include "igt_debugfs.h" +#include "igt_kms.h" + +typedef struct { + int fd; + int pipe; + int n_crcs; +} display_crc_t; + +static int pipe_from_str(const char *str) +{ + unsigned char c; + + if (!str || strlen(str) != 1) + return -1; + + c = str[0]; + + if (c >= 'A' && c <= 'C') + return c - 'A'; + + if (c >= 'a' && c <= 'c') + return c - 'a'; + + if (c >= '0' && c <= '3') + return c - '0'; + + return -1; +} + +static void print_crcs(display_crc_t *ctx) +{ + igt_pipe_crc_t *pipe_crc; + igt_crc_t crc; + char *crc_str; + int i; + + pipe_crc = igt_pipe_crc_new(ctx->pipe, INTEL_PIPE_CRC_SOURCE_AUTO); + + for (i = 0; i < ctx->n_crcs; i++) { + igt_pipe_crc_collect_crc(pipe_crc, &crc); + + crc_str = igt_crc_to_string(&crc); + printf("CRC on pipe %s: %s\n", kmstest_pipe_name(ctx->pipe), + crc_str); + free(crc_str); + } + + igt_pipe_crc_free(pipe_crc); +} + +static display_crc_t ctx; + +int main(int argc, char **argv) +{ + int opt; + + ctx.n_crcs = 1; + + while ((opt = getopt(argc, argv, "p:n:")) != -1) { + switch (opt) { + case 'p': + ctx.pipe = pipe_from_str(optarg); + if (ctx.pipe == -1) { + fprintf(stderr, "Unknown pipe %s\n", optarg); + exit(1); + } + break; + case 'n': + ctx.n_crcs = atoi(optarg); + break; + default: + igt_assert(0); + } + } + + print_crcs(&ctx); +} |