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 public enum DataDirection : uint 12 { 13 NoTransfer = 0b00, 14 Out = 0b01, 15 In = 0b10, 16 } 17 18 public enum CommandType : uint 19 { 20 UFSStorage = 1, 21 } 22 23 public enum UTPTransferStatus : uint 24 { 25 Success = 0, 26 InvalidCommandTableAttributes = 1, 27 InvalidPRDTAttributes = 2, 28 MismatchDataBufferSize = 3, 29 MismatchResponseUPIUSize = 4, 30 CommunicationFailure = 5, 31 Aborted = 6, 32 HostFatalError = 7, 33 DeviceFatalError = 8, 34 InvalidCryptoConfiguration = 9, 35 GeneralCryptoError = 10, 36 InvalidOCSValue = 15, 37 } 38 39 public enum UTPTaskManagementStatus : uint 40 { 41 Success = 0, 42 InvalidTaskManagementFunctionAttributes = 1, 43 MismatchTaskManagementRequestSize = 2, 44 MismatchTaskManagementResponseSize = 3, 45 PeerCommunicationFailure = 4, 46 Aborted = 5, 47 HostFatalError = 6, 48 DeviceFatalError = 7, 49 InvalidOCSValue = 15, 50 } 51 52 #pragma warning disable 649, 169 53 [LeastSignificantByteFirst] 54 public struct UTPTransferRequest 55 { 56 [PacketField, Offset(doubleWords: 0, bits: 0), Width(8)] 57 public byte CryptoConfigurationIndex; 58 [PacketField, Offset(doubleWords: 0, bits: 8), Width(8)] 59 public byte TotalEHSLength; 60 [PacketField, Offset(doubleWords: 0, bits: 23), Width(1)] 61 public bool CryptoEnable; 62 [PacketField, Offset(doubleWords: 0, bits: 24), Width(1)] 63 public bool Interrupt; 64 [PacketField, Offset(doubleWords: 0, bits: 25), Width(2)] 65 public DataDirection DataDirection; 66 [PacketField, Offset(doubleWords: 0, bits: 28), Width(4)] 67 public CommandType CommandType; 68 [PacketField, Offset(doubleWords: 1, bits: 0), Width(32)] 69 public uint DataUnitNumberLower; 70 [PacketField, Offset(doubleWords: 2, bits: 0), Width(8)] 71 public UTPTransferStatus OverallCommandStatus; 72 [PacketField, Offset(doubleWords: 2, bits: 8), Width(8)] 73 public uint CommonDataSize; 74 [PacketField, Offset(doubleWords: 2, bits: 16), Width(16)] 75 public ushort LastDataByteCount; 76 [PacketField, Offset(doubleWords: 3, bits: 0), Width(32)] 77 public uint DataUnitNumberUpper; 78 [PacketField, Offset(doubleWords: 4, bits: 7), Width(25)] 79 public uint UTPCommandDescriptorBaseAddressLower; 80 [PacketField, Offset(doubleWords: 5, bits: 0), Width(32)] 81 public uint UTPCommandDescriptorBaseAddressUpper; 82 [PacketField, Offset(doubleWords: 6, bits: 0), Width(16)] 83 public ushort ResponseUPIULength; 84 [PacketField, Offset(doubleWords: 6, bits: 16), Width(16)] 85 public ushort ResponseUPIUOffset; 86 [PacketField, Offset(doubleWords: 7, bits: 0), Width(16)] 87 public ushort PRDTLength; 88 [PacketField, Offset(doubleWords: 7, bits: 16), Width(16)] 89 public ushort PRDTOffset; 90 } 91 92 [LeastSignificantByteFirst] 93 public struct UTPTaskManagementRequestHeader 94 { 95 [PacketField, Offset(doubleWords: 0, bits: 24), Width(1)] 96 public bool Interrupt; 97 [PacketField, Offset(doubleWords: 2, bits: 0), Width(8)] 98 public UTPTaskManagementStatus OverallCommandStatus; 99 } 100 101 [LeastSignificantByteFirst] 102 public struct PRDT4DW 103 { 104 [PacketField, Offset(doubleWords: 0, bits: 2), Width(30)] 105 public uint DataBaseAddress; 106 [PacketField, Offset(doubleWords: 1, bits: 0), Width(32)] 107 public uint DataBaseAddressUpper; 108 [PacketField, Offset(doubleWords: 3, bits: 0), Width(18)] 109 public uint DataByteCount; 110 } 111 112 [LeastSignificantByteFirst] 113 public struct PRDT2DW 114 { 115 [PacketField, Offset(doubleWords: 0, bits: 2), Width(30)] 116 public uint DataBaseAddress; 117 [PacketField, Offset(doubleWords: 1, bits: 0), Width(32)] 118 public uint DataBaseAddressUpper; 119 } 120 #pragma warning restore 649, 169 121 }