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/fs_defines.h | 108 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 firmware/include/fs_defines.h (limited to 'firmware/include/fs_defines.h') 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