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 }