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