diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2024-07-05 16:00:30 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2024-08-12 14:23:44 -0400 |
commit | 15e52374698ba7395ff0ece0d3d70435a66406c4 (patch) | |
tree | 778f81817b2381decc920b49242e91f994f2d8ee /firmware/common/disk_cache.c | |
parent | 9ff308a589f3655453fe047d9b08ca5e2a01f06d (diff) | |
download | rockbox-15e52374698ba7395ff0ece0d3d70435a66406c4.tar.gz rockbox-15e52374698ba7395ff0ece0d3d70435a66406c4.zip |
storage: 64-bit sector offsets
* Create new 'sector_t' type alias:
* uint64_t for all targets with HAVE_LBA48 or HAVE_SDUC
* unsigned long for the everything else
* Alter all storage APIs to use sector_t instead of 'unsigned long'
* Alter Volume/Partition/storage info structures to use sector_t
* Disk cache converted to sector_t
* ATA Core:
* convert to using sector_t for sector addresses and drive sizes
* Always fill out upper 16 bits of LBA48 addresses
* IDENTIFY INFO is fixed at 512 bytes, not SECTOR_SIZE
* USB mass storage:
* convert to using sector_t for sector addesses and drive sizes
* Implement READ_16/WRITE_16 for LBA48 addresses
* Convert FAT code to use sector_t for all sector references
* output_dyn_value() now accepts int64_t instead of 'int'
* Corrected "rockbox info" to work for (MULTIVOLUME & !MULTIDRIVE)
* Better reporting of disk and (logical+physical) sector sizes in debug info
* Detect SDUC cards and report on storage debug_info screen
To-do: SDUC
* Refactor SD core to remove duplicate code in every driver
* Card probe and init state machine
* Implement core SDUC support
* SD2.0 needs to be 2.0+ (fixed for jz47xx and x1000)
* Host and Card ID (ACMD41)
* 32-bit addressing for all read/write/erase operations (CMD22)
* ADD SDUC to target device drivers, defining HAVE_SDUC as appropriate
Change-Id: Ib0138781a0081664d11511037685503df1b93608
Diffstat (limited to 'firmware/common/disk_cache.c')
-rw-r--r-- | firmware/common/disk_cache.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/firmware/common/disk_cache.c b/firmware/common/disk_cache.c index 9e4dee6a91..74c4d5f35b 100644 --- a/firmware/common/disk_cache.c +++ b/firmware/common/disk_cache.c | |||
@@ -71,12 +71,12 @@ struct disk_cache_entry | |||
71 | #ifdef HAVE_MULTIVOLUME | 71 | #ifdef HAVE_MULTIVOLUME |
72 | unsigned char volume; /* volume of sector */ | 72 | unsigned char volume; /* volume of sector */ |
73 | #endif | 73 | #endif |
74 | unsigned long sector; /* cached disk sector number */ | 74 | sector_t sector; /* cached disk sector number */ |
75 | }; | 75 | }; |
76 | 76 | ||
77 | BITARRAY_TYPE_DECLARE(cache_map_entry_t, cache_map, DC_NUM_ENTRIES) | 77 | BITARRAY_TYPE_DECLARE(cache_map_entry_t, cache_map, DC_NUM_ENTRIES) |
78 | 78 | ||
79 | static inline unsigned int map_sector(unsigned long sector) | 79 | static inline unsigned int map_sector(sector_t sector) |
80 | { | 80 | { |
81 | /* keep sector hash simple for now */ | 81 | /* keep sector hash simple for now */ |
82 | return sector % DC_MAP_NUM_ENTRIES; | 82 | return sector % DC_MAP_NUM_ENTRIES; |
@@ -172,7 +172,7 @@ static inline void cache_discard_entry(struct disk_cache_entry *dce, | |||
172 | /* search the cache for the specified sector, returning a buffer, either | 172 | /* search the cache for the specified sector, returning a buffer, either |
173 | to the specified sector, if it exists, or a new/evicted entry that must | 173 | to the specified sector, if it exists, or a new/evicted entry that must |
174 | be filled */ | 174 | be filled */ |
175 | void * dc_cache_probe(IF_MV(int volume,) unsigned long sector, | 175 | void * dc_cache_probe(IF_MV(int volume,) sector_t sector, |
176 | unsigned int *flagsp) | 176 | unsigned int *flagsp) |
177 | { | 177 | { |
178 | unsigned int mapnum = map_sector(sector); | 178 | unsigned int mapnum = map_sector(sector); |
@@ -200,7 +200,7 @@ void * dc_cache_probe(IF_MV(int volume,) unsigned long sector, | |||
200 | if (old_flags) | 200 | if (old_flags) |
201 | { | 201 | { |
202 | int old_volume = IF_MV_VOL(dce->volume); | 202 | int old_volume = IF_MV_VOL(dce->volume); |
203 | unsigned long sector = dce->sector; | 203 | sector_t sector = dce->sector; |
204 | unsigned int old_mapnum = map_sector(sector); | 204 | unsigned int old_mapnum = map_sector(sector); |
205 | 205 | ||
206 | if (old_flags & DCE_DIRTY) | 206 | if (old_flags & DCE_DIRTY) |