The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ofw/openfirm.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: openfirm.h,v 1.1 1998/05/15 10:16:00 tsubai Exp $      */
    2 
    3 /*-
    4  * SPDX-License-Identifier: (BSD-4-Clause AND BSD-2-Clause-FreeBSD)
    5  *
    6  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
    7  * Copyright (C) 1995, 1996 TooLs GmbH.
    8  * All rights reserved.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *      This product includes software developed by TooLs GmbH.
   21  * 4. The name of TooLs GmbH may not be used to endorse or promote products
   22  *    derived from this software without specific prior written permission.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
   25  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   26  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   27  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   29  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   30  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   32  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   33  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   34  */
   35 /*
   36  * Copyright (C) 2000 Benno Rice.
   37  * All rights reserved.
   38  *
   39  * Redistribution and use in source and binary forms, with or without
   40  * modification, are permitted provided that the following conditions
   41  * are met:
   42  * 1. Redistributions of source code must retain the above copyright
   43  *    notice, this list of conditions and the following disclaimer.
   44  * 2. Redistributions in binary form must reproduce the above copyright
   45  *    notice, this list of conditions and the following disclaimer in the
   46  *    documentation and/or other materials provided with the distribution.
   47  *
   48  * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR
   49  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   50  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   51  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   52  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   53  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   54  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   55  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   56  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   57  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   58  *
   59  * $FreeBSD$
   60  */
   61 
   62 #ifndef _DEV_OPENFIRM_H_
   63 #define _DEV_OPENFIRM_H_
   64 
   65 #include <sys/types.h>
   66 #include <machine/_bus.h>
   67 
   68 /*
   69  * Prototypes for Open Firmware Interface Routines
   70  */
   71 
   72 typedef uint32_t        ihandle_t;
   73 typedef uint32_t        phandle_t;
   74 typedef uint32_t        pcell_t;
   75 
   76 #ifdef _KERNEL
   77 #include <sys/malloc.h>
   78 
   79 #include <machine/ofw_machdep.h>
   80 
   81 MALLOC_DECLARE(M_OFWPROP);
   82 
   83 /*
   84  * Open Firmware interface initialization.  OF_install installs the named
   85  * interface as the Open Firmware access mechanism, OF_init initializes it.
   86  */
   87 
   88 boolean_t       OF_install(char *name, int prio);
   89 int             OF_init(void *cookie);
   90 
   91 /*
   92  * Known Open Firmware interface names
   93  */
   94 
   95 #define OFW_STD_DIRECT  "ofw_std"       /* Standard OF interface */
   96 #define OFW_STD_REAL    "ofw_real"      /* Real-mode OF interface */
   97 #define OFW_STD_32BIT   "ofw_32bit"     /* 32-bit OF interface */
   98 #define OFW_FDT         "ofw_fdt"       /* Flattened Device Tree */
   99 
  100 /* Generic functions */
  101 int             OF_test(const char *name);
  102 void            OF_printf(const char *fmt, ...);
  103 
  104 /* Device tree functions */
  105 phandle_t       OF_peer(phandle_t node);
  106 phandle_t       OF_child(phandle_t node);
  107 phandle_t       OF_parent(phandle_t node);
  108 ssize_t         OF_getproplen(phandle_t node, const char *propname);
  109 ssize_t         OF_getprop(phandle_t node, const char *propname, void *buf,
  110                     size_t len);
  111 ssize_t         OF_getencprop(phandle_t node, const char *prop, pcell_t *buf,
  112                     size_t len); /* Same as getprop, but maintains endianness */
  113 int             OF_hasprop(phandle_t node, const char *propname);
  114 ssize_t         OF_searchprop(phandle_t node, const char *propname, void *buf,
  115                     size_t len);
  116 ssize_t         OF_searchencprop(phandle_t node, const char *propname,
  117                     pcell_t *buf, size_t len);
  118 ssize_t         OF_getprop_alloc(phandle_t node, const char *propname,
  119                     void **buf);
  120 ssize_t         OF_getprop_alloc_multi(phandle_t node, const char *propname,
  121                     int elsz, void **buf);
  122 ssize_t         OF_getencprop_alloc(phandle_t node, const char *propname,
  123                     void **buf);
  124 ssize_t         OF_getencprop_alloc_multi(phandle_t node, const char *propname,
  125                     int elsz, void **buf);
  126 void            OF_prop_free(void *buf);
  127 int             OF_nextprop(phandle_t node, const char *propname, char *buf,
  128                     size_t len);
  129 int             OF_setprop(phandle_t node, const char *name, const void *buf,
  130                     size_t len);
  131 ssize_t         OF_canon(const char *path, char *buf, size_t len);
  132 phandle_t       OF_finddevice(const char *path);
  133 ssize_t         OF_package_to_path(phandle_t node, char *buf, size_t len);
  134 
  135 /*
  136  * Some OF implementations (IBM, FDT) have a concept of effective phandles
  137  * used for device-tree cross-references. Given one of these, returns the
  138  * real phandle. If one can't be found (or running on OF implementations
  139  * without this property), returns its input.
  140  */
  141 phandle_t       OF_node_from_xref(phandle_t xref);
  142 phandle_t       OF_xref_from_node(phandle_t node);
  143 
  144 /*
  145  * When properties contain references to other nodes using xref handles it is
  146  * often necessary to use interfaces provided by the driver for the referenced
  147  * instance.  These routines allow a driver that provides such an interface to
  148  * register its association with an xref handle, and for other drivers to obtain
  149  * the device_t associated with an xref handle.
  150  */
  151 device_t        OF_device_from_xref(phandle_t xref);
  152 phandle_t       OF_xref_from_device(device_t dev);
  153 int             OF_device_register_xref(phandle_t xref, device_t dev);
  154 
  155 /* Device I/O functions */
  156 ihandle_t       OF_open(const char *path);
  157 void            OF_close(ihandle_t instance);
  158 ssize_t         OF_read(ihandle_t instance, void *buf, size_t len);
  159 ssize_t         OF_write(ihandle_t instance, const void *buf, size_t len);
  160 int             OF_seek(ihandle_t instance, uint64_t where);
  161 
  162 phandle_t       OF_instance_to_package(ihandle_t instance);
  163 ssize_t         OF_instance_to_path(ihandle_t instance, char *buf, size_t len);
  164 int             OF_call_method(const char *method, ihandle_t instance,
  165                     int nargs, int nreturns, ...);
  166 
  167 /* Memory functions */
  168 void            *OF_claim(void *virtrequest, size_t size, u_int align);
  169 void            OF_release(void *virt, size_t size);
  170 
  171 /* Control transfer functions */
  172 void            OF_enter(void);
  173 void            OF_exit(void) __attribute__((noreturn));
  174 
  175 /* User interface functions */
  176 int             OF_interpret(const char *cmd, int nreturns, ...);
  177 
  178 /*
  179  * Decode the Nth register property of the given device node and create a bus
  180  * space tag and handle for accessing it.  This is for use in setting up things
  181  * like early console output before newbus is available.
  182  */
  183 int             OF_decode_addr(phandle_t dev, int regno, bus_space_tag_t *ptag,
  184                     bus_space_handle_t *phandle, bus_size_t *sz);
  185 
  186 #endif /* _KERNEL */
  187 #endif /* _DEV_OPENFIRM_H_ */

Cache object: 6e96887c48c84d8a914e77df5463fb3e


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.