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