* 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:
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user