/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2008 by Frank Gevaerts * * 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 __MV_H__ #define __MV_H__ #include #include "config.h" /* FixMe: These macros are a bit nasty and perhaps misplaced here. We'll get rid of them once decided on how to proceed with multivolume. */ /* Drives are things like a disk, a card, a flash chip. They can have volumes on them */ #ifdef HAVE_MULTIDRIVE #define IF_MD(x...) x /* valist contents or empty */ #define IF_MD_NONVOID(x...) x /* valist contents or 'void' */ #define IF_MD_DRV(d) d /* drive argument or '0' */ #else /* empty definitions if no multi-drive */ #define IF_MD(x...) #define IF_MD_NONVOID(x...) void #define IF_MD_DRV(d) 0 #endif /* HAVE_MULTIDRIVE */ /* Volumes mean things that have filesystems on them, like partitions */ #ifdef HAVE_MULTIVOLUME #define IF_MV(x...) x /* valist contents or empty */ #define IF_MV_NONVOID(x...) x /* valist contents or 'void' */ #define IF_MV_VOL(v) v /* volume argument or '0' */ /* Format: "//foo/bar" * The "DEC" is pure decoration and treated as a comment. Only an unbroken * trailing string of digits within the brackets is parsed as the volume * number. * * IMPORTANT!: Adjust VOL_DEC_MAX_LEN if needed to the longest of these */ #define DEFAULT_VOL_DEC "Volume" #if (CONFIG_STORAGE & STORAGE_ATA) #define ATA_VOL_DEC "HDD" #endif #if (CONFIG_STORAGE & STORAGE_MMC) #define MMC_VOL_DEC "MMC" #endif #if (CONFIG_STORAGE & STORAGE_SD) #define SD_VOL_DEC "microSD" #endif #if (CONFIG_STORAGE & STORAGE_NAND) #define NAND_VOL_DEC "NAND" #endif #if (CONFIG_STORAGE & STORAGE_RAMDISK) #define RAMDISK_VOL_DEC "RAMDisk" #endif #if (CONFIG_STORAGE & STORAGE_HOSTFS) #ifndef HOSTFS_VOL_DEC /* overridable */ #define HOSTFS_VOL_DEC DEFAULT_VOL_DEC #endif #endif /* Characters that delimit a volume specifier at any root point in the path. The tokens must be outside of legal filename characters */ #define VOL_START_TOK '<' #define VOL_END_TOK '>' #define VOL_DEC_MAX_LEN 7 /* biggest of all xxx_VOL_DEC defines */ #define VOL_MAX_LEN (1 + VOL_DEC_MAX_LEN + 2 + 1) #define VOL_NUM_MAX 100 #else /* empty definitions if no multi-volume */ #define IF_MV(x...) #define IF_MV_NONVOID(x...) void #define IF_MV_VOL(v) 0 #endif /* HAVE_MULTIVOLUME */ #define CHECK_VOL(volume) \ ((unsigned int)IF_MV_VOL(volume) < NUM_VOLUMES) #define CHECK_DRV(drive) \ ((unsigned int)IF_MD_DRV(drive) < NUM_DRIVES) /* Volume-centric functions (in disk.c) */ void volume_recalc_free(IF_MV_NONVOID(int volume)); unsigned int volume_get_cluster_size(IF_MV_NONVOID(int volume)); void volume_size(IF_MV(int volume,) unsigned long *size, unsigned long *free); #ifdef HAVE_DIRCACHE bool volume_ismounted(IF_MV_NONVOID(int volume)); #endif #ifdef HAVE_HOTSWAP bool volume_removable(int volume); bool volume_present(int volume); #endif /* HAVE_HOTSWAP */ #ifdef HAVE_MULTIDRIVE int volume_drive(int volume); #else /* !HAVE_MULTIDRIVE */ static inline int volume_drive(int volume) { return 0; (void)volume; } #endif /* HAVE_MULTIDRIVE */ #endif /* __MV_H__ */