summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-07-08 12:26:04 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-11-03 19:29:26 +0000
commit066d471ae6dd34eda370c5f610adaefa1029bab9 (patch)
treecf1659b5473b1990932111d1587aa0e1865cc7b7 /firmware
parent8029c898084787ca1e9e2d02afeff19de117aaed (diff)
downloadrockbox-066d471ae6dd34eda370c5f610adaefa1029bab9.tar.gz
rockbox-066d471ae6dd34eda370c5f610adaefa1029bab9.tar.bz2
rockbox-066d471ae6dd34eda370c5f610adaefa1029bab9.zip
ATA: Check to see if the ATA device is solid-state (WIP)
Not all devices advertise this flag, unfortunately. Change-Id: I6d666febdfcba7598e4d29df7d05c0a288e15158
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/ata.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index 39c305c3df..db39255256 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -332,6 +332,19 @@ static ICODE_ATTR void copy_write_sectors(const unsigned char* buf,
}
#endif /* !ATA_OPTIMIZED_WRITING */
+static inline int ata_disk_isssd(void)
+{
+ /* offset 217 is "Nominal Rotation rate"
+ 0x0000 == Not reported
+ 0x0001 == Solid State
+ 0x0401 -> 0xffe == RPM
+ All others reserved
+
+ Some CF cards return 0x0100 (ie byteswapped 0x0001) so accept either
+ */
+ return (identify_info[217] == 0x0001 || identify_info[217] == 0x0100);
+}
+
static int ata_transfer_sectors(unsigned long start,
int incount,
void* inbuf,