diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/ata.c | 13 |
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, | |||
332 | } | 332 | } |
333 | #endif /* !ATA_OPTIMIZED_WRITING */ | 333 | #endif /* !ATA_OPTIMIZED_WRITING */ |
334 | 334 | ||
335 | static inline int ata_disk_isssd(void) | ||
336 | { | ||
337 | /* offset 217 is "Nominal Rotation rate" | ||
338 | 0x0000 == Not reported | ||
339 | 0x0001 == Solid State | ||
340 | 0x0401 -> 0xffe == RPM | ||
341 | All others reserved | ||
342 | |||
343 | Some CF cards return 0x0100 (ie byteswapped 0x0001) so accept either | ||
344 | */ | ||
345 | return (identify_info[217] == 0x0001 || identify_info[217] == 0x0100); | ||
346 | } | ||
347 | |||
335 | static int ata_transfer_sectors(unsigned long start, | 348 | static int ata_transfer_sectors(unsigned long start, |
336 | int incount, | 349 | int incount, |
337 | void* inbuf, | 350 | void* inbuf, |