xref: /linux/drivers/base/property.c (revision 5e4e38446a62a4f50d77b0dd11d4b379dee08988)
1 /*
2  * property.c - Unified device property interface.
3  *
4  * Copyright (C) 2014, Intel Corporation
5  * Authors: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
6  *          Mika Westerberg <mika.westerberg@linux.intel.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12 
13 #include <linux/acpi.h>
14 #include <linux/export.h>
15 #include <linux/kernel.h>
16 #include <linux/of.h>
17 #include <linux/of_address.h>
18 #include <linux/property.h>
19 #include <linux/etherdevice.h>
20 #include <linux/phy.h>
21 
22 static inline bool is_pset_node(struct fwnode_handle *fwnode)
23 {
24 	return fwnode && fwnode->type == FWNODE_PDATA;
25 }
26 
27 static inline struct property_set *to_pset_node(struct fwnode_handle *fwnode)
28 {
29 	return is_pset_node(fwnode) ?
30 		container_of(fwnode, struct property_set, fwnode) : NULL;
31 }
32 
33 static struct property_entry *pset_prop_get(struct property_set *pset,
34 					    const char *name)
35 {
36 	struct property_entry *prop;
37 
38 	if (!pset || !pset->properties)
39 		return NULL;
40 
41 	for (prop = pset->properties; prop->name; prop++)
42 		if (!strcmp(name, prop->name))
43 			return prop;
44 
45 	return NULL;
46 }
47 
48 static void *pset_prop_find(struct property_set *pset, const char *propname,
49 			    size_t length)
50 {
51 	struct property_entry *prop;
52 	void *pointer;
53 
54 	prop = pset_prop_get(pset, propname);
55 	if (!prop)
56 		return ERR_PTR(-EINVAL);
57 	if (prop->is_array)
58 		pointer = prop->pointer.raw_data;
59 	else
60 		pointer = &prop->value.raw_data;
61 	if (!pointer)
62 		return ERR_PTR(-ENODATA);
63 	if (length > prop->length)
64 		return ERR_PTR(-EOVERFLOW);
65 	return pointer;
66 }
67 
68 static int pset_prop_read_u8_array(struct property_set *pset,
69 				   const char *propname,
70 				   u8 *values, size_t nval)
71 {
72 	void *pointer;
73 	size_t length = nval * sizeof(*values);
74 
75 	pointer = pset_prop_find(pset, propname, length);
76 	if (IS_ERR(pointer))
77 		return PTR_ERR(pointer);
78 
79 	memcpy(values, pointer, length);
80 	return 0;
81 }
82 
83 static int pset_prop_read_u16_array(struct property_set *pset,
84 				    const char *propname,
85 				    u16 *values, size_t nval)
86 {
87 	void *pointer;
88 	size_t length = nval * sizeof(*values);
89 
90 	pointer = pset_prop_find(pset, propname, length);
91 	if (IS_ERR(pointer))
92 		return PTR_ERR(pointer);
93 
94 	memcpy(values, pointer, length);
95 	return 0;
96 }
97 
98 static int pset_prop_read_u32_array(struct property_set *pset,
99 				    const char *propname,
100 				    u32 *values, size_t nval)
101 {
102 	void *pointer;
103 	size_t length = nval * sizeof(*values);
104 
105 	pointer = pset_prop_find(pset, propname, length);
106 	if (IS_ERR(pointer))
107 		return PTR_ERR(pointer);
108 
109 	memcpy(values, pointer, length);
110 	return 0;
111 }
112 
113 static int pset_prop_read_u64_array(struct property_set *pset,
114 				    const char *propname,
115 				    u64 *values, size_t nval)
116 {
117 	void *pointer;
118 	size_t length = nval * sizeof(*values);
119 
120 	pointer = pset_prop_find(pset, propname, length);
121 	if (IS_ERR(pointer))
122 		return PTR_ERR(pointer);
123 
124 	memcpy(values, pointer, length);
125 	return 0;
126 }
127 
128 static int pset_prop_count_elems_of_size(struct property_set *pset,
129 					 const char *propname, size_t length)
130 {
131 	struct property_entry *prop;
132 
133 	prop = pset_prop_get(pset, propname);
134 	if (!prop)
135 		return -EINVAL;
136 
137 	return prop->length / length;
138 }
139 
140 static int pset_prop_read_string_array(struct property_set *pset,
141 				       const char *propname,
142 				       const char **strings, size_t nval)
143 {
144 	void *pointer;
145 	size_t length = nval * sizeof(*strings);
146 
147 	pointer = pset_prop_find(pset, propname, length);
148 	if (IS_ERR(pointer))
149 		return PTR_ERR(pointer);
150 
151 	memcpy(strings, pointer, length);
152 	return 0;
153 }
154 
155 static int pset_prop_read_string(struct property_set *pset,
156 				 const char *propname, const char **strings)
157 {
158 	struct property_entry *prop;
159 	const char **pointer;
160 
161 	prop = pset_prop_get(pset, propname);
162 	if (!prop)
163 		return -EINVAL;
164 	if (!prop->is_string)
165 		return -EILSEQ;
166 	if (prop->is_array) {
167 		pointer = prop->pointer.str;
168 		if (!pointer)
169 			return -ENODATA;
170 	} else {
171 		pointer = &prop->value.str;
172 		if (*pointer && strnlen(*pointer, prop->length) >= prop->length)
173 			return -EILSEQ;
174 	}
175 
176 	*strings = *pointer;
177 	return 0;
178 }
179 
180 static inline struct fwnode_handle *dev_fwnode(struct device *dev)
181 {
182 	return IS_ENABLED(CONFIG_OF) && dev->of_node ?
183 		&dev->of_node->fwnode : dev->fwnode;
184 }
185 
186 /**
187  * device_property_present - check if a property of a device is present
188  * @dev: Device whose property is being checked
189  * @propname: Name of the property
190  *
191  * Check if property @propname is present in the device firmware description.
192  */
193 bool device_property_present(struct device *dev, const char *propname)
194 {
195 	return fwnode_property_present(dev_fwnode(dev), propname);
196 }
197 EXPORT_SYMBOL_GPL(device_property_present);
198 
199 static bool __fwnode_property_present(struct fwnode_handle *fwnode,
200 				      const char *propname)
201 {
202 	if (is_of_node(fwnode))
203 		return of_property_read_bool(to_of_node(fwnode), propname);
204 	else if (is_acpi_node(fwnode))
205 		return !acpi_node_prop_get(fwnode, propname, NULL);
206 	else if (is_pset_node(fwnode))
207 		return !!pset_prop_get(to_pset_node(fwnode), propname);
208 	return false;
209 }
210 
211 /**
212  * fwnode_property_present - check if a property of a firmware node is present
213  * @fwnode: Firmware node whose property to check
214  * @propname: Name of the property
215  */
216 bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
217 {
218 	bool ret;
219 
220 	ret = __fwnode_property_present(fwnode, propname);
221 	if (ret == false && !IS_ERR_OR_NULL(fwnode) &&
222 	    !IS_ERR_OR_NULL(fwnode->secondary))
223 		ret = __fwnode_property_present(fwnode->secondary, propname);
224 	return ret;
225 }
226 EXPORT_SYMBOL_GPL(fwnode_property_present);
227 
228 /**
229  * device_property_read_u8_array - return a u8 array property of a device
230  * @dev: Device to get the property of
231  * @propname: Name of the property
232  * @val: The values are stored here or %NULL to return the number of values
233  * @nval: Size of the @val array
234  *
235  * Function reads an array of u8 properties with @propname from the device
236  * firmware description and stores them to @val if found.
237  *
238  * Return: number of values if @val was %NULL,
239  *         %0 if the property was found (success),
240  *	   %-EINVAL if given arguments are not valid,
241  *	   %-ENODATA if the property does not have a value,
242  *	   %-EPROTO if the property is not an array of numbers,
243  *	   %-EOVERFLOW if the size of the property is not as expected.
244  *	   %-ENXIO if no suitable firmware interface is present.
245  */
246 int device_property_read_u8_array(struct device *dev, const char *propname,
247 				  u8 *val, size_t nval)
248 {
249 	return fwnode_property_read_u8_array(dev_fwnode(dev), propname, val, nval);
250 }
251 EXPORT_SYMBOL_GPL(device_property_read_u8_array);
252 
253 /**
254  * device_property_read_u16_array - return a u16 array property of a device
255  * @dev: Device to get the property of
256  * @propname: Name of the property
257  * @val: The values are stored here or %NULL to return the number of values
258  * @nval: Size of the @val array
259  *
260  * Function reads an array of u16 properties with @propname from the device
261  * firmware description and stores them to @val if found.
262  *
263  * Return: number of values if @val was %NULL,
264  *         %0 if the property was found (success),
265  *	   %-EINVAL if given arguments are not valid,
266  *	   %-ENODATA if the property does not have a value,
267  *	   %-EPROTO if the property is not an array of numbers,
268  *	   %-EOVERFLOW if the size of the property is not as expected.
269  *	   %-ENXIO if no suitable firmware interface is present.
270  */
271 int device_property_read_u16_array(struct device *dev, const char *propname,
272 				   u16 *val, size_t nval)
273 {
274 	return fwnode_property_read_u16_array(dev_fwnode(dev), propname, val, nval);
275 }
276 EXPORT_SYMBOL_GPL(device_property_read_u16_array);
277 
278 /**
279  * device_property_read_u32_array - return a u32 array property of a device
280  * @dev: Device to get the property of
281  * @propname: Name of the property
282  * @val: The values are stored here or %NULL to return the number of values
283  * @nval: Size of the @val array
284  *
285  * Function reads an array of u32 properties with @propname from the device
286  * firmware description and stores them to @val if found.
287  *
288  * Return: number of values if @val was %NULL,
289  *         %0 if the property was found (success),
290  *	   %-EINVAL if given arguments are not valid,
291  *	   %-ENODATA if the property does not have a value,
292  *	   %-EPROTO if the property is not an array of numbers,
293  *	   %-EOVERFLOW if the size of the property is not as expected.
294  *	   %-ENXIO if no suitable firmware interface is present.
295  */
296 int device_property_read_u32_array(struct device *dev, const char *propname,
297 				   u32 *val, size_t nval)
298 {
299 	return fwnode_property_read_u32_array(dev_fwnode(dev), propname, val, nval);
300 }
301 EXPORT_SYMBOL_GPL(device_property_read_u32_array);
302 
303 /**
304  * device_property_read_u64_array - return a u64 array property of a device
305  * @dev: Device to get the property of
306  * @propname: Name of the property
307  * @val: The values are stored here or %NULL to return the number of values
308  * @nval: Size of the @val array
309  *
310  * Function reads an array of u64 properties with @propname from the device
311  * firmware description and stores them to @val if found.
312  *
313  * Return: number of values if @val was %NULL,
314  *         %0 if the property was found (success),
315  *	   %-EINVAL if given arguments are not valid,
316  *	   %-ENODATA if the property does not have a value,
317  *	   %-EPROTO if the property is not an array of numbers,
318  *	   %-EOVERFLOW if the size of the property is not as expected.
319  *	   %-ENXIO if no suitable firmware interface is present.
320  */
321 int device_property_read_u64_array(struct device *dev, const char *propname,
322 				   u64 *val, size_t nval)
323 {
324 	return fwnode_property_read_u64_array(dev_fwnode(dev), propname, val, nval);
325 }
326 EXPORT_SYMBOL_GPL(device_property_read_u64_array);
327 
328 /**
329  * device_property_read_string_array - return a string array property of device
330  * @dev: Device to get the property of
331  * @propname: Name of the property
332  * @val: The values are stored here or %NULL to return the number of values
333  * @nval: Size of the @val array
334  *
335  * Function reads an array of string properties with @propname from the device
336  * firmware description and stores them to @val if found.
337  *
338  * Return: number of values if @val was %NULL,
339  *         %0 if the property was found (success),
340  *	   %-EINVAL if given arguments are not valid,
341  *	   %-ENODATA if the property does not have a value,
342  *	   %-EPROTO or %-EILSEQ if the property is not an array of strings,
343  *	   %-EOVERFLOW if the size of the property is not as expected.
344  *	   %-ENXIO if no suitable firmware interface is present.
345  */
346 int device_property_read_string_array(struct device *dev, const char *propname,
347 				      const char **val, size_t nval)
348 {
349 	return fwnode_property_read_string_array(dev_fwnode(dev), propname, val, nval);
350 }
351 EXPORT_SYMBOL_GPL(device_property_read_string_array);
352 
353 /**
354  * device_property_read_string - return a string property of a device
355  * @dev: Device to get the property of
356  * @propname: Name of the property
357  * @val: The value is stored here
358  *
359  * Function reads property @propname from the device firmware description and
360  * stores the value into @val if found. The value is checked to be a string.
361  *
362  * Return: %0 if the property was found (success),
363  *	   %-EINVAL if given arguments are not valid,
364  *	   %-ENODATA if the property does not have a value,
365  *	   %-EPROTO or %-EILSEQ if the property type is not a string.
366  *	   %-ENXIO if no suitable firmware interface is present.
367  */
368 int device_property_read_string(struct device *dev, const char *propname,
369 				const char **val)
370 {
371 	return fwnode_property_read_string(dev_fwnode(dev), propname, val);
372 }
373 EXPORT_SYMBOL_GPL(device_property_read_string);
374 
375 /**
376  * device_property_match_string - find a string in an array and return index
377  * @dev: Device to get the property of
378  * @propname: Name of the property holding the array
379  * @string: String to look for
380  *
381  * Find a given string in a string array and if it is found return the
382  * index back.
383  *
384  * Return: %0 if the property was found (success),
385  *	   %-EINVAL if given arguments are not valid,
386  *	   %-ENODATA if the property does not have a value,
387  *	   %-EPROTO if the property is not an array of strings,
388  *	   %-ENXIO if no suitable firmware interface is present.
389  */
390 int device_property_match_string(struct device *dev, const char *propname,
391 				 const char *string)
392 {
393 	return fwnode_property_match_string(dev_fwnode(dev), propname, string);
394 }
395 EXPORT_SYMBOL_GPL(device_property_match_string);
396 
397 #define OF_DEV_PROP_READ_ARRAY(node, propname, type, val, nval)				\
398 	(val) ? of_property_read_##type##_array((node), (propname), (val), (nval))	\
399 	      : of_property_count_elems_of_size((node), (propname), sizeof(type))
400 
401 #define PSET_PROP_READ_ARRAY(node, propname, type, val, nval)				\
402 	(val) ? pset_prop_read_##type##_array((node), (propname), (val), (nval))	\
403 	      : pset_prop_count_elems_of_size((node), (propname), sizeof(type))
404 
405 #define FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_, _val_, _nval_)	\
406 ({											\
407 	int _ret_;									\
408 	if (is_of_node(_fwnode_))							\
409 		_ret_ = OF_DEV_PROP_READ_ARRAY(to_of_node(_fwnode_), _propname_,	\
410 					       _type_, _val_, _nval_);			\
411 	else if (is_acpi_node(_fwnode_))						\
412 		_ret_ = acpi_node_prop_read(_fwnode_, _propname_, _proptype_,		\
413 					    _val_, _nval_);				\
414 	else if (is_pset_node(_fwnode_)) 						\
415 		_ret_ = PSET_PROP_READ_ARRAY(to_pset_node(_fwnode_), _propname_,	\
416 					     _type_, _val_, _nval_);			\
417 	else										\
418 		_ret_ = -ENXIO;								\
419 	_ret_;										\
420 })
421 
422 #define FWNODE_PROP_READ_ARRAY(_fwnode_, _propname_, _type_, _proptype_, _val_, _nval_)	\
423 ({											\
424 	int _ret_;									\
425 	_ret_ = FWNODE_PROP_READ(_fwnode_, _propname_, _type_, _proptype_,		\
426 				 _val_, _nval_);					\
427 	if (_ret_ == -EINVAL && !IS_ERR_OR_NULL(_fwnode_) &&				\
428 	    !IS_ERR_OR_NULL(_fwnode_->secondary))					\
429 		_ret_ = FWNODE_PROP_READ(_fwnode_->secondary, _propname_, _type_,	\
430 				_proptype_, _val_, _nval_);				\
431 	_ret_;										\
432 })
433 
434 /**
435  * fwnode_property_read_u8_array - return a u8 array property of firmware node
436  * @fwnode: Firmware node to get the property of
437  * @propname: Name of the property
438  * @val: The values are stored here or %NULL to return the number of values
439  * @nval: Size of the @val array
440  *
441  * Read an array of u8 properties with @propname from @fwnode and stores them to
442  * @val if found.
443  *
444  * Return: number of values if @val was %NULL,
445  *         %0 if the property was found (success),
446  *	   %-EINVAL if given arguments are not valid,
447  *	   %-ENODATA if the property does not have a value,
448  *	   %-EPROTO if the property is not an array of numbers,
449  *	   %-EOVERFLOW if the size of the property is not as expected,
450  *	   %-ENXIO if no suitable firmware interface is present.
451  */
452 int fwnode_property_read_u8_array(struct fwnode_handle *fwnode,
453 				  const char *propname, u8 *val, size_t nval)
454 {
455 	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u8, DEV_PROP_U8,
456 				      val, nval);
457 }
458 EXPORT_SYMBOL_GPL(fwnode_property_read_u8_array);
459 
460 /**
461  * fwnode_property_read_u16_array - return a u16 array property of firmware node
462  * @fwnode: Firmware node to get the property of
463  * @propname: Name of the property
464  * @val: The values are stored here or %NULL to return the number of values
465  * @nval: Size of the @val array
466  *
467  * Read an array of u16 properties with @propname from @fwnode and store them to
468  * @val if found.
469  *
470  * Return: number of values if @val was %NULL,
471  *         %0 if the property was found (success),
472  *	   %-EINVAL if given arguments are not valid,
473  *	   %-ENODATA if the property does not have a value,
474  *	   %-EPROTO if the property is not an array of numbers,
475  *	   %-EOVERFLOW if the size of the property is not as expected,
476  *	   %-ENXIO if no suitable firmware interface is present.
477  */
478 int fwnode_property_read_u16_array(struct fwnode_handle *fwnode,
479 				   const char *propname, u16 *val, size_t nval)
480 {
481 	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u16, DEV_PROP_U16,
482 				      val, nval);
483 }
484 EXPORT_SYMBOL_GPL(fwnode_property_read_u16_array);
485 
486 /**
487  * fwnode_property_read_u32_array - return a u32 array property of firmware node
488  * @fwnode: Firmware node to get the property of
489  * @propname: Name of the property
490  * @val: The values are stored here or %NULL to return the number of values
491  * @nval: Size of the @val array
492  *
493  * Read an array of u32 properties with @propname from @fwnode store them to
494  * @val if found.
495  *
496  * Return: number of values if @val was %NULL,
497  *         %0 if the property was found (success),
498  *	   %-EINVAL if given arguments are not valid,
499  *	   %-ENODATA if the property does not have a value,
500  *	   %-EPROTO if the property is not an array of numbers,
501  *	   %-EOVERFLOW if the size of the property is not as expected,
502  *	   %-ENXIO if no suitable firmware interface is present.
503  */
504 int fwnode_property_read_u32_array(struct fwnode_handle *fwnode,
505 				   const char *propname, u32 *val, size_t nval)
506 {
507 	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u32, DEV_PROP_U32,
508 				      val, nval);
509 }
510 EXPORT_SYMBOL_GPL(fwnode_property_read_u32_array);
511 
512 /**
513  * fwnode_property_read_u64_array - return a u64 array property firmware node
514  * @fwnode: Firmware node to get the property of
515  * @propname: Name of the property
516  * @val: The values are stored here or %NULL to return the number of values
517  * @nval: Size of the @val array
518  *
519  * Read an array of u64 properties with @propname from @fwnode and store them to
520  * @val if found.
521  *
522  * Return: number of values if @val was %NULL,
523  *         %0 if the property was found (success),
524  *	   %-EINVAL if given arguments are not valid,
525  *	   %-ENODATA if the property does not have a value,
526  *	   %-EPROTO if the property is not an array of numbers,
527  *	   %-EOVERFLOW if the size of the property is not as expected,
528  *	   %-ENXIO if no suitable firmware interface is present.
529  */
530 int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
531 				   const char *propname, u64 *val, size_t nval)
532 {
533 	return FWNODE_PROP_READ_ARRAY(fwnode, propname, u64, DEV_PROP_U64,
534 				      val, nval);
535 }
536 EXPORT_SYMBOL_GPL(fwnode_property_read_u64_array);
537 
538 static int __fwnode_property_read_string_array(struct fwnode_handle *fwnode,
539 					       const char *propname,
540 					       const char **val, size_t nval)
541 {
542 	if (is_of_node(fwnode))
543 		return val ?
544 			of_property_read_string_array(to_of_node(fwnode),
545 						      propname, val, nval) :
546 			of_property_count_strings(to_of_node(fwnode), propname);
547 	else if (is_acpi_node(fwnode))
548 		return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
549 					   val, nval);
550 	else if (is_pset_node(fwnode))
551 		return val ?
552 			pset_prop_read_string_array(to_pset_node(fwnode),
553 						    propname, val, nval) :
554 			pset_prop_count_elems_of_size(to_pset_node(fwnode),
555 						      propname,
556 						      sizeof(const char *));
557 	return -ENXIO;
558 }
559 
560 static int __fwnode_property_read_string(struct fwnode_handle *fwnode,
561 					 const char *propname, const char **val)
562 {
563 	if (is_of_node(fwnode))
564 		return of_property_read_string(to_of_node(fwnode), propname, val);
565 	else if (is_acpi_node(fwnode))
566 		return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
567 					   val, 1);
568 	else if (is_pset_node(fwnode))
569 		return pset_prop_read_string(to_pset_node(fwnode), propname, val);
570 	return -ENXIO;
571 }
572 
573 /**
574  * fwnode_property_read_string_array - return string array property of a node
575  * @fwnode: Firmware node to get the property of
576  * @propname: Name of the property
577  * @val: The values are stored here or %NULL to return the number of values
578  * @nval: Size of the @val array
579  *
580  * Read an string list property @propname from the given firmware node and store
581  * them to @val if found.
582  *
583  * Return: number of values if @val was %NULL,
584  *         %0 if the property was found (success),
585  *	   %-EINVAL if given arguments are not valid,
586  *	   %-ENODATA if the property does not have a value,
587  *	   %-EPROTO if the property is not an array of strings,
588  *	   %-EOVERFLOW if the size of the property is not as expected,
589  *	   %-ENXIO if no suitable firmware interface is present.
590  */
591 int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
592 				      const char *propname, const char **val,
593 				      size_t nval)
594 {
595 	int ret;
596 
597 	ret = __fwnode_property_read_string_array(fwnode, propname, val, nval);
598 	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
599 	    !IS_ERR_OR_NULL(fwnode->secondary))
600 		ret = __fwnode_property_read_string_array(fwnode->secondary,
601 							  propname, val, nval);
602 	return ret;
603 }
604 EXPORT_SYMBOL_GPL(fwnode_property_read_string_array);
605 
606 /**
607  * fwnode_property_read_string - return a string property of a firmware node
608  * @fwnode: Firmware node to get the property of
609  * @propname: Name of the property
610  * @val: The value is stored here
611  *
612  * Read property @propname from the given firmware node and store the value into
613  * @val if found.  The value is checked to be a string.
614  *
615  * Return: %0 if the property was found (success),
616  *	   %-EINVAL if given arguments are not valid,
617  *	   %-ENODATA if the property does not have a value,
618  *	   %-EPROTO or %-EILSEQ if the property is not a string,
619  *	   %-ENXIO if no suitable firmware interface is present.
620  */
621 int fwnode_property_read_string(struct fwnode_handle *fwnode,
622 				const char *propname, const char **val)
623 {
624 	int ret;
625 
626 	ret = __fwnode_property_read_string(fwnode, propname, val);
627 	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
628 	    !IS_ERR_OR_NULL(fwnode->secondary))
629 		ret = __fwnode_property_read_string(fwnode->secondary,
630 						    propname, val);
631 	return ret;
632 }
633 EXPORT_SYMBOL_GPL(fwnode_property_read_string);
634 
635 /**
636  * fwnode_property_match_string - find a string in an array and return index
637  * @fwnode: Firmware node to get the property of
638  * @propname: Name of the property holding the array
639  * @string: String to look for
640  *
641  * Find a given string in a string array and if it is found return the
642  * index back.
643  *
644  * Return: %0 if the property was found (success),
645  *	   %-EINVAL if given arguments are not valid,
646  *	   %-ENODATA if the property does not have a value,
647  *	   %-EPROTO if the property is not an array of strings,
648  *	   %-ENXIO if no suitable firmware interface is present.
649  */
650 int fwnode_property_match_string(struct fwnode_handle *fwnode,
651 	const char *propname, const char *string)
652 {
653 	const char **values;
654 	int nval, ret, i;
655 
656 	nval = fwnode_property_read_string_array(fwnode, propname, NULL, 0);
657 	if (nval < 0)
658 		return nval;
659 
660 	if (nval == 0)
661 		return -ENODATA;
662 
663 	values = kcalloc(nval, sizeof(*values), GFP_KERNEL);
664 	if (!values)
665 		return -ENOMEM;
666 
667 	ret = fwnode_property_read_string_array(fwnode, propname, values, nval);
668 	if (ret < 0)
669 		goto out;
670 
671 	ret = -ENODATA;
672 	for (i = 0; i < nval; i++) {
673 		if (!strcmp(values[i], string)) {
674 			ret = i;
675 			break;
676 		}
677 	}
678 out:
679 	kfree(values);
680 	return ret;
681 }
682 EXPORT_SYMBOL_GPL(fwnode_property_match_string);
683 
684 /**
685  * pset_free_set - releases memory allocated for copied property set
686  * @pset: Property set to release
687  *
688  * Function takes previously copied property set and releases all the
689  * memory allocated to it.
690  */
691 static void pset_free_set(struct property_set *pset)
692 {
693 	const struct property_entry *prop;
694 	size_t i, nval;
695 
696 	if (!pset)
697 		return;
698 
699 	for (prop = pset->properties; prop->name; prop++) {
700 		if (prop->is_array) {
701 			if (prop->is_string && prop->pointer.str) {
702 				nval = prop->length / sizeof(const char *);
703 				for (i = 0; i < nval; i++)
704 					kfree(prop->pointer.str[i]);
705 			}
706 			kfree(prop->pointer.raw_data);
707 		} else if (prop->is_string) {
708 			kfree(prop->value.str);
709 		}
710 		kfree(prop->name);
711 	}
712 
713 	kfree(pset->properties);
714 	kfree(pset);
715 }
716 
717 static int pset_copy_entry(struct property_entry *dst,
718 			   const struct property_entry *src)
719 {
720 	const char **d, **s;
721 	size_t i, nval;
722 
723 	dst->name = kstrdup(src->name, GFP_KERNEL);
724 	if (!dst->name)
725 		return -ENOMEM;
726 
727 	if (src->is_array) {
728 		if (!src->length)
729 			return -ENODATA;
730 
731 		if (src->is_string) {
732 			nval = src->length / sizeof(const char *);
733 			dst->pointer.str = kcalloc(nval, sizeof(const char *),
734 						   GFP_KERNEL);
735 			if (!dst->pointer.str)
736 				return -ENOMEM;
737 
738 			d = dst->pointer.str;
739 			s = src->pointer.str;
740 			for (i = 0; i < nval; i++) {
741 				d[i] = kstrdup(s[i], GFP_KERNEL);
742 				if (!d[i] && s[i])
743 					return -ENOMEM;
744 			}
745 		} else {
746 			dst->pointer.raw_data = kmemdup(src->pointer.raw_data,
747 							src->length, GFP_KERNEL);
748 			if (!dst->pointer.raw_data)
749 				return -ENOMEM;
750 		}
751 	} else if (src->is_string) {
752 		dst->value.str = kstrdup(src->value.str, GFP_KERNEL);
753 		if (!dst->value.str && src->value.str)
754 			return -ENOMEM;
755 	} else {
756 		dst->value.raw_data = src->value.raw_data;
757 	}
758 
759 	dst->length = src->length;
760 	dst->is_array = src->is_array;
761 	dst->is_string = src->is_string;
762 
763 	return 0;
764 }
765 
766 /**
767  * pset_copy_set - copies property set
768  * @pset: Property set to copy
769  *
770  * This function takes a deep copy of the given property set and returns
771  * pointer to the copy. Call device_free_property_set() to free resources
772  * allocated in this function.
773  *
774  * Return: Pointer to the new property set or error pointer.
775  */
776 static struct property_set *pset_copy_set(const struct property_set *pset)
777 {
778 	const struct property_entry *entry;
779 	struct property_set *p;
780 	size_t i, n = 0;
781 
782 	p = kzalloc(sizeof(*p), GFP_KERNEL);
783 	if (!p)
784 		return ERR_PTR(-ENOMEM);
785 
786 	while (pset->properties[n].name)
787 		n++;
788 
789 	p->properties = kcalloc(n + 1, sizeof(*entry), GFP_KERNEL);
790 	if (!p->properties) {
791 		kfree(p);
792 		return ERR_PTR(-ENOMEM);
793 	}
794 
795 	for (i = 0; i < n; i++) {
796 		int ret = pset_copy_entry(&p->properties[i],
797 					  &pset->properties[i]);
798 		if (ret) {
799 			pset_free_set(p);
800 			return ERR_PTR(ret);
801 		}
802 	}
803 
804 	return p;
805 }
806 
807 /**
808  * device_remove_property_set - Remove properties from a device object.
809  * @dev: Device whose properties to remove.
810  *
811  * The function removes properties previously associated to the device
812  * secondary firmware node with device_add_property_set(). Memory allocated
813  * to the properties will also be released.
814  */
815 void device_remove_property_set(struct device *dev)
816 {
817 	struct fwnode_handle *fwnode;
818 
819 	fwnode = dev_fwnode(dev);
820 	if (!fwnode)
821 		return;
822 	/*
823 	 * Pick either primary or secondary node depending which one holds
824 	 * the pset. If there is no real firmware node (ACPI/DT) primary
825 	 * will hold the pset.
826 	 */
827 	if (is_pset_node(fwnode)) {
828 		set_primary_fwnode(dev, NULL);
829 		pset_free_set(to_pset_node(fwnode));
830 	} else {
831 		fwnode = fwnode->secondary;
832 		if (!IS_ERR(fwnode) && is_pset_node(fwnode)) {
833 			set_secondary_fwnode(dev, NULL);
834 			pset_free_set(to_pset_node(fwnode));
835 		}
836 	}
837 }
838 EXPORT_SYMBOL_GPL(device_remove_property_set);
839 
840 /**
841  * device_add_property_set - Add a collection of properties to a device object.
842  * @dev: Device to add properties to.
843  * @pset: Collection of properties to add.
844  *
845  * Associate a collection of device properties represented by @pset with @dev
846  * as its secondary firmware node. The function takes a copy of @pset.
847  */
848 int device_add_property_set(struct device *dev, const struct property_set *pset)
849 {
850 	struct property_set *p;
851 
852 	if (!pset)
853 		return -EINVAL;
854 
855 	p = pset_copy_set(pset);
856 	if (IS_ERR(p))
857 		return PTR_ERR(p);
858 
859 	p->fwnode.type = FWNODE_PDATA;
860 	set_secondary_fwnode(dev, &p->fwnode);
861 	return 0;
862 }
863 EXPORT_SYMBOL_GPL(device_add_property_set);
864 
865 /**
866  * device_get_next_child_node - Return the next child node handle for a device
867  * @dev: Device to find the next child node for.
868  * @child: Handle to one of the device's child nodes or a null handle.
869  */
870 struct fwnode_handle *device_get_next_child_node(struct device *dev,
871 						 struct fwnode_handle *child)
872 {
873 	if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
874 		struct device_node *node;
875 
876 		node = of_get_next_available_child(dev->of_node, to_of_node(child));
877 		if (node)
878 			return &node->fwnode;
879 	} else if (IS_ENABLED(CONFIG_ACPI)) {
880 		return acpi_get_next_subnode(dev, child);
881 	}
882 	return NULL;
883 }
884 EXPORT_SYMBOL_GPL(device_get_next_child_node);
885 
886 /**
887  * fwnode_handle_put - Drop reference to a device node
888  * @fwnode: Pointer to the device node to drop the reference to.
889  *
890  * This has to be used when terminating device_for_each_child_node() iteration
891  * with break or return to prevent stale device node references from being left
892  * behind.
893  */
894 void fwnode_handle_put(struct fwnode_handle *fwnode)
895 {
896 	if (is_of_node(fwnode))
897 		of_node_put(to_of_node(fwnode));
898 }
899 EXPORT_SYMBOL_GPL(fwnode_handle_put);
900 
901 /**
902  * device_get_child_node_count - return the number of child nodes for device
903  * @dev: Device to cound the child nodes for
904  */
905 unsigned int device_get_child_node_count(struct device *dev)
906 {
907 	struct fwnode_handle *child;
908 	unsigned int count = 0;
909 
910 	device_for_each_child_node(dev, child)
911 		count++;
912 
913 	return count;
914 }
915 EXPORT_SYMBOL_GPL(device_get_child_node_count);
916 
917 bool device_dma_supported(struct device *dev)
918 {
919 	/* For DT, this is always supported.
920 	 * For ACPI, this depends on CCA, which
921 	 * is determined by the acpi_dma_supported().
922 	 */
923 	if (IS_ENABLED(CONFIG_OF) && dev->of_node)
924 		return true;
925 
926 	return acpi_dma_supported(ACPI_COMPANION(dev));
927 }
928 EXPORT_SYMBOL_GPL(device_dma_supported);
929 
930 enum dev_dma_attr device_get_dma_attr(struct device *dev)
931 {
932 	enum dev_dma_attr attr = DEV_DMA_NOT_SUPPORTED;
933 
934 	if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
935 		if (of_dma_is_coherent(dev->of_node))
936 			attr = DEV_DMA_COHERENT;
937 		else
938 			attr = DEV_DMA_NON_COHERENT;
939 	} else
940 		attr = acpi_get_dma_attr(ACPI_COMPANION(dev));
941 
942 	return attr;
943 }
944 EXPORT_SYMBOL_GPL(device_get_dma_attr);
945 
946 /**
947  * device_get_phy_mode - Get phy mode for given device
948  * @dev:	Pointer to the given device
949  *
950  * The function gets phy interface string from property 'phy-mode' or
951  * 'phy-connection-type', and return its index in phy_modes table, or errno in
952  * error case.
953  */
954 int device_get_phy_mode(struct device *dev)
955 {
956 	const char *pm;
957 	int err, i;
958 
959 	err = device_property_read_string(dev, "phy-mode", &pm);
960 	if (err < 0)
961 		err = device_property_read_string(dev,
962 						  "phy-connection-type", &pm);
963 	if (err < 0)
964 		return err;
965 
966 	for (i = 0; i < PHY_INTERFACE_MODE_MAX; i++)
967 		if (!strcasecmp(pm, phy_modes(i)))
968 			return i;
969 
970 	return -ENODEV;
971 }
972 EXPORT_SYMBOL_GPL(device_get_phy_mode);
973 
974 static void *device_get_mac_addr(struct device *dev,
975 				 const char *name, char *addr,
976 				 int alen)
977 {
978 	int ret = device_property_read_u8_array(dev, name, addr, alen);
979 
980 	if (ret == 0 && alen == ETH_ALEN && is_valid_ether_addr(addr))
981 		return addr;
982 	return NULL;
983 }
984 
985 /**
986  * device_get_mac_address - Get the MAC for a given device
987  * @dev:	Pointer to the device
988  * @addr:	Address of buffer to store the MAC in
989  * @alen:	Length of the buffer pointed to by addr, should be ETH_ALEN
990  *
991  * Search the firmware node for the best MAC address to use.  'mac-address' is
992  * checked first, because that is supposed to contain to "most recent" MAC
993  * address. If that isn't set, then 'local-mac-address' is checked next,
994  * because that is the default address.  If that isn't set, then the obsolete
995  * 'address' is checked, just in case we're using an old device tree.
996  *
997  * Note that the 'address' property is supposed to contain a virtual address of
998  * the register set, but some DTS files have redefined that property to be the
999  * MAC address.
1000  *
1001  * All-zero MAC addresses are rejected, because those could be properties that
1002  * exist in the firmware tables, but were not updated by the firmware.  For
1003  * example, the DTS could define 'mac-address' and 'local-mac-address', with
1004  * zero MAC addresses.  Some older U-Boots only initialized 'local-mac-address'.
1005  * In this case, the real MAC is in 'local-mac-address', and 'mac-address'
1006  * exists but is all zeros.
1007 */
1008 void *device_get_mac_address(struct device *dev, char *addr, int alen)
1009 {
1010 	char *res;
1011 
1012 	res = device_get_mac_addr(dev, "mac-address", addr, alen);
1013 	if (res)
1014 		return res;
1015 
1016 	res = device_get_mac_addr(dev, "local-mac-address", addr, alen);
1017 	if (res)
1018 		return res;
1019 
1020 	return device_get_mac_addr(dev, "address", addr, alen);
1021 }
1022 EXPORT_SYMBOL(device_get_mac_address);
1023