source: rtems-libbsd/freebsd/sys/dev/ofw/ofw_bus_subr.h @ f0dd0c5

55-freebsd-126-freebsd-12
Last change on this file since f0dd0c5 was f0dd0c5, checked in by Sebastian Huber <sebastian.huber@…>, on 03/02/17 at 15:28:14

FDT(4): Import from FreeBSD

  • Property mode set to 100644
File size: 5.4 KB
Line 
1/*-
2 * Copyright (c) 2005 Marius Strobl <marius@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions, and the following disclaimer,
10 *    without modification, immediately at the beginning of the file.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in
13 *    the documentation and/or other materials provided with the
14 *    distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
20 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * $FreeBSD$
29 */
30
31#ifndef _DEV_OFW_OFW_BUS_SUBR_H_
32#define _DEV_OFW_OFW_BUS_SUBR_H_
33
34#include <sys/bus.h>
35#ifdef INTRNG
36#include <sys/intr.h>
37#endif
38#include <dev/ofw/openfirm.h>
39
40#include <rtems/bsd/local/ofw_bus_if.h>
41
42#define ORIP_NOINT      -1
43#define ORIR_NOTFOUND   0xffffffff
44
45struct ofw_bus_iinfo {
46        uint8_t                 *opi_imap;
47        uint8_t                 *opi_imapmsk;
48        int                     opi_imapsz;
49        pcell_t                 opi_addrc;
50};
51
52struct ofw_compat_data {
53        const char      *ocd_str;
54        uintptr_t        ocd_data;
55};
56
57#ifdef INTRNG
58struct intr_map_data_fdt {
59        struct intr_map_data    hdr;
60        phandle_t               iparent;
61        u_int                   ncells;
62        pcell_t                 cells[];
63};
64#endif
65
66#define SIMPLEBUS_PNP_DESCR "Z:compat;P:private;"
67#define SIMPLEBUS_PNP_INFO(t) \
68        MODULE_PNP_INFO(SIMPLEBUS_PNP_DESCR, simplebus, t, t, sizeof(t[0]), sizeof(t) / sizeof(t[0]));
69
70/* Generic implementation of ofw_bus_if.m methods and helper routines */
71int     ofw_bus_gen_setup_devinfo(struct ofw_bus_devinfo *, phandle_t);
72void    ofw_bus_gen_destroy_devinfo(struct ofw_bus_devinfo *);
73
74ofw_bus_get_compat_t    ofw_bus_gen_get_compat;
75ofw_bus_get_model_t     ofw_bus_gen_get_model;
76ofw_bus_get_name_t      ofw_bus_gen_get_name;
77ofw_bus_get_node_t      ofw_bus_gen_get_node;
78ofw_bus_get_type_t      ofw_bus_gen_get_type;
79
80/* Helper method to report interesting OF properties in pnpinfo */
81bus_child_pnpinfo_str_t ofw_bus_gen_child_pnpinfo_str;
82
83/* Routines for processing firmware interrupt maps */
84void    ofw_bus_setup_iinfo(phandle_t, struct ofw_bus_iinfo *, int);
85int     ofw_bus_lookup_imap(phandle_t, struct ofw_bus_iinfo *, void *, int,
86            void *, int, void *, int, phandle_t *);
87int     ofw_bus_search_intrmap(void *, int, void *, int, void *, int, void *,
88            void *, void *, int, phandle_t *);
89
90/* Routines for processing msi maps */
91int ofw_bus_msimap(phandle_t, uint16_t, phandle_t *, uint32_t *);
92
93/* Routines for parsing device-tree data into resource lists. */
94int ofw_bus_reg_to_rl(device_t, phandle_t, pcell_t, pcell_t,
95    struct resource_list *);
96int ofw_bus_intr_to_rl(device_t, phandle_t, struct resource_list *, int *);
97int ofw_bus_intr_by_rid(device_t, phandle_t, int, phandle_t *, int *,
98    pcell_t **);
99
100/* Helper to get device status property */
101const char *ofw_bus_get_status(device_t dev);
102int ofw_bus_status_okay(device_t dev);
103
104/* Helper to get node's interrupt parent */
105phandle_t ofw_bus_find_iparent(phandle_t);
106
107/* Helper routine for checking compat prop */
108int ofw_bus_is_compatible(device_t, const char *);
109int ofw_bus_is_compatible_strict(device_t, const char *);
110int ofw_bus_node_is_compatible(phandle_t, const char *);
111
112/*
113 * Helper routine to search a list of compat properties.  The table is
114 * terminated by an entry with a NULL compat-string pointer; a pointer to that
115 * table entry is returned if none of the compat strings match for the device,
116 * giving you control over the not-found value.  Will not return NULL unless the
117 * provided table pointer is NULL.
118 */
119const struct ofw_compat_data *
120    ofw_bus_search_compatible(device_t, const struct ofw_compat_data *);
121
122/* Helper routine for checking existence of a prop */
123int ofw_bus_has_prop(device_t, const char *);
124
125/* Helper to search for a child with a given compat prop */
126phandle_t ofw_bus_find_compatible(phandle_t, const char *);
127
128/* Helper to search for a child with a given name */
129phandle_t ofw_bus_find_child(phandle_t, const char *);
130
131/* Helper routine to find a device_t child matching a given phandle_t */
132device_t ofw_bus_find_child_device_by_phandle(device_t bus, phandle_t node);
133
134/* Helper routines for parsing lists  */
135int ofw_bus_parse_xref_list_alloc(phandle_t node, const char *list_name,
136    const char *cells_name, int idx, phandle_t *producer, int *ncells,
137    pcell_t **cells);
138int ofw_bus_parse_xref_list_get_length(phandle_t node, const char *list_name,
139    const char *cells_name, int *count);
140int ofw_bus_find_string_index(phandle_t node, const char *list_name,
141    const char *name, int *idx);
142int ofw_bus_string_list_to_array(phandle_t node, const char *list_name,
143    const char ***array);
144
145#endif /* !_DEV_OFW_OFW_BUS_SUBR_H_ */
Note: See TracBrowser for help on using the repository browser.