UfsHcDxe driver is used to provide platform-dependent info, mainly UFS host controller\r
MMIO base, to upper layer UFS drivers.\r
\r
- Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php.\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
//\r
// NVM Express Driver Binding Protocol Instance\r
//\r
-EFI_DRIVER_BINDING_PROTOCOL gUfsHcDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL gUfsHcDriverBinding = {\r
UfsHcDriverBindingSupported,\r
UfsHcDriverBindingStart,\r
UfsHcDriverBindingStop,\r
//\r
// Template for Ufs host controller private data.\r
//\r
-UFS_HOST_CONTROLLER_PRIVATE_DATA gUfsHcTemplate = {\r
+UFS_HOST_CONTROLLER_PRIVATE_DATA gUfsHcTemplate = {\r
UFS_HC_PRIVATE_DATA_SIGNATURE, // Signature\r
- NULL, // Handle\r
{ // UfsHcProtocol\r
UfsHcGetMmioBar,\r
UfsHcAllocateBuffer,\r
EFI_STATUS\r
EFIAPI\r
UfsHcGetMmioBar (\r
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
- OUT UINTN *MmioBar\r
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
+ OUT UINTN *MmioBar\r
)\r
{\r
- UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- EFI_STATUS Status;\r
- UINT8 BarIndex;\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
+ UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ EFI_STATUS Status;\r
+ UINT8 BarIndex;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
\r
if ((This == NULL) || (MmioBar == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
PciIo,\r
BarIndex,\r
NULL,\r
- (VOID**) &BarDesc\r
+ (VOID **)&BarDesc\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Provides the UFS controller-specific addresses needed to access system memory.\r
- \r
+\r
@param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
@param Operation Indicates if the bus master is going to read or write to system memory.\r
@param HostAddress The system memory address to map to the UFS controller.\r
@param NumberOfBytes On input the number of bytes to map. On output the number of bytes\r
- that were mapped. \r
+ that were mapped.\r
@param DeviceAddress The resulting map address for the bus master UFS controller to use to\r
- access the hosts HostAddress. \r
+ access the hosts HostAddress.\r
@param Mapping A resulting value to pass to Unmap().\r
- \r
+\r
@retval EFI_SUCCESS The range was mapped for the returned NumberOfBytes.\r
- @retval EFI_UNSUPPORTED The HostAddress cannot be mapped as a common buffer. \r
+ @retval EFI_UNSUPPORTED The HostAddress cannot be mapped as a common buffer.\r
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
@retval EFI_DEVICE_ERROR The system hardware could not map the requested address.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
IN EDKII_UFS_HOST_CONTROLLER_OPERATION Operation,\r
IN VOID *HostAddress,\r
IN OUT UINTN *NumberOfBytes,\r
- OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,\r
- OUT VOID **Mapping\r
+ OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,\r
+ OUT VOID **Mapping\r
)\r
{\r
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);\r
PciIo = Private->PciIo;\r
\r
- Status = PciIo->Map (PciIo, (EFI_PCI_IO_PROTOCOL_OPERATION)Operation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);\r
+ Status = PciIo->Map (PciIo, (EFI_PCI_IO_PROTOCOL_OPERATION)Operation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Completes the Map() operation and releases any corresponding resources.\r
- \r
- @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance. \r
+\r
+ @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
@param Mapping The mapping value returned from Map().\r
- \r
+\r
@retval EFI_SUCCESS The range was unmapped.\r
@retval EFI_DEVICE_ERROR The data was not committed to the target system memory.\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
UfsHcUnmap (\r
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
- IN VOID *Mapping\r
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
+ IN VOID *Mapping\r
)\r
{\r
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);\r
PciIo = Private->PciIo;\r
\r
- Status = PciIo->Unmap (PciIo, Mapping);\r
+ Status = PciIo->Unmap (PciIo, Mapping);\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Allocates pages that are suitable for an EfiUfsHcOperationBusMasterCommonBuffer\r
- mapping. \r
- \r
+ mapping.\r
+\r
@param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
@param Type This parameter is not used and must be ignored.\r
@param MemoryType The type of memory to allocate, EfiBootServicesData or\r
- EfiRuntimeServicesData. \r
- @param Pages The number of pages to allocate. \r
+ EfiRuntimeServicesData.\r
+ @param Pages The number of pages to allocate.\r
@param HostAddress A pointer to store the base system memory address of the\r
- allocated range. \r
+ allocated range.\r
@param Attributes The requested bit mask of attributes for the allocated range.\r
- \r
+\r
@retval EFI_SUCCESS The requested memory pages were allocated.\r
@retval EFI_UNSUPPORTED Attributes is unsupported. The only legal attribute bits are\r
- MEMORY_WRITE_COMBINE and MEMORY_CACHED. \r
+ MEMORY_WRITE_COMBINE and MEMORY_CACHED.\r
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
- @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated. \r
- \r
+ @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.\r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
UfsHcAllocateBuffer (\r
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
- IN EFI_ALLOCATE_TYPE Type,\r
- IN EFI_MEMORY_TYPE MemoryType,\r
- IN UINTN Pages,\r
- OUT VOID **HostAddress,\r
- IN UINT64 Attributes\r
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
+ IN EFI_ALLOCATE_TYPE Type,\r
+ IN EFI_MEMORY_TYPE MemoryType,\r
+ IN UINTN Pages,\r
+ OUT VOID **HostAddress,\r
+ IN UINT64 Attributes\r
)\r
{\r
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);\r
PciIo = Private->PciIo;\r
\r
- Status = PciIo->AllocateBuffer (PciIo, Type, MemoryType, Pages, HostAddress, Attributes);\r
+ Status = PciIo->AllocateBuffer (PciIo, Type, MemoryType, Pages, HostAddress, Attributes);\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Frees memory that was allocated with AllocateBuffer().\r
- \r
- @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance. \r
- @param Pages The number of pages to free. \r
- @param HostAddress The base system memory address of the allocated range. \r
- \r
+\r
+ @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
+ @param Pages The number of pages to free.\r
+ @param HostAddress The base system memory address of the allocated range.\r
+\r
@retval EFI_SUCCESS The requested memory pages were freed.\r
@retval EFI_INVALID_PARAMETER The memory range specified by HostAddress and Pages\r
was not allocated with AllocateBuffer().\r
- \r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
UfsHcFreeBuffer (\r
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
- IN UINTN Pages,\r
- IN VOID *HostAddress\r
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This,\r
+ IN UINTN Pages,\r
+ IN VOID *HostAddress\r
)\r
{\r
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);\r
PciIo = Private->PciIo;\r
\r
- Status = PciIo->FreeBuffer (PciIo, Pages, HostAddress);\r
+ Status = PciIo->FreeBuffer (PciIo, Pages, HostAddress);\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Flushes all posted write transactions from the UFS bus to attached UFS device.\r
- \r
- @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance. \r
- \r
+\r
+ @param This A pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
+\r
@retval EFI_SUCCESS The posted write transactions were flushed from the UFS bus\r
- to attached UFS device. \r
+ to attached UFS device.\r
@retval EFI_DEVICE_ERROR The posted write transactions were not flushed from the UFS\r
- bus to attached UFS device due to a hardware error. \r
- \r
+ bus to attached UFS device due to a hardware error.\r
+\r
**/\r
EFI_STATUS\r
EFIAPI\r
UfsHcFlush (\r
- IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This\r
+ IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This\r
)\r
{\r
UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
Private = UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (This);\r
PciIo = Private->PciIo;\r
\r
- Status = PciIo->Flush (PciIo);\r
+ Status = PciIo->Flush (PciIo);\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Enable a UFS bus driver to access UFS MMIO registers in the UFS Host Controller memory space.\r
\r
@param This A pointer to the EDKII_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
PciIo = Private->PciIo;\r
BarIndex = Private->BarIndex;\r
\r
- Status = PciIo->Mem.Read (PciIo, (EFI_PCI_IO_PROTOCOL_WIDTH)Width, BarIndex, Offset, Count, Buffer);\r
+ Status = PciIo->Mem.Read (PciIo, (EFI_PCI_IO_PROTOCOL_WIDTH)Width, BarIndex, Offset, Count, Buffer);\r
\r
return Status;\r
}\r
\r
-/** \r
+/**\r
Enable a UFS bus driver to access UFS MMIO registers in the UFS Host Controller memory space.\r
\r
@param This A pointer to the EDKII_UFS_HOST_CONTROLLER_PROTOCOL instance.\r
PciIo = Private->PciIo;\r
BarIndex = Private->BarIndex;\r
\r
- Status = PciIo->Mem.Write (PciIo, (EFI_PCI_IO_PROTOCOL_WIDTH)Width, BarIndex, Offset, Count, Buffer);\r
+ Status = PciIo->Mem.Write (PciIo, (EFI_PCI_IO_PROTOCOL_WIDTH)Width, BarIndex, Offset, Count, Buffer);\r
\r
return Status;\r
}\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
//\r
// Now test the EfiPciIoProtocol\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo,\r
+ (VOID **)&PciIo,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
// Now further check the PCI header: Base class (offset 0x0B) and\r
// Sub Class (offset 0x0A). This controller should be an UFS controller\r
);\r
if (EFI_ERROR (Status)) {\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
return EFI_UNSUPPORTED;\r
}\r
+\r
//\r
// Since we already got the PciData, we can close protocol to avoid to carry it on for multiple exit points.\r
//\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
\r
//\r
// Examine UFS Host Controller PCI Configuration table fields\r
//\r
if (PciData.Hdr.ClassCode[2] == PCI_CLASS_MASS_STORAGE) {\r
- if (PciData.Hdr.ClassCode[1] == 0x09 ) { //UFS Controller Subclass\r
+ if (PciData.Hdr.ClassCode[1] == 0x09 ) {\r
+ // UFS Controller Subclass\r
UfsHcFound = TRUE;\r
}\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
Starts a device controller or a bus controller.\r
\r
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
- UINT64 Supports;\r
- UINT8 BarIndex;\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
+ EFI_STATUS Status;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UFS_HOST_CONTROLLER_PRIVATE_DATA *Private;\r
+ UINT64 Supports;\r
+ UINT8 BarIndex;\r
+ EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;\r
\r
PciIo = NULL;\r
Private = NULL;\r
Status = gBS->OpenProtocol (\r
Controller,\r
&gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo,\r
+ (VOID **)&PciIo,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_BY_DRIVER\r
PciIo,\r
BarIndex,\r
NULL,\r
- (VOID**) &BarDesc\r
+ (VOID **)&BarDesc\r
);\r
if (Status == EFI_UNSUPPORTED) {\r
continue;\r
&Controller,\r
&gEdkiiUfsHostControllerProtocolGuid,\r
EFI_NATIVE_INTERFACE,\r
- (VOID*)&(Private->UfsHc)\r
+ (VOID *)&(Private->UfsHc)\r
);\r
\r
Done:\r
//\r
// Restore original PCI attributes\r
//\r
- Status = PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationSet,\r
- Private->PciAttributes,\r
- NULL\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ Private->PciAttributes,\r
+ NULL\r
+ );\r
}\r
+\r
gBS->CloseProtocol (\r
- Controller,\r
- &gEfiPciIoProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
if (Private != NULL) {\r
FreePool (Private);\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
Stops a device controller or a bus controller.\r
\r
EFI_STATUS\r
EFIAPI\r
UfsHcDriverBindingStop (\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
Status = gBS->OpenProtocol (\r
Controller,\r
&gEdkiiUfsHostControllerProtocolGuid,\r
- (VOID **) &UfsHc,\r
+ (VOID **)&UfsHc,\r
This->DriverBindingHandle,\r
Controller,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = EfiLibInstallDriverBindingComponentName2 (\r
ImageHandle,\r