From 19cd9d185fbda31aebb6e38f1c25f551cc35a9f6 Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 19 May 2017 18:58:42 +0200 Subject: [PATCH] mufs: initial support for mounting/formatting --- include/fs/mufs.h | 12 ++++++++++++ source/fs/mufs/super.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 include/fs/mufs.h create mode 100644 source/fs/mufs/super.c diff --git a/include/fs/mufs.h b/include/fs/mufs.h new file mode 100644 index 0000000..d690dde --- /dev/null +++ b/include/fs/mufs.h @@ -0,0 +1,12 @@ +#pragma once + +struct flash_dev; + +struct mufs { + struct flash_dev *dev; + uint32_t nblocks; + uint32_t root; +}; + +int mufs_mount(struct mufs *fs, struct flash_dev *dev); +int mufs_format(struct flash_dev *dev); diff --git a/source/fs/mufs/super.c b/source/fs/mufs/super.c new file mode 100644 index 0000000..0531947 --- /dev/null +++ b/source/fs/mufs/super.c @@ -0,0 +1,47 @@ +#include +#include +#include + +#include + +#include + +struct mufs_super { + char magic[4]; + uint32_t nblocks; + uint32_t root; +} __attribute__((packed)); + +int mufs_mount(struct mufs *fs, struct flash_dev *dev) +{ + struct mufs_super super; + + if (!fs || !dev) + return -1; + + if (flash_read(dev, 0, &super, sizeof super) == 0) + return -1; + + if (memcmp(super.magic, "mufs", 4) != 0) + return -1; + + fs->dev = dev; + fs->nblocks = super.nblocks; + fs->root = super.root; + + return 0; +} + +int mufs_format(struct flash_dev *dev) +{ + struct mufs_super super; + + memcpy(super.magic, "mufs", 4); + super.nblocks = flash_get_capacity(dev) >> dev->log2_block_size; + super.root = 0; + + if (flash_write(dev, 0, &super, sizeof super) == 0) + return -1; + + return 0; +}