diff options
Diffstat (limited to 'include/linux/of.h')
| -rw-r--r-- | include/linux/of.h | 71 | 
1 files changed, 65 insertions, 6 deletions
diff --git a/include/linux/of.h b/include/linux/of.h index 4d25e4f952d9..a5aee3c438ad 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -247,15 +247,12 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size)  #include <asm/prom.h>  #endif -/* Default #address and #size cells.  Allow arch asm/prom.h to override */ -#if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT) -#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1 -#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 -#endif -  #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)  #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) +extern bool of_node_name_eq(const struct device_node *np, const char *name); +extern bool of_node_name_prefix(const struct device_node *np, const char *prefix); +  static inline const char *of_node_full_name(const struct device_node *np)  {  	return np ? np->full_name : "<no-node>"; @@ -290,6 +287,8 @@ extern struct device_node *of_get_next_child(const struct device_node *node,  extern struct device_node *of_get_next_available_child(  	const struct device_node *node, struct device_node *prev); +extern struct device_node *of_get_compatible_child(const struct device_node *parent, +					const char *compatible);  extern struct device_node *of_get_child_by_name(const struct device_node *node,  					const char *name); @@ -348,6 +347,8 @@ extern const void *of_get_property(const struct device_node *node,  				const char *name,  				int *lenp);  extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); +extern struct device_node *of_get_next_cpu_node(struct device_node *prev); +  #define for_each_property_of_node(dn, pp) \  	for (pp = dn->properties; pp != NULL; pp = pp->next) @@ -387,6 +388,9 @@ extern int of_phandle_iterator_args(struct of_phandle_iterator *it,  extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align));  extern int of_alias_get_id(struct device_node *np, const char *stem);  extern int of_alias_get_highest_id(const char *stem); +extern int of_alias_get_alias_list(const struct of_device_id *matches, +				   const char *stem, unsigned long *bitmap, +				   unsigned int nbits);  extern int of_machine_is_compatible(const char *compat); @@ -545,6 +549,10 @@ bool of_console_check(struct device_node *dn, char *name, int index);  extern int of_cpu_node_to_id(struct device_node *np); +int of_map_rid(struct device_node *np, u32 rid, +	       const char *map_name, const char *map_mask_name, +	       struct device_node **target, u32 *id_out); +  #else /* CONFIG_OF */  static inline void of_core_init(void) @@ -561,6 +569,16 @@ static inline struct device_node *to_of_node(const struct fwnode_handle *fwnode)  	return NULL;  } +static inline bool of_node_name_eq(const struct device_node *np, const char *name) +{ +	return false; +} + +static inline bool of_node_name_prefix(const struct device_node *np, const char *prefix) +{ +	return false; +} +  static inline const char* of_node_full_name(const struct device_node *np)  {  	return "<no-node>"; @@ -632,6 +650,12 @@ static inline bool of_have_populated_dt(void)  	return false;  } +static inline struct device_node *of_get_compatible_child(const struct device_node *parent, +					const char *compatible) +{ +	return NULL; +} +  static inline struct device_node *of_get_child_by_name(  					const struct device_node *node,  					const char *name) @@ -733,6 +757,11 @@ static inline struct device_node *of_get_cpu_node(int cpu,  	return NULL;  } +static inline struct device_node *of_get_next_cpu_node(struct device_node *prev) +{ +	return NULL; +} +  static inline int of_n_addr_cells(struct device_node *np)  {  	return 0; @@ -872,6 +901,13 @@ static inline int of_alias_get_highest_id(const char *stem)  	return -ENOSYS;  } +static inline int of_alias_get_alias_list(const struct of_device_id *matches, +					  const char *stem, unsigned long *bitmap, +					  unsigned int nbits) +{ +	return -ENOSYS; +} +  static inline int of_machine_is_compatible(const char *compat)  {  	return 0; @@ -931,6 +967,13 @@ static inline int of_cpu_node_to_id(struct device_node *np)  	return -ENODEV;  } +static inline int of_map_rid(struct device_node *np, u32 rid, +			     const char *map_name, const char *map_mask_name, +			     struct device_node **target, u32 *id_out) +{ +	return -EINVAL; +} +  #define of_match_ptr(_ptr)	NULL  #define of_match_node(_matches, _node)	NULL  #endif /* CONFIG_OF */ @@ -967,6 +1010,18 @@ static inline struct device_node *of_find_matching_node(  	return of_find_matching_node_and_match(from, matches, NULL);  } +static inline const char *of_node_get_device_type(const struct device_node *np) +{ +	return of_get_property(np, "device_type", NULL); +} + +static inline bool of_node_is_type(const struct device_node *np, const char *type) +{ +	const char *match = of_node_get_device_type(np); + +	return np && match && type && !strcmp(match, type); +} +  /**   * of_property_count_u8_elems - Count the number of u8 elements in a property   * @@ -1184,6 +1239,10 @@ static inline int of_property_read_s32(const struct device_node *np,  	for (child = of_get_next_available_child(parent, NULL); child != NULL; \  	     child = of_get_next_available_child(parent, child)) +#define for_each_of_cpu_node(cpu) \ +	for (cpu = of_get_next_cpu_node(NULL); cpu != NULL; \ +	     cpu = of_get_next_cpu_node(cpu)) +  #define for_each_node_with_property(dn, prop_name) \  	for (dn = of_find_node_with_property(NULL, prop_name); dn; \  	     dn = of_find_node_with_property(dn, prop_name))  | 
