Bladeren bron

[dm][core] add new API for DM

1. rt_dm_dev_is_big_endian
2. rt_dm_dev_get_prop_fuzzy_name

Signed-off-by: GuEe-GUI <2991707448@qq.com>
GuEe-GUI 2 maanden geleden
bovenliggende
commit
056ae364cb
2 gewijzigde bestanden met toevoegingen van 35 en 0 verwijderingen
  1. 31 0
      components/drivers/core/dm.c
  2. 4 0
      components/drivers/include/drivers/core/dm.h

+ 31 - 0
components/drivers/core/dm.c

@@ -306,6 +306,23 @@ const char *rt_dm_dev_get_name(rt_device_t dev)
 #define ofw_api_call_ptr(name, ...) RT_NULL
 #define ofw_api_call_ptr(name, ...) RT_NULL
 #endif
 #endif
 
 
+rt_bool_t rt_dm_dev_is_big_endian(rt_device_t dev)
+{
+    if (rt_dm_dev_prop_read_bool(dev, "big-endian"))
+    {
+        return RT_TRUE;
+    }
+
+#ifdef ARCH_CPU_BIG_ENDIAN
+    if (rt_dm_dev_prop_read_bool(dev, "native-endian"))
+    {
+        return RT_TRUE;
+    }
+#endif /* ARCH_CPU_BIG_ENDIAN */
+
+    return RT_FALSE;
+}
+
 int rt_dm_dev_get_address_count(rt_device_t dev)
 int rt_dm_dev_get_address_count(rt_device_t dev)
 {
 {
     RT_ASSERT(dev != RT_NULL);
     RT_ASSERT(dev != RT_NULL);
@@ -480,6 +497,20 @@ void rt_dm_dev_unbind_fwdata(rt_device_t dev, void *fw_np)
 #endif
 #endif
 }
 }
 
 
+const char *rt_dm_dev_get_prop_fuzzy_name(rt_device_t dev, const char *name)
+{
+    RT_ASSERT(dev != RT_NULL);
+
+#ifdef RT_USING_OFW
+    if (dev->ofw_node)
+    {
+        return ofw_api_call_ptr(get_prop_fuzzy_name, dev->ofw_node, name);
+    }
+#endif
+
+    return RT_NULL;
+}
+
 int rt_dm_dev_prop_read_u8_array_index(rt_device_t dev, const char *propname,
 int rt_dm_dev_prop_read_u8_array_index(rt_device_t dev, const char *propname,
         int index, int nr, rt_uint8_t *out_values)
         int index, int nr, rt_uint8_t *out_values)
 {
 {

+ 4 - 0
components/drivers/include/drivers/core/dm.h

@@ -70,6 +70,8 @@ int rt_dm_dev_get_name_id(rt_device_t dev);
 int rt_dm_dev_set_name(rt_device_t dev, const char *format, ...);
 int rt_dm_dev_set_name(rt_device_t dev, const char *format, ...);
 const char *rt_dm_dev_get_name(rt_device_t dev);
 const char *rt_dm_dev_get_name(rt_device_t dev);
 
 
+rt_bool_t rt_dm_dev_is_big_endian(rt_device_t dev);
+
 int rt_dm_dev_get_address_count(rt_device_t dev);
 int rt_dm_dev_get_address_count(rt_device_t dev);
 rt_err_t rt_dm_dev_get_address(rt_device_t dev, int index,
 rt_err_t rt_dm_dev_get_address(rt_device_t dev, int index,
         rt_uint64_t *out_address, rt_uint64_t *out_size);
         rt_uint64_t *out_address, rt_uint64_t *out_size);
@@ -87,6 +89,8 @@ int rt_dm_dev_get_irq_by_name(rt_device_t dev, const char *name);
 void rt_dm_dev_bind_fwdata(rt_device_t dev, void *fw_np, void *data);
 void rt_dm_dev_bind_fwdata(rt_device_t dev, void *fw_np, void *data);
 void rt_dm_dev_unbind_fwdata(rt_device_t dev, void *fw_np);
 void rt_dm_dev_unbind_fwdata(rt_device_t dev, void *fw_np);
 
 
+const char *rt_dm_dev_get_prop_fuzzy_name(rt_device_t dev, const char *name);
+
 int rt_dm_dev_prop_read_u8_array_index(rt_device_t dev, const char *propname,
 int rt_dm_dev_prop_read_u8_array_index(rt_device_t dev, const char *propname,
         int index, int nr, rt_uint8_t *out_values);
         int index, int nr, rt_uint8_t *out_values);
 int rt_dm_dev_prop_read_u16_array_index(rt_device_t dev, const char *propname,
 int rt_dm_dev_prop_read_u16_array_index(rt_device_t dev, const char *propname,