xref: /kvm-unit-tests/lib/libfdt/fdt_strerror.c (revision f2cd179cf9d00c00da2ef2604ed1fd8ebc303bb4)
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