* 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
This commit is contained in:
Jérôme Duval
2010-11-01 16:31:09 +00:00
parent ce658a595d
commit f10a55a632
5 changed files with 85 additions and 8 deletions
+17 -1
View File
@@ -313,7 +313,7 @@ typedef struct scsi_page_usn {
char psn[1]; // size according to page_length
} _PACKED scsi_page_usn;
// READ CAPACITY
// READ CAPACITY (10)
typedef struct scsi_cmd_read_capacity {
uint8 opcode;
@@ -336,6 +336,22 @@ typedef struct scsi_res_read_capacity {
uint32 block_size; // in bytes
} _PACKED scsi_res_read_capacity;
// READ CAPACITY (16)
typedef struct scsi_cmd_read_capacity_long {
uint8 opcode;
uint8 service_action;
uint64 lba;
uint32 alloc_length;
uint8 relative_address;
uint8 control;
} _PACKED scsi_cmd_read_capacity_long;
typedef struct scsi_res_read_capacity_long {
uint64 lba; // big endian
uint32 block_size; // in bytes
} _PACKED scsi_res_read_capacity_long;
// READ (6), WRITE (6)