History log of /haiku/headers/private/drivers/scsi_cmds.h
Revision Date Author Comments
# 8b1d35bd 03-Jul-2021 David Sebek <dasebek@gmail.com>

Improve SCSI and SATA trim support

Fixes:
* scsi: Fix a bug that caused the device capacity to be set
to an undefined value for some large SCSI devices when
READ CAPACITY (16) was used
* ahci: Fix VPD page reporting so that it does not return
undefined values
* ahci: Set the write bit to true when sending a DATA SET
MANAGEMENT (trim) command to a device. The command would
otherwise fail and time out on some devices.

Improvements:
* scsi: Extend the READ CAPACITY (16) support to also
include logical block provisioning information
* scsi: Prefer READ CAPACITY (16) over READ CAPACITY (10)
on devices that are expected to support this command
* scsi, ahci: Enable trim on SCSI and SATA devices that
are expected to support trim and which correctly report
trim support
* ahci: Redo the implementation of the SCSI UNMAP command
* scsi: Redo UNMAP-related code
* scsi: Add support for UNMAP via WRITE SAME (10) and
WRITE SAME (16) commands
* When copying trim ranges between different data types,
make sure that the values don't change (detect overflows)
* Report the number of trimmed blocks even if the trim
operation fails

Change-Id: Ie5fc993bbbc19546b4308138ba10184bf7b9986a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4157
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 93c0a5d7 04-Sep-2015 Axel Dörfler <axeld@pinc-software.de>

Reworked little endian bitfields a bit.

* Added B_ prefix.
* Renamed 16 bit variants to B_LENDIAN16_*.
* Added 32 bit variants (albeit only 16 of them for now).
* Adjusted headers that were using them.


# 6fd00f80 09-Apr-2014 Jérôme Duval <jerome.duval@gmail.com>

scsi_periph: implemented VPD inquiry.

* declared block limits and logical block provisioning structs.
* based on SPC-4 and SBC-4 standards.


# 99086aa3 14-Aug-2013 Axel Dörfler <axeld@pinc-software.de>

trim: Target SCSI UNMAP command instead of WRITE SAME.

* The UNMAP command is theoretically much faster, as it can get many block
ranges instead of just a single range.
* Furthermore, the ATA TRIM command resembles it much better.
* Therefore, fs_trim_data now gets an array of ranges, and we use SCSI UNMAP
to trim.
* Updated BFS code to collect array ranges to fully support the new
fs_trim_data possibilities.


# ea2fa872 16-Jul-2013 Jérôme Duval <jerome.duval@gmail.com>

scsi_cmds.h: added SCSIS_ASC_CAPACITY_DATA_HAS_CHANGED

* indicates the device data capacity has changed..


# 37286363 08-Jun-2012 Alexander von Gluck IV <kallisti5@unixzen.com>

scsi: Add write same SCSI operation

* Will be used for TRIM


# 4264efcc 30-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* added definitions for SCSI_OP_VARIABLE_LENGTH_CDB, SCSI_SAI_READ_LONG and SCSI_SAO_WRITE_LONG
* cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39683 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f0588869 02-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* added definitions for SCSI_OP_VERIFY_* op commands
* added support READ_12/16 and WRITE_12/16 in ata and scsi_periph, this enables read/write on block offsets greater than 2TB


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39278 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f10a55a6 01-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* ata: added ATADevice::ReadCapacity16()
* ata: don't fail if lba_sector_count is null and lba48_sector_count is not
* scsi_periph: if ReadCapacity() returns 0xffffffff, use ReadCapacity16() instead
* scsi_disk: use a different computation in the struct geometry computation for bigger disks
Tested successfully with a virtual 10TB hard drive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39252 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e9b601d 29-Aug-2010 Andreas Färber <andreas.faerber@web.de>

SCSI: Add struct for READ (16) and WRITE (16) commands

Based on a SCSI Command Reference Manual by Seagate and Wikipedia.

