- 27 Feb, 2021 1 commit
-
-
Jeffrey Lee authored
When ATA_Op reports a "Too complex" error, the truncated transfer length that it returns isn't guaranteed to be a multiple of the sector size. Make sure that we apply the appropriate rounding to the value before retrying the op. This issue was discovered while testing long descriptor page tables on 4GB IGEPv5, which has the restriction that only the low 2GB of RAM can be accessed by the SATA controller. The kernel will (via OS_Memory 19) instruct SATADriver to use a bounce buffer for any parts of a transfer which access high RAM, but SATADriver only has a limited bounce buffer size, which will force it to split the transfer with a "Too complex" error once the buffer is full. If a mix of low & high RAM is being used for a transfer then this can easily result in SATADriver suggesting a transfer length which isn't a multiple of the sector size. For 2GB/short descriptor page tables this situation is much less likely to occur, since it'd be rare for a transfer to target a non-DMAable address (would have to be a mix of RAM & IO memory) Version 4.06. Tagged as 'ADFS4-4_06'
-
- 16 Jun, 2017 1 commit
-
-
Robert Sprowson authored
Read the sector size from ATA Identify, and keep it in the drive structure. This allows a mix of sector sizes to be used across discs. Search & replace LOG2_SECTOR_SIZE and SECTOR_SIZE with the value read from the drive. Tested on Titanium with an assortment of manufacturer drives, capacities, and sector sizes. Version 4.03. Tagged as 'ADFS-4_03'
-
- 24 Mar, 2016 1 commit
-
-
Ben Avison authored
Detail: These disc errors relate to the status of the task file registers before a command is issued, however with SATA (unlike PATA) we can't simply read the task file on demand, we need to issue a command to cause a register FIS transaction to happen on the bus. The only available command which is compatible with all device types (packet and non-packet) and which can be issued in not-ready state is EXECUTE_DEVICE_DIAGNOSTIC, so issue this when either disc error is encountered and retry to give the drive a chance to return to ready/not-busy state. This command has the advantage of having been mandatory back to ATA-1 so should be harmless for PATA drives, whether connected via a PATA-SATA bridge or via a future PATADriver module. Admin: Tested on Titanium. Version 4.02. Tagged as 'ADFS-4_02'
-
- 13 Mar, 2016 2 commits
-
-
Ben Avison authored
Detail: LBA28 is still useful for some small capacity Micro SATA SSDs in particular. Also a bugfix to reading the drive capacity (the only effect would have been that we didn't correctly fault DiscOps beyond the end of the media). Admin: Tested on IGEPv5 Version 4.01. Tagged as 'ADFS-4_01'
-
Ben Avison authored
Detail: Version 4 of ADFS is a complete rewrite, but backward compatible with previous versions of ADFS. The hardware driver components have been extracted out into separate modules, along the lines of the SCSIFS/SCSIDriver and SDFS/SDIODriver interfaces. Initially, the only supported driver backend is for AHCI SATA controllers, but it is anticipated that PATA controller support and maybe even floppy drive support may be added at a later date to cater for legacy hardware. Background transfers are only partially implemented at present. Admin: This version is what appeared in initial Titanium ROM releases. Tagged as 'ADFS-4_00'
-