Coverage Report

Created: 2025-07-11 06:31

/work/fu-fdt-struct.c
Line
Count
Source (jump to first uncovered line)
1
/* auto-generated, do not modify */
2
#include "config.h"
3
4
#include "fu-fdt-struct.h"
5
#include "fu-byte-array.h"
6
#include "fu-mem-private.h"
7
#include "fu-string.h"
8
9
#ifdef G_LOG_DOMAIN
10
  #undef G_LOG_DOMAIN
11
#endif
12
0
#define G_LOG_DOMAIN "FuStruct"
13
14
/* getters */
15
/**
16
 * fu_struct_fdt_get_magic: (skip):
17
 **/
18
static guint32
19
fu_struct_fdt_get_magic(const FuStructFdt *st)
20
24.5M
{
21
24.5M
    g_return_val_if_fail(st != NULL, 0x0);
22
24.5M
    return fu_memread_uint32(st->data + 0, G_BIG_ENDIAN);
23
24.5M
}
24
/**
25
 * fu_struct_fdt_get_totalsize: (skip):
26
 **/
27
guint32
28
fu_struct_fdt_get_totalsize(const FuStructFdt *st)
29
3.92k
{
30
3.92k
    g_return_val_if_fail(st != NULL, 0x0);
31
3.92k
    return fu_memread_uint32(st->data + 4, G_BIG_ENDIAN);
32
3.92k
}
33
/**
34
 * fu_struct_fdt_get_off_dt_struct: (skip):
35
 **/
36
guint32
37
fu_struct_fdt_get_off_dt_struct(const FuStructFdt *st)
38
3.42k
{
39
3.42k
    g_return_val_if_fail(st != NULL, 0x0);
40
3.42k
    return fu_memread_uint32(st->data + 8, G_BIG_ENDIAN);
41
3.42k
}
42
/**
43
 * fu_struct_fdt_get_off_dt_strings: (skip):
44
 **/
45
guint32
46
fu_struct_fdt_get_off_dt_strings(const FuStructFdt *st)
47
3.57k
{
48
3.57k
    g_return_val_if_fail(st != NULL, 0x0);
49
3.57k
    return fu_memread_uint32(st->data + 12, G_BIG_ENDIAN);
50
3.57k
}
51
/**
52
 * fu_struct_fdt_get_off_mem_rsvmap: (skip):
53
 **/
54
guint32
55
fu_struct_fdt_get_off_mem_rsvmap(const FuStructFdt *st)
56
3.85k
{
57
3.85k
    g_return_val_if_fail(st != NULL, 0x0);
58
3.85k
    return fu_memread_uint32(st->data + 16, G_BIG_ENDIAN);
59
3.85k
}
60
/**
61
 * fu_struct_fdt_get_version: (skip):
62
 **/
63
guint32
64
fu_struct_fdt_get_version(const FuStructFdt *st)
65
3.59k
{
66
3.59k
    g_return_val_if_fail(st != NULL, 0x0);
67
3.59k
    return fu_memread_uint32(st->data + 20, G_BIG_ENDIAN);
68
3.59k
}
69
/**
70
 * fu_struct_fdt_get_last_comp_version: (skip):
71
 **/
72
guint32
73
fu_struct_fdt_get_last_comp_version(const FuStructFdt *st)
74
3.65k
{
75
3.65k
    g_return_val_if_fail(st != NULL, 0x0);
76
3.65k
    return fu_memread_uint32(st->data + 24, G_BIG_ENDIAN);
77
3.65k
}
78
/**
79
 * fu_struct_fdt_get_boot_cpuid_phys: (skip):
80
 **/
81
guint32
82
fu_struct_fdt_get_boot_cpuid_phys(const FuStructFdt *st)
83
3.85k
{
84
3.85k
    g_return_val_if_fail(st != NULL, 0x0);
85
3.85k
    return fu_memread_uint32(st->data + 28, G_BIG_ENDIAN);
86
3.85k
}
87
/**
88
 * fu_struct_fdt_get_size_dt_strings: (skip):
89
 **/
90
guint32
91
fu_struct_fdt_get_size_dt_strings(const FuStructFdt *st)
92
7.16k
{
93
7.16k
    g_return_val_if_fail(st != NULL, 0x0);
94
7.16k
    return fu_memread_uint32(st->data + 32, G_BIG_ENDIAN);
95
7.16k
}
96
/**
97
 * fu_struct_fdt_get_size_dt_struct: (skip):
98
 **/
99
guint32
100
fu_struct_fdt_get_size_dt_struct(const FuStructFdt *st)
101
10.3k
{
102
10.3k
    g_return_val_if_fail(st != NULL, 0x0);
103
10.3k
    return fu_memread_uint32(st->data + 36, G_BIG_ENDIAN);
104
10.3k
}
105
106
/* setters */
107
/**
108
 * fu_struct_fdt_set_magic: (skip):
109
 **/
110
static void
111
fu_struct_fdt_set_magic(FuStructFdt *st, guint32 value)
112
1.44k
{
113
1.44k
    g_return_if_fail(st != NULL);
114
1.44k
    fu_memwrite_uint32(st->data + 0, value, G_BIG_ENDIAN);
115
1.44k
}
116
/**
117
 * fu_struct_fdt_set_totalsize: (skip):
118
 **/
119
void
120
fu_struct_fdt_set_totalsize(FuStructFdt *st, guint32 value)
121
1.29k
{
122
1.29k
    g_return_if_fail(st != NULL);
123
1.29k
    fu_memwrite_uint32(st->data + 4, value, G_BIG_ENDIAN);
124
1.29k
}
125
/**
126
 * fu_struct_fdt_set_off_dt_struct: (skip):
127
 **/
128
void
129
fu_struct_fdt_set_off_dt_struct(FuStructFdt *st, guint32 value)
130
1.29k
{
131
1.29k
    g_return_if_fail(st != NULL);
132
1.29k
    fu_memwrite_uint32(st->data + 8, value, G_BIG_ENDIAN);
133
1.29k
}
134
/**
135
 * fu_struct_fdt_set_off_dt_strings: (skip):
136
 **/
137
void
138
fu_struct_fdt_set_off_dt_strings(FuStructFdt *st, guint32 value)
139
1.29k
{
140
1.29k
    g_return_if_fail(st != NULL);
141
1.29k
    fu_memwrite_uint32(st->data + 12, value, G_BIG_ENDIAN);
142
1.29k
}
143
/**
144
 * fu_struct_fdt_set_off_mem_rsvmap: (skip):
145
 **/
146
void
147
fu_struct_fdt_set_off_mem_rsvmap(FuStructFdt *st, guint32 value)
148
1.29k
{
149
1.29k
    g_return_if_fail(st != NULL);
150
1.29k
    fu_memwrite_uint32(st->data + 16, value, G_BIG_ENDIAN);
151
1.29k
}
152
/**
153
 * fu_struct_fdt_set_version: (skip):
154
 **/
155
void
156
fu_struct_fdt_set_version(FuStructFdt *st, guint32 value)
157
1.29k
{
158
1.29k
    g_return_if_fail(st != NULL);
159
1.29k
    fu_memwrite_uint32(st->data + 20, value, G_BIG_ENDIAN);
160
1.29k
}
161
/**
162
 * fu_struct_fdt_set_last_comp_version: (skip):
163
 **/
164
void
165
fu_struct_fdt_set_last_comp_version(FuStructFdt *st, guint32 value)
166
1.44k
{
167
1.44k
    g_return_if_fail(st != NULL);
168
1.44k
    fu_memwrite_uint32(st->data + 24, value, G_BIG_ENDIAN);
169
1.44k
}
170
/**
171
 * fu_struct_fdt_set_boot_cpuid_phys: (skip):
172
 **/
173
void
174
fu_struct_fdt_set_boot_cpuid_phys(FuStructFdt *st, guint32 value)
175
1.29k
{
176
1.29k
    g_return_if_fail(st != NULL);
177
1.29k
    fu_memwrite_uint32(st->data + 28, value, G_BIG_ENDIAN);
178
1.29k
}
179
/**
180
 * fu_struct_fdt_set_size_dt_strings: (skip):
181
 **/
