From 6db80020b45ae22b19524b01f60d0653d70ac7ca Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Sun, 12 Mar 2017 22:05:44 -0400 Subject: Do some housekeeping with fat.h and SECTOR_SIZE 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 --- firmware/include/disk_cache.h | 23 --------- firmware/include/file_internal.h | 43 +--------------- firmware/include/fs_defines.h | 108 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 65 deletions(-) create mode 100644 firmware/include/fs_defines.h (limited to 'firmware/include') diff --git a/firmware/include/disk_cache.h b/firmware/include/disk_cache.h index 725b3778cc..79b2ccf2c6 100644 --- a/firmware/include/disk_cache.h +++ b/firmware/include/disk_cache.h @@ -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" diff --git a/firmware/include/file_internal.h b/firmware/include/file_internal.h index 5893737833..d62b5a8541 100644 --- a/firmware/include/file_internal.h +++ b/firmware/include/file_internal.h @@ -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) diff --git a/firmware/include/fs_defines.h b/firmware/include/fs_defines.h new file mode 100644 index 0000000000..538c4b36cd --- /dev/null +++ b/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 */ -- cgit v1.2.3