diff options
author | Thomas Martitz <kugel@rockbox.org> | 2014-02-07 18:12:31 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2014-02-23 20:23:51 +0100 |
commit | 77f19f75eb3661b3e3966da20effa2631ed380f1 (patch) | |
tree | 1e29f482e6de115cf6cdbf9958cba3d7ce8dc6af /firmware/export/storage.h | |
parent | 706e6b7a75339cadc7b8a856a2eace68f89bb168 (diff) | |
download | rockbox-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.h | 32 |
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 @@ | |||
26 | #include "config.h" /* for HAVE_MULTIDRIVE or not */ | 26 | #include "config.h" /* for HAVE_MULTIDRIVE or not */ |
27 | #include "mv.h" | 27 | #include "mv.h" |
28 | 28 | ||
29 | #if (CONFIG_STORAGE & STORAGE_HOSTFS) || defined(SIMULATOR) | ||
30 | #define HAVE_HOSTFS | ||
31 | #endif | ||
32 | |||
29 | #if (CONFIG_STORAGE & STORAGE_SD) | 33 | #if (CONFIG_STORAGE & STORAGE_SD) |
30 | #include "sd.h" | 34 | #include "sd.h" |
31 | #endif | 35 | #endif |
@@ -51,19 +55,20 @@ struct storage_info | |||
51 | char *revision; | 55 | char *revision; |
52 | }; | 56 | }; |
53 | 57 | ||
54 | #if (CONFIG_STORAGE == 0) | 58 | #ifdef HAVE_HOSTFS |
59 | #include "hostfs.h" | ||
55 | /* stubs for the plugin api */ | 60 | /* stubs for the plugin api */ |
56 | static inline void stub_storage_sleep(void) {} | 61 | static inline void stub_storage_sleep(void) {} |
57 | static inline void stub_storage_spin(void) {} | 62 | static inline void stub_storage_spin(void) {} |
58 | static inline void stub_storage_spindown(int timeout) { (void)timeout; } | 63 | static inline void stub_storage_spindown(int timeout) { (void)timeout; } |
59 | #endif | 64 | #endif |
60 | 65 | ||
61 | #if defined(CONFIG_STORAGE) && !defined(CONFIG_STORAGE_MULTI) | 66 | #if !defined(CONFIG_STORAGE_MULTI) || defined(HAVE_HOSTFS) |
62 | /* storage_spindown, storage_sleep and storage_spin are passed as | 67 | /* storage_spindown, storage_sleep and storage_spin are passed as |
63 | * pointers, which doesn't work with argument-macros. | 68 | * pointers, which doesn't work with argument-macros. |
64 | */ | 69 | */ |
65 | #define storage_num_drives() NUM_DRIVES | 70 | #define storage_num_drives() NUM_DRIVES |
66 | #if (CONFIG_STORAGE == 0) /* application */ | 71 | #if defined(HAVE_HOSTFS) |
67 | #define STORAGE_FUNCTION(NAME) (stub_## NAME) | 72 | #define STORAGE_FUNCTION(NAME) (stub_## NAME) |
68 | #define storage_spindown stub_storage_spindown | 73 | #define storage_spindown stub_storage_spindown |
69 | #define storage_sleep stub_storage_sleep | 74 | #define storage_sleep stub_storage_sleep |
@@ -73,8 +78,21 @@ static inline void stub_storage_spindown(int timeout) { (void)timeout; } | |||
73 | #define storage_sleepnow() | 78 | #define storage_sleepnow() |
74 | #define storage_disk_is_active() 0 | 79 | #define storage_disk_is_active() 0 |
75 | #define storage_soft_reset() | 80 | #define storage_soft_reset() |
76 | #define storage_init() | 81 | #define storage_init() hostfs_init() |
77 | #define storage_close() | 82 | #ifdef HAVE_STORAGE_FLUSH |
83 | #define storage_flush() hostfs_flush() | ||
84 | #endif | ||
85 | #define storage_last_disk_activity() (-1) | ||
86 | #define storage_spinup_time() 0 | ||
87 | #define storage_get_identify() (NULL) /* not actually called anywher */ | ||
88 | |||
89 | #ifdef STORAGE_GET_INFO | ||
90 | #error storage_get_info not implemented | ||
91 | #endif | ||
92 | #ifdef HAVE_HOTSWAP | ||
93 | #define storage_removable(drive) hostfs_removable(IF_MD(drive)) | ||
94 | #define storage_present(drive) hostfs_present(IF_MD(drive)) | ||
95 | #endif | ||
78 | #elif (CONFIG_STORAGE & STORAGE_ATA) | 96 | #elif (CONFIG_STORAGE & STORAGE_ATA) |
79 | #define STORAGE_FUNCTION(NAME) (ata_## NAME) | 97 | #define STORAGE_FUNCTION(NAME) (ata_## NAME) |
80 | #define storage_spindown ata_spindown | 98 | #define storage_spindown ata_spindown |
@@ -205,9 +223,9 @@ static inline void stub_storage_spindown(int timeout) { (void)timeout; } | |||
205 | #else | 223 | #else |
206 | //#error No storage driver! | 224 | //#error No storage driver! |
207 | #endif | 225 | #endif |
208 | #else /* NOT CONFIG_STORAGE_MULTI and PLATFORM_NATIVE*/ | 226 | #else /* CONFIG_STORAGE_MULTI || !HAVE_HOSTFS */ |
209 | 227 | ||
210 | /* Simulator and multi-driver use normal functions */ | 228 | /* Multi-driver use normal functions */ |
211 | 229 | ||
212 | void storage_enable(bool on); | 230 | void storage_enable(bool on); |
213 | void storage_sleep(void); | 231 | void storage_sleep(void); |