From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 78D726EBFC for ; Tue, 28 Apr 2020 20:24:01 +0000 (UTC) Received: by mail-pf1-x441.google.com with SMTP id p25so11332506pfn.11 for ; Tue, 28 Apr 2020 13:24:01 -0700 (PDT) From: Juha-Pekka Heikkila Date: Tue, 28 Apr 2020 23:22:53 +0300 Message-Id: <20200428202255.31309-6-juhapekka.heikkila@gmail.com> In-Reply-To: <20200428202255.31309-1-juhapekka.heikkila@gmail.com> References: <20200428202255.31309-1-juhapekka.heikkila@gmail.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 5/7] igt/params: add generic saving module parameter set List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Jani Nikula List-ID: From: Jani Nikula Signed-off-by: Jani Nikula Signed-off-by: Juha-Pekka Heikkila --- lib/igt_params.c | 57 ++++++++++++++++++++++++++++++++++++++++-------- lib/igt_params.h | 3 +++ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/lib/igt_params.c b/lib/igt_params.c index fe4b1df3..d9cf986c 100644 --- a/lib/igt_params.c +++ b/lib/igt_params.c @@ -153,6 +153,29 @@ int igt_params_open(int device) return __igt_params_open(device, NULL); } +__attribute__((format(printf, 3, 0))) +static bool __igt_params_set(int device, const char *parameter, + const char *fmt, va_list ap, bool save) +{ + char *path = NULL; + int dir; + int ret; + + dir = __igt_params_open(device, save ? &path : NULL); + if (dir < 0) + return false; + + if (save) + igt_params_save(dir, path, parameter); + + ret = igt_sysfs_vprintf(dir, parameter, fmt, ap); + + close(dir); + free(path); + + return ret > 0; +} + /** * igt_params_set: * @device: fd of the device @@ -164,20 +187,36 @@ int igt_params_open(int device) bool igt_params_set(int device, const char *parameter, const char *fmt, ...) { va_list ap; - int dir; - int ret; - - dir = igt_params_open(device); - if (dir < 0) - return false; + bool ret; va_start(ap, fmt); - ret = igt_sysfs_vprintf(dir, parameter, fmt, ap); + ret = __igt_params_set(device, parameter, fmt, ap, false); va_end(ap); - close(dir); + return ret; +} - return ret > 0; +/** + * igt_params_set_save: + * @device: fd of the device or -1 to default to first matching starting from + * zero. See __igt_params_open() + * @parameter: the name of the parameter to set + * @fmt: printf-esque format string + * + * Save the original value to be restored. + * + * Returns true on success + */ +bool igt_params_set_save(int device, const char *parameter, const char *fmt, ...) +{ + va_list ap; + bool ret; + + va_start(ap, fmt); + ret = __igt_params_set(device, parameter, fmt, ap, true); + va_end(ap); + + return ret; } /** diff --git a/lib/igt_params.h b/lib/igt_params.h index 52eed77f..1b750d23 100644 --- a/lib/igt_params.h +++ b/lib/igt_params.h @@ -31,6 +31,9 @@ int igt_params_open(int device); __attribute__((format(printf, 3, 4))) bool igt_params_set(int device, const char *parameter, const char *fmt, ...); +__attribute__((format(printf, 3, 4))) +bool igt_params_set_save(int device, const char *parameter, const char *fmt, ...); + void igt_set_module_param(const char *name, const char *val); void igt_set_module_param_int(const char *name, int val); -- 2.26.0 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev