Skip to content

Commit

Permalink
Do some housekeeping with fat.h and SECTOR_SIZE
Browse files Browse the repository at this point in the history
Many includes of fat.h are pointless. Some includes are just for
SECTOR_SIZE. Add a file 'firmware/include/fs_defines.h' for that
and to define tuneable values that were scattered amongst various
headers.

Remove some local definitions of SECTOR_SIZE since they have to be
in agreement with the rest of the fs code anyway.

(We'll see what's in fact pointless in a moment ;)

Change-Id: I9ba183bf58bd87f5c45eba7bd675c7e2c1c18ed5
  • Loading branch information
Michael Sevakis committed Mar 13, 2017
1 parent 70c9291 commit 6db8002
Show file tree
Hide file tree
Showing 29 changed files with 118 additions and 105 deletions.
2 changes: 1 addition & 1 deletion apps/debug_menu.c
Expand Up @@ -63,7 +63,7 @@
#include "usb.h"
#include "rtc.h"
#include "storage.h"
#include "fat.h"
#include "fs_defines.h"
#include "eeprom_24cxx.h"
#if (CONFIG_STORAGE & STORAGE_MMC) || (CONFIG_STORAGE & STORAGE_SD)
#include "sdmmc.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/gigabeat.c
Expand Up @@ -29,7 +29,6 @@
#include "lcd.h"
#include "../kernel-internal.h"
#include "storage.h"
#include "fat.h"
#include "file_internal.h"
#include "disk.h"
#include "font.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/ipod.c
Expand Up @@ -32,7 +32,6 @@
#include "lcd.h"
#include "../kernel-internal.h"
#include "ata.h"
#include "fat.h"
#include "file_internal.h"
#include "disk.h"
#include "font.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/ipod6g.c
Expand Up @@ -32,7 +32,6 @@
#include "../kernel-internal.h"
#include "file_internal.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "backlight.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/ipodnano2g.c
Expand Up @@ -34,7 +34,6 @@
#include "../kernel-internal.h"
#include "file_internal.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "backlight.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/meizu_m3.c
Expand Up @@ -32,7 +32,6 @@
#include "lcd.h"
#include "../kernel-internal.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "backlight.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/meizu_m6sl.c
Expand Up @@ -30,7 +30,6 @@
#include "kernel.h"
#include "thread.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "adc.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/meizu_m6sp.c
Expand Up @@ -30,7 +30,6 @@
#include "kernel.h"
#include "thread.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "button.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/mini2440.c
Expand Up @@ -30,7 +30,6 @@
#include "../kernel-internal.h"
#include "storage.h"
#include "file_internal.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "backlight.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/mrobe500.c
Expand Up @@ -27,7 +27,6 @@
#include "../kernel-internal.h"
#include "storage.h"
#include "file_internal.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "adc.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/sansaview.c
Expand Up @@ -35,7 +35,6 @@ SANSA VIEW: TESTING CODE
#include "lcd.h"
#include "../kernel-internal.h"
#include "storage.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "backlight.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/telechips.c
Expand Up @@ -31,7 +31,6 @@
#include "../kernel-internal.h"
#include "storage.h"
#include "file_internal.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "button.h"
Expand Down
1 change: 0 additions & 1 deletion bootloader/tpj1022.c
Expand Up @@ -32,7 +32,6 @@
#include "thread.h"
#include "storage.h"
#include "file_internal.h"
#include "fat.h"
#include "disk.h"
#include "font.h"
#include "panic.h"
Expand Down
2 changes: 1 addition & 1 deletion firmware/common/disk_cache.c
Expand Up @@ -23,7 +23,7 @@
#include "system.h"
#include "linked_list.h"
#include "disk_cache.h"
#include "fat.h" /* for SECTOR_SIZE */
#include "fs_defines.h"
#include "bitarray.h"

/* Cache: LRU cache with separately-chained hashtable
Expand Down
3 changes: 1 addition & 2 deletions firmware/drivers/ata.c
Expand Up @@ -34,10 +34,9 @@
#include "ata_idle_notify.h"
#include "ata-driver.h"
#include "ata-defines.h"
#include "fs_defines.h"
#include "storage.h"

#define SECTOR_SIZE 512

#define SELECT_DEVICE1 0x10
#define SELECT_LBA 0x40

Expand Down
8 changes: 0 additions & 8 deletions firmware/export/fat.h
Expand Up @@ -48,14 +48,6 @@
#define FAT_MAX_TRANSFER_SIZE 256
#endif

/* still experimental? */
/* increasing this will increase the total memory used by the cache; the
cache, as noted in disk_cache.h, has other minimum requirements that may
prevent reducing its number of entries in order to compensate */
#ifndef SECTOR_SIZE
#define SECTOR_SIZE 512
#endif

/**
****************************************************************************/

Expand Down
23 changes: 0 additions & 23 deletions firmware/include/disk_cache.h
Expand Up @@ -21,29 +21,6 @@
#ifndef DISK_CACHE_H
#define DISK_CACHE_H

/* This needs enough for all file handles to have a buffer in the worst case
* plus at least one reserved exclusively for the cache client and a couple
* for other file system code. The buffers are put to use by the cache if not
* taken for another purpose (meaning nothing is wasted sitting fallow).
*
* One map per volume is maintained in order to avoid collisions between
* volumes that would slow cache probing. DC_MAP_NUM_ENTRIES is the number
* for each map per volume. The buffers themselves are shared.
*/
#if MEMORYSIZE < 8
#define DC_NUM_ENTRIES 32
#define DC_MAP_NUM_ENTRIES 128
#elif MEMORYSIZE <= 32
#define DC_NUM_ENTRIES 48
#define DC_MAP_NUM_ENTRIES 128
#else /* MEMORYSIZE > 32 */
#define DC_NUM_ENTRIES 64
#define DC_MAP_NUM_ENTRIES 256
#endif /* MEMORYSIZE */

/* this _could_ be larger than a sector if that would ever be useful */
#define DC_CACHE_BUFSIZE SECTOR_SIZE

#include "mutex.h"
#include "mv.h"

Expand Down
43 changes: 1 addition & 42 deletions firmware/include/file_internal.h
Expand Up @@ -28,55 +28,14 @@
#include "mutex.h"
#include "mrsw_lock.h"
#include "fs_attr.h"
#include "fs_defines.h"
#include "fat.h"
#ifdef HAVE_DIRCACHE
#include "dircache.h"
#endif

/** Tuneable parameters **/

/* limits for number of open descriptors - if you increase these values, make
certain that the disk cache has enough available buffers */
#define MAX_OPEN_FILES 11
#define MAX_OPEN_DIRS 12
#define MAX_OPEN_HANDLES (MAX_OPEN_FILES+MAX_OPEN_DIRS)

/* internal functions open streams as well; make sure they don't fail if all
user descs are busy; this needs to be at least the greatest quantity needed
at once by all internal functions */
#ifdef HAVE_DIRCACHE
#define AUX_FILEOBJS 3
#else
#define AUX_FILEOBJS 2
#endif

/* number of components statically allocated to handle the vast majority
of path depths; should maybe be tuned for >= 90th percentile but for now,
imma just guessing based on something like:
root + 'Music' + 'Artist' + 'Album' + 'Disc N' + filename */
#define STATIC_PATHCOMP_NUM 6

#define MAX_COMPNAME 260

/* unsigned value that will also hold the off_t range we need without
overflow */
#define file_size_t uint32_t

#ifdef __USE_FILE_OFFSET64
/* if we want, we can deal with files up to 2^32-1 bytes-- the full FAT16/32
range */
#define FILE_SIZE_MAX (0xffffffffu)
#else
/* file contents and size will be preserved by the APIs so long as ftruncate()
isn't used; bytes passed 2^31-1 will not accessible nor will writes succeed
that would extend the file beyond the max for a 32-bit off_t */
#define FILE_SIZE_MAX (0x7fffffffu)
#endif

/* if file is "large(ish)", then get rid of the contents now rather than
lazily when the file is synced or closed in order to free-up space */
#define O_TRUNC_THRESH 65536

/* default attributes when creating new files and directories */
#define ATTR_NEW_FILE (ATTR_ARCHIVE)
#define ATTR_NEW_DIRECTORY (ATTR_DIRECTORY)
Expand Down
108 changes: 108 additions & 0 deletions firmware/include/fs_defines.h
@@ -0,0 +1,108 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2017 by Michael Sevakis
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef FS_DEFINES_H
#define FS_DEFINES_H

/** Tuneable parameters **/

#if 0
/* Define this just in case you're doing something that may crash a lot and
want less write caching */
#define FS_MIN_WRITECACHING
#endif

#ifndef MAX_PATH
#define MAX_PATH 260
#endif

#define MAX_COMPNAME 260

/* still experimental? */
/* increasing this will increase the total memory used by the cache; the
cache, as noted in disk_cache.h, has other minimum requirements that may
prevent reducing its number of entries in order to compensate */
#ifndef SECTOR_SIZE
#define SECTOR_SIZE 512
#endif

/* limits for number of open descriptors - if you increase these values, make
certain that the disk cache has enough available buffers */
#define MAX_OPEN_FILES 11
#define MAX_OPEN_DIRS 12

/* internal functions open streams as well; make sure they don't fail if all
user descs are busy; this needs to be at least the greatest quantity needed
at once by all internal functions */
#ifdef HAVE_DIRCACHE
#define AUX_FILEOBJS 3
#else
#define AUX_FILEOBJS 2
#endif

/* number of components statically allocated to handle the vast majority
of path depths; should maybe be tuned for >= 90th percentile but for now,
imma just guessing based on something like:
root + 'Music' + 'Artist' + 'Album' + 'Disc N' + filename */
#define STATIC_PATHCOMP_NUM 6

/* unsigned value that will also hold the off_t range we need without
overflow */
#define file_size_t uint32_t

#ifdef __USE_FILE_OFFSET64
/* if we want, we can deal with files up to 2^32-1 bytes-- the full FAT16/32
range */
#define FILE_SIZE_MAX (0xffffffffu)
#else
/* file contents and size will be preserved by the APIs so long as ftruncate()
isn't used; bytes passed 2^31-1 will not accessible nor will writes succeed
that would extend the file beyond the max for a 32-bit off_t */
#define FILE_SIZE_MAX (0x7fffffffu)
#endif

/* if file is "large(ish)", then get rid of the contents now rather than
lazily when the file is synced or closed in order to free-up space */
#define O_TRUNC_THRESH 65536

/* This needs enough for all file handles to have a buffer in the worst case
* plus at least one reserved exclusively for the cache client and a couple
* for other file system code. The buffers are put to use by the cache if not
* taken for another purpose (meaning nothing is wasted sitting fallow).
*
* One map per volume is maintained in order to avoid collisions between
* volumes that would slow cache probing. IOC_MAP_NUM_ENTRIES is the number
* for each map per volume. The buffers themselves are shared.
*/
#if MEMORYSIZE < 8
#define DC_NUM_ENTRIES 32
#define DC_MAP_NUM_ENTRIES 128
#elif MEMORYSIZE <= 32
#define DC_NUM_ENTRIES 48
#define DC_MAP_NUM_ENTRIES 128
#else /* MEMORYSIZE > 32 */
#define DC_NUM_ENTRIES 64
#define DC_MAP_NUM_ENTRIES 256
#endif /* MEMORYSIZE */

/* this _could_ be larger than a sector if that would ever be useful */
#define DC_CACHE_BUFSIZE SECTOR_SIZE

#endif /* FS_DEFINES_H */
2 changes: 1 addition & 1 deletion firmware/target/arm/as3525/sd-as3525.c
Expand Up @@ -23,7 +23,7 @@
/* Driver for the ARM PL180 SD/MMC controller inside AS3525 SoC */

#include "config.h" /* for HAVE_MULTIDRIVE & AMS_OF_SIZE */
#include "fat.h"
#include "fs_defines.h"
#include "thread.h"
#include "led.h"
#include "sdmmc.h"
Expand Down
2 changes: 1 addition & 1 deletion firmware/target/arm/as3525/sd-as3525v2.c
Expand Up @@ -21,7 +21,7 @@
****************************************************************************/

#include "config.h" /* for HAVE_MULTIVOLUME */
#include "fat.h"
#include "fs_defines.h"
#include "thread.h"
#include "gcc_extensions.h"
#include "led.h"
Expand Down
3 changes: 1 addition & 2 deletions firmware/target/arm/ata-nand-telechips.c
Expand Up @@ -28,8 +28,7 @@
#include "panic.h"
#include "nand_id.h"
#include "storage.h"

#define SECTOR_SIZE 512
#include "fs_defines.h"

/* ECC on read is implemented on the assumption that MLC-style 4-bit correction
is always used regardless of NAND chip type. This assumption is true for at
Expand Down
2 changes: 1 addition & 1 deletion firmware/target/arm/imx233/nand-imx233.c
Expand Up @@ -23,7 +23,7 @@
#include "gpmi-imx233.h"
#include "pinctrl-imx233.h"
#include "button-target.h"
#include "fat.h"
#include "fs_defines.h"
#include "disk.h"
#include "usb.h"
#include "debug.h"
Expand Down
1 change: 0 additions & 1 deletion firmware/target/arm/imx233/sdmmc-imx233.c
Expand Up @@ -27,7 +27,6 @@
#include "pinctrl-imx233.h"
#include "partitions-imx233.h"
#include "button-target.h"
#include "fat.h"
#include "disk.h"
#include "usb.h"
#include "debug.h"
Expand Down
1 change: 0 additions & 1 deletion firmware/target/arm/pnx0101/iriver-ifp7xx/usb-ifp7xx.c
Expand Up @@ -25,7 +25,6 @@
#include "system.h"
#include "debug.h"
#include "ata.h"
#include "fat.h"
#include "disk.h"
#include "panic.h"
#include "lcd.h"
Expand Down
2 changes: 1 addition & 1 deletion firmware/target/arm/pp/ata-sd-pp.c
Expand Up @@ -35,8 +35,8 @@
#include "usb.h"
#include "sd.h"
#include "storage.h"
#include "fs_defines.h"

#define SECTOR_SIZE 512
#define BLOCKS_PER_BANK 0x7a7800

/* Comparing documentations of various MMC/SD controllers revealed, */
Expand Down

0 comments on commit 6db8002

Please sign in to comment.