/** @file\r
\r
- Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.<BR>\r
Copyright (c) Microsoft Corporation.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
//\r
// Template for Ufs Pass Thru private data.\r
//\r
-UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {\r
- UFS_PASS_THRU_SIG, // Signature\r
- NULL, // Handle\r
+UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {\r
+ UFS_PASS_THRU_SIG, // Signature\r
+ NULL, // Handle\r
{ // ExtScsiPassThruMode\r
0xFFFFFFFF,\r
EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL | EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_NONBLOCKIO,\r
UfsRwUfsFlag,\r
UfsRwUfsAttribute\r
},\r
- 0, // UfsHostController\r
- 0, // UfsHcBase\r
- {0, 0}, // UfsHcInfo\r
- {NULL, NULL}, // UfsHcDriverInterface\r
- 0, // TaskTag\r
- 0, // UtpTrlBase\r
- 0, // Nutrs\r
- 0, // TrlMapping\r
- 0, // UtpTmrlBase\r
- 0, // Nutmrs\r
- 0, // TmrlMapping\r
+ 0, // UfsHostController\r
+ 0, // UfsHcBase\r
+ { 0, 0 }, // UfsHcInfo\r
+ { NULL, NULL }, // UfsHcDriverInterface\r
+ 0, // TaskTag\r
+ 0, // UtpTrlBase\r
+ 0, // Nutrs\r
+ 0, // TrlMapping\r
+ 0, // UtpTmrlBase\r
+ 0, // Nutmrs\r
+ 0, // TmrlMapping\r
{ // Luns\r
{\r
UFS_LUN_0, // Ufs Common Lun 0\r
UFS_WLUN_BOOT, // Ufs Boot Well Known Lun\r
UFS_WLUN_RPMB // RPMB Well Known Lun\r
},\r
- 0x0000, // By default don't expose any Luns.\r
+ 0x0000, // By default don't expose any Luns.\r
0x0\r
},\r
- NULL, // TimerEvent\r
+ NULL, // TimerEvent\r
{ // Queue\r
NULL,\r
NULL\r
}\r
};\r
\r
-EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL gUfsPassThruDriverBinding = {\r
UfsPassThruDriverBindingSupported,\r
UfsPassThruDriverBindingStart,\r
UfsPassThruDriverBindingStop,\r
NULL\r
};\r
\r
-UFS_DEVICE_PATH mUfsDevicePathTemplate = {\r
+UFS_DEVICE_PATH mUfsDevicePathTemplate = {\r
{\r
MESSAGING_DEVICE_PATH,\r
MSG_UFS_DP,\r
{\r
- (UINT8) (sizeof (UFS_DEVICE_PATH)),\r
- (UINT8) ((sizeof (UFS_DEVICE_PATH)) >> 8)\r
+ (UINT8)(sizeof (UFS_DEVICE_PATH)),\r
+ (UINT8)((sizeof (UFS_DEVICE_PATH)) >> 8)\r
}\r
},\r
0,\r
0\r
};\r
\r
-UINT8 mUfsTargetId[TARGET_MAX_BYTES];\r
+UINT8 mUfsTargetId[TARGET_MAX_BYTES];\r
\r
GLOBAL_REMOVE_IF_UNREFERENCED EDKII_UFS_HC_PLATFORM_PROTOCOL *mUfsHcPlatform;\r
\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruPassThru (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
- IN EFI_EVENT Event OPTIONAL\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,\r
+ IN EFI_EVENT Event OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- UINT8 UfsLun;\r
- UINT16 Index;\r
+ EFI_STATUS Status;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ UINT8 UfsLun;\r
+ UINT16 Index;\r
\r
Private = UFS_PASS_THRU_PRIVATE_DATA_FROM_THIS (This);\r
\r
// Don't support variable length CDB\r
//\r
if ((Packet->CdbLength != 6) && (Packet->CdbLength != 10) &&\r
- (Packet->CdbLength != 12) && (Packet->CdbLength != 16)) {\r
+ (Packet->CdbLength != 12) && (Packet->CdbLength != 16))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if ((This->Mode->IoAlign > 1) && !IS_ALIGNED(Packet->InDataBuffer, This->Mode->IoAlign)) {\r
+ if ((This->Mode->IoAlign > 1) && !IS_ALIGNED (Packet->InDataBuffer, This->Mode->IoAlign)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if ((This->Mode->IoAlign > 1) && !IS_ALIGNED(Packet->OutDataBuffer, This->Mode->IoAlign)) {\r
+ if ((This->Mode->IoAlign > 1) && !IS_ALIGNED (Packet->OutDataBuffer, This->Mode->IoAlign)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if ((This->Mode->IoAlign > 1) && !IS_ALIGNED(Packet->SenseData, This->Mode->IoAlign)) {\r
+ if ((This->Mode->IoAlign > 1) && !IS_ALIGNED (Packet->SenseData, This->Mode->IoAlign)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// For UFS 2.0 compatible device, 0 is always used to represent the location of the UFS device.\r
//\r
SetMem (mUfsTargetId, TARGET_MAX_BYTES, 0x00);\r
- if ((Target == NULL) || (CompareMem(Target, mUfsTargetId, TARGET_MAX_BYTES) != 0)) {\r
+ if ((Target == NULL) || (CompareMem (Target, mUfsTargetId, TARGET_MAX_BYTES) != 0)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// The second 8 bits of the 64-bit address saves the corresponding 8-bit UFS LUN.\r
//\r
if ((UINT8)Lun == UFS_WLUN_PREFIX) {\r
- UfsLun = BIT7 | (((UINT8*)&Lun)[1] & 0xFF);\r
+ UfsLun = BIT7 | (((UINT8 *)&Lun)[1] & 0xFF);\r
} else if ((UINT8)Lun == 0) {\r
- UfsLun = ((UINT8*)&Lun)[1] & 0xFF;\r
+ UfsLun = ((UINT8 *)&Lun)[1] & 0xFF;\r
} else {\r
return EFI_INVALID_PARAMETER;\r
}\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruGetNextTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **Target,\r
- IN OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **Target,\r
+ IN OUT UINT64 *Lun\r
)\r
{\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- UINT8 UfsLun;\r
- UINT16 Index;\r
- UINT16 Next;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ UINT8 UfsLun;\r
+ UINT16 Index;\r
+ UINT16 Next;\r
\r
Private = UFS_PASS_THRU_PRIVATE_DATA_FROM_THIS (This);\r
\r
- if (Target == NULL || Lun == NULL) {\r
+ if ((Target == NULL) || (Lun == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
break;\r
}\r
}\r
+\r
if (Index != UFS_MAX_LUNS) {\r
*Lun = 0;\r
if ((UfsLun & BIT7) == BIT7) {\r
- ((UINT8*)Lun)[0] = UFS_WLUN_PREFIX;\r
- ((UINT8*)Lun)[1] = UfsLun & ~BIT7;\r
+ ((UINT8 *)Lun)[0] = UFS_WLUN_PREFIX;\r
+ ((UINT8 *)Lun)[1] = UfsLun & ~BIT7;\r
} else {\r
- ((UINT8*)Lun)[1] = UfsLun;\r
+ ((UINT8 *)Lun)[1] = UfsLun;\r
}\r
+\r
return EFI_SUCCESS;\r
} else {\r
return EFI_NOT_FOUND;\r
\r
SetMem (mUfsTargetId, TARGET_MAX_BYTES, 0x00);\r
if (CompareMem (*Target, mUfsTargetId, TARGET_MAX_BYTES) == 0) {\r
- if (((UINT8*)Lun)[0] == UFS_WLUN_PREFIX) {\r
- UfsLun = BIT7 | (((UINT8*)Lun)[1] & 0xFF);\r
- } else if (((UINT8*)Lun)[0] == 0) {\r
- UfsLun = ((UINT8*)Lun)[1] & 0xFF;\r
+ if (((UINT8 *)Lun)[0] == UFS_WLUN_PREFIX) {\r
+ UfsLun = BIT7 | (((UINT8 *)Lun)[1] & 0xFF);\r
+ } else if (((UINT8 *)Lun)[0] == 0) {\r
+ UfsLun = ((UINT8 *)Lun)[1] & 0xFF;\r
} else {\r
return EFI_NOT_FOUND;\r
}\r
if (Index != UFS_MAX_LUNS) {\r
*Lun = 0;\r
if ((UfsLun & BIT7) == BIT7) {\r
- ((UINT8*)Lun)[0] = UFS_WLUN_PREFIX;\r
- ((UINT8*)Lun)[1] = UfsLun & ~BIT7;\r
+ ((UINT8 *)Lun)[0] = UFS_WLUN_PREFIX;\r
+ ((UINT8 *)Lun)[1] = UfsLun & ~BIT7;\r
} else {\r
- ((UINT8*)Lun)[1] = UfsLun;\r
+ ((UINT8 *)Lun)[1] = UfsLun;\r
}\r
+\r
return EFI_SUCCESS;\r
} else {\r
return EFI_NOT_FOUND;\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruBuildDevicePath (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun,\r
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun,\r
+ IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
)\r
{\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- EFI_DEV_PATH *DevicePathNode;\r
- UINT8 UfsLun;\r
- UINT16 Index;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ EFI_DEV_PATH *DevicePathNode;\r
+ UINT8 UfsLun;\r
+ UINT16 Index;\r
\r
Private = UFS_PASS_THRU_PRIVATE_DATA_FROM_THIS (This);\r
\r
}\r
\r
if ((UINT8)Lun == UFS_WLUN_PREFIX) {\r
- UfsLun = BIT7 | (((UINT8*)&Lun)[1] & 0xFF);\r
+ UfsLun = BIT7 | (((UINT8 *)&Lun)[1] & 0xFF);\r
} else if ((UINT8)Lun == 0) {\r
- UfsLun = ((UINT8*)&Lun)[1] & 0xFF;\r
+ UfsLun = ((UINT8 *)&Lun)[1] & 0xFF;\r
} else {\r
return EFI_NOT_FOUND;\r
}\r
DevicePathNode->Ufs.Pun = 0;\r
DevicePathNode->Ufs.Lun = UfsLun;\r
\r
- *DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DevicePathNode;\r
+ *DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)DevicePathNode;\r
\r
return EFI_SUCCESS;\r
}\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruGetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
- OUT UINT8 **Target,\r
- OUT UINT64 *Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,\r
+ OUT UINT8 **Target,\r
+ OUT UINT64 *Lun\r
)\r
{\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- EFI_DEV_PATH *DevicePathNode;\r
- UINT8 Pun;\r
- UINT8 UfsLun;\r
- UINT16 Index;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ EFI_DEV_PATH *DevicePathNode;\r
+ UINT8 Pun;\r
+ UINT8 UfsLun;\r
+ UINT16 Index;\r
\r
Private = UFS_PASS_THRU_PRIVATE_DATA_FROM_THIS (This);\r
\r
//\r
// Validate parameters passed in.\r
//\r
- if (DevicePath == NULL || Target == NULL || Lun == NULL) {\r
+ if ((DevicePath == NULL) || (Target == NULL) || (Lun == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Check whether the DevicePath belongs to UFS_DEVICE_PATH\r
//\r
if ((DevicePath->Type != MESSAGING_DEVICE_PATH) || (DevicePath->SubType != MSG_UFS_DP) ||\r
- (DevicePathNodeLength(DevicePath) != sizeof(UFS_DEVICE_PATH))) {\r
+ (DevicePathNodeLength (DevicePath) != sizeof (UFS_DEVICE_PATH)))\r
+ {\r
return EFI_UNSUPPORTED;\r
}\r
\r
- DevicePathNode = (EFI_DEV_PATH *) DevicePath;\r
+ DevicePathNode = (EFI_DEV_PATH *)DevicePath;\r
\r
- Pun = (UINT8) DevicePathNode->Ufs.Pun;\r
- UfsLun = (UINT8) DevicePathNode->Ufs.Lun;\r
+ Pun = (UINT8)DevicePathNode->Ufs.Pun;\r
+ UfsLun = (UINT8)DevicePathNode->Ufs.Lun;\r
\r
if (Pun != 0) {\r
return EFI_NOT_FOUND;\r
SetMem (*Target, TARGET_MAX_BYTES, 0x00);\r
*Lun = 0;\r
if ((UfsLun & BIT7) == BIT7) {\r
- ((UINT8*)Lun)[0] = UFS_WLUN_PREFIX;\r
- ((UINT8*)Lun)[1] = UfsLun & ~BIT7;\r
+ ((UINT8 *)Lun)[0] = UFS_WLUN_PREFIX;\r
+ ((UINT8 *)Lun)[1] = UfsLun & ~BIT7;\r
} else {\r
- ((UINT8*)Lun)[1] = UfsLun;\r
+ ((UINT8 *)Lun)[1] = UfsLun;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruResetChannel (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This\r
)\r
{\r
//\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruResetTargetLun (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN UINT8 *Target,\r
- IN UINT64 Lun\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN UINT8 *Target,\r
+ IN UINT64 Lun\r
)\r
{\r
//\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruGetNextTarget (\r
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
- IN OUT UINT8 **Target\r
+ IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,\r
+ IN OUT UINT8 **Target\r
)\r
{\r
- if (Target == NULL || *Target == NULL) {\r
+ if ((Target == NULL) || (*Target == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
SetMem (mUfsTargetId, TARGET_MAX_BYTES, 0xFF);\r
- if (CompareMem(*Target, mUfsTargetId, TARGET_MAX_BYTES) == 0) {\r
+ if (CompareMem (*Target, mUfsTargetId, TARGET_MAX_BYTES) == 0) {\r
SetMem (*Target, TARGET_MAX_BYTES, 0x00);\r
return EFI_SUCCESS;\r
}\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruDriverBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
- EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;\r
+ EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
+ EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHostController;\r
\r
//\r
// Ufs Pass Thru driver is a device driver, and should ingore the\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiDevicePathProtocolGuid,\r
- (VOID *) &ParentDevicePath,\r
+ (VOID *)&ParentDevicePath,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
//\r
return Status;\r
}\r
+\r
//\r
// Close the protocol because we don't use it here\r
//\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEfiDevicePathProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEfiDevicePathProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEdkiiUfsHostControllerProtocolGuid,\r
- (VOID **) &UfsHostController,\r
+ (VOID **)&UfsHostController,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
// Close the I/O Abstraction(s) used to perform the supported test\r
//\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEdkiiUfsHostControllerProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEdkiiUfsHostControllerProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
\r
return EFI_SUCCESS;\r
}\r
)\r
{\r
EFI_STATUS Status;\r
- UINT8 DeviceInitStatus;\r
- UINT32 Timeout;\r
+ UINT8 DeviceInitStatus;\r
+ UINT32 Timeout;\r
\r
DeviceInitStatus = 0xFF;\r
\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
MicroSecondDelay (1);\r
Timeout--;\r
} while (DeviceInitStatus != 0 && Timeout != 0);\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruDriverBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- UINTN UfsHcBase;\r
- UINT32 Index;\r
- UFS_UNIT_DESC UnitDescriptor;\r
- UFS_DEV_DESC DeviceDescriptor;\r
- UINT32 UnitDescriptorSize;\r
- UINT32 DeviceDescriptorSize;\r
+ EFI_STATUS Status;\r
+ EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ UINTN UfsHcBase;\r
+ UINT32 Index;\r
+ UFS_UNIT_DESC UnitDescriptor;\r
+ UFS_DEV_DESC DeviceDescriptor;\r
+ UINT32 UnitDescriptorSize;\r
+ UINT32 DeviceDescriptorSize;\r
+ EDKII_UFS_CARD_REF_CLK_FREQ_ATTRIBUTE Attributes;\r
+ UINT8 RefClkAttr;\r
\r
Status = EFI_SUCCESS;\r
UfsHc = NULL;\r
\r
DEBUG ((DEBUG_INFO, "==UfsPassThru Start== Controller = %x\n", Controller));\r
\r
- Status = gBS->OpenProtocol (\r
- Controller,\r
- &gEdkiiUfsHostControllerProtocolGuid,\r
- (VOID **) &UfsHc,\r
- This->DriverBindingHandle,\r
- Controller,\r
- EFI_OPEN_PROTOCOL_BY_DRIVER\r
- );\r
+ Status = gBS->OpenProtocol (\r
+ Controller,\r
+ &gEdkiiUfsHostControllerProtocolGuid,\r
+ (VOID **)&UfsHc,\r
+ This->DriverBindingHandle,\r
+ Controller,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Open Ufs Host Controller Protocol Error, Status = %r\n", Status));\r
goto Error;\r
}\r
\r
- Private->ExtScsiPassThru.Mode = &Private->ExtScsiPassThruMode;\r
- Private->UfsHostController = UfsHc;\r
- Private->UfsHcBase = UfsHcBase;\r
- Private->Handle = Controller;\r
- Private->UfsHcDriverInterface.UfsHcProtocol = UfsHc;\r
+ Private->ExtScsiPassThru.Mode = &Private->ExtScsiPassThruMode;\r
+ Private->UfsHostController = UfsHc;\r
+ Private->UfsHcBase = UfsHcBase;\r
+ Private->Handle = Controller;\r
+ Private->UfsHcDriverInterface.UfsHcProtocol = UfsHc;\r
Private->UfsHcDriverInterface.UfsExecUicCommand = UfsHcDriverInterfaceExecUicCommand;\r
InitializeListHead (&Private->Queue);\r
\r
// This has to be done before initializing UfsHcInfo or calling the UfsControllerInit\r
//\r
if (mUfsHcPlatform == NULL) {\r
- Status = gBS->LocateProtocol (&gEdkiiUfsHcPlatformProtocolGuid, NULL, (VOID**)&mUfsHcPlatform);\r
+ Status = gBS->LocateProtocol (&gEdkiiUfsHcPlatformProtocolGuid, NULL, (VOID **)&mUfsHcPlatform);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_INFO, "No UfsHcPlatformProtocol present\n"));\r
}\r
goto Error;\r
}\r
\r
+ if ((mUfsHcPlatform != NULL) &&\r
+ ((mUfsHcPlatform->RefClkFreq == EdkiiUfsCardRefClkFreq19p2Mhz) ||\r
+ (mUfsHcPlatform->RefClkFreq == EdkiiUfsCardRefClkFreq26Mhz) ||\r
+ (mUfsHcPlatform->RefClkFreq == EdkiiUfsCardRefClkFreq38p4Mhz)))\r
+ {\r
+ RefClkAttr = UfsAttrRefClkFreq;\r
+ Attributes = EdkiiUfsCardRefClkFreqObsolete;\r
+ Status = UfsRwAttributes (Private, TRUE, RefClkAttr, 0, 0, (UINT32 *)&Attributes);\r
+ if (!EFI_ERROR (Status)) {\r
+ if (Attributes != mUfsHcPlatform->RefClkFreq) {\r
+ Attributes = mUfsHcPlatform->RefClkFreq;\r
+ DEBUG (\r
+ (DEBUG_INFO,\r
+ "Setting bRefClkFreq attribute(%x) to %x\n 0 -> 19.2 Mhz\n 1 -> 26 Mhz\n 2 -> 38.4 Mhz\n 3 -> Obsolete\n",\r
+ RefClkAttr,\r
+ Attributes)\r
+ );\r
+ Status = UfsRwAttributes (Private, FALSE, RefClkAttr, 0, 0, (UINT32 *)&Attributes);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG (\r
+ (DEBUG_ERROR,\r
+ "Failed to Change Reference Clock Attribute to %d, Status = %r \n",\r
+ mUfsHcPlatform->RefClkFreq,\r
+ Status)\r
+ );\r
+ }\r
+ }\r
+ } else {\r
+ DEBUG (\r
+ (DEBUG_ERROR,\r
+ "Failed to Read Reference Clock Attribute, Status = %r \n",\r
+ Status)\r
+ );\r
+ }\r
+ }\r
+\r
+ if ((mUfsHcPlatform != NULL) && (mUfsHcPlatform->Callback != NULL)) {\r
+ Status = mUfsHcPlatform->Callback (Private->Handle, EdkiiUfsHcPostLinkStartup, &Private->UfsHcDriverInterface);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG (\r
+ (DEBUG_ERROR,\r
+ "Failure from platform driver during EdkiiUfsHcPostLinkStartup, Status = %r\n",\r
+ Status)\r
+ );\r
+ return Status;\r
+ }\r
+ }\r
+\r
//\r
// UFS 2.0 spec Section 13.1.3.3:\r
// At the end of the UFS Interconnect Layer initialization on both host and device side,\r
//\r
UnitDescriptorSize = sizeof (UFS_UNIT_DESC);\r
for (Index = 0; Index < 8; Index++) {\r
- Status = UfsRwDeviceDesc (Private, TRUE, UfsUnitDesc, (UINT8) Index, 0, &UnitDescriptor, &UnitDescriptorSize);\r
+ Status = UfsRwDeviceDesc (Private, TRUE, UfsUnitDesc, (UINT8)Index, 0, &UnitDescriptor, &UnitDescriptorSize);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Failed to read unit descriptor, index = %X, status = %r\n", Index, Status));\r
continue;\r
}\r
+\r
if (UnitDescriptor.LunEn == 0x1) {\r
DEBUG ((DEBUG_INFO, "UFS LUN %X is enabled\n", Index));\r
Private->Luns.BitMask |= (BIT0 << Index);\r
// Check if RPMB WLUN is supported and set corresponding bit mask.\r
//\r
DeviceDescriptorSize = sizeof (UFS_DEV_DESC);\r
- Status = UfsRwDeviceDesc (Private, TRUE, UfsDeviceDesc, 0, 0, &DeviceDescriptor, &DeviceDescriptorSize);\r
+ Status = UfsRwDeviceDesc (Private, TRUE, UfsDeviceDesc, 0, 0, &DeviceDescriptor, &DeviceDescriptorSize);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Failed to read device descriptor, status = %r\n", Status));\r
} else {\r
if (Private->TmrlMapping != NULL) {\r
UfsHc->Unmap (UfsHc, Private->TmrlMapping);\r
}\r
+\r
if (Private->UtpTmrlBase != NULL) {\r
UfsHc->FreeBuffer (UfsHc, EFI_SIZE_TO_PAGES (Private->Nutmrs * sizeof (UTP_TMRD)), Private->UtpTmrlBase);\r
}\r
if (Private->TrlMapping != NULL) {\r
UfsHc->Unmap (UfsHc, Private->TrlMapping);\r
}\r
+\r
if (Private->UtpTrlBase != NULL) {\r
UfsHc->FreeBuffer (UfsHc, EFI_SIZE_TO_PAGES (Private->Nutrs * sizeof (UTP_TMRD)), Private->UtpTrlBase);\r
}\r
EFI_STATUS\r
EFIAPI\r
UfsPassThruDriverBindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE Controller,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
- UFS_PASS_THRU_PRIVATE_DATA *Private;\r
- EFI_EXT_SCSI_PASS_THRU_PROTOCOL *ExtScsiPassThru;\r
- EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;\r
- UFS_PASS_THRU_TRANS_REQ *TransReq;\r
- LIST_ENTRY *Entry;\r
- LIST_ENTRY *NextEntry;\r
+ EFI_STATUS Status;\r
+ UFS_PASS_THRU_PRIVATE_DATA *Private;\r
+ EFI_EXT_SCSI_PASS_THRU_PROTOCOL *ExtScsiPassThru;\r
+ EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;\r
+ UFS_PASS_THRU_TRANS_REQ *TransReq;\r
+ LIST_ENTRY *Entry;\r
+ LIST_ENTRY *NextEntry;\r
\r
DEBUG ((DEBUG_INFO, "==UfsPassThru Stop== Controller Controller = %x\n", Controller));\r
\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiExtScsiPassThruProtocolGuid,\r
- (VOID **) &ExtScsiPassThru,\r
+ (VOID **)&ExtScsiPassThru,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
//\r
// Cleanup the resources of I/O requests in the async I/O queue\r
//\r
- if (!IsListEmpty(&Private->Queue)) {\r
+ if (!IsListEmpty (&Private->Queue)) {\r
BASE_LIST_FOR_EACH_SAFE (Entry, NextEntry, &Private->Queue) {\r
- TransReq = UFS_PASS_THRU_TRANS_REQ_FROM_THIS (Entry);\r
+ TransReq = UFS_PASS_THRU_TRANS_REQ_FROM_THIS (Entry);\r
\r
//\r
// TODO: Should find/add a proper host adapter return status for this\r
if (Private->TmrlMapping != NULL) {\r
UfsHc->Unmap (UfsHc, Private->TmrlMapping);\r
}\r
+\r
if (Private->UtpTmrlBase != NULL) {\r
UfsHc->FreeBuffer (UfsHc, EFI_SIZE_TO_PAGES (Private->Nutmrs * sizeof (UTP_TMRD)), Private->UtpTmrlBase);\r
}\r
if (Private->TrlMapping != NULL) {\r
UfsHc->Unmap (UfsHc, Private->TrlMapping);\r
}\r
+\r
if (Private->UtpTrlBase != NULL) {\r
UfsHc->FreeBuffer (UfsHc, EFI_SIZE_TO_PAGES (Private->Nutrs * sizeof (UTP_TMRD)), Private->UtpTrlBase);\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
The user Entry Point for module UfsPassThru. The user code starts with this function.\r
\r
EFI_STATUS\r
EFIAPI\r
InitializeUfsPassThru (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// Install driver model protocol(s).\r