182
void
183
fu_struct_fdt_set_size_dt_strings(FuStructFdt *st, guint32 value)
184
1.29k
{
185
1.29k
    g_return_if_fail(st != NULL);
186
1.29k
    fu_memwrite_uint32(st->data + 32, value, G_BIG_ENDIAN);
187
1.29k
}
188
/**
189
 * fu_struct_fdt_set_size_dt_struct: (skip):
190
 **/
191
void
192
fu_struct_fdt_set_size_dt_struct(FuStructFdt *st, guint32 value)
193
1.29k
{
194
1.29k
    g_return_if_fail(st != NULL);
195
1.29k
    fu_memwrite_uint32(st->data + 36, value, G_BIG_ENDIAN);
196
1.29k
}
197
/**
198
 * fu_struct_fdt_new: (skip):
199
 **/
200
FuStructFdt *
201
fu_struct_fdt_new(void)
202
1.44k
{
203
1.44k
    FuStructFdt *st = g_byte_array_sized_new(40);
204
1.44k
    fu_byte_array_set_size(st, 40, 0x0);
205
1.44k
    fu_struct_fdt_set_magic(st, 0xD00DFEED);
206
1.44k
    fu_struct_fdt_set_last_comp_version(st, 2);
207
1.44k
    return st;
208
1.44k
}
209
/**
210
 * fu_struct_fdt_to_string: (skip):
211
 **/
212
static gchar *
213
fu_struct_fdt_to_string(const FuStructFdt *st)
214
0
{
215
0
    g_autoptr(GString) str = g_string_new("FuStructFdt:\n");
216
0
    g_return_val_if_fail(st != NULL, NULL);
217
0
    g_string_append_printf(str, "  totalsize: 0x%x\n",
218
0
                           (guint) fu_struct_fdt_get_totalsize(st));
219
0
    g_string_append_printf(str, "  off_dt_struct: 0x%x\n",
220
0
                           (guint) fu_struct_fdt_get_off_dt_struct(st));
221
0
    g_string_append_printf(str, "  off_dt_strings: 0x%x\n",
222
0
                           (guint) fu_struct_fdt_get_off_dt_strings(st));
223
0
    g_string_append_printf(str, "  off_mem_rsvmap: 0x%x\n",
224
0
                           (guint) fu_struct_fdt_get_off_mem_rsvmap(st));
225
0
    g_string_append_printf(str, "  version: 0x%x\n",
226
0
                           (guint) fu_struct_fdt_get_version(st));
227
0
    g_string_append_printf(str, "  last_comp_version: 0x%x\n",
228
0
                           (guint) fu_struct_fdt_get_last_comp_version(st));
229
0
    g_string_append_printf(str, "  boot_cpuid_phys: 0x%x\n",
230
0
                           (guint) fu_struct_fdt_get_boot_cpuid_phys(st));
231
0
    g_string_append_printf(str, "  size_dt_strings: 0x%x\n",
232
0
                           (guint) fu_struct_fdt_get_size_dt_strings(st));
233
0
    g_string_append_printf(str, "  size_dt_struct: 0x%x\n",
234
0
                           (guint) fu_struct_fdt_get_size_dt_struct(st));
235
0
    if (str->len > 0)
236
0
        g_string_set_size(str, str->len - 1);
237
0
    return g_string_free(g_steal_pointer(&str), FALSE);
238
0
}
239
static gboolean
240
fu_struct_fdt_validate_internal(FuStructFdt *st, GError **error)
241
12.2M
{
242
12.2M
    g_return_val_if_fail(st != NULL, FALSE);
243
12.2M
    if (fu_struct_fdt_get_magic(st) != 0xD00DFEED) {
244
12.2M
        g_set_error(error,
245
12.2M
                    FWUPD_ERROR,
246
12.2M
                    FWUPD_ERROR_INVALID_DATA,
247
12.2M
                    "constant FuStructFdt.magic was not valid, "
248
12.2M
                    "expected 0x%x and got 0x%x",
249
12.2M
                    (guint) 0xD00DFEED,
250
12.2M
                    (guint) fu_struct_fdt_get_magic(st));
251
12.2M
        return FALSE;
252
12.2M
    }
253
7.85k
    return TRUE;
254
12.2M
}
255
/**
256
 * fu_struct_fdt_validate_stream: (skip):
257
 **/
