From: "Benoît Thébaudeau" <benoit.thebaudeau@advansee.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/3] FAT: implement fat_set_blk_dev(), convert cmd_fat.c
Date: Mon, 8 Oct 2012 21:11:11 +0200 (CEST) [thread overview]
Message-ID: <781429892.6397781.1349723471691.JavaMail.root@advansee.com> (raw)
In-Reply-To: <1349720127-13169-3-git-send-email-swarren@wwwdotorg.org>
Hi Stephen,
On Monday, October 8, 2012 8:15:27 PM, Stephen Warren wrote:
> This makes the FAT filesystem API more consistent with other
> block-based
> filesystems. If in the future standard multi-filesystem commands such
> as
> "ls" or "load" are implemented, having FAT work the same way as other
> filesystems will be necessary.
>
> Convert cmd_fat.c to the new API, so the code looks more like other
> files
> implementing the same commands for other filesystems.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> common/cmd_fat.c | 8 +++---
> fs/fat/fat.c | 65
> ++++++++++++++++++++++++++---------------------------
> include/fat.h | 1 +
> 3 files changed, 37 insertions(+), 37 deletions(-)
>
> diff --git a/common/cmd_fat.c b/common/cmd_fat.c
> index 5a5698b..c38302d 100644
> --- a/common/cmd_fat.c
> +++ b/common/cmd_fat.c
> @@ -55,7 +55,7 @@ int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int
> argc, char * const argv[])
> return 1;
>
> dev = dev_desc->dev;
> - if (fat_register_device(dev_desc,part)!=0) {
> + if (fat_set_blk_dev(dev_desc, &info) != 0) {
> printf("\n** Unable to use %s %d:%d for fatload **\n",
> argv[1], dev, part);
> return 1;
> @@ -111,7 +111,7 @@ int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int
> argc, char * const argv[])
> return 1;
>
> dev = dev_desc->dev;
> - if (fat_register_device(dev_desc,part)!=0) {
> + if (fat_set_blk_dev(dev_desc, &info) != 0) {
> printf("\n** Unable to use %s %d:%d for fatls **\n",
> argv[1], dev, part);
> return 1;
> @@ -149,7 +149,7 @@ int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag,
> int argc, char * const argv[])
> return 1;
>
> dev = dev_desc->dev;
> - if (fat_register_device(dev_desc,part)!=0) {
> + if (fat_set_blk_dev(dev_desc, &info) != 0) {
> printf("\n** Unable to use %s %d:%d for fatinfo **\n",
> argv[1], dev, part);
> return 1;
> @@ -185,7 +185,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int
> flag,
>
> dev = dev_desc->dev;
>
> - if (fat_register_device(dev_desc, part) != 0) {
> + if (fat_set_blk_dev(dev_desc, &info) != 0) {
> printf("\n** Unable to use %s %d:%d for fatwrite **\n",
> argv[1], dev, part);
> return 1;
> diff --git a/fs/fat/fat.c b/fs/fat/fat.c
> index 1e0d2a3..f205df6 100644
> --- a/fs/fat/fat.c
> +++ b/fs/fat/fat.c
> @@ -61,42 +61,12 @@ static int disk_read(__u32 block, __u32
> nr_blocks, void *buf)
> cur_part_info.start + block, nr_blocks, buf);
> }
>
> -int fat_register_device(block_dev_desc_t * dev_desc, int part_no)
> +int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t
> *info)
> {
> ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
>
> - /* First close any currently found FAT filesystem */
> - cur_dev = NULL;
> -
> -#if (defined(CONFIG_CMD_IDE) || \
> - defined(CONFIG_CMD_SATA) || \
> - defined(CONFIG_CMD_SCSI) || \
> - defined(CONFIG_CMD_USB) || \
> - defined(CONFIG_MMC) || \
> - defined(CONFIG_SYSTEMACE) )
> -
> - /* Read the partition table, if present */
> - if (!get_partition_info(dev_desc, part_no, &cur_part_info)) {
> - cur_dev = dev_desc;
> - }
> -#endif
> -
> - /* Otherwise it might be a superfloppy (whole-disk FAT filesystem)
> */
> - if (!cur_dev) {
> - if (part_no != 0) {
> - printf("** Partition %d not valid on device %d **\n",
> - part_no, dev_desc->dev);
> - return -1;
> - }
> -
> - cur_dev = dev_desc;
> - cur_part_info.part = 0;
> - cur_part_info.start = 0;
> - cur_part_info.size = dev_desc->lba;
> - cur_part_info.blksz = dev_desc->blksz;
> - memset(cur_part_info.name, 0, sizeof(cur_part_info.name));
> - memset(cur_part_info.type, 0, sizeof(cur_part_info.type));
> - }
> + cur_dev = dev_desc;
> + cur_part_info = *info;
>
> /* Make sure it has a valid FAT header */
> if (disk_read(0, 1, buffer) != 1) {
> @@ -120,6 +90,35 @@ int fat_register_device(block_dev_desc_t *
> dev_desc, int part_no)
> return -1;
> }
>
> +int fat_register_device(block_dev_desc_t *dev_desc, int part_no)
> +{
> + disk_partition_t info;
> +
> + /* First close any currently found FAT filesystem */
> + cur_dev = NULL;
> +
> + /* Read the partition table, if present */
> + if (!get_partition_info(dev_desc, part_no, &info)) {
This should rather be:
+ if (get_partition_info(dev_desc, part_no, &info)) {
Here, the code is handling the case of FAT filling the storage device without
any partition.
> + if (part_no != 0) {
> + printf("** Partition %d not valid on device %d **\n",
> + part_no, dev_desc->dev);
> + return -1;
> + }
> +
> + info.part = 0;
> + info.start = 0;
> + info.size = dev_desc->lba;
> + info.blksz = dev_desc->blksz;
> + memset(info.name, 0, sizeof(info.name));
> + memset(info.type, 0, sizeof(info.type));
> +#ifdef CONFIG_PARTITION_UUIDS
> + memset(info.uuid, 0, sizeof(info.uuid));
> +#endif
> + info.bootable = 0;
> + }
> +
> + return fat_set_blk_dev(dev_desc, &info);
> +}
>
> /*
> * Get the first occurence of a directory delimiter ('/' or '\') in
> a string.
> diff --git a/include/fat.h b/include/fat.h
> index cc85b06..706cd7a 100644
> --- a/include/fat.h
> +++ b/include/fat.h
> @@ -212,6 +212,7 @@ long file_fat_read_at(const char *filename,
> unsigned long pos, void *buffer,
> unsigned long maxsize);
> long file_fat_read(const char *filename, void *buffer, unsigned long
> maxsize);
> const char *file_getfsname(int idx);
> +int fat_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
> int fat_register_device(block_dev_desc_t *dev_desc, int part_no);
>
> int file_fat_write(const char *filename, void *buffer, unsigned long
> maxsize);
Best regards,
Beno?t
prev parent reply other threads:[~2012-10-08 19:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-08 18:15 [U-Boot] [PATCH 1/3] part: add partition number to disk_partition_t Stephen Warren
2012-10-08 18:15 ` [U-Boot] [PATCH 2/3] FAT: make use of disk_partition_t.part Stephen Warren
2012-10-08 18:15 ` [U-Boot] [PATCH 3/3] FAT: implement fat_set_blk_dev(), convert cmd_fat.c Stephen Warren
2012-10-08 19:11 ` Benoît Thébaudeau [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=781429892.6397781.1349723471691.JavaMail.root@advansee.com \
--to=benoit.thebaudeau@advansee.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox