Coverage Report

Created: 2026-06-15 06:54

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/fu-heci-struct.c
Line
Count
Source
1
/*
2
 * This file is auto-generated, do not modify!
3
 *
4
 * SPDX-License-Identifier: LGPL-2.1-or-later
5
 */
6
7
#include "config.h"
8
9
#include <glib.h>
10
11
#include "fu-heci-struct.h"
12
#include "fu-byte-array.h"
13
#include "fu-bytes.h"
14
#include "fu-mem-private.h"
15
#include "fu-string.h"
16
17
#ifdef G_LOG_DOMAIN
18
  #undef G_LOG_DOMAIN
19
#endif
20
0
#define G_LOG_DOMAIN "FuStruct"
21
22
/**
23
 * fu_mkhi_group_id_to_string:
24
 * @val: value, e.g. %FU_MKHI_GROUP_ID_PM
25
 *
26
 * Converts an enumerated value to a string.
27
 *
28
 * Returns: identifier string
29
 **/
30
static const gchar *
31
fu_mkhi_group_id_to_string(FuMkhiGroupId val)
32
0
{
33
0
    if (val == FU_MKHI_GROUP_ID_CBM)
34
0
        return "cbm";
35
0
    if (val == FU_MKHI_GROUP_ID_PM)
36
0
        return "pm";
37
0
    if (val == FU_MKHI_GROUP_ID_PWD)
38
0
        return "pwd";
39
0
    if (val == FU_MKHI_GROUP_ID_FWCAPS)
40
0
        return "fwcaps";
41
0
    if (val == FU_MKHI_GROUP_ID_APP)
42
0
        return "app";
43
0
    if (val == FU_MKHI_GROUP_ID_FWUPDATE)
44
0
        return "fwupdate";
45
0
    if (val == FU_MKHI_GROUP_ID_FIRMWARE_UPDATE)
46
0
        return "firmware-update";
47
0
    if (val == FU_MKHI_GROUP_ID_BIST)
48
0
        return "bist";
49
0
    if (val == FU_MKHI_GROUP_ID_MDES)
50
0
        return "mdes";
51
0
    if (val == FU_MKHI_GROUP_ID_ME_DBG)
52
0
        return "me-dbg";
53
0
    if (val == FU_MKHI_GROUP_ID_MCA)
54
0
        return "mca";
55
0
    if (val == FU_MKHI_GROUP_ID_GEN)
56
0
        return "gen";
57
0
    return NULL;
58
0
}
59
60
/**
61
 * fu_mkhi_status_to_string:
62
 * @val: value, e.g. %FU_MKHI_STATUS_INVALID_STATE
63
 *
64
 * Converts an enumerated value to a string.
65
 *
66
 * Returns: identifier string
67
 **/
68
const gchar *
69
fu_mkhi_status_to_string(FuMkhiStatus val)
70
0
{
71
0
    if (val == FU_MKHI_STATUS_SUCCESS)
72
0
        return "success";
73
0
    if (val == FU_MKHI_STATUS_INVALID_STATE)
74
0
        return "invalid-state";
75
0
    if (val == FU_MKHI_STATUS_MESSAGE_SKIPPED)
76
0
        return "message-skipped";
77
0
    if (val == FU_MKHI_STATUS_SIZE_ERROR)
78
0
        return "size-error";
79
0
    if (val == FU_MKHI_STATUS_UNKNOWN_PERHAPS_NOT_SUPPORTED)
80
0
        return "unknown-perhaps-not-supported";
81
0
    if (val == FU_MKHI_STATUS_NOT_SET)
82
0
        return "not-set";
83
0
    if (val == FU_MKHI_STATUS_NOT_AVAILABLE)
84
0
        return "not-available";
85
0
    if (val == FU_MKHI_STATUS_INVALID_ACCESS)
86
0
        return "invalid-access";
87
0
    if (val == FU_MKHI_STATUS_INVALID_PARAMS)
88
0
        return "invalid-params";
89
0
    if (val == FU_MKHI_STATUS_NOT_READY)
90
0
        return "not-ready";
91
0
    if (val == FU_MKHI_STATUS_NOT_SUPPORTED)
92
0
        return "not-supported";
93
0
    if (val == FU_MKHI_STATUS_INVALID_ADDRESS)
94
0
        return "invalid-address";
95
0
    if (val == FU_MKHI_STATUS_INVALID_COMMAND)
96
0
        return "invalid-command";
97
0
    if (val == FU_MKHI_STATUS_FAILURE)
98
0
        return "failure";
99
0
    if (val == FU_MKHI_STATUS_INVALID_RESOURCE)
100
0
        return "invalid-resource";
101
0
    if (val == FU_MKHI_STATUS_RESOURCE_IN_USE)
102
0
        return "resource-in-use";
103
0
    if (val == FU_MKHI_STATUS_NO_RESOURCE)
104
0
        return "no-resource";
105
0
    if (val == FU_MKHI_STATUS_GENERAL_ERROR)
106
0
        return "general-error";
107
0
    if (val == FU_MKHI_STATUS_LOWER_ARB_SVN)
108
0
        return "lower-arb-svn";
109
0
    if (val == FU_MKHI_STATUS_LOWER_TCB_SVN)
110
0
        return "lower-tcb-svn";
111
0
    if (val == FU_MKHI_STATUS_LOWER_VCN)
112
0
        return "lower-vcn";
113
0
    if (val == FU_MKHI_STATUS_UPDATE_IUP_SVN)
114
0
        return "update-iup-svn";
115
0
    if (val == FU_MKHI_STATUS_UPDATE_IUP_VCN)
116
0
        return "update-iup-vcn";
117
0
    if (val == FU_MKHI_STATUS_UPDATE_IMAGE_LEN)
118
0
        return "update-image-len";
119
0
    if (val == FU_MKHI_STATUS_UPDATE_PV_BIT)
120
0
        return "update-pv-bit";
121
0
    if (val == FU_MKHI_STATUS_UPDATE_ENGINEERING_MISMATCH)
122
0
        return "update-engineering-mismatch";
123
0
    if (val == FU_MKHI_STATUS_UPDATE_VER_MAN_FAILED_OROM)
124
0
        return "update-ver-man-failed-orom";
125
0
    if (val == FU_MKHI_STATUS_UPDATE_DEVICE_ID_NOT_MATCH)
126
0
        return "update-device-id-not-match";
127
0
    if (val == FU_MKHI_STATUS_UPDATE_OPROM_SECTION_NOT_EXIST)
128
0
        return "update-oprom-section-not-exist";
129
0
    if (val == FU_MKHI_STATUS_UPDATE_OPROM_INVALID_STRUCTURE)
130
0
        return "update-oprom-invalid-structure";
131
0
    if (val == FU_MKHI_STATUS_UPDATE_GET_OPROM_VERSION_FAILED)
132
0
        return "update-get-oprom-version-failed";
133
0
    if (val == FU_MKHI_STATUS_UPDATE_OROM_INVALID_STRUCTURE)
134
0
        return "update-orom-invalid-structure";
135
0
    if (val == FU_MKHI_STATUS_UPDATE_VER_MAN_FAILED_GFX_DATA)
136
0
        return "update-ver-man-failed-gfx-data";
137
0
    if (val == FU_MKHI_STATUS_UPDATE_GFX_DATA_OEM_MANUF_VER)
138
0
        return "update-gfx-data-oem-manuf-ver";
139
0
    return NULL;
140
0
}
141
142
/**
143
 * fu_mkhi_command_to_string:
144
 * @val: value, e.g. %FU_MKHI_COMMAND_READ_FILE_EX
145
 *
146
 * Converts an enumerated value to a string.
147
 *
148
 * Returns: identifier string
149
 **/