258
gboolean
259
fu_struct_fdt_validate_stream(GInputStream *stream, gsize offset, GError **error)
260
12.2M
{
261
12.2M
    g_autoptr(GByteArray) st = NULL;
262
12.2M
    g_return_val_if_fail(G_IS_INPUT_STREAM(stream), FALSE);
263
12.2M
    g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
264
12.2M
    st = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
265
12.2M
    if (st == NULL) {
266
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
267
0
        return FALSE;
268
0
    }
269
12.2M
    if (st->len != 40) {
270
8.38k
        g_set_error(error,
271
8.38k
                    FWUPD_ERROR,
272
8.38k
                    FWUPD_ERROR_INVALID_DATA,
273
8.38k
                    "FuStructFdt requested 0x%x and got 0x%x",
274
8.38k
                    (guint) 40,
275
8.38k
                    (guint) st->len);
276
8.38k
        return FALSE;
277
8.38k
    }
278
12.2M
    return fu_struct_fdt_validate_internal(st, error);
279
12.2M
}
280
static gboolean
281
fu_struct_fdt_parse_internal(FuStructFdt *st, GError **error)
282
3.92k
{
283
3.92k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
284
0
        g_autofree gchar *str = fu_struct_fdt_to_string(st);
285
0
        g_debug("%s", str);
286
0
    }
287
3.92k
    if (!fu_struct_fdt_validate_internal(st, error))
288
0
        return FALSE;
289
3.92k
    return TRUE;
290
3.92k
}
291
/**
292
 * fu_struct_fdt_parse_stream: (skip):
293
 **/
294
FuStructFdt *
295
fu_struct_fdt_parse_stream(GInputStream *stream, gsize offset, GError **error)
296
3.92k
{
297
3.92k
    g_autoptr(GByteArray) st = NULL;
298
3.92k
    st = fu_input_stream_read_byte_array(stream, offset, 40, NULL, error);
299
3.92k
    if (st == NULL) {
300
0
        g_prefix_error(error, "FuStructFdt failed read of 0x%x: ", (guint) 40);
301
0
        return NULL;
302
0
    }
303
3.92k
    if (st->len != 40) {
304
0
        g_set_error(error,
305
0
                    FWUPD_ERROR,
306
0
                    FWUPD_ERROR_INVALID_DATA,
307
0
                    "FuStructFdt requested 0x%x and got 0x%x",
308
0
                    (guint) 40,
309
0
                    (guint) st->len);
310
0
        return NULL;
311
0
    }
312
3.92k
    if (!fu_struct_fdt_parse_internal(st, error))
313
0
        return NULL;
314
3.92k
    return g_steal_pointer(&st);
315
3.92k
}
316
/* getters */
317
/**
318
 * fu_struct_fdt_reserve_entry_get_address: (skip):
319
 **/
320
guint64
321
fu_struct_fdt_reserve_entry_get_address(const FuStructFdtReserveEntry *st)
322
564k
{
323
564k
    g_return_val_if_fail(st != NULL, 0x0);
324
564k
    return fu_memread_uint64(st->data + 0, G_BIG_ENDIAN);
325
564k
}
326
/**
327
 * fu_struct_fdt_reserve_entry_get_size: (skip):
328
 **/
329
guint64
330
fu_struct_fdt_reserve_entry_get_size(const FuStructFdtReserveEntry *st)
331
564k
{
332
564k
    g_return_val_if_fail(st != NULL, 0x0);
333
564k
    return fu_memread_uint64(st->data + 8, G_BIG_ENDIAN);
334
564k
}
335
336
/* setters */
337
/**
338
 * fu_struct_fdt_reserve_entry_set_address: (skip):
339
 **/
340
void
341
fu_struct_fdt_reserve_entry_set_address(FuStructFdtReserveEntry *st, guint64 value)
342
0
{
343
0
    g_return_if_fail(st != NULL);
344
0
    fu_memwrite_uint64(st->data + 0, value, G_BIG_ENDIAN);
345
0
}
346
/**
347
 * fu_struct_fdt_reserve_entry_set_size: (skip):
348
 **/
