[kernel][dm]适配新的设备驱动模型 (#8075)
This commit is contained in:
parent
dd33b31c28
commit
d01dd05a0c
|
@ -9,6 +9,8 @@
|
|||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "lcd.h"
|
||||
#include "font.h"
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
* 2011-05-25 Bernard first version
|
||||
*/
|
||||
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "nand.h"
|
||||
#include "mb9bf506r.h"
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
* Date Author Notes
|
||||
*/
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "LPC177x_8x.h"
|
||||
#include "lpc177x_8x_pinsel.h"
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include <virtio_gpu.h>
|
||||
#include <virtio_input.h>
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "mbox.h"
|
||||
#include "drv_fb.h"
|
||||
#include "mmu.h"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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__ */
|
|
@ -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__ */
|
|
@ -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__ */
|
|
@ -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__ */
|
|
@ -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__ */
|
|
@ -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;
|
||||
|
|
|
@ -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__ */
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include <rtthread.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <drivers/pic.h>
|
||||
#include <drivers/ofw.h>
|
||||
#include <drivers/ofw_io.h>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#define SPI_MSD_H_INCLUDED
|
||||
|
||||
#include <stdint.h>
|
||||
#include <rtdevice.h>
|
||||
#include <drivers/spi.h>
|
||||
|
||||
/* SD command (SPI mode) */
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#include "drivers/usb_device.h"
|
||||
#include "mstorage.h"
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include <cpuport.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#ifdef RT_USING_VIRTIO_BLK
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include <cpuport.h>
|
||||
#include <rtdevice.h>
|
||||
|
||||
#ifdef RT_USING_VIRTIO_GPU
|
||||
|
||||
|
|
174
include/rtdef.h
174
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 */
|
||||
|
||||
|
|
64
src/Kconfig
64
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
|
||||
bool "Using device object"
|
||||
default y
|
||||
config RT_USING_DEVICE_OPS
|
||||
bool "Using ops for each device object"
|
||||
default n
|
||||
|
||||
config RT_USING_DEVICE_OPS
|
||||
bool "Using ops for each device object"
|
||||
default n
|
||||
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_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_CONSOLE
|
||||
bool "Using console for rt_kprintf"
|
||||
default y
|
||||
|
||||
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.
|
||||
if RT_USING_CONSOLE
|
||||
config RT_CONSOLEBUF_SIZE
|
||||
int "the buffer size for console log printf"
|
||||
default 128
|
||||
|
||||
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_CONSOLE
|
||||
bool "Using console for rt_kprintf"
|
||||
default y
|
||||
|
||||
if RT_USING_CONSOLE
|
||||
config RT_CONSOLEBUF_SIZE
|
||||
int "the buffer size for console log printf"
|
||||
default 128
|
||||
|
||||
config RT_CONSOLE_DEVICE_NAME
|
||||
string "the device name for console"
|
||||
default "uart"
|
||||
endif
|
||||
|
||||
endmenu
|
||||
config RT_CONSOLE_DEVICE_NAME
|
||||
string "the device name for console"
|
||||
default "uart"
|
||||
endif
|
||||
|
||||
config RT_VER_NUM
|
||||
hex
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue