1*5a485aa9Sskrll /* $NetBSD: fdt_strerror.c,v 1.1.1.3 2019/12/22 12:30:36 skrll Exp $ */
2fc885a42Sskrll
3*5a485aa9Sskrll // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
46233fbe7Smacallan /*
56233fbe7Smacallan * libfdt - Flat Device Tree manipulation
66233fbe7Smacallan * Copyright (C) 2006 David Gibson, IBM Corporation.
76233fbe7Smacallan * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
86233fbe7Smacallan */
96233fbe7Smacallan #include "libfdt_env.h"
106233fbe7Smacallan
116233fbe7Smacallan #include <fdt.h>
126233fbe7Smacallan #include <libfdt.h>
136233fbe7Smacallan
146233fbe7Smacallan #include "libfdt_internal.h"
156233fbe7Smacallan
166233fbe7Smacallan struct fdt_errtabent {
176233fbe7Smacallan const char *str;
186233fbe7Smacallan };
196233fbe7Smacallan
206233fbe7Smacallan #define FDT_ERRTABENT(val) \
216233fbe7Smacallan [(val)] = { .str = #val, }
226233fbe7Smacallan
236233fbe7Smacallan static struct fdt_errtabent fdt_errtable[] = {
246233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_NOTFOUND),
256233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_EXISTS),
266233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_NOSPACE),
276233fbe7Smacallan
286233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADOFFSET),
296233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADPATH),
30fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_BADPHANDLE),
316233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADSTATE),
326233fbe7Smacallan
336233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_TRUNCATED),
346233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADMAGIC),
356233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADVERSION),
366233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADSTRUCTURE),
376233fbe7Smacallan FDT_ERRTABENT(FDT_ERR_BADLAYOUT),
38fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_INTERNAL),
39fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_BADNCELLS),
40fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_BADVALUE),
41fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_BADOVERLAY),
42fc885a42Sskrll FDT_ERRTABENT(FDT_ERR_NOPHANDLES),
43*5a485aa9Sskrll FDT_ERRTABENT(FDT_ERR_BADFLAGS),
446233fbe7Smacallan };
456233fbe7Smacallan #define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
466233fbe7Smacallan
fdt_strerror(int errval)476233fbe7Smacallan const char *fdt_strerror(int errval)
486233fbe7Smacallan {
496233fbe7Smacallan if (errval > 0)
506233fbe7Smacallan return "<valid offset/length>";
516233fbe7Smacallan else if (errval == 0)
526233fbe7Smacallan return "<no error>";
536233fbe7Smacallan else if (errval > -FDT_ERRTABSIZE) {
546233fbe7Smacallan const char *s = fdt_errtable[-errval].str;
556233fbe7Smacallan
566233fbe7Smacallan if (s)
576233fbe7Smacallan return s;
586233fbe7Smacallan }
596233fbe7Smacallan
606233fbe7Smacallan return "<unknown error>";
616233fbe7Smacallan }
62