| /** @file | |
| UfsPassThruDxe driver is used to produce EFI_EXT_SCSI_PASS_THRU protocol interface | |
| for upper layer application to execute UFS-supported SCSI cmds. | |
| Copyright (c) 2014, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _UFS_PASS_THRU_HCI_H_ | |
| #define _UFS_PASS_THRU_HCI_H_ | |
| // | |
| // Host Capabilities Register Offsets | |
| // | |
| #define UFS_HC_CAP_OFFSET 0x0000 // Controller Capabilities | |
| #define UFS_HC_VER_OFFSET 0x0008 // Version | |
| #define UFS_HC_DDID_OFFSET 0x0010 // Device ID and Device Class | |
| #define UFS_HC_PMID_OFFSET 0x0014 // Product ID and Manufacturer ID | |
| #define UFS_HC_AHIT_OFFSET 0x0018 // Auto-Hibernate Idle Timer | |
| // | |
| // Operation and Runtime Register Offsets | |
| // | |
| #define UFS_HC_IS_OFFSET 0x0020 // Interrupt Status | |
| #define UFS_HC_IE_OFFSET 0x0024 // Interrupt Enable | |
| #define UFS_HC_STATUS_OFFSET 0x0030 // Host Controller Status | |
| #define UFS_HC_ENABLE_OFFSET 0x0034 // Host Controller Enable | |
| #define UFS_HC_UECPA_OFFSET 0x0038 // Host UIC Error Code PHY Adapter Layer | |
| #define UFS_HC_UECDL_OFFSET 0x003c // Host UIC Error Code Data Link Layer | |
| #define UFS_HC_UECN_OFFSET 0x0040 // Host UIC Error Code Network Layer | |
| #define UFS_HC_UECT_OFFSET 0x0044 // Host UIC Error Code Transport Layer | |
| #define UFS_HC_UECDME_OFFSET 0x0048 // Host UIC Error Code DME | |
| #define UFS_HC_UTRIACR_OFFSET 0x004c // UTP Transfer Request Interrupt Aggregation Control Register | |
| // | |
| // UTP Transfer Register Offsets | |
| // | |
| #define UFS_HC_UTRLBA_OFFSET 0x0050 // UTP Transfer Request List Base Address | |
| #define UFS_HC_UTRLBAU_OFFSET 0x0054 // UTP Transfer Request List Base Address Upper 32-Bits | |
| #define UFS_HC_UTRLDBR_OFFSET 0x0058 // UTP Transfer Request List Door Bell Register | |
| #define UFS_HC_UTRLCLR_OFFSET 0x005c // UTP Transfer Request List CLear Register | |
| #define UFS_HC_UTRLRSR_OFFSET 0x0060 // UTP Transfer Request Run-Stop Register | |
| // | |
| // UTP Task Management Register Offsets | |
| // | |
| #define UFS_HC_UTMRLBA_OFFSET 0x0070 // UTP Task Management Request List Base Address | |
| #define UFS_HC_UTMRLBAU_OFFSET 0x0074 // UTP Task Management Request List Base Address Upper 32-Bits | |
| #define UFS_HC_UTMRLDBR_OFFSET 0x0078 // UTP Task Management Request List Door Bell Register | |
| #define UFS_HC_UTMRLCLR_OFFSET 0x007c // UTP Task Management Request List CLear Register | |
| #define UFS_HC_UTMRLRSR_OFFSET 0x0080 // UTP Task Management Run-Stop Register | |
| // | |
| // UIC Command Register Offsets | |
| // | |
| #define UFS_HC_UIC_CMD_OFFSET 0x0090 // UIC Command Register | |
| #define UFS_HC_UCMD_ARG1_OFFSET 0x0094 // UIC Command Argument 1 | |
| #define UFS_HC_UCMD_ARG2_OFFSET 0x0098 // UIC Command Argument 2 | |
| #define UFS_HC_UCMD_ARG3_OFFSET 0x009c // UIC Command Argument 3 | |
| // | |
| // UMA Register Offsets | |
| // | |
| #define UFS_HC_UMA_OFFSET 0x00b0 // Reserved for Unified Memory Extension | |
| #define UFS_HC_HCE_EN BIT0 | |
| #define UFS_HC_HCS_DP BIT0 | |
| #define UFS_HC_HCS_UCRDY BIT3 | |
| #define UFS_HC_IS_ULSS BIT8 | |
| #define UFS_HC_IS_UCCS BIT10 | |
| #define UFS_HC_CAP_64ADDR BIT24 | |
| #define UFS_HC_CAP_NUTMRS (BIT16 | BIT17 | BIT18) | |
| #define UFS_HC_CAP_NUTRS (BIT0 | BIT1 | BIT2 | BIT3 | BIT4) | |
| #define UFS_HC_UTMRLRSR BIT0 | |
| #define UFS_HC_UTRLRSR BIT0 | |
| // | |
| // The initial value of the OCS field of UTP TRD or TMRD descriptor | |
| // defined in JEDEC JESD223 specification | |
| // | |
| #define UFS_HC_TRD_OCS_INIT_VALUE 0x0F | |
| // | |
| // A maximum of length of 256KB is supported by PRDT entry | |
| // | |
| #define UFS_MAX_DATA_LEN_PER_PRD 0x40000 | |
| #define UFS_STORAGE_COMMAND_TYPE 0x01 | |
| #define UFS_REGULAR_COMMAND 0x00 | |
| #define UFS_INTERRUPT_COMMAND 0x01 | |
| #define UFS_LUN_0 0x00 | |
| #define UFS_LUN_1 0x01 | |
| #define UFS_LUN_2 0x02 | |
| #define UFS_LUN_3 0x03 | |
| #define UFS_LUN_4 0x04 | |
| #define UFS_LUN_5 0x05 | |
| #define UFS_LUN_6 0x06 | |
| #define UFS_LUN_7 0x07 | |
| #define UFS_WLUN_REPORT_LUNS 0x81 | |
| #define UFS_WLUN_UFS_DEV 0xD0 | |
| #define UFS_WLUN_BOOT 0xB0 | |
| #define UFS_WLUN_RPMB 0xC4 | |
| #pragma pack(1) | |
| // | |
| // UFSHCI 2.0 Spec Section 5.2.1 Offset 00h: CAP - Controller Capabilities | |
| // | |
| typedef struct { | |
| UINT8 Nutrs:4; // Number of UTP Transfer Request Slots | |
| UINT8 Rsvd1:4; | |
| UINT8 NoRtt; // Number of outstanding READY TO TRANSFER (RTT) requests supported | |
| UINT8 Nutmrs:3; // Number of UTP Task Management Request Slots | |
| UINT8 Rsvd2:4; | |
| UINT8 AutoHs:1; // Auto-Hibernation Support | |
| UINT8 As64:1; // 64-bit addressing supported | |
| UINT8 Oodds:1; // Out of order data delivery supported | |
| UINT8 UicDmetms:1; // UIC DME_TEST_MODE command supported | |
| UINT8 Ume:1; // Reserved for Unified Memory Extension | |
| UINT8 Rsvd4:4; | |
| } UFS_HC_CAP; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.2.2 Offset 08h: VER - UFS Version | |
| // | |
| typedef struct { | |
| UINT8 Vs:4; // Version Suffix | |
| UINT8 Mnr:4; // Minor version number | |
| UINT8 Mjr; // Major version number | |
| UINT16 Rsvd1; | |
| } UFS_HC_VER; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.2.3 Offset 10h: HCPID - Host Controller Product ID | |
| // | |
| #define UFS_HC_PID UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.2.4 Offset 14h: HCMID - Host Controller Manufacturer ID | |
| // | |
| #define UFS_HC_MID UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.2.5 Offset 18h: AHIT - Auto-Hibernate Idle Timer | |
| // | |
| typedef struct { | |
| UINT32 Ahitv:10; // Auto-Hibernate Idle Timer Value | |
| UINT32 Ts:3; // Timer scale | |
| UINT32 Rsvd1:19; | |
| } UFS_HC_AHIT; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.1 Offset 20h: IS - Interrupt Status | |
| // | |
| typedef struct { | |
| UINT16 Utrcs:1; // UTP Transfer Request Completion Status | |
| UINT16 Udepri:1; // UIC DME_ENDPOINT_RESET Indication | |
| UINT16 Ue:1; // UIC Error | |
| UINT16 Utms:1; // UIC Test Mode Status | |
| UINT16 Upms:1; // UIC Power Mode Status | |
| UINT16 Uhxs:1; // UIC Hibernate Exit Status | |
| UINT16 Uhes:1; // UIC Hibernate Enter Status | |
| UINT16 Ulls:1; // UIC Link Lost Status | |
| UINT16 Ulss:1; // UIC Link Startup Status | |
| UINT16 Utmrcs:1; // UTP Task Management Request Completion Status | |
| UINT16 Uccs:1; // UIC Command Completion Status | |
| UINT16 Dfes:1; // Device Fatal Error Status | |
| UINT16 Utpes:1; // UTP Error Status | |
| UINT16 Rsvd1:3; | |
| UINT16 Hcfes:1; // Host Controller Fatal Error Status | |
| UINT16 Sbfes:1; // System Bus Fatal Error Status | |
| UINT16 Rsvd2:14; | |
| } UFS_HC_IS; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.2 Offset 24h: IE - Interrupt Enable | |
| // | |
| typedef struct { | |
| UINT16 Utrce:1; // UTP Transfer Request Completion Enable | |
| UINT16 Udeprie:1; // UIC DME_ENDPOINT_RESET Enable | |
| UINT16 Uee:1; // UIC Error Enable | |
| UINT16 Utmse:1; // UIC Test Mode Status Enable | |
| UINT16 Upmse:1; // UIC Power Mode Status Enable | |
| UINT16 Uhxse:1; // UIC Hibernate Exit Status Enable | |
| UINT16 Uhese:1; // UIC Hibernate Enter Status Enable | |
| UINT16 Ullse:1; // UIC Link Lost Status Enable | |
| UINT16 Ulsse:1; // UIC Link Startup Status Enable | |
| UINT16 Utmrce:1; // UTP Task Management Request Completion Enable | |
| UINT16 Ucce:1; // UIC Command Completion Enable | |
| UINT16 Dfee:1; // Device Fatal Error Enable | |
| UINT16 Utpee:1; // UTP Error Enable | |
| UINT16 Rsvd1:3; | |
| UINT16 Hcfee:1; // Host Controller Fatal Error Enable | |
| UINT16 Sbfee:1; // System Bus Fatal Error Enable | |
| UINT16 Rsvd2:14; | |
| } UFS_HC_IE; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.3 Offset 30h: HCS - Host Controller Status | |
| // | |
| typedef struct { | |
| UINT8 Dp:1; // Device Present | |
| UINT8 UtrlRdy:1; // UTP Transfer Request List Ready | |
| UINT8 UtmrlRdy:1; // UTP Task Management Request List Ready | |
| UINT8 UcRdy:1; // UIC COMMAND Ready | |
| UINT8 Rsvd1:4; | |
| UINT8 Upmcrs:3; // UIC Power Mode Change Request Status | |
| UINT8 Rsvd2:1; // UIC Hibernate Exit Status Enable | |
| UINT8 Utpec:4; // UTP Error Code | |
| UINT8 TtagUtpE; // Task Tag of UTP error | |
| UINT8 TlunUtpE; // Target LUN of UTP error | |
| } UFS_HC_STATUS; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.4 Offset 34h: HCE - Host Controller Enable | |
| // | |
| typedef struct { | |
| UINT32 Hce:1; // Host Controller Enable | |
| UINT32 Rsvd1:31; | |
| } UFS_HC_ENABLE; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.5 Offset 38h: UECPA - Host UIC Error Code PHY Adapter Layer | |
| // | |
| typedef struct { | |
| UINT32 Ec:5; // UIC PHY Adapter Layer Error Code | |
| UINT32 Rsvd1:26; | |
| UINT32 Err:1; // UIC PHY Adapter Layer Error | |
| } UFS_HC_UECPA; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.6 Offset 3ch: UECDL - Host UIC Error Code Data Link Layer | |
| // | |
| typedef struct { | |
| UINT32 Ec:15; // UIC Data Link Layer Error Code | |
| UINT32 Rsvd1:16; | |
| UINT32 Err:1; // UIC Data Link Layer Error | |
| } UFS_HC_UECDL; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.7 Offset 40h: UECN - Host UIC Error Code Network Layer | |
| // | |
| typedef struct { | |
| UINT32 Ec:3; // UIC Network Layer Error Code | |
| UINT32 Rsvd1:28; | |
| UINT32 Err:1; // UIC Network Layer Error | |
| } UFS_HC_UECN; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.8 Offset 44h: UECT - Host UIC Error Code Transport Layer | |
| // | |
| typedef struct { | |
| UINT32 Ec:7; // UIC Transport Layer Error Code | |
| UINT32 Rsvd1:24; | |
| UINT32 Err:1; // UIC Transport Layer Error | |
| } UFS_HC_UECT; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.9 Offset 48h: UECDME - Host UIC Error Code | |
| // | |
| typedef struct { | |
| UINT32 Ec:1; // UIC DME Error Code | |
| UINT32 Rsvd1:30; | |
| UINT32 Err:1; // UIC DME Error | |
| } UFS_HC_UECDME; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.3.10 Offset 4Ch: UTRIACR - UTP Transfer Request Interrupt Aggregation Control Register | |
| // | |
| typedef struct { | |
| UINT8 IaToVal; // Interrupt aggregation timeout value | |
| UINT8 IacTh:5; // Interrupt aggregation counter threshold | |
| UINT8 Rsvd1:3; | |
| UINT8 Ctr:1; // Counter and Timer Reset | |
| UINT8 Rsvd2:3; | |
| UINT8 Iasb:1; // Interrupt aggregation status bit | |
| UINT8 Rsvd3:3; | |
| UINT8 IapwEn:1; // Interrupt aggregation parameter write enable | |
| UINT8 Rsvd4:6; | |
| UINT8 IaEn:1; // Interrupt Aggregation Enable/Disable | |
| } UFS_HC_UTRIACR; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.4.1 Offset 50h: UTRLBA - UTP Transfer Request List Base Address | |
| // | |
| typedef struct { | |
| UINT32 Rsvd1:10; | |
| UINT32 UtrlBa:22; // UTP Transfer Request List Base Address | |
| } UFS_HC_UTRLBA; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.4.2 Offset 54h: UTRLBAU - UTP Transfer Request List Base Address Upper 32-bits | |
| // | |
| #define UFS_HC_UTRLBAU UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.4.3 Offset 58h: UTRLDBR - UTP Transfer Request List Door Bell Register | |
| // | |
| #define UFS_HC_UTRLDBR UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.4.4 Offset 5Ch: UTRLCLR - UTP Transfer Request List CLear Register | |
| // | |
| #define UFS_HC_UTRLCLR UINT32 | |
| #if 0 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.4.5 Offset 60h: UTRLRSR - UTP Transfer Request List Run Stop Register | |
| // | |
| typedef struct { | |
| UINT32 UtrlRsr:1; // UTP Transfer Request List Run-Stop Register | |
| UINT32 Rsvd1:31; | |
| } UFS_HC_UTRLRSR; | |
| #endif | |
| // | |
| // UFSHCI 2.0 Spec Section 5.5.1 Offset 70h: UTMRLBA - UTP Task Management Request List Base Address | |
| // | |
| typedef struct { | |
| UINT32 Rsvd1:10; | |
| UINT32 UtmrlBa:22; // UTP Task Management Request List Base Address | |
| } UFS_HC_UTMRLBA; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.5.2 Offset 74h: UTMRLBAU - UTP Task Management Request List Base Address Upper 32-bits | |
| // | |
| #define UFS_HC_UTMRLBAU UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.5.3 Offset 78h: UTMRLDBR - UTP Task Management Request List Door Bell Register | |
| // | |
| typedef struct { | |
| UINT32 UtmrlDbr:8; // UTP Task Management Request List Door bell Register | |
| UINT32 Rsvd1:24; | |
| } UFS_HC_UTMRLDBR; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.5.4 Offset 7Ch: UTMRLCLR - UTP Task Management Request List CLear Register | |
| // | |
| typedef struct { | |
| UINT32 UtmrlClr:8; // UTP Task Management List Clear Register | |
| UINT32 Rsvd1:24; | |
| } UFS_HC_UTMRLCLR; | |
| #if 0 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.5.5 Offset 80h: UTMRLRSR - UTP Task Management Request List Run Stop Register | |
| // | |
| typedef struct { | |
| UINT32 UtmrlRsr:1; // UTP Task Management Request List Run-Stop Register | |
| UINT32 Rsvd1:31; | |
| } UFS_HC_UTMRLRSR; | |
| #endif | |
| // | |
| // UFSHCI 2.0 Spec Section 5.6.1 Offset 90h: UICCMD - UIC Command | |
| // | |
| typedef struct { | |
| UINT32 CmdOp:8; // Command Opcode | |
| UINT32 Rsvd1:24; | |
| } UFS_HC_UICCMD; | |
| // | |
| // UFSHCI 2.0 Spec Section 5.6.2 Offset 94h: UICCMDARG1 - UIC Command Argument 1 | |
| // | |
| #define UFS_HC_UICCMD_ARG1 UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.6.2 Offset 98h: UICCMDARG2 - UIC Command Argument 2 | |
| // | |
| #define UFS_HC_UICCMD_ARG2 UINT32 | |
| // | |
| // UFSHCI 2.0 Spec Section 5.6.2 Offset 9ch: UICCMDARG3 - UIC Command Argument 3 | |
| // | |
| #define UFS_HC_UICCMD_ARG3 UINT32 | |
| // | |
| // UIC command opcodes | |
| // | |
| typedef enum { | |
| UfsUicDmeGet = 0x01, | |
| UfsUicDmeSet = 0x02, | |
| UfsUicDmePeerGet = 0x03, | |
| UfsUicDmePeerSet = 0x04, | |
| UfsUicDmePwrOn = 0x10, | |
| UfsUicDmePwrOff = 0x11, | |
| UfsUicDmeEnable = 0x12, | |
| UfsUicDmeReset = 0x14, | |
| UfsUicDmeEndpointReset = 0x15, | |
| UfsUicDmeLinkStartup = 0x16, | |
| UfsUicDmeHibernateEnter = 0x17, | |
| UfsUicDmeHibernateExit = 0x18, | |
| UfsUicDmeTestMode = 0x1A | |
| } UFS_UIC_OPCODE; | |
| // | |
| // UTP Transfer Request Descriptor | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT32 Rsvd1:24; | |
| UINT32 Int:1; /* Interrupt */ | |
| UINT32 Dd:2; /* Data Direction */ | |
| UINT32 Rsvd2:1; | |
| UINT32 Ct:4; /* Command Type */ | |
| // | |
| // DW1 | |
| // | |
| UINT32 Rsvd3; | |
| // | |
| // DW2 | |
| // | |
| UINT32 Ocs:8; /* Overall Command Status */ | |
| UINT32 Rsvd4:24; | |
| // | |
| // DW3 | |
| // | |
| UINT32 Rsvd5; | |
| // | |
| // DW4 | |
| // | |
| UINT32 Rsvd6:7; | |
| UINT32 UcdBa:25; /* UTP Command Descriptor Base Address */ | |
| // | |
| // DW5 | |
| // | |
| UINT32 UcdBaU; /* UTP Command Descriptor Base Address Upper 32-bits */ | |
| // | |
| // DW6 | |
| // | |
| UINT16 RuL; /* Response UPIU Length */ | |
| UINT16 RuO; /* Response UPIU Offset */ | |
| // | |
| // DW7 | |
| // | |
| UINT16 PrdtL; /* PRDT Length */ | |
| UINT16 PrdtO; /* PRDT Offset */ | |
| } UTP_TRD; | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT32 Rsvd1:2; | |
| UINT32 DbAddr:30; /* Data Base Address */ | |
| // | |
| // DW1 | |
| // | |
| UINT32 DbAddrU; /* Data Base Address Upper 32-bits */ | |
| // | |
| // DW2 | |
| // | |
| UINT32 Rsvd2; | |
| // | |
| // DW3 | |
| // | |
| UINT32 DbCount:18; /* Data Byte Count */ | |
| UINT32 Rsvd3:14; | |
| } UTP_TR_PRD; | |
| // | |
| // UFS 2.0 Spec Section 10.5.3 - UTP Command UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x01*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 CmdSet:4; /* Command Set Type */ | |
| UINT8 Rsvd1:4; | |
| UINT8 Rsvd2; | |
| UINT8 Rsvd3; | |
| UINT8 Rsvd4; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd5; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 ExpDataTranLen; /* Expected Data Transfer Length - Big Endian */ | |
| // | |
| // DW4 - DW7 | |
| // | |
| UINT8 Cdb[16]; | |
| } UTP_COMMAND_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.4 - UTP Response UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x21*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 CmdSet:4; /* Command Set Type */ | |
| UINT8 Rsvd1:4; | |
| UINT8 Rsvd2; | |
| UINT8 Response; /* Response */ | |
| UINT8 Status; /* Status */ | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 DevInfo; /* Device Information */ | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 ResTranCount; /* Residual Transfer Count - Big Endian */ | |
| // | |
| // DW4 - DW7 | |
| // | |
| UINT8 Rsvd3[16]; | |
| // | |
| // Data Segment - Sense Data | |
| // | |
| UINT16 SenseDataLen; /* Sense Data Length - Big Endian */ | |
| UINT8 SenseData[18]; /* Sense Data */ | |
| } UTP_RESPONSE_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.5 - UTP Data-Out UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x02*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1[4]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd2; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */ | |
| // | |
| // DW4 | |
| // | |
| UINT32 DataTranCount; /* Data Transfer Count - Big Endian */ | |
| // | |
| // DW5 - DW7 | |
| // | |
| UINT8 Rsvd3[12]; | |
| // | |
| // Data Segment - Data to be sent out | |
| // | |
| //UINT8 Data[]; /* Data to be sent out, maximum is 65535 bytes */ | |
| } UTP_DATA_OUT_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.6 - UTP Data-In UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x22*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1[4]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd2; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */ | |
| // | |
| // DW4 | |
| // | |
| UINT32 DataTranCount; /* Data Transfer Count - Big Endian */ | |
| // | |
| // DW5 - DW7 | |
| // | |
| UINT8 Rsvd3[12]; | |
| // | |
| // Data Segment - Data to be read | |
| // | |
| //UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */ | |
| } UTP_DATA_IN_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.7 - UTP Ready-To-Transfer UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x31*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1[4]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd2; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 DataBufOffset; /* Data Buffer Offset - Big Endian */ | |
| // | |
| // DW4 | |
| // | |
| UINT32 DataTranCount; /* Data Transfer Count - Big Endian */ | |
| // | |
| // DW5 - DW7 | |
| // | |
| UINT8 Rsvd3[12]; | |
| // | |
| // Data Segment - Data to be read | |
| // | |
| //UINT8 Data[]; /* Data to be read, maximum is 65535 bytes */ | |
| } UTP_RDY_TO_TRAN_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.8 - UTP Task Management Request UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x04*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1; | |
| UINT8 TskManFunc; /* Task Management Function */ | |
| UINT8 Rsvd2[2]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd3; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 InputParam1; /* Input Parameter 1 - Big Endian */ | |
| // | |
| // DW4 | |
| // | |
| UINT32 InputParam2; /* Input Parameter 2 - Big Endian */ | |
| // | |
| // DW5 | |
| // | |
| UINT32 InputParam3; /* Input Parameter 3 - Big Endian */ | |
| // | |
| // DW6 - DW7 | |
| // | |
| UINT8 Rsvd4[8]; | |
| } UTP_TM_REQ_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.9 - UTP Task Management Response UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x24*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1[2]; | |
| UINT8 Resp; /* Response */ | |
| UINT8 Rsvd2; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd3; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 | |
| // | |
| UINT32 OutputParam1; /* Output Parameter 1 - Big Endian */ | |
| // | |
| // DW4 | |
| // | |
| UINT32 OutputParam2; /* Output Parameter 2 - Big Endian */ | |
| // | |
| // DW5 - DW7 | |
| // | |
| UINT8 Rsvd4[12]; | |
| } UTP_TM_RESP_UPIU; | |
| // | |
| // UTP Task Management Request Descriptor | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT32 Rsvd1:24; | |
| UINT32 Int:1; /* Interrupt */ | |
| UINT32 Rsvd2:7; | |
| // | |
| // DW1 | |
| // | |
| UINT32 Rsvd3; | |
| // | |
| // DW2 | |
| // | |
| UINT32 Ocs:8; /* Overall Command Status */ | |
| UINT32 Rsvd4:24; | |
| // | |
| // DW3 | |
| // | |
| UINT32 Rsvd5; | |
| // | |
| // DW4 - DW11 | |
| // | |
| UTP_TM_REQ_UPIU TmReq; /* Task Management Request UPIU */ | |
| // | |
| // DW12 - DW19 | |
| // | |
| UTP_TM_RESP_UPIU TmResp; /* Task Management Response UPIU */ | |
| } UTP_TMRD; | |
| typedef struct { | |
| UINT8 Opcode; | |
| UINT8 DescId; | |
| UINT8 Index; | |
| UINT8 Selector; | |
| UINT16 Rsvd1; | |
| UINT16 Length; | |
| UINT32 Value; | |
| UINT32 Rsvd2; | |
| } UTP_UPIU_TSF; | |
| // | |
| // UFS 2.0 Spec Section 10.5.10 - UTP Query Request UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x16*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Rsvd1; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd2; | |
| UINT8 QueryFunc; /* Query Function */ | |
| UINT8 Rsvd3[2]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd4; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian */ | |
| // | |
| // DW3 - 6 | |
| // | |
| UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */ | |
| // | |
| // DW7 | |
| // | |
| UINT8 Rsvd5[4]; | |
| // | |
| // Data Segment - Data to be transferred | |
| // | |
| //UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */ | |
| } UTP_QUERY_REQ_UPIU; | |
| #define QUERY_FUNC_STD_READ_REQ 0x01 | |
| #define QUERY_FUNC_STD_WRITE_REQ 0x81 | |
| typedef enum { | |
| UtpQueryFuncOpcodeNop = 0x00, | |
| UtpQueryFuncOpcodeRdDesc = 0x01, | |
| UtpQueryFuncOpcodeWrDesc = 0x02, | |
| UtpQueryFuncOpcodeRdAttr = 0x03, | |
| UtpQueryFuncOpcodeWrAttr = 0x04, | |
| UtpQueryFuncOpcodeRdFlag = 0x05, | |
| UtpQueryFuncOpcodeSetFlag = 0x06, | |
| UtpQueryFuncOpcodeClrFlag = 0x07, | |
| UtpQueryFuncOpcodeTogFlag = 0x08 | |
| } UTP_QUERY_FUNC_OPCODE; | |
| // | |
| // UFS 2.0 Spec Section 10.5.11 - UTP Query Response UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x36*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Rsvd1; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd2; | |
| UINT8 QueryFunc; /* Query Function */ | |
| UINT8 QueryResp; /* Query Response */ | |
| UINT8 Rsvd3; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 DevInfo; /* Device Information */ | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian */ | |
| // | |
| // DW3 - 6 | |
| // | |
| UTP_UPIU_TSF Tsf; /* Transaction Specific Fields */ | |
| // | |
| // DW7 | |
| // | |
| UINT8 Rsvd4[4]; | |
| // | |
| // Data Segment - Data to be transferred | |
| // | |
| //UINT8 Data[]; /* Data to be transferred, maximum is 65535 bytes */ | |
| } UTP_QUERY_RESP_UPIU; | |
| typedef enum { | |
| UfsUtpQueryResponseSuccess = 0x00, | |
| UfsUtpQueryResponseParamNotReadable = 0xF6, | |
| UfsUtpQueryResponseParamNotWriteable = 0xF7, | |
| UfsUtpQueryResponseParamAlreadyWritten = 0xF8, | |
| UfsUtpQueryResponseInvalidLen = 0xF9, | |
| UfsUtpQueryResponseInvalidVal = 0xFA, | |
| UfsUtpQueryResponseInvalidSelector = 0xFB, | |
| UfsUtpQueryResponseInvalidIndex = 0xFC, | |
| UfsUtpQueryResponseInvalidIdn = 0xFD, | |
| UfsUtpQueryResponseInvalidOpc = 0xFE, | |
| UfsUtpQueryResponseGeneralFailure = 0xFF | |
| } UTP_QUERY_RESP_CODE; | |
| // | |
| // UFS 2.0 Spec Section 10.5.12 - UTP Reject UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x3F*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Lun; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd1[2]; | |
| UINT8 Response; /* Response - 0x01 */ | |
| UINT8 Rsvd2; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 DevInfo; /* Device Information - 0x00 */ | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 | |
| // | |
| UINT8 HdrSts; /* Basic Header Status */ | |
| UINT8 Rsvd3; | |
| UINT8 E2ESts; /* End-to-End Status */ | |
| UINT8 Rsvd4; | |
| // | |
| // DW4 - DW7 | |
| // | |
| UINT8 Rsvd5[16]; | |
| } UTP_REJ_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.13 - UTP NOP OUT UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x00*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Rsvd1; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd2[4]; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 Rsvd3; | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 - DW7 | |
| // | |
| UINT8 Rsvd4[20]; | |
| } UTP_NOP_OUT_UPIU; | |
| // | |
| // UFS 2.0 Spec Section 10.5.14 - UTP NOP IN UPIU | |
| // | |
| typedef struct { | |
| // | |
| // DW0 | |
| // | |
| UINT8 TransCode:6; /* Transaction Type - 0x20*/ | |
| UINT8 Dd:1; | |
| UINT8 Hd:1; | |
| UINT8 Flags; | |
| UINT8 Rsvd1; | |
| UINT8 TaskTag; /* Task Tag */ | |
| // | |
| // DW1 | |
| // | |
| UINT8 Rsvd2[2]; | |
| UINT8 Resp; /* Response - 0x00 */ | |
| UINT8 Rsvd3; | |
| // | |
| // DW2 | |
| // | |
| UINT8 EhsLen; /* Total EHS Length - 0x00 */ | |
| UINT8 DevInfo; /* Device Information - 0x00 */ | |
| UINT16 DataSegLen; /* Data Segment Length - Big Endian - 0x0000 */ | |
| // | |
| // DW3 - DW7 | |
| // | |
| UINT8 Rsvd4[20]; | |
| } UTP_NOP_IN_UPIU; | |
| // | |
| // UFS Descriptors | |
| // | |
| typedef enum { | |
| UfsDeviceDesc = 0x00, | |
| UfsConfigDesc = 0x01, | |
| UfsUnitDesc = 0x02, | |
| UfsInterConnDesc = 0x04, | |
| UfsStringDesc = 0x05, | |
| UfsGeometryDesc = 0x07, | |
| UfsPowerDesc = 0x08 | |
| } UFS_DESC_IDN; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.2 - Device Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT8 Device; | |
| UINT8 DevClass; | |
| UINT8 DevSubClass; | |
| UINT8 Protocol; | |
| UINT8 NumLun; | |
| UINT8 NumWLun; | |
| UINT8 BootEn; | |
| UINT8 DescAccessEn; | |
| UINT8 InitPowerMode; | |
| UINT8 HighPriorityLun; | |
| UINT8 SecureRemovalType; | |
| UINT8 SecurityLun; | |
| UINT8 BgOpsTermLat; | |
| UINT8 InitActiveIccLevel; | |
| UINT16 SpecVersion; | |
| UINT16 ManufactureDate; | |
| UINT8 ManufacturerName; | |
| UINT8 ProductName; | |
| UINT8 SerialName; | |
| UINT8 OemId; | |
| UINT16 ManufacturerId; | |
| UINT8 Ud0BaseOffset; | |
| UINT8 Ud0ConfParamLen; | |
| UINT8 DevRttCap; | |
| UINT16 PeriodicRtcUpdate; | |
| UINT8 Rsvd1[17]; | |
| UINT8 Rsvd2[16]; | |
| } UFS_DEV_DESC; | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT8 Rsvd1; | |
| UINT8 BootEn; | |
| UINT8 DescAccessEn; | |
| UINT8 InitPowerMode; | |
| UINT8 HighPriorityLun; | |
| UINT8 SecureRemovalType; | |
| UINT8 InitActiveIccLevel; | |
| UINT16 PeriodicRtcUpdate; | |
| UINT8 Rsvd2[5]; | |
| } UFS_CONFIG_DESC_GEN_HEADER; | |
| typedef struct { | |
| UINT8 LunEn; | |
| UINT8 BootLunId; | |
| UINT8 LunWriteProt; | |
| UINT8 MemType; | |
| UINT32 NumAllocUnits; | |
| UINT8 DataReliability; | |
| UINT8 LogicBlkSize; | |
| UINT8 ProvisionType; | |
| UINT16 CtxCap; | |
| UINT8 Rsvd1[3]; | |
| } UFS_UNIT_DESC_CONFIG_PARAMS; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.3 - Configuration Descriptor | |
| // | |
| typedef struct { | |
| UFS_CONFIG_DESC_GEN_HEADER Header; | |
| UFS_UNIT_DESC_CONFIG_PARAMS UnitDescConfParams[8]; | |
| } UFS_CONFIG_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.4 - Geometry Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT8 MediaTech; | |
| UINT8 Rsvd1; | |
| UINT64 TotalRawDevCapacity; | |
| UINT8 Rsvd2; | |
| UINT32 SegSize; | |
| UINT8 AllocUnitSize; | |
| UINT8 MinAddrBlkSize; | |
| UINT8 OptReadBlkSize; | |
| UINT8 OptWriteBlkSize; | |
| UINT8 MaxInBufSize; | |
| UINT8 MaxOutBufSize; | |
| UINT8 RpmbRwSize; | |
| UINT8 Rsvd3; | |
| UINT8 DataOrder; | |
| UINT8 MaxCtxIdNum; | |
| UINT8 SysDataTagUnitSize; | |
| UINT8 SysDataResUnitSize; | |
| UINT8 SupSecRemovalTypes; | |
| UINT16 SupMemTypes; | |
| UINT32 SysCodeMaxNumAllocUnits; | |
| UINT16 SupCodeCapAdjFac; | |
| UINT32 NonPersMaxNumAllocUnits; | |
| UINT16 NonPersCapAdjFac; | |
| UINT32 Enhance1MaxNumAllocUnits; | |
| UINT16 Enhance1CapAdjFac; | |
| UINT32 Enhance2MaxNumAllocUnits; | |
| UINT16 Enhance2CapAdjFac; | |
| UINT32 Enhance3MaxNumAllocUnits; | |
| UINT16 Enhance3CapAdjFac; | |
| UINT32 Enhance4MaxNumAllocUnits; | |
| UINT16 Enhance4CapAdjFac; | |
| } UFS_GEOMETRY_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.5 - Unit Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT8 UnitIdx; | |
| UINT8 LunEn; | |
| UINT8 BootLunId; | |
| UINT8 LunWriteProt; | |
| UINT8 LunQueueDep; | |
| UINT8 Rsvd1; | |
| UINT8 MemType; | |
| UINT8 DataReliability; | |
| UINT8 LogicBlkSize; | |
| UINT64 LogicBlkCount; | |
| UINT32 EraseBlkSize; | |
| UINT8 ProvisionType; | |
| UINT64 PhyMemResCount; | |
| UINT16 CtxCap; | |
| UINT8 LargeUnitGranularity; | |
| } UFS_UNIT_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.6 - RPMB Unit Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT8 UnitIdx; | |
| UINT8 LunEn; | |
| UINT8 BootLunId; | |
| UINT8 LunWriteProt; | |
| UINT8 LunQueueDep; | |
| UINT8 Rsvd1; | |
| UINT8 MemType; | |
| UINT8 Rsvd2; | |
| UINT8 LogicBlkSize; | |
| UINT64 LogicBlkCount; | |
| UINT32 EraseBlkSize; | |
| UINT8 ProvisionType; | |
| UINT64 PhyMemResCount; | |
| UINT8 Rsvd3[3]; | |
| } UFS_RPMB_UNIT_DESC; | |
| typedef struct { | |
| UINT16 Value:10; | |
| UINT16 Rsvd1:4; | |
| UINT16 Unit:2; | |
| } UFS_POWER_PARAM_ELEMENT; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.7 - Power Parameter Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UFS_POWER_PARAM_ELEMENT ActiveIccLevelVcc[16]; | |
| UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ[16]; | |
| UFS_POWER_PARAM_ELEMENT ActiveIccLevelVccQ2[16]; | |
| } UFS_POWER_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.8 - InterConnect Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| UINT16 UniProVer; | |
| UINT16 MphyVer; | |
| } UFS_INTER_CONNECT_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.1.6.9 - 14.1.6.12 - String Descriptor | |
| // | |
| typedef struct { | |
| UINT8 Length; | |
| UINT8 DescType; | |
| CHAR16 Unicode[126]; | |
| } UFS_STRING_DESC; | |
| // | |
| // UFS 2.0 Spec Section 14.2 - Flags | |
| // | |
| typedef enum { | |
| UfsFlagDevInit = 0x01, | |
| UfsFlagPermWpEn = 0x02, | |
| UfsFlagPowerOnWpEn = 0x03, | |
| UfsFlagBgOpsEn = 0x04, | |
| UfsFlagPurgeEn = 0x06, | |
| UfsFlagPhyResRemoval = 0x08, | |
| UfsFlagBusyRtc = 0x09, | |
| UfsFlagPermDisFwUpdate = 0x0B | |
| } UFS_FLAGS_IDN; | |
| // | |
| // UFS 2.0 Spec Section 14.2 - Attributes | |
| // | |
| typedef enum { | |
| UfsAttrBootLunEn = 0x00, | |
| UfsAttrCurPowerMode = 0x02, | |
| UfsAttrActiveIccLevel = 0x03, | |
| UfsAttrOutOfOrderDataEn = 0x04, | |
| UfsAttrBgOpStatus = 0x05, | |
| UfsAttrPurgeStatus = 0x06, | |
| UfsAttrMaxDataInSize = 0x07, | |
| UfsAttrMaxDataOutSize = 0x08, | |
| UfsAttrDynCapNeeded = 0x09, | |
| UfsAttrRefClkFreq = 0x0a, | |
| UfsAttrConfigDescLock = 0x0b, | |
| UfsAttrMaxNumOfRtt = 0x0c, | |
| UfsAttrExceptionEvtCtrl = 0x0d, | |
| UfsAttrExceptionEvtSts = 0x0e, | |
| UfsAttrSecondsPassed = 0x0f, | |
| UfsAttrContextConf = 0x10, | |
| UfsAttrCorrPrgBlkNum = 0x11 | |
| } UFS_ATTR_IDN; | |
| typedef enum { | |
| UfsNoData = 0, | |
| UfsDataOut = 1, | |
| UfsDataIn = 2, | |
| UfsDdReserved | |
| } UFS_DATA_DIRECTION; | |
| #pragma pack() | |
| #endif | |