1 // 2 // Copyright (c) 2010-2023 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using Antmicro.Renode.Utilities.Packets; 8 9 namespace Antmicro.Renode.Storage.SCSI.Commands 10 { 11 public enum ModePagePolicy : byte 12 { 13 Shared = 0b00, 14 PerTargetPort = 0b01, 15 Obsolete = 0b10, 16 PerInitiatorTargetNexus = 0b11 17 } 18 19 #pragma warning disable 649, 169 20 public struct StandardInquiryResponse 21 { 22 [PacketField, Offset(bytes: 0, bits: 0), Width(5)] 23 public byte PeripheralDeviceType; 24 [PacketField, Offset(bytes: 0, bits: 5), Width(3)] 25 public byte PeripheralQualifier; 26 [PacketField, Offset(bytes: 1, bits: 7), Width(1)] 27 public bool RemovableMedium; 28 [PacketField, Offset(bytes: 2)] 29 public byte Version; 30 [PacketField, Offset(bytes: 3, bits: 0), Width(4)] 31 public byte ResponseDataFormat; 32 [PacketField, Offset(bytes: 3, bits: 4), Width(1)] 33 public bool HierarchicalSupport; 34 [PacketField, Offset(bytes: 3, bits: 5), Width(1)] 35 public byte NormalACASupported; 36 [PacketField, Offset(bytes: 4)] 37 public byte AdditionalLength; 38 [PacketField, Offset(bytes: 5, bits: 0), Width(1)] 39 public bool Protect; 40 [PacketField, Offset(bytes: 5, bits: 3), Width(1)] 41 public bool ThirdPartyCopy; 42 [PacketField, Offset(bytes: 5, bits: 4), Width(2)] 43 public byte TargetPortGroupSupport; 44 [PacketField, Offset(bytes: 5, bits: 6), Width(1)] 45 public bool AccessControlsCoordinator; 46 [PacketField, Offset(bytes: 5, bits: 7), Width(1)] 47 public bool StorageControllerComponentSupported; 48 [PacketField, Offset(bytes: 6, bits: 0), Width(1)] 49 public bool ADDR16; 50 [PacketField, Offset(bytes: 6, bits: 4), Width(1)] 51 public bool MultiPort; 52 [PacketField, Offset(bytes: 6, bits: 5), Width(1)] 53 public bool VendorSpecific0; 54 [PacketField, Offset(bytes: 6, bits: 6), Width(1)] 55 public bool EnclosureServices; 56 [PacketField, Offset(bytes: 7, bits: 0), Width(1)] 57 public bool VendorSpecific1; 58 [PacketField, Offset(bytes: 7, bits: 1), Width(1)] 59 public bool CommandQueue; 60 [PacketField, Offset(bytes: 7, bits: 4), Width(1)] 61 public bool Sync; 62 [PacketField, Offset(bytes: 7, bits: 5), Width(1)] 63 public bool WBUS16; 64 [PacketField, Offset(bytes: 8), Width(8)] 65 public byte[] VendorIdentification; 66 [PacketField, Offset(bytes: 16), Width(16)] 67 public byte[] ProductIdentification; 68 [PacketField, Offset(bytes: 32), Width(4)] 69 public byte[] ProductRevisionLevel; 70 } 71 72 public struct VitalProductDataPageHeader 73 { 74 [PacketField, Offset(bytes: 0, bits: 0), Width(5)] 75 public byte PeripheralDeviceType; 76 [PacketField, Offset(bytes: 0, bits: 5), Width(3)] 77 public byte PeripheralQualifier; 78 [PacketField, Offset(bytes: 1)] 79 public VitalProductDataPageCode PageCode; 80 [PacketField, Offset(bytes: 2)] 81 public ushort PageLength; 82 } 83 84 public struct ModePagePolicyDescriptor 85 { 86 [PacketField, Offset(bytes: 0, bits: 0), Width(6)] 87 public byte PolicyPageCode; 88 [PacketField, Offset(bytes: 1)] 89 public byte PolicySubpageCode; 90 [PacketField, Offset(bytes: 2, bits: 0), Width(2)] 91 public ModePagePolicy ModePagePolicy; 92 [PacketField, Offset(bytes: 2, bits: 7), Width(1)] 93 public bool MultipleLogicalUnitsShare; 94 [PacketField, Offset(bytes: 4)] 95 private byte Reserved; 96 } 97 98 public struct ReadCapcity10Result 99 { 100 [PacketField] 101 public uint ReturnedLogicalBlockAddress; 102 [PacketField] 103 public uint BlockLengthInBytes; 104 } 105 106 public struct ReadCapacity16ParameterData 107 { 108 [PacketField, Offset(bytes: 0)] 109 public ulong ReturnedLogicalBlockAddress; 110 [PacketField, Offset(bytes: 8)] 111 public uint LogicalBlockLengthInBytes; 112 [PacketField, Offset(bytes: 12, bits: 0), Width(1)] 113 public bool ProtectionEnable; 114 [PacketField, Offset(bytes: 12, bits: 1), Width(3)] 115 public byte ProtectionType; 116 [PacketField, Offset(bytes: 13, bits: 0), Width(4)] 117 public byte LogicalBlocksPerPhysicalBlockExponent; 118 [PacketField, Offset(bytes: 13, bits: 4), Width(4)] 119 public byte ProtectionInformationIntervalsExponent; 120 [PacketField, Offset(bytes: 14, bits: 0), Width(6)] 121 public byte LowestAlignedLogicalBlockAddressMSB; 122 [PacketField, Offset(bytes: 14, bits: 6), Width(1)] 123 public bool ThinProvisioningReadZero; 124 [PacketField, Offset(bytes: 14, bits: 7), Width(1)] 125 public bool ThinProvisioningEnable; 126 [PacketField, Offset(bytes: 15)] 127 public byte LowestAlignedLogicalBlockAddressHighLSB; 128 [PacketField, Offset(bytes: 16), Width(16)] 129 private byte[] Reserved; 130 } 131 #pragma warning restore 649, 169 132 }