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.Peripherals.Storage 10 { 11 #pragma warning disable 649, 169 12 public struct ConfigurationDescriptorHeader 13 { 14 [PacketField, Offset(bytes: 0x00)] 15 public byte Length; 16 [PacketField, Offset(bytes: 0x01)] 17 public byte DescriptorIDN; 18 [PacketField, Offset(bytes: 0x02)] 19 public byte ConfDescContinue; 20 [PacketField, Offset(bytes: 0x03)] 21 public byte BootEnable; 22 [PacketField, Offset(bytes: 0x04)] 23 public byte DescrAccessEn; 24 [PacketField, Offset(bytes: 0x05)] 25 public byte InitPowerMode; 26 [PacketField, Offset(bytes: 0x06)] 27 public byte HighPriorityLUN; 28 [PacketField, Offset(bytes: 0x07)] 29 public byte SecureRemovalType; 30 [PacketField, Offset(bytes: 0x08)] 31 public byte InitActiveICCLevel; 32 [PacketField, Offset(bytes: 0x09)] 33 public ushort PeriodicRTCUpdate; 34 [PacketField, Offset(bytes: 0x0b)] 35 private byte ReservedHostPerformanceBooster ; 36 [PacketField, Offset(bytes: 0x0c)] 37 public byte RPMBRegionEnable; 38 [PacketField, Offset(bytes: 0x0d)] 39 public byte RPMBRegion1Size; 40 [PacketField, Offset(bytes: 0x0e)] 41 public byte RPMBRegion2Size; 42 [PacketField, Offset(bytes: 0x0f)] 43 public ushort RPMBRegion3Size; 44 [PacketField, Offset(bytes: 0x10)] 45 public byte WriteBoosterBufferPreserveUserSpaceEn; 46 [PacketField, Offset(bytes: 0x11)] 47 public byte WriteBoosterBufferType; 48 [PacketField, Offset(bytes: 0x12)] 49 public uint NumSharedWriteBoosterBufferAllocUnits; 50 } 51 52 public struct DeviceDescriptor 53 { 54 [PacketField, Offset(bytes: 0x00)] 55 public byte Length; 56 [PacketField, Offset(bytes: 0x01)] 57 public byte DescriptorIDN; 58 [PacketField, Offset(bytes: 0x02)] 59 public byte Device; 60 [PacketField, Offset(bytes: 0x03)] 61 public byte DeviceClass; 62 [PacketField, Offset(bytes: 0x04)] 63 public byte DeviceSubClass; 64 [PacketField, Offset(bytes: 0x05)] 65 public byte Protocol; 66 [PacketField, Offset(bytes: 0x06)] 67 public byte NumberLU; 68 [PacketField, Offset(bytes: 0x07)] 69 public byte NumberWLU; 70 [PacketField, Offset(bytes: 0x08)] 71 public byte BootEnable; 72 [PacketField, Offset(bytes: 0x09)] 73 public byte DescrAccessEn; 74 [PacketField, Offset(bytes: 0xa)] 75 public byte InitPowerMode; 76 [PacketField, Offset(bytes: 0xb)] 77 public byte HighPriorityLUN; 78 [PacketField, Offset(bytes: 0xc)] 79 public byte SecureRemovalType; 80 [PacketField, Offset(bytes: 0xd)] 81 public byte SecurityLU; 82 [PacketField, Offset(bytes: 0xe)] 83 public byte BackgroundOpsTermLat; 84 [PacketField, Offset(bytes: 0xf)] 85 public byte InitActiveICCLevel; 86 [PacketField, Offset(bytes: 0x10)] 87 public ushort SpecVersion; 88 [PacketField, Offset(bytes: 0x12)] 89 public ushort ManufactureDate; 90 [PacketField, Offset(bytes: 0x14)] 91 public byte ManufacturerName; 92 [PacketField, Offset(bytes: 0x15)] 93 public byte ProductName; 94 [PacketField, Offset(bytes: 0x16)] 95 public byte SerialNumber; 96 [PacketField, Offset(bytes: 0x17)] 97 public byte OemID; 98 [PacketField, Offset(bytes: 0x18)] 99 public ushort ManufacturerID; 100 [PacketField, Offset(bytes: 0x1a)] 101 public byte UD0BaseOffset; 102 [PacketField, Offset(bytes: 0x1b)] 103 public byte UDConfigPLength; 104 [PacketField, Offset(bytes: 0x1c)] 105 public byte DeviceRTTCap; 106 [PacketField, Offset(bytes: 0x1d)] 107 public ushort PeriodicRTCUpdate; 108 [PacketField, Offset(bytes: 0x1f)] 109 public byte UFSFeaturesSupport; 110 [PacketField, Offset(bytes: 0x20)] 111 public byte FFUTimeout; 112 [PacketField, Offset(bytes: 0x21)] 113 public byte QueueDepth; 114 [PacketField, Offset(bytes: 0x22)] 115 public ushort DeviceVersion; 116 [PacketField, Offset(bytes: 0x24)] 117 public byte NumSecureWPArea; 118 [PacketField, Offset(bytes: 0x25)] 119 public uint PSAMaxDataSize; 120 [PacketField, Offset(bytes: 0x29)] 121 public byte PSAStateTimeout; 122 [PacketField, Offset(bytes: 0x2a)] 123 public byte ProductRevisionLevel; 124 [PacketField, Offset(bytes: 0x2b), Width(5)] 125 private byte[] Reserved0; 126 [PacketField, Offset(bytes: 0x30), Width(16)] 127 private byte[] ReservedUnifiedMemoryExtension; 128 [PacketField, Offset(bytes: 0x40), Width(3)] 129 private byte[] ReservedHostPerformanceBooster; 130 [PacketField, Offset(bytes: 0x43), Width(12)] 131 private byte[] Reserved1; 132 [PacketField, Offset(bytes: 0x4f)] 133 public uint ExtendedUFSFeaturesSupport; 134 [PacketField, Offset(bytes: 0x53)] 135 public byte WriteBoosterBufferPreserveUserSpaceEn; 136 [PacketField, Offset(bytes: 0x54)] 137 public byte WriteBoosterBufferType; 138 [PacketField, Offset(bytes: 0x55)] 139 public uint NumSharedWriteBoosterBufferAllocUnits; 140 } 141 142 public struct DeviceHealthDescriptor 143 { 144 [PacketField, Offset(bytes: 0x00)] 145 public byte Length; 146 [PacketField, Offset(bytes: 0x01)] 147 public byte DescriptorIDN; 148 [PacketField, Offset(bytes: 0x02)] 149 public byte PreEOLInfo; 150 [PacketField, Offset(bytes: 0x03)] 151 public byte DeviceLifeTimeEstA; 152 [PacketField, Offset(bytes: 0x04)] 153 public byte DeviceLifeTimeEstB; 154 [PacketField, Offset(bytes: 0x05), Width(32)] 155 public byte[] VendorPropInfo; 156 [PacketField, Offset(bytes: 0x25)] 157 public uint RefreshTotalCount; 158 [PacketField, Offset(bytes: 0x29)] 159 public uint RefreshProgress; 160 } 161 162 public struct GeometryDescriptor 163 { 164 [PacketField, Offset(bytes: 0x00)] 165 public byte Length; 166 [PacketField, Offset(bytes: 0x01)] 167 public byte DescriptorIDN; 168 [PacketField, Offset(bytes: 0x02)] 169 public byte MediaTechnology; 170 [PacketField, Offset(bytes: 0x03)] 171 private byte Reserved0; 172 [PacketField, Offset(bytes: 0x04)] 173 public ulong TotalRawDeviceCapacity; 174 [PacketField, Offset(bytes: 0x0c)] 175 public byte MaxNumberLU; 176 [PacketField, Offset(bytes: 0x0d)] 177 public uint SegmentSize; 178 [PacketField, Offset(bytes: 0x11)] 179 public byte AllocationUnitSize; 180 [PacketField, Offset(bytes: 0x12)] 181 public byte MinAddrBlockSize; 182 [PacketField, Offset(bytes: 0x13)] 183 public byte OptimalReadBlockSize; 184 [PacketField, Offset(bytes: 0x14)] 185 public byte OptimalWriteBlockSize; 186 [PacketField, Offset(bytes: 0x15)] 187 public byte MaxInBufferSize; 188 [PacketField, Offset(bytes: 0x16)] 189 public byte MaxOutBufferSize; 190 [PacketField, Offset(bytes: 0x17)] 191 public byte RPMBReadWriteSize; 192 [PacketField, Offset(bytes: 0x18)] 193 public byte DynamicCapacityResourcePolicy; 194 [PacketField, Offset(bytes: 0x19)] 195 public byte DataOrdering; 196 [PacketField, Offset(bytes: 0x1a)] 197 public byte MaxContexIDNumber; 198 [PacketField, Offset(bytes: 0x1b)] 199 public byte SysDataTagUnitSize; 200 [PacketField, Offset(bytes: 0x1c)] 201 public byte SysDataTagResSize; 202 [PacketField, Offset(bytes: 0x1d)] 203 public byte SupportedSecRTypes; 204 [PacketField, Offset(bytes: 0x1e)] 205 public ushort SupportedMemoryTypes; 206 [PacketField, Offset(bytes: 0x20)] 207 public uint SystemCodeMaxNAllocU; 208 [PacketField, Offset(bytes: 0x24)] 209 public ushort SystemCodeCapAdjFac; 210 [PacketField, Offset(bytes: 0x26)] 211 public uint NonPersistMaxNAllocU; 212 [PacketField, Offset(bytes: 0x2a)] 213 public ushort NonPersistCapAdjFac; 214 [PacketField, Offset(bytes: 0x2c)] 215 public uint Enhanced1MaxNAllocU; 216 [PacketField, Offset(bytes: 0x30)] 217 public ushort Enhanced1CapAdjFac; 218 [PacketField, Offset(bytes: 0x32)] 219 public uint Enhanced2MaxNAllocU; 220 [PacketField, Offset(bytes: 0x36)] 221 public ushort Enhanced2CapAdjFac; 222 [PacketField, Offset(bytes: 0x38)] 223 public uint Enhanced3MaxNAllocU; 224 [PacketField, Offset(bytes: 0x3c)] 225 public ushort Enhanced3CapAdjFac; 226 [PacketField, Offset(bytes: 0x3e)] 227 public uint Enhanced4MaxNAllocU; 228 [PacketField, Offset(bytes: 0x42)] 229 public ushort Enhanced4CapAdjFac; 230 [PacketField, Offset(bytes: 0x44)] 231 public uint OptimalLogicalBlockSize; 232 [PacketField, Offset(bytes: 0x48), Width(5)] 233 private byte[] ReservedHostPerformanceBooster; 234 [PacketField, Offset(bytes: 0x4d)] 235 private ushort Reserved1; 236 [PacketField, Offset(bytes: 0x4f)] 237 public uint WriteBoosterBufferMaxNAllocUnits; 238 [PacketField, Offset(bytes: 0x53)] 239 public byte DeviceMaxWriteBoosterLUs; 240 [PacketField, Offset(bytes: 0x54)] 241 public byte WriteBoosterBufferCapAdjFac; 242 [PacketField, Offset(bytes: 0x55)] 243 public byte SupportedWriteBoosterBufferUserSpaceReductionTypes; 244 [PacketField, Offset(bytes: 0x56)] 245 public byte SupportedWriteBoosterBufferTypes; 246 } 247 248 public struct InterconnectDescriptor 249 { 250 [PacketField, Offset(bytes: 0x00)] 251 public byte Length; 252 [PacketField, Offset(bytes: 0x01)] 253 public byte DescriptorIDN; 254 [PacketField, Offset(bytes: 0x02)] 255 public uint BCDUniproVersion; 256 [PacketField, Offset(bytes: 0x04)] 257 public uint BCDMphyVersion; 258 } 259 260 public struct PowerParametersDescriptor 261 { 262 [PacketField, Offset(bytes: 0x00)] 263 public byte Length; 264 [PacketField, Offset(bytes: 0x01)] 265 public byte DescriptorIDN; 266 [PacketField, Offset(bytes: 0x02), Width(32)] 267 public byte[] ActiveICCLevelsVCC; // 16 ushort fields 268 [PacketField, Offset(bytes: 0x22), Width(32)] 269 public byte[] ActiveICCLevelsVCCQ; // 16 ushort fields 270 [PacketField, Offset(bytes: 0x42), Width(32)] 271 public byte[] ActiveICCLevelsVCCQ2; // 16 ushort fields 272 } 273 274 public struct RPMBUnitDescriptor 275 { 276 [PacketField, Offset(bytes: 0x00)] 277 public byte Length; 278 [PacketField, Offset(bytes: 0x01)] 279 public byte DescriptorIDN; 280 [PacketField, Offset(bytes: 0x02)] 281 public byte UnitIndex; 282 [PacketField, Offset(bytes: 0x03)] 283 public byte LUEnable; 284 [PacketField, Offset(bytes: 0x04)] 285 public byte BootLunID; 286 [PacketField, Offset(bytes: 0x05)] 287 public byte LUWriteProtect; 288 [PacketField, Offset(bytes: 0x06)] 289 public byte LUQueueDepth; 290 [PacketField, Offset(bytes: 0x07)] 291 public byte PSASensitive; 292 [PacketField, Offset(bytes: 0x08)] 293 public byte MemoryType; 294 [PacketField, Offset(bytes: 0x09)] 295 public byte RPMBRegionEnable; 296 [PacketField, Offset(bytes: 0x0a)] 297 public byte LogicalBlockSize; 298 [PacketField, Offset(bytes: 0x0b)] 299 public ulong LogicalBlockCount; 300 [PacketField, Offset(bytes: 0x13)] 301 public byte RPMBRegion0Size; 302 [PacketField, Offset(bytes: 0x14)] 303 public byte RPMBRegion1Size; 304 [PacketField, Offset(bytes: 0x15)] 305 public byte RPMBRegion2Size; 306 [PacketField, Offset(bytes: 0x16)] 307 public byte RPMBRegion3Size; 308 [PacketField, Offset(bytes: 0x17)] 309 public byte ProvisioningType; 310 [PacketField, Offset(bytes: 0x18)] 311 public ulong PhyMemResourceCount; 312 [PacketField, Offset(bytes: 0x20), Width(3)] 313 private byte[] Reserved; 314 } 315 316 public struct UnitDescriptor 317 { 318 [PacketField, Offset(bytes: 0x00)] 319 public byte Length; 320 [PacketField, Offset(bytes: 0x01)] 321 public byte DescriptorIDN; 322 [PacketField, Offset(bytes: 0x02)] 323 public byte UnitIndex; 324 [PacketField, Offset(bytes: 0x03)] 325 public byte LUEnable; 326 [PacketField, Offset(bytes: 0x04)] 327 public byte BootLunID; 328 [PacketField, Offset(bytes: 0x05)] 329 public byte LUWriteProtect; 330 [PacketField, Offset(bytes: 0x06)] 331 public byte LUQueueDepth; 332 [PacketField, Offset(bytes: 0x07)] 333 public byte PSASensitive; 334 [PacketField, Offset(bytes: 0x08)] 335 public byte MemoryType; 336 [PacketField, Offset(bytes: 0x09)] 337 public byte DataReliability; 338 [PacketField, Offset(bytes: 0x0a)] 339 public byte LogicalBlockSize; 340 [PacketField, Offset(bytes: 0x0b)] 341 public ulong LogicalBlockCount; 342 [PacketField, Offset(bytes: 0x13)] 343 public uint EraseBlockSize; 344 [PacketField, Offset(bytes: 0x17)] 345 public byte ProvisioningType; 346 [PacketField, Offset(bytes: 0x18)] 347 public ulong PhyMemResourceCount; 348 [PacketField, Offset(bytes: 0x20)] 349 public ushort ContextCapabilities; 350 [PacketField, Offset(bytes: 0x22)] 351 public byte LargeUnitGranularity_M1; 352 [PacketField, Offset(bytes: 0x23), Width(6)] 353 private byte[] ReservedHostPerformanceBooster; 354 [PacketField, Offset(bytes: 0x29)] 355 public uint LUNumWriteBoosterBufferAllocUnits; 356 } 357 #pragma warning restore 649, 169 358 }