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

This commit is contained in:
zms123456 2023-10-18 20:50:30 +08:00 committed by GitHub
parent dd33b31c28
commit d01dd05a0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 306 additions and 314 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,12 @@
menu "Device Drivers" 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 config RT_USING_DEVICE_IPC
bool "Using device drivers IPC" bool "Using device drivers IPC"
default y default y
@ -418,19 +425,6 @@ config RT_USING_PM
endif endif
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 config RT_USING_RTC
bool "Using RTC device drivers" bool "Using RTC device drivers"
default n default n

View File

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

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2023-04-12 ErikChan the first version * 2023-04-12 ErikChan the first version
* 2023-10-13 zmshahaha distinguish ofw and none-ofw situation
*/ */
#include <rtthread.h> #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) 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_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); 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) if (np)
{ {
/* 1、match with ofw node */ /* 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; return !!pdev->id;
} }
else if (pdev->name && pdrv->name) #endif
if (pdev->name && pdrv->name)
{ {
/* 2、match with name */ /* 2、match with name */
if (pdev->name == pdrv->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) static rt_err_t platform_probe(rt_device_t dev)
{ {
rt_err_t err; 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_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); 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); err = pdrv->probe(pdev);
#ifdef RT_USING_OFW
if (!err) if (!err)
{ {
if (np) if (np)
@ -111,6 +121,7 @@ static rt_err_t platform_probe(rt_device_t dev)
rt_ofw_data(np) = &pdev->parent; rt_ofw_data(np) = &pdev->parent;
} }
} }
#endif
return err; return err;
} }

View File

@ -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__ */

View File

@ -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__ */

View File

@ -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__ */

View File

@ -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__ */

View File

@ -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__ */

View File

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

View File

@ -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__ */

View File

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

View File

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

View File

@ -12,7 +12,15 @@
#ifndef __RT_DEVICE_H__ #ifndef __RT_DEVICE_H__
#define __RT_DEVICE_H__ #define __RT_DEVICE_H__
#include <rtdef.h>
#include <rtthread.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/ringbuffer.h"
#include "ipc/completion.h" #include "ipc/completion.h"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -51,6 +51,7 @@
* 2023-05-20 Bernard add stdc atomic detection. * 2023-05-20 Bernard add stdc atomic detection.
* 2023-09-17 Meco Man add RT_USING_LIBC_ISO_ONLY macro * 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-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__ #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) #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; typedef struct rt_device *rt_device_t;
#ifdef RT_USING_DEVICE_OPS #ifdef RT_USING_DEVICE_OPS
@ -1343,16 +1328,27 @@ struct rt_wqueue
}; };
typedef struct rt_wqueue rt_wqueue_t; typedef struct rt_wqueue rt_wqueue_t;
#ifdef RT_USING_DM
struct rt_driver;
struct rt_bus;
#endif
/** /**
* Device structure * Device structure
*/ */
struct rt_device struct rt_device
{ {
struct rt_object parent; /**< inherit from rt_object */ struct rt_object parent; /**< inherit from rt_object */
#ifdef RT_USING_DM #ifdef RT_USING_DM
struct rt_driver *drv; struct rt_bus *bus; /**< the bus mounting to */
void *dtb_node; 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
#endif
enum rt_device_class_type type; /**< device type */ enum rt_device_class_type type; /**< device type */
rt_uint16_t flag; /**< device flag */ rt_uint16_t flag; /**< device flag */
rt_uint16_t open_flag; /**< device open flag */ rt_uint16_t open_flag; /**< device open flag */
@ -1383,40 +1379,7 @@ struct rt_device
void *user_data; /**< device private data */ void *user_data; /**< device private data */
}; };
typedef struct rt_device *rt_device_t;
#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;
/** /**
* Notify structure * Notify structure
@ -1441,113 +1404,6 @@ struct rt_channel
typedef struct rt_channel *rt_channel_t; typedef struct rt_channel *rt_channel_t;
#endif #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 */ #endif /* RT_USING_DEVICE */

View File

@ -25,6 +25,7 @@ config RT_USING_SMART
select RT_USING_DFS select RT_USING_DFS
select RT_USING_LIBC select RT_USING_LIBC
select RT_USING_POSIX_CLOCKTIME select RT_USING_POSIX_CLOCKTIME
select RT_USING_DEVICE
select RT_USING_TTY select RT_USING_TTY
select RT_USING_NULL select RT_USING_NULL
select RT_USING_ZERO select RT_USING_ZERO
@ -382,8 +383,6 @@ menu "Memory Management"
default y if RT_USING_USERHEAP default y if RT_USING_USERHEAP
endmenu endmenu
menu "Kernel Device Object"
config RT_USING_DEVICE config RT_USING_DEVICE
bool "Using device object" bool "Using device object"
default y default y
@ -392,21 +391,6 @@ menu "Kernel Device Object"
bool "Using ops for each device object" bool "Using ops for each device object"
default n 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_INTERRUPT_INFO config RT_USING_INTERRUPT_INFO
bool "Enable additional interrupt trace information" bool "Enable additional interrupt trace information"
default n default n
@ -427,8 +411,6 @@ menu "Kernel Device Object"
default "uart" default "uart"
endif endif
endmenu
config RT_VER_NUM config RT_VER_NUM
hex hex
default 0x50100 default 0x50100

View File

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