/* * Copyright (c) 2023, Leon Albrecht * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include // https://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068j.pdf namespace Kernel::SCSI { // 3.22.1 struct ReadCapacity10 { u8 opcode { 0x25 }; u8 reserved1 { 0 }; BigEndian oboslete_logical_block_address { 0 }; u16 reserved2 { 0 }; u8 reserved3 { 0 }; u8 control { 0 }; }; static_assert(AssertSize()); // 3.22.2 struct ReadCapacity10Parameters { BigEndian block_count; BigEndian block_size; }; static_assert(AssertSize()); // 3.16 struct Read10 { u8 operation_code { 0x28 }; union { u8 settings { 0 }; struct { u8 obsolete : 2; u8 rarc : 1; u8 fua : 1; u8 dpo : 1; u8 rdprotect : 3; }; }; BigEndian logical_block_address; u8 group_number { 0 }; // only bottom 5 bits BigEndian transfer_length; u8 control { 0 }; }; static_assert(AssertSize()); // 3.60 struct Write10 { u8 operation_code { 0x2A }; union { u8 settings { 0 }; struct { u8 obsolete : 2; u8 reserved : 1; u8 fua : 1; u8 dpo : 1; u8 wrprotect : 3; }; }; BigEndian logical_block_address; u8 group_number { 0 }; // only bottom 5 bits BigEndian transfer_length; u8 control { 0 }; }; static_assert(AssertSize()); }