1146a7d53SDavid E. O'Brien /* $NetBSD: openfirm.h,v 1.1 1998/05/15 10:16:00 tsubai Exp $ */ 2146a7d53SDavid E. O'Brien 3098ca2bdSWarner Losh /*- 44d846d26SWarner Losh * SPDX-License-Identifier: (BSD-4-Clause AND BSD-2-Clause) 5718cf2ccSPedro F. Giffuni * 6146a7d53SDavid E. O'Brien * Copyright (C) 1995, 1996 Wolfgang Solfrank. 7146a7d53SDavid E. O'Brien * Copyright (C) 1995, 1996 TooLs GmbH. 8146a7d53SDavid E. O'Brien * All rights reserved. 9146a7d53SDavid E. O'Brien * 10146a7d53SDavid E. O'Brien * Redistribution and use in source and binary forms, with or without 11146a7d53SDavid E. O'Brien * modification, are permitted provided that the following conditions 12146a7d53SDavid E. O'Brien * are met: 13146a7d53SDavid E. O'Brien * 1. Redistributions of source code must retain the above copyright 14146a7d53SDavid E. O'Brien * notice, this list of conditions and the following disclaimer. 15146a7d53SDavid E. O'Brien * 2. Redistributions in binary form must reproduce the above copyright 16146a7d53SDavid E. O'Brien * notice, this list of conditions and the following disclaimer in the 17146a7d53SDavid E. O'Brien * documentation and/or other materials provided with the distribution. 18146a7d53SDavid E. O'Brien * 3. All advertising materials mentioning features or use of this software 19146a7d53SDavid E. O'Brien * must display the following acknowledgement: 20146a7d53SDavid E. O'Brien * This product includes software developed by TooLs GmbH. 21146a7d53SDavid E. O'Brien * 4. The name of TooLs GmbH may not be used to endorse or promote products 22146a7d53SDavid E. O'Brien * derived from this software without specific prior written permission. 23146a7d53SDavid E. O'Brien * 24146a7d53SDavid E. O'Brien * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 25146a7d53SDavid E. O'Brien * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 26146a7d53SDavid E. O'Brien * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27146a7d53SDavid E. O'Brien * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28146a7d53SDavid E. O'Brien * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 29146a7d53SDavid E. O'Brien * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 30146a7d53SDavid E. O'Brien * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31146a7d53SDavid E. O'Brien * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 32146a7d53SDavid E. O'Brien * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 33146a7d53SDavid E. O'Brien * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34146a7d53SDavid E. O'Brien */ 35146a7d53SDavid E. O'Brien /* 36146a7d53SDavid E. O'Brien * Copyright (C) 2000 Benno Rice. 37146a7d53SDavid E. O'Brien * All rights reserved. 38146a7d53SDavid E. O'Brien * 39146a7d53SDavid E. O'Brien * Redistribution and use in source and binary forms, with or without 40146a7d53SDavid E. O'Brien * modification, are permitted provided that the following conditions 41146a7d53SDavid E. O'Brien * are met: 42146a7d53SDavid E. O'Brien * 1. Redistributions of source code must retain the above copyright 43146a7d53SDavid E. O'Brien * notice, this list of conditions and the following disclaimer. 44146a7d53SDavid E. O'Brien * 2. Redistributions in binary form must reproduce the above copyright 45146a7d53SDavid E. O'Brien * notice, this list of conditions and the following disclaimer in the 46146a7d53SDavid E. O'Brien * documentation and/or other materials provided with the distribution. 47146a7d53SDavid E. O'Brien * 48146a7d53SDavid E. O'Brien * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR 49146a7d53SDavid E. O'Brien * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 50146a7d53SDavid E. O'Brien * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 51146a7d53SDavid E. O'Brien * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 52146a7d53SDavid E. O'Brien * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 53146a7d53SDavid E. O'Brien * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 54146a7d53SDavid E. O'Brien * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 55146a7d53SDavid E. O'Brien * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 56146a7d53SDavid E. O'Brien * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 57146a7d53SDavid E. O'Brien * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 58146a7d53SDavid E. O'Brien */ 59146a7d53SDavid E. O'Brien 60481d6b54SMarius Strobl #ifndef _DEV_OPENFIRM_H_ 61481d6b54SMarius Strobl #define _DEV_OPENFIRM_H_ 6262626b2cSBenno Rice 6391416fb2SNathan Whitehorn #include <sys/types.h> 645ce7e615SIan Lepore #include <machine/_bus.h> 6591416fb2SNathan Whitehorn 66146a7d53SDavid E. O'Brien /* 6739513fa6SMarius Strobl * Prototypes for Open Firmware Interface Routines 68146a7d53SDavid E. O'Brien */ 69146a7d53SDavid E. O'Brien 7091416fb2SNathan Whitehorn typedef uint32_t ihandle_t; 7191416fb2SNathan Whitehorn typedef uint32_t phandle_t; 7291416fb2SNathan Whitehorn typedef uint32_t pcell_t; 7389492ca4SThomas Moestl 7489492ca4SThomas Moestl #ifdef _KERNEL 75398e05abSThomas Moestl #include <sys/malloc.h> 76398e05abSThomas Moestl 7791416fb2SNathan Whitehorn #include <machine/ofw_machdep.h> 7891416fb2SNathan Whitehorn 79398e05abSThomas Moestl MALLOC_DECLARE(M_OFWPROP); 80146a7d53SDavid E. O'Brien 81146a7d53SDavid E. O'Brien /* 8291416fb2SNathan Whitehorn * Open Firmware interface initialization. OF_install installs the named 8391416fb2SNathan Whitehorn * interface as the Open Firmware access mechanism, OF_init initializes it. 8479b45ec5SNathan Whitehorn */ 8591416fb2SNathan Whitehorn 86609cdb12SMitchell Horne bool OF_install(char *name, int prio); 878297758aSRafal Jaworowski int OF_init(void *cookie); 8879b45ec5SNathan Whitehorn 8979b45ec5SNathan Whitehorn /* 9091416fb2SNathan Whitehorn * Known Open Firmware interface names 91707fed20SBenno Rice */ 92707fed20SBenno Rice 9391416fb2SNathan Whitehorn #define OFW_STD_DIRECT "ofw_std" /* Standard OF interface */ 9491416fb2SNathan Whitehorn #define OFW_STD_REAL "ofw_real" /* Real-mode OF interface */ 95a26209a4SNathan Whitehorn #define OFW_STD_32BIT "ofw_32bit" /* 32-bit OF interface */ 9691416fb2SNathan Whitehorn #define OFW_FDT "ofw_fdt" /* Flattened Device Tree */ 97146a7d53SDavid E. O'Brien 98146a7d53SDavid E. O'Brien /* Generic functions */ 99481d6b54SMarius Strobl int OF_test(const char *name); 100481d6b54SMarius Strobl void OF_printf(const char *fmt, ...); 101146a7d53SDavid E. O'Brien 102146a7d53SDavid E. O'Brien /* Device tree functions */ 10391416fb2SNathan Whitehorn phandle_t OF_peer(phandle_t node); 10491416fb2SNathan Whitehorn phandle_t OF_child(phandle_t node); 10591416fb2SNathan Whitehorn phandle_t OF_parent(phandle_t node); 10691416fb2SNathan Whitehorn ssize_t OF_getproplen(phandle_t node, const char *propname); 10791416fb2SNathan Whitehorn ssize_t OF_getprop(phandle_t node, const char *propname, void *buf, 10891416fb2SNathan Whitehorn size_t len); 10929fdf9efSNathan Whitehorn ssize_t OF_getencprop(phandle_t node, const char *prop, pcell_t *buf, 11029fdf9efSNathan Whitehorn size_t len); /* Same as getprop, but maintains endianness */ 11126ca4965SHiroki Sato int OF_hasprop(phandle_t node, const char *propname); 112481d6b54SMarius Strobl ssize_t OF_searchprop(phandle_t node, const char *propname, void *buf, 113acb97117SNathan Whitehorn size_t len); 1144231c48fSNathan Whitehorn ssize_t OF_searchencprop(phandle_t node, const char *propname, 115c581f24aSOleksandr Tymoshenko pcell_t *buf, size_t len); 11691416fb2SNathan Whitehorn ssize_t OF_getprop_alloc(phandle_t node, const char *propname, 117217d17bcSOleksandr Tymoshenko void **buf); 118217d17bcSOleksandr Tymoshenko ssize_t OF_getprop_alloc_multi(phandle_t node, const char *propname, 11991416fb2SNathan Whitehorn int elsz, void **buf); 1204231c48fSNathan Whitehorn ssize_t OF_getencprop_alloc(phandle_t node, const char *propname, 121f7604b1bSOleksandr Tymoshenko void **buf); 122f7604b1bSOleksandr Tymoshenko ssize_t OF_getencprop_alloc_multi(phandle_t node, const char *propname, 1234231c48fSNathan Whitehorn int elsz, void **buf); 124bc90a48cSOleksandr Tymoshenko void OF_prop_free(void *buf); 12591416fb2SNathan Whitehorn int OF_nextprop(phandle_t node, const char *propname, char *buf, 12691416fb2SNathan Whitehorn size_t len); 12791416fb2SNathan Whitehorn int OF_setprop(phandle_t node, const char *name, const void *buf, 12891416fb2SNathan Whitehorn size_t len); 12991416fb2SNathan Whitehorn ssize_t OF_canon(const char *path, char *buf, size_t len); 13091416fb2SNathan Whitehorn phandle_t OF_finddevice(const char *path); 13191416fb2SNathan Whitehorn ssize_t OF_package_to_path(phandle_t node, char *buf, size_t len); 132146a7d53SDavid E. O'Brien 133c0888418SNathan Whitehorn /* 134c0888418SNathan Whitehorn * Some OF implementations (IBM, FDT) have a concept of effective phandles 135c0888418SNathan Whitehorn * used for device-tree cross-references. Given one of these, returns the 136c0888418SNathan Whitehorn * real phandle. If one can't be found (or running on OF implementations 137f021180bSIan Lepore * without this property), returns its input. 138c0888418SNathan Whitehorn */ 139752ba930SIan Lepore phandle_t OF_node_from_xref(phandle_t xref); 140752ba930SIan Lepore phandle_t OF_xref_from_node(phandle_t node); 141c0888418SNathan Whitehorn 142274245c8SIan Lepore /* 143274245c8SIan Lepore * When properties contain references to other nodes using xref handles it is 144274245c8SIan Lepore * often necessary to use interfaces provided by the driver for the referenced 145274245c8SIan Lepore * instance. These routines allow a driver that provides such an interface to 146274245c8SIan Lepore * register its association with an xref handle, and for other drivers to obtain 147274245c8SIan Lepore * the device_t associated with an xref handle. 148274245c8SIan Lepore */ 149274245c8SIan Lepore device_t OF_device_from_xref(phandle_t xref); 150937f32c0SIan Lepore phandle_t OF_xref_from_device(device_t dev); 151274245c8SIan Lepore int OF_device_register_xref(phandle_t xref, device_t dev); 152*944eda42SEmannuel Vadot void OF_device_unregister_xref(phandle_t xref, device_t dev); 153274245c8SIan Lepore 154146a7d53SDavid E. O'Brien /* Device I/O functions */ 15591416fb2SNathan Whitehorn ihandle_t OF_open(const char *path); 15691416fb2SNathan Whitehorn void OF_close(ihandle_t instance); 15791416fb2SNathan Whitehorn ssize_t OF_read(ihandle_t instance, void *buf, size_t len); 15891416fb2SNathan Whitehorn ssize_t OF_write(ihandle_t instance, const void *buf, size_t len); 15991416fb2SNathan Whitehorn int OF_seek(ihandle_t instance, uint64_t where); 16091416fb2SNathan Whitehorn 16191416fb2SNathan Whitehorn phandle_t OF_instance_to_package(ihandle_t instance); 16291416fb2SNathan Whitehorn ssize_t OF_instance_to_path(ihandle_t instance, char *buf, size_t len); 16391416fb2SNathan Whitehorn int OF_call_method(const char *method, ihandle_t instance, 16491416fb2SNathan Whitehorn int nargs, int nreturns, ...); 165146a7d53SDavid E. O'Brien 166146a7d53SDavid E. O'Brien /* Memory functions */ 16791416fb2SNathan Whitehorn void *OF_claim(void *virtrequest, size_t size, u_int align); 16891416fb2SNathan Whitehorn void OF_release(void *virt, size_t size); 169146a7d53SDavid E. O'Brien 170146a7d53SDavid E. O'Brien /* Control transfer functions */ 171146a7d53SDavid E. O'Brien void OF_enter(void); 1724cc1860fSBenno Rice void OF_exit(void) __attribute__((noreturn)); 173146a7d53SDavid E. O'Brien 174146a7d53SDavid E. O'Brien /* User interface functions */ 17591416fb2SNathan Whitehorn int OF_interpret(const char *cmd, int nreturns, ...); 17662626b2cSBenno Rice 177bc7b9300SIan Lepore /* 178bc7b9300SIan Lepore * Decode the Nth register property of the given device node and create a bus 179bc7b9300SIan Lepore * space tag and handle for accessing it. This is for use in setting up things 18058aa35d4SWarner Losh * like early console output before newbus is available. 181bc7b9300SIan Lepore */ 182bc7b9300SIan Lepore int OF_decode_addr(phandle_t dev, int regno, bus_space_tag_t *ptag, 18345fd1862SAndrew Turner bus_space_handle_t *phandle, bus_size_t *sz); 184bc7b9300SIan Lepore 18589492ca4SThomas Moestl #endif /* _KERNEL */ 186481d6b54SMarius Strobl #endif /* _DEV_OPENFIRM_H_ */ 187