150
static const gchar *
151
fu_mkhi_command_to_string(FuMkhiCommand val)
152
0
{
153
0
    if (val == FU_MKHI_COMMAND_READ_FILE)
154
0
        return "read-file";
155
0
    if (val == FU_MKHI_COMMAND_READ_FILE_EX)
156
0
        return "read-file-ex";
157
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_COMMIT)
158
0
        return "arbh-svn-commit";
159
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_GET_INFO)
160
0
        return "arbh-svn-get-info";
161
0
    if (val == FU_MKHI_COMMAND_READ_FILE_RESPONSE)
162
0
        return "read-file-response";
163
0
    if (val == FU_MKHI_COMMAND_READ_FILE_EX_RESPONSE)
164
0
        return "read-file-ex-response";
165
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_COMMIT_RESPONSE)
166
0
        return "arbh-svn-commit-response";
167
0
    if (val == FU_MKHI_COMMAND_ARBH_SVN_GET_INFO_RESPONSE)
168
0
        return "arbh-svn-get-info-response";
169
0
    return NULL;
170
0
}
171
172
/**
173
 * fu_mkhi_arbh_svn_info_entry_usage_id_to_string:
174
 * @val: value
175
 *
176
 * Converts an enumerated value to a string.
177
 *
178
 * Returns: identifier string
179
 **/
180
static const gchar *
181
fu_mkhi_arbh_svn_info_entry_usage_id_to_string(FuMkhiArbhSvnInfoEntryUsageId val)
182
0
{
183
0
    if (val == FU_MKHI_ARBH_SVN_INFO_ENTRY_USAGE_ID_CSE_RBE)
184
0
        return "cse-rbe";
185
0
    return NULL;
186
0
}
187
/**
188
 * fu_mkhi_read_file_request_ref: (skip):
189
 **/
190
FuMkhiReadFileRequest *
191
fu_mkhi_read_file_request_ref(FuMkhiReadFileRequest *st)
192
0
{
193
0
    g_return_val_if_fail(st != NULL, NULL);
194
0
    st->refcount++;
195
0
    return st;
196
0
}
197
/**
198
 * fu_mkhi_read_file_request_unref: (skip):
199
 **/
200
void
201
fu_mkhi_read_file_request_unref(FuMkhiReadFileRequest *st)
202
0
{
203
0
    g_return_if_fail(st != NULL);
204
0
    if (st->refcount == 0) {
205
0
        g_critical("FuMkhiReadFileRequest refcount already zero");
206
0
        return;
207
0
    }
208
0
    if (--st->refcount > 0)
209
0
        return;
210
0
    if (st->buf != NULL)
211
0
        g_byte_array_unref(st->buf);
212
0
    g_free(st);
213
0
}
214
/**
215
 * fu_mkhi_read_file_request_new_internal: (skip):
216
 **/
217
static FuMkhiReadFileRequest *
218
fu_mkhi_read_file_request_new_internal(void)
219
0
{
220
0
    FuMkhiReadFileRequest *st = g_new0(FuMkhiReadFileRequest, 1);
221
0
    st->refcount = 1;
222
0
    return st;
223
0
}
224
225
/* getters */
226
227
/* setters */
228
/**
229
 * fu_mkhi_read_file_request_set_group_id: (skip):
230
 **/
231
static void
232
fu_mkhi_read_file_request_set_group_id(FuMkhiReadFileRequest *st, FuMkhiGroupId value)
233
0
{
234
0
    g_return_if_fail(st != NULL);
235
0
    st->buf->data[0] = value;
236
0
}
237
/**
238
 * fu_mkhi_read_file_request_set_command: (skip):
239
 **/
240
static void
241
fu_mkhi_read_file_request_set_command(FuMkhiReadFileRequest *st, FuMkhiCommand value)
242
0
{
243
0
    g_return_if_fail(st != NULL);
244
0
    st->buf->data[1] = value;
245
0
}
246
/**
247
 * fu_mkhi_read_file_request_set_result: (skip):
248
 **/
249
static void
250
fu_mkhi_read_file_request_set_result(FuMkhiReadFileRequest *st, guint8 value)
251
0
{
252
0
    g_return_if_fail(st != NULL);
253
0
    st->buf->data[3] = value;
254
0
}
255
/**
256
 * fu_mkhi_read_file_request_set_filename: (skip):
257
 **/
258
gboolean
259
fu_mkhi_read_file_request_set_filename(FuMkhiReadFileRequest *st, const gchar *value, GError **error)
260
0
{
261
0
    gsize len;
262
0
    g_return_val_if_fail(st != NULL, FALSE);
263
0
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
264
0
    if (value == NULL) {
265
0
        memset(st->buf->data + 4, 0x0, 64);
266
0
        return TRUE;
267
0
    }
268
0
    len = strlen(value);
269
0
    if (len > 64) {
270
0
        g_set_error(error,
271
0
                    FWUPD_ERROR,
272
0
                    FWUPD_ERROR_INVALID_DATA,
273
0
                    "string '%s' (0x%x bytes) does not fit in FuMkhiReadFileRequest.filename (0x%x bytes)",
274
0
                    value, (guint) len, (guint) 64);
275
0
        return FALSE;
276
0
    }
277
0
    return fu_memcpy_safe(st->buf->data, st->buf->len, 4, (const guint8 *)value, len, 0x0, len, error);
278
0
}
279
/**
280
 * fu_mkhi_read_file_request_set_offset: (skip):
281
 **/
282
static void
283
fu_mkhi_read_file_request_set_offset(FuMkhiReadFileRequest *st, guint32 value)
284
0
{
285
0
    g_return_if_fail(st != NULL);
286
0
    fu_memwrite_uint32(st->buf->data + 68, value, G_LITTLE_ENDIAN);
287
0
}
288
/**
289
 * fu_mkhi_read_file_request_set_data_size: (skip):
290
 **/
291
void
292
fu_mkhi_read_file_request_set_data_size(FuMkhiReadFileRequest *st, guint32 value)
293
0
{
294
0
    g_return_if_fail(st != NULL);
295
0
    fu_memwrite_uint32(st->buf->data + 72, value, G_LITTLE_ENDIAN);
296
0
}
297
/**
298
 * fu_mkhi_read_file_request_set_flags: (skip):
299
 **/
