add fatfs through vfs for EVB plus
1. see board\TencentOS_tiny_EVB_MX_Plus\KEIL\fatfs_through_vfs
This commit is contained in:
@@ -29,7 +29,7 @@ static uint8_t sdio_aligned_buffer[512] __ALIGNED__(4);
|
||||
static ssize_t sd_read(vfs_inode_t *dev, void *buf, size_t start_sector, unsigned int nsectors)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
int ret = 0;
|
||||
int rc = 0;
|
||||
uint32_t i;
|
||||
uint8_t *buff = (uint8_t *)buf;
|
||||
uint64_t sector_addr = start_sector << 9;
|
||||
@@ -37,44 +37,42 @@ static ssize_t sd_read(vfs_inode_t *dev, void *buf, size_t start_sector, unsigne
|
||||
TOS_CPU_INT_DISABLE();
|
||||
if ((cpu_addr_t)buff % 4 != 0) {
|
||||
for (i = 0; i < nsectors; ++i) {
|
||||
ret = tos_hal_sd_read(&sd, sdio_aligned_buffer, sector_addr + 512 * i, 1, 2000);
|
||||
rc = tos_hal_sd_read(&sd, sdio_aligned_buffer, sector_addr + 512 * i, 1, 2000);
|
||||
memcpy(buff, sdio_aligned_buffer, 512);
|
||||
buff += 512;
|
||||
}
|
||||
} else {
|
||||
ret = tos_hal_sd_read(&sd, buff, sector_addr, nsectors, 2000);
|
||||
rc = tos_hal_sd_read(&sd, buff, sector_addr, nsectors, 2000);
|
||||
}
|
||||
TOS_CPU_INT_ENABLE();
|
||||
return ret;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static ssize_t sd_write(vfs_inode_t *dev, const unsigned char *buf, size_t start_sector, unsigned int nsectors)
|
||||
{
|
||||
TOS_CPU_CPSR_ALLOC();
|
||||
int ret = 0;
|
||||
int rc = 0;
|
||||
uint32_t i;
|
||||
uint8_t *buff = (uint8_t *)buf;
|
||||
uint64_t sector_addr = start_sector << 9;
|
||||
|
||||
TOS_CPU_INT_DISABLE();
|
||||
if ((cpu_addr_t)buff % 4 !=0) {
|
||||
if ((cpu_addr_t)buff % 4 != 0) {
|
||||
for (i = 0; i < nsectors; ++i) {
|
||||
memcpy(sdio_aligned_buffer, buff, 512);
|
||||
ret = tos_hal_sd_write(&sd, sdio_aligned_buffer, sector_addr + 512 * i, 1, 2000);
|
||||
rc = tos_hal_sd_write(&sd, sdio_aligned_buffer, sector_addr + 512 * i, 1, 2000);
|
||||
buff += 512;
|
||||
}
|
||||
} else {
|
||||
ret = tos_hal_sd_write(&sd, buff, sector_addr, nsectors, 2000);
|
||||
rc = tos_hal_sd_write(&sd, buff, sector_addr, nsectors, 2000);
|
||||
}
|
||||
TOS_CPU_INT_ENABLE();
|
||||
return ret;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int sd_ioctl(vfs_inode_t *dev, int cmd, unsigned long arg)
|
||||
{
|
||||
int ret = 0;
|
||||
int rc = 0;
|
||||
void *buff = (void *)arg;
|
||||
|
||||
if (cmd != CTRL_SYNC && !buff) {
|
||||
@@ -98,11 +96,11 @@ static int sd_ioctl(vfs_inode_t *dev, int cmd, unsigned long arg)
|
||||
break;
|
||||
|
||||
default:
|
||||
ret = -1;
|
||||
rc = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int sd_geometry(vfs_inode_t *dev, vfs_blkdev_geo_t *geo)
|
||||
|
@@ -3,8 +3,6 @@
|
||||
|
||||
#include "tos_k.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
#include "tos_vfs_err.h"
|
||||
#include "tos_vfs_types.h"
|
||||
#include "tos_vfs_file.h"
|
||||
@@ -54,7 +52,5 @@ __API__ int tos_vfs_rename(const char *oldpath, const char *newpath);
|
||||
|
||||
__API__ int tos_vfs_stat(const char *pathname, vfs_fstat_t *buf);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _TOS_VFS_H_ */
|
||||
|
||||
|
@@ -1,8 +1,6 @@
|
||||
#ifndef _TOS_VFS_DEVICE_H_
|
||||
#define _TOS_VFS_DEVICE_H_
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
typedef struct vfs_inode_st vfs_inode_t;
|
||||
|
||||
typedef struct vfs_char_device_operations_st {
|
||||
@@ -44,7 +42,5 @@ __API__ vfs_err_t tos_vfs_char_device_register(const char *device_name, vfs_chrd
|
||||
|
||||
__API__ vfs_err_t tos_vfs_char_device_unregister(const char *device_name);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _TOS_VFS_DEVICE_H_ */
|
||||
|
||||
|
@@ -1,8 +1,6 @@
|
||||
#ifndef _TOS_VFS_FILE_H_
|
||||
#define _TOS_VFS_FILE_H_
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
typedef struct vfs_inode_st vfs_inode_t;
|
||||
|
||||
// why do you open so many files in a IOT system?
|
||||
@@ -104,6 +102,5 @@ __KNL__ vfs_dir_t *vfs_dir_alloc(void);
|
||||
|
||||
__KNL__ void vfs_dir_free(vfs_dir_t *dir);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _TOS_VFS_FILE_H_ */
|
||||
|
||||
|
@@ -1,8 +1,6 @@
|
||||
#ifndef _TOS_VFS_FS_H_
|
||||
#define _TOS_VFS_FS_H_
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
typedef struct vfs_inode_st vfs_inode_t;
|
||||
|
||||
typedef struct vfs_filesystem_operations_st {
|
||||
@@ -54,7 +52,5 @@ __API__ vfs_err_t tos_vfs_fs_umount(const char *dir);
|
||||
|
||||
__API__ vfs_err_t tos_vfs_fs_mkfs(const char *device_path, const char *fs_name, int opt, unsigned long arg);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _TOS_VFS_FS_H_ */
|
||||
|
||||
|
@@ -1,8 +1,6 @@
|
||||
#ifndef _TOS_VFS_INODE_H_
|
||||
#define _TOS_VFS_INODE_H_
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
// why your inode's name so long?
|
||||
#define VFS_INODE_NAME_MAX 31
|
||||
|
||||
@@ -53,7 +51,5 @@ __KNL__ void vfs_inode_free(vfs_inode_t *inode);
|
||||
|
||||
__KNL__ void vfs_inode_release(vfs_inode_t *inode);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _TOS_VFS_INODE_H_ */
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#include "tos_vfs.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
__API__ int tos_vfs_open(const char *pathname, vfs_oflag_t flags)
|
||||
{
|
||||
int path_len = 0, ret = -1;
|
||||
@@ -677,5 +675,3 @@ __API__ int tos_vfs_stat(const char *pathname, vfs_fstat_t *buf)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#include "tos_vfs.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
vfs_err_t tos_vfs_block_device_register(const char *device_name, vfs_blkdev_ops_t *ops)
|
||||
{
|
||||
int path_len = 0;
|
||||
@@ -116,5 +114,3 @@ vfs_err_t tos_vfs_char_device_unregister(const char *device_name)
|
||||
return VFS_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif /* TOS_CFG_VFS_EN */
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#include "tos_vfs.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
__STATIC__ vfs_file_t vfs_file_pool[VFS_FILE_OPEN_MAX] = { { K_NULL, 0 } };
|
||||
|
||||
__KNL__ vfs_file_t *vfs_fd2file(int fd)
|
||||
@@ -75,5 +73,3 @@ __KNL__ void vfs_dir_free(vfs_dir_t *dir)
|
||||
tos_mmheap_free(dir);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#include "tos_vfs.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
extern k_list_t k_vfs_fsmap_list;
|
||||
TOS_LIST_DEFINE(k_vfs_fsmap_list);
|
||||
|
||||
@@ -192,5 +190,3 @@ __API__ vfs_err_t tos_vfs_fs_mkfs(const char *device_path, const char *fs_name,
|
||||
return VFS_ERR_NONE;
|
||||
}
|
||||
|
||||
#endif /* TOS_CFG_VFS_EN */
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
#include "tos_vfs.h"
|
||||
|
||||
#if TOS_CFG_VFS_EN > 0u
|
||||
|
||||
__STATIC__ TOS_LIST_DEFINE(k_vfs_inode_list);
|
||||
|
||||
/*
|
||||
@@ -159,5 +157,3 @@ __KNL__ void vfs_inode_release(vfs_inode_t *inode)
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* TOS_CFG_VFS_EN */
|
||||
|
||||
|
Reference in New Issue
Block a user