TianoCore EDK2 master
Loading...
Searching...
No Matches
UfsPciHcDxe.h File Reference

Go to the source code of this file.

Data Structures

struct  _UFS_HOST_CONTROLLER_PRIVATE_DATA
 

Macros

#define UFS_HC_PRIVATE_DATA_SIGNATURE   SIGNATURE_32 ('U','F','S','H')
 
#define UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC(a)
 

Typedefs

typedef struct _UFS_HOST_CONTROLLER_PRIVATE_DATA UFS_HOST_CONTROLLER_PRIVATE_DATA
 

Functions

EFI_STATUS EFIAPI UfsHcComponentNameGetDriverName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
 
EFI_STATUS EFIAPI UfsHcComponentNameGetControllerName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
 
EFI_STATUS EFIAPI UfsHcDriverBindingSupported (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI UfsHcDriverBindingStart (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
 
EFI_STATUS EFIAPI UfsHcDriverBindingStop (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
 
EFI_STATUS EFIAPI UfsHcGetMmioBar (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, OUT UINTN *MmioBar)
 
EFI_STATUS EFIAPI UfsHcMap (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN EDKII_UFS_HOST_CONTROLLER_OPERATION Operation, IN VOID *HostAddress, IN OUT UINTN *NumberOfBytes, OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, OUT VOID **Mapping)
 
EFI_STATUS EFIAPI UfsHcUnmap (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN VOID *Mapping)
 
EFI_STATUS EFIAPI UfsHcAllocateBuffer (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN EFI_ALLOCATE_TYPE Type, IN EFI_MEMORY_TYPE MemoryType, IN UINTN Pages, OUT VOID **HostAddress, IN UINT64 Attributes)
 
EFI_STATUS EFIAPI UfsHcFreeBuffer (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN UINTN Pages, IN VOID *HostAddress)
 
EFI_STATUS EFIAPI UfsHcFlush (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This)
 
EFI_STATUS EFIAPI UfsHcMmioRead (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL_WIDTH Width, IN UINT64 Offset, IN UINTN Count, IN OUT VOID *Buffer)
 
EFI_STATUS EFIAPI UfsHcMmioWrite (IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL *This, IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL_WIDTH Width, IN UINT64 Offset, IN UINTN Count, IN OUT VOID *Buffer)
 

Variables

EFI_DRIVER_BINDING_PROTOCOL gUfsHcDriverBinding
 
EFI_COMPONENT_NAME_PROTOCOL gUfsHcComponentName
 
EFI_COMPONENT_NAME2_PROTOCOL gUfsHcComponentName2
 

Detailed Description

UfsHcDxe driver is used to provide platform-dependent info, mainly UFS host controller MMIO base, to upper layer UFS drivers.

Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file UfsPciHcDxe.h.

Macro Definition Documentation

◆ UFS_HC_PRIVATE_DATA_SIGNATURE

#define UFS_HC_PRIVATE_DATA_SIGNATURE   SIGNATURE_32 ('U','F','S','H')

Definition at line 40 of file UfsPciHcDxe.h.

◆ UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC

#define UFS_HOST_CONTROLLER_PRIVATE_DATA_FROM_UFSHC (   a)
Value:
CR (a, \
UfsHc, \
UFS_HC_PRIVATE_DATA_SIGNATURE \
)
#define CR(Record, TYPE, Field, TestSignature)
Definition: DebugLib.h:659

Definition at line 56 of file UfsPciHcDxe.h.

Typedef Documentation

◆ UFS_HOST_CONTROLLER_PRIVATE_DATA

Function Documentation

◆ UfsHcAllocateBuffer()

EFI_STATUS EFIAPI UfsHcAllocateBuffer ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN EFI_ALLOCATE_TYPE  Type,
IN EFI_MEMORY_TYPE  MemoryType,
IN UINTN  Pages,
OUT VOID **  HostAddress,
IN UINT64  Attributes 
)

Allocates pages that are suitable for an EfiUfsHcOperationBusMasterCommonBuffer mapping.

Parameters
ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
TypeThis parameter is not used and must be ignored.
MemoryTypeThe type of memory to allocate, EfiBootServicesData or EfiRuntimeServicesData.
PagesThe number of pages to allocate.
HostAddressA pointer to store the base system memory address of the allocated range.
AttributesThe requested bit mask of attributes for the allocated range.
Return values
EFI_SUCCESSThe requested memory pages were allocated.
EFI_UNSUPPORTEDAttributes is unsupported. The only legal attribute bits are MEMORY_WRITE_COMBINE and MEMORY_CACHED.
EFI_INVALID_PARAMETEROne or more parameters are invalid.
EFI_OUT_OF_RESOURCESThe memory pages could not be allocated.

Definition at line 191 of file UfsPciHcDxe.c.

◆ UfsHcComponentNameGetControllerName()

EFI_STATUS EFIAPI UfsHcComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN EFI_HANDLE  ControllerHandle,
IN EFI_HANDLE ChildHandle  OPTIONAL,
IN CHAR8 *  Language,
OUT CHAR16 **  ControllerName 
)

Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver.

This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned.

Parameters
This[in]A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
ControllerHandle[in]The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned.
ChildHandle[in]The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller.
Language[in]A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 4646 or ISO 639-2 language code format.
ControllerName[out]A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This.
Return values
EFI_SUCCESSThe Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName.
EFI_INVALID_PARAMETERControllerHandle is NULL.
EFI_INVALID_PARAMETERChildHandle is not NULL and it is not a valid EFI_HANDLE.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERControllerName is NULL.
EFI_UNSUPPORTEDThe driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 178 of file ComponentName.c.

◆ UfsHcComponentNameGetDriverName()

EFI_STATUS EFIAPI UfsHcComponentNameGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN CHAR8 *  Language,
OUT CHAR16 **  DriverName 
)

Retrieves a Unicode string that is the user readable name of the driver.

This function retrieves the user readable name of a driver in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the driver name is returned in DriverName, and EFI_SUCCESS is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned.

Parameters
This[in]A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
Language[in]A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 4646 or ISO 639-2 language code format.
DriverName[out]A pointer to the Unicode string to return. This Unicode string is the name of the driver specified by This in the language specified by Language.
Return values
EFI_SUCCESSThe Unicode string for the Driver specified by This and the language specified by Language was returned in DriverName.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERDriverName is NULL.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 93 of file ComponentName.c.

◆ UfsHcDriverBindingStart()

EFI_STATUS EFIAPI UfsHcDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

Starts a device controller or a bus controller.

The Start() function is designed to be invoked from the EFI boot service ConnectController(). As a result, much of the error checking on the parameters to Start() has been moved into this common boot service. It is legal to call Start() from other locations, but the following calling restrictions must be followed or the system behavior will not be deterministic.

  1. ControllerHandle must be a valid EFI_HANDLE.
  2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned EFI_DEVICE_PATH_PROTOCOL.
  3. Prior to calling Start(), the Supported() function for the driver specified by This must have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
Parameters
[in]ThisA pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
[in]ControllerHandleThe handle of the controller to start. This handle must support a protocol interface that supplies an I/O abstraction to the driver.
[in]RemainingDevicePathA pointer to the remaining portion of a device path. This parameter is ignored by device drivers, and is optional for bus drivers. For a bus driver, if this parameter is NULL, then handles for all the children of Controller are created by this driver. If this parameter is not NULL and the first Device Path Node is not the End of Device Path Node, then only the handle for the child device specified by the first Device Path Node of RemainingDevicePath is created by this driver. If the first Device Path Node of RemainingDevicePath is the End of Device Path Node, no child handle is created by this driver.
Return values
EFI_SUCCESSThe device was started.
EFI_DEVICE_ERRORThe device could not be started due to a device error.Currently not implemented.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
OthersThe driver failded to start the device.

Install UFS_HOST_CONTROLLER protocol

Definition at line 551 of file UfsPciHcDxe.c.

◆ UfsHcDriverBindingStop()

EFI_STATUS EFIAPI UfsHcDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN UINTN  NumberOfChildren,
IN EFI_HANDLE ChildHandleBuffer 
)

Stops a device controller or a bus controller.

The Stop() function is designed to be invoked from the EFI boot service DisconnectController(). As a result, much of the error checking on the parameters to Stop() has been moved into this common boot service. It is legal to call Stop() from other locations, but the following calling restrictions must be followed or the system behavior will not be deterministic.

  1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this same driver's Start() function.
  2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid EFI_HANDLE. In addition, all of these handles must have been created in this driver's Start() function, and the Start() function must have called OpenProtocol() on ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