300
void
301
fu_mkhi_read_file_request_set_flags(FuMkhiReadFileRequest *st, guint8 value)
302
0
{
303
0
    g_return_if_fail(st != NULL);
304
0
    st->buf->data[76] = value;
305
0
}
306
/**
307
 * fu_mkhi_read_file_request_new: (skip):
308
 **/
309
FuMkhiReadFileRequest *
310
fu_mkhi_read_file_request_new(void)
311
0
{
312
0
    FuMkhiReadFileRequest *st = fu_mkhi_read_file_request_new_internal();
313
0
    st->buf = g_byte_array_sized_new(77);
314
0
    fu_byte_array_set_size(st->buf, 77, 0x0);
315
0
    fu_mkhi_read_file_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
316
0
    fu_mkhi_read_file_request_set_command(st, FU_MKHI_COMMAND_READ_FILE);
317
0
    fu_mkhi_read_file_request_set_result(st, 0x0);
318
0
    fu_mkhi_read_file_request_set_offset(st, 0x0);
319
0
    return st;
320
0
}
321
/**
322
 * fu_mkhi_read_file_response_ref: (skip):
323
 **/
324
FuMkhiReadFileResponse *
325
fu_mkhi_read_file_response_ref(FuMkhiReadFileResponse *st)
326
0
{
327
0
    g_return_val_if_fail(st != NULL, NULL);
328
0
    st->refcount++;
329
0
    return st;
330
0
}
331
/**
332
 * fu_mkhi_read_file_response_unref: (skip):
333
 **/
334
void
335
fu_mkhi_read_file_response_unref(FuMkhiReadFileResponse *st)
336
0
{
337
0
    g_return_if_fail(st != NULL);
338
0
    if (st->refcount == 0) {
339
0
        g_critical("FuMkhiReadFileResponse refcount already zero");
340
0
        return;
341
0
    }
342
0
    if (--st->refcount > 0)
343
0
        return;
344
0
    if (st->buf != NULL)
345
0
        g_byte_array_unref(st->buf);
346
0
    g_free(st);
347
0
}
348
/**
349
 * fu_mkhi_read_file_response_new_internal: (skip):
350
 **/
351
static FuMkhiReadFileResponse *
352
fu_mkhi_read_file_response_new_internal(void)
353
0
{
354
0
    FuMkhiReadFileResponse *st = g_new0(FuMkhiReadFileResponse, 1);
355
0
    st->refcount = 1;
356
0
    return st;
357
0
}
358
359
/* getters */
360
/**
361
 * fu_mkhi_read_file_response_get_group_id: (skip):
362
 **/
363
static FuMkhiGroupId
364
fu_mkhi_read_file_response_get_group_id(const FuMkhiReadFileResponse *st)
365
0
{
366
0
    g_return_val_if_fail(st != NULL, 0x0);
367
0
    return st->buf->data[0];
368
0
}
369
/**
370
 * fu_mkhi_read_file_response_get_command: (skip):
371
 **/
372
static FuMkhiCommand
373
fu_mkhi_read_file_response_get_command(const FuMkhiReadFileResponse *st)
374
0
{
375
0
    g_return_val_if_fail(st != NULL, 0x0);
376
0
    return st->buf->data[1];
377
0
}
378
/**
379
 * fu_mkhi_read_file_response_get_result: (skip):
380
 **/
381
guint8
382
fu_mkhi_read_file_response_get_result(const FuMkhiReadFileResponse *st)
383
0
{
384
0
    g_return_val_if_fail(st != NULL, 0x0);
385
0
    return st->buf->data[3];
386
0
}
387
/**
388
 * fu_mkhi_read_file_response_get_data_size: (skip):
389
 **/
390
guint32
391
fu_mkhi_read_file_response_get_data_size(const FuMkhiReadFileResponse *st)
392
0
{
393
0
    g_return_val_if_fail(st != NULL, 0x0);
394
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
395
0
}
396
397
/* setters */
398
/**
399
 * fu_mkhi_read_file_response_to_string: (skip):
400
 **/
401
static gchar *
402
fu_mkhi_read_file_response_to_string(const FuMkhiReadFileResponse *st)
403
0
{
404
0
    g_autoptr(GString) str = g_string_new("FuMkhiReadFileResponse:\n");
405
0
    g_return_val_if_fail(st != NULL, NULL);
406
0
    {
407
0
        const gchar *tmp = fu_mkhi_group_id_to_string(fu_mkhi_read_file_response_get_group_id(st));
408
0
        if (tmp != NULL) {
409
0
            g_string_append_printf(str, "  group_id: 0x%x [%s]\n", (guint) fu_mkhi_read_file_response_get_group_id(st), tmp);
410
0
        } else {
411
0
            g_string_append_printf(str, "  group_id: 0x%x\n", (guint) fu_mkhi_read_file_response_get_group_id(st));
412
0
        }
413
0
    }
414
0
    {
415
0
        const gchar *tmp = fu_mkhi_command_to_string(fu_mkhi_read_file_response_get_command(st));
416
0
        if (tmp != NULL) {
417
0
            g_string_append_printf(str, "  command: 0x%x [%s]\n", (guint) fu_mkhi_read_file_response_get_command(st), tmp);
418
0
        } else {
419
0
            g_string_append_printf(str, "  command: 0x%x\n", (guint) fu_mkhi_read_file_response_get_command(st));
420
0
        }
421
0
    }
422
0
    g_string_append_printf(str, "  result: 0x%x\n",
423
0
                           (guint) fu_mkhi_read_file_response_get_result(st));
424
0
    g_string_append_printf(str, "  data_size: 0x%x\n",
425
0
                           (guint) fu_mkhi_read_file_response_get_data_size(st));
426
0
    if (str->len > 0)
427
0
        g_string_set_size(str, str->len - 1);
428
0
    return g_string_free(g_steal_pointer(&str), FALSE);
429
0
}
430
static gboolean
431
fu_mkhi_read_file_response_validate_internal(FuMkhiReadFileResponse *st, GError **error)
432
0
{
433
0
    g_return_val_if_fail(st != NULL, FALSE);
434
0
    if (fu_mkhi_read_file_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
435
0
        g_set_error(error,
436
0
                    FWUPD_ERROR,
437
0
                    FWUPD_ERROR_INVALID_DATA,
438
0
                    "constant FuMkhiReadFileResponse.group_id was not valid, "
439
0
                    "expected 'FU_MKHI_GROUP_ID_MCA' and got 0x%x '%s'",
440
0
                    fu_mkhi_read_file_response_get_group_id(st),
441
0
                    fu_mkhi_group_id_to_string(fu_mkhi_read_file_response_get_group_id(st)));
442
0
        return FALSE;
443
0
    }
444
0
    if (fu_mkhi_read_file_response_get_command(st) != FU_MKHI_COMMAND_READ_FILE_RESPONSE) {
445
0
        g_set_error(error,
446
0
                    FWUPD_ERROR,
447
0
                    FWUPD_ERROR_INVALID_DATA,
448
0
                    "constant FuMkhiReadFileResponse.command was not valid, "
449
0
                    "expected 'FU_MKHI_COMMAND_READ_FILE_RESPONSE' and got 0x%x '%s'",
450
0
                    fu_mkhi_read_file_response_get_command(st),
451
0
                    fu_mkhi_command_to_string(fu_mkhi_read_file_response_get_command(st)));
452
0
        return FALSE;
453
0
    }
454
0
    return TRUE;
455
0
}
456
static gboolean
457
fu_mkhi_read_file_response_parse_internal(FuMkhiReadFileResponse *st, GError **error)
458
0
{
459
0
    if (g_log_get_debug_enabled()) {
460
0
        g_autofree gchar *str = fu_mkhi_read_file_response_to_string(st);
461
0
        g_debug("%s", str);
462
0
    }
463
0
    if (!fu_mkhi_read_file_response_validate_internal(st, error))
464
0
        return FALSE;
465
0
    return TRUE;
466
0
}
467
468
/**
469
 * fu_mkhi_read_file_response_parse: (skip):
470
 **/
