From c0a5a67387c4eec3db3bad4da77ba5126faf03c4 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Fri, 17 Jul 2009 22:28:49 +0000 Subject: Commit FS#9545, storage cleanup and multi-driver support git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21933 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/storage.h | 270 +++++++++++++++++++++++----------------------- 1 file changed, 132 insertions(+), 138 deletions(-) (limited to 'firmware/export/storage.h') diff --git a/firmware/export/storage.h b/firmware/export/storage.h index 47d8abda52..dbcc7a69ab 100644 --- a/firmware/export/storage.h +++ b/firmware/export/storage.h @@ -23,7 +23,7 @@ #define __STORAGE_H__ #include -#include "config.h" /* for HAVE_MULTIVOLUME or not */ +#include "config.h" /* for HAVE_MULTIDRIVE or not */ #include "mv.h" #if (CONFIG_STORAGE & STORAGE_SD) @@ -51,154 +51,147 @@ struct storage_info char *revision; }; -#ifndef SIMULATOR - #ifndef CONFIG_STORAGE_MULTI - /* storage_spindown, storage_sleep and storage_spin are passed as - * pointers, which doesn't work with argument-macros. - */ - #if (CONFIG_STORAGE & STORAGE_ATA) - #define storage_spindown ata_spindown - #define storage_sleep ata_sleep - #define storage_spin ata_spin - - #define storage_enable(on) ata_enable(on) - #define storage_sleepnow() ata_sleepnow() - #define storage_disk_is_active() ata_disk_is_active() - #define storage_soft_reset() ata_soft_reset() - #define storage_init() ata_init() - #define storage_close() ata_close() - #define storage_read_sectors(drive, start, count, buf) ata_read_sectors(IF_MV2(drive,) start, count, buf) - #define storage_write_sectors(drive, start, count, buf) ata_write_sectors(IF_MV2(drive,) start, count, buf) - #define storage_last_disk_activity() ata_last_disk_activity() - #define storage_spinup_time() ata_spinup_time() - #define storage_get_identify() ata_get_identify() - - #ifdef STORAGE_GET_INFO - #define storage_get_info(drive, info) ata_get_info(IF_MV2(drive,) info) - #endif - #ifdef HAVE_HOTSWAP - #define storage_removable(drive) ata_removable(IF_MV(drive)) - #define storage_present(drive) ata_present(IF_MV(drive)) - #endif - #elif (CONFIG_STORAGE & STORAGE_SD) - #define storage_spindown sd_spindown - #define storage_sleep sd_sleep - #define storage_spin sd_spin - - #define storage_enable(on) sd_enable(on) - #define storage_sleepnow() sd_sleepnow() - #define storage_disk_is_active() 0 - #define storage_soft_reset() (void)0 - #define storage_init() sd_init() - #define storage_close() sd_close() - #define storage_read_sectors(drive, start, count, buf) sd_read_sectors(IF_MV2(drive,) start, count, buf) - #define storage_write_sectors(drive, start, count, buf) sd_write_sectors(IF_MV2(drive,) start, count, buf) - #define storage_last_disk_activity() sd_last_disk_activity() - #define storage_spinup_time() 0 - #define storage_get_identify() sd_get_identify() - - #ifdef STORAGE_GET_INFO - #define storage_get_info(drive, info) sd_get_info(IF_MV2(drive,) info) - #endif - #ifdef HAVE_HOTSWAP - #define storage_removable(drive) sd_removable(IF_MV(drive)) - #define storage_present(drive) sd_present(IF_MV(drive)) - #endif - #elif (CONFIG_STORAGE & STORAGE_MMC) - #define storage_spindown mmc_spindown - #define storage_sleep mmc_sleep - #define storage_spin mmc_spin - - #define storage_enable(on) mmc_enable(on) - #define storage_sleepnow() mmc_sleepnow() - #define storage_disk_is_active() mmc_disk_is_active() - #define storage_soft_reset() (void)0 - #define storage_init() mmc_init() - #define storage_close() mmc_close() - #define storage_read_sectors(drive, start, count, buf) mmc_read_sectors(IF_MV2(drive,) start, count, buf) - #define storage_write_sectors(drive, start, count, buf) mmc_write_sectors(IF_MV2(drive,) start, count, buf) - #define storage_last_disk_activity() mmc_last_disk_activity() - #define storage_spinup_time() 0 - #define storage_get_identify() mmc_get_identify() - - #ifdef STORAGE_GET_INFO - #define storage_get_info(drive, info) mmc_get_info(IF_MV2(drive,) info) - #endif - #ifdef HAVE_HOTSWAP - #define storage_removable(drive) mmc_removable(IF_MV(drive)) - #define storage_present(drive) mmc_present(IF_MV(drive)) - #endif - #elif (CONFIG_STORAGE & STORAGE_NAND) - #define storage_spindown nand_spindown - #define storage_sleep nand_sleep - #define storage_spin nand_spin - - #define storage_enable(on) (void)0 - #define storage_sleepnow() nand_sleepnow() - #define storage_disk_is_active() 0 - #define storage_soft_reset() (void)0 - #define storage_init() nand_init() - #define storage_close() nand_close() - #define storage_read_sectors(drive, start, count, buf) nand_read_sectors(IF_MV2(drive,) start, count, buf) - #define storage_write_sectors(drive, start, count, buf) nand_write_sectors(IF_MV2(drive,) start, count, buf) - #define storage_last_disk_activity() nand_last_disk_activity() - #define storage_spinup_time() 0 - #define storage_get_identify() nand_get_identify() - - #ifdef STORAGE_GET_INFO - #define storage_get_info(drive, info) nand_get_info(IF_MV2(drive,) info) - #endif - #ifdef HAVE_HOTSWAP - #define storage_removable(drive) nand_removable(IF_MV(drive)) - #define storage_present(drive) nand_present(IF_MV(drive)) - #endif - #elif (CONFIG_STORAGE & STORAGE_RAMDISK) - #define storage_spindown ramdisk_spindown - #define storage_sleep ramdisk_sleep - #define storage_spin ramdisk_spin - - #define storage_enable(on) (void)0 - #define storage_sleepnow() ramdisk_sleepnow() - #define storage_disk_is_active() 0 - #define storage_soft_reset() (void)0 - #define storage_init() ramdisk_init() - #define storage_close() ramdisk_close() - #define storage_read_sectors(drive, start, count, buf) ramdisk_read_sectors(IF_MV2(drive,) start, count, buf) - #define storage_write_sectors(drive, start, count, buf) ramdisk_write_sectors(IF_MV2(drive,) start, count, buf) - #define storage_last_disk_activity() ramdisk_last_disk_activity() - #define storage_spinup_time() 0 - #define storage_get_identify() ramdisk_get_identify() - - #ifdef STORAGE_GET_INFO - #define storage_get_info(drive, info) ramdisk_get_info(IF_MV2(drive,) info) - #endif - #ifdef HAVE_HOTSWAP - #define storage_removable(drive) ramdisk_removable(IF_MV(drive)) - #define storage_present(drive) ramdisk_present(IF_MV(drive)) - #endif - #else - //#error No storage driver! - #endif - #else /* NOT CONFIG_STORAGE_MULTI */ - - /* TODO : implement multi-driver here */ - #error Multi-driver storage not implemented yet - - #endif /* NOT CONFIG_STORAGE_MULTI */ -#else /*NOT SIMULATOR */ +#if !defined(SIMULATOR) && !defined(CONFIG_STORAGE_MULTI) +/* 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 & STORAGE_ATA) + #define storage_spindown ata_spindown + #define storage_sleep ata_sleep + #define storage_spin ata_spin + + #define storage_enable(on) ata_enable(on) + #define storage_sleepnow() ata_sleepnow() + #define storage_disk_is_active() ata_disk_is_active() + #define storage_soft_reset() ata_soft_reset() + #define storage_init() ata_init() + #define storage_close() ata_close() + #define storage_read_sectors(drive, start, count, buf) ata_read_sectors(IF_MD2(drive,) start, count, buf) + #define storage_write_sectors(drive, start, count, buf) ata_write_sectors(IF_MD2(drive,) start, count, buf) + #define storage_last_disk_activity() ata_last_disk_activity() + #define storage_spinup_time() ata_spinup_time() + #define storage_get_identify() ata_get_identify() + + #ifdef STORAGE_GET_INFO + #define storage_get_info(drive, info) ata_get_info(IF_MD2(drive,) info) + #endif + #ifdef HAVE_HOTSWAP + #define storage_removable(drive) ata_removable(IF_MD(drive)) + #define storage_present(drive) ata_present(IF_MD(drive)) + #endif + #elif (CONFIG_STORAGE & STORAGE_SD) + #define storage_spindown sd_spindown + #define storage_sleep sd_sleep + #define storage_spin sd_spin + + #define storage_enable(on) sd_enable(on) + #define storage_sleepnow() sd_sleepnow() + #define storage_disk_is_active() 0 + #define storage_soft_reset() (void)0 + #define storage_init() sd_init() + #define storage_read_sectors(drive, start, count, buf) sd_read_sectors(IF_MD2(drive,) start, count, buf) + #define storage_write_sectors(drive, start, count, buf) sd_write_sectors(IF_MD2(drive,) start, count, buf) + #define storage_last_disk_activity() sd_last_disk_activity() + #define storage_spinup_time() 0 + #define storage_get_identify() sd_get_identify() + + #ifdef STORAGE_GET_INFO + #define storage_get_info(drive, info) sd_get_info(IF_MD2(drive,) info) + #endif + #ifdef HAVE_HOTSWAP + #define storage_removable(drive) sd_removable(IF_MD(drive)) + #define storage_present(drive) sd_present(IF_MD(drive)) + #endif + #elif (CONFIG_STORAGE & STORAGE_MMC) + #define storage_spindown mmc_spindown + #define storage_sleep mmc_sleep + #define storage_spin mmc_spin + + #define storage_enable(on) mmc_enable(on) + #define storage_sleepnow() mmc_sleepnow() + #define storage_disk_is_active() mmc_disk_is_active() + #define storage_soft_reset() (void)0 + #define storage_init() mmc_init() + #define storage_read_sectors(drive, start, count, buf) mmc_read_sectors(IF_MD2(drive,) start, count, buf) + #define storage_write_sectors(drive, start, count, buf) mmc_write_sectors(IF_MD2(drive,) start, count, buf) + #define storage_last_disk_activity() mmc_last_disk_activity() + #define storage_spinup_time() 0 + #define storage_get_identify() mmc_get_identify() + + #ifdef STORAGE_GET_INFO + #define storage_get_info(drive, info) mmc_get_info(IF_MD2(drive,) info) + #endif + #ifdef HAVE_HOTSWAP + #define storage_removable(drive) mmc_removable(IF_MD(drive)) + #define storage_present(drive) mmc_present(IF_MD(drive)) + #endif + #elif (CONFIG_STORAGE & STORAGE_NAND) + #define storage_spindown nand_spindown + #define storage_sleep nand_sleep + #define storage_spin nand_spin + + #define storage_enable(on) (void)0 + #define storage_sleepnow() nand_sleepnow() + #define storage_disk_is_active() 0 + #define storage_soft_reset() (void)0 + #define storage_init() nand_init() + #define storage_read_sectors(drive, start, count, buf) nand_read_sectors(IF_MD2(drive,) start, count, buf) + #define storage_write_sectors(drive, start, count, buf) nand_write_sectors(IF_MD2(drive,) start, count, buf) + #define storage_last_disk_activity() nand_last_disk_activity() + #define storage_spinup_time() 0 + #define storage_get_identify() nand_get_identify() + + #ifdef STORAGE_GET_INFO + #define storage_get_info(drive, info) nand_get_info(IF_MD2(drive,) info) + #endif + #ifdef HAVE_HOTSWAP + #define storage_removable(drive) nand_removable(IF_MD(drive)) + #define storage_present(drive) nand_present(IF_MD(drive)) + #endif + #elif (CONFIG_STORAGE & STORAGE_RAMDISK) + #define storage_spindown ramdisk_spindown + #define storage_sleep ramdisk_sleep + #define storage_spin ramdisk_spin + + #define storage_enable(on) (void)0 + #define storage_sleepnow() ramdisk_sleepnow() + #define storage_disk_is_active() 0 + #define storage_soft_reset() (void)0 + #define storage_init() ramdisk_init() + #define storage_read_sectors(drive, start, count, buf) ramdisk_read_sectors(IF_MD2(drive,) start, count, buf) + #define storage_write_sectors(drive, start, count, buf) ramdisk_write_sectors(IF_MD2(drive,) start, count, buf) + #define storage_last_disk_activity() ramdisk_last_disk_activity() + #define storage_spinup_time() 0 + #define storage_get_identify() ramdisk_get_identify() + + #ifdef STORAGE_GET_INFO + #define storage_get_info(drive, info) ramdisk_get_info(IF_MD2(drive,) info) + #endif + #ifdef HAVE_HOTSWAP + #define storage_removable(drive) ramdisk_removable(IF_MD(drive)) + #define storage_present(drive) ramdisk_present(IF_MD(drive)) + #endif + #else + //#error No storage driver! + #endif +#else /* NOT CONFIG_STORAGE_MULTI and NOT SIMULATOR*/ + +/* Simulator and multi-driver use normal functions */ + void storage_enable(bool on); void storage_sleep(void); void storage_sleepnow(void); bool storage_disk_is_active(void); int storage_soft_reset(void); int storage_init(void); -void storage_close(void); int storage_read_sectors(int drive, unsigned long start, int count, void* buf); int storage_write_sectors(int drive, unsigned long start, int count, const void* buf); void storage_spin(void); void storage_spindown(int seconds); long storage_last_disk_activity(void); int storage_spinup_time(void); +int storage_num_drives(void); #ifdef STORAGE_GET_INFO void storage_get_info(int drive, struct storage_info *info); #endif @@ -206,5 +199,6 @@ void storage_get_info(int drive, struct storage_info *info); bool storage_removable(int drive); bool storage_present(int drive); #endif -#endif/*NOT SIMULATOR */ + +#endif /* NOT CONFIG_STORAGE_MULTI and NOT SIMULATOR*/ #endif -- cgit v1.2.3