]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Bus / Ufs / UfsPassThruDxe / UfsPassThruHci.h
CommitLineData
0591696e
FT
1/** @file\r
2 UfsPassThruDxe driver is used to produce EFI_EXT_SCSI_PASS_THRU protocol interface\r
3 for upper layer application to execute UFS-supported SCSI cmds.\r
4\r
d1102dba 5 Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
9d510e61 6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
0591696e
FT
7\r
8**/\r
9\r
10#ifndef _UFS_PASS_THRU_HCI_H_\r
11#define _UFS_PASS_THRU_HCI_H_\r
12\r
13//\r
14// Host Capabilities Register Offsets\r
15//\r
1436aea4
MK
16#define UFS_HC_CAP_OFFSET 0x0000 // Controller Capabilities\r
17#define UFS_HC_VER_OFFSET 0x0008 // Version\r
18#define UFS_HC_DDID_OFFSET 0x0010 // Device ID and Device Class\r
19#define UFS_HC_PMID_OFFSET 0x0014 // Product ID and Manufacturer ID\r
20#define UFS_HC_AHIT_OFFSET 0x0018 // Auto-Hibernate Idle Timer\r
0591696e
FT
21//\r
22// Operation and Runtime Register Offsets\r
23//\r
1436aea4
MK
24#define UFS_HC_IS_OFFSET 0x0020 // Interrupt Status\r
25#define UFS_HC_IE_OFFSET 0x0024 // Interrupt Enable\r
26#define UFS_HC_STATUS_OFFSET 0x0030 // Host Controller Status\r
27#define UFS_HC_ENABLE_OFFSET 0x0034 // Host Controller Enable\r
28#define UFS_HC_UECPA_OFFSET 0x0038 // Host UIC Error Code PHY Adapter Layer\r
29#define UFS_HC_UECDL_OFFSET 0x003c // Host UIC Error Code Data Link Layer\r
30#define UFS_HC_UECN_OFFSET 0x0040 // Host UIC Error Code Network Layer\r
31#define UFS_HC_UECT_OFFSET 0x0044 // Host UIC Error Code Transport Layer\r
32#define UFS_HC_UECDME_OFFSET 0x0048 // Host UIC Error Code DME\r
33#define UFS_HC_UTRIACR_OFFSET 0x004c // UTP Transfer Request Interrupt Aggregation Control Register\r
0591696e
FT
34//\r
35// UTP Transfer Register Offsets\r
36//\r
1436aea4
MK
37#define UFS_HC_UTRLBA_OFFSET 0x0050 // UTP Transfer Request List Base Address\r
38#define UFS_HC_UTRLBAU_OFFSET 0x0054 // UTP Transfer Request List Base Address Upper 32-Bits\r
39#define UFS_HC_UTRLDBR_OFFSET 0x0058 // UTP Transfer Request List Door Bell Register\r
40#define UFS_HC_UTRLCLR_OFFSET 0x005c // UTP Transfer Request List CLear Register\r
41#define UFS_HC_UTRLRSR_OFFSET 0x0060 // UTP Transfer Request Run-Stop Register\r
0591696e
FT
42//\r
43// UTP Task Management Register Offsets\r
44//\r
1436aea4
MK
45#define UFS_HC_UTMRLBA_OFFSET 0x0070 // UTP Task Management Request List Base Address\r
46#define UFS_HC_UTMRLBAU_OFFSET 0x0074 // UTP Task Management Request List Base Address Upper 32-Bits\r
47#define UFS_HC_UTMRLDBR_OFFSET 0x0078 // UTP Task Management Request List Door Bell Register\r
48#define UFS_HC_UTMRLCLR_OFFSET 0x007c // UTP Task Management Request List CLear Register\r
49#define UFS_HC_UTMRLRSR_OFFSET 0x0080 // UTP Task Management Run-Stop Register\r
0591696e
FT
50//\r
51// UIC Command Register Offsets\r
52//\r
1436aea4
MK
53#define UFS_HC_UIC_CMD_OFFSET 0x0090 // UIC Command Register\r
54#define UFS_HC_UCMD_ARG1_OFFSET 0x0094 // UIC Command Argument 1\r
55#define UFS_HC_UCMD_ARG2_OFFSET 0x0098 // UIC Command Argument 2\r
56#define UFS_HC_UCMD_ARG3_OFFSET 0x009c // UIC Command Argument 3\r
0591696e
FT
57//\r
58// UMA Register Offsets\r
59//\r
1436aea4 60#define UFS_HC_UMA_OFFSET 0x00b0 // Reserved for Unified Memory Extension\r
0591696e 61\r
1436aea4
MK
62#define UFS_HC_HCE_EN BIT0\r
63#define UFS_HC_HCS_DP BIT0\r
64#define UFS_HC_HCS_UCRDY BIT3\r
65#define UFS_HC_IS_ULSS BIT8\r
66#define UFS_HC_IS_UCCS BIT10\r
67#define UFS_HC_CAP_64ADDR BIT24\r
68#define UFS_HC_CAP_NUTMRS (BIT16 | BIT17 | BIT18)\r
69#define UFS_HC_CAP_NUTRS (BIT0 | BIT1 | BIT2 | BIT3 | BIT4)\r
70#define UFS_HC_UTMRLRSR BIT0\r
71#define UFS_HC_UTRLRSR BIT0\r
0591696e 72\r
86bd34ca
HZ
73//\r
74// The initial value of the OCS field of UTP TRD or TMRD descriptor\r
75// defined in JEDEC JESD223 specification\r
76//\r
77#define UFS_HC_TRD_OCS_INIT_VALUE 0x0F\r
78\r
0591696e
FT
79//\r
80// A maximum of length of 256KB is supported by PRDT entry\r
81//\r
1436aea4 82#define UFS_MAX_DATA_LEN_PER_PRD 0x40000\r
0591696e 83\r
1436aea4 84#define UFS_STORAGE_COMMAND_TYPE 0x01\r
0591696e 85\r
1436aea4
MK
86#define UFS_REGULAR_COMMAND 0x00\r
87#define UFS_INTERRUPT_COMMAND 0x01\r
0591696e 88\r
1436aea4
MK
89#define UFS_LUN_0 0x00\r
90#define UFS_LUN_1 0x01\r
91#define UFS_LUN_2 0x02\r
92#define UFS_LUN_3 0x03\r
93#define UFS_LUN_4 0x04\r
94#define UFS_LUN_5 0x05\r
95#define UFS_LUN_6 0x06\r
96#define UFS_LUN_7 0x07\r
97#define UFS_WLUN_REPORT_LUNS 0x81\r
98#define UFS_WLUN_UFS_DEV 0xD0\r
99#define UFS_WLUN_BOOT 0xB0\r
100#define UFS_WLUN_RPMB 0xC4\r
0591696e
FT
101\r
102#pragma pack(1)\r
103\r
104//\r
105// UFSHCI 2.0 Spec Section 5.2.1 Offset 00h: CAP - Controller Capabilities\r
106//\r
107typedef struct {\r
1436aea4
MK
108 UINT8 Nutrs : 4; // Number of UTP Transfer Request Slots\r
109 UINT8 Rsvd1 : 4;\r
0591696e 110\r
1436aea4 111 UINT8 NoRtt; // Number of outstanding READY TO TRANSFER (RTT) requests supported\r
0591696e 112\r
1436aea4
MK
113 UINT8 Nutmrs : 3; // Number of UTP Task Management Request Slots\r
114 UINT8 Rsvd2 : 4;\r
115 UINT8 AutoHs : 1; // Auto-Hibernation Support\r
0591696e 116\r
1436aea4
MK
117 UINT8 As64 : 1; // 64-bit addressing supported\r
118 UINT8 Oodds : 1; // Out of order data delivery supported\r
119 UINT8 UicDmetms : 1; // UIC DME_TEST_MODE command supported\r
120 UINT8 Ume : 1; // Reserved for Unified Memory Extension\r
121 UINT8 Rsvd4 : 4;\r
0591696e
FT
122} UFS_HC_CAP;\r
123\r
124//\r
125// UFSHCI 2.0 Spec Section 5.2.2 Offset 08h: VER - UFS Version\r
126//\r
127typedef struct {\r
1436aea4
MK
128 UINT8 Vs : 4; // Version Suffix\r
129 UINT8 Mnr : 4; // Minor version number\r
0591696e 130\r
1436aea4 131 UINT8 Mjr; // Major version number\r
0591696e 132\r
1436aea4 133 UINT16 Rsvd1;\r
0591696e
FT
134} UFS_HC_VER;\r
135\r
136//\r
137// UFSHCI 2.0 Spec Section 5.2.3 Offset 10h: HCPID - Host Controller Product ID\r
138//\r
1436aea4 139#define UFS_HC_PID UINT32\r
0591696e
FT
140\r
141//\r
142// UFSHCI 2.0 Spec Section 5.2.4 Offset 14h: HCMID - Host Controller Manufacturer ID\r
143//\r
1436aea4 144#define UFS_HC_MID UINT32\r
0591696e
FT
145\r
146//\r
147// UFSHCI 2.0 Spec Section 5.2.5 Offset 18h: AHIT - Auto-Hibernate Idle Timer\r
148//\r
149typedef struct {\r
1436aea4
MK
150 UINT32 Ahitv : 10; // Auto-Hibernate Idle Timer Value\r
151 UINT32 Ts : 3; // Timer scale\r
152 UINT32 Rsvd1 : 19;\r
0591696e
FT
153} UFS_HC_AHIT;\r
154\r
155//\r
156// UFSHCI 2.0 Spec Section 5.3.1 Offset 20h: IS - Interrupt Status\r
157//\r
158typedef struct {\r
1436aea4
MK
159 UINT16 Utrcs : 1; // UTP Transfer Request Completion Status\r
160 UINT16 Udepri : 1; // UIC DME_ENDPOINT_RESET Indication\r
161 UINT16 Ue : 1; // UIC Error\r
162 UINT16 Utms : 1; // UIC Test Mode Status\r
163\r
164 UINT16 Upms : 1; // UIC Power Mode Status\r
165 UINT16 Uhxs : 1; // UIC Hibernate Exit Status\r
166 UINT16 Uhes : 1; // UIC Hibernate Enter Status\r
167 UINT16 Ulls : 1; // UIC Link Lost Status\r
168\r
169 UINT16 Ulss : 1; // UIC Link Startup Status\r
170 UINT16 Utmrcs : 1; // UTP Task Management Request Completion Status\r
171 UINT16 Uccs : 1; // UIC Command Completion Status\r
172 UINT16 Dfes : 1; // Device Fatal Error Status\r
173\r
174 UINT16 Utpes : 1; // UTP Error Status\r
175 UINT16 Rsvd1 : 3;\r
176\r
177 UINT16 Hcfes : 1; // Host Controller Fatal Error Status\r
178 UINT16 Sbfes : 1; // System Bus Fatal Error Status\r
179 UINT16 Rsvd2 : 14;\r
0591696e
FT
180} UFS_HC_IS;\r
181\r
182//\r
183// UFSHCI 2.0 Spec Section 5.3.2 Offset 24h: IE - Interrupt Enable\r
184//\r
185typedef struct {\r
1436aea4
MK
186 UINT16 Utrce : 1; // UTP Transfer Request Completion Enable\r
187 UINT16 Udeprie : 1; // UIC DME_ENDPOINT_RESET Enable\r
188 UINT16 Uee : 1; // UIC Error Enable\r
189 UINT16 Utmse : 1; // UIC Test Mode Status Enable\r
190\r
191 UINT16 Upmse : 1; // UIC Power Mode Status Enable\r
192 UINT16 Uhxse : 1; // UIC Hibernate Exit Status Enable\r
193 UINT16 Uhese : 1; // UIC Hibernate Enter Status Enable\r
194 UINT16 Ullse : 1; // UIC Link Lost Status Enable\r
195\r
196 UINT16 Ulsse : 1; // UIC Link Startup Status Enable\r
197 UINT16 Utmrce : 1; // UTP Task Management Request Completion Enable\r
198 UINT16 Ucce : 1; // UIC Command Completion Enable\r
199 UINT16 Dfee : 1; // Device Fatal Error Enable\r
200\r
201 UINT16 Utpee : 1; // UTP Error Enable\r
202 UINT16 Rsvd1 : 3;\r
203\r
204 UINT16 Hcfee : 1; // Host Controller Fatal Error Enable\r
205 UINT16 Sbfee : 1; // System Bus Fatal Error Enable\r
206 UINT16 Rsvd2 : 14;\r
0591696e
FT
207} UFS_HC_IE;\r
208\r
209//\r
210// UFSHCI 2.0 Spec Section 5.3.3 Offset 30h: HCS - Host Controller Status\r
211//\r
212typedef struct {\r
1436aea4
MK
213 UINT8 Dp : 1; // Device Present\r
214 UINT8 UtrlRdy : 1; // UTP Transfer Request List Ready\r
215 UINT8 UtmrlRdy : 1; // UTP Task Management Request List Ready\r
216 UINT8 UcRdy : 1; // UIC COMMAND Ready\r
217 UINT8 Rsvd1 : 4;\r
218\r
219 UINT8 Upmcrs : 3; // UIC Power Mode Change Request Status\r
220 UINT8 Rsvd2 : 1; // UIC Hibernate Exit Status Enable\r
221 UINT8 Utpec : 4; // UTP Error Code\r
222\r
223 UINT8 TtagUtpE; // Task Tag of UTP error\r
224 UINT8 TlunUtpE; // Target LUN of UTP error\r
0591696e
FT
225} UFS_HC_STATUS;\r
226\r
227//\r
228// UFSHCI 2.0 Spec Section 5.3.4 Offset 34h: HCE - Host Controller Enable\r
229//\r
230typedef struct {\r
1436aea4
MK
231 UINT32 Hce : 1; // Host Controller Enable\r
232 UINT32 Rsvd1 : 31;\r
0591696e
FT
233} UFS_HC_ENABLE;\r
234\r
235//\r
236// UFSHCI 2.0 Spec Section 5.3.5 Offset 38h: UECPA - Host UIC Error Code PHY Adapter Layer\r
237//\r
238typedef struct {\r
1436aea4
MK
239 UINT32 Ec : 5; // UIC PHY Adapter Layer Error Code\r
240 UINT32 Rsvd1 : 26;\r
241 UINT32 Err : 1; // UIC PHY Adapter Layer Error\r
0591696e
FT
242} UFS_HC_UECPA;\r
243\r
244//\r
245// UFSHCI 2.0 Spec Section 5.3.6 Offset 3ch: UECDL - Host UIC Error Code Data Link Layer\r
246//\r
247typedef struct {\r
1436aea4
MK
248 UINT32 Ec : 15; // UIC Data Link Layer Error Code\r
249 UINT32 Rsvd1 : 16;\r
250 UINT32 Err : 1; // UIC Data Link Layer Error\r
0591696e
FT
251} UFS_HC_UECDL;\r
252\r
253//\r
254// UFSHCI 2.0 Spec Section 5.3.7 Offset 40h: UECN - Host UIC Error Code Network Layer\r
255//\r
256typedef struct {\r
1436aea4
MK
257 UINT32 Ec : 3; // UIC Network Layer Error Code\r
258 UINT32 Rsvd1 : 28;\r
259 UINT32 Err : 1; // UIC Network Layer Error\r
0591696e
FT
260} UFS_HC_UECN;\r
261\r
262//\r
263// UFSHCI 2.0 Spec Section 5.3.8 Offset 44h: UECT - Host UIC Error Code Transport Layer\r
264//\r
265typedef struct {\r
1436aea4
MK
266 UINT32 Ec : 7; // UIC Transport Layer Error Code\r
267 UINT32 Rsvd1 : 24;\r
268 UINT32 Err : 1; // UIC Transport Layer Error\r
0591696e
FT
269} UFS_HC_UECT;\r
270\r
271//\r
272// UFSHCI 2.0 Spec Section 5.3.9 Offset 48h: UECDME - Host UIC Error Code\r
273//\r
274typedef struct {\r
1436aea4
MK
275 UINT32 Ec : 1; // UIC DME Error Code\r
276 UINT32 Rsvd1 : 30;\r
277 UINT32 Err : 1; // UIC DME Error\r
0591696e
FT
278} UFS_HC_UECDME;\r
279\r
280//\r
281// UFSHCI 2.0 Spec Section 5.3.10 Offset 4Ch: UTRIACR - UTP Transfer Request Interrupt Aggregation Control Register\r
282//\r
283typedef struct {\r
1436aea4 284 UINT8 IaToVal; // Interrupt aggregation timeout value\r
0591696e 285\r
1436aea4
MK
286 UINT8 IacTh : 5; // Interrupt aggregation counter threshold\r
287 UINT8 Rsvd1 : 3;\r
0591696e 288\r
1436aea4
MK
289 UINT8 Ctr : 1; // Counter and Timer Reset\r
290 UINT8 Rsvd2 : 3;\r
291 UINT8 Iasb : 1; // Interrupt aggregation status bit\r
292 UINT8 Rsvd3 : 3;\r
0591696e 293\r
1436aea4
MK
294 UINT8 IapwEn : 1; // Interrupt aggregation parameter write enable\r
295 UINT8 Rsvd4 : 6;\r
296 UINT8 IaEn : 1; // Interrupt Aggregation Enable/Disable\r
0591696e
FT
297} UFS_HC_UTRIACR;\r
298\r
299//\r
300// UFSHCI 2.0 Spec Section 5.4.1 Offset 50h: UTRLBA - UTP Transfer Request List Base Address\r
301//\r
302typedef struct {\r
1436aea4
MK
303 UINT32 Rsvd1 : 10;\r
304 UINT32 UtrlBa : 22; // UTP Transfer Request List Base Address\r
0591696e
FT
305} UFS_HC_UTRLBA;\r
306\r
307//\r
308// UFSHCI 2.0 Spec Section 5.4.2 Offset 54h: UTRLBAU - UTP Transfer Request List Base Address Upper 32-bits\r
309//\r
1436aea4 310#define UFS_HC_UTRLBAU UINT32\r
0591696e
FT
311\r
312//\r
313// UFSHCI 2.0 Spec Section 5.4.3 Offset 58h: UTRLDBR - UTP Transfer Request List Door Bell Register\r
314//\r
1436aea4 315#define UFS_HC_UTRLDBR UINT32\r
0591696e
FT
316\r
317//\r
318// UFSHCI 2.0 Spec Section 5.4.4 Offset 5Ch: UTRLCLR - UTP Transfer Request List CLear Register\r
319//\r
1436aea4 320#define UFS_HC_UTRLCLR UINT32\r
0591696e
FT
321\r
322#if 0\r
323//\r
324// UFSHCI 2.0 Spec Section 5.4.5 Offset 60h: UTRLRSR - UTP Transfer Request List Run Stop Register\r
325//\r
326typedef struct {\r
1436aea4
MK
327 UINT32 UtrlRsr : 1; // UTP Transfer Request List Run-Stop Register\r
328 UINT32 Rsvd1 : 31;\r
0591696e
FT
329} UFS_HC_UTRLRSR;\r
330#endif\r
331\r
332//\r
333// UFSHCI 2.0 Spec Section 5.5.1 Offset 70h: UTMRLBA - UTP Task Management Request List Base Address\r
334//\r
335typedef struct {\r
1436aea4
MK
336 UINT32 Rsvd1 : 10;\r
337 UINT32 UtmrlBa : 22; // UTP Task Management Request List Base Address\r
0591696e
FT
338} UFS_HC_UTMRLBA;\r
339\r
340//\r
341// UFSHCI 2.0 Spec Section 5.5.2 Offset 74h: UTMRLBAU - UTP Task Management Request List Base Address Upper 32-bits\r
342//\r
1436aea4 343#define UFS_HC_UTMRLBAU UINT32\r
0591696e
FT
344\r
345//\r
346// UFSHCI 2.0 Spec Section 5.5.3 Offset 78h: UTMRLDBR - UTP Task Management Request List Door Bell Register\r
347//\r
348typedef struct {\r
1436aea4
MK
349 UINT32 UtmrlDbr : 8; // UTP Task Management Request List Door bell Register\r
350 UINT32 Rsvd1 : 24;\r
0591696e
FT
351} UFS_HC_UTMRLDBR;\r
352\r
353//\r
354// UFSHCI 2.0 Spec Section 5.5.4 Offset 7Ch: UTMRLCLR - UTP Task Management Request List CLear Register\r
355//\r
356typedef struct {\r
1436aea4
MK
357 UINT32 UtmrlClr : 8; // UTP Task Management List Clear Register\r
358 UINT32 Rsvd1 : 24;\r
0591696e
FT
359} UFS_HC_UTMRLCLR;\r
360\r
361#if 0\r
362//\r
363// UFSHCI 2.0 Spec Section 5.5.5 Offset 80h: UTMRLRSR - UTP Task Management Request List Run Stop Register\r
364//\r
365typedef struct {\r
1436aea4
MK
366 UINT32 UtmrlRsr : 1; // UTP Task Management Request List Run-Stop Register\r
367 UINT32 Rsvd1 : 31;\r
0591696e
FT
368} UFS_HC_UTMRLRSR;\r
369#endif\r
370\r
371//\r
372// UFSHCI 2.0 Spec Section 5.6.1 Offset 90h: UICCMD - UIC Command\r
373//\r
374typedef struct {\r
1436aea4
MK
375 UINT32 CmdOp : 8; // Command Opcode\r
376 UINT32 Rsvd1 : 24;\r
0591696e
FT
377} UFS_HC_UICCMD;\r
378\r
379//\r
380// UFSHCI 2.0 Spec Section 5.6.2 Offset 94h: UICCMDARG1 - UIC Command Argument 1\r
381//\r
1436aea4 382#define UFS_HC_UICCMD_ARG1 UINT32\r
0591696e
FT
383\r
384//\r
385// UFSHCI 2.0 Spec Section 5.6.2 Offset 98h: UICCMDARG2 - UIC Command Argument 2\r
386//\r
1436aea4 387#define UFS_HC_UICCMD_ARG2 UINT32\r
0591696e
FT
388\r
389//\r
390// UFSHCI 2.0 Spec Section 5.6.2 Offset 9ch: UICCMDARG3 - UIC Command Argument 3\r
391//\r
1436aea4 392#define UFS_HC_UICCMD_ARG3 UINT32\r
0591696e
FT
393\r
394//\r
395// UIC command opcodes\r
396//\r
397typedef enum {\r
398 UfsUicDmeGet = 0x01,\r
399 UfsUicDmeSet = 0x02,\r
400 UfsUicDmePeerGet = 0x03,\r
401 UfsUicDmePeerSet = 0x04,\r
402 UfsUicDmePwrOn = 0x10,\r
403 UfsUicDmePwrOff = 0x11,\r
404 UfsUicDmeEnable = 0x12,\r
405 UfsUicDmeReset = 0x14,\r
406 UfsUicDmeEndpointReset = 0x15,\r
407 UfsUicDmeLinkStartup = 0x16,\r
408 UfsUicDmeHibernateEnter = 0x17,\r
409 UfsUicDmeHibernateExit = 0x18,\r
410 UfsUicDmeTestMode = 0x1A\r
411} UFS_UIC_OPCODE;\r
412\r
413//\r
414// UTP Transfer Request Descriptor\r
415//\r
416typedef struct {\r
417 //\r
418 // DW0\r
419 //\r
1436aea4
MK
420 UINT32 Rsvd1 : 24;\r
421 UINT32 Int : 1; /* Interrupt */\r
422 UINT32 Dd : 2; /* Data Direction */\r
423 UINT32 Rsvd2 : 1;\r
424 UINT32 Ct : 4; /* Command Type */\r
0591696e
FT
425\r
426 //\r
427 // DW1\r
428 //\r
1436aea4 429 UINT32 Rsvd3;\r
0591696e
FT
430\r
431 //\r
432 // DW2\r
433 //\r
1436aea4
MK
434 UINT32 Ocs : 8; /* Overall Command Status */\r
435 UINT32 Rsvd4 : 24;\r
0591696e
FT
436\r
437 //\r
438 // DW3\r
439 //\r
1436aea4 440 UINT32 Rsvd5;\r
0591696e
FT
441\r
442 //\r
443 // DW4\r
444 //\r
1436aea4
MK
445 UINT32 Rsvd6 : 7;\r
446 UINT32 UcdBa : 25; /* UTP Command Descriptor Base Address */\r
d1102dba 447\r
0591696e
FT
448 //\r
449 // DW5\r
450 //\r
1436aea4 451 UINT32 UcdBaU; /* UTP Command Descriptor Base Address Upper 32-bits */\r
d1102dba 452\r
0591696e
FT
453 //\r
454 // DW6\r
455 //\r
1436aea4
MK
456 UINT16 RuL; /* Response UPIU Length */\r
457 UINT16 RuO; /* Response UPIU Offset */\r
0591696e
FT
458\r
459 //\r
460 // DW7\r
461 //\r
1436aea4
MK
462 UINT16 PrdtL; /* PRDT Length */\r
463 UINT16 PrdtO; /* PRDT Offset */\r
0591696e
FT
464} UTP_TRD;\r
465\r
466typedef struct {\r
467 //\r
468 // DW0\r
469 //\r
1436aea4
MK
470 UINT32 Rsvd1 : 2;\r
471 UINT32 DbAddr : 30; /* Data Base Address */\r
d1102dba 472\r
0591696e
FT
473 //\r
474 // DW1\r
475 //\r
1436aea4 476 UINT32 DbAddrU; /* Data Base Address Upper 32-bits */\r
d1102dba 477\r
0591696e
FT
478 //\r
479 // DW2\r
480 //\r
1436aea4 481 UINT32 Rsvd2;\r
0591696e
FT
482\r
483 //\r
484 // DW3\r
485 //\r
1436aea4
MK
486 UINT32 DbCount : 18; /* Data Byte Count */\r
487 UINT32 Rsvd3 : 14;\r
0591696e
FT
488} UTP_TR_PRD;\r
489\r
490//\r
491// UFS 2.0 Spec Section 10.5.3 - UTP Command UPIU\r
492//\r
493typedef struct {\r
494 //\r
495 // DW0\r
496 //\r
1436aea4
MK
497 UINT8 TransCode : 6; /* Transaction Type - 0x01*/\r
498 UINT8 Dd : 1;\r
499 UINT8 Hd : 1;\r
500 UINT8 Flags;\r
501 UINT8 Lun;\r
502 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
503\r
504 //\r
505 // DW1\r
506 //\r
1436aea4
MK
507 UINT8 CmdSet : 4; /* Command Set Type */\r
508 UINT8 Rsvd1 : 4;\r
509 UINT8 Rsvd2;\r
510 UINT8 Rsvd3;\r
511 UINT8 Rsvd4;\r
0591696e
FT
512\r
513 //\r
514 // DW2\r
515 //\r
1436aea4
MK
516 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
517 UINT8 Rsvd5;\r
518 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
519\r
520 //\r
521 // DW3\r
522 //\r
1436aea4 523 UINT32 ExpDataTranLen; /* Expected Data Transfer Length - Big Endian */\r
0591696e
FT
524\r
525 //\r
526 // DW4 - DW7\r
527 //\r
1436aea4 528 UINT8 Cdb[16];\r
0591696e
FT
529} UTP_COMMAND_UPIU;\r
530\r
531//\r
532// UFS 2.0 Spec Section 10.5.4 - UTP Response UPIU\r
533//\r
534typedef struct {\r
535 //\r
536 // DW0\r
537 //\r
1436aea4
MK
538 UINT8 TransCode : 6; /* Transaction Type - 0x21*/\r
539 UINT8 Dd : 1;\r
540 UINT8 Hd : 1;\r
541 UINT8 Flags;\r
542 UINT8 Lun;\r
543 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
544\r
545 //\r
546 // DW1\r
547 //\r
1436aea4
MK
548 UINT8 CmdSet : 4; /* Command Set Type */\r
549 UINT8 Rsvd1 : 4;\r
550 UINT8 Rsvd2;\r
551 UINT8 Response; /* Response */\r
552 UINT8 Status; /* Status */\r
0591696e
FT
553\r
554 //\r
555 // DW2\r
556 //\r
1436aea4
MK
557 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
558 UINT8 DevInfo; /* Device Information */\r
559 UINT16 DataSegLen; /* Data Segment Length - Big Endian */\r
0591696e
FT
560\r
561 //\r
562 // DW3\r
563 //\r
1436aea4 564 UINT32 ResTranCount; /* Residual Transfer Count - Big Endian */\r
0591696e
FT
565\r
566 //\r
567 // DW4 - DW7\r
568 //\r
1436aea4 569 UINT8 Rsvd3[16];\r
0591696e
FT
570\r
571 //\r
572 // Data Segment - Sense Data\r
573 //\r
1436aea4
MK
574 UINT16 SenseDataLen; /* Sense Data Length - Big Endian */\r
575 UINT8 SenseData[18]; /* Sense Data */\r
0591696e
FT
576} UTP_RESPONSE_UPIU;\r
577\r
578//\r
579// UFS 2.0 Spec Section 10.5.5 - UTP Data-Out UPIU\r
580//\r
581typedef struct {\r
582 //\r
583 // DW0\r
584 //\r
1436aea4
MK
585 UINT8 TransCode : 6; /* Transaction Type - 0x02*/\r
586 UINT8 Dd : 1;\r
587 UINT8 Hd : 1;\r
588 UINT8 Flags;\r
589 UINT8 Lun;\r
590 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
591\r
592 //\r
593 // DW1\r
594 //\r
1436aea4 595 UINT8 Rsvd1[4];\r
0591696e
FT
596\r
597 //\r
598 // DW2\r
599 //\r
1436aea4
MK
600 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
601 UINT8 Rsvd2;\r
602 UINT16 DataSegLen; /* Data Segment Length - Big Endian */\r
0591696e
FT
603\r
604 //\r
605 // DW3\r
606 //\r
1436aea4 607 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */\r
0591696e
FT
608\r
609 //\r
610 // DW4\r
611 //\r
1436aea4 612 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */\r
0591696e
FT
613\r
614 //\r
615 // DW5 - DW7\r
616 //\r
1436aea4 617 UINT8 Rsvd3[12];\r
0591696e
FT
618\r
619 //\r
620 // Data Segment - Data to be sent out\r
621 //\r
1436aea4 622 // UINT8 Data[]; /* Data to be sent out, maximum is 65535 bytes */\r
0591696e
FT
623} UTP_DATA_OUT_UPIU;\r
624\r
625//\r
626// UFS 2.0 Spec Section 10.5.6 - UTP Data-In UPIU\r
627//\r
628typedef struct {\r
629 //\r
630 // DW0\r
631 //\r
1436aea4
MK
632 UINT8 TransCode : 6; /* Transaction Type - 0x22*/\r
633 UINT8 Dd : 1;\r
634 UINT8 Hd : 1;\r
635 UINT8 Flags;\r
636 UINT8 Lun;\r
637 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
638\r
639 //\r
640 // DW1\r
641 //\r
1436aea4 642 UINT8 Rsvd1[4];\r
0591696e
FT
643\r
644 //\r
645 // DW2\r
646 //\r
1436aea4
MK
647 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
648 UINT8 Rsvd2;\r
649 UINT16 DataSegLen; /* Data Segment Length - Big Endian */\r
0591696e
FT
650\r
651 //\r
652 // DW3\r
653 //\r
1436aea4 654 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */\r
0591696e
FT
655\r
656 //\r
657 // DW4\r
658 //\r
1436aea4 659 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */\r
0591696e
FT
660\r
661 //\r
662 // DW5 - DW7\r
663 //\r
1436aea4 664 UINT8 Rsvd3[12];\r
0591696e
FT
665\r
666 //\r
667 // Data Segment - Data to be read\r
668 //\r
1436aea4 669 // UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */\r
0591696e
FT
670} UTP_DATA_IN_UPIU;\r
671\r
672//\r
673// UFS 2.0 Spec Section 10.5.7 - UTP Ready-To-Transfer UPIU\r
674//\r
675typedef struct {\r
676 //\r
677 // DW0\r
678 //\r
1436aea4
MK
679 UINT8 TransCode : 6; /* Transaction Type - 0x31*/\r
680 UINT8 Dd : 1;\r
681 UINT8 Hd : 1;\r
682 UINT8 Flags;\r
683 UINT8 Lun;\r
684 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
685\r
686 //\r
687 // DW1\r
688 //\r
1436aea4 689 UINT8 Rsvd1[4];\r
0591696e
FT
690\r
691 //\r
692 // DW2\r
693 //\r
1436aea4
MK
694 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
695 UINT8 Rsvd2;\r
696 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
697\r
698 //\r
699 // DW3\r
700 //\r
1436aea4 701 UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */\r
0591696e
FT
702\r
703 //\r
704 // DW4\r
705 //\r
1436aea4 706 UINT32 DataTranCount; /* Data Transfer Count - Big Endian */\r
0591696e
FT
707\r
708 //\r
709 // DW5 - DW7\r
710 //\r
1436aea4 711 UINT8 Rsvd3[12];\r
0591696e
FT
712\r
713 //\r
714 // Data Segment - Data to be read\r
715 //\r
1436aea4 716 // UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */\r
0591696e
FT
717} UTP_RDY_TO_TRAN_UPIU;\r
718\r
719//\r
720// UFS 2.0 Spec Section 10.5.8 - UTP Task Management Request UPIU\r
721//\r
722typedef struct {\r
723 //\r
724 // DW0\r
725 //\r
1436aea4
MK
726 UINT8 TransCode : 6; /* Transaction Type - 0x04*/\r
727 UINT8 Dd : 1;\r
728 UINT8 Hd : 1;\r
729 UINT8 Flags;\r
730 UINT8 Lun;\r
731 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
732\r
733 //\r
734 // DW1\r
735 //\r
1436aea4
MK
736 UINT8 Rsvd1;\r
737 UINT8 TskManFunc; /* Task Management Function */\r
738 UINT8 Rsvd2[2];\r
0591696e
FT
739\r
740 //\r
741 // DW2\r
742 //\r
1436aea4
MK
743 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
744 UINT8 Rsvd3;\r
745 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
746\r
747 //\r
748 // DW3\r
749 //\r
1436aea4 750 UINT32 InputParam1; /* Input Parameter 1 - Big Endian */\r
0591696e
FT
751\r
752 //\r
753 // DW4\r
754 //\r
1436aea4 755 UINT32 InputParam2; /* Input Parameter 2 - Big Endian */\r
0591696e
FT
756\r
757 //\r
758 // DW5\r
759 //\r
1436aea4 760 UINT32 InputParam3; /* Input Parameter 3 - Big Endian */\r
0591696e
FT
761\r
762 //\r
763 // DW6 - DW7\r
764 //\r
1436aea4 765 UINT8 Rsvd4[8];\r
0591696e
FT
766} UTP_TM_REQ_UPIU;\r
767\r
768//\r
769// UFS 2.0 Spec Section 10.5.9 - UTP Task Management Response UPIU\r
770//\r
771typedef struct {\r
772 //\r
773 // DW0\r
774 //\r
1436aea4
MK
775 UINT8 TransCode : 6; /* Transaction Type - 0x24*/\r
776 UINT8 Dd : 1;\r
777 UINT8 Hd : 1;\r
778 UINT8 Flags;\r
779 UINT8 Lun;\r
780 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
781\r
782 //\r
783 // DW1\r
784 //\r
1436aea4
MK
785 UINT8 Rsvd1[2];\r
786 UINT8 Resp; /* Response */\r
787 UINT8 Rsvd2;\r
0591696e
FT
788\r
789 //\r
790 // DW2\r
791 //\r
1436aea4
MK
792 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
793 UINT8 Rsvd3;\r
794 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
795\r
796 //\r
797 // DW3\r
798 //\r
1436aea4 799 UINT32 OutputParam1; /* Output Parameter 1 - Big Endian */\r
0591696e
FT
800\r
801 //\r
802 // DW4\r
803 //\r
1436aea4 804 UINT32 OutputParam2; /* Output Parameter 2 - Big Endian */\r
0591696e
FT
805\r
806 //\r
807 // DW5 - DW7\r
808 //\r
1436aea4 809 UINT8 Rsvd4[12];\r
0591696e
FT
810} UTP_TM_RESP_UPIU;\r
811\r
812//\r
813// UTP Task Management Request Descriptor\r
814//\r
815typedef struct {\r
816 //\r
817 // DW0\r
818 //\r
1436aea4
MK
819 UINT32 Rsvd1 : 24;\r
820 UINT32 Int : 1; /* Interrupt */\r
821 UINT32 Rsvd2 : 7;\r
0591696e
FT
822\r
823 //\r
824 // DW1\r
825 //\r
1436aea4 826 UINT32 Rsvd3;\r
0591696e
FT
827\r
828 //\r
829 // DW2\r
830 //\r
1436aea4
MK
831 UINT32 Ocs : 8; /* Overall Command Status */\r
832 UINT32 Rsvd4 : 24;\r
0591696e
FT
833\r
834 //\r
835 // DW3\r
836 //\r
1436aea4 837 UINT32 Rsvd5;\r
0591696e
FT
838\r
839 //\r
840 // DW4 - DW11\r
841 //\r
1436aea4 842 UTP_TM_REQ_UPIU TmReq; /* Task Management Request UPIU */\r
d1102dba 843\r
0591696e
FT
844 //\r
845 // DW12 - DW19\r
846 //\r
1436aea4 847 UTP_TM_RESP_UPIU TmResp; /* Task Management Response UPIU */\r
0591696e
FT
848} UTP_TMRD;\r
849\r
0591696e 850typedef struct {\r
1436aea4
MK
851 UINT8 Opcode;\r
852 UINT8 DescId;\r
853 UINT8 Index;\r
854 UINT8 Selector;\r
855 UINT16 Rsvd1;\r
856 UINT16 Length;\r
857 UINT32 Value;\r
858 UINT32 Rsvd2;\r
0591696e
FT
859} UTP_UPIU_TSF;\r
860\r
861//\r
862// UFS 2.0 Spec Section 10.5.10 - UTP Query Request UPIU\r
863//\r
864typedef struct {\r
865 //\r
866 // DW0\r
867 //\r
1436aea4
MK
868 UINT8 TransCode : 6; /* Transaction Type - 0x16*/\r
869 UINT8 Dd : 1;\r
870 UINT8 Hd : 1;\r
871 UINT8 Flags;\r
872 UINT8 Rsvd1;\r
873 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
874\r
875 //\r
876 // DW1\r
877 //\r
1436aea4
MK
878 UINT8 Rsvd2;\r
879 UINT8 QueryFunc; /* Query Function */\r
880 UINT8 Rsvd3[2];\r
0591696e
FT
881\r
882 //\r
883 // DW2\r
884 //\r
1436aea4
MK
885 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
886 UINT8 Rsvd4;\r
887 UINT16 DataSegLen; /* Data Segment Length - Big Endian */\r
0591696e
FT
888\r
889 //\r
890 // DW3 - 6\r
891 //\r
1436aea4 892 UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */\r
0591696e
FT
893\r
894 //\r
895 // DW7\r
896 //\r
1436aea4 897 UINT8 Rsvd5[4];\r
0591696e
FT
898\r
899 //\r
900 // Data Segment - Data to be transferred\r
901 //\r
1436aea4 902 // UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */\r
0591696e
FT
903} UTP_QUERY_REQ_UPIU;\r
904\r
1436aea4
MK
905#define QUERY_FUNC_STD_READ_REQ 0x01\r
906#define QUERY_FUNC_STD_WRITE_REQ 0x81\r
0591696e
FT
907\r
908typedef enum {\r
1436aea4
MK
909 UtpQueryFuncOpcodeNop = 0x00,\r
910 UtpQueryFuncOpcodeRdDesc = 0x01,\r
911 UtpQueryFuncOpcodeWrDesc = 0x02,\r
912 UtpQueryFuncOpcodeRdAttr = 0x03,\r
913 UtpQueryFuncOpcodeWrAttr = 0x04,\r
914 UtpQueryFuncOpcodeRdFlag = 0x05,\r
915 UtpQueryFuncOpcodeSetFlag = 0x06,\r
916 UtpQueryFuncOpcodeClrFlag = 0x07,\r
917 UtpQueryFuncOpcodeTogFlag = 0x08\r
0591696e
FT
918} UTP_QUERY_FUNC_OPCODE;\r
919\r
920//\r
921// UFS 2.0 Spec Section 10.5.11 - UTP Query Response UPIU\r
922//\r
923typedef struct {\r
924 //\r
925 // DW0\r
926 //\r
1436aea4
MK
927 UINT8 TransCode : 6; /* Transaction Type - 0x36*/\r
928 UINT8 Dd : 1;\r
929 UINT8 Hd : 1;\r
930 UINT8 Flags;\r
931 UINT8 Rsvd1;\r
932 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
933\r
934 //\r
935 // DW1\r
936 //\r
1436aea4
MK
937 UINT8 Rsvd2;\r
938 UINT8 QueryFunc; /* Query Function */\r
939 UINT8 QueryResp; /* Query Response */\r
940 UINT8 Rsvd3;\r
0591696e
FT
941\r
942 //\r
943 // DW2\r
944 //\r
1436aea4
MK
945 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
946 UINT8 DevInfo; /* Device Information */\r
947 UINT16 DataSegLen; /* Data Segment Length - Big Endian */\r
0591696e
FT
948\r
949 //\r
950 // DW3 - 6\r
951 //\r
1436aea4 952 UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */\r
0591696e
FT
953\r
954 //\r
955 // DW7\r
956 //\r
1436aea4 957 UINT8 Rsvd4[4];\r
0591696e
FT
958\r
959 //\r
960 // Data Segment - Data to be transferred\r
961 //\r
1436aea4 962 // UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */\r
0591696e
FT
963} UTP_QUERY_RESP_UPIU;\r
964\r
965typedef enum {\r
966 UfsUtpQueryResponseSuccess = 0x00,\r
967 UfsUtpQueryResponseParamNotReadable = 0xF6,\r
d1102dba 968 UfsUtpQueryResponseParamNotWriteable = 0xF7,\r
0591696e
FT
969 UfsUtpQueryResponseParamAlreadyWritten = 0xF8,\r
970 UfsUtpQueryResponseInvalidLen = 0xF9,\r
971 UfsUtpQueryResponseInvalidVal = 0xFA,\r
972 UfsUtpQueryResponseInvalidSelector = 0xFB,\r
973 UfsUtpQueryResponseInvalidIndex = 0xFC,\r
974 UfsUtpQueryResponseInvalidIdn = 0xFD,\r
975 UfsUtpQueryResponseInvalidOpc = 0xFE,\r
976 UfsUtpQueryResponseGeneralFailure = 0xFF\r
977} UTP_QUERY_RESP_CODE;\r
978\r
979//\r
980// UFS 2.0 Spec Section 10.5.12 - UTP Reject UPIU\r
981//\r
982typedef struct {\r
983 //\r
984 // DW0\r
985 //\r
1436aea4
MK
986 UINT8 TransCode : 6; /* Transaction Type - 0x3F*/\r
987 UINT8 Dd : 1;\r
988 UINT8 Hd : 1;\r
989 UINT8 Flags;\r
990 UINT8 Lun;\r
991 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
992\r
993 //\r
994 // DW1\r
995 //\r
1436aea4
MK
996 UINT8 Rsvd1[2];\r
997 UINT8 Response; /* Response - 0x01 */\r
998 UINT8 Rsvd2;\r
0591696e
FT
999\r
1000 //\r
1001 // DW2\r
1002 //\r
1436aea4
MK
1003 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
1004 UINT8 DevInfo; /* Device Information - 0x00 */\r
1005 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
1006\r
1007 //\r
1008 // DW3\r
1009 //\r
1436aea4
MK
1010 UINT8 HdrSts; /* Basic Header Status */\r
1011 UINT8 Rsvd3;\r
1012 UINT8 E2ESts; /* End-to-End Status */\r
1013 UINT8 Rsvd4;\r
0591696e
FT
1014\r
1015 //\r
1016 // DW4 - DW7\r
1017 //\r
1436aea4 1018 UINT8 Rsvd5[16];\r
0591696e
FT
1019} UTP_REJ_UPIU;\r
1020\r
1021//\r
1022// UFS 2.0 Spec Section 10.5.13 - UTP NOP OUT UPIU\r
1023//\r
1024typedef struct {\r
1025 //\r
1026 // DW0\r
1027 //\r
1436aea4
MK
1028 UINT8 TransCode : 6; /* Transaction Type - 0x00*/\r
1029 UINT8 Dd : 1;\r
1030 UINT8 Hd : 1;\r
1031 UINT8 Flags;\r
1032 UINT8 Rsvd1;\r
1033 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
1034\r
1035 //\r
1036 // DW1\r
1037 //\r
1436aea4 1038 UINT8 Rsvd2[4];\r
0591696e
FT
1039\r
1040 //\r
1041 // DW2\r
1042 //\r
1436aea4
MK
1043 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
1044 UINT8 Rsvd3;\r
1045 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
1046\r
1047 //\r
1048 // DW3 - DW7\r
1049 //\r
1436aea4 1050 UINT8 Rsvd4[20];\r
0591696e
FT
1051} UTP_NOP_OUT_UPIU;\r
1052\r
1053//\r
1054// UFS 2.0 Spec Section 10.5.14 - UTP NOP IN UPIU\r
1055//\r
1056typedef struct {\r
1057 //\r
1058 // DW0\r
1059 //\r
1436aea4
MK
1060 UINT8 TransCode : 6; /* Transaction Type - 0x20*/\r
1061 UINT8 Dd : 1;\r
1062 UINT8 Hd : 1;\r
1063 UINT8 Flags;\r
1064 UINT8 Rsvd1;\r
1065 UINT8 TaskTag; /* Task Tag */\r
0591696e
FT
1066\r
1067 //\r
1068 // DW1\r
1069 //\r
1436aea4
MK
1070 UINT8 Rsvd2[2];\r
1071 UINT8 Resp; /* Response - 0x00 */\r
1072 UINT8 Rsvd3;\r
0591696e
FT
1073\r
1074 //\r
1075 // DW2\r
1076 //\r
1436aea4
MK
1077 UINT8 EhsLen; /* Total EHS Length - 0x00 */\r
1078 UINT8 DevInfo; /* Device Information - 0x00 */\r
1079 UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */\r
0591696e
FT
1080\r
1081 //\r
1082 // DW3 - DW7\r
1083 //\r
1436aea4 1084 UINT8 Rsvd4[20];\r
0591696e
FT
1085} UTP_NOP_IN_UPIU;\r
1086\r
1087//\r
1088// UFS Descriptors\r
1089//\r
1090typedef enum {\r
1436aea4
MK
1091 UfsDeviceDesc = 0x00,\r
1092 UfsConfigDesc = 0x01,\r
1093 UfsUnitDesc = 0x02,\r
1094 UfsInterConnDesc = 0x04,\r
1095 UfsStringDesc = 0x05,\r
1096 UfsGeometryDesc = 0x07,\r
1097 UfsPowerDesc = 0x08\r
0591696e
FT
1098} UFS_DESC_IDN;\r
1099\r
1100//\r
1101// UFS 2.0 Spec Section 14.1.6.2 - Device Descriptor\r
1102//\r
1103typedef struct {\r
1436aea4
MK
1104 UINT8 Length;\r
1105 UINT8 DescType;\r
1106 UINT8 Device;\r
1107 UINT8 DevClass;\r
1108 UINT8 DevSubClass;\r
1109 UINT8 Protocol;\r
1110 UINT8 NumLun;\r
1111 UINT8 NumWLun;\r
1112 UINT8 BootEn;\r
1113 UINT8 DescAccessEn;\r
1114 UINT8 InitPowerMode;\r
1115 UINT8 HighPriorityLun;\r
1116 UINT8 SecureRemovalType;\r
1117 UINT8 SecurityLun;\r
1118 UINT8 BgOpsTermLat;\r
1119 UINT8 InitActiveIccLevel;\r
1120 UINT16 SpecVersion;\r
1121 UINT16 ManufactureDate;\r
1122 UINT8 ManufacturerName;\r
1123 UINT8 ProductName;\r
1124 UINT8 SerialName;\r
1125 UINT8 OemId;\r
1126 UINT16 ManufacturerId;\r
1127 UINT8 Ud0BaseOffset;\r
1128 UINT8 Ud0ConfParamLen;\r
1129 UINT8 DevRttCap;\r
1130 UINT16 PeriodicRtcUpdate;\r
1131 UINT8 Rsvd1[17];\r
1132 UINT8 Rsvd2[16];\r
0591696e
FT
1133} UFS_DEV_DESC;\r
1134\r
1135typedef struct {\r
1436aea4
MK
1136 UINT8 Length;\r
1137 UINT8 DescType;\r
1138 UINT8 Rsvd1;\r
1139 UINT8 BootEn;\r
1140 UINT8 DescAccessEn;\r
1141 UINT8 InitPowerMode;\r
1142 UINT8 HighPriorityLun;\r
1143 UINT8 SecureRemovalType;\r
1144 UINT8 InitActiveIccLevel;\r
1145 UINT16 PeriodicRtcUpdate;\r
1146 UINT8 Rsvd2[5];\r
0591696e
FT
1147} UFS_CONFIG_DESC_GEN_HEADER;\r
1148\r
1149typedef struct {\r
1436aea4
MK
1150 UINT8 LunEn;\r
1151 UINT8 BootLunId;\r
1152 UINT8 LunWriteProt;\r
1153 UINT8 MemType;\r
1154 UINT32 NumAllocUnits;\r
1155 UINT8 DataReliability;\r
1156 UINT8 LogicBlkSize;\r
1157 UINT8 ProvisionType;\r
1158 UINT16 CtxCap;\r
1159 UINT8 Rsvd1[3];\r
0591696e
FT
1160} UFS_UNIT_DESC_CONFIG_PARAMS;\r
1161\r
1162//\r
1163// UFS 2.0 Spec Section 14.1.6.3 - Configuration Descriptor\r
1164//\r
1165typedef struct {\r
1436aea4
MK
1166 UFS_CONFIG_DESC_GEN_HEADER Header;\r
1167 UFS_UNIT_DESC_CONFIG_PARAMS UnitDescConfParams[8];\r
0591696e
FT
1168} UFS_CONFIG_DESC;\r
1169\r
1170//\r
1171// UFS 2.0 Spec Section 14.1.6.4 - Geometry Descriptor\r
1172//\r
1173typedef struct {\r
1436aea4
MK
1174 UINT8 Length;\r
1175 UINT8 DescType;\r
1176 UINT8 MediaTech;\r
1177 UINT8 Rsvd1;\r
1178 UINT64 TotalRawDevCapacity;\r
1179 UINT8 Rsvd2;\r
1180 UINT32 SegSize;\r
1181 UINT8 AllocUnitSize;\r
1182 UINT8 MinAddrBlkSize;\r
1183 UINT8 OptReadBlkSize;\r
1184 UINT8 OptWriteBlkSize;\r
1185 UINT8 MaxInBufSize;\r
1186 UINT8 MaxOutBufSize;\r
1187 UINT8 RpmbRwSize;\r
1188 UINT8 Rsvd3;\r
1189 UINT8 DataOrder;\r
1190 UINT8 MaxCtxIdNum;\r
1191 UINT8 SysDataTagUnitSize;\r
1192 UINT8 SysDataResUnitSize;\r
1193 UINT8 SupSecRemovalTypes;\r
1194 UINT16 SupMemTypes;\r
1195 UINT32 SysCodeMaxNumAllocUnits;\r
1196 UINT16 SupCodeCapAdjFac;\r
1197 UINT32 NonPersMaxNumAllocUnits;\r
1198 UINT16 NonPersCapAdjFac;\r
1199 UINT32 Enhance1MaxNumAllocUnits;\r
1200 UINT16 Enhance1CapAdjFac;\r
1201 UINT32 Enhance2MaxNumAllocUnits;\r
1202 UINT16 Enhance2CapAdjFac;\r
1203 UINT32 Enhance3MaxNumAllocUnits;\r
1204 UINT16 Enhance3CapAdjFac;\r
1205 UINT32 Enhance4MaxNumAllocUnits;\r
1206 UINT16 Enhance4CapAdjFac;\r
0591696e
FT
1207} UFS_GEOMETRY_DESC;\r
1208\r
1209//\r
1210// UFS 2.0 Spec Section 14.1.6.5 - Unit Descriptor\r
1211//\r
1212typedef struct {\r
1436aea4
MK
1213 UINT8 Length;\r
1214 UINT8 DescType;\r
1215 UINT8 UnitIdx;\r
1216 UINT8 LunEn;\r
1217 UINT8 BootLunId;\r
1218 UINT8 LunWriteProt;\r
1219 UINT8 LunQueueDep;\r
1220 UINT8 Rsvd1;\r
1221 UINT8 MemType;\r
1222 UINT8 DataReliability;\r
1223 UINT8 LogicBlkSize;\r
1224 UINT64 LogicBlkCount;\r
1225 UINT32 EraseBlkSize;\r
1226 UINT8 ProvisionType;\r
1227 UINT64 PhyMemResCount;\r
1228 UINT16 CtxCap;\r
1229 UINT8 LargeUnitGranularity;\r
0591696e
FT
1230} UFS_UNIT_DESC;\r
1231\r
1232//\r
1233// UFS 2.0 Spec Section 14.1.6.6 - RPMB Unit Descriptor\r
1234//\r
1235typedef struct {\r
1436aea4
MK
1236 UINT8 Length;\r
1237 UINT8 DescType;\r
1238 UINT8 UnitIdx;\r
1239 UINT8 LunEn;\r
1240 UINT8 BootLunId;\r
1241 UINT8 LunWriteProt;\r
1242 UINT8 LunQueueDep;\r
1243 UINT8 Rsvd1;\r
1244 UINT8 MemType;\r
1245 UINT8 Rsvd2;\r
1246 UINT8 LogicBlkSize;\r
1247 UINT64 LogicBlkCount;\r
1248 UINT32 EraseBlkSize;\r
1249 UINT8 ProvisionType;\r
1250 UINT64 PhyMemResCount;\r
1251 UINT8 Rsvd3[3];\r
0591696e
FT
1252} UFS_RPMB_UNIT_DESC;\r
1253\r
1254typedef struct {\r
1436aea4
MK
1255 UINT16 Value : 10;\r
1256 UINT16 Rsvd1 : 4;\r
1257 UINT16 Unit : 2;\r
0591696e
FT
1258} UFS_POWER_PARAM_ELEMENT;\r
1259\r
1260//\r
1261// UFS 2.0 Spec Section 14.1.6.7 - Power Parameter Descriptor\r
1262//\r
1263typedef struct {\r
1436aea4
MK
1264 UINT8 Length;\r
1265 UINT8 DescType;\r
1266 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVcc[16];\r
1267 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ[16];\r
1268 UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ2[16];\r
0591696e
FT
1269} UFS_POWER_DESC;\r
1270\r
1271//\r
1272// UFS 2.0 Spec Section 14.1.6.8 - InterConnect Descriptor\r
1273//\r
1274typedef struct {\r
1436aea4
MK
1275 UINT8 Length;\r
1276 UINT8 DescType;\r
1277 UINT16 UniProVer;\r
1278 UINT16 MphyVer;\r
0591696e
FT
1279} UFS_INTER_CONNECT_DESC;\r
1280\r
1281//\r
1282// UFS 2.0 Spec Section 14.1.6.9 - 14.1.6.12 - String Descriptor\r
1283//\r
1284typedef struct {\r
1436aea4
MK
1285 UINT8 Length;\r
1286 UINT8 DescType;\r
1287 CHAR16 Unicode[126];\r
0591696e
FT
1288} UFS_STRING_DESC;\r
1289\r
1290//\r
1291// UFS 2.0 Spec Section 14.2 - Flags\r
1292//\r
1293typedef enum {\r
1294 UfsFlagDevInit = 0x01,\r
1295 UfsFlagPermWpEn = 0x02,\r
1296 UfsFlagPowerOnWpEn = 0x03,\r
1297 UfsFlagBgOpsEn = 0x04,\r
1298 UfsFlagPurgeEn = 0x06,\r
1299 UfsFlagPhyResRemoval = 0x08,\r
1300 UfsFlagBusyRtc = 0x09,\r
d1102dba 1301 UfsFlagPermDisFwUpdate = 0x0B\r
0591696e
FT
1302} UFS_FLAGS_IDN;\r
1303\r
1304//\r
1305// UFS 2.0 Spec Section 14.2 - Attributes\r
1306//\r
1307typedef enum {\r
1436aea4
MK
1308 UfsAttrBootLunEn = 0x00,\r
1309 UfsAttrCurPowerMode = 0x02,\r
1310 UfsAttrActiveIccLevel = 0x03,\r
1311 UfsAttrOutOfOrderDataEn = 0x04,\r
1312 UfsAttrBgOpStatus = 0x05,\r
1313 UfsAttrPurgeStatus = 0x06,\r
1314 UfsAttrMaxDataInSize = 0x07,\r
1315 UfsAttrMaxDataOutSize = 0x08,\r
1316 UfsAttrDynCapNeeded = 0x09,\r
1317 UfsAttrRefClkFreq = 0x0a,\r
1318 UfsAttrConfigDescLock = 0x0b,\r
1319 UfsAttrMaxNumOfRtt = 0x0c,\r
1320 UfsAttrExceptionEvtCtrl = 0x0d,\r
1321 UfsAttrExceptionEvtSts = 0x0e,\r
1322 UfsAttrSecondsPassed = 0x0f,\r
1323 UfsAttrContextConf = 0x10,\r
1324 UfsAttrCorrPrgBlkNum = 0x11\r
0591696e
FT
1325} UFS_ATTR_IDN;\r
1326\r
1327typedef enum {\r
1436aea4
MK
1328 UfsNoData = 0,\r
1329 UfsDataOut = 1,\r
1330 UfsDataIn = 2,\r
0591696e
FT
1331 UfsDdReserved\r
1332} UFS_DATA_DIRECTION;\r
1333\r
0591696e
FT
1334#pragma pack()\r
1335\r
1336#endif\r