349
void
350
fu_struct_fdt_reserve_entry_set_size(FuStructFdtReserveEntry *st, guint64 value)
351
0
{
352
0
    g_return_if_fail(st != NULL);
353
0
    fu_memwrite_uint64(st->data + 8, value, G_BIG_ENDIAN);
354
0
}
355
/**
356
 * fu_struct_fdt_reserve_entry_new: (skip):
357
 **/
358
FuStructFdtReserveEntry *
359
fu_struct_fdt_reserve_entry_new(void)
360
1.44k
{
361
1.44k
    FuStructFdtReserveEntry *st = g_byte_array_sized_new(16);
362
1.44k
    fu_byte_array_set_size(st, 16, 0x0);
363
1.44k
    return st;
364
1.44k
}
365
/**
366
 * fu_struct_fdt_reserve_entry_to_string: (skip):
367
 **/
368
static gchar *
369
fu_struct_fdt_reserve_entry_to_string(const FuStructFdtReserveEntry *st)
370
0
{
371
0
    g_autoptr(GString) str = g_string_new("FuStructFdtReserveEntry:\n");
372
0
    g_return_val_if_fail(st != NULL, NULL);
373
0
    g_string_append_printf(str, "  address: 0x%x\n",
374
0
                           (guint) fu_struct_fdt_reserve_entry_get_address(st));
375
0
    g_string_append_printf(str, "  size: 0x%x\n",
376
0
                           (guint) fu_struct_fdt_reserve_entry_get_size(st));
377
0
    if (str->len > 0)
378
0
        g_string_set_size(str, str->len - 1);
379
0
    return g_string_free(g_steal_pointer(&str), FALSE);
380
0
}
381
static gboolean
382
fu_struct_fdt_reserve_entry_validate_internal(FuStructFdtReserveEntry *st, GError **error)
383
564k
{
384
564k
    g_return_val_if_fail(st != NULL, FALSE);
385
564k
    return TRUE;
386
564k
}
387
static gboolean
388
fu_struct_fdt_reserve_entry_parse_internal(FuStructFdtReserveEntry *st, GError **error)
389
564k
{
390
564k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
391
0
        g_autofree gchar *str = fu_struct_fdt_reserve_entry_to_string(st);
392
0
        g_debug("%s", str);
393
0
    }
394
564k
    if (!fu_struct_fdt_reserve_entry_validate_internal(st, error))
395
0
        return FALSE;
396
564k
    return TRUE;
397
564k
}
398
/**
399
 * fu_struct_fdt_reserve_entry_parse_stream: (skip):
400
 **/
401
FuStructFdtReserveEntry *
402
fu_struct_fdt_reserve_entry_parse_stream(GInputStream *stream, gsize offset, GError **error)
403
564k
{
404
564k
    g_autoptr(GByteArray) st = NULL;
405
564k
    st = fu_input_stream_read_byte_array(stream, offset, 16, NULL, error);
406
564k
    if (st == NULL) {
407
0
        g_prefix_error(error, "FuStructFdtReserveEntry failed read of 0x%x: ", (guint) 16);
408
0
        return NULL;
409
0
    }
410
564k
    if (st->len != 16) {
411
229
        g_set_error(error,
412
229
                    FWUPD_ERROR,
413
229
                    FWUPD_ERROR_INVALID_DATA,
414
229
                    "FuStructFdtReserveEntry requested 0x%x and got 0x%x",
415
229
                    (guint) 16,
416
229
                    (guint) st->len);
417
229
        return NULL;
418
229
    }
419
564k
    if (!fu_struct_fdt_reserve_entry_parse_internal(st, error))
420
0
        return NULL;
421
564k
    return g_steal_pointer(&st);
422
564k
}
423
/* getters */
424
/**
425
 * fu_struct_fdt_prop_get_len: (skip):
426
 **/
427
guint32
428
fu_struct_fdt_prop_get_len(const FuStructFdtProp *st)
429
40.2k
{
430
40.2k
    g_return_val_if_fail(st != NULL, 0x0);
431
40.2k
    return fu_memread_uint32(st->data + 0, G_BIG_ENDIAN);
432
40.2k
}
433
/**
434
 * fu_struct_fdt_prop_get_nameoff: (skip):
435
 **/
436
guint32
437
fu_struct_fdt_prop_get_nameoff(const FuStructFdtProp *st)
438
40.2k
{
439
40.2k
    g_return_val_if_fail(st != NULL, 0x0);
440
40.2k
    return fu_memread_uint32(st->data + 4, G_BIG_ENDIAN);
441
40.2k
}
442
443
/* setters */
444
/**
445
 * fu_struct_fdt_prop_set_len: (skip):
446
 **/
447
void
448
fu_struct_fdt_prop_set_len(FuStructFdtProp *st, guint32 value)
449
15.5k
{
450
15.5k
    g_return_if_fail(st != NULL);
451
15.5k
    fu_memwrite_uint32(st->data + 0, value, G_BIG_ENDIAN);
452
15.5k
}
453
/**
454
 * fu_struct_fdt_prop_set_nameoff: (skip):
455
 **/
456
void
457
fu_struct_fdt_prop_set_nameoff(FuStructFdtProp *st, guint32 value)
458
15.5k
{
459
15.5k
    g_return_if_fail(st != NULL);
460
15.5k
    fu_memwrite_uint32(st->data + 4, value, G_BIG_ENDIAN);
461
15.5k
}
462
/**
463
 * fu_struct_fdt_prop_new: (skip):
464
 **/
465
FuStructFdtProp *
466
fu_struct_fdt_prop_new(void)
467
15.5k
{
468
15.5k
    FuStructFdtProp *st = g_byte_array_sized_new(8);
469
15.5k
    fu_byte_array_set_size(st, 8, 0x0);
470
15.5k
    return st;
471
15.5k
}
472
/**
473
 * fu_struct_fdt_prop_to_string: (skip):
474
 **/
475
static gchar *
476
fu_struct_fdt_prop_to_string(const FuStructFdtProp *st)
477
0
{
478
0
    g_autoptr(GString) str = g_string_new("FuStructFdtProp:\n");
479
0
    g_return_val_if_fail(st != NULL, NULL);
480
0
    g_string_append_printf(str, "  len: 0x%x\n",
481
0
                           (guint) fu_struct_fdt_prop_get_len(st));
482
0
    g_string_append_printf(str, "  nameoff: 0x%x\n",
483
0
                           (guint) fu_struct_fdt_prop_get_nameoff(st));
484
0
    if (str->len > 0)
485
0
        g_string_set_size(str, str->len - 1);
486
0
    return g_string_free(g_steal_pointer(&str), FALSE);
487
0
}
488
static gboolean
489
fu_struct_fdt_prop_validate_internal(FuStructFdtProp *st, GError **error)
490
40.2k
{
491
40.2k
    g_return_val_if_fail(st != NULL, FALSE);
492
40.2k
    return TRUE;
493
40.2k
}
494
static gboolean
495
fu_struct_fdt_prop_parse_internal(FuStructFdtProp *st, GError **error)
496
40.2k
{
497
40.2k
    if (g_getenv("FWUPD_VERBOSE") != NULL) {
498
0
        g_autofree gchar *str = fu_struct_fdt_prop_to_string(st);
499
0
        g_debug("%s", str);
500
0
    }
501
40.2k
    if (!fu_struct_fdt_prop_validate_internal(st, error))
502
0
        return FALSE;
503
40.2k
    return TRUE;
504
40.2k
}
505
506
/**
507
 * fu_struct_fdt_prop_parse: (skip):
508
 **/
509
FuStructFdtProp *
510
fu_struct_fdt_prop_parse(const guint8 *buf, gsize bufsz, gsize offset, GError **error)
511
40.3k
{
512
40.3k
    g_autoptr(GByteArray) st = g_byte_array_new();
513
40.3k
    g_return_val_if_fail(buf != NULL, NULL);
514
40.3k
    g_return_val_if_fail(error == NULL || *error == NULL, NULL);
515
40.3k
    if (!fu_memchk_read(bufsz, offset, 8, error)) {
516
13
        g_prefix_error(error, "invalid struct FuStructFdtProp: ");
517
13
        return NULL;
518
13
    }
519
40.2k
    g_byte_array_append(st, buf + offset, 8);
520
40.2k
    if (!fu_struct_fdt_prop_parse_internal(st, error))
521
0
        return NULL;
522
40.2k
    return g_steal_pointer(&st);
523
40.2k
}