From 066d471ae6dd34eda370c5f610adaefa1029bab9 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 8 Jul 2020 12:26:04 -0400 Subject: ATA: Check to see if the ATA device is solid-state (WIP) Not all devices advertise this flag, unfortunately. Change-Id: I6d666febdfcba7598e4d29df7d05c0a288e15158 --- firmware/drivers/ata.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'firmware') 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, -- cgit v1.2.3