Subversion Repositories Kolibri OS

Rev

Rev 6936 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * property.h - 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. #ifndef _LINUX_PROPERTY_H_
  14. #define _LINUX_PROPERTY_H_
  15.  
  16. #include <linux/fwnode.h>
  17. #include <linux/types.h>
  18.  
  19. struct device;
  20.  
  21. enum dev_prop_type {
  22.         DEV_PROP_U8,
  23.         DEV_PROP_U16,
  24.         DEV_PROP_U32,
  25.         DEV_PROP_U64,
  26.         DEV_PROP_STRING,
  27.         DEV_PROP_MAX,
  28. };
  29.  
  30. enum dev_dma_attr {
  31.         DEV_DMA_NOT_SUPPORTED,
  32.         DEV_DMA_NON_COHERENT,
  33.         DEV_DMA_COHERENT,
  34. };
  35.  
  36. bool device_property_present(struct device *dev, const char *propname);
  37. int device_property_read_u8_array(struct device *dev, const char *propname,
  38.                                   u8 *val, size_t nval);
  39. int device_property_read_u16_array(struct device *dev, const char *propname,
  40.                                    u16 *val, size_t nval);
  41. int device_property_read_u32_array(struct device *dev, const char *propname,
  42.                                    u32 *val, size_t nval);
  43. int device_property_read_u64_array(struct device *dev, const char *propname,
  44.                                    u64 *val, size_t nval);
  45. int device_property_read_string_array(struct device *dev, const char *propname,
  46.                                       const char **val, size_t nval);
  47. int device_property_read_string(struct device *dev, const char *propname,
  48.                                 const char **val);
  49. int device_property_match_string(struct device *dev,
  50.                                  const char *propname, const char *string);
  51.  
  52. bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname);
  53. int fwnode_property_read_u8_array(struct fwnode_handle *fwnode,
  54.                                   const char *propname, u8 *val,
  55.                                   size_t nval);
  56. int fwnode_property_read_u16_array(struct fwnode_handle *fwnode,
  57.                                    const char *propname, u16 *val,
  58.                                    size_t nval);
  59. int fwnode_property_read_u32_array(struct fwnode_handle *fwnode,
  60.                                    const char *propname, u32 *val,
  61.                                    size_t nval);
  62. int fwnode_property_read_u64_array(struct fwnode_handle *fwnode,
  63.                                    const char *propname, u64 *val,
  64.                                    size_t nval);
  65. int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
  66.                                       const char *propname, const char **val,
  67.                                       size_t nval);
  68. int fwnode_property_read_string(struct fwnode_handle *fwnode,
  69.                                 const char *propname, const char **val);
  70. int fwnode_property_match_string(struct fwnode_handle *fwnode,
  71.                                  const char *propname, const char *string);
  72.  
  73. struct fwnode_handle *device_get_next_child_node(struct device *dev,
  74.                                                  struct fwnode_handle *child);
  75.  
  76. #define device_for_each_child_node(dev, child) \
  77.         for (child = device_get_next_child_node(dev, NULL); child; \
  78.              child = device_get_next_child_node(dev, child))
  79.  
  80. void fwnode_handle_put(struct fwnode_handle *fwnode);
  81.  
  82. unsigned int device_get_child_node_count(struct device *dev);
  83.  
  84. static inline bool device_property_read_bool(struct device *dev,
  85.                                              const char *propname)
  86. {
  87.         return device_property_present(dev, propname);
  88. }
  89.  
  90. static inline int device_property_read_u8(struct device *dev,
  91.                                           const char *propname, u8 *val)
  92. {
  93.         return device_property_read_u8_array(dev, propname, val, 1);
  94. }
  95.  
  96. static inline int device_property_read_u16(struct device *dev,
  97.                                            const char *propname, u16 *val)
  98. {
  99.         return device_property_read_u16_array(dev, propname, val, 1);
  100. }
  101.  
  102. static inline int device_property_read_u32(struct device *dev,
  103.                                            const char *propname, u32 *val)
  104. {
  105.         return device_property_read_u32_array(dev, propname, val, 1);
  106. }
  107.  
  108. static inline int device_property_read_u64(struct device *dev,
  109.                                            const char *propname, u64 *val)
  110. {
  111.         return device_property_read_u64_array(dev, propname, val, 1);
  112. }
  113.  
  114. static inline bool fwnode_property_read_bool(struct fwnode_handle *fwnode,
  115.                                              const char *propname)
  116. {
  117.         return fwnode_property_present(fwnode, propname);
  118. }
  119.  
  120. static inline int fwnode_property_read_u8(struct fwnode_handle *fwnode,
  121.                                           const char *propname, u8 *val)
  122. {
  123.         return fwnode_property_read_u8_array(fwnode, propname, val, 1);
  124. }
  125.  
  126. static inline int fwnode_property_read_u16(struct fwnode_handle *fwnode,
  127.                                            const char *propname, u16 *val)
  128. {
  129.         return fwnode_property_read_u16_array(fwnode, propname, val, 1);
  130. }
  131.  
  132. static inline int fwnode_property_read_u32(struct fwnode_handle *fwnode,
  133.                                            const char *propname, u32 *val)
  134. {
  135.         return fwnode_property_read_u32_array(fwnode, propname, val, 1);
  136. }
  137.  
  138. static inline int fwnode_property_read_u64(struct fwnode_handle *fwnode,
  139.                                            const char *propname, u64 *val)
  140. {
  141.         return fwnode_property_read_u64_array(fwnode, propname, val, 1);
  142. }
  143.  
  144. /**
  145.  * struct property_entry - "Built-in" device property representation.
  146.  * @name: Name of the property.
  147.  * @type: Type of the property.
  148.  * @nval: Number of items of type @type making up the value.
  149.  * @value: Value of the property (an array of @nval items of type @type).
  150.  */
  151. struct property_entry {
  152.         const char *name;
  153.         enum dev_prop_type type;
  154.         size_t nval;
  155.         union {
  156.                 void *raw_data;
  157.                 u8 *u8_data;
  158.                 u16 *u16_data;
  159.                 u32 *u32_data;
  160.                 u64 *u64_data;
  161.                 const char **str;
  162.         } value;
  163. };
  164.  
  165. /**
  166.  * struct property_set - Collection of "built-in" device properties.
  167.  * @fwnode: Handle to be pointed to by the fwnode field of struct device.
  168.  * @properties: Array of properties terminated with a null entry.
  169.  */
  170. struct property_set {
  171.         struct fwnode_handle fwnode;
  172.         struct property_entry *properties;
  173. };
  174.  
  175. void device_add_property_set(struct device *dev, struct property_set *pset);
  176.  
  177. bool device_dma_supported(struct device *dev);
  178.  
  179. enum dev_dma_attr device_get_dma_attr(struct device *dev);
  180.  
  181. int device_get_phy_mode(struct device *dev);
  182.  
  183. void *device_get_mac_address(struct device *dev, char *addr, int alen);
  184.  
  185. #endif /* _LINUX_PROPERTY_H_ */
  186.