xref: /openbsd/sys/dev/pci/drm/include/linux/of.h (revision 6354f724)
1 /* Public domain. */
2 
3 #ifndef _LINUX_OF_H
4 #define _LINUX_OF_H
5 
6 #ifdef __macppc__
7 static inline int
of_machine_is_compatible(const char * model)8 of_machine_is_compatible(const char *model)
9 {
10 	extern char *hw_prod;
11 	return (strcmp(model, hw_prod) == 0);
12 }
13 #endif
14 
15 struct device_node {
16 	const char *full_name;
17 };
18 
19 #define of_node	dv_cfdata
20 
21 struct device_node *__of_get_compatible_child(void *, const char *);
22 #define of_get_compatible_child(d, n) \
23 	__of_get_compatible_child(&(d), (n))
24 
25 struct device_node *__of_get_child_by_name(void *, const char *);
26 #define of_get_child_by_name(d, n) \
27 	__of_get_child_by_name(&(d), (n))
28 
29 #define of_node_put(p)
30 
31 struct device_node *__of_devnode(void *);
32 #define __of_node(arg) \
33 	__builtin_types_compatible_p(typeof(arg), struct device_node *) ? \
34 		(struct device_node *)arg : __of_devnode(&arg)
35 
36 int	__of_property_present(struct device_node *, const char *);
37 #define of_property_present(n, p) \
38 	__of_property_present(__of_node(n), (p))
39 
40 int	__of_property_read_variable_u32_array(struct device_node *,
41 	    const char *, uint32_t *, size_t, size_t);
42 #define of_property_read_u32(n, p, o) \
43 	__of_property_read_variable_u32_array(__of_node(n), (p), (o), 1, 1)
44 #define of_property_read_variable_u32_array(n, p, o, l, h) \
45 	__of_property_read_variable_u32_array(__of_node(n), (p), (o), (l), (h))
46 
47 int	__of_property_read_variable_u64_array(struct device_node *,
48 	    const char *, uint64_t *, size_t, size_t);
49 #define of_property_read_u64(n, p, o) \
50 	__of_property_read_variable_u64_array(__of_node(n), (p), (o), 1, 1)
51 
52 int	__of_property_match_string(struct device_node *,
53 	    const char *, const char *);
54 #define of_property_match_string(n, a, b) \
55 	__of_property_match_string(__of_node(n), (a), (b))
56 
57 struct device_node *__of_parse_phandle(struct device_node *,
58 	    const char *, int);
59 #define of_parse_phandle(n, a, b) \
60 	__of_parse_phandle(__of_node(n), (a), (b))
61 
62 struct of_phandle_args {
63 	struct device_node *np;
64 	int args_count;
65 	uint32_t args[5];
66 };
67 
68 int	__of_parse_phandle_with_args(struct device_node *,
69 	    const char *, const char *, int, struct of_phandle_args *);
70 #define of_parse_phandle_with_args(n, a, b, c, d)			\
71 	__of_parse_phandle_with_args(__of_node(n), (a), (b), (c), (d))
72 
73 int	of_device_is_available(struct device_node *);
74 
75 struct of_device_id {
76 	const char *compatible;
77 	const void *data;
78 };
79 
80 struct device_node *__matching_node(struct device_node *,
81 	    const struct of_device_id *);
82 #define for_each_matching_node(a, b) \
83 	for (a = __matching_node(NULL, b); a; a = __matching_node(a, b))
84 
85 #endif
86