471
FuMkhiReadFileResponse *
472
fu_mkhi_read_file_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
473
0
{
474
0
    g_autoptr(FuMkhiReadFileResponse) st = fu_mkhi_read_file_response_new_internal();
475
0
    g_return_val_if_fail(buf != NULL, NULL);
476
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
477
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
478
0
        g_prefix_error_literal(error, "invalid struct FuMkhiReadFileResponse: ");
479
0
        return NULL;
480
0
    }
481
0
    st->buf = g_byte_array_new();
482
0
    g_byte_array_append(st->buf, buf + offset, 8);
483
0
    if (!fu_mkhi_read_file_response_parse_internal(st, error))
484
0
        return NULL;
485
0
    return g_steal_pointer(&st);
486
0
}
487
/**
488
 * fu_mkhi_read_file_ex_request_ref: (skip):
489
 **/
490
FuMkhiReadFileExRequest *
491
fu_mkhi_read_file_ex_request_ref(FuMkhiReadFileExRequest *st)
492
0
{
493
0
    g_return_val_if_fail(st != NULL, NULL);
494
0
    st->refcount++;
495
0
    return st;
496
0
}
497
/**
498
 * fu_mkhi_read_file_ex_request_unref: (skip):
499
 **/
500
void
501
fu_mkhi_read_file_ex_request_unref(FuMkhiReadFileExRequest *st)
502
0
{
503
0
    g_return_if_fail(st != NULL);
504
0
    if (st->refcount == 0) {
505
0
        g_critical("FuMkhiReadFileExRequest refcount already zero");
506
0
        return;
507
0
    }
508
0
    if (--st->refcount > 0)
509
0
        return;
510
0
    if (st->buf != NULL)
511
0
        g_byte_array_unref(st->buf);
512
0
    g_free(st);
513
0
}
514
/**
515
 * fu_mkhi_read_file_ex_request_new_internal: (skip):
516
 **/
517
static FuMkhiReadFileExRequest *
518
fu_mkhi_read_file_ex_request_new_internal(void)
519
0
{
520
0
    FuMkhiReadFileExRequest *st = g_new0(FuMkhiReadFileExRequest, 1);
521
0
    st->refcount = 1;
522
0
    return st;
523
0
}
524
525
/* getters */
526
527
/* setters */
528
/**
529
 * fu_mkhi_read_file_ex_request_set_group_id: (skip):
530
 **/
531
static void
532
fu_mkhi_read_file_ex_request_set_group_id(FuMkhiReadFileExRequest *st, FuMkhiGroupId value)
533
0
{
534
0
    g_return_if_fail(st != NULL);
535
0
    st->buf->data[0] = value;
536
0
}
537
/**
538
 * fu_mkhi_read_file_ex_request_set_command: (skip):
539
 **/
540
static void
541
fu_mkhi_read_file_ex_request_set_command(FuMkhiReadFileExRequest *st, FuMkhiCommand value)
542
0
{
543
0
    g_return_if_fail(st != NULL);
544
0
    st->buf->data[1] = value;
545
0
}
546
/**
547
 * fu_mkhi_read_file_ex_request_set_result: (skip):
548
 **/
549
static void
550
fu_mkhi_read_file_ex_request_set_result(FuMkhiReadFileExRequest *st, guint8 value)
551
0
{
552
0
    g_return_if_fail(st != NULL);
553
0
    st->buf->data[3] = value;
554
0
}
555
/**
556
 * fu_mkhi_read_file_ex_request_set_file_id: (skip):
557
 **/
558
void
559
fu_mkhi_read_file_ex_request_set_file_id(FuMkhiReadFileExRequest *st, guint32 value)
560
0
{
561
0
    g_return_if_fail(st != NULL);
562
0
    fu_memwrite_uint32(st->buf->data + 4, value, G_LITTLE_ENDIAN);
563
0
}
564
/**
565
 * fu_mkhi_read_file_ex_request_set_offset: (skip):
566
 **/
567
static void
568
fu_mkhi_read_file_ex_request_set_offset(FuMkhiReadFileExRequest *st, guint32 value)
569
0
{
570
0
    g_return_if_fail(st != NULL);
571
0
    fu_memwrite_uint32(st->buf->data + 8, value, G_LITTLE_ENDIAN);
572
0
}
573
/**
574
 * fu_mkhi_read_file_ex_request_set_data_size: (skip):
575
 **/
576
void
577
fu_mkhi_read_file_ex_request_set_data_size(FuMkhiReadFileExRequest *st, guint32 value)
578
0
{
579
0
    g_return_if_fail(st != NULL);
580
0
    fu_memwrite_uint32(st->buf->data + 12, value, G_LITTLE_ENDIAN);
581
0
}
582
/**
583
 * fu_mkhi_read_file_ex_request_set_flags: (skip):
584
 **/
585
void
586
fu_mkhi_read_file_ex_request_set_flags(FuMkhiReadFileExRequest *st, guint8 value)
587
0
{
588
0
    g_return_if_fail(st != NULL);
589
0
    st->buf->data[16] = value;
590
0
}
591
/**
592
 * fu_mkhi_read_file_ex_request_new: (skip):
593
 **/
594
FuMkhiReadFileExRequest *
595
fu_mkhi_read_file_ex_request_new(void)
596
0
{
597
0
    FuMkhiReadFileExRequest *st = fu_mkhi_read_file_ex_request_new_internal();
598
0
    st->buf = g_byte_array_sized_new(17);
599
0
    fu_byte_array_set_size(st->buf, 17, 0x0);
600
0
    fu_mkhi_read_file_ex_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
601
0
    fu_mkhi_read_file_ex_request_set_command(st, FU_MKHI_COMMAND_READ_FILE_EX);
602
0
    fu_mkhi_read_file_ex_request_set_result(st, 0x0);
603
0
    fu_mkhi_read_file_ex_request_set_offset(st, 0x0);
604
0
    return st;
605
0
}
606
/**
607
 * fu_mkhi_read_file_ex_response_ref: (skip):
608
 **/
