Bläddra i källkod

add Macro for driver device mode

宋超 3 år sedan
förälder
incheckning
f4e4f488d9
6 ändrade filer med 20 tillägg och 4 borttagningar
  1. 2 0
      include/rtdef.h
  2. 2 2
      include/rtthread.h
  3. 9 0
      src/Kconfig
  4. 3 0
      src/SConscript
  5. 2 1
      src/device.c
  6. 2 1
      src/driver.c

+ 2 - 0
include/rtdef.h

@@ -1093,8 +1093,10 @@ typedef struct rt_wqueue rt_wqueue_t;
 struct rt_device
 {
     struct rt_object          parent;                   /**< inherit from rt_object */
+#ifdef RT_USING_DDM    
     const struct rt_driver    *drv;
     void *fdt_node; 
+#endif    
     enum rt_device_class_type type;                     /**< device type */
     rt_uint16_t               flag;                     /**< device flag */
     rt_uint16_t               open_flag;                /**< device open flag */

+ 2 - 2
include/rtthread.h

@@ -517,14 +517,14 @@ rt_size_t rt_device_write(rt_device_t dev,
                           const void *buffer,
                           rt_size_t   size);
 rt_err_t  rt_device_control(rt_device_t dev, int cmd, void *arg);
-
+#ifdef RT_USING_DDM
 rt_err_t rt_device_driver_bind(rt_device_t device, rt_driver_t driver, void *node);
 rt_device_t rt_device_create_since_driver(rt_driver_t drv,int device_id);
 rt_err_t rt_device_probe_and_init(rt_device_t device);
 rt_err_t rt_driver_device_match_with_id(const rt_driver_t drv,int device_id);
 rt_err_t rt_driver_device_match_with_dtb(const rt_driver_t drv,void *from_node,int max_dev_num);
 rt_err_t rt_driver_unregister(const rt_driver_t drv);
-
+#endif
 /**@}*/
 #endif
 

+ 9 - 0
src/Kconfig

@@ -347,4 +347,13 @@ config RT_VER_NUM
     help
         RT-Thread version number
 
+config RT_USING_DDM
+    bool "Enable rt device driver mode"
+    default n
+    help
+        This option should be selected by machines which have an SMP-
+        capable CPU.
+        The only effect of this option is to make the SMP-related
+        options available to the user for configuration.        
+
 endmenu

+ 3 - 0
src/SConscript

@@ -29,6 +29,9 @@ if GetDepend('RT_USING_DEVICE') == False:
 if GetDepend('RT_USING_SMP') == False:
     SrcRemove(src, ['cpu.c'])
 
+if GetDepend('RT_USING_DDM') == False:
+    SrcRemove(src, ['driver.c'])
+
 group = DefineGroup('Kernel', src, depend = [''], CPPPATH = CPPPATH)
 
 Return('group')

+ 2 - 1
src/device.c

@@ -477,6 +477,7 @@ rt_device_set_tx_complete(rt_device_t dev,
 }
 RTM_EXPORT(rt_device_set_tx_complete);
 
+#ifdef RT_USING_DDM
 /**
  * This function  bind drvier and device
  *
@@ -568,5 +569,5 @@ rt_err_t rt_device_probe_and_init(rt_device_t device)
     return ret;
 }
 RTM_EXPORT(rt_device_probe_and_init);
-
+#endif
 #endif

+ 2 - 1
src/driver.c

@@ -72,7 +72,7 @@ rt_err_t rt_driver_device_match_with_dtb(const rt_driver_t drv,void *from_node,i
     {
         return -RT_ERROR;
     }
-    
+
     ret = fdt_find_all_active_compatible_node(from_node,drv->dev_match->compatible,node_list,max_dev_num,&active_dev_num);
     if((ret != 0) || (!active_dev_num))
     {
@@ -100,6 +100,7 @@ rt_err_t rt_driver_device_match_with_dtb(const rt_driver_t drv,void *from_node,i
 
     }
 
+    rt_free(node_list);
     return ret;
 }