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/target/arm/as3525/sd-as3525v2.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/target/arm/as3525/sd-as3525v2.c')
-rw-r--r-- | firmware/target/arm/as3525/sd-as3525v2.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index b512cc2ea4..f9ef7d9c97 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c | |||
@@ -677,7 +677,7 @@ int sd_init(void) | |||
677 | return 0; | 677 | return 0; |
678 | } | 678 | } |
679 | 679 | ||
680 | static int sd_transfer_sectors(IF_MD(int drive,) unsigned long start, | 680 | static int sd_transfer_sectors(IF_MD(int drive,) sector_t start, |
681 | int count, void* buf, bool write) | 681 | int count, void* buf, bool write) |
682 | { | 682 | { |
683 | unsigned long response; | 683 | unsigned long response; |
@@ -776,7 +776,7 @@ retry_with_reinit: | |||
776 | 776 | ||
777 | MCI_BYTCNT = transfer * SD_BLOCK_SIZE; | 777 | MCI_BYTCNT = transfer * SD_BLOCK_SIZE; |
778 | 778 | ||
779 | int arg = start; | 779 | sector_t arg = start; // XXX 64-bit |
780 | if(!(card_info[drive].ocr & (1<<30))) /* not SDHC */ | 780 | if(!(card_info[drive].ocr & (1<<30))) /* not SDHC */ |
781 | arg *= SD_BLOCK_SIZE; | 781 | arg *= SD_BLOCK_SIZE; |
782 | 782 | ||
@@ -858,13 +858,13 @@ exit: | |||
858 | return ret; | 858 | return ret; |
859 | } | 859 | } |
860 | 860 | ||
861 | int sd_read_sectors(IF_MD(int drive,) unsigned long start, int count, | 861 | int sd_read_sectors(IF_MD(int drive,) sector_t start, int count, |
862 | void* buf) | 862 | void* buf) |
863 | { | 863 | { |
864 | return sd_transfer_sectors(IF_MD(drive,) start, count, buf, false); | 864 | return sd_transfer_sectors(IF_MD(drive,) start, count, buf, false); |
865 | } | 865 | } |
866 | 866 | ||
867 | int sd_write_sectors(IF_MD(int drive,) unsigned long start, int count, | 867 | int sd_write_sectors(IF_MD(int drive,) sector_t start, int count, |
868 | const void* buf) | 868 | const void* buf) |
869 | { | 869 | { |
870 | return sd_transfer_sectors(IF_MD(drive,) start, count, (void*)buf, true); | 870 | return sd_transfer_sectors(IF_MD(drive,) start, count, (void*)buf, true); |