609
FuMkhiReadFileExResponse *
610
fu_mkhi_read_file_ex_response_ref(FuMkhiReadFileExResponse *st)
611
0
{
612
0
    g_return_val_if_fail(st != NULL, NULL);
613
0
    st->refcount++;
614
0
    return st;
615
0
}
616
/**
617
 * fu_mkhi_read_file_ex_response_unref: (skip):
618
 **/
619
void
620
fu_mkhi_read_file_ex_response_unref(FuMkhiReadFileExResponse *st)
621
0
{
622
0
    g_return_if_fail(st != NULL);
623
0
    if (st->refcount == 0) {
624
0
        g_critical("FuMkhiReadFileExResponse refcount already zero");
625
0
        return;
626
0
    }
627
0
    if (--st->refcount > 0)
628
0
        return;
629
0
    if (st->buf != NULL)
630
0
        g_byte_array_unref(st->buf);
631
0
    g_free(st);
632
0
}
633
/**
634
 * fu_mkhi_read_file_ex_response_new_internal: (skip):
635
 **/
636
static FuMkhiReadFileExResponse *
637
fu_mkhi_read_file_ex_response_new_internal(void)
638
0
{
639
0
    FuMkhiReadFileExResponse *st = g_new0(FuMkhiReadFileExResponse, 1);
640
0
    st->refcount = 1;
641
0
    return st;
642
0
}
643
644
/* getters */
645
/**
646
 * fu_mkhi_read_file_ex_response_get_group_id: (skip):
647
 **/
648
static FuMkhiGroupId
649
fu_mkhi_read_file_ex_response_get_group_id(const FuMkhiReadFileExResponse *st)
650
0
{
651
0
    g_return_val_if_fail(st != NULL, 0x0);
652
0
    return st->buf->data[0];
653
0
}
654
/**
655
 * fu_mkhi_read_file_ex_response_get_command: (skip):
656
 **/
657
static FuMkhiCommand
658
fu_mkhi_read_file_ex_response_get_command(const FuMkhiReadFileExResponse *st)
659
0
{
660
0
    g_return_val_if_fail(st != NULL, 0x0);
661
0
    return st->buf->data[1];
662
0
}
663
/**
664
 * fu_mkhi_read_file_ex_response_get_result: (skip):
665
 **/
666
guint8
667
fu_mkhi_read_file_ex_response_get_result(const FuMkhiReadFileExResponse *st)
668
0
{
669
0
    g_return_val_if_fail(st != NULL, 0x0);
670
0
    return st->buf->data[3];
671
0
}
672
/**
673
 * fu_mkhi_read_file_ex_response_get_data_size: (skip):
674
 **/
675
guint32
676
fu_mkhi_read_file_ex_response_get_data_size(const FuMkhiReadFileExResponse *st)
677
0
{
678
0
    g_return_val_if_fail(st != NULL, 0x0);
679
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
680
0
}
681
682
/* setters */
683
/**
684
 * fu_mkhi_read_file_ex_response_to_string: (skip):
685
 **/
686
static gchar *
687
fu_mkhi_read_file_ex_response_to_string(const FuMkhiReadFileExResponse *st)
688
0
{
689
0
    g_autoptr(GString) str = g_string_new("FuMkhiReadFileExResponse:\n");
690
0
    g_return_val_if_fail(st != NULL, NULL);
691
0
    {
692
0
        const gchar *tmp = fu_mkhi_group_id_to_string(fu_mkhi_read_file_ex_response_get_group_id(st));
693
0
        if (tmp != NULL) {
694
0
            g_string_append_printf(str, "  group_id: 0x%x [%s]\n", (guint) fu_mkhi_read_file_ex_response_get_group_id(st), tmp);
695
0
        } else {
696
0
            g_string_append_printf(str, "  group_id: 0x%x\n", (guint) fu_mkhi_read_file_ex_response_get_group_id(st));
697
0
        }
698
0
    }
699
0
    {
700
0
        const gchar *tmp = fu_mkhi_command_to_string(fu_mkhi_read_file_ex_response_get_command(st));
701
0
        if (tmp != NULL) {
702
0
            g_string_append_printf(str, "  command: 0x%x [%s]\n", (guint) fu_mkhi_read_file_ex_response_get_command(st), tmp);
703
0
        } else {
704
0
            g_string_append_printf(str, "  command: 0x%x\n", (guint) fu_mkhi_read_file_ex_response_get_command(st));
705
0
        }
706
0
    }
707
0
    g_string_append_printf(str, "  result: 0x%x\n",
708
0
                           (guint) fu_mkhi_read_file_ex_response_get_result(st));
709
0
    g_string_append_printf(str, "  data_size: 0x%x\n",
710
0
                           (guint) fu_mkhi_read_file_ex_response_get_data_size(st));
711
0
    if (str->len > 0)
712
0
        g_string_set_size(str, str->len - 1);
713
0
    return g_string_free(g_steal_pointer(&str), FALSE);
714
0
}
715
static gboolean
716
fu_mkhi_read_file_ex_response_validate_internal(FuMkhiReadFileExResponse *st, GError **error)
717
0
{
718
0
    g_return_val_if_fail(st != NULL, FALSE);
719
0
    if (fu_mkhi_read_file_ex_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
720
0
        g_set_error(error,
721
0
                    FWUPD_ERROR,
722
0
                    FWUPD_ERROR_INVALID_DATA,
723
0
                    "constant FuMkhiReadFileExResponse.group_id was not valid, "
724
0
                    "expected 'FU_MKHI_GROUP_ID_MCA' and got 0x%x '%s'",
725
0
                    fu_mkhi_read_file_ex_response_get_group_id(st),
726
0
                    fu_mkhi_group_id_to_string(fu_mkhi_read_file_ex_response_get_group_id(st)));
727
0
        return FALSE;
728
0
    }
729
0
    if (fu_mkhi_read_file_ex_response_get_command(st) != FU_MKHI_COMMAND_READ_FILE_EX_RESPONSE) {
730
0
        g_set_error(error,
731
0
                    FWUPD_ERROR,
732
0
                    FWUPD_ERROR_INVALID_DATA,
733
0
                    "constant FuMkhiReadFileExResponse.command was not valid, "
734
0
                    "expected 'FU_MKHI_COMMAND_READ_FILE_EX_RESPONSE' and got 0x%x '%s'",
735
0
                    fu_mkhi_read_file_ex_response_get_command(st),
736
0
                    fu_mkhi_command_to_string(fu_mkhi_read_file_ex_response_get_command(st)));
737
0
        return FALSE;
738
0
    }
739
0
    return TRUE;
740
0
}
741
static gboolean
742
fu_mkhi_read_file_ex_response_parse_internal(FuMkhiReadFileExResponse *st, GError **error)
743
0
{
744
0
    if (g_log_get_debug_enabled()) {
745
0
        g_autofree gchar *str = fu_mkhi_read_file_ex_response_to_string(st);
746
0
        g_debug("%s", str);
747
0
    }
748
0
    if (!fu_mkhi_read_file_ex_response_validate_internal(st, error))
749
0
        return FALSE;
750
0
    return TRUE;
751
0
}
752
753
/**
754
 * fu_mkhi_read_file_ex_response_parse: (skip):
755
 **/
