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