1243ce5d5SMadhukar Pappireddy // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
2630b011fSAntonio Nino Diaz /*
3630b011fSAntonio Nino Diaz * libfdt - Flat Device Tree manipulation
4630b011fSAntonio Nino Diaz * Copyright (C) 2006 David Gibson, IBM Corporation.
5630b011fSAntonio Nino Diaz * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6630b011fSAntonio Nino Diaz */
7630b011fSAntonio Nino Diaz #include "libfdt_env.h"
8630b011fSAntonio Nino Diaz
9630b011fSAntonio Nino Diaz #include <fdt.h>
10630b011fSAntonio Nino Diaz #include <libfdt.h>
11630b011fSAntonio Nino Diaz
12630b011fSAntonio Nino Diaz #include "libfdt_internal.h"
13630b011fSAntonio Nino Diaz
14630b011fSAntonio Nino Diaz struct fdt_errtabent {
15630b011fSAntonio Nino Diaz const char *str;
16630b011fSAntonio Nino Diaz };
17630b011fSAntonio Nino Diaz
18630b011fSAntonio Nino Diaz #define FDT_ERRTABENT(val) \
19630b011fSAntonio Nino Diaz [(val)] = { .str = #val, }
20630b011fSAntonio Nino Diaz
21630b011fSAntonio Nino Diaz static struct fdt_errtabent fdt_errtable[] = {
22630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_NOTFOUND),
23630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_EXISTS),
24630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_NOSPACE),
25630b011fSAntonio Nino Diaz
26630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADOFFSET),
27630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADPATH),
28630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
29630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADSTATE),
30630b011fSAntonio Nino Diaz
31630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_TRUNCATED),
32630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADMAGIC),
33630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADVERSION),
34630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
35630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
36630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_INTERNAL),
37630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADNCELLS),
38630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADVALUE),
39630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
40630b011fSAntonio Nino Diaz FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
41243ce5d5SMadhukar Pappireddy FDT_ERRTABENT(FDT_ERR_BADFLAGS),
42*94b2f94bSDaniel Boulby FDT_ERRTABENT(FDT_ERR_ALIGNMENT),
43630b011fSAntonio Nino Diaz };
443b456661SAndre Przywara #define FDT_ERRTABSIZE ((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))
45630b011fSAntonio Nino Diaz
fdt_strerror(int errval)46630b011fSAntonio Nino Diaz const char *fdt_strerror(int errval)
47630b011fSAntonio Nino Diaz {
48630b011fSAntonio Nino Diaz if (errval > 0)
49630b011fSAntonio Nino Diaz return "<valid offset/length>";
50630b011fSAntonio Nino Diaz else if (errval == 0)
51630b011fSAntonio Nino Diaz return "<no error>";
523b456661SAndre Przywara else if (-errval < FDT_ERRTABSIZE) {
53630b011fSAntonio Nino Diaz const char *s = fdt_errtable[-errval].str;
54630b011fSAntonio Nino Diaz
55630b011fSAntonio Nino Diaz if (s)
56630b011fSAntonio Nino Diaz return s;
57630b011fSAntonio Nino Diaz }
58630b011fSAntonio Nino Diaz
59630b011fSAntonio Nino Diaz return "<unknown error>";
60630b011fSAntonio Nino Diaz }
61