756
FuMkhiReadFileExResponse *
757
fu_mkhi_read_file_ex_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
758
0
{
759
0
    g_autoptr(FuMkhiReadFileExResponse) st = fu_mkhi_read_file_ex_response_new_internal();
760
0
    g_return_val_if_fail(buf != NULL, NULL);
761
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
762
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
763
0
        g_prefix_error_literal(error, "invalid struct FuMkhiReadFileExResponse: ");
764
0
        return NULL;
765
0
    }
766
0
    st->buf = g_byte_array_new();
767
0
    g_byte_array_append(st->buf, buf + offset, 8);
768
0
    if (!fu_mkhi_read_file_ex_response_parse_internal(st, error))
769
0
        return NULL;
770
0
    return g_steal_pointer(&st);
771
0
}
772
/**
773
 * fu_mkhi_arbh_svn_info_entry_ref: (skip):
774
 **/
775
FuMkhiArbhSvnInfoEntry *
776
fu_mkhi_arbh_svn_info_entry_ref(FuMkhiArbhSvnInfoEntry *st)
777
0
{
778
0
    g_return_val_if_fail(st != NULL, NULL);
779
0
    st->refcount++;
780
0
    return st;
781
0
}
782
/**
783
 * fu_mkhi_arbh_svn_info_entry_unref: (skip):
784
 **/
785
void
786
fu_mkhi_arbh_svn_info_entry_unref(FuMkhiArbhSvnInfoEntry *st)
787
0
{
788
0
    g_return_if_fail(st != NULL);
789
0
    if (st->refcount == 0) {
790
0
        g_critical("FuMkhiArbhSvnInfoEntry refcount already zero");
791
0
        return;
792
0
    }
793
0
    if (--st->refcount > 0)
794
0
        return;
795
0
    if (st->buf != NULL)
796
0
        g_byte_array_unref(st->buf);
797
0
    g_free(st);
798
0
}
799
/**
800
 * fu_mkhi_arbh_svn_info_entry_new_internal: (skip):
801
 **/
802
static FuMkhiArbhSvnInfoEntry *
803
fu_mkhi_arbh_svn_info_entry_new_internal(void)
804
0
{
805
0
    FuMkhiArbhSvnInfoEntry *st = g_new0(FuMkhiArbhSvnInfoEntry, 1);
806
0
    st->refcount = 1;
807
0
    return st;
808
0
}
809
810
/* getters */
811
/**
812
 * fu_mkhi_arbh_svn_info_entry_get_usage_id: (skip):
813
 **/
814
FuMkhiArbhSvnInfoEntryUsageId
815
fu_mkhi_arbh_svn_info_entry_get_usage_id(const FuMkhiArbhSvnInfoEntry *st)
816
0
{
817
0
    g_return_val_if_fail(st != NULL, 0x0);
818
0
    return st->buf->data[0];
819
0
}
820
/**
821
 * fu_mkhi_arbh_svn_info_entry_get_executing: (skip):
822
 **/
823
guint8
824
fu_mkhi_arbh_svn_info_entry_get_executing(const FuMkhiArbhSvnInfoEntry *st)
825
0
{
826
0
    g_return_val_if_fail(st != NULL, 0x0);
827
0
    return st->buf->data[2];
828
0
}
829
/**
830
 * fu_mkhi_arbh_svn_info_entry_get_min_allowed: (skip):
831
 **/
832
guint8
833
fu_mkhi_arbh_svn_info_entry_get_min_allowed(const FuMkhiArbhSvnInfoEntry *st)
834
0
{
835
0
    g_return_val_if_fail(st != NULL, 0x0);
836
0
    return st->buf->data[3];
837
0
}
838
839
/* setters */
840
/**
841
 * fu_mkhi_arbh_svn_info_entry_to_string: (skip):
842
 **/
843
static gchar *
844
fu_mkhi_arbh_svn_info_entry_to_string(const FuMkhiArbhSvnInfoEntry *st)
845
0
{
846
0
    g_autoptr(GString) str = g_string_new("FuMkhiArbhSvnInfoEntry:\n");
847
0
    g_return_val_if_fail(st != NULL, NULL);
848
0
    {
849
0
        const gchar *tmp = fu_mkhi_arbh_svn_info_entry_usage_id_to_string(fu_mkhi_arbh_svn_info_entry_get_usage_id(st));
850
0
        if (tmp != NULL) {
851
0
            g_string_append_printf(str, "  usage_id: 0x%x [%s]\n", (guint) fu_mkhi_arbh_svn_info_entry_get_usage_id(st), tmp);
852
0
        } else {
853
0
            g_string_append_printf(str, "  usage_id: 0x%x\n", (guint) fu_mkhi_arbh_svn_info_entry_get_usage_id(st));
854
0
        }
855
0
    }
856
0
    g_string_append_printf(str, "  executing: 0x%x\n",
857
0
                           (guint) fu_mkhi_arbh_svn_info_entry_get_executing(st));
858
0
    g_string_append_printf(str, "  min_allowed: 0x%x\n",
859
0
                           (guint) fu_mkhi_arbh_svn_info_entry_get_min_allowed(st));
860
0
    if (str->len > 0)
861
0
        g_string_set_size(str, str->len - 1);
862
0
    return g_string_free(g_steal_pointer(&str), FALSE);
863
0
}
864
static gboolean
865
fu_mkhi_arbh_svn_info_entry_parse_internal(FuMkhiArbhSvnInfoEntry *st, GError **error)
866
0
{
867
0
    if (g_log_get_debug_enabled()) {
868
0
        g_autofree gchar *str = fu_mkhi_arbh_svn_info_entry_to_string(st);
869
0
        g_debug("%s", str);
870
0
    }
871
0
    return TRUE;
872
0
}
873
874
/**
875
 * fu_mkhi_arbh_svn_info_entry_parse: (skip):
876
 **/
