Port fat_io_lib, mount atasd0mp1 as sys:
This commit is contained in:
@ -4,6 +4,10 @@
|
||||
#include "spinlock/spinlock.h"
|
||||
#include "util/util.h"
|
||||
#include "fs/portlfs/portlfs.h"
|
||||
#include "fs/portfatfs/portfatfs.h"
|
||||
#include "fs/fatfs/fat_filelib.h"
|
||||
#include "fs/fatfs/fat_format.h"
|
||||
#include "fs/fatfs/fat_opts.h"
|
||||
#include "storedev/storedev.h"
|
||||
#include "baseimg/baseimg.h"
|
||||
#include "dlmalloc/malloc.h"
|
||||
@ -36,7 +40,7 @@ VfsBusyObjs VFS_BUSY_VOBJS;
|
||||
\
|
||||
dlfree(tmpbuf);
|
||||
|
||||
void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
|
||||
int32_t vfs_init_littlefs(VfsMountPoint *mp, bool format) {
|
||||
struct lfs_config *cfg = dlmalloc(sizeof(*cfg));
|
||||
memset(cfg, 0, sizeof(*cfg));
|
||||
cfg->context = mp;
|
||||
@ -63,6 +67,7 @@ void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
|
||||
int err = lfs_mount(&mp->fs.littlefs.instance, cfg);
|
||||
if (err < 0) {
|
||||
ERR("vfs", "Little FS mount failed %d\n", err);
|
||||
return E_MOUNTERR;
|
||||
}
|
||||
|
||||
mp->cleanup = &littlefs_cleanup;
|
||||
@ -71,6 +76,32 @@ void vfs_init_littlefs(VfsMountPoint *mp, bool format) {
|
||||
mp->fetchdirent = &littlefs_fetchdirent;
|
||||
mp->mkdir = &littlefs_mkdir;
|
||||
mp->delete = &littlefs_delete;
|
||||
return E_OK;
|
||||
}
|
||||
|
||||
int32_t vfs_init_fat16(VfsMountPoint *mp, bool format) {
|
||||
mp->fs.fatfs.instance.extra = mp;
|
||||
fl_init(&mp->fs.fatfs.instance);
|
||||
int err = fl_attach_media(&mp->fs.fatfs.instance, &portfatfs_diskio_read, &portfatfs_diskio_write);
|
||||
if (err != FAT_INIT_OK) {
|
||||
ERR("vfs", "FAT16 mount failed %d\n", err);
|
||||
return E_MOUNTERR;
|
||||
}
|
||||
if (format) {
|
||||
fatfs_format_fat16(&mp->fs.fatfs.instance,
|
||||
&mp->fs.fatfs.instance._fs,
|
||||
mp->backingsd->capacity(mp->backingsd) / FAT_SECTOR_SIZE,
|
||||
"MOP2 FAT16"
|
||||
);
|
||||
}
|
||||
|
||||
mp->cleanup = &fatfs_cleanup;
|
||||
mp->open = &fatfs_open;
|
||||
mp->stat = &fatfs_stat;
|
||||
mp->fetchdirent = &fatfs_fetchdirent;
|
||||
mp->mkdir = &fatfs_mkdir;
|
||||
mp->delete = &fatfs_delete;
|
||||
return E_OK;
|
||||
}
|
||||
|
||||
int32_t vfs_stat(char *mountpoint, const char *path, FsStat *stat) {
|
||||
@ -149,15 +180,19 @@ int32_t vfs_mount(char *mountpoint, int32_t fstype, StoreDev *backingsd, bool fo
|
||||
memcpy(mp->label, mountpoint, strlen(mountpoint));
|
||||
mp->backingsd = backingsd;
|
||||
mp->fstype = fstype;
|
||||
int32_t err;
|
||||
switch (fstype) {
|
||||
case VFS_LITTLEFS:
|
||||
vfs_init_littlefs(mp, format);
|
||||
err = vfs_init_littlefs(mp, format);
|
||||
break;
|
||||
case VFS_FAT16:
|
||||
err = vfs_init_fat16(mp, format);
|
||||
break;
|
||||
default:
|
||||
return E_UNKNOWN_FSTYPE;
|
||||
}
|
||||
|
||||
return E_OK;
|
||||
return err != E_OK ? err : E_OK;
|
||||
}
|
||||
|
||||
int32_t vfs_unmount(char *mountpoint) {
|
||||
|
||||
Reference in New Issue
Block a user