Tested against OpenSolaris iSCSI target on ppc. It choked on the READ (12) opcode.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38425 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0a96e186 22-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Added opcode definitions for read/write-16 and the extended "read capacity 16"
over service-action-in.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36415 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ece77b37 28-Sep-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

renamed SCSI_OP_TUR into SCSI_OP_TEST_UNIT_READY


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22356 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5451eb68 28-Sep-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

this header should be private


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22339 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6fd00f80e8ebb9c1d4fa17caa9db128bad9a7f1c 09-Apr-2014 Jérôme Duval <jerome.duval@gmail.com>

scsi_periph: implemented VPD inquiry.

* declared block limits and logical block provisioning structs.
* based on SPC-4 and SBC-4 standards.


# 99086aa32333be5792b0f059ccbbe3c90be05ea6 14-Aug-2013 Axel Dörfler <axeld@pinc-software.de>

trim: Target SCSI UNMAP command instead of WRITE SAME.

* The UNMAP command is theoretically much faster, as it can get many block
ranges instead of just a single range.
* Furthermore, the ATA TRIM command resembles it much better.
* Therefore, fs_trim_data now gets an array of ranges, and we use SCSI UNMAP
to trim.
* Updated BFS code to collect array ranges to fully support the new
fs_trim_data possibilities.


# ea2fa8721995774afc60047e747a9f010f2d8317 16-Jul-2013 Jérôme Duval <jerome.duval@gmail.com>

scsi_cmds.h: added SCSIS_ASC_CAPACITY_DATA_HAS_CHANGED

* indicates the device data capacity has changed..


# 372863638f6eb692e597c69b6677e2312a7ee600 08-Jun-2012 Alexander von Gluck IV <kallisti5@unixzen.com>

scsi: Add write same SCSI operation

* Will be used for TRIM


# 4264efcc6ba3828443f26b01ec9e7fc4c4eeeb3e 30-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* added definitions for SCSI_OP_VARIABLE_LENGTH_CDB, SCSI_SAI_READ_LONG and SCSI_SAO_WRITE_LONG
* cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39683 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f058886908e994cc5a6c141e212c3bd62e923023 02-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* added definitions for SCSI_OP_VERIFY_* op commands
* added support READ_12/16 and WRITE_12/16 in ata and scsi_periph, this enables read/write on block offsets greater than 2TB


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39278 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f10a55a632599ee0c06dd3235df51cb2410e3633 01-Nov-2010 Jérôme Duval <korli@users.berlios.de>

* ata: added ATADevice::ReadCapacity16()
* ata: don't fail if lba_sector_count is null and lba48_sector_count is not
* scsi_periph: if ReadCapacity() returns 0xffffffff, use ReadCapacity16() instead
* scsi_disk: use a different computation in the struct geometry computation for bigger disks
Tested successfully with a virtual 10TB hard drive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39252 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3e9b601da10b30be97af77ad4d2dc205719a830b 29-Aug-2010 Andreas Färber <andreas.faerber@web.de>

SCSI: Add struct for READ (16) and WRITE (16) commands

Based on a SCSI Command Reference Manual by Seagate and Wikipedia.

Tested against OpenSolaris iSCSI target on ppc. It choked on the READ (12) opcode.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38425 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0a96e186895067ecddaacb1f5af8fd3217c6ea5c 22-Apr-2010 Axel Dörfler <axeld@pinc-software.de>

* Added opcode definitions for read/write-16 and the extended "read capacity 16"
over service-action-in.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36415 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ece77b379af4fd9cb1d712663620afb84523d443 28-Sep-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

renamed SCSI_OP_TUR into SCSI_OP_TEST_UNIT_READY


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22356 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 5451eb688bdeb03043dc013cc12cced274bdb273 28-Sep-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

this header should be private


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22339 a95241bf-73f2-0310-859d-f6bbb57e9c96