1553125dfSNikos Nikoleris // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
2a322d4c5SAndrew Jones /*
3a322d4c5SAndrew Jones * libfdt - Flat Device Tree manipulation
4a322d4c5SAndrew Jones * Copyright (C) 2006 David Gibson, IBM Corporation.
5a322d4c5SAndrew Jones * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6a322d4c5SAndrew Jones */
7a322d4c5SAndrew Jones #include "libfdt_env.h"
8a322d4c5SAndrew Jones
9a322d4c5SAndrew Jones #include <fdt.h>
10a322d4c5SAndrew Jones #include <libfdt.h>
11a322d4c5SAndrew Jones
12a322d4c5SAndrew Jones #include "libfdt_internal.h"
13a322d4c5SAndrew Jones
14a322d4c5SAndrew Jones struct fdt_errtabent {
15a322d4c5SAndrew Jones const char *str;
16a322d4c5SAndrew Jones };
17a322d4c5SAndrew Jones
18a322d4c5SAndrew Jones #define FDT_ERRTABENT(val) \
19a322d4c5SAndrew Jones [(val)] = { .str = #val, }
20a322d4c5SAndrew Jones
21a322d4c5SAndrew Jones static struct fdt_errtabent fdt_errtable[] = {
22a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_NOTFOUND),
23a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_EXISTS),
24a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_NOSPACE),
25a322d4c5SAndrew Jones
26a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADOFFSET),
27a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADPATH),
28553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
29a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADSTATE),
30a322d4c5SAndrew Jones
31a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_TRUNCATED),
32a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADMAGIC),
33a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADVERSION),
34a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
35a322d4c5SAndrew Jones FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
36553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_INTERNAL),
37553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_BADNCELLS),
38553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_BADVALUE),
39553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
40553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
41553125dfSNikos Nikoleris FDT_ERRTABENT(FDT_ERR_BADFLAGS),
42a322d4c5SAndrew Jones };
43*80a6d74fSAndrew Jones #define FDT_ERRTABSIZE ((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))
44a322d4c5SAndrew Jones
fdt_strerror(int errval)45a322d4c5SAndrew Jones const char *fdt_strerror(int errval)
46a322d4c5SAndrew Jones {
47a322d4c5SAndrew Jones if (errval > 0)
48a322d4c5SAndrew Jones return "<valid offset/length>";
49a322d4c5SAndrew Jones else if (errval == 0)
50a322d4c5SAndrew Jones return "<no error>";
51*80a6d74fSAndrew Jones else if (-errval < FDT_ERRTABSIZE) {
52a322d4c5SAndrew Jones const char *s = fdt_errtable[-errval].str;
53a322d4c5SAndrew Jones
54a322d4c5SAndrew Jones if (s)
55a322d4c5SAndrew Jones return s;
56a322d4c5SAndrew Jones }
57a322d4c5SAndrew Jones
58a322d4c5SAndrew Jones return "<unknown error>";
59a322d4c5SAndrew Jones }
60