2 UfsPassThruDxe driver is used to produce EFI_EXT_SCSI_PASS_THRU protocol interface
3 for upper layer application to execute UFS-supported SCSI cmds.
5 Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef _UFS_PASS_THRU_HCI_H_
17 #define _UFS_PASS_THRU_HCI_H_
20 // Host Capabilities Register Offsets
22 #define UFS_HC_CAP_OFFSET 0x0000 // Controller Capabilities
23 #define UFS_HC_VER_OFFSET 0x0008 // Version
24 #define UFS_HC_DDID_OFFSET 0x0010 // Device ID and Device Class
25 #define UFS_HC_PMID_OFFSET 0x0014 // Product ID and Manufacturer ID
26 #define UFS_HC_AHIT_OFFSET 0x0018 // Auto-Hibernate Idle Timer
28 // Operation and Runtime Register Offsets
30 #define UFS_HC_IS_OFFSET 0x0020 // Interrupt Status
31 #define UFS_HC_IE_OFFSET 0x0024 // Interrupt Enable
32 #define UFS_HC_STATUS_OFFSET 0x0030 // Host Controller Status
33 #define UFS_HC_ENABLE_OFFSET 0x0034 // Host Controller Enable
34 #define UFS_HC_UECPA_OFFSET 0x0038 // Host UIC Error Code PHY Adapter Layer
35 #define UFS_HC_UECDL_OFFSET 0x003c // Host UIC Error Code Data Link Layer
36 #define UFS_HC_UECN_OFFSET 0x0040 // Host UIC Error Code Network Layer
37 #define UFS_HC_UECT_OFFSET 0x0044 // Host UIC Error Code Transport Layer
38 #define UFS_HC_UECDME_OFFSET 0x0048 // Host UIC Error Code DME
39 #define UFS_HC_UTRIACR_OFFSET 0x004c // UTP Transfer Request Interrupt Aggregation Control Register
41 // UTP Transfer Register Offsets
43 #define UFS_HC_UTRLBA_OFFSET 0x0050 // UTP Transfer Request List Base Address
44 #define UFS_HC_UTRLBAU_OFFSET 0x0054 // UTP Transfer Request List Base Address Upper 32-Bits
45 #define UFS_HC_UTRLDBR_OFFSET 0x0058 // UTP Transfer Request List Door Bell Register
46 #define UFS_HC_UTRLCLR_OFFSET 0x005c // UTP Transfer Request List CLear Register
47 #define UFS_HC_UTRLRSR_OFFSET 0x0060 // UTP Transfer Request Run-Stop Register
49 // UTP Task Management Register Offsets
51 #define UFS_HC_UTMRLBA_OFFSET 0x0070 // UTP Task Management Request List Base Address
52 #define UFS_HC_UTMRLBAU_OFFSET 0x0074 // UTP Task Management Request List Base Address Upper 32-Bits
53 #define UFS_HC_UTMRLDBR_OFFSET 0x0078 // UTP Task Management Request List Door Bell Register
54 #define UFS_HC_UTMRLCLR_OFFSET 0x007c // UTP Task Management Request List CLear Register
55 #define UFS_HC_UTMRLRSR_OFFSET 0x0080 // UTP Task Management Run-Stop Register
57 // UIC Command Register Offsets
59 #define UFS_HC_UIC_CMD_OFFSET 0x0090 // UIC Command Register
60 #define UFS_HC_UCMD_ARG1_OFFSET 0x0094 // UIC Command Argument 1
61 #define UFS_HC_UCMD_ARG2_OFFSET 0x0098 // UIC Command Argument 2
62 #define UFS_HC_UCMD_ARG3_OFFSET 0x009c // UIC Command Argument 3
64 // UMA Register Offsets
66 #define UFS_HC_UMA_OFFSET 0x00b0 // Reserved for Unified Memory Extension
68 #define UFS_HC_HCE_EN BIT0
69 #define UFS_HC_HCS_DP BIT0
70 #define UFS_HC_HCS_UCRDY BIT3
71 #define UFS_HC_IS_ULSS BIT8
72 #define UFS_HC_IS_UCCS BIT10
73 #define UFS_HC_CAP_64ADDR BIT24
74 #define UFS_HC_CAP_NUTMRS (BIT16 | BIT17 | BIT18)
75 #define UFS_HC_CAP_NUTRS (BIT0 | BIT1 | BIT2 | BIT3 | BIT4)
76 #define UFS_HC_UTMRLRSR BIT0
77 #define UFS_HC_UTRLRSR BIT0
80 // The initial value of the OCS field of UTP TRD or TMRD descriptor
81 // defined in JEDEC JESD223 specification
83 #define UFS_HC_TRD_OCS_INIT_VALUE 0x0F
86 // A maximum of length of 256KB is supported by PRDT entry
88 #define UFS_MAX_DATA_LEN_PER_PRD 0x40000
90 #define UFS_STORAGE_COMMAND_TYPE 0x01
92 #define UFS_REGULAR_COMMAND 0x00
93 #define UFS_INTERRUPT_COMMAND 0x01
95 #define UFS_LUN_0 0x00
96 #define UFS_LUN_1 0x01
97 #define UFS_LUN_2 0x02
98 #define UFS_LUN_3 0x03
99 #define UFS_LUN_4 0x04
100 #define UFS_LUN_5 0x05
101 #define UFS_LUN_6 0x06
102 #define UFS_LUN_7 0x07
103 #define UFS_WLUN_REPORT_LUNS 0x81
104 #define UFS_WLUN_UFS_DEV 0xD0
105 #define UFS_WLUN_BOOT 0xB0
106 #define UFS_WLUN_RPMB 0xC4
111 // UFSHCI 2.0 Spec Section 5.2.1 Offset 00h: CAP - Controller Capabilities
114 UINT8 Nutrs
:4; // Number of UTP Transfer Request Slots
117 UINT8 NoRtt
; // Number of outstanding READY TO TRANSFER (RTT) requests supported
119 UINT8 Nutmrs
:3; // Number of UTP Task Management Request Slots
121 UINT8 AutoHs
:1; // Auto-Hibernation Support
123 UINT8 As64
:1; // 64-bit addressing supported
124 UINT8 Oodds
:1; // Out of order data delivery supported
125 UINT8 UicDmetms
:1; // UIC DME_TEST_MODE command supported
126 UINT8 Ume
:1; // Reserved for Unified Memory Extension
131 // UFSHCI 2.0 Spec Section 5.2.2 Offset 08h: VER - UFS Version
134 UINT8 Vs
:4; // Version Suffix
135 UINT8 Mnr
:4; // Minor version number
137 UINT8 Mjr
; // Major version number
143 // UFSHCI 2.0 Spec Section 5.2.3 Offset 10h: HCPID - Host Controller Product ID
145 #define UFS_HC_PID UINT32
148 // UFSHCI 2.0 Spec Section 5.2.4 Offset 14h: HCMID - Host Controller Manufacturer ID
150 #define UFS_HC_MID UINT32
153 // UFSHCI 2.0 Spec Section 5.2.5 Offset 18h: AHIT - Auto-Hibernate Idle Timer
156 UINT32 Ahitv
:10; // Auto-Hibernate Idle Timer Value
157 UINT32 Ts
:3; // Timer scale
162 // UFSHCI 2.0 Spec Section 5.3.1 Offset 20h: IS - Interrupt Status
165 UINT16 Utrcs
:1; // UTP Transfer Request Completion Status
166 UINT16 Udepri
:1; // UIC DME_ENDPOINT_RESET Indication
167 UINT16 Ue
:1; // UIC Error
168 UINT16 Utms
:1; // UIC Test Mode Status
170 UINT16 Upms
:1; // UIC Power Mode Status
171 UINT16 Uhxs
:1; // UIC Hibernate Exit Status
172 UINT16 Uhes
:1; // UIC Hibernate Enter Status
173 UINT16 Ulls
:1; // UIC Link Lost Status
175 UINT16 Ulss
:1; // UIC Link Startup Status
176 UINT16 Utmrcs
:1; // UTP Task Management Request Completion Status
177 UINT16 Uccs
:1; // UIC Command Completion Status
178 UINT16 Dfes
:1; // Device Fatal Error Status
180 UINT16 Utpes
:1; // UTP Error Status
183 UINT16 Hcfes
:1; // Host Controller Fatal Error Status
184 UINT16 Sbfes
:1; // System Bus Fatal Error Status
189 // UFSHCI 2.0 Spec Section 5.3.2 Offset 24h: IE - Interrupt Enable
192 UINT16 Utrce
:1; // UTP Transfer Request Completion Enable
193 UINT16 Udeprie
:1; // UIC DME_ENDPOINT_RESET Enable
194 UINT16 Uee
:1; // UIC Error Enable
195 UINT16 Utmse
:1; // UIC Test Mode Status Enable
197 UINT16 Upmse
:1; // UIC Power Mode Status Enable
198 UINT16 Uhxse
:1; // UIC Hibernate Exit Status Enable
199 UINT16 Uhese
:1; // UIC Hibernate Enter Status Enable
200 UINT16 Ullse
:1; // UIC Link Lost Status Enable
202 UINT16 Ulsse
:1; // UIC Link Startup Status Enable
203 UINT16 Utmrce
:1; // UTP Task Management Request Completion Enable
204 UINT16 Ucce
:1; // UIC Command Completion Enable
205 UINT16 Dfee
:1; // Device Fatal Error Enable
207 UINT16 Utpee
:1; // UTP Error Enable
210 UINT16 Hcfee
:1; // Host Controller Fatal Error Enable
211 UINT16 Sbfee
:1; // System Bus Fatal Error Enable
216 // UFSHCI 2.0 Spec Section 5.3.3 Offset 30h: HCS - Host Controller Status
219 UINT8 Dp
:1; // Device Present
220 UINT8 UtrlRdy
:1; // UTP Transfer Request List Ready
221 UINT8 UtmrlRdy
:1; // UTP Task Management Request List Ready
222 UINT8 UcRdy
:1; // UIC COMMAND Ready
225 UINT8 Upmcrs
:3; // UIC Power Mode Change Request Status
226 UINT8 Rsvd2
:1; // UIC Hibernate Exit Status Enable
227 UINT8 Utpec
:4; // UTP Error Code
229 UINT8 TtagUtpE
; // Task Tag of UTP error
230 UINT8 TlunUtpE
; // Target LUN of UTP error
234 // UFSHCI 2.0 Spec Section 5.3.4 Offset 34h: HCE - Host Controller Enable
237 UINT32 Hce
:1; // Host Controller Enable
242 // UFSHCI 2.0 Spec Section 5.3.5 Offset 38h: UECPA - Host UIC Error Code PHY Adapter Layer
245 UINT32 Ec
:5; // UIC PHY Adapter Layer Error Code
247 UINT32 Err
:1; // UIC PHY Adapter Layer Error
251 // UFSHCI 2.0 Spec Section 5.3.6 Offset 3ch: UECDL - Host UIC Error Code Data Link Layer
254 UINT32 Ec
:15; // UIC Data Link Layer Error Code
256 UINT32 Err
:1; // UIC Data Link Layer Error
260 // UFSHCI 2.0 Spec Section 5.3.7 Offset 40h: UECN - Host UIC Error Code Network Layer
263 UINT32 Ec
:3; // UIC Network Layer Error Code
265 UINT32 Err
:1; // UIC Network Layer Error
269 // UFSHCI 2.0 Spec Section 5.3.8 Offset 44h: UECT - Host UIC Error Code Transport Layer
272 UINT32 Ec
:7; // UIC Transport Layer Error Code
274 UINT32 Err
:1; // UIC Transport Layer Error
278 // UFSHCI 2.0 Spec Section 5.3.9 Offset 48h: UECDME - Host UIC Error Code
281 UINT32 Ec
:1; // UIC DME Error Code
283 UINT32 Err
:1; // UIC DME Error
287 // UFSHCI 2.0 Spec Section 5.3.10 Offset 4Ch: UTRIACR - UTP Transfer Request Interrupt Aggregation Control Register
290 UINT8 IaToVal
; // Interrupt aggregation timeout value
292 UINT8 IacTh
:5; // Interrupt aggregation counter threshold
295 UINT8 Ctr
:1; // Counter and Timer Reset
297 UINT8 Iasb
:1; // Interrupt aggregation status bit
300 UINT8 IapwEn
:1; // Interrupt aggregation parameter write enable
302 UINT8 IaEn
:1; // Interrupt Aggregation Enable/Disable
306 // UFSHCI 2.0 Spec Section 5.4.1 Offset 50h: UTRLBA - UTP Transfer Request List Base Address
310 UINT32 UtrlBa
:22; // UTP Transfer Request List Base Address
314 // UFSHCI 2.0 Spec Section 5.4.2 Offset 54h: UTRLBAU - UTP Transfer Request List Base Address Upper 32-bits
316 #define UFS_HC_UTRLBAU UINT32
319 // UFSHCI 2.0 Spec Section 5.4.3 Offset 58h: UTRLDBR - UTP Transfer Request List Door Bell Register
321 #define UFS_HC_UTRLDBR UINT32
324 // UFSHCI 2.0 Spec Section 5.4.4 Offset 5Ch: UTRLCLR - UTP Transfer Request List CLear Register
326 #define UFS_HC_UTRLCLR UINT32
330 // UFSHCI 2.0 Spec Section 5.4.5 Offset 60h: UTRLRSR - UTP Transfer Request List Run Stop Register
333 UINT32 UtrlRsr
:1; // UTP Transfer Request List Run-Stop Register
339 // UFSHCI 2.0 Spec Section 5.5.1 Offset 70h: UTMRLBA - UTP Task Management Request List Base Address
343 UINT32 UtmrlBa
:22; // UTP Task Management Request List Base Address
347 // UFSHCI 2.0 Spec Section 5.5.2 Offset 74h: UTMRLBAU - UTP Task Management Request List Base Address Upper 32-bits
349 #define UFS_HC_UTMRLBAU UINT32
352 // UFSHCI 2.0 Spec Section 5.5.3 Offset 78h: UTMRLDBR - UTP Task Management Request List Door Bell Register
355 UINT32 UtmrlDbr
:8; // UTP Task Management Request List Door bell Register
360 // UFSHCI 2.0 Spec Section 5.5.4 Offset 7Ch: UTMRLCLR - UTP Task Management Request List CLear Register
363 UINT32 UtmrlClr
:8; // UTP Task Management List Clear Register
369 // UFSHCI 2.0 Spec Section 5.5.5 Offset 80h: UTMRLRSR - UTP Task Management Request List Run Stop Register
372 UINT32 UtmrlRsr
:1; // UTP Task Management Request List Run-Stop Register
378 // UFSHCI 2.0 Spec Section 5.6.1 Offset 90h: UICCMD - UIC Command
381 UINT32 CmdOp
:8; // Command Opcode
386 // UFSHCI 2.0 Spec Section 5.6.2 Offset 94h: UICCMDARG1 - UIC Command Argument 1
388 #define UFS_HC_UICCMD_ARG1 UINT32
391 // UFSHCI 2.0 Spec Section 5.6.2 Offset 98h: UICCMDARG2 - UIC Command Argument 2
393 #define UFS_HC_UICCMD_ARG2 UINT32
396 // UFSHCI 2.0 Spec Section 5.6.2 Offset 9ch: UICCMDARG3 - UIC Command Argument 3
398 #define UFS_HC_UICCMD_ARG3 UINT32
401 // UIC command opcodes
406 UfsUicDmePeerGet
= 0x03,
407 UfsUicDmePeerSet
= 0x04,
408 UfsUicDmePwrOn
= 0x10,
409 UfsUicDmePwrOff
= 0x11,
410 UfsUicDmeEnable
= 0x12,
411 UfsUicDmeReset
= 0x14,
412 UfsUicDmeEndpointReset
= 0x15,
413 UfsUicDmeLinkStartup
= 0x16,
414 UfsUicDmeHibernateEnter
= 0x17,
415 UfsUicDmeHibernateExit
= 0x18,
416 UfsUicDmeTestMode
= 0x1A
420 // UTP Transfer Request Descriptor
427 UINT32 Int
:1; /* Interrupt */
428 UINT32 Dd
:2; /* Data Direction */
430 UINT32 Ct
:4; /* Command Type */
440 UINT32 Ocs
:8; /* Overall Command Status */
452 UINT32 UcdBa
:25; /* UTP Command Descriptor Base Address */
457 UINT32 UcdBaU
; /* UTP Command Descriptor Base Address Upper 32-bits */
462 UINT16 RuL
; /* Response UPIU Length */
463 UINT16 RuO
; /* Response UPIU Offset */
468 UINT16 PrdtL
; /* PRDT Length */
469 UINT16 PrdtO
; /* PRDT Offset */
477 UINT32 DbAddr
:30; /* Data Base Address */
482 UINT32 DbAddrU
; /* Data Base Address Upper 32-bits */
492 UINT32 DbCount
:18; /* Data Byte Count */
497 // UFS 2.0 Spec Section 10.5.3 - UTP Command UPIU
503 UINT8 TransCode
:6; /* Transaction Type - 0x01*/
508 UINT8 TaskTag
; /* Task Tag */
513 UINT8 CmdSet
:4; /* Command Set Type */
522 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
524 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
529 UINT32 ExpDataTranLen
; /* Expected Data Transfer Length - Big Endian */
538 // UFS 2.0 Spec Section 10.5.4 - UTP Response UPIU
544 UINT8 TransCode
:6; /* Transaction Type - 0x21*/
549 UINT8 TaskTag
; /* Task Tag */
554 UINT8 CmdSet
:4; /* Command Set Type */
557 UINT8 Response
; /* Response */
558 UINT8 Status
; /* Status */
563 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
564 UINT8 DevInfo
; /* Device Information */
565 UINT16 DataSegLen
; /* Data Segment Length - Big Endian */
570 UINT32 ResTranCount
; /* Residual Transfer Count - Big Endian */
578 // Data Segment - Sense Data
580 UINT16 SenseDataLen
; /* Sense Data Length - Big Endian */
581 UINT8 SenseData
[18]; /* Sense Data */
585 // UFS 2.0 Spec Section 10.5.5 - UTP Data-Out UPIU
591 UINT8 TransCode
:6; /* Transaction Type - 0x02*/
596 UINT8 TaskTag
; /* Task Tag */
606 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
608 UINT16 DataSegLen
; /* Data Segment Length - Big Endian */
613 UINT32 DataBufOffset
; /* Data Buffer Offset - Big Endian */
618 UINT32 DataTranCount
; /* Data Transfer Count - Big Endian */
626 // Data Segment - Data to be sent out
628 //UINT8 Data[]; /* Data to be sent out, maximum is 65535 bytes */
632 // UFS 2.0 Spec Section 10.5.6 - UTP Data-In UPIU
638 UINT8 TransCode
:6; /* Transaction Type - 0x22*/
643 UINT8 TaskTag
; /* Task Tag */
653 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
655 UINT16 DataSegLen
; /* Data Segment Length - Big Endian */
660 UINT32 DataBufOffset
; /* Data Buffer Offset - Big Endian */
665 UINT32 DataTranCount
; /* Data Transfer Count - Big Endian */
673 // Data Segment - Data to be read
675 //UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */
679 // UFS 2.0 Spec Section 10.5.7 - UTP Ready-To-Transfer UPIU
685 UINT8 TransCode
:6; /* Transaction Type - 0x31*/
690 UINT8 TaskTag
; /* Task Tag */
700 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
702 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
707 UINT32 DataBufOffset
; /* Data Buffer Offset - Big Endian */
712 UINT32 DataTranCount
; /* Data Transfer Count - Big Endian */
720 // Data Segment - Data to be read
722 //UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */
723 } UTP_RDY_TO_TRAN_UPIU
;
726 // UFS 2.0 Spec Section 10.5.8 - UTP Task Management Request UPIU
732 UINT8 TransCode
:6; /* Transaction Type - 0x04*/
737 UINT8 TaskTag
; /* Task Tag */
743 UINT8 TskManFunc
; /* Task Management Function */
749 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
751 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
756 UINT32 InputParam1
; /* Input Parameter 1 - Big Endian */
761 UINT32 InputParam2
; /* Input Parameter 2 - Big Endian */
766 UINT32 InputParam3
; /* Input Parameter 3 - Big Endian */
775 // UFS 2.0 Spec Section 10.5.9 - UTP Task Management Response UPIU
781 UINT8 TransCode
:6; /* Transaction Type - 0x24*/
786 UINT8 TaskTag
; /* Task Tag */
792 UINT8 Resp
; /* Response */
798 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
800 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
805 UINT32 OutputParam1
; /* Output Parameter 1 - Big Endian */
810 UINT32 OutputParam2
; /* Output Parameter 2 - Big Endian */
819 // UTP Task Management Request Descriptor
826 UINT32 Int
:1; /* Interrupt */
837 UINT32 Ocs
:8; /* Overall Command Status */
848 UTP_TM_REQ_UPIU TmReq
; /* Task Management Request UPIU */
853 UTP_TM_RESP_UPIU TmResp
; /* Task Management Response UPIU */
869 // UFS 2.0 Spec Section 10.5.10 - UTP Query Request UPIU
875 UINT8 TransCode
:6; /* Transaction Type - 0x16*/
880 UINT8 TaskTag
; /* Task Tag */
886 UINT8 QueryFunc
; /* Query Function */
892 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
894 UINT16 DataSegLen
; /* Data Segment Length - Big Endian */
899 UTP_UPIU_TSF Tsf
; /* Transaction Specific Fields */
907 // Data Segment - Data to be transferred
909 //UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */
910 } UTP_QUERY_REQ_UPIU
;
912 #define QUERY_FUNC_STD_READ_REQ 0x01
913 #define QUERY_FUNC_STD_WRITE_REQ 0x81
916 UtpQueryFuncOpcodeNop
= 0x00,
917 UtpQueryFuncOpcodeRdDesc
= 0x01,
918 UtpQueryFuncOpcodeWrDesc
= 0x02,
919 UtpQueryFuncOpcodeRdAttr
= 0x03,
920 UtpQueryFuncOpcodeWrAttr
= 0x04,
921 UtpQueryFuncOpcodeRdFlag
= 0x05,
922 UtpQueryFuncOpcodeSetFlag
= 0x06,
923 UtpQueryFuncOpcodeClrFlag
= 0x07,
924 UtpQueryFuncOpcodeTogFlag
= 0x08
925 } UTP_QUERY_FUNC_OPCODE
;
928 // UFS 2.0 Spec Section 10.5.11 - UTP Query Response UPIU
934 UINT8 TransCode
:6; /* Transaction Type - 0x36*/
939 UINT8 TaskTag
; /* Task Tag */
945 UINT8 QueryFunc
; /* Query Function */
946 UINT8 QueryResp
; /* Query Response */
952 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
953 UINT8 DevInfo
; /* Device Information */
954 UINT16 DataSegLen
; /* Data Segment Length - Big Endian */
959 UTP_UPIU_TSF Tsf
; /* Transaction Specific Fields */
967 // Data Segment - Data to be transferred
969 //UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */
970 } UTP_QUERY_RESP_UPIU
;
973 UfsUtpQueryResponseSuccess
= 0x00,
974 UfsUtpQueryResponseParamNotReadable
= 0xF6,
975 UfsUtpQueryResponseParamNotWriteable
= 0xF7,
976 UfsUtpQueryResponseParamAlreadyWritten
= 0xF8,
977 UfsUtpQueryResponseInvalidLen
= 0xF9,
978 UfsUtpQueryResponseInvalidVal
= 0xFA,
979 UfsUtpQueryResponseInvalidSelector
= 0xFB,
980 UfsUtpQueryResponseInvalidIndex
= 0xFC,
981 UfsUtpQueryResponseInvalidIdn
= 0xFD,
982 UfsUtpQueryResponseInvalidOpc
= 0xFE,
983 UfsUtpQueryResponseGeneralFailure
= 0xFF
984 } UTP_QUERY_RESP_CODE
;
987 // UFS 2.0 Spec Section 10.5.12 - UTP Reject UPIU
993 UINT8 TransCode
:6; /* Transaction Type - 0x3F*/
998 UINT8 TaskTag
; /* Task Tag */
1004 UINT8 Response
; /* Response - 0x01 */
1010 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
1011 UINT8 DevInfo
; /* Device Information - 0x00 */
1012 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
1017 UINT8 HdrSts
; /* Basic Header Status */
1019 UINT8 E2ESts
; /* End-to-End Status */
1029 // UFS 2.0 Spec Section 10.5.13 - UTP NOP OUT UPIU
1035 UINT8 TransCode
:6; /* Transaction Type - 0x00*/
1040 UINT8 TaskTag
; /* Task Tag */
1050 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
1052 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
1061 // UFS 2.0 Spec Section 10.5.14 - UTP NOP IN UPIU
1067 UINT8 TransCode
:6; /* Transaction Type - 0x20*/
1072 UINT8 TaskTag
; /* Task Tag */
1078 UINT8 Resp
; /* Response - 0x00 */
1084 UINT8 EhsLen
; /* Total EHS Length - 0x00 */
1085 UINT8 DevInfo
; /* Device Information - 0x00 */
1086 UINT16 DataSegLen
; /* Data Segment Length - Big Endian - 0x0000 */
1098 UfsDeviceDesc
= 0x00,
1099 UfsConfigDesc
= 0x01,
1101 UfsInterConnDesc
= 0x04,
1102 UfsStringDesc
= 0x05,
1103 UfsGeometryDesc
= 0x07,
1108 // UFS 2.0 Spec Section 14.1.6.2 - Device Descriptor
1121 UINT8 InitPowerMode
;
1122 UINT8 HighPriorityLun
;
1123 UINT8 SecureRemovalType
;
1126 UINT8 InitActiveIccLevel
;
1128 UINT16 ManufactureDate
;
1129 UINT8 ManufacturerName
;
1133 UINT16 ManufacturerId
;
1134 UINT8 Ud0BaseOffset
;
1135 UINT8 Ud0ConfParamLen
;
1137 UINT16 PeriodicRtcUpdate
;
1148 UINT8 InitPowerMode
;
1149 UINT8 HighPriorityLun
;
1150 UINT8 SecureRemovalType
;
1151 UINT8 InitActiveIccLevel
;
1152 UINT16 PeriodicRtcUpdate
;
1154 } UFS_CONFIG_DESC_GEN_HEADER
;
1161 UINT32 NumAllocUnits
;
1162 UINT8 DataReliability
;
1164 UINT8 ProvisionType
;
1167 } UFS_UNIT_DESC_CONFIG_PARAMS
;
1170 // UFS 2.0 Spec Section 14.1.6.3 - Configuration Descriptor
1173 UFS_CONFIG_DESC_GEN_HEADER Header
;
1174 UFS_UNIT_DESC_CONFIG_PARAMS UnitDescConfParams
[8];
1178 // UFS 2.0 Spec Section 14.1.6.4 - Geometry Descriptor
1185 UINT64 TotalRawDevCapacity
;
1188 UINT8 AllocUnitSize
;
1189 UINT8 MinAddrBlkSize
;
1190 UINT8 OptReadBlkSize
;
1191 UINT8 OptWriteBlkSize
;
1193 UINT8 MaxOutBufSize
;
1198 UINT8 SysDataTagUnitSize
;
1199 UINT8 SysDataResUnitSize
;
1200 UINT8 SupSecRemovalTypes
;
1202 UINT32 SysCodeMaxNumAllocUnits
;
1203 UINT16 SupCodeCapAdjFac
;
1204 UINT32 NonPersMaxNumAllocUnits
;
1205 UINT16 NonPersCapAdjFac
;
1206 UINT32 Enhance1MaxNumAllocUnits
;
1207 UINT16 Enhance1CapAdjFac
;
1208 UINT32 Enhance2MaxNumAllocUnits
;
1209 UINT16 Enhance2CapAdjFac
;
1210 UINT32 Enhance3MaxNumAllocUnits
;
1211 UINT16 Enhance3CapAdjFac
;
1212 UINT32 Enhance4MaxNumAllocUnits
;
1213 UINT16 Enhance4CapAdjFac
;
1214 } UFS_GEOMETRY_DESC
;
1217 // UFS 2.0 Spec Section 14.1.6.5 - Unit Descriptor
1229 UINT8 DataReliability
;
1231 UINT64 LogicBlkCount
;
1232 UINT32 EraseBlkSize
;
1233 UINT8 ProvisionType
;
1234 UINT64 PhyMemResCount
;
1236 UINT8 LargeUnitGranularity
;
1240 // UFS 2.0 Spec Section 14.1.6.6 - RPMB Unit Descriptor
1254 UINT64 LogicBlkCount
;
1255 UINT32 EraseBlkSize
;
1256 UINT8 ProvisionType
;
1257 UINT64 PhyMemResCount
;
1259 } UFS_RPMB_UNIT_DESC
;
1265 } UFS_POWER_PARAM_ELEMENT
;
1268 // UFS 2.0 Spec Section 14.1.6.7 - Power Parameter Descriptor
1273 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVcc
[16];
1274 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ
[16];
1275 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ2
[16];
1279 // UFS 2.0 Spec Section 14.1.6.8 - InterConnect Descriptor
1286 } UFS_INTER_CONNECT_DESC
;
1289 // UFS 2.0 Spec Section 14.1.6.9 - 14.1.6.12 - String Descriptor
1294 CHAR16 Unicode
[126];
1298 // UFS 2.0 Spec Section 14.2 - Flags
1301 UfsFlagDevInit
= 0x01,
1302 UfsFlagPermWpEn
= 0x02,
1303 UfsFlagPowerOnWpEn
= 0x03,
1304 UfsFlagBgOpsEn
= 0x04,
1305 UfsFlagPurgeEn
= 0x06,
1306 UfsFlagPhyResRemoval
= 0x08,
1307 UfsFlagBusyRtc
= 0x09,
1308 UfsFlagPermDisFwUpdate
= 0x0B
1312 // UFS 2.0 Spec Section 14.2 - Attributes
1315 UfsAttrBootLunEn
= 0x00,
1316 UfsAttrCurPowerMode
= 0x02,
1317 UfsAttrActiveIccLevel
= 0x03,
1318 UfsAttrOutOfOrderDataEn
= 0x04,
1319 UfsAttrBgOpStatus
= 0x05,
1320 UfsAttrPurgeStatus
= 0x06,
1321 UfsAttrMaxDataInSize
= 0x07,
1322 UfsAttrMaxDataOutSize
= 0x08,
1323 UfsAttrDynCapNeeded
= 0x09,
1324 UfsAttrRefClkFreq
= 0x0a,
1325 UfsAttrConfigDescLock
= 0x0b,
1326 UfsAttrMaxNumOfRtt
= 0x0c,
1327 UfsAttrExceptionEvtCtrl
= 0x0d,
1328 UfsAttrExceptionEvtSts
= 0x0e,
1329 UfsAttrSecondsPassed
= 0x0f,
1330 UfsAttrContextConf
= 0x10,
1331 UfsAttrCorrPrgBlkNum
= 0x11
1339 } UFS_DATA_DIRECTION
;