Parameters
[in]ThisA pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
[in]ControllerHandleA handle to the device being stopped. The handle must support a bus specific I/O protocol for the driver to use to stop the device.
[in]NumberOfChildrenThe number of child device handles in ChildHandleBuffer.
[in]ChildHandleBufferAn array of child handles to be freed. May be NULL if NumberOfChildren is 0.
Return values
EFI_SUCCESSThe device was stopped.
EFI_DEVICE_ERRORThe device could not be stopped due to a device error.

Get private data

Definition at line 721 of file UfsPciHcDxe.c.

◆ UfsHcDriverBindingSupported()

EFI_STATUS EFIAPI UfsHcDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL RemainingDevicePath 
)

Tests to see if this driver supports a given controller. If a child device is provided, it further tests to see if this driver supports creating a handle for the specified child device.

This function checks to see if the driver specified by This supports the device specified by ControllerHandle. Drivers will typically use the device path attached to ControllerHandle and/or the services from the bus I/O abstraction attached to ControllerHandle to determine if the driver supports ControllerHandle. This function may be called many times during platform initialization. In order to reduce boot times, the tests performed by this function must be very small, and take as little time as possible to execute. This function must not change the state of any hardware devices, and this function must be aware that the device specified by ControllerHandle may already be managed by the same driver or a different driver. This function must match its calls to AllocatePages() with FreePages(), AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol(). Since ControllerHandle may have been previously started by the same driver, if a protocol is already in the opened state, then it must not be closed with CloseProtocol(). This is required to guarantee the state of ControllerHandle is not modified by this function.

Parameters
[in]ThisA pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
[in]ControllerHandleThe handle of the controller to test. This handle must support a protocol interface that supplies an I/O abstraction to the driver.
[in]RemainingDevicePathA pointer to the remaining portion of a device path. This parameter is ignored by device drivers, and is optional for bus drivers. For bus drivers, if this parameter is not NULL, then the bus driver must determine if the bus controller specified by ControllerHandle and the child controller specified by RemainingDevicePath are both supported by this bus driver.
Return values
EFI_SUCCESSThe device specified by ControllerHandle and RemainingDevicePath is supported by the driver specified by This.
EFI_ALREADY_STARTEDThe device specified by ControllerHandle and RemainingDevicePath is already being managed by the driver specified by This.
EFI_ACCESS_DENIEDThe device specified by ControllerHandle and RemainingDevicePath is already being managed by a different driver or an application that requires exclusive access. Currently not implemented.
EFI_UNSUPPORTEDThe device specified by ControllerHandle and RemainingDevicePath is not supported by the driver specified by This.

Definition at line 406 of file UfsPciHcDxe.c.

◆ UfsHcFlush()

EFI_STATUS EFIAPI UfsHcFlush ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This)

Flushes all posted write transactions from the UFS bus to attached UFS device.

Parameters
ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
Return values
EFI_SUCCESSThe posted write transactions were flushed from the UFS bus to attached UFS device.
EFI_DEVICE_ERRORThe posted write transactions were not flushed from the UFS bus to attached UFS device due to a hardware error.

Definition at line 263 of file UfsPciHcDxe.c.

◆ UfsHcFreeBuffer()

EFI_STATUS EFIAPI UfsHcFreeBuffer ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN UINTN  Pages,
IN VOID *  HostAddress 
)

Frees memory that was allocated with AllocateBuffer().

Parameters
ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
PagesThe number of pages to free.
HostAddressThe base system memory address of the allocated range.
Return values
EFI_SUCCESSThe requested memory pages were freed.
EFI_INVALID_PARAMETERThe memory range specified by HostAddress and Pages was not allocated with AllocateBuffer().

Definition at line 229 of file UfsPciHcDxe.c.

◆ UfsHcGetMmioBar()

EFI_STATUS EFIAPI UfsHcGetMmioBar ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
OUT UINTN MmioBar 
)

Get the MMIO base of the UFS host controller.

Parameters
[in]ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
[out]MmioBarThe MMIO base address of UFS host controller.
Return values
EFI_SUCCESSThe operation succeeds.
othersThe operation fails.

Definition at line 55 of file UfsPciHcDxe.c.

◆ UfsHcMap()

EFI_STATUS EFIAPI UfsHcMap ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN EDKII_UFS_HOST_CONTROLLER_OPERATION  Operation,
IN VOID *  HostAddress,
IN OUT UINTN NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS DeviceAddress,
OUT VOID **  Mapping 
)

Provides the UFS controller-specific addresses needed to access system memory.

Parameters
ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
OperationIndicates if the bus master is going to read or write to system memory.
HostAddressThe system memory address to map to the UFS controller.
NumberOfBytesOn input the number of bytes to map. On output the number of bytes that were mapped.
DeviceAddressThe resulting map address for the bus master UFS controller to use to access the hosts HostAddress.
MappingA resulting value to pass to Unmap().
Return values
EFI_SUCCESSThe range was mapped for the returned NumberOfBytes.
EFI_UNSUPPORTEDThe HostAddress cannot be mapped as a common buffer.
EFI_INVALID_PARAMETEROne or more parameters are invalid.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
EFI_DEVICE_ERRORThe system hardware could not map the requested address.

Definition at line 113 of file UfsPciHcDxe.c.

◆ UfsHcMmioRead()

EFI_STATUS EFIAPI UfsHcMmioRead ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL_WIDTH  Width,
IN UINT64  Offset,
IN UINTN  Count,
IN OUT VOID *  Buffer 
)

Enable a UFS bus driver to access UFS MMIO registers in the UFS Host Controller memory space.

Parameters
ThisA pointer to the EDKII_UFS_HOST_CONTROLLER_PROTOCOL instance.
WidthSignifies the width of the memory operations.
OffsetThe offset within the UFS Host Controller MMIO space to start the memory operation.
CountThe number of memory operations to perform.
BufferFor read operations, the destination buffer to store the results. For write operations, the source buffer to write data from.
Return values
EFI_SUCCESSThe data was read from or written to the UFS host controller.
EFI_UNSUPPORTEDThe address range specified by Offset, Width, and Count is not valid for the UFS Host Controller memory space.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
EFI_INVALID_PARAMETEROne or more parameters are invalid.

Definition at line 298 of file UfsPciHcDxe.c.

◆ UfsHcMmioWrite()

EFI_STATUS EFIAPI UfsHcMmioWrite ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL_WIDTH  Width,
IN UINT64  Offset,
IN UINTN  Count,
IN OUT VOID *  Buffer 
)

Enable a UFS bus driver to access UFS MMIO registers in the UFS Host Controller memory space.

Parameters
ThisA pointer to the EDKII_UFS_HOST_CONTROLLER_PROTOCOL instance.
WidthSignifies the width of the memory operations.
OffsetThe offset within the UFS Host Controller MMIO space to start the memory operation.
CountThe number of memory operations to perform.
BufferFor read operations, the destination buffer to store the results. For write operations, the source buffer to write data from.
Return values
EFI_SUCCESSThe data was read from or written to the UFS host controller.
EFI_UNSUPPORTEDThe address range specified by Offset, Width, and Count is not valid for the UFS Host Controller memory space.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
EFI_INVALID_PARAMETEROne or more parameters are invalid.

Definition at line 340 of file UfsPciHcDxe.c.

◆ UfsHcUnmap()

EFI_STATUS EFIAPI UfsHcUnmap ( IN EDKII_UFS_HOST_CONTROLLER_PROTOCOL This,
IN VOID *  Mapping 
)

Completes the Map() operation and releases any corresponding resources.

Parameters
ThisA pointer to the EFI_UFS_HOST_CONTROLLER_PROTOCOL instance.
MappingThe mapping value returned from Map().
Return values
EFI_SUCCESSThe range was unmapped.
EFI_DEVICE_ERRORThe data was not committed to the target system memory.

Definition at line 149 of file UfsPciHcDxe.c.

Variable Documentation

◆ gUfsHcComponentName

EFI_COMPONENT_NAME_PROTOCOL gUfsHcComponentName
extern

Definition at line 15 of file ComponentName.c.

◆ gUfsHcComponentName2

EFI_COMPONENT_NAME2_PROTOCOL gUfsHcComponentName2
extern

Definition at line 24 of file ComponentName.c.

◆ gUfsHcDriverBinding

EFI_DRIVER_BINDING_PROTOCOL gUfsHcDriverBinding
extern

Definition at line 15 of file UfsPciHcDxe.c.