877
FuMkhiArbhSvnInfoEntry *
878
fu_mkhi_arbh_svn_info_entry_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
879
0
{
880
0
    g_autoptr(FuMkhiArbhSvnInfoEntry) st = fu_mkhi_arbh_svn_info_entry_new_internal();
881
0
    g_return_val_if_fail(buf != NULL, NULL);
882
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
883
0
    if (!fu_memchk_read(bufsz, offset, 4, error)) {
884
0
        g_prefix_error_literal(error, "invalid struct FuMkhiArbhSvnInfoEntry: ");
885
0
        return NULL;
886
0
    }
887
0
    st->buf = g_byte_array_new();
888
0
    g_byte_array_append(st->buf, buf + offset, 4);
889
0
    if (!fu_mkhi_arbh_svn_info_entry_parse_internal(st, error))
890
0
        return NULL;
891
0
    return g_steal_pointer(&st);
892
0
}
893
/**
894
 * fu_mkhi_arbh_svn_get_info_request_ref: (skip):
895
 **/
896
FuMkhiArbhSvnGetInfoRequest *
897
fu_mkhi_arbh_svn_get_info_request_ref(FuMkhiArbhSvnGetInfoRequest *st)
898
0
{
899
0
    g_return_val_if_fail(st != NULL, NULL);
900
0
    st->refcount++;
901
0
    return st;
902
0
}
903
/**
904
 * fu_mkhi_arbh_svn_get_info_request_unref: (skip):
905
 **/
906
void
907
fu_mkhi_arbh_svn_get_info_request_unref(FuMkhiArbhSvnGetInfoRequest *st)
908
0
{
909
0
    g_return_if_fail(st != NULL);
910
0
    if (st->refcount == 0) {
911
0
        g_critical("FuMkhiArbhSvnGetInfoRequest refcount already zero");
912
0
        return;
913
0
    }
914
0
    if (--st->refcount > 0)
915
0
        return;
916
0
    if (st->buf != NULL)
917
0
        g_byte_array_unref(st->buf);
918
0
    g_free(st);
919
0
}
920
/**
921
 * fu_mkhi_arbh_svn_get_info_request_new_internal: (skip):
922
 **/
923
static FuMkhiArbhSvnGetInfoRequest *
924
fu_mkhi_arbh_svn_get_info_request_new_internal(void)
925
0
{
926
0
    FuMkhiArbhSvnGetInfoRequest *st = g_new0(FuMkhiArbhSvnGetInfoRequest, 1);
927
0
    st->refcount = 1;
928
0
    return st;
929
0
}
930
931
/* getters */
932
933
/* setters */
934
/**
935
 * fu_mkhi_arbh_svn_get_info_request_set_group_id: (skip):
936
 **/
937
static void
938
fu_mkhi_arbh_svn_get_info_request_set_group_id(FuMkhiArbhSvnGetInfoRequest *st, FuMkhiGroupId value)
939
0
{
940
0
    g_return_if_fail(st != NULL);
941
0
    st->buf->data[0] = value;
942
0
}
943
/**
944
 * fu_mkhi_arbh_svn_get_info_request_set_command: (skip):
945
 **/
946
static void
947
fu_mkhi_arbh_svn_get_info_request_set_command(FuMkhiArbhSvnGetInfoRequest *st, FuMkhiCommand value)
948
0
{
949
0
    g_return_if_fail(st != NULL);
950
0
    st->buf->data[1] = value;
951
0
}
952
/**
953
 * fu_mkhi_arbh_svn_get_info_request_set_result: (skip):
954
 **/
955
static void
956
fu_mkhi_arbh_svn_get_info_request_set_result(FuMkhiArbhSvnGetInfoRequest *st, guint8 value)
957
0
{
958
0
    g_return_if_fail(st != NULL);
959
0
    st->buf->data[3] = value;
960
0
}
961
/**
962
 * fu_mkhi_arbh_svn_get_info_request_new: (skip):
963
 **/
964
FuMkhiArbhSvnGetInfoRequest *
965
fu_mkhi_arbh_svn_get_info_request_new(void)
966
0
{
967
0
    FuMkhiArbhSvnGetInfoRequest *st = fu_mkhi_arbh_svn_get_info_request_new_internal();
968
0
    st->buf = g_byte_array_sized_new(4);
969
0
    fu_byte_array_set_size(st->buf, 4, 0x0);
970
0
    fu_mkhi_arbh_svn_get_info_request_set_group_id(st, FU_MKHI_GROUP_ID_MCA);
971
0
    fu_mkhi_arbh_svn_get_info_request_set_command(st, FU_MKHI_COMMAND_ARBH_SVN_GET_INFO);
972
0
    fu_mkhi_arbh_svn_get_info_request_set_result(st, 0x0);
973
0
    return st;
974
0
}
975
/**
976
 * fu_mkhi_arbh_svn_get_info_response_ref: (skip):
977
 **/
978
FuMkhiArbhSvnGetInfoResponse *
979
fu_mkhi_arbh_svn_get_info_response_ref(FuMkhiArbhSvnGetInfoResponse *st)
980
0
{
981
0
    g_return_val_if_fail(st != NULL, NULL);
982
0
    st->refcount++;
983
0
    return st;
984
0
}
985
/**
986
 * fu_mkhi_arbh_svn_get_info_response_unref: (skip):
987
 **/
988
void
989
fu_mkhi_arbh_svn_get_info_response_unref(FuMkhiArbhSvnGetInfoResponse *st)
990
0
{
991
0
    g_return_if_fail(st != NULL);
992
0
    if (st->refcount == 0) {
993
0
        g_critical("FuMkhiArbhSvnGetInfoResponse refcount already zero");
994
0
        return;
995
0
    }
996
0
    if (--st->refcount > 0)
997
0
        return;
998
0
    if (st->buf != NULL)
999
0
        g_byte_array_unref(st->buf);
1000
0
    g_free(st);
1001
0
}
1002
/**
1003
 * fu_mkhi_arbh_svn_get_info_response_new_internal: (skip):
1004
 **/
1005
static FuMkhiArbhSvnGetInfoResponse *
1006
fu_mkhi_arbh_svn_get_info_response_new_internal(void)
1007
0
{
1008
0
    FuMkhiArbhSvnGetInfoResponse *st = g_new0(FuMkhiArbhSvnGetInfoResponse, 1);
1009
0
    st->refcount = 1;
1010
0
    return st;
1011
0
}
1012
1013
/* getters */
1014
/**
1015
 * fu_mkhi_arbh_svn_get_info_response_get_group_id: (skip):
1016
 **/
1017
static FuMkhiGroupId
1018
fu_mkhi_arbh_svn_get_info_response_get_group_id(const FuMkhiArbhSvnGetInfoResponse *st)
1019
0
{
1020
0
    g_return_val_if_fail(st != NULL, 0x0);
1021
0
    return st->buf->data[0];
1022
0
}
1023
/**
1024
 * fu_mkhi_arbh_svn_get_info_response_get_command: (skip):
1025
 **/
1026
static FuMkhiCommand
1027
fu_mkhi_arbh_svn_get_info_response_get_command(const FuMkhiArbhSvnGetInfoResponse *st)
1028
0
{
1029
0
    g_return_val_if_fail(st != NULL, 0x0);
1030
0
    return st->buf->data[1];
1031
0
}
1032
/**
1033
 * fu_mkhi_arbh_svn_get_info_response_get_result: (skip):
1034
 **/
1035
guint8
1036
fu_mkhi_arbh_svn_get_info_response_get_result(const FuMkhiArbhSvnGetInfoResponse *st)
1037
0
{
1038
0
    g_return_val_if_fail(st != NULL, 0x0);
1039
0
    return st->buf->data[3];
1040
0
}
1041
/**
1042
 * fu_mkhi_arbh_svn_get_info_response_get_num_entries: (skip):
1043
 **/
1044
guint32
1045
fu_mkhi_arbh_svn_get_info_response_get_num_entries(const FuMkhiArbhSvnGetInfoResponse *st)
1046
0
{
1047
0
    g_return_val_if_fail(st != NULL, 0x0);
1048
0
    return fu_memread_uint32(st->buf->data + 4, G_LITTLE_ENDIAN);
1049
0
}
1050
1051
/* setters */
1052
/**
1053
 * fu_mkhi_arbh_svn_get_info_response_to_string: (skip):
1054
 **/
1055
static gchar *
1056
fu_mkhi_arbh_svn_get_info_response_to_string(const FuMkhiArbhSvnGetInfoResponse *st)
1057
0
{
1058
0
    g_autoptr(GString) str = g_string_new("FuMkhiArbhSvnGetInfoResponse:\n");
1059
0
    g_return_val_if_fail(st != NULL, NULL);
1060
0
    {
1061
0
        const gchar *tmp = fu_mkhi_group_id_to_string(fu_mkhi_arbh_svn_get_info_response_get_group_id(st));
1062
0
        if (tmp != NULL) {
1063
0
            g_string_append_printf(str, "  group_id: 0x%x [%s]\n", (guint) fu_mkhi_arbh_svn_get_info_response_get_group_id(st), tmp);
1064
0
        } else {
1065
0
            g_string_append_printf(str, "  group_id: 0x%x\n", (guint) fu_mkhi_arbh_svn_get_info_response_get_group_id(st));
1066
0
        }
1067
0
    }
1068
0
    {
1069
0
        const gchar *tmp = fu_mkhi_command_to_string(fu_mkhi_arbh_svn_get_info_response_get_command(st));
1070
0
        if (tmp != NULL) {
1071
0
            g_string_append_printf(str, "  command: 0x%x [%s]\n", (guint) fu_mkhi_arbh_svn_get_info_response_get_command(st), tmp);
1072
0
        } else {
1073
0
            g_string_append_printf(str, "  command: 0x%x\n", (guint) fu_mkhi_arbh_svn_get_info_response_get_command(st));
1074
0
        }
1075
0
    }
1076
0
    g_string_append_printf(str, "  result: 0x%x\n",
1077
0
                           (guint) fu_mkhi_arbh_svn_get_info_response_get_result(st));
1078
0
    g_string_append_printf(str, "  num_entries: 0x%x\n",
1079
0
                           (guint) fu_mkhi_arbh_svn_get_info_response_get_num_entries(st));
1080
0
    if (str->len > 0)
1081
0
        g_string_set_size(str, str->len - 1);
1082
0
    return g_string_free(g_steal_pointer(&str), FALSE);
1083
0
}
1084
static gboolean
1085
fu_mkhi_arbh_svn_get_info_response_validate_internal(FuMkhiArbhSvnGetInfoResponse *st, GError **error)
1086
0
{
1087
0
    g_return_val_if_fail(st != NULL, FALSE);
1088
0
    if (fu_mkhi_arbh_svn_get_info_response_get_group_id(st) != FU_MKHI_GROUP_ID_MCA) {
1089
0
        g_set_error(error,
1090
0
                    FWUPD_ERROR,
1091
0
                    FWUPD_ERROR_INVALID_DATA,
1092
0
                    "constant FuMkhiArbhSvnGetInfoResponse.group_id was not valid, "
1093
0
                    "expected 'FU_MKHI_GROUP_ID_MCA' and got 0x%x '%s'",
1094
0
                    fu_mkhi_arbh_svn_get_info_response_get_group_id(st),
1095
0
                    fu_mkhi_group_id_to_string(fu_mkhi_arbh_svn_get_info_response_get_group_id(st)));
1096
0
        return FALSE;
1097
0
    }
1098
0
    if (fu_mkhi_arbh_svn_get_info_response_get_command(st) != FU_MKHI_COMMAND_ARBH_SVN_GET_INFO_RESPONSE) {
1099
0
        g_set_error(error,
1100
0
                    FWUPD_ERROR,
1101
0
                    FWUPD_ERROR_INVALID_DATA,
1102
0
                    "constant FuMkhiArbhSvnGetInfoResponse.command was not valid, "
1103
0
                    "expected 'FU_MKHI_COMMAND_ARBH_SVN_GET_INFO_RESPONSE' and got 0x%x '%s'",
1104
0
                    fu_mkhi_arbh_svn_get_info_response_get_command(st),
1105
0
                    fu_mkhi_command_to_string(fu_mkhi_arbh_svn_get_info_response_get_command(st)));
1106
0
        return FALSE;
1107
0
    }
1108
0
    return TRUE;
1109
0
}
1110
static gboolean
1111
fu_mkhi_arbh_svn_get_info_response_parse_internal(FuMkhiArbhSvnGetInfoResponse *st, GError **error)
1112
0
{
1113
0
    if (g_log_get_debug_enabled()) {
1114
0
        g_autofree gchar *str = fu_mkhi_arbh_svn_get_info_response_to_string(st);
1115
0
        g_debug("%s", str);
1116
0
    }
1117
0
    if (!fu_mkhi_arbh_svn_get_info_response_validate_internal(st, error))
1118
0
        return FALSE;
1119
0
    return TRUE;
1120
0
}
1121
1122
/**
1123
 * fu_mkhi_arbh_svn_get_info_response_parse: (skip):
1124
 **/
1125
FuMkhiArbhSvnGetInfoResponse *
1126
fu_mkhi_arbh_svn_get_info_response_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
1127
0
{
1128
0
    g_autoptr(FuMkhiArbhSvnGetInfoResponse) st = fu_mkhi_arbh_svn_get_info_response_new_internal();
1129
0
    g_return_val_if_fail(buf != NULL, NULL);
1130
0
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
1131
0
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
1132
0
        g_prefix_error_literal(error, "invalid struct FuMkhiArbhSvnGetInfoResponse: ");
1133
0
        return NULL;
1134
0
    }
1135
0
    st->buf = g_byte_array_new();
1136
0
    g_byte_array_append(st->buf, buf + offset, 8);
1137
0
    if (!fu_mkhi_arbh_svn_get_info_response_parse_internal(st, error))
1138
0
        return NULL;
1139
0
    return g_steal_pointer(&st);
1140
0
}