From nobody Tue Oct 28 04:11:06 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1515016482792988.3569981555783; Wed, 3 Jan 2018 13:54:42 -0800 (PST) Received: from localhost ([::1]:38454 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWqzh-0004ZO-Sn for importer@patchew.org; Wed, 03 Jan 2018 16:54:41 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eWquv-0000kj-KV for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eWquu-0003vn-Md for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:45 -0500 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:40247) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eWquu-0003vN-Hi for qemu-devel@nongnu.org; Wed, 03 Jan 2018 16:49:44 -0500 Received: by mail-qk0-x244.google.com with SMTP id q14so3326151qke.7 for ; Wed, 03 Jan 2018 13:49:44 -0800 (PST) Received: from x1.lan ([138.117.48.219]) by smtp.gmail.com with ESMTPSA id l80sm1237566qki.96.2018.01.03.13.49.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 13:49:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NsSeRd6/zN0GzUYEQdPa2VIpHjXDm2XxTGQWM40X7uw=; b=HzwXj4VFGSoiOQ7PQawxakWdEvFqDJpP7oyLX5K2Dn00NgzteZDNnWCfEupSNBEw+F gy+eaH+b/W+nOh2BHqC9W1tnaph3v4IgC5kE8D4g9vyU9mRxW7fN56kbPoHWCSkPsPE8 2FzJkWPQDMN65SzK3QSeDDATrrCSK8BEbT9tpgwsWk7XwkEaAt5n2ffqDegGrbmh3BSG p4I7qcHap+tW9u81mKmwo5JKMwXa3hibarRtxvg823O14pAIwQj2MM76m8+QXd9JmjxU NQZ0W01BRgZwITy2+0uokF6UQuFdZY1YCjOwazzCMll/qIAVZj9u4lqY/b9rUicxk9Ki a12g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=NsSeRd6/zN0GzUYEQdPa2VIpHjXDm2XxTGQWM40X7uw=; b=k6DitP5egRpZLwM7+vlsGsTzmYDJPEYFVxtFHf2BJ3luc3btFJ5/AL1Q3sG5yihMa0 CkLYqMz+B5XgBrJjeTxcaJd+ffN8g3AJi/Z+HbbaC84zYoxTbV2hxaUVfD46R/rYasrH IPPcwWIIiV4yTEym7kj9xqCm2GgmnlE+gdLyrG5M249MvzvdR8d295cQdAT1r7SAmcwc QpP7IMgmFDZFa3FkXZzpNaKiqS7tL3xfSooAX/20vJ7dhylsSSQiP5IJQf2pqqnquINT jcxlWkvzkXOXd7U3v4KKhwTjIru3SckUUS2hdkIehbqTZBR4pNUfqAI2Wr2yTEwhDS9X Wk8Q== X-Gm-Message-State: AKGB3mKxt4W097MaNnxHk6gjDvniAlprqoatuPate5iVeqAJyQqY8byL WLZOHNpHTw7IVTqgHAVuf7k= X-Google-Smtp-Source: ACJfBotayFerj3+z+iaV+oWzavkENrK+HAYj0spSh895hmGbukICyXqm0WPipij631ZlyvmOgiuHmw== X-Received: by 10.55.6.145 with SMTP id 139mr3614063qkg.328.1515016183998; Wed, 03 Jan 2018 13:49:43 -0800 (PST) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: Alistair Francis , Peter Maydell , Eric Blake , Paolo Bonzini , Kevin Wolf , Stefan Hajnoczi Date: Wed, 3 Jan 2018 18:49:24 -0300 Message-Id: <20180103214925.16677-4-f4bug@amsat.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180103214925.16677-1-f4bug@amsat.org> References: <20180103214925.16677-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400d:c09::244 Subject: [Qemu-devel] [RFC PATCH v2 3/4] libqos: implement sdbus QMP driver X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Edgar E . Iglesias" , Thomas Huth , qemu-devel@nongnu.org, Markus Armbruster , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- tests/libqos/sdbus-qmp.c | 130 +++++++++++++++++++++++++++++++++++++++++++= ++++ tests/Makefile.include | 2 +- 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 tests/libqos/sdbus-qmp.c diff --git a/tests/libqos/sdbus-qmp.c b/tests/libqos/sdbus-qmp.c new file mode 100644 index 0000000000..565e2481db --- /dev/null +++ b/tests/libqos/sdbus-qmp.c @@ -0,0 +1,130 @@ +/* + * QTest SD/MMC Bus QMP driver + * + * Copyright (c) 2017 Philippe Mathieu-Daud=C3=A9 + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ +#include "qemu/osdep.h" +#include "qapi/qmp/qdict.h" +#include "qapi/qmp/qstring.h" + +#include "libqos/sdbus.h" +#include "libqtest.h" + +typedef struct QMPSDBus { + SDBusAdapter parent; + + const char *qom_path; +} QMPSDBus; + + +static const char *qmp_sdbus_getpath(const char *blkname) +{ + QDict *response, *minfo; + QList *list; + const QListEntry *le; + QString *qstr; + const char *mname; + QObject *qobj; + + response =3D qmp("{ 'execute': 'query-block' }"); + g_assert_nonnull(response); + list =3D qdict_get_qlist(response, "return"); + g_assert_nonnull(list); + + QLIST_FOREACH_ENTRY(list, le) { + QDict *response2; + + minfo =3D qobject_to_qdict(qlist_entry_obj(le)); + g_assert(minfo); + qobj =3D qdict_get(minfo, "qdev"); + if (!qobj) { + continue; + } + qstr =3D qobject_to_qstring(qobj); + g_assert(qstr); + mname =3D qstring_get_str(qstr); + + response2 =3D qmp("{ 'execute': 'qom-get'," + " 'arguments': { 'path': %s," + " 'property': \"parent_bus\"}" + "}", mname); + g_assert(response2); + g_assert(qdict_haskey(response2, "return")); + qobj =3D qdict_get(response2, "return"); + qstr =3D qobject_to_qstring(qobj); + g_assert(qstr); + mname =3D qstring_get_str(qstr); + + return mname; + } + return NULL; +} + +static ssize_t qmp_mmc_do_cmd(SDBusAdapter *adapter, enum NCmd cmd, uint32= _t arg, + uint8_t **response) +{ + QMPSDBus *s =3D (QMPSDBus *)adapter; + QDict *response1; + QObject *qobj; + + response1 =3D qmp("{ 'execute': 'x-debug-sdbus-command'," + " 'arguments': { 'qom-path': %s," + " 'command': %u, 'arg': %u}" + "}", + s->qom_path, cmd, arg); + g_assert(qdict_haskey(response1, "return")); + qobj =3D qdict_get(response1, "return"); + //QDECREF(response); + + if (!qobj) { + return -1; + } + + { + QString *qstr; + const gchar *mname; + guchar *uc; + gsize out_len; + QDict *response2 =3D qobject_to_qdict(qobj); + + if (!qdict_haskey(response2, "base64")) { + return 0; + } + qobj =3D qdict_get(response2, "base64"); + qstr =3D qobject_to_qstring(qobj); + if (!qstr) { + puts("!qstr"); + return 0; + } + mname =3D qstring_get_str(qstr); + + uc =3D g_base64_decode(mname, &out_len); + if (response) { + *response =3D uc; + } else { + g_free(uc); + } + return out_len; + + } + + return 0; +} + +SDBusAdapter *qmp_sdbus_create(const char *bus_name) +{ + QMPSDBus *s; + SDBusAdapter *mmc; + + s =3D g_new(QMPSDBus, 1); + s->qom_path =3D qmp_sdbus_getpath(bus_name); + g_assert_nonnull(s->qom_path); + + mmc =3D (SDBusAdapter *)s; + mmc->do_command =3D qmp_mmc_do_cmd; + + return mmc; +} diff --git a/tests/Makefile.include b/tests/Makefile.include index c22925d4db..409784a189 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -715,7 +715,7 @@ tests/test-crypto-block$(EXESUF): tests/test-crypto-blo= ck.o $(test-crypto-obj-y) =20 libqos-obj-y =3D tests/libqos/pci.o tests/libqos/fw_cfg.o tests/libqos/mal= loc.o libqos-obj-y +=3D tests/libqos/i2c.o tests/libqos/libqos.o -libqos-obj-y +=3D tests/libqos/sdbus.o +libqos-obj-y +=3D tests/libqos/sdbus.o tests/libqos/sdbus-qmp.o libqos-spapr-obj-y =3D $(libqos-obj-y) tests/libqos/malloc-spapr.o libqos-spapr-obj-y +=3D tests/libqos/libqos-spapr.o libqos-spapr-obj-y +=3D tests/libqos/rtas.o --=20 2.15.1