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