浏览代码

[kernel][dm]适配新的设备驱动模型 (#8075)

zms123456 1 年之前
父节点
当前提交
d01dd05a0c

+ 2 - 0
bsp/fujitsu/mb9x/mb9bf500r/lcd.c

@@ -9,6 +9,8 @@
  */
 
 #include <rtthread.h>
+#include <rtdevice.h>
+
 #include "lcd.h"
 #include "font.h"
 

+ 2 - 0
bsp/fujitsu/mb9x/mb9bf506r/drivers/nand.c

@@ -8,6 +8,8 @@
  * 2011-05-25     Bernard      first version
  */
 
+#include <rtdevice.h>
+
 #include "nand.h"
 #include "mb9bf506r.h"
 

+ 1 - 0
bsp/lpc178x/drivers/lpc17xx_lcd.c

@@ -7,6 +7,7 @@
  * Date           Author       Notes
  */
 #include <rtthread.h>
+#include <rtdevice.h>
 
 #include "LPC177x_8x.h"
 #include "lpc177x_8x_pinsel.h"

+ 1 - 0
bsp/qemu-virt64-aarch64/applications/graphic.c

@@ -9,6 +9,7 @@
  */
 
 #include <rtthread.h>
+#include <rtdevice.h>
 
 #include <virtio_gpu.h>
 #include <virtio_input.h>

+ 2 - 0
bsp/raspberry-pi/raspi3-32/driver/drv_fb.c

@@ -10,6 +10,8 @@
 
 #include <rthw.h>
 #include <rtthread.h>
+#include <rtdevice.h>
+
 #include "mbox.h"
 #include "drv_fb.h"
 #include "mmu.h"

+ 1 - 0
bsp/raspberry-pi/raspi3-64/driver/drv_fb.c

@@ -11,6 +11,7 @@
 #include <rthw.h>
 #include <stdint.h>
 #include <rtthread.h>
+#include <rtdevice.h>
 #include "mbox.h"
 #include "drv_fb.h"
 #include "mmu.h"

+ 7 - 13
components/drivers/Kconfig

@@ -1,5 +1,12 @@
 menu "Device Drivers"
 
+config RT_USING_DM
+    bool "Enable device driver model with device tree"
+    default n
+    help
+        Enable device driver model with device tree (FDT). It will use more memory
+        to parse and support device tree feature.
+
 config RT_USING_DEVICE_IPC
     bool "Using device drivers IPC"
     default y
@@ -418,19 +425,6 @@ config RT_USING_PM
         endif
     endif
 
-config RT_USING_FDT
-    bool "Using fdt interface for device drivers"
-    default n
-    if RT_USING_FDT
-        config RT_USING_FDTLIB
-            bool "Using fdt lib for device drivers"
-            default y
-        config FDT_USING_DEBUG
-            bool "Using fdt debug function "
-            default n
-
-    endif
-
 config RT_USING_RTC
     bool "Using RTC device drivers"
     default n

+ 1 - 1
components/drivers/core/dm.c

@@ -27,7 +27,7 @@ INIT_EXPORT(rti_secondary_cpu_end, "7.end");
 
 void rt_dm_secondary_cpu_init(void)
 {
-#if RT_DEBUGING_INIT
+#ifdef RT_DEBUGING_INIT
     int result;
     const struct rt_init_desc *desc;
 

+ 14 - 3
components/drivers/core/platform.c

@@ -6,6 +6,7 @@
  * Change Logs:
  * Date           Author       Notes
  * 2023-04-12     ErikChan      the first version
+ * 2023-10-13     zmshahaha    distinguish ofw and none-ofw situation
  */
 
 #include <rtthread.h>
@@ -61,10 +62,14 @@ rt_err_t rt_platform_device_register(struct rt_platform_device *pdev)
 
 static rt_bool_t platform_match(rt_driver_t drv, rt_device_t dev)
 {
-    struct rt_ofw_node *np = dev->ofw_node;
     struct rt_platform_driver *pdrv = rt_container_of(drv, struct rt_platform_driver, parent);
     struct rt_platform_device *pdev = rt_container_of(dev, struct rt_platform_device, parent);
 
+#ifdef RT_USING_OFW
+    struct rt_ofw_node *np = dev->ofw_node;
+#endif
+
+#ifdef RT_USING_OFW
     if (np)
     {
         /* 1、match with ofw node */
@@ -72,7 +77,8 @@ static rt_bool_t platform_match(rt_driver_t drv, rt_device_t dev)
 
         return !!pdev->id;
     }
-    else if (pdev->name && pdrv->name)
+#endif
+    if (pdev->name && pdrv->name)
     {
         /* 2、match with name */
         if (pdev->name == pdrv->name)
@@ -91,12 +97,16 @@ static rt_bool_t platform_match(rt_driver_t drv, rt_device_t dev)
 static rt_err_t platform_probe(rt_device_t dev)
 {
     rt_err_t err;
-    struct rt_ofw_node *np = dev->ofw_node;
+
     struct rt_platform_driver *pdrv = rt_container_of(dev->drv, struct rt_platform_driver, parent);
     struct rt_platform_device *pdev = rt_container_of(dev, struct rt_platform_device, parent);
+#ifdef RT_USING_OFW
+    struct rt_ofw_node *np = dev->ofw_node;
+#endif
 
     err = pdrv->probe(pdev);
 
+#ifdef RT_USING_OFW
     if (!err)
     {
         if (np)
@@ -111,6 +121,7 @@ static rt_err_t platform_probe(rt_device_t dev)
             rt_ofw_data(np) = &pdev->parent;
         }
     }
+#endif
 
     return err;
 }

+ 42 - 0
components/drivers/include/drivers/classes/block.h

@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2023-10-11     zmshahaha    move from <rtdef.h>
+ */
+
+#ifndef __BLOCK_H__
+#define __BLOCK_H__
+
+#include <rtdef.h>
+
+/* block device commands*/
+#define RT_DEVICE_CTRL_BLK_GETGEOME     (RT_DEVICE_CTRL_BASE(Block) + 1)            /**< get geometry information   */
+#define RT_DEVICE_CTRL_BLK_SYNC         (RT_DEVICE_CTRL_BASE(Block) + 2)            /**< flush data to block device */
+#define RT_DEVICE_CTRL_BLK_ERASE        (RT_DEVICE_CTRL_BASE(Block) + 3)            /**< erase block on block device */
+#define RT_DEVICE_CTRL_BLK_AUTOREFRESH  (RT_DEVICE_CTRL_BASE(Block) + 4)            /**< block device : enter/exit auto refresh mode */
+#define RT_DEVICE_CTRL_BLK_PARTITION    (RT_DEVICE_CTRL_BASE(Block) + 5)            /**< get block device partition */
+
+/**
+ * block device geometry structure
+ */
+struct rt_device_blk_geometry
+{
+    rt_uint64_t sector_count;                           /**< count of sectors */
+    rt_uint32_t bytes_per_sector;                       /**< number of bytes per sector */
+    rt_uint32_t block_size;                             /**< number of bytes to erase one block */
+};
+
+/**
+ * sector arrange struct on block device
+ */
+struct rt_device_blk_sectors
+{
+    rt_uint64_t sector_begin;                           /**< begin sector */
+    rt_uint64_t sector_end;                             /**< end sector   */
+};
+
+#endif /* __BLOCK_H__ */

+ 19 - 0
components/drivers/include/drivers/classes/char.h

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2023-10-11     zmshahaha    move from <rtdef.h>
+ */
+
+#ifndef __CHAR_H__
+#define __CHAR_H__
+
+#include <rtdef.h>
+
+/* char device commands*/
+#define RT_DEVICE_CTRL_CHAR_STREAM      (RT_DEVICE_CTRL_BASE(Char) + 1)             /**< stream mode on char device */
+
+#endif /* __CHAR_H__ */

+ 104 - 0
components/drivers/include/drivers/classes/graphic.h

@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2023-10-11     zmshahaha    move from <rtdef.h>
+ */
+
+#ifndef __GRAPHIC_H__
+#define __GRAPHIC_H__
+
+#include <rtdef.h>
+
+/**
+ * cursor control command
+ */
+#define RT_DEVICE_CTRL_CURSOR_SET_POSITION  0x10
+#define RT_DEVICE_CTRL_CURSOR_SET_TYPE      0x11
+
+/**
+ * graphic device control command
+ */
+#define RTGRAPHIC_CTRL_RECT_UPDATE      (RT_DEVICE_CTRL_BASE(Graphic) + 0)
+#define RTGRAPHIC_CTRL_POWERON          (RT_DEVICE_CTRL_BASE(Graphic) + 1)
+#define RTGRAPHIC_CTRL_POWEROFF         (RT_DEVICE_CTRL_BASE(Graphic) + 2)
+#define RTGRAPHIC_CTRL_GET_INFO         (RT_DEVICE_CTRL_BASE(Graphic) + 3)
+#define RTGRAPHIC_CTRL_SET_MODE         (RT_DEVICE_CTRL_BASE(Graphic) + 4)
+#define RTGRAPHIC_CTRL_GET_EXT          (RT_DEVICE_CTRL_BASE(Graphic) + 5)
+#define RTGRAPHIC_CTRL_SET_BRIGHTNESS   (RT_DEVICE_CTRL_BASE(Graphic) + 6)
+#define RTGRAPHIC_CTRL_GET_BRIGHTNESS   (RT_DEVICE_CTRL_BASE(Graphic) + 7)
+#define RTGRAPHIC_CTRL_GET_MODE         (RT_DEVICE_CTRL_BASE(Graphic) + 8)
+#define RTGRAPHIC_CTRL_GET_STATUS       (RT_DEVICE_CTRL_BASE(Graphic) + 9)
+#define RTGRAPHIC_CTRL_PAN_DISPLAY      (RT_DEVICE_CTRL_BASE(Graphic) + 10)
+#define RTGRAPHIC_CTRL_WAIT_VSYNC       (RT_DEVICE_CTRL_BASE(Graphic) + 11)
+
+/* graphic device */
+enum
+{
+    RTGRAPHIC_PIXEL_FORMAT_MONO = 0,
+    RTGRAPHIC_PIXEL_FORMAT_GRAY4,
+    RTGRAPHIC_PIXEL_FORMAT_GRAY16,
+    RTGRAPHIC_PIXEL_FORMAT_RGB332,
+    RTGRAPHIC_PIXEL_FORMAT_RGB444,
+    RTGRAPHIC_PIXEL_FORMAT_RGB565,
+    RTGRAPHIC_PIXEL_FORMAT_RGB565P,
+    RTGRAPHIC_PIXEL_FORMAT_BGR565 = RTGRAPHIC_PIXEL_FORMAT_RGB565P,
+    RTGRAPHIC_PIXEL_FORMAT_RGB666,
+    RTGRAPHIC_PIXEL_FORMAT_RGB888,
+    RTGRAPHIC_PIXEL_FORMAT_BGR888,
+    RTGRAPHIC_PIXEL_FORMAT_ARGB888,
+    RTGRAPHIC_PIXEL_FORMAT_ABGR888,
+    RTGRAPHIC_PIXEL_FORMAT_RESERVED,
+};
+
+/**
+ * build a pixel position according to (x, y) coordinates.
+ */
+#define RTGRAPHIC_PIXEL_POSITION(x, y)  ((x << 16) | y)
+
+/**
+ * graphic device information structure
+ */
+struct rt_device_graphic_info
+{
+    rt_uint8_t  pixel_format;                           /**< graphic format */
+    rt_uint8_t  bits_per_pixel;                         /**< bits per pixel */
+    rt_uint16_t pitch;                                  /**< bytes per line */
+
+    rt_uint16_t width;                                  /**< width of graphic device */
+    rt_uint16_t height;                                 /**< height of graphic device */
+
+    rt_uint8_t *framebuffer;                            /**< frame buffer */
+    rt_uint32_t smem_len;                               /**< allocated frame buffer size */
+};
+
+/**
+ * rectangle information structure
+ */
+struct rt_device_rect_info
+{
+    rt_uint16_t x;                                      /**< x coordinate */
+    rt_uint16_t y;                                      /**< y coordinate */
+    rt_uint16_t width;                                  /**< width */
+    rt_uint16_t height;                                 /**< height */
+};
+
+/**
+ * graphic operations
+ */
+struct rt_device_graphic_ops
+{
+    void (*set_pixel) (const char *pixel, int x, int y);
+    void (*get_pixel) (char *pixel, int x, int y);
+
+    void (*draw_hline)(const char *pixel, int x1, int x2, int y);
+    void (*draw_vline)(const char *pixel, int x, int y1, int y2);
+
+    void (*blit_line) (const char *pixel, int x, int y, rt_size_t size);
+};
+#define rt_graphix_ops(device)          ((struct rt_device_graphic_ops *)(device->user_data))
+
+#endif /* __GRAPHIC_H__ */

+ 19 - 0
components/drivers/include/drivers/classes/mtd.h

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2023-10-11     zmshahaha    move from <rtdef.h>
+ */
+
+#ifndef __MTD_H__
+#define __MTD_H__
+
+#include <rtdef.h>
+
+/* mtd interface device*/
+#define RT_DEVICE_CTRL_MTD_FORMAT       (RT_DEVICE_CTRL_BASE(MTD) + 1)              /**< format a MTD device */
+
+#endif /* __MTD_H__ */

+ 19 - 0
components/drivers/include/drivers/classes/net.h

@@ -0,0 +1,19 @@
+/*
+ * Copyright (c) 2006-2023, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author       Notes
+ * 2023-10-11     zmshahaha    move from <rtdef.h>
+ */
+
+#ifndef __NET_H__
+#define __NET_H__
+
+#include <rtdef.h>
+
+/* net interface device*/
+#define RT_DEVICE_CTRL_NETIF_GETMAC     (RT_DEVICE_CTRL_BASE(NetIf) + 1)            /**< get mac address */
+
+#endif /* __NET_H__ */

+ 1 - 1
components/drivers/include/drivers/core/bus.h

@@ -12,7 +12,7 @@
 #define __CORE_BUS_H__
 
 #include <rthw.h>
-#include <drivers/core/device.h>
+#include <rtdef.h>
 #include <drivers/core/driver.h>
 
 typedef struct rt_bus *rt_bus_t;

+ 0 - 89
components/drivers/include/drivers/core/device.h

@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2006-2023, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date           Author       Notes
- * 2023-04-12     ErikChan      the first version
- */
-
-#ifndef __CORE_DEVICE_H__
-#define __CORE_DEVICE_H__
-
-#include <rtdef.h>
-
-typedef struct rt_driver *rt_driver_t;
-typedef struct rt_device *rt_device_t;
-
-/**
- * Notify structure
- */
-struct rt_device_notify
-{
-    void (*notify)(rt_device_t dev);
-    struct rt_device *dev;
-};
-
-/**
- * Device structure
- */
-struct rt_device
-{
-    struct rt_object          parent;                   /**< inherit from rt_object */
-    rt_list_t node;
-    struct rt_bus *bus;
-    void   *priv;
-
-#ifdef RT_USING_DM
-    rt_driver_t drv;
-    void *ofw_node;
-#endif
-    enum rt_device_class_type type;                     /**< device type */
-    rt_uint16_t               flag;                     /**< device flag */
-    rt_uint16_t               open_flag;                /**< device open flag */
-
-    rt_uint8_t                ref_count;                /**< reference count */
-    rt_uint8_t                device_id;                /**< 0 - 255 */
-
-    /* device call back */
-    rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
-    rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);
-
-#ifdef RT_USING_DEVICE_OPS
-    const struct rt_device_ops *ops;
-#else
-    /* common device interface */
-    rt_err_t  (*init)   (rt_device_t dev);
-    rt_err_t  (*open)   (rt_device_t dev, rt_uint16_t oflag);
-    rt_err_t  (*close)  (rt_device_t dev);
-    rt_ssize_t (*read)  (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
-    rt_ssize_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
-    rt_err_t  (*control)(rt_device_t dev, int cmd, void *args);
-#endif /* RT_USING_DEVICE_OPS */
-
-#ifdef RT_USING_POSIX_DEVIO
-    const struct dfs_file_ops *fops;
-    struct rt_wqueue wait_queue;
-#endif /* RT_USING_POSIX_DEVIO */
-
-    void                     *user_data;                /**< device private data */
-};
-
-#ifdef RT_USING_DEVICE_OPS
-/**
- * operations set for device object
- */
-struct rt_device_ops
-{
-    /* common device interface */
-    rt_err_t  (*init)   (rt_device_t dev);
-    rt_err_t  (*open)   (rt_device_t dev, rt_uint16_t oflag);
-    rt_err_t  (*close)  (rt_device_t dev);
-    rt_ssize_t (*read)  (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
-    rt_ssize_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
-    rt_err_t  (*control)(rt_device_t dev, int cmd, void *args);
-};
-#endif /* RT_USING_DEVICE_OPS */
-
-#endif /* __DEVICE_H__ */

+ 4 - 1
components/drivers/include/drivers/core/driver.h

@@ -11,7 +11,9 @@
 #ifndef __CORE_DRIVER_H__
 #define __CORE_DRIVER_H__
 
-#include <drivers/core/device.h>
+#include <rtdef.h>
+
+struct rt_bus;
 
 struct rt_driver
 {
@@ -39,6 +41,7 @@ struct rt_driver
 
     void *priv;
 };
+typedef struct rt_driver* rt_driver_t;
 
 int rt_driver_probe_device(struct rt_driver *drv, struct rt_device *dev);
 

+ 10 - 0
components/drivers/include/drivers/platform.h

@@ -6,12 +6,16 @@
  * Change Logs:
  * Date           Author       Notes
  * 2023-04-12     ErikChan      the first version
+ * 2023-10-13     zmshahaha    distinguish ofw and none-ofw situation
  */
 
 #ifndef __PLATFORM_H__
 #define __PLATFORM_H__
 
+#ifdef RT_USING_OFW
 #include <drivers/ofw.h>
+#endif
+
 #include <drivers/core/driver.h>
 
 struct rt_platform_device
@@ -19,7 +23,10 @@ struct rt_platform_device
     struct rt_device parent;
 
     const char *name;
+
+#ifdef RT_USING_OFW
     const struct rt_ofw_node_id *id;
+#endif
 
     void *priv;
 };
@@ -29,7 +36,10 @@ struct rt_platform_driver
     struct rt_driver parent;
 
     const char *name;
+
+#ifdef RT_USING_OFW
     const struct rt_ofw_node_id *ids;
+#endif
 
     rt_err_t (*probe)(struct rt_platform_device *pdev);
 };

+ 8 - 0
components/drivers/include/rtdevice.h

@@ -12,7 +12,15 @@
 #ifndef __RT_DEVICE_H__
 #define __RT_DEVICE_H__
 
+#include <rtdef.h>
 #include <rtthread.h>
+#include <drivers/core/driver.h>
+
+#include <drivers/classes/block.h>
+#include <drivers/classes/char.h>
+#include <drivers/classes/graphic.h>
+#include <drivers/classes/mtd.h>
+#include <drivers/classes/net.h>
 
 #include "ipc/ringbuffer.h"
 #include "ipc/completion.h"

+ 2 - 1
components/drivers/ofw/base.c

@@ -8,9 +8,10 @@
  * 2022-08-25     GuEe-GUI     first version
  */
 
+#define _GNU_SOURCE
+
 #include <rtthread.h>
 
-#include <string.h>
 #include <drivers/ofw.h>
 #include <drivers/ofw_io.h>
 #include <drivers/ofw_fdt.h>

+ 2 - 1
components/drivers/ofw/fdt.c

@@ -8,10 +8,11 @@
  * 2022-08-25     GuEe-GUI     first version
  */
 
+#define _GNU_SOURCE
+
 #include <rthw.h>
 #include <rtthread.h>
 
-#include <string.h>
 #include <drivers/ofw_fdt.h>
 #include <drivers/ofw_raw.h>
 #include <drivers/core/dm.h>

+ 0 - 1
components/drivers/ofw/irq.c

@@ -10,7 +10,6 @@
 
 #include <rtthread.h>
 
-#include <string.h>
 #include <drivers/pic.h>
 #include <drivers/ofw.h>
 #include <drivers/ofw_io.h>

+ 2 - 0
components/drivers/ofw/ofw.c

@@ -10,6 +10,8 @@
 
 #include <rtthread.h>
 #include <rtdevice.h>
+#include <drivers/platform.h>
+#include <drivers/core/bus.h>
 
 #define DBG_TAG "rtdm.ofw"
 #define DBG_LVL DBG_INFO

+ 1 - 0
components/drivers/spi/spi_msd.h

@@ -12,6 +12,7 @@
 #define SPI_MSD_H_INCLUDED
 
 #include <stdint.h>
+#include <rtdevice.h>
 #include <drivers/spi.h>
 
 /* SD command (SPI mode) */

+ 2 - 0
components/drivers/usb/usbdevice/class/mstorage.c

@@ -12,6 +12,8 @@
  */
 
 #include <rtthread.h>
+#include <rtdevice.h>
+
 #include "drivers/usb_device.h"
 #include "mstorage.h"
 

+ 1 - 0
components/drivers/virtio/virtio_blk.c

@@ -12,6 +12,7 @@
 #include <rthw.h>
 #include <rtthread.h>
 #include <cpuport.h>
+#include <rtdevice.h>
 
 #ifdef RT_USING_VIRTIO_BLK
 

+ 1 - 0
components/drivers/virtio/virtio_gpu.c

@@ -11,6 +11,7 @@
 #include <rthw.h>
 #include <rtthread.h>
 #include <cpuport.h>
+#include <rtdevice.h>
 
 #ifdef RT_USING_VIRTIO_GPU
 

+ 15 - 159
include/rtdef.h

@@ -51,6 +51,7 @@
  * 2023-05-20     Bernard      add stdc atomic detection.
  * 2023-09-17     Meco Man     add RT_USING_LIBC_ISO_ONLY macro
  * 2023-10-10     Chushicheng  change version number to v5.1.0
+ * 2023-10-11     zmshahaha    move specific devices related and driver to components/drivers
  */
 
 #ifndef __RT_DEF_H__
@@ -1299,22 +1300,6 @@ enum rt_device_class_type
  */
 #define RT_DEVICE_CTRL_BASE(Type)        ((RT_Device_Class_##Type + 1) * 0x100)
 
-/**
- * special device commands
- */
-/* character device */
-#define RT_DEVICE_CTRL_CHAR_STREAM      (RT_DEVICE_CTRL_BASE(Char) + 1)             /**< stream mode on char device */
-/* block device */
-#define RT_DEVICE_CTRL_BLK_GETGEOME     (RT_DEVICE_CTRL_BASE(Block) + 1)            /**< get geometry information   */
-#define RT_DEVICE_CTRL_BLK_SYNC         (RT_DEVICE_CTRL_BASE(Block) + 2)            /**< flush data to block device */
-#define RT_DEVICE_CTRL_BLK_ERASE        (RT_DEVICE_CTRL_BASE(Block) + 3)            /**< erase block on block device */
-#define RT_DEVICE_CTRL_BLK_AUTOREFRESH  (RT_DEVICE_CTRL_BASE(Block) + 4)            /**< block device : enter/exit auto refresh mode */
-#define RT_DEVICE_CTRL_BLK_PARTITION    (RT_DEVICE_CTRL_BASE(Block) + 5)            /**< get block device partition */
-/* net interface device*/
-#define RT_DEVICE_CTRL_NETIF_GETMAC     (RT_DEVICE_CTRL_BASE(NetIf) + 1)            /**< get mac address */
-/* mtd interface device*/
-#define RT_DEVICE_CTRL_MTD_FORMAT       (RT_DEVICE_CTRL_BASE(MTD) + 1)              /**< format a MTD device */
-
 typedef struct rt_device *rt_device_t;
 
 #ifdef RT_USING_DEVICE_OPS
@@ -1343,16 +1328,27 @@ struct rt_wqueue
 };
 typedef struct rt_wqueue rt_wqueue_t;
 
+#ifdef RT_USING_DM
+struct rt_driver;
+struct rt_bus;
+#endif
+
 /**
  * Device structure
  */
 struct rt_device
 {
     struct rt_object          parent;                   /**< inherit from rt_object */
+
 #ifdef RT_USING_DM
-    struct rt_driver *drv;
-    void *dtb_node;
+    struct rt_bus *bus;                                 /**< the bus mounting to */
+    rt_list_t node;                                     /**< to mount on bus */
+    struct rt_driver *drv;                              /**< driver for powering the device */
+#ifdef RT_USING_OFW
+    void *ofw_node;                                     /**< ofw node get from device tree */
 #endif
+#endif
+
     enum rt_device_class_type type;                     /**< device type */
     rt_uint16_t               flag;                     /**< device flag */
     rt_uint16_t               open_flag;                /**< device open flag */
@@ -1383,40 +1379,7 @@ struct rt_device
 
     void                     *user_data;                /**< device private data */
 };
-
-#define RT_DRIVER_MATCH_DTS (1<<0)
-struct rt_device_id
-{
-    const char *compatible;
-    void *data;
-};
-
-struct rt_driver
-{
-#ifdef RT_USING_DEVICE_OPS
-    const struct rt_device_ops *dev_ops;
-#else
-    /* common device interface */
-    rt_err_t  (*init)   (rt_device_t dev);
-    rt_err_t  (*open)   (rt_device_t dev, rt_uint16_t oflag);
-    rt_err_t  (*close)  (rt_device_t dev);
-    rt_ssize_t (*read)  (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
-    rt_ssize_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
-    rt_err_t  (*control)(rt_device_t dev, int cmd, void *args);
-#endif
-    const struct filesystem_ops *fops;
-    const char *name;
-    enum rt_device_class_type dev_type;
-    int device_size;
-    int flag;
-    const struct rt_device_id *dev_match;
-    int (*probe)(struct rt_device *dev);
-    int (*probe_init)(struct rt_device *dev);
-    int (*remove)(struct rt_device *dev);
-    const void *ops;    /* driver-specific operations */
-    void *drv_priv_data;
-};
-typedef struct rt_driver *rt_driver_t;
+typedef struct rt_device *rt_device_t;
 
 /**
  * Notify structure
@@ -1441,113 +1404,6 @@ struct rt_channel
 typedef struct rt_channel *rt_channel_t;
 #endif
 
-/**
- * block device geometry structure
- */
-struct rt_device_blk_geometry
-{
-    rt_uint64_t sector_count;                           /**< count of sectors */
-    rt_uint32_t bytes_per_sector;                       /**< number of bytes per sector */
-    rt_uint32_t block_size;                             /**< number of bytes to erase one block */
-};
-
-/**
- * sector arrange struct on block device
- */
-struct rt_device_blk_sectors
-{
-    rt_uint64_t sector_begin;                           /**< begin sector */
-    rt_uint64_t sector_end;                             /**< end sector   */
-};
-
-/**
- * cursor control command
- */
-#define RT_DEVICE_CTRL_CURSOR_SET_POSITION  0x10
-#define RT_DEVICE_CTRL_CURSOR_SET_TYPE      0x11
-
-/**
- * graphic device control command
- */
-#define RTGRAPHIC_CTRL_RECT_UPDATE      (RT_DEVICE_CTRL_BASE(Graphic) + 0)
-#define RTGRAPHIC_CTRL_POWERON          (RT_DEVICE_CTRL_BASE(Graphic) + 1)
-#define RTGRAPHIC_CTRL_POWEROFF         (RT_DEVICE_CTRL_BASE(Graphic) + 2)
-#define RTGRAPHIC_CTRL_GET_INFO         (RT_DEVICE_CTRL_BASE(Graphic) + 3)
-#define RTGRAPHIC_CTRL_SET_MODE         (RT_DEVICE_CTRL_BASE(Graphic) + 4)
-#define RTGRAPHIC_CTRL_GET_EXT          (RT_DEVICE_CTRL_BASE(Graphic) + 5)
-#define RTGRAPHIC_CTRL_SET_BRIGHTNESS   (RT_DEVICE_CTRL_BASE(Graphic) + 6)
-#define RTGRAPHIC_CTRL_GET_BRIGHTNESS   (RT_DEVICE_CTRL_BASE(Graphic) + 7)
-#define RTGRAPHIC_CTRL_GET_MODE         (RT_DEVICE_CTRL_BASE(Graphic) + 8)
-#define RTGRAPHIC_CTRL_GET_STATUS       (RT_DEVICE_CTRL_BASE(Graphic) + 9)
-#define RTGRAPHIC_CTRL_PAN_DISPLAY      (RT_DEVICE_CTRL_BASE(Graphic) + 10)
-#define RTGRAPHIC_CTRL_WAIT_VSYNC       (RT_DEVICE_CTRL_BASE(Graphic) + 11)
-
-/* graphic device */
-enum
-{
-    RTGRAPHIC_PIXEL_FORMAT_MONO = 0,
-    RTGRAPHIC_PIXEL_FORMAT_GRAY4,
-    RTGRAPHIC_PIXEL_FORMAT_GRAY16,
-    RTGRAPHIC_PIXEL_FORMAT_RGB332,
-    RTGRAPHIC_PIXEL_FORMAT_RGB444,
-    RTGRAPHIC_PIXEL_FORMAT_RGB565,
-    RTGRAPHIC_PIXEL_FORMAT_RGB565P,
-    RTGRAPHIC_PIXEL_FORMAT_BGR565 = RTGRAPHIC_PIXEL_FORMAT_RGB565P,
-    RTGRAPHIC_PIXEL_FORMAT_RGB666,
-    RTGRAPHIC_PIXEL_FORMAT_RGB888,
-    RTGRAPHIC_PIXEL_FORMAT_BGR888,
-    RTGRAPHIC_PIXEL_FORMAT_ARGB888,
-    RTGRAPHIC_PIXEL_FORMAT_ABGR888,
-    RTGRAPHIC_PIXEL_FORMAT_RESERVED,
-};
-
-/**
- * build a pixel position according to (x, y) coordinates.
- */
-#define RTGRAPHIC_PIXEL_POSITION(x, y)  ((x << 16) | y)
-
-/**
- * graphic device information structure
- */
-struct rt_device_graphic_info
-{
-    rt_uint8_t  pixel_format;                           /**< graphic format */
-    rt_uint8_t  bits_per_pixel;                         /**< bits per pixel */
-    rt_uint16_t pitch;                                  /**< bytes per line */
-
-    rt_uint16_t width;                                  /**< width of graphic device */
-    rt_uint16_t height;                                 /**< height of graphic device */
-
-    rt_uint8_t *framebuffer;                            /**< frame buffer */
-    rt_uint32_t smem_len;                               /**< allocated frame buffer size */
-};
-
-/**
- * rectangle information structure
- */
-struct rt_device_rect_info
-{
-    rt_uint16_t x;                                      /**< x coordinate */
-    rt_uint16_t y;                                      /**< y coordinate */
-    rt_uint16_t width;                                  /**< width */
-    rt_uint16_t height;                                 /**< height */
-};
-
-/**
- * graphic operations
- */
-struct rt_device_graphic_ops
-{
-    void (*set_pixel) (const char *pixel, int x, int y);
-    void (*get_pixel) (char *pixel, int x, int y);
-
-    void (*draw_hline)(const char *pixel, int x1, int x2, int y);
-    void (*draw_vline)(const char *pixel, int x, int y1, int y2);
-
-    void (*blit_line) (const char *pixel, int x, int y, rt_size_t size);
-};
-#define rt_graphix_ops(device)          ((struct rt_device_graphic_ops *)(device->user_data))
-
 /**@}*/
 #endif /* RT_USING_DEVICE */
 

+ 23 - 41
src/Kconfig

@@ -25,6 +25,7 @@ config RT_USING_SMART
     select RT_USING_DFS
     select RT_USING_LIBC
     select RT_USING_POSIX_CLOCKTIME
+    select RT_USING_DEVICE
     select RT_USING_TTY
     select RT_USING_NULL
     select RT_USING_ZERO
@@ -382,52 +383,33 @@ menu "Memory Management"
         default y if RT_USING_USERHEAP
 endmenu
 
-menu "Kernel Device Object"
-
-    config RT_USING_DEVICE
-        bool "Using device object"
-        default y
-
-    config RT_USING_DEVICE_OPS
-        bool "Using ops for each device object"
-        default n
-
-    config RT_USING_DM
-        bool "Enable device driver model with device tree"
-        default n
-        help
-            Enable device driver model with device tree (FDT). It will use more memory
-            to parse and support device tree feature.
-
-    config RT_USING_DM_FDT
-        bool "Enablie builtin libfdt"
-        depends on RT_USING_DM
-        default y
-        help
-            libfdt - Flat Device Tree manipulation. If your code already contains the
-            libfdt, you can cancel this built-in libfdt to avoid link issue.
+config RT_USING_DEVICE
+    bool "Using device object"
+    default y
 
-    config RT_USING_INTERRUPT_INFO
-        bool "Enable additional interrupt trace information"
-        default n
-        help
-            Add name and counter information for interrupt trace.
+config RT_USING_DEVICE_OPS
+    bool "Using ops for each device object"
+    default n
 
-    config RT_USING_CONSOLE
-        bool "Using console for rt_kprintf"
-        default y
+config RT_USING_INTERRUPT_INFO
+    bool "Enable additional interrupt trace information"
+    default n
+    help
+        Add name and counter information for interrupt trace.
 
-    if RT_USING_CONSOLE
-        config RT_CONSOLEBUF_SIZE
-            int "the buffer size for console log printf"
-            default 128
+config RT_USING_CONSOLE
+    bool "Using console for rt_kprintf"
+    default y
 
-        config RT_CONSOLE_DEVICE_NAME
-            string "the device name for console"
-            default "uart"
-    endif
+if RT_USING_CONSOLE
+    config RT_CONSOLEBUF_SIZE
+        int "the buffer size for console log printf"
+        default 128
 
-endmenu
+    config RT_CONSOLE_DEVICE_NAME
+        string "the device name for console"
+        default "uart"
+endif
 
 config RT_VER_NUM
     hex

+ 0 - 3
src/SConscript

@@ -30,9 +30,6 @@ if GetDepend('RT_USING_SMP') == False:
 if GetDepend('RT_USING_SMP') == True:
     SrcRemove(src, ['scheduler_up.c'])
 
-if GetDepend('RT_USING_DM') == False:
-    SrcRemove(src, ['driver.c'])
-
 group = DefineGroup('Kernel', src, depend = [''], CPPPATH = inc, CPPDEFINES = ['__RTTHREAD__'])
 
 Return('group')