1*ef52091aSzhenwei pi /*
2*ef52091aSzhenwei pi * HMP commands related to cryptodev
3*ef52091aSzhenwei pi *
4*ef52091aSzhenwei pi * Copyright (c) 2023 Bytedance.Inc
5*ef52091aSzhenwei pi *
6*ef52091aSzhenwei pi * Authors:
7*ef52091aSzhenwei pi * zhenwei pi<pizhenwei@bytedance.com>
8*ef52091aSzhenwei pi *
9*ef52091aSzhenwei pi * This work is licensed under the terms of the GNU GPL, version 2 or
10*ef52091aSzhenwei pi * (at your option) any later version.
11*ef52091aSzhenwei pi */
12*ef52091aSzhenwei pi
13*ef52091aSzhenwei pi #include "qemu/osdep.h"
14*ef52091aSzhenwei pi #include "monitor/hmp.h"
15*ef52091aSzhenwei pi #include "monitor/monitor.h"
16*ef52091aSzhenwei pi #include "qapi/qapi-commands-cryptodev.h"
17*ef52091aSzhenwei pi #include "qapi/qmp/qdict.h"
18*ef52091aSzhenwei pi
19*ef52091aSzhenwei pi
hmp_info_cryptodev(Monitor * mon,const QDict * qdict)20*ef52091aSzhenwei pi void hmp_info_cryptodev(Monitor *mon, const QDict *qdict)
21*ef52091aSzhenwei pi {
22*ef52091aSzhenwei pi QCryptodevInfoList *il;
23*ef52091aSzhenwei pi QCryptodevBackendServiceTypeList *sl;
24*ef52091aSzhenwei pi QCryptodevBackendClientList *cl;
25*ef52091aSzhenwei pi
26*ef52091aSzhenwei pi for (il = qmp_query_cryptodev(NULL); il; il = il->next) {
27*ef52091aSzhenwei pi g_autofree char *services = NULL;
28*ef52091aSzhenwei pi QCryptodevInfo *info = il->value;
29*ef52091aSzhenwei pi char *tmp_services;
30*ef52091aSzhenwei pi
31*ef52091aSzhenwei pi /* build a string like 'service=[akcipher|mac|hash|cipher]' */
32*ef52091aSzhenwei pi for (sl = info->service; sl; sl = sl->next) {
33*ef52091aSzhenwei pi const char *service = QCryptodevBackendServiceType_str(sl->value);
34*ef52091aSzhenwei pi
35*ef52091aSzhenwei pi if (!services) {
36*ef52091aSzhenwei pi services = g_strdup(service);
37*ef52091aSzhenwei pi } else {
38*ef52091aSzhenwei pi tmp_services = g_strjoin("|", services, service, NULL);
39*ef52091aSzhenwei pi g_free(services);
40*ef52091aSzhenwei pi services = tmp_services;
41*ef52091aSzhenwei pi }
42*ef52091aSzhenwei pi }
43*ef52091aSzhenwei pi monitor_printf(mon, "%s: service=[%s]\n", info->id, services);
44*ef52091aSzhenwei pi
45*ef52091aSzhenwei pi for (cl = info->client; cl; cl = cl->next) {
46*ef52091aSzhenwei pi QCryptodevBackendClient *client = cl->value;
47*ef52091aSzhenwei pi monitor_printf(mon, " queue %" PRIu32 ": type=%s\n",
48*ef52091aSzhenwei pi client->queue,
49*ef52091aSzhenwei pi QCryptodevBackendType_str(client->type));
50*ef52091aSzhenwei pi }
51*ef52091aSzhenwei pi }
52*ef52091aSzhenwei pi
53*ef52091aSzhenwei pi qapi_free_QCryptodevInfoList(il);
54*ef52091aSzhenwei pi }
55