summaryrefslogtreecommitdiffstats
path: root/firmware/export/storage.h
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2014-02-07 18:12:31 +0100
committerThomas Martitz <kugel@rockbox.org>2014-02-23 20:23:51 +0100
commit77f19f75eb3661b3e3966da20effa2631ed380f1 (patch)
tree1e29f482e6de115cf6cdbf9958cba3d7ce8dc6af /firmware/export/storage.h
parent706e6b7a75339cadc7b8a856a2eace68f89bb168 (diff)
downloadrockbox-77f19f75eb3661b3e3966da20effa2631ed380f1.tar.gz
rockbox-77f19f75eb3661b3e3966da20effa2631ed380f1.zip
storage: Add STORAGE_HOSTFS
CONFIG_STORAGE & STORAGE_HOSTFS allows to use parts of the storage_* API to be compiled for application targets without compiling storage.c or performing actually raw storage access. This is primarily to enable application targets to implement HAVE_MULTIVOMULE/HAVE_HOTSWAP (in a later commit). SIMULATOR uses the same mechanism without explicitely defining STORAGE_HOSTFS (how to add a bit to an existing preprocessor token?). Change-Id: Ib3f8ee0d5231e2ed21ff00842d51e32bc4fc7292
Diffstat (limited to 'firmware/export/storage.h')
-rw-r--r--firmware/export/storage.h32
1 files changed, 25 insertions, 7 deletions
diff --git a/firmware/export/storage.h b/firmware/export/storage.h
index 1793e385df..8e7281d523 100644
--- a/firmware/export/storage.h
+++ b/firmware/export/storage.h
@@ -26,6 +26,10 @@
#include "config.h" /* for HAVE_MULTIDRIVE or not */
#include "mv.h"
+#if (CONFIG_STORAGE & STORAGE_HOSTFS) || defined(SIMULATOR)
+#define HAVE_HOSTFS
+#endif
+
#if (CONFIG_STORAGE & STORAGE_SD)
#include "sd.h"
#endif
@@ -51,19 +55,20 @@ struct storage_info
char *revision;
};
-#if (CONFIG_STORAGE == 0)
+#ifdef HAVE_HOSTFS
+#include "hostfs.h"
/* stubs for the plugin api */
static inline void stub_storage_sleep(void) {}
static inline void stub_storage_spin(void) {}
static inline void stub_storage_spindown(int timeout) { (void)timeout; }
#endif
-#if defined(CONFIG_STORAGE) && !defined(CONFIG_STORAGE_MULTI)
+#if !defined(CONFIG_STORAGE_MULTI) || defined(HAVE_HOSTFS)
/* storage_spindown, storage_sleep and storage_spin are passed as
* pointers, which doesn't work with argument-macros.
*/
#define storage_num_drives() NUM_DRIVES
- #if (CONFIG_STORAGE == 0) /* application */
+ #if defined(HAVE_HOSTFS)
#define STORAGE_FUNCTION(NAME) (stub_## NAME)
#define storage_spindown stub_storage_spindown
#define storage_sleep stub_storage_sleep
@@ -73,8 +78,21 @@ static inline void stub_storage_spindown(int timeout) { (void)timeout; }
#define storage_sleepnow()
#define storage_disk_is_active() 0
#define storage_soft_reset()
- #define storage_init()
- #define storage_close()
+ #define storage_init() hostfs_init()
+ #ifdef HAVE_STORAGE_FLUSH
+ #define storage_flush() hostfs_flush()
+ #endif
+ #define storage_last_disk_activity() (-1)
+ #define storage_spinup_time() 0
+ #define storage_get_identify() (NULL) /* not actually called anywher */
+
+ #ifdef STORAGE_GET_INFO
+ #error storage_get_info not implemented
+ #endif
+ #ifdef HAVE_HOTSWAP
+ #define storage_removable(drive) hostfs_removable(IF_MD(drive))
+ #define storage_present(drive) hostfs_present(IF_MD(drive))
+ #endif
#elif (CONFIG_STORAGE & STORAGE_ATA)
#define STORAGE_FUNCTION(NAME) (ata_## NAME)
#define storage_spindown ata_spindown
@@ -205,9 +223,9 @@ static inline void stub_storage_spindown(int timeout) { (void)timeout; }
#else
//#error No storage driver!
#endif
-#else /* NOT CONFIG_STORAGE_MULTI and PLATFORM_NATIVE*/
+#else /* CONFIG_STORAGE_MULTI || !HAVE_HOSTFS */
-/* Simulator and multi-driver use normal functions */
+/* Multi-driver use normal functions */
void storage_enable(bool on);
void storage_sleep(void);