xref: /openbmc/linux/scripts/dtc/libfdt/fdt_strerror.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
112869ecdSRob Herring // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
29fffb55fSDavid Gibson /*
39fffb55fSDavid Gibson  * libfdt - Flat Device Tree manipulation
49fffb55fSDavid Gibson  * Copyright (C) 2006 David Gibson, IBM Corporation.
59fffb55fSDavid Gibson  *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
69fffb55fSDavid Gibson  */
79fffb55fSDavid Gibson #include "libfdt_env.h"
89fffb55fSDavid Gibson 
99fffb55fSDavid Gibson #include <fdt.h>
109fffb55fSDavid Gibson #include <libfdt.h>
119fffb55fSDavid Gibson 
129fffb55fSDavid Gibson #include "libfdt_internal.h"
139fffb55fSDavid Gibson 
149fffb55fSDavid Gibson struct fdt_errtabent {
159fffb55fSDavid Gibson 	const char *str;
169fffb55fSDavid Gibson };
179fffb55fSDavid Gibson 
189fffb55fSDavid Gibson #define FDT_ERRTABENT(val) \
199fffb55fSDavid Gibson 	[(val)] = { .str = #val, }
209fffb55fSDavid Gibson 
219fffb55fSDavid Gibson static struct fdt_errtabent fdt_errtable[] = {
229fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_NOTFOUND),
239fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_EXISTS),
249fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_NOSPACE),
259fffb55fSDavid Gibson 
269fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADOFFSET),
279fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADPATH),
286f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
299fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADSTATE),
309fffb55fSDavid Gibson 
319fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_TRUNCATED),
329fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADMAGIC),
339fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADVERSION),
349fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
359fffb55fSDavid Gibson 	FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
366f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_INTERNAL),
376f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_BADNCELLS),
386f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_BADVALUE),
396f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
406f05afcbSRob Herring 	FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
419bb9c6a1SRob Herring 	FDT_ERRTABENT(FDT_ERR_BADFLAGS),
42*a77725a9SRob Herring 	FDT_ERRTABENT(FDT_ERR_ALIGNMENT),
439fffb55fSDavid Gibson };
446e9c9686SRob Herring #define FDT_ERRTABSIZE	((int)(sizeof(fdt_errtable) / sizeof(fdt_errtable[0])))
459fffb55fSDavid Gibson 
fdt_strerror(int errval)469fffb55fSDavid Gibson const char *fdt_strerror(int errval)
479fffb55fSDavid Gibson {
489fffb55fSDavid Gibson 	if (errval > 0)
499fffb55fSDavid Gibson 		return "<valid offset/length>";
509fffb55fSDavid Gibson 	else if (errval == 0)
519fffb55fSDavid Gibson 		return "<no error>";
526e9c9686SRob Herring 	else if (-errval < FDT_ERRTABSIZE) {
539fffb55fSDavid Gibson 		const char *s = fdt_errtable[-errval].str;
549fffb55fSDavid Gibson 
559fffb55fSDavid Gibson 		if (s)
569fffb55fSDavid Gibson 			return s;
579fffb55fSDavid Gibson 	}
589fffb55fSDavid Gibson 
599fffb55fSDavid Gibson 	return "<unknown error>";
609fffb55fSDavid Gibson }
61