DF-2519
ATA PASS-THROUGH 16 drops LBA high extension byte (copy-paste defect)
Summary
In ATA_PASS_16 (SCSI opcode 0x85) translation line 1219 is byte-for-byte duplicate of line 1217 (both write fis->lba_mid_exp = atp16->lba_mid_ext). As a result fis->lba_high_exp is never assigned. Because sili_ata_get_xfer zeroes the FIS before returning it lba_high_ext byte from caller CDB silently forced to 0 so upper byte of LBA48 address (bits [47:40]) dropped device targets wrong sector. Line 1219 was meant to be fis->lba_high_exp=atp16->lba_high_ext. ATA_PASS_12 correctly omits *_exp fields because 28-bit LBA command.
No comments yet.