VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/FirmwareNew/MdePkg/Include/IndustryStandard/Ufs.h@ 108794

Last change on this file since 108794 was 108794, checked in by vboxsync, 2 weeks ago

Devices/EFI/FirmwareNew: Merge edk2-stable202502 from the vendor branch and make it build for the important platforms, bugref:4643

  • Property svn:eol-style set to native
File size: 24.1 KB
Line 
1/*++ @file
2
3 Common definitions for Universal Flash Storage (UFS)
4
5 Copyright (c) Microsoft Corporation. All rights reserved.
6 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9 @par Revision Reference:
10 JESD220 - Universal Flash Storage (UFS)
11 Version 4.0
12 https://www.jedec.org/system/files/docs/JESD220F.pdf
13--*/
14
15#ifndef __UFS_H__
16#define __UFS_H__
17
18#include <Base.h>
19
20#define UFS_LUN_0 0x00
21#define UFS_LUN_1 0x01
22#define UFS_LUN_2 0x02
23#define UFS_LUN_3 0x03
24#define UFS_LUN_4 0x04
25#define UFS_LUN_5 0x05
26#define UFS_LUN_6 0x06
27#define UFS_LUN_7 0x07
28#define UFS_WLUN_REPORT_LUNS 0x81
29#define UFS_WLUN_UFS_DEV 0xD0
30#define UFS_WLUN_BOOT 0xB0
31#define UFS_WLUN_RPMB 0xC4
32
33#pragma pack(1)
34
35//
36// UFS 4.0 Spec Table 10.13 - UTP Command UPIU
37//
38typedef struct {
39 //
40 // DW0
41 //
42 UINT8 TransCode : 6; /* Transaction Type - 0x01*/
43 UINT8 Dd : 1;
44 UINT8 Hd : 1;
45 UINT8 Flags;
46 UINT8 Lun;
47 UINT8 TaskTag; /* Task Tag */
48
49 //
50 // DW1
51 //
52 UINT8 CmdSet : 4; /* Command Set Type */
53 UINT8 Iid : 4; /* Initiator ID */
54 UINT8 Rsvd1;
55 UINT8 Rsvd2;
56 UINT8 Rsvd3 : 4;
57 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
58
59 //
60 // DW2
61 //
62 UINT8 EhsLen; /* Total EHS Length - 0x00 */
63 UINT8 Rsvd4;
64 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
65
66 //
67 // DW3
68 //
69 UINT32 ExpDataTranLen; /* Expected Data Transfer Length - Big Endian */
70
71 //
72 // DW4 - DW7
73 //
74 UINT8 Cdb[16];
75} UTP_COMMAND_UPIU;
76
77//
78// UFS 4.0 Spec Table 10.15 - UTP Response UPIU
79//
80typedef struct {
81 //
82 // DW0
83 //
84 UINT8 TransCode : 6; /* Transaction Type - 0x21*/
85 UINT8 Dd : 1;
86 UINT8 Hd : 1;
87 UINT8 Flags;
88 UINT8 Lun;
89 UINT8 TaskTag; /* Task Tag */
90
91 //
92 // DW1
93 //
94 UINT8 CmdSet : 4; /* Command Set Type */
95 UINT8 Iid : 4; /* Initiator ID */
96 UINT8 Rsvd1 : 4;
97 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
98 UINT8 Response; /* Response */
99 UINT8 Status; /* Status */
100
101 //
102 // DW2
103 //
104 UINT8 EhsLen; /* Total EHS Length - 0x00 */
105 UINT8 DevInfo; /* Device Information */
106 UINT16 DataSegLen; /* Data Segment Length - Big Endian */
107
108 //
109 // DW3
110 //
111 UINT32 ResTranCount; /* Residual Transfer Count - Big Endian */
112
113 //
114 // DW4 - DW7
115 //
116 UINT8 Rsvd2[16];
117
118 //
119 // Data Segment - Sense Data
120 //
121 UINT16 SenseDataLen; /* Sense Data Length - Big Endian */
122 UINT8 SenseData[18]; /* Sense Data */
123} UTP_RESPONSE_UPIU;
124
125//
126// UFS 4.0 Spec Table 10.21 - UTP Data-Out UPIU
127//
128typedef struct {
129 //
130 // DW0
131 //
132 UINT8 TransCode : 6; /* Transaction Type - 0x02*/
133 UINT8 Dd : 1;
134 UINT8 Hd : 1;
135 UINT8 Flags;
136 UINT8 Lun;
137 UINT8 TaskTag; /* Task Tag */
138
139 //
140 // DW1
141 //
142 UINT8 Rsvd1 : 4;
143 UINT8 Iid : 4; /* Initiator ID */
144 UINT8 Rsvd2[2];
145 UINT8 Rsvd3 : 4;
146 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
147
148 //
149 // DW2
150 //
151 UINT8 EhsLen; /* Total EHS Length - 0x00 */
152 UINT8 Rsvd4;
153 UINT16 DataSegLen; /* Data Segment Length - Big Endian */
154
155 //
156 // DW3
157 //
158 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */
159
160 //
161 // DW4
162 //
163 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */
164
165 //
166 // DW5 - DW7
167 //
168 UINT8 Rsvd5[12];
169
170 //
171 // Data Segment - Data to be sent out
172 //
173 // UINT8 Data[]; /* Data to be sent out, maximum is 65535 bytes */
174} UTP_DATA_OUT_UPIU;
175
176//
177// UFS 4.0 Spec Table 10.23 - UTP Data-In UPIU
178//
179typedef struct {
180 //
181 // DW0
182 //
183 UINT8 TransCode : 6; /* Transaction Type - 0x22*/
184 UINT8 Dd : 1;
185 UINT8 Hd : 1;
186 UINT8 Flags;
187 UINT8 Lun;
188 UINT8 TaskTag; /* Task Tag */
189
190 //
191 // DW1
192 //
193 UINT8 Rsvd1 : 4;
194 UINT8 Iid : 4; /* Initiator ID */
195 UINT8 Rsvd2 : 4;
196 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
197 UINT8 Rsvd3[2];
198
199 //
200 // DW2
201 //
202 UINT8 EhsLen; /* Total EHS Length - 0x00 */
203 UINT8 Rsvd4;
204 UINT16 DataSegLen; /* Data Segment Length - Big Endian */
205
206 //
207 // DW3
208 //
209 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */
210
211 //
212 // DW4
213 //
214 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */
215
216 //
217 // DW5
218 //
219 UINT8 HintControl : 4; /* Hint Control */
220 UINT8 Rsvd5 : 4;
221 UINT8 HintIid : 4; /* Hint Initiator ID */
222 UINT8 HintExt_Iid : 4; /* Hint Initiator ID Extended */
223 UINT8 HintLun; /* Hint LUN */
224 UINT8 HintTaskTag; /* Hint Task Tag */
225
226 //
227 // DW6
228 //
229 UINT32 HintDataBufOffset; /* Hint Data Buffer Offset - Big Endian */
230
231 //
232 // DW7
233 //
234 UINT32 HintDataCount; /* Hint Data Count - Big Endian */
235
236 //
237 // Data Segment - Data to be read
238 //
239 // UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */
240} UTP_DATA_IN_UPIU;
241
242//
243// UFS 4.0 Spec Table 10.25 - UTP Ready-To-Transfer UPIU
244//
245typedef struct {
246 //
247 // DW0
248 //
249 UINT8 TransCode : 6; /* Transaction Type - 0x31*/
250 UINT8 Dd : 1;
251 UINT8 Hd : 1;
252 UINT8 Flags;
253 UINT8 Lun;
254 UINT8 TaskTag; /* Task Tag */
255
256 //
257 // DW1
258 //
259 UINT8 Rsvd1 : 4;
260 UINT8 Iid : 4; /* Initiator ID */
261 UINT8 Rsvd2 : 4;
262 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
263 UINT8 Rsvd3[2];
264
265 //
266 // DW2
267 //
268 UINT8 EhsLen; /* Total EHS Length - 0x00 */
269 UINT8 Rsvd4;
270 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
271
272 //
273 // DW3
274 //
275 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */
276
277 //
278 // DW4
279 //
280 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */
281
282 //
283 // DW5
284 //
285 UINT8 HintControl : 4; /* Hint Control */
286 UINT8 Rsvd5 : 4;
287 UINT8 HintIid : 4; /* Hint Initiator ID */
288 UINT8 HintExt_Iid : 4; /* Hint Initiator ID Extended */
289 UINT8 HintLun; /* Hint LUN */
290 UINT8 HintTaskTag; /* Hint Task Tag */
291
292 //
293 // DW6
294 //
295 UINT32 HintDataBufOffset; /* Hint Data Buffer Offset - Big Endian */
296
297 //
298 // DW7
299 //
300 UINT32 HintDataCount; /* Hint Data Count - Big Endian */
301
302 //
303 // Data Segment - Data to be read
304 //
305 // UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */
306} UTP_RDY_TO_TRAN_UPIU;
307
308//
309// UFS 4.0 Spec Table 10.27 - UTP Task Management Request UPIU
310//
311typedef struct {
312 //
313 // DW0
314 //
315 UINT8 TransCode : 6; /* Transaction Type - 0x04*/
316 UINT8 Dd : 1;
317 UINT8 Hd : 1;
318 UINT8 Flags;
319 UINT8 Lun;
320 UINT8 TaskTag; /* Task Tag */
321
322 //
323 // DW1
324 //
325 UINT8 Rsvd1 : 4;
326 UINT8 Iid : 4; /* Initiator ID */
327 UINT8 TskManFunc; /* Task Management Function */
328 UINT8 Rsvd2;
329 UINT8 Rsvd3 : 4;
330 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
331
332 //
333 // DW2
334 //
335 UINT8 EhsLen; /* Total EHS Length - 0x00 */
336 UINT8 Rsvd4;
337 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
338
339 //
340 // DW3
341 //
342 UINT32 InputParam1; /* Input Parameter 1 - Big Endian */
343
344 //
345 // DW4
346 //
347 UINT32 InputParam2; /* Input Parameter 2 - Big Endian */
348
349 //
350 // DW5
351 //
352 UINT32 InputParam3; /* Input Parameter 3 - Big Endian */
353
354 //
355 // DW6 - DW7
356 //
357 UINT8 Rsvd5[8];
358} UTP_TM_REQ_UPIU;
359
360//
361// UFS 4.0 Spec Table 10.30 - UTP Task Management Response UPIU
362//
363typedef struct {
364 //
365 // DW0
366 //
367 UINT8 TransCode : 6; /* Transaction Type - 0x24*/
368 UINT8 Dd : 1;
369 UINT8 Hd : 1;
370 UINT8 Flags;
371 UINT8 Lun;
372 UINT8 TaskTag; /* Task Tag */
373
374 //
375 // DW1
376 //
377 UINT8 Rsvd1 : 4;
378 UINT8 Iid : 4; /* Initiator ID */
379 UINT8 Rsvd2 : 4;
380 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
381 UINT8 Resp; /* Response */
382 UINT8 Rsvd3;
383
384 //
385 // DW2
386 //
387 UINT8 EhsLen; /* Total EHS Length - 0x00 */
388 UINT8 Rsvd4;
389 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
390
391 //
392 // DW3
393 //
394 UINT32 OutputParam1; /* Output Parameter 1 - Big Endian */
395
396 //
397 // DW4
398 //
399 UINT32 OutputParam2; /* Output Parameter 2 - Big Endian */
400
401 //
402 // DW5 - DW7
403 //
404 UINT8 Rsvd5[12];
405} UTP_TM_RESP_UPIU;
406
407//
408// UFS 4.0 Spec Table 10.35 - 10.57 - Transaction Specific Fields for (Genericized) Opcode
409//
410typedef struct {
411 UINT8 Opcode;
412 UINT8 DescId;
413 UINT8 Index;
414 UINT8 Selector;
415 UINT16 Rsvd1;
416 UINT16 Length;
417 UINT32 Value;
418 UINT32 Rsvd2;
419} UTP_UPIU_TSF;
420
421//
422// UFS 4.0 Spec Table 10.33 - UTP Query Request UPIU
423//
424typedef struct {
425 //
426 // DW0
427 //
428 UINT8 TransCode : 6; /* Transaction Type - 0x16*/
429 UINT8 Dd : 1;
430 UINT8 Hd : 1;
431 UINT8 Flags;
432 UINT8 Rsvd1;
433 UINT8 TaskTag; /* Task Tag */
434
435 //
436 // DW1
437 //
438 UINT8 Rsvd2;
439 UINT8 QueryFunc; /* Query Function */
440 UINT8 Rsvd3[2];
441
442 //
443 // DW2
444 //
445 UINT8 EhsLen; /* Total EHS Length - 0x00 */
446 UINT8 Rsvd4;
447 UINT16 DataSegLen; /* Data Segment Length - Big Endian */
448
449 //
450 // DW3 - 6
451 //
452 UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */
453
454 //
455 // DW7
456 //
457 UINT8 Rsvd5[4];
458
459 //
460 // Data Segment - Data to be transferred
461 //
462 // UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */
463} UTP_QUERY_REQ_UPIU;
464
465#define QUERY_FUNC_STD_READ_REQ 0x01
466#define QUERY_FUNC_STD_WRITE_REQ 0x81
467
468//
469// UFS 4.0 Spec Table 10.36 - Query Function opcode values
470//
471typedef enum {
472 UtpQueryFuncOpcodeNop = 0x00,
473 UtpQueryFuncOpcodeRdDesc = 0x01,
474 UtpQueryFuncOpcodeWrDesc = 0x02,
475 UtpQueryFuncOpcodeRdAttr = 0x03,
476 UtpQueryFuncOpcodeWrAttr = 0x04,
477 UtpQueryFuncOpcodeRdFlag = 0x05,
478 UtpQueryFuncOpcodeSetFlag = 0x06,
479 UtpQueryFuncOpcodeClrFlag = 0x07,
480 UtpQueryFuncOpcodeTogFlag = 0x08
481} UTP_QUERY_FUNC_OPCODE;
482
483//
484// UFS 4.0 Spec Table 10.46 - UTP Query Response UPIU
485//
486typedef struct {
487 //
488 // DW0
489 //
490 UINT8 TransCode : 6; /* Transaction Type - 0x36*/
491 UINT8 Dd : 1;
492 UINT8 Hd : 1;
493 UINT8 Flags;
494 UINT8 Rsvd1;
495 UINT8 TaskTag; /* Task Tag */
496
497 //
498 // DW1
499 //
500 UINT8 Rsvd2;
501 UINT8 QueryFunc; /* Query Function */
502 UINT8 QueryResp; /* Query Response */
503 UINT8 Rsvd3;
504
505 //
506 // DW2
507 //
508 UINT8 EhsLen; /* Total EHS Length - 0x00 */
509 UINT8 DevInfo; /* Device Information */
510 UINT16 DataSegLen; /* Data Segment Length - Big Endian */
511
512 //
513 // DW3 - 6
514 //
515 UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */
516
517 //
518 // DW7
519 //
520 UINT8 Rsvd4[4];
521
522 //
523 // Data Segment - Data to be transferred
524 //
525 // UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */
526} UTP_QUERY_RESP_UPIU;
527
528//
529// UFS 4.0 Spec Table 10.47 - Query Response Code
530//
531typedef enum {
532 UfsUtpQueryResponseSuccess = 0x00,
533 UfsUtpQueryResponseParamNotReadable = 0xF6,
534 UfsUtpQueryResponseParamNotWriteable = 0xF7,
535 UfsUtpQueryResponseParamAlreadyWritten = 0xF8,
536 UfsUtpQueryResponseInvalidLen = 0xF9,
537 UfsUtpQueryResponseInvalidVal = 0xFA,
538 UfsUtpQueryResponseInvalidSelector = 0xFB,
539 UfsUtpQueryResponseInvalidIndex = 0xFC,
540 UfsUtpQueryResponseInvalidIdn = 0xFD,
541 UfsUtpQueryResponseInvalidOpc = 0xFE,
542 UfsUtpQueryResponseGeneralFailure = 0xFF
543} UTP_QUERY_RESP_CODE;
544
545//
546// UFS 4.0 Spec Table 10.58 - UTP Reject UPIU
547//
548typedef struct {
549 //
550 // DW0
551 //
552 UINT8 TransCode : 6; /* Transaction Type - 0x3F*/
553 UINT8 Dd : 1;
554 UINT8 Hd : 1;
555 UINT8 Flags;
556 UINT8 Lun;
557 UINT8 TaskTag; /* Task Tag */
558
559 //
560 // DW1
561 //
562 UINT8 Rsvd1 : 4;
563 UINT8 Iid : 4; /* Initiator ID */
564 UINT8 Rsvd2 : 4;
565 UINT8 Ext_Iid : 4; /* Initiator ID Extended */
566 UINT8 Response; /* Response - 0x01 */
567 UINT8 Rsvd3;
568
569 //
570 // DW2
571 //
572 UINT8 EhsLen; /* Total EHS Length - 0x00 */
573 UINT8 DevInfo; /* Device Information - 0x00 */
574 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
575
576 //
577 // DW3
578 //
579 UINT8 HdrSts; /* Basic Header Status */
580 UINT8 Rsvd4;
581 UINT8 E2ESts; /* End-to-End Status */
582 UINT8 Rsvd5;
583
584 //
585 // DW4 - DW7
586 //
587 UINT8 Rsvd6[16];
588} UTP_REJ_UPIU;
589
590//
591// UFS 4.0 Spec Table 10.61 - UTP NOP OUT UPIU
592//
593typedef struct {
594 //
595 // DW0
596 //
597 UINT8 TransCode : 6; /* Transaction Type - 0x00*/
598 UINT8 Dd : 1;
599 UINT8 Hd : 1;
600 UINT8 Flags;
601 UINT8 Rsvd1;
602 UINT8 TaskTag; /* Task Tag */
603
604 //
605 // DW1
606 //
607 UINT8 Rsvd2[4];
608
609 //
610 // DW2
611 //
612 UINT8 EhsLen; /* Total EHS Length - 0x00 */
613 UINT8 Rsvd3;
614 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
615
616 //
617 // DW3 - DW7
618 //
619 UINT8 Rsvd4[20];
620} UTP_NOP_OUT_UPIU;
621
622//
623// UFS 4.0 Spec Table 10.62 - UTP NOP IN UPIU
624//
625typedef struct {
626 //
627 // DW0
628 //
629 UINT8 TransCode : 6; /* Transaction Type - 0x20*/
630 UINT8 Dd : 1;
631 UINT8 Hd : 1;
632 UINT8 Flags;
633 UINT8 Rsvd1;
634 UINT8 TaskTag; /* Task Tag */
635
636 //
637 // DW1
638 //
639 UINT8 Rsvd2[2];
640 UINT8 Resp; /* Response - 0x00 */
641 UINT8 Rsvd3;
642
643 //
644 // DW2
645 //
646 UINT8 EhsLen; /* Total EHS Length - 0x00 */
647 UINT8 DevInfo; /* Device Information - 0x00 */
648 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */
649
650 //
651 // DW3 - DW7
652 //
653 UINT8 Rsvd4[20];
654} UTP_NOP_IN_UPIU;
655
656//
657// UFS 4.0 Spec Table 14.1 - Descriptor identification values
658//
659typedef enum {
660 UfsDeviceDesc = 0x00,
661 UfsConfigDesc = 0x01,
662 UfsUnitDesc = 0x02,
663 UfsInterConnDesc = 0x04,
664 UfsStringDesc = 0x05,
665 UfsGeometryDesc = 0x07,
666 UfsPowerDesc = 0x08,
667 UfsDevHealthDesc = 0x09
668} UFS_DESC_IDN;
669
670//
671// UFS 4.0 Spec Table 14.4 - Device Descriptor
672//
673typedef struct {
674 UINT8 Length;
675 UINT8 DescType;
676 UINT8 Device;
677 UINT8 DevClass;
678 UINT8 DevSubClass;
679 UINT8 Protocol;
680 UINT8 NumLun;
681 UINT8 NumWLun;
682 UINT8 BootEn;
683 UINT8 DescAccessEn;
684 UINT8 InitPowerMode;
685 UINT8 HighPriorityLun;
686 UINT8 SecureRemovalType;
687 UINT8 SecurityLun;
688 UINT8 BgOpsTermLat;
689 UINT8 InitActiveIccLevel;
690 UINT16 SpecVersion;
691 UINT16 ManufactureDate;
692 UINT8 ManufacturerName;
693 UINT8 ProductName;
694 UINT8 SerialName;
695 UINT8 OemId;
696 UINT16 ManufacturerId;
697 UINT8 Ud0BaseOffset;
698 UINT8 Ud0ConfParamLen;
699 UINT8 DevRttCap;
700 UINT16 PeriodicRtcUpdate;
701 UINT8 UFSFeaturesSupport; // Deprecated, use ExtendedUFSFeaturesSupport
702 UINT8 FFUTimeout;
703 UINT8 QueueDepth;
704 UINT16 DeviceVersion;
705 UINT8 NumSecureWPArea;
706 UINT32 PSAMaxDataSize;
707 UINT8 PSAStateTimeout;
708 UINT8 ProductRevisionLevel;
709 UINT8 Rsvd1[5];
710 UINT8 Rsvd2[16];
711 UINT8 Rsvd3[3];
712 UINT8 Rsvd4[12];
713 UINT32 ExtendedUFSFeaturesSupport;
714 UINT8 WriteBoosterBufPreserveUserSpaceEn;
715 UINT8 WriteBoosterBufType;
716 UINT32 NumSharedWriteBoosterAllocUnits;
717} UFS_DEV_DESC;
718
719//
720// UFS 4.0 Spec Table 14.4 (Offset 10h) - Specification version
721//
722typedef union {
723 struct {
724 UINT8 Suffix : 4;
725 UINT8 Minor : 4;
726 UINT8 Major;
727 } Bits;
728 UINT16 Data;
729} UFS_SPEC_VERSION;
730
731//
732// UFS 4.0 Spec Table 14.4 (Offset 4Fh) - Extended UFS Features Support
733//
734typedef union {
735 struct {
736 UINT32 FFU : 1;
737 UINT32 PSA : 1;
738 UINT32 DeviceLifeSpan : 1;
739 UINT32 RefreshOperation : 1;
740 UINT32 TooHighTemp : 1;
741 UINT32 TooLowTemp : 1;
742 UINT32 ExtendedTemp : 1;
743 UINT32 Rsvd1 : 1;
744 UINT32 WriteBooster : 1;
745 UINT32 PerformanceThrottling : 1;
746 UINT32 AdvancedRPMB : 1;
747 UINT32 Rsvd2 : 3;
748 UINT32 Barrier : 1;
749 UINT32 ClearErrorHistory : 1;
750 UINT32 Ext_Iid : 1;
751 UINT32 Rsvd3 : 1;
752 UINT32 Rsvd4 : 14;
753 } Bits;
754 UINT32 Data;
755} EXTENDED_UFS_FEATURES_SUPPORT;
756
757//
758// UFS 4.0 Spec Table 14.10 - Configuration Descriptor Header (INDEX = 0)
759// and Device Descriptor Configuration parameters
760//
761typedef struct {
762 UINT8 Length;
763 UINT8 DescType;
764 UINT8 ConfDescContinue;
765 UINT8 BootEn;
766 UINT8 DescAccessEn;
767 UINT8 InitPowerMode;
768 UINT8 HighPriorityLun;
769 UINT8 SecureRemovalType;
770 UINT8 InitActiveIccLevel;
771 UINT16 PeriodicRtcUpdate;
772 UINT8 Rsvd1;
773 UINT8 RpmbRegionEnable;
774 UINT8 RpmbRegion1Size;
775 UINT8 RpmbRegion2Size;
776 UINT8 RpmbRegion3Size;
777 UINT8 WriteBoosterBufPreserveUserSpaceEn;
778 UINT8 WriteBoosterBufType;
779 UINT32 NumSharedWriteBoosterAllocUnits;
780} UFS_CONFIG_DESC_GEN_HEADER;
781
782//
783// UFS 4.0 Spec Table 14.11 - Configuration Descriptor Header (INDEX = 1/2/3)
784//
785typedef struct {
786 UINT8 Length;
787 UINT8 DescType;
788 UINT8 ConfDescContinue;
789 UINT8 Rsvd1[19];
790} UFS_CONFIG_DESC_EXT_HEADER;
791
792//
793// UFS 4.0 Spec Table 14.12 - UNit Descriptor configurable parameters
794//
795typedef struct {
796 UINT8 LunEn;
797 UINT8 BootLunId;
798 UINT8 LunWriteProt;
799 UINT8 MemType;
800 UINT32 NumAllocUnits;
801 UINT8 DataReliability;
802 UINT8 LogicBlkSize;
803 UINT8 ProvisionType;
804 UINT16 CtxCap;
805 UINT8 Rsvd1[3];
806 UINT8 Rsvd2[6];
807 UINT32 LuNumWriteBoosterBufAllocUnits;
808} UFS_UNIT_DESC_CONFIG_PARAMS;
809
810//
811// UFS 4.0 Spec Table 14.6 - Configuration Descriptor Format
812//
813// WARNING: This struct contains variable-size members! (across spec versions)
814// To maintain backward compatibility, UnitDescConfParams should not be
815// accessed as a struct member.
816// Instead, use `Ud0BaseOffset` and `Ud0ConfParamLen` from the Device
817// Descriptor to calculate the offset and location of the Unit Descriptors.
818//
819typedef struct {
820 UFS_CONFIG_DESC_GEN_HEADER Header;
821 UFS_UNIT_DESC_CONFIG_PARAMS UnitDescConfParams[8];
822} UFS_CONFIG_DESC;
823
824//
825// UFS 4.0 Spec Table 14.13 - Geometry Descriptor
826//
827typedef struct {
828 UINT8 Length;
829 UINT8 DescType;
830 UINT8 MediaTech;
831 UINT8 Rsvd1;
832 UINT64 TotalRawDevCapacity;
833 UINT8 MaxNumberLu;
834 UINT32 SegSize;
835 UINT8 AllocUnitSize;
836 UINT8 MinAddrBlkSize;
837 UINT8 OptReadBlkSize;
838 UINT8 OptWriteBlkSize;
839 UINT8 MaxInBufSize;
840 UINT8 MaxOutBufSize;
841 UINT8 RpmbRwSize;
842 UINT8 DynamicCapacityResourcePolicy;
843 UINT8 DataOrder;
844 UINT8 MaxCtxIdNum;
845 UINT8 SysDataTagUnitSize;
846 UINT8 SysDataResUnitSize;
847 UINT8 SupSecRemovalTypes;
848 UINT16 SupMemTypes;
849 UINT32 SysCodeMaxNumAllocUnits;
850 UINT16 SupCodeCapAdjFac;
851 UINT32 NonPersMaxNumAllocUnits;
852 UINT16 NonPersCapAdjFac;
853 UINT32 Enhance1MaxNumAllocUnits;
854 UINT16 Enhance1CapAdjFac;
855 UINT32 Enhance2MaxNumAllocUnits;
856 UINT16 Enhance2CapAdjFac;
857 UINT32 Enhance3MaxNumAllocUnits;
858 UINT16 Enhance3CapAdjFac;
859 UINT32 Enhance4MaxNumAllocUnits;
860 UINT16 Enhance4CapAdjFac;
861 UINT32 OptLogicBlkSize;
862 UINT8 Rsvd2[5];
863 UINT8 Rsvd3[2];
864 UINT32 WriteBoosterBufMaxNumAllocUnits;
865 UINT8 DeviceMaxWriteBoosterLus;
866 UINT8 WriteBoosterBufCapAdjFac;
867 UINT8 SupWriteBoosterBufUserSpaceReductionTypes;
868 UINT8 SupWriteBoosterBufTypes;
869} UFS_GEOMETRY_DESC;
870
871//
872// UFS 4.0 Spec Table 14.14 - Unit Descriptor
873//
874typedef struct {
875 UINT8 Length;
876 UINT8 DescType;
877 UINT8 UnitIdx;
878 UINT8 LunEn;
879 UINT8 BootLunId;
880 UINT8 LunWriteProt;
881 UINT8 LunQueueDep;
882 UINT8 PsaSensitive;
883 UINT8 MemType;
884 UINT8 DataReliability;
885 UINT8 LogicBlkSize;
886 UINT64 LogicBlkCount;
887 UINT32 EraseBlkSize;
888 UINT8 ProvisionType;
889 UINT64 PhyMemResCount;
890 UINT16 CtxCap;
891 UINT8 LargeUnitGranularity;
892 UINT8 Rsvd1[6];
893 UINT32 LuNumWriteBoosterBufAllocUnits;
894} UFS_UNIT_DESC;
895
896//
897// UFS 4.0 Spec Table 14.15 - RPMB Unit Descriptor
898//
899typedef struct {
900 UINT8 Length;
901 UINT8 DescType;
902 UINT8 UnitIdx;
903 UINT8 LunEn;
904 UINT8 BootLunId;
905 UINT8 LunWriteProt;
906 UINT8 LunQueueDep;
907 UINT8 PsaSensitive;
908 UINT8 MemType;
909 UINT8 RpmbRegionEnable;
910 UINT8 LogicBlkSize;
911 UINT64 LogicBlkCount;
912 UINT8 RpmbRegion0Size;
913 UINT8 RpmbRegion1Size;
914 UINT8 RpmbRegion2Size;
915 UINT8 RpmbRegion3Size;
916 UINT8 ProvisionType;
917 UINT64 PhyMemResCount;
918 UINT8 Rsvd3[3];
919} UFS_RPMB_UNIT_DESC;
920
921//
922// UFS 4.0 Spec Table 7.13 - Format for Power Parameter element
923//
924typedef struct {
925 UINT16 Value : 12;
926 UINT16 Rsvd1 : 2;
927 UINT16 Unit : 2;
928} UFS_POWER_PARAM_ELEMENT;
929
930//
931// UFS 4.0 Spec Table 14.16 - Power Parameters Descriptor
932//
933typedef struct {
934 UINT8 Length;
935 UINT8 DescType;
936 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVcc[16];
937 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ[16];
938 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ2[16];
939} UFS_POWER_DESC;
940
941//
942// UFS 4.0 Spec Table 14.17 - Interconnect Descriptor
943//
944typedef struct {
945 UINT8 Length;
946 UINT8 DescType;
947 UINT16 UniProVer;
948 UINT16 MphyVer;
949} UFS_INTER_CONNECT_DESC;
950
951//
952// UFS 4.0 Spec Table 14.18 - 14.22 - String Descriptor
953//
954typedef struct {
955 UINT8 Length;
956 UINT8 DescType;
957 CHAR16 Unicode[126];
958} UFS_STRING_DESC;
959
960//
961// UFS 4.0 Spec Table 14.26 - Flags
962//
963typedef enum {
964 UfsFlagDevInit = 0x01,
965 UfsFlagPermWpEn = 0x02,
966 UfsFlagPowerOnWpEn = 0x03,
967 UfsFlagBgOpsEn = 0x04,
968 UfsFlagDevLifeSpanModeEn = 0x05,
969 UfsFlagPurgeEn = 0x06,
970 UfsFlagRefreshEn = 0x07,
971 UfsFlagPhyResRemoval = 0x08,
972 UfsFlagBusyRtc = 0x09,
973 UfsFlagPermDisFwUpdate = 0x0B,
974 UfsFlagWriteBoosterEn = 0x0E,
975 UfsFlagWbBufFlushEn = 0x0F,
976 UfsFlagWbBufFlushHibernate = 0x10
977} UFS_FLAGS_IDN;
978
979//
980// UFS 4.0 Spec Table 14.28 - Attributes
981//
982typedef enum {
983 UfsAttrBootLunEn = 0x00,
984 UfsAttrCurPowerMode = 0x02,
985 UfsAttrActiveIccLevel = 0x03,
986 UfsAttrOutOfOrderDataEn = 0x04,
987 UfsAttrBgOpStatus = 0x05,
988 UfsAttrPurgeStatus = 0x06,
989 UfsAttrMaxDataInSize = 0x07,
990 UfsAttrMaxDataOutSize = 0x08,
991 UfsAttrDynCapNeeded = 0x09,
992 UfsAttrRefClkFreq = 0x0a,
993 UfsAttrConfigDescLock = 0x0b,
994 UfsAttrMaxNumOfRtt = 0x0c,
995 UfsAttrExceptionEvtCtrl = 0x0d,
996 UfsAttrExceptionEvtSts = 0x0e,
997 UfsAttrSecondsPassed = 0x0f,
998 UfsAttrContextConf = 0x10,
999 UfsAttrDeviceFfuStatus = 0x14,
1000 UfsAttrPsaState = 0x15,
1001 UfsAttrPsaDataSize = 0x16,
1002 UfsAttrRefClkGatingWaitTime = 0x17,
1003 UfsAttrDeviceCaseRoughTemp = 0x18,
1004 UfsAttrDeviceTooHighTempBound = 0x19,
1005 UfsAttrDeviceTooLowTempBound = 0x1a,
1006 UfsAttrThrottlingStatus = 0x1b,
1007 UfsAttrWriteBoosterBufFlushStatus = 0x1c,
1008 UfsAttrAvailableWriteBoosterBufSize = 0x1d,
1009 UfsAttrWriteBoosterBufLifeTimeEst = 0x1e,
1010 UfsAttrCurrentWriteBoosterBufSize = 0x1f,
1011 UfsAttrExtIidEn = 0x2a,
1012 UfsAttrHostHintCacheSize = 0x2b,
1013 UfsAttrRefreshStatus = 0x2c,
1014 UfsAttrRefreshFreq = 0x2d,
1015 UfsAttrRefreshUnit = 0x2e,
1016 UfsAttrRefreshMethod = 0x2f,
1017 UfsAttrTimestamp = 0x30
1018} UFS_ATTR_IDN;
1019
1020#pragma pack()
1021
1022#endif
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette