Implement an ATA driver, Add vfsmount/vfsunmount syscalls

This commit is contained in:
2025-10-14 00:39:59 +02:00
parent cb9e15330e
commit 25cb309105
19 changed files with 455 additions and 58 deletions

View File

@ -219,13 +219,27 @@ int32_t littlefs_fetchdirent(struct VfsMountPoint *vmp, const char *path, IoctlD
int portlfs_read(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) {
VfsMountPoint *vmp = c->context;
vmp->backingsd->read(vmp->backingsd, buffer, size, block * LITTLEFS_BLOCK_SIZE + off);
uint64_t byteaddr = (uint64_t)block * c->block_size + off;
ptrdiff_t sector = byteaddr / vmp->backingsd->sectorsize;
ptrdiff_t sector_off = byteaddr % vmp->backingsd->sectorsize;
int32_t ret = vmp->backingsd->read(vmp->backingsd, (const uint8_t *)buffer, sector, sector_off, size);
if (ret != E_OK)
return LFS_ERR_IO;
return 0;
}
int portlfs_prog(const struct lfs_config *c, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) {
VfsMountPoint *vmp = c->context;
vmp->backingsd->write(vmp->backingsd, buffer, size, block * LITTLEFS_BLOCK_SIZE + off);
uint64_t byteaddr = (uint64_t)block * c->block_size + off;
ptrdiff_t sector = byteaddr / vmp->backingsd->sectorsize;
ptrdiff_t sector_off = byteaddr % vmp->backingsd->sectorsize;
int32_t ret = vmp->backingsd->write(vmp->backingsd, (const uint8_t *)buffer, sector, sector_off, size);
if (ret != E_OK)
return LFS_ERR_IO;
return 0;
}

View File

@ -6,7 +6,7 @@
#include "fs/littlefs/lfs.h"
#include "sysdefs/ioctl.h"
#define LITTLEFS_BLOCK_SIZE 4096
#define LITTLEFS_BLOCK_SIZE 512
struct VfsMountPoint;
struct VfsObj;