xref: /optee_os/core/kernel/dt.c (revision a4f139d7fc30f5de9b7cd822b83495b22597fd5b)
1*a4f139d7SJerome Forissier /*
2*a4f139d7SJerome Forissier  * Copyright (c) 2016, Linaro Limited
3*a4f139d7SJerome Forissier  * All rights reserved.
4*a4f139d7SJerome Forissier  *
5*a4f139d7SJerome Forissier  * Redistribution and use in source and binary forms, with or without
6*a4f139d7SJerome Forissier  * modification, are permitted provided that the following conditions are met:
7*a4f139d7SJerome Forissier  *
8*a4f139d7SJerome Forissier  * 1. Redistributions of source code must retain the above copyright notice,
9*a4f139d7SJerome Forissier  * this list of conditions and the following disclaimer.
10*a4f139d7SJerome Forissier  *
11*a4f139d7SJerome Forissier  * 2. Redistributions in binary form must reproduce the above copyright notice,
12*a4f139d7SJerome Forissier  * this list of conditions and the following disclaimer in the documentation
13*a4f139d7SJerome Forissier  * and/or other materials provided with the distribution.
14*a4f139d7SJerome Forissier  *
15*a4f139d7SJerome Forissier  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16*a4f139d7SJerome Forissier  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*a4f139d7SJerome Forissier  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*a4f139d7SJerome Forissier  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19*a4f139d7SJerome Forissier  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20*a4f139d7SJerome Forissier  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21*a4f139d7SJerome Forissier  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22*a4f139d7SJerome Forissier  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23*a4f139d7SJerome Forissier  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24*a4f139d7SJerome Forissier  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25*a4f139d7SJerome Forissier  * POSSIBILITY OF SUCH DAMAGE.
26*a4f139d7SJerome Forissier  */
27*a4f139d7SJerome Forissier 
28*a4f139d7SJerome Forissier #include <kernel/dt.h>
29*a4f139d7SJerome Forissier #include <string.h>
30*a4f139d7SJerome Forissier 
31*a4f139d7SJerome Forissier const struct dt_driver *dt_find_compatible_driver(const void *fdt, int offs)
32*a4f139d7SJerome Forissier {
33*a4f139d7SJerome Forissier 	const struct dt_device_match *dm;
34*a4f139d7SJerome Forissier 	const struct dt_driver *drv;
35*a4f139d7SJerome Forissier 
36*a4f139d7SJerome Forissier 	for_each_dt_driver(drv)
37*a4f139d7SJerome Forissier 		for (dm = drv->match_table; dm; dm++)
38*a4f139d7SJerome Forissier 			if (!fdt_node_check_compatible(fdt, offs,
39*a4f139d7SJerome Forissier 						       dm->compatible))
40*a4f139d7SJerome Forissier 				return drv;
41*a4f139d7SJerome Forissier 
42*a4f139d7SJerome Forissier 	return NULL;
43*a4f139d7SJerome Forissier }
44*a4f139d7SJerome Forissier 
45*a4f139d7SJerome Forissier const struct dt_driver *__dt_driver_start(void)
46*a4f139d7SJerome Forissier {
47*a4f139d7SJerome Forissier 	return &__rodata_dtdrv_start;
48*a4f139d7SJerome Forissier }
49*a4f139d7SJerome Forissier 
50*a4f139d7SJerome Forissier const struct dt_driver *__dt_driver_end(void)
51*a4f139d7SJerome Forissier {
52*a4f139d7SJerome Forissier 	return &__rodata_dtdrv_end;
53*a4f139d7SJerome Forissier }
54