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/rk27xx | |
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/rk27xx')
-rw-r--r-- | firmware/target/arm/rk27xx/ata-nand-rk27xx.c | 8 | ||||
-rw-r--r-- | firmware/target/arm/rk27xx/sd-rk27xx.c | 7 |
2 files changed, 9 insertions, 6 deletions
diff --git a/firmware/target/arm/rk27xx/ata-nand-rk27xx.c b/firmware/target/arm/rk27xx/ata-nand-rk27xx.c index e257416cd0..54a1223cfc 100644 --- a/firmware/target/arm/rk27xx/ata-nand-rk27xx.c +++ b/firmware/target/arm/rk27xx/ata-nand-rk27xx.c | |||
@@ -31,18 +31,18 @@ | |||
31 | 31 | ||
32 | /* This file provides only STUBS for now */ | 32 | /* This file provides only STUBS for now */ |
33 | 33 | ||
34 | /** static, private data **/ | 34 | /** static, private data **/ |
35 | static bool initialized = false; | 35 | static bool initialized = false; |
36 | 36 | ||
37 | /* API Functions */ | 37 | /* API Functions */ |
38 | int nand_read_sectors(IF_MD(int drive,) unsigned long start, int incount, | 38 | int nand_read_sectors(IF_MD(int drive,) sector_t start, int incount, |
39 | void* inbuf) | 39 | void* inbuf) |
40 | { | 40 | { |
41 | (void)drive; | 41 | (void)drive; |
42 | return ftl_read(start, incount, inbuf); | 42 | return ftl_read(start, incount, inbuf); |
43 | } | 43 | } |
44 | 44 | ||
45 | int nand_write_sectors(IF_MD(int drive,) unsigned long start, int count, | 45 | int nand_write_sectors(IF_MD(int drive,) sector_t start, int count, |
46 | const void* outbuf) | 46 | const void* outbuf) |
47 | { | 47 | { |
48 | (void)drive; | 48 | (void)drive; |
@@ -112,7 +112,7 @@ int nand_num_drives(int first_drive) | |||
112 | { | 112 | { |
113 | /* We don't care which logical drive number(s) we have been assigned */ | 113 | /* We don't care which logical drive number(s) we have been assigned */ |
114 | (void)first_drive; | 114 | (void)first_drive; |
115 | 115 | ||
116 | return 1; | 116 | return 1; |
117 | } | 117 | } |
118 | #endif | 118 | #endif |
diff --git a/firmware/target/arm/rk27xx/sd-rk27xx.c b/firmware/target/arm/rk27xx/sd-rk27xx.c index 68ecd444c6..e082a8bf2e 100644 --- a/firmware/target/arm/rk27xx/sd-rk27xx.c +++ b/firmware/target/arm/rk27xx/sd-rk27xx.c | |||
@@ -453,7 +453,7 @@ static inline void write_sd_data(unsigned char **src) | |||
453 | *src += 512; | 453 | *src += 512; |
454 | } | 454 | } |
455 | 455 | ||
456 | int sd_read_sectors(IF_MD(int drive,) unsigned long start, int count, | 456 | int sd_read_sectors(IF_MD(int drive,) sector_t start, int count, |
457 | void* buf) | 457 | void* buf) |
458 | { | 458 | { |
459 | #ifdef HAVE_MULTIDRIVE | 459 | #ifdef HAVE_MULTIDRIVE |
@@ -498,6 +498,8 @@ int sd_read_sectors(IF_MD(int drive,) unsigned long start, int count, | |||
498 | DATA_XFER_MULTI; | 498 | DATA_XFER_MULTI; |
499 | } | 499 | } |
500 | 500 | ||
501 | // XXX 64-bit | ||
502 | |||
501 | /* issue read command to the card */ | 503 | /* issue read command to the card */ |
502 | if (!send_cmd(SD_READ_MULTIPLE_BLOCK, start, RES_R1, &response)) | 504 | if (!send_cmd(SD_READ_MULTIPLE_BLOCK, start, RES_R1, &response)) |
503 | { | 505 | { |
@@ -576,7 +578,7 @@ int sd_read_sectors(IF_MD(int drive,) unsigned long start, int count, | |||
576 | } | 578 | } |
577 | 579 | ||
578 | /* Not tested */ | 580 | /* Not tested */ |
579 | int sd_write_sectors(IF_MD(int drive,) unsigned long start, int count, | 581 | int sd_write_sectors(IF_MD(int drive,) sector_t start, int count, |
580 | const void* buf) | 582 | const void* buf) |
581 | { | 583 | { |
582 | #ifdef HAVE_MULTIDRIVE | 584 | #ifdef HAVE_MULTIDRIVE |
@@ -620,6 +622,7 @@ int sd_write_sectors(IF_MD(int drive,) unsigned long start, int count, | |||
620 | 622 | ||
621 | write_sd_data(&src); /* put data into transfer buffer */ | 623 | write_sd_data(&src); /* put data into transfer buffer */ |
622 | 624 | ||
625 | // XXX 64-bit | ||
623 | if (!send_cmd(SD_WRITE_MULTIPLE_BLOCK, start, RES_R1, &response)) | 626 | if (!send_cmd(SD_WRITE_MULTIPLE_BLOCK, start, RES_R1, &response)) |
624 | { | 627 | { |
625 | ret = -3; | 628 | ret = -3; |