MdeModulePkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
committed by
mergify[bot]
parent
7c7184e201
commit
1436aea4d5
@@ -15,7 +15,7 @@
|
||||
//
|
||||
// ATA Bus Driver Binding Protocol Instance
|
||||
//
|
||||
EFI_DRIVER_BINDING_PROTOCOL gAtaBusDriverBinding = {
|
||||
EFI_DRIVER_BINDING_PROTOCOL gAtaBusDriverBinding = {
|
||||
AtaBusDriverBindingSupported,
|
||||
AtaBusDriverBindingStart,
|
||||
AtaBusDriverBindingStop,
|
||||
@@ -27,9 +27,9 @@ EFI_DRIVER_BINDING_PROTOCOL gAtaBusDriverBinding = {
|
||||
//
|
||||
// Template for ATA Child Device.
|
||||
//
|
||||
ATA_DEVICE gAtaDeviceTemplate = {
|
||||
ATA_DEVICE_SIGNATURE, // Signature
|
||||
NULL, // Handle
|
||||
ATA_DEVICE gAtaDeviceTemplate = {
|
||||
ATA_DEVICE_SIGNATURE, // Signature
|
||||
NULL, // Handle
|
||||
{ // BlockIo
|
||||
EFI_BLOCK_IO_PROTOCOL_REVISION,
|
||||
NULL,
|
||||
@@ -65,25 +65,27 @@ ATA_DEVICE gAtaDeviceTemplate = {
|
||||
AtaDiskInfoSenseData,
|
||||
AtaDiskInfoWhichIde
|
||||
},
|
||||
NULL, // DevicePath
|
||||
NULL, // DevicePath
|
||||
{
|
||||
AtaStorageSecurityReceiveData,
|
||||
AtaStorageSecuritySendData
|
||||
},
|
||||
NULL, // AtaBusDriverData
|
||||
0, // Port
|
||||
0, // PortMultiplierPort
|
||||
{ 0, }, // Packet
|
||||
{{ 0}, }, // Acb
|
||||
NULL, // Asb
|
||||
FALSE, // UdmaValid
|
||||
FALSE, // Lba48Bit
|
||||
NULL, // IdentifyData
|
||||
NULL, // ControllerNameTable
|
||||
{L'\0', }, // ModelName
|
||||
{NULL, NULL}, // AtaTaskList
|
||||
{NULL, NULL}, // AtaSubTaskList
|
||||
FALSE // Abort
|
||||
NULL, // AtaBusDriverData
|
||||
0, // Port
|
||||
0, // PortMultiplierPort
|
||||
{ 0, }, // Packet
|
||||
{
|
||||
{ 0 },
|
||||
}, // Acb
|
||||
NULL, // Asb
|
||||
FALSE, // UdmaValid
|
||||
FALSE, // Lba48Bit
|
||||
NULL, // IdentifyData
|
||||
NULL, // ControllerNameTable
|
||||
{ L'\0', }, // ModelName
|
||||
{ NULL, NULL }, // AtaTaskList
|
||||
{ NULL, NULL }, // AtaSubTaskList
|
||||
FALSE // Abort
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -101,8 +103,8 @@ ATA_DEVICE gAtaDeviceTemplate = {
|
||||
**/
|
||||
VOID *
|
||||
AllocateAlignedBuffer (
|
||||
IN ATA_DEVICE *AtaDevice,
|
||||
IN UINTN BufferSize
|
||||
IN ATA_DEVICE *AtaDevice,
|
||||
IN UINTN BufferSize
|
||||
)
|
||||
{
|
||||
return AllocateAlignedPages (EFI_SIZE_TO_PAGES (BufferSize), AtaDevice->AtaBusDriverData->AtaPassThru->Mode->IoAlign);
|
||||
@@ -120,8 +122,8 @@ AllocateAlignedBuffer (
|
||||
**/
|
||||
VOID
|
||||
FreeAlignedBuffer (
|
||||
IN VOID *Buffer,
|
||||
IN UINTN BufferSize
|
||||
IN VOID *Buffer,
|
||||
IN UINTN BufferSize
|
||||
)
|
||||
{
|
||||
if (Buffer != NULL) {
|
||||
@@ -129,7 +131,6 @@ FreeAlignedBuffer (
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Release all the resources allocated for the ATA device.
|
||||
|
||||
@@ -143,11 +144,11 @@ ReleaseAtaResources (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
ATA_BUS_ASYN_SUB_TASK *SubTask;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
LIST_ENTRY *Entry;
|
||||
LIST_ENTRY *DelEntry;
|
||||
EFI_TPL OldTpl;
|
||||
ATA_BUS_ASYN_SUB_TASK *SubTask;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
LIST_ENTRY *Entry;
|
||||
LIST_ENTRY *DelEntry;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
FreeUnicodeStringTable (AtaDevice->ControllerNameTable);
|
||||
FreeAlignedBuffer (AtaDevice->Asb, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
@@ -155,14 +156,16 @@ ReleaseAtaResources (
|
||||
if (AtaDevice->DevicePath != NULL) {
|
||||
FreePool (AtaDevice->DevicePath);
|
||||
}
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
if (!IsListEmpty (&AtaDevice->AtaSubTaskList)) {
|
||||
//
|
||||
// Free the Subtask list.
|
||||
//
|
||||
for(Entry = AtaDevice->AtaSubTaskList.ForwardLink;
|
||||
Entry != (&AtaDevice->AtaSubTaskList);
|
||||
) {
|
||||
for (Entry = AtaDevice->AtaSubTaskList.ForwardLink;
|
||||
Entry != (&AtaDevice->AtaSubTaskList);
|
||||
)
|
||||
{
|
||||
DelEntry = Entry;
|
||||
Entry = Entry->ForwardLink;
|
||||
SubTask = ATA_ASYN_SUB_TASK_FROM_ENTRY (DelEntry);
|
||||
@@ -171,13 +174,15 @@ ReleaseAtaResources (
|
||||
FreeAtaSubTask (SubTask);
|
||||
}
|
||||
}
|
||||
|
||||
if (!IsListEmpty (&AtaDevice->AtaTaskList)) {
|
||||
//
|
||||
// Free the Subtask list.
|
||||
//
|
||||
for(Entry = AtaDevice->AtaTaskList.ForwardLink;
|
||||
Entry != (&AtaDevice->AtaTaskList);
|
||||
) {
|
||||
for (Entry = AtaDevice->AtaTaskList.ForwardLink;
|
||||
Entry != (&AtaDevice->AtaTaskList);
|
||||
)
|
||||
{
|
||||
DelEntry = Entry;
|
||||
Entry = Entry->ForwardLink;
|
||||
AtaTask = ATA_ASYN_TASK_FROM_ENTRY (DelEntry);
|
||||
@@ -186,11 +191,11 @@ ReleaseAtaResources (
|
||||
FreePool (AtaTask);
|
||||
}
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
FreePool (AtaDevice);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Registers an ATA device.
|
||||
|
||||
@@ -210,29 +215,29 @@ ReleaseAtaResources (
|
||||
**/
|
||||
EFI_STATUS
|
||||
RegisterAtaDevice (
|
||||
IN OUT ATA_BUS_DRIVER_DATA *AtaBusDriverData,
|
||||
IN UINT16 Port,
|
||||
IN UINT16 PortMultiplierPort
|
||||
IN OUT ATA_BUS_DRIVER_DATA *AtaBusDriverData,
|
||||
IN UINT16 Port,
|
||||
IN UINT16 PortMultiplierPort
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_DEVICE_PATH_PROTOCOL *NewDevicePathNode;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
|
||||
EFI_HANDLE DeviceHandle;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_DEVICE_PATH_PROTOCOL *NewDevicePathNode;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath;
|
||||
EFI_HANDLE DeviceHandle;
|
||||
|
||||
AtaDevice = NULL;
|
||||
NewDevicePathNode = NULL;
|
||||
DevicePath = NULL;
|
||||
AtaDevice = NULL;
|
||||
NewDevicePathNode = NULL;
|
||||
DevicePath = NULL;
|
||||
RemainingDevicePath = NULL;
|
||||
|
||||
//
|
||||
// Build device path
|
||||
//
|
||||
AtaPassThru = AtaBusDriverData->AtaPassThru;
|
||||
Status = AtaPassThru->BuildDevicePath (AtaPassThru, Port, PortMultiplierPort, &NewDevicePathNode);
|
||||
Status = AtaPassThru->BuildDevicePath (AtaPassThru, Port, PortMultiplierPort, &NewDevicePathNode);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
@@ -243,10 +248,10 @@ RegisterAtaDevice (
|
||||
goto Done;
|
||||
}
|
||||
|
||||
DeviceHandle = NULL;
|
||||
DeviceHandle = NULL;
|
||||
RemainingDevicePath = DevicePath;
|
||||
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
|
||||
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd(RemainingDevicePath)) {
|
||||
Status = gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
|
||||
if (!EFI_ERROR (Status) && (DeviceHandle != NULL) && IsDevicePathEnd (RemainingDevicePath)) {
|
||||
Status = EFI_ALREADY_STARTED;
|
||||
FreePool (DevicePath);
|
||||
goto Done;
|
||||
@@ -270,11 +275,12 @@ RegisterAtaDevice (
|
||||
AtaDevice->DevicePath = DevicePath;
|
||||
AtaDevice->Port = Port;
|
||||
AtaDevice->PortMultiplierPort = PortMultiplierPort;
|
||||
AtaDevice->Asb = AllocateAlignedBuffer (AtaDevice, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
AtaDevice->Asb = AllocateAlignedBuffer (AtaDevice, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
if (AtaDevice->Asb == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
AtaDevice->IdentifyData = AllocateAlignedBuffer (AtaDevice, sizeof (ATA_IDENTIFY_DATA));
|
||||
if (AtaDevice->IdentifyData == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
@@ -368,13 +374,14 @@ RegisterAtaDevice (
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "Successfully Install Storage Security Protocol on the ATA device\n"));
|
||||
}
|
||||
|
||||
gBS->OpenProtocol (
|
||||
AtaBusDriverData->Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **) &AtaPassThru,
|
||||
(VOID **)&AtaPassThru,
|
||||
AtaBusDriverData->DriverBindingHandle,
|
||||
AtaDevice->Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
@@ -389,10 +396,10 @@ Done:
|
||||
ReleaseAtaResources (AtaDevice);
|
||||
DEBUG ((DEBUG_ERROR | DEBUG_INIT, "Failed to initialize Port %x PortMultiplierPort %x, status = %r\n", Port, PortMultiplierPort, Status));
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Unregisters an ATA device.
|
||||
|
||||
@@ -409,25 +416,25 @@ Done:
|
||||
**/
|
||||
EFI_STATUS
|
||||
UnregisterAtaDevice (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_HANDLE Handle
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_HANDLE Handle
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *StorageSecurity;
|
||||
EFI_STATUS Status;
|
||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||
EFI_BLOCK_IO2_PROTOCOL *BlockIo2;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *StorageSecurity;
|
||||
|
||||
BlockIo2 = NULL;
|
||||
BlockIo = NULL;
|
||||
BlockIo2 = NULL;
|
||||
BlockIo = NULL;
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
(VOID **) &BlockIo,
|
||||
(VOID **)&BlockIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -439,7 +446,7 @@ UnregisterAtaDevice (
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
&gEfiBlockIo2ProtocolGuid,
|
||||
(VOID **) &BlockIo2,
|
||||
(VOID **)&BlockIo2,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -488,13 +495,13 @@ UnregisterAtaDevice (
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **) &AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **)&AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
||||
@@ -504,7 +511,7 @@ UnregisterAtaDevice (
|
||||
Status = gBS->OpenProtocol (
|
||||
Handle,
|
||||
&gEfiStorageSecurityCommandProtocolGuid,
|
||||
(VOID **) &StorageSecurity,
|
||||
(VOID **)&StorageSecurity,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -518,13 +525,13 @@ UnregisterAtaDevice (
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **) &AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **)&AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Handle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
@@ -533,8 +540,6 @@ UnregisterAtaDevice (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
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.
|
||||
@@ -585,11 +590,11 @@ AtaBusDriverBindingSupported (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
|
||||
//
|
||||
// Test EFI_ATA_PASS_THRU_PROTOCOL on controller handle.
|
||||
@@ -597,7 +602,7 @@ AtaBusDriverBindingSupported (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **) &AtaPassThru,
|
||||
(VOID **)&AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -619,11 +624,11 @@ AtaBusDriverBindingSupported (
|
||||
// Close the I/O Abstraction(s) used to perform the supported test
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
@@ -637,11 +642,11 @@ AtaBusDriverBindingSupported (
|
||||
// Close the I/O Abstraction(s) used to perform the supported test
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
@@ -650,11 +655,11 @@ AtaBusDriverBindingSupported (
|
||||
// Close the I/O Abstraction(s) used to perform the supported test
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
//
|
||||
// Open the EFI Device Path protocol needed to perform the supported test
|
||||
@@ -662,7 +667,7 @@ AtaBusDriverBindingSupported (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ParentDevicePath,
|
||||
(VOID **)&ParentDevicePath,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -670,7 +675,6 @@ AtaBusDriverBindingSupported (
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Starts a device controller or a bus controller.
|
||||
|
||||
@@ -714,19 +718,19 @@ AtaBusDriverBindingStart (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
EFI_STATUS Status;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
|
||||
AtaBusDriverData = NULL;
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &ParentDevicePath,
|
||||
(VOID **)&ParentDevicePath,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -747,7 +751,7 @@ AtaBusDriverBindingStart (
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
(VOID **) &AtaPassThru,
|
||||
(VOID **)&AtaPassThru,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
@@ -766,9 +770,9 @@ AtaBusDriverBindingStart (
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
AtaBusDriverData->AtaPassThru = AtaPassThru;
|
||||
AtaBusDriverData->Controller = Controller;
|
||||
AtaBusDriverData->ParentDevicePath = ParentDevicePath;
|
||||
AtaBusDriverData->AtaPassThru = AtaPassThru;
|
||||
AtaBusDriverData->Controller = Controller;
|
||||
AtaBusDriverData->ParentDevicePath = ParentDevicePath;
|
||||
AtaBusDriverData->DriverBindingHandle = This->DriverBindingHandle;
|
||||
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
@@ -780,12 +784,11 @@ AtaBusDriverBindingStart (
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
} else {
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiCallerIdGuid,
|
||||
(VOID **) &AtaBusDriverData,
|
||||
(VOID **)&AtaBusDriverData,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -826,14 +829,16 @@ AtaBusDriverBindingStart (
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
RegisterAtaDevice (AtaBusDriverData, Port, PortMultiplierPort);
|
||||
}
|
||||
}
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
} else if (!IsDevicePathEnd (RemainingDevicePath)) {
|
||||
Status = AtaPassThru->GetDevice (AtaPassThru, RemainingDevicePath, &Port, &PortMultiplierPort);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Status = RegisterAtaDevice (AtaBusDriverData,Port, PortMultiplierPort);
|
||||
Status = RegisterAtaDevice (AtaBusDriverData, Port, PortMultiplierPort);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -852,17 +857,15 @@ ErrorExit:
|
||||
}
|
||||
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
return Status;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Stops a device controller or a bus controller.
|
||||
|
||||
@@ -892,42 +895,42 @@ ErrorExit:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBusDriverBindingStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN AllChildrenStopped;
|
||||
UINTN Index;
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
EFI_STATUS Status;
|
||||
BOOLEAN AllChildrenStopped;
|
||||
UINTN Index;
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
|
||||
if (NumberOfChildren == 0) {
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiCallerIdGuid,
|
||||
(VOID **) &AtaBusDriverData,
|
||||
(VOID **)&AtaBusDriverData,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
gBS->UninstallMultipleProtocolInterfaces (
|
||||
Controller,
|
||||
&gEfiCallerIdGuid,
|
||||
AtaBusDriverData,
|
||||
NULL
|
||||
);
|
||||
Controller,
|
||||
&gEfiCallerIdGuid,
|
||||
AtaBusDriverData,
|
||||
NULL
|
||||
);
|
||||
FreePool (AtaBusDriverData);
|
||||
}
|
||||
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
Controller,
|
||||
&gEfiAtaPassThruProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -935,7 +938,6 @@ AtaBusDriverBindingStop (
|
||||
AllChildrenStopped = TRUE;
|
||||
|
||||
for (Index = 0; Index < NumberOfChildren; Index++) {
|
||||
|
||||
Status = UnregisterAtaDevice (This, Controller, ChildHandleBuffer[Index]);
|
||||
if (EFI_ERROR (Status)) {
|
||||
AllChildrenStopped = FALSE;
|
||||
@@ -949,7 +951,6 @@ AtaBusDriverBindingStop (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Reset the Block Device.
|
||||
|
||||
@@ -964,13 +965,13 @@ AtaBusDriverBindingStop (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoReset (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||
|
||||
@@ -986,7 +987,6 @@ AtaBlockIoReset (
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Read/Write BufferSize bytes from Lba from/into Buffer.
|
||||
|
||||
@@ -1015,30 +1015,30 @@ AtaBlockIoReset (
|
||||
**/
|
||||
EFI_STATUS
|
||||
BlockIoReadWrite (
|
||||
IN VOID *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer,
|
||||
IN BOOLEAN IsBlockIo2,
|
||||
IN BOOLEAN IsWrite
|
||||
IN VOID *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer,
|
||||
IN BOOLEAN IsBlockIo2,
|
||||
IN BOOLEAN IsWrite
|
||||
)
|
||||
{
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_BLOCK_IO_MEDIA *Media;
|
||||
UINTN BlockSize;
|
||||
UINTN NumberOfBlocks;
|
||||
UINTN IoAlign;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_STATUS Status;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_BLOCK_IO_MEDIA *Media;
|
||||
UINTN BlockSize;
|
||||
UINTN NumberOfBlocks;
|
||||
UINTN IoAlign;
|
||||
|
||||
if (IsBlockIo2) {
|
||||
Media = ((EFI_BLOCK_IO2_PROTOCOL *) This)->Media;
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO2 (This);
|
||||
Media = ((EFI_BLOCK_IO2_PROTOCOL *)This)->Media;
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO2 (This);
|
||||
} else {
|
||||
Media = ((EFI_BLOCK_IO_PROTOCOL *) This)->Media;
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (This);
|
||||
Media = ((EFI_BLOCK_IO_PROTOCOL *)This)->Media;
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (This);
|
||||
}
|
||||
|
||||
if (MediaId != Media->MediaId) {
|
||||
@@ -1057,6 +1057,7 @@ BlockIoReadWrite (
|
||||
Token->TransactionStatus = EFI_SUCCESS;
|
||||
gBS->SignalEvent (Token->Event);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1065,13 +1066,13 @@ BlockIoReadWrite (
|
||||
return EFI_BAD_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
NumberOfBlocks = BufferSize / BlockSize;
|
||||
NumberOfBlocks = BufferSize / BlockSize;
|
||||
if ((Lba + NumberOfBlocks - 1) > Media->LastBlock) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
IoAlign = Media->IoAlign;
|
||||
if (IoAlign > 0 && (((UINTN) Buffer & (IoAlign - 1)) != 0)) {
|
||||
if ((IoAlign > 0) && (((UINTN)Buffer & (IoAlign - 1)) != 0)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -1087,7 +1088,6 @@ BlockIoReadWrite (
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Read BufferSize bytes from Lba into Buffer.
|
||||
|
||||
@@ -1110,17 +1110,16 @@ BlockIoReadWrite (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoReadBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
return BlockIoReadWrite ((VOID *) This, MediaId, Lba, NULL, BufferSize, Buffer, FALSE, FALSE);
|
||||
return BlockIoReadWrite ((VOID *)This, MediaId, Lba, NULL, BufferSize, Buffer, FALSE, FALSE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Write BufferSize bytes from Lba into Buffer.
|
||||
|
||||
@@ -1144,17 +1143,16 @@ AtaBlockIoReadBlocks (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoWriteBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return BlockIoReadWrite ((VOID *) This, MediaId, Lba, NULL, BufferSize, Buffer, FALSE, TRUE);
|
||||
return BlockIoReadWrite ((VOID *)This, MediaId, Lba, NULL, BufferSize, Buffer, FALSE, TRUE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Flush the Block Device.
|
||||
|
||||
@@ -1168,7 +1166,7 @@ AtaBlockIoWriteBlocks (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoFlushBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1195,9 +1193,9 @@ AtaBlockIoResetEx (
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
|
||||
|
||||
@@ -1252,10 +1250,9 @@ AtaBlockIoReadBlocksEx (
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
return BlockIoReadWrite ((VOID *) This, MediaId, Lba, Token, BufferSize, Buffer, TRUE, FALSE);
|
||||
return BlockIoReadWrite ((VOID *)This, MediaId, Lba, Token, BufferSize, Buffer, TRUE, FALSE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Write BufferSize bytes from Lba into Buffer.
|
||||
|
||||
@@ -1289,10 +1286,9 @@ AtaBlockIoWriteBlocksEx (
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
return BlockIoReadWrite ((VOID *) This, MediaId, Lba, Token, BufferSize, Buffer, TRUE, TRUE);
|
||||
return BlockIoReadWrite ((VOID *)This, MediaId, Lba, Token, BufferSize, Buffer, TRUE, TRUE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Flush the Block Device.
|
||||
|
||||
@@ -1314,12 +1310,14 @@ AtaBlockIoFlushBlocksEx (
|
||||
//
|
||||
// Signal event and return directly.
|
||||
//
|
||||
if (Token != NULL && Token->Event != NULL) {
|
||||
if ((Token != NULL) && (Token->Event != NULL)) {
|
||||
Token->TransactionStatus = EFI_SUCCESS;
|
||||
gBS->SignalEvent (Token->Event);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Provides inquiry information for the controller type.
|
||||
|
||||
@@ -1339,15 +1337,14 @@ AtaBlockIoFlushBlocksEx (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoInquiry (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *InquiryData,
|
||||
IN OUT UINT32 *InquiryDataSize
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *InquiryData,
|
||||
IN OUT UINT32 *InquiryDataSize
|
||||
)
|
||||
{
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Provides identify information for the controller type.
|
||||
|
||||
@@ -1369,13 +1366,13 @@ AtaDiskInfoInquiry (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoIdentify (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *IdentifyData,
|
||||
IN OUT UINT32 *IdentifyDataSize
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *IdentifyData,
|
||||
IN OUT UINT32 *IdentifyDataSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
|
||||
AtaDevice = ATA_DEVICE_FROM_DISK_INFO (This);
|
||||
|
||||
@@ -1384,12 +1381,12 @@ AtaDiskInfoIdentify (
|
||||
Status = EFI_SUCCESS;
|
||||
CopyMem (IdentifyData, AtaDevice->IdentifyData, sizeof (ATA_IDENTIFY_DATA));
|
||||
}
|
||||
|
||||
*IdentifyDataSize = sizeof (ATA_IDENTIFY_DATA);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Provides sense data information for the controller type.
|
||||
|
||||
@@ -1410,16 +1407,15 @@ AtaDiskInfoIdentify (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoSenseData (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *SenseData,
|
||||
IN OUT UINT32 *SenseDataSize,
|
||||
OUT UINT8 *SenseDataNumber
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *SenseData,
|
||||
IN OUT UINT32 *SenseDataSize,
|
||||
OUT UINT8 *SenseDataNumber
|
||||
)
|
||||
{
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
This function is used by the IDE bus driver to get controller information.
|
||||
|
||||
@@ -1434,16 +1430,16 @@ AtaDiskInfoSenseData (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoWhichIde (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
OUT UINT32 *IdeChannel,
|
||||
OUT UINT32 *IdeDevice
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
OUT UINT32 *IdeChannel,
|
||||
OUT UINT32 *IdeDevice
|
||||
)
|
||||
{
|
||||
ATA_DEVICE *AtaDevice;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
|
||||
AtaDevice = ATA_DEVICE_FROM_DISK_INFO (This);
|
||||
*IdeChannel = AtaDevice->Port;
|
||||
*IdeDevice = AtaDevice->PortMultiplierPort;
|
||||
AtaDevice = ATA_DEVICE_FROM_DISK_INFO (This);
|
||||
*IdeChannel = AtaDevice->Port;
|
||||
*IdeDevice = AtaDevice->PortMultiplierPort;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
@@ -1523,22 +1519,22 @@ AtaDiskInfoWhichIde (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaStorageSecurityReceiveData (
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
OUT VOID *PayloadBuffer,
|
||||
OUT UINTN *PayloadTransferSize
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
OUT VOID *PayloadBuffer,
|
||||
OUT UINTN *PayloadTransferSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *Private;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *Private;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "EFI Storage Security Protocol - Read\n"));
|
||||
if ((PayloadBuffer == NULL || PayloadTransferSize == NULL) && PayloadBufferSize != 0) {
|
||||
if (((PayloadBuffer == NULL) || (PayloadTransferSize == NULL)) && (PayloadBufferSize != 0)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
@@ -1634,18 +1630,18 @@ AtaStorageSecurityReceiveData (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaStorageSecuritySendData (
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
IN VOID *PayloadBuffer
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
IN VOID *PayloadBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *Private;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
ATA_DEVICE *Private;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
DEBUG ((DEBUG_INFO, "EFI Storage Security Protocol - Send\n"));
|
||||
if ((PayloadBuffer == NULL) && (PayloadBufferSize != 0)) {
|
||||
@@ -1687,12 +1683,12 @@ AtaStorageSecuritySendData (
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitializeAtaBus(
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
InitializeAtaBus (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Install driver model protocol(s).
|
||||
|
@@ -38,27 +38,27 @@
|
||||
//
|
||||
// Time out value for ATA pass through protocol
|
||||
//
|
||||
#define ATA_TIMEOUT EFI_TIMER_PERIOD_SECONDS (3)
|
||||
#define ATA_TIMEOUT EFI_TIMER_PERIOD_SECONDS (3)
|
||||
|
||||
//
|
||||
// Maximum number of times to retry ATA command
|
||||
//
|
||||
#define MAX_RETRY_TIMES 3
|
||||
#define MAX_RETRY_TIMES 3
|
||||
|
||||
//
|
||||
// The maximum total sectors count in 28 bit addressing mode
|
||||
//
|
||||
#define MAX_28BIT_ADDRESSING_CAPACITY 0xfffffff
|
||||
#define MAX_28BIT_ADDRESSING_CAPACITY 0xfffffff
|
||||
|
||||
//
|
||||
// The maximum ATA transaction sector count in 28 bit addressing mode.
|
||||
//
|
||||
#define MAX_28BIT_TRANSFER_BLOCK_NUM 0x100
|
||||
#define MAX_28BIT_TRANSFER_BLOCK_NUM 0x100
|
||||
|
||||
//
|
||||
// The maximum ATA transaction sector count in 48 bit addressing mode.
|
||||
//
|
||||
//#define MAX_48BIT_TRANSFER_BLOCK_NUM 0x10000
|
||||
// #define MAX_48BIT_TRANSFER_BLOCK_NUM 0x10000
|
||||
|
||||
//
|
||||
// BugBug: if the TransferLength is equal with 0x10000 (the 48bit max length),
|
||||
@@ -66,109 +66,109 @@
|
||||
// seems not ready. Change the Maximum Sector Numbers to 0xFFFF to work round
|
||||
// this issue.
|
||||
//
|
||||
#define MAX_48BIT_TRANSFER_BLOCK_NUM 0xFFFF
|
||||
#define MAX_48BIT_TRANSFER_BLOCK_NUM 0xFFFF
|
||||
|
||||
//
|
||||
// The maximum model name in ATA identify data
|
||||
//
|
||||
#define MAX_MODEL_NAME_LEN 40
|
||||
#define MAX_MODEL_NAME_LEN 40
|
||||
|
||||
#define ATA_TASK_SIGNATURE SIGNATURE_32 ('A', 'T', 'S', 'K')
|
||||
#define ATA_DEVICE_SIGNATURE SIGNATURE_32 ('A', 'B', 'I', 'D')
|
||||
#define ATA_SUB_TASK_SIGNATURE SIGNATURE_32 ('A', 'S', 'T', 'S')
|
||||
#define IS_ALIGNED(addr, size) (((UINTN) (addr) & (size - 1)) == 0)
|
||||
#define ATA_TASK_SIGNATURE SIGNATURE_32 ('A', 'T', 'S', 'K')
|
||||
#define ATA_DEVICE_SIGNATURE SIGNATURE_32 ('A', 'B', 'I', 'D')
|
||||
#define ATA_SUB_TASK_SIGNATURE SIGNATURE_32 ('A', 'S', 'T', 'S')
|
||||
#define IS_ALIGNED(addr, size) (((UINTN) (addr) & (size - 1)) == 0)
|
||||
|
||||
//
|
||||
// ATA bus data structure for ATA controller
|
||||
//
|
||||
typedef struct {
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_HANDLE Controller;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
EFI_HANDLE DriverBindingHandle;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_HANDLE Controller;
|
||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;
|
||||
EFI_HANDLE DriverBindingHandle;
|
||||
} ATA_BUS_DRIVER_DATA;
|
||||
|
||||
//
|
||||
// ATA device data structure for each child device
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
UINT32 Signature;
|
||||
|
||||
EFI_HANDLE Handle;
|
||||
EFI_BLOCK_IO_PROTOCOL BlockIo;
|
||||
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
|
||||
EFI_BLOCK_IO_MEDIA BlockMedia;
|
||||
EFI_DISK_INFO_PROTOCOL DiskInfo;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL StorageSecurity;
|
||||
EFI_HANDLE Handle;
|
||||
EFI_BLOCK_IO_PROTOCOL BlockIo;
|
||||
EFI_BLOCK_IO2_PROTOCOL BlockIo2;
|
||||
EFI_BLOCK_IO_MEDIA BlockMedia;
|
||||
EFI_DISK_INFO_PROTOCOL DiskInfo;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL StorageSecurity;
|
||||
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
ATA_BUS_DRIVER_DATA *AtaBusDriverData;
|
||||
UINT16 Port;
|
||||
UINT16 PortMultiplierPort;
|
||||
|
||||
//
|
||||
// Buffer for the execution of ATA pass through protocol
|
||||
//
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_ATA_COMMAND_BLOCK Acb;
|
||||
EFI_ATA_STATUS_BLOCK *Asb;
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET Packet;
|
||||
EFI_ATA_COMMAND_BLOCK Acb;
|
||||
EFI_ATA_STATUS_BLOCK *Asb;
|
||||
|
||||
BOOLEAN UdmaValid;
|
||||
BOOLEAN Lba48Bit;
|
||||
BOOLEAN UdmaValid;
|
||||
BOOLEAN Lba48Bit;
|
||||
|
||||
//
|
||||
// Cached data for ATA identify data
|
||||
//
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
|
||||
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
|
||||
CHAR16 ModelName[MAX_MODEL_NAME_LEN + 1];
|
||||
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
|
||||
CHAR16 ModelName[MAX_MODEL_NAME_LEN + 1];
|
||||
|
||||
LIST_ENTRY AtaTaskList;
|
||||
LIST_ENTRY AtaSubTaskList;
|
||||
BOOLEAN Abort;
|
||||
LIST_ENTRY AtaTaskList;
|
||||
LIST_ENTRY AtaSubTaskList;
|
||||
BOOLEAN Abort;
|
||||
} ATA_DEVICE;
|
||||
|
||||
//
|
||||
// Sub-Task for the non blocking I/O
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_BLOCK_IO2_TOKEN *Token;
|
||||
UINTN *UnsignalledEventCount;
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET Packet;
|
||||
BOOLEAN *IsError;// Indicate whether meeting error during source allocation for new task.
|
||||
LIST_ENTRY TaskEntry;
|
||||
UINT32 Signature;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
EFI_BLOCK_IO2_TOKEN *Token;
|
||||
UINTN *UnsignalledEventCount;
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET Packet;
|
||||
BOOLEAN *IsError;// Indicate whether meeting error during source allocation for new task.
|
||||
LIST_ENTRY TaskEntry;
|
||||
} ATA_BUS_ASYN_SUB_TASK;
|
||||
|
||||
//
|
||||
// Task for the non blocking I/O
|
||||
//
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
EFI_BLOCK_IO2_TOKEN *Token;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
UINT8 *Buffer;
|
||||
EFI_LBA StartLba;
|
||||
UINTN NumberOfBlocks;
|
||||
BOOLEAN IsWrite;
|
||||
LIST_ENTRY TaskEntry;
|
||||
UINT32 Signature;
|
||||
EFI_BLOCK_IO2_TOKEN *Token;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
UINT8 *Buffer;
|
||||
EFI_LBA StartLba;
|
||||
UINTN NumberOfBlocks;
|
||||
BOOLEAN IsWrite;
|
||||
LIST_ENTRY TaskEntry;
|
||||
} ATA_BUS_ASYN_TASK;
|
||||
|
||||
#define ATA_DEVICE_FROM_BLOCK_IO(a) CR (a, ATA_DEVICE, BlockIo, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_BLOCK_IO2(a) CR (a, ATA_DEVICE, BlockIo2, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_DISK_INFO(a) CR (a, ATA_DEVICE, DiskInfo, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_STORAGE_SECURITY(a) CR (a, ATA_DEVICE, StorageSecurity, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_ASYN_SUB_TASK_FROM_ENTRY(a) CR (a, ATA_BUS_ASYN_SUB_TASK, TaskEntry, ATA_SUB_TASK_SIGNATURE)
|
||||
#define ATA_ASYN_TASK_FROM_ENTRY(a) CR (a, ATA_BUS_ASYN_TASK, TaskEntry, ATA_TASK_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_BLOCK_IO(a) CR (a, ATA_DEVICE, BlockIo, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_BLOCK_IO2(a) CR (a, ATA_DEVICE, BlockIo2, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_DISK_INFO(a) CR (a, ATA_DEVICE, DiskInfo, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_DEVICE_FROM_STORAGE_SECURITY(a) CR (a, ATA_DEVICE, StorageSecurity, ATA_DEVICE_SIGNATURE)
|
||||
#define ATA_ASYN_SUB_TASK_FROM_ENTRY(a) CR (a, ATA_BUS_ASYN_SUB_TASK, TaskEntry, ATA_SUB_TASK_SIGNATURE)
|
||||
#define ATA_ASYN_TASK_FROM_ENTRY(a) CR (a, ATA_BUS_ASYN_TASK, TaskEntry, ATA_TASK_SIGNATURE)
|
||||
|
||||
//
|
||||
// Global Variables
|
||||
//
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gAtaBusDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gAtaBusComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gAtaBusComponentName2;
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gAtaBusDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gAtaBusComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gAtaBusComponentName2;
|
||||
|
||||
/**
|
||||
Allocates an aligned buffer for ATA device.
|
||||
@@ -185,8 +185,8 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gAtaBusComponentName2;
|
||||
**/
|
||||
VOID *
|
||||
AllocateAlignedBuffer (
|
||||
IN ATA_DEVICE *AtaDevice,
|
||||
IN UINTN BufferSize
|
||||
IN ATA_DEVICE *AtaDevice,
|
||||
IN UINTN BufferSize
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -201,8 +201,8 @@ AllocateAlignedBuffer (
|
||||
**/
|
||||
VOID
|
||||
FreeAlignedBuffer (
|
||||
IN VOID *Buffer,
|
||||
IN UINTN BufferSize
|
||||
IN VOID *Buffer,
|
||||
IN UINTN BufferSize
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -230,10 +230,9 @@ FreeAtaSubTask (
|
||||
**/
|
||||
EFI_STATUS
|
||||
ResetAtaDevice (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Discovers whether it is a valid ATA device.
|
||||
|
||||
@@ -250,7 +249,7 @@ ResetAtaDevice (
|
||||
**/
|
||||
EFI_STATUS
|
||||
DiscoverAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -272,13 +271,13 @@ DiscoverAtaDevice (
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AccessAtaDevice(
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT UINT8 *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINTN NumberOfBlocks,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token
|
||||
AccessAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT UINT8 *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINTN NumberOfBlocks,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -313,19 +312,20 @@ AccessAtaDevice(
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
TrustTransferAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT VOID *Buffer,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN TransferLength,
|
||||
IN BOOLEAN IsTrustSend,
|
||||
IN UINT64 Timeout,
|
||||
OUT UINTN *TransferLengthOut
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT VOID *Buffer,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN TransferLength,
|
||||
IN BOOLEAN IsTrustSend,
|
||||
IN UINT64 Timeout,
|
||||
OUT UINTN *TransferLengthOut
|
||||
);
|
||||
|
||||
//
|
||||
// Protocol interface prototypes
|
||||
//
|
||||
|
||||
/**
|
||||
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.
|
||||
@@ -448,13 +448,12 @@ AtaBusDriverBindingStart (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBusDriverBindingStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
@@ -502,7 +501,6 @@ AtaBusComponentNameGetDriverName (
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
@@ -574,14 +572,13 @@ AtaBusComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBusComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Reset the Block Device.
|
||||
|
||||
@@ -596,11 +593,10 @@ AtaBusComponentNameGetControllerName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoReset (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Read BufferSize bytes from Lba into Buffer.
|
||||
|
||||
@@ -623,14 +619,13 @@ AtaBlockIoReset (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoReadBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Write BufferSize bytes from Lba into Buffer.
|
||||
|
||||
@@ -654,14 +649,13 @@ AtaBlockIoReadBlocks (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoWriteBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Flush the Block Device.
|
||||
|
||||
@@ -675,7 +669,7 @@ AtaBlockIoWriteBlocks (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBlockIoFlushBlocks (
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -797,7 +791,7 @@ AtaBlockIoFlushBlocksEx (
|
||||
VOID
|
||||
EFIAPI
|
||||
AtaTerminateNonBlockingTask (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -819,12 +813,11 @@ AtaTerminateNonBlockingTask (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoInquiry (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *InquiryData,
|
||||
IN OUT UINT32 *InquiryDataSize
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *InquiryData,
|
||||
IN OUT UINT32 *InquiryDataSize
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Provides identify information for the controller type.
|
||||
|
||||
@@ -846,12 +839,11 @@ AtaDiskInfoInquiry (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoIdentify (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *IdentifyData,
|
||||
IN OUT UINT32 *IdentifyDataSize
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *IdentifyData,
|
||||
IN OUT UINT32 *IdentifyDataSize
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Provides sense data information for the controller type.
|
||||
|
||||
@@ -872,13 +864,12 @@ AtaDiskInfoIdentify (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoSenseData (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *SenseData,
|
||||
IN OUT UINT32 *SenseDataSize,
|
||||
OUT UINT8 *SenseDataNumber
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
IN OUT VOID *SenseData,
|
||||
IN OUT UINT32 *SenseDataSize,
|
||||
OUT UINT8 *SenseDataNumber
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
This function is used by the IDE bus driver to get controller information.
|
||||
|
||||
@@ -893,9 +884,9 @@ AtaDiskInfoSenseData (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaDiskInfoWhichIde (
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
OUT UINT32 *IdeChannel,
|
||||
OUT UINT32 *IdeDevice
|
||||
IN EFI_DISK_INFO_PROTOCOL *This,
|
||||
OUT UINT32 *IdeChannel,
|
||||
OUT UINT32 *IdeDevice
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -973,14 +964,14 @@ AtaDiskInfoWhichIde (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaStorageSecurityReceiveData (
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
OUT VOID *PayloadBuffer,
|
||||
OUT UINTN *PayloadTransferSize
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
OUT VOID *PayloadBuffer,
|
||||
OUT UINTN *PayloadTransferSize
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -1047,13 +1038,13 @@ AtaStorageSecurityReceiveData (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaStorageSecuritySendData (
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
IN VOID *PayloadBuffer
|
||||
IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN UINT64 Timeout,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN PayloadBufferSize,
|
||||
IN VOID *PayloadBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -1069,7 +1060,7 @@ AtaStorageSecuritySendData (
|
||||
**/
|
||||
VOID
|
||||
InitiateTPerReset (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
);
|
||||
|
||||
#endif
|
||||
|
@@ -19,16 +19,16 @@
|
||||
|
||||
#include "AtaBus.h"
|
||||
|
||||
#define ATA_CMD_TRUST_NON_DATA 0x5B
|
||||
#define ATA_CMD_TRUST_RECEIVE 0x5C
|
||||
#define ATA_CMD_TRUST_RECEIVE_DMA 0x5D
|
||||
#define ATA_CMD_TRUST_SEND 0x5E
|
||||
#define ATA_CMD_TRUST_SEND_DMA 0x5F
|
||||
#define ATA_CMD_TRUST_NON_DATA 0x5B
|
||||
#define ATA_CMD_TRUST_RECEIVE 0x5C
|
||||
#define ATA_CMD_TRUST_RECEIVE_DMA 0x5D
|
||||
#define ATA_CMD_TRUST_SEND 0x5E
|
||||
#define ATA_CMD_TRUST_SEND_DMA 0x5F
|
||||
|
||||
//
|
||||
// Look up table (UdmaValid, IsWrite) for EFI_ATA_PASS_THRU_CMD_PROTOCOL
|
||||
//
|
||||
EFI_ATA_PASS_THRU_CMD_PROTOCOL mAtaPassThruCmdProtocols[][2] = {
|
||||
EFI_ATA_PASS_THRU_CMD_PROTOCOL mAtaPassThruCmdProtocols[][2] = {
|
||||
{
|
||||
EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN,
|
||||
EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_OUT
|
||||
@@ -42,7 +42,7 @@ EFI_ATA_PASS_THRU_CMD_PROTOCOL mAtaPassThruCmdProtocols[][2] = {
|
||||
//
|
||||
// Look up table (UdmaValid, Lba48Bit, IsIsWrite) for ATA_CMD
|
||||
//
|
||||
UINT8 mAtaCommands[][2][2] = {
|
||||
UINT8 mAtaCommands[][2][2] = {
|
||||
{
|
||||
{
|
||||
ATA_CMD_READ_SECTORS, // 28-bit LBA; PIO read
|
||||
@@ -68,7 +68,7 @@ UINT8 mAtaCommands[][2][2] = {
|
||||
//
|
||||
// Look up table (UdmaValid, IsTrustSend) for ATA_CMD
|
||||
//
|
||||
UINT8 mAtaTrustCommands[2][2] = {
|
||||
UINT8 mAtaTrustCommands[2][2] = {
|
||||
{
|
||||
ATA_CMD_TRUST_RECEIVE, // PIO read
|
||||
ATA_CMD_TRUST_SEND // PIO write
|
||||
@@ -79,16 +79,14 @@ UINT8 mAtaTrustCommands[2][2] = {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Look up table (Lba48Bit) for maximum transfer block number
|
||||
//
|
||||
UINTN mMaxTransferBlockNumber[] = {
|
||||
UINTN mMaxTransferBlockNumber[] = {
|
||||
MAX_28BIT_TRANSFER_BLOCK_NUM,
|
||||
MAX_48BIT_TRANSFER_BLOCK_NUM
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
Wrapper for EFI_ATA_PASS_THRU_PROTOCOL.PassThru().
|
||||
|
||||
@@ -112,21 +110,21 @@ UINTN mMaxTransferBlockNumber[] = {
|
||||
**/
|
||||
EFI_STATUS
|
||||
AtaDevicePassThru (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,
|
||||
IN OUT EFI_EVENT Event OPTIONAL
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,
|
||||
IN OUT EFI_EVENT Event OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
EFI_STATUS Status;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet;
|
||||
|
||||
//
|
||||
// Assemble packet. If it is non blocking mode, the Ata driver should keep each
|
||||
// subtask and clean them when the event is signaled.
|
||||
//
|
||||
if (TaskPacket != NULL) {
|
||||
Packet = TaskPacket;
|
||||
Packet = TaskPacket;
|
||||
Packet->Asb = AllocateAlignedBuffer (AtaDevice, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
if (Packet->Asb == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
@@ -135,7 +133,7 @@ AtaDevicePassThru (
|
||||
CopyMem (Packet->Asb, AtaDevice->Asb, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
Packet->Acb = AllocateCopyPool (sizeof (EFI_ATA_COMMAND_BLOCK), &AtaDevice->Acb);
|
||||
} else {
|
||||
Packet = &AtaDevice->Packet;
|
||||
Packet = &AtaDevice->Packet;
|
||||
Packet->Asb = AtaDevice->Asb;
|
||||
Packet->Acb = &AtaDevice->Acb;
|
||||
}
|
||||
@@ -159,7 +157,6 @@ AtaDevicePassThru (
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Wrapper for EFI_ATA_PASS_THRU_PROTOCOL.ResetDevice().
|
||||
|
||||
@@ -173,10 +170,10 @@ AtaDevicePassThru (
|
||||
**/
|
||||
EFI_STATUS
|
||||
ResetAtaDevice (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
|
||||
|
||||
AtaPassThru = AtaDevice->AtaBusDriverData->AtaPassThru;
|
||||
|
||||
@@ -196,7 +193,6 @@ ResetAtaDevice (
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Prints ATA model name to ATA device structure.
|
||||
|
||||
@@ -216,20 +212,20 @@ PrintAtaModelName (
|
||||
CHAR8 *Source;
|
||||
CHAR16 *Destination;
|
||||
|
||||
Source = AtaDevice->IdentifyData->ModelName;
|
||||
Source = AtaDevice->IdentifyData->ModelName;
|
||||
Destination = AtaDevice->ModelName;
|
||||
|
||||
//
|
||||
// Swap the byte order in the original module name.
|
||||
//
|
||||
for (Index = 0; Index < MAX_MODEL_NAME_LEN; Index += 2) {
|
||||
Destination[Index] = Source[Index + 1];
|
||||
Destination[Index + 1] = Source[Index];
|
||||
Destination[Index] = Source[Index + 1];
|
||||
Destination[Index + 1] = Source[Index];
|
||||
}
|
||||
|
||||
AtaDevice->ModelName[MAX_MODEL_NAME_LEN] = L'\0';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Gets ATA device Capacity according to ATA 6.
|
||||
|
||||
@@ -244,13 +240,13 @@ PrintAtaModelName (
|
||||
**/
|
||||
EFI_LBA
|
||||
GetAtapi6Capacity (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
EFI_LBA Capacity;
|
||||
EFI_LBA TmpLba;
|
||||
UINTN Index;
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
EFI_LBA Capacity;
|
||||
EFI_LBA TmpLba;
|
||||
UINTN Index;
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
|
||||
IdentifyData = AtaDevice->IdentifyData;
|
||||
if ((IdentifyData->command_set_supported_83 & BIT10) == 0) {
|
||||
@@ -268,14 +264,13 @@ GetAtapi6Capacity (
|
||||
//
|
||||
// Lower byte goes first: word[100] is the lowest word, word[103] is highest
|
||||
//
|
||||
TmpLba = IdentifyData->maximum_lba_for_48bit_addressing[Index];
|
||||
TmpLba = IdentifyData->maximum_lba_for_48bit_addressing[Index];
|
||||
Capacity |= LShiftU64 (TmpLba, 16 * Index);
|
||||
}
|
||||
|
||||
return Capacity;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Identifies ATA device via the Identify data.
|
||||
|
||||
@@ -291,14 +286,14 @@ GetAtapi6Capacity (
|
||||
**/
|
||||
EFI_STATUS
|
||||
IdentifyAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
EFI_BLOCK_IO_MEDIA *BlockMedia;
|
||||
EFI_LBA Capacity;
|
||||
UINT16 PhyLogicSectorSupport;
|
||||
UINT16 UdmaMode;
|
||||
ATA_IDENTIFY_DATA *IdentifyData;
|
||||
EFI_BLOCK_IO_MEDIA *BlockMedia;
|
||||
EFI_LBA Capacity;
|
||||
UINT16 PhyLogicSectorSupport;
|
||||
UINT16 UdmaMode;
|
||||
|
||||
IdentifyData = AtaDevice->IdentifyData;
|
||||
|
||||
@@ -334,16 +329,16 @@ IdentifyAtaDevice (
|
||||
//
|
||||
// This is a hard disk <= 120GB capacity, treat it as normal hard disk
|
||||
//
|
||||
Capacity = ((UINT32)IdentifyData->user_addressable_sectors_hi << 16) | IdentifyData->user_addressable_sectors_lo;
|
||||
Capacity = ((UINT32)IdentifyData->user_addressable_sectors_hi << 16) | IdentifyData->user_addressable_sectors_lo;
|
||||
AtaDevice->Lba48Bit = FALSE;
|
||||
}
|
||||
|
||||
//
|
||||
// Block Media Information:
|
||||
//
|
||||
BlockMedia = &AtaDevice->BlockMedia;
|
||||
BlockMedia = &AtaDevice->BlockMedia;
|
||||
BlockMedia->LastBlock = Capacity - 1;
|
||||
BlockMedia->IoAlign = AtaDevice->AtaBusDriverData->AtaPassThru->Mode->IoAlign;
|
||||
BlockMedia->IoAlign = AtaDevice->AtaBusDriverData->AtaPassThru->Mode->IoAlign;
|
||||
//
|
||||
// Check whether Long Physical Sector Feature is supported
|
||||
//
|
||||
@@ -353,23 +348,26 @@ IdentifyAtaDevice (
|
||||
// Check whether one physical block contains multiple physical blocks
|
||||
//
|
||||
if ((PhyLogicSectorSupport & BIT13) != 0) {
|
||||
BlockMedia->LogicalBlocksPerPhysicalBlock = (UINT32) (1 << (PhyLogicSectorSupport & 0x000f));
|
||||
BlockMedia->LogicalBlocksPerPhysicalBlock = (UINT32)(1 << (PhyLogicSectorSupport & 0x000f));
|
||||
//
|
||||
// Check lowest alignment of logical blocks within physical block
|
||||
//
|
||||
if ((IdentifyData->alignment_logic_in_phy_blocks & (BIT14 | BIT15)) == BIT14) {
|
||||
BlockMedia->LowestAlignedLba = (EFI_LBA) ((BlockMedia->LogicalBlocksPerPhysicalBlock - ((UINT32)IdentifyData->alignment_logic_in_phy_blocks & 0x3fff)) %
|
||||
BlockMedia->LogicalBlocksPerPhysicalBlock);
|
||||
BlockMedia->LowestAlignedLba = (EFI_LBA)((BlockMedia->LogicalBlocksPerPhysicalBlock - ((UINT32)IdentifyData->alignment_logic_in_phy_blocks & 0x3fff)) %
|
||||
BlockMedia->LogicalBlocksPerPhysicalBlock);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Check logical block size
|
||||
//
|
||||
if ((PhyLogicSectorSupport & BIT12) != 0) {
|
||||
BlockMedia->BlockSize = (UINT32) (((IdentifyData->logic_sector_size_hi << 16) | IdentifyData->logic_sector_size_lo) * sizeof (UINT16));
|
||||
BlockMedia->BlockSize = (UINT32)(((IdentifyData->logic_sector_size_hi << 16) | IdentifyData->logic_sector_size_lo) * sizeof (UINT16));
|
||||
}
|
||||
|
||||
AtaDevice->BlockIo.Revision = EFI_BLOCK_IO_PROTOCOL_REVISION2;
|
||||
}
|
||||
|
||||
//
|
||||
// Get ATA model name from identify data structure.
|
||||
//
|
||||
@@ -378,7 +376,6 @@ IdentifyAtaDevice (
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Discovers whether it is a valid ATA device.
|
||||
|
||||
@@ -395,7 +392,7 @@ IdentifyAtaDevice (
|
||||
**/
|
||||
EFI_STATUS
|
||||
DiscoverAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
IN OUT ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -406,19 +403,19 @@ DiscoverAtaDevice (
|
||||
//
|
||||
// Prepare for ATA command block.
|
||||
//
|
||||
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));
|
||||
Acb->AtaCommand = ATA_CMD_IDENTIFY_DRIVE;
|
||||
Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));
|
||||
Acb->AtaCommand = ATA_CMD_IDENTIFY_DRIVE;
|
||||
Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
|
||||
//
|
||||
// Prepare for ATA pass through packet.
|
||||
//
|
||||
Packet = ZeroMem (&AtaDevice->Packet, sizeof (EFI_ATA_PASS_THRU_COMMAND_PACKET));
|
||||
Packet->InDataBuffer = AtaDevice->IdentifyData;
|
||||
Packet = ZeroMem (&AtaDevice->Packet, sizeof (EFI_ATA_PASS_THRU_COMMAND_PACKET));
|
||||
Packet->InDataBuffer = AtaDevice->IdentifyData;
|
||||
Packet->InTransferLength = sizeof (ATA_IDENTIFY_DATA);
|
||||
Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN;
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES | EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;
|
||||
Packet->Timeout = ATA_TIMEOUT;
|
||||
Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_PIO_DATA_IN;
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES | EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;
|
||||
Packet->Timeout = ATA_TIMEOUT;
|
||||
|
||||
Retry = MAX_RETRY_TIMES;
|
||||
do {
|
||||
@@ -463,13 +460,13 @@ DiscoverAtaDevice (
|
||||
**/
|
||||
EFI_STATUS
|
||||
TransferAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,
|
||||
IN OUT VOID *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINT32 TransferLength,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *TaskPacket OPTIONAL,
|
||||
IN OUT VOID *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINT32 TransferLength,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN EFI_EVENT Event OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_ATA_COMMAND_BLOCK *Acb;
|
||||
@@ -478,26 +475,26 @@ TransferAtaDevice (
|
||||
//
|
||||
// Ensure AtaDevice->UdmaValid, AtaDevice->Lba48Bit and IsWrite are valid boolean values
|
||||
//
|
||||
ASSERT ((UINTN) AtaDevice->UdmaValid < 2);
|
||||
ASSERT ((UINTN) AtaDevice->Lba48Bit < 2);
|
||||
ASSERT ((UINTN) IsWrite < 2);
|
||||
ASSERT ((UINTN)AtaDevice->UdmaValid < 2);
|
||||
ASSERT ((UINTN)AtaDevice->Lba48Bit < 2);
|
||||
ASSERT ((UINTN)IsWrite < 2);
|
||||
//
|
||||
// Prepare for ATA command block.
|
||||
//
|
||||
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));
|
||||
Acb->AtaCommand = mAtaCommands[AtaDevice->UdmaValid][AtaDevice->Lba48Bit][IsWrite];
|
||||
Acb->AtaSectorNumber = (UINT8) StartLba;
|
||||
Acb->AtaCylinderLow = (UINT8) RShiftU64 (StartLba, 8);
|
||||
Acb->AtaCylinderHigh = (UINT8) RShiftU64 (StartLba, 16);
|
||||
Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
Acb->AtaSectorCount = (UINT8) TransferLength;
|
||||
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));
|
||||
Acb->AtaCommand = mAtaCommands[AtaDevice->UdmaValid][AtaDevice->Lba48Bit][IsWrite];
|
||||
Acb->AtaSectorNumber = (UINT8)StartLba;
|
||||
Acb->AtaCylinderLow = (UINT8)RShiftU64 (StartLba, 8);
|
||||
Acb->AtaCylinderHigh = (UINT8)RShiftU64 (StartLba, 16);
|
||||
Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
Acb->AtaSectorCount = (UINT8)TransferLength;
|
||||
if (AtaDevice->Lba48Bit) {
|
||||
Acb->AtaSectorNumberExp = (UINT8) RShiftU64 (StartLba, 24);
|
||||
Acb->AtaCylinderLowExp = (UINT8) RShiftU64 (StartLba, 32);
|
||||
Acb->AtaCylinderHighExp = (UINT8) RShiftU64 (StartLba, 40);
|
||||
Acb->AtaSectorCountExp = (UINT8) (TransferLength >> 8);
|
||||
Acb->AtaSectorNumberExp = (UINT8)RShiftU64 (StartLba, 24);
|
||||
Acb->AtaCylinderLowExp = (UINT8)RShiftU64 (StartLba, 32);
|
||||
Acb->AtaCylinderHighExp = (UINT8)RShiftU64 (StartLba, 40);
|
||||
Acb->AtaSectorCountExp = (UINT8)(TransferLength >> 8);
|
||||
} else {
|
||||
Acb->AtaDeviceHead = (UINT8) (Acb->AtaDeviceHead | RShiftU64 (StartLba, 24));
|
||||
Acb->AtaDeviceHead = (UINT8)(Acb->AtaDeviceHead | RShiftU64 (StartLba, 24));
|
||||
}
|
||||
|
||||
//
|
||||
@@ -510,15 +507,15 @@ TransferAtaDevice (
|
||||
}
|
||||
|
||||
if (IsWrite) {
|
||||
Packet->OutDataBuffer = Buffer;
|
||||
Packet->OutDataBuffer = Buffer;
|
||||
Packet->OutTransferLength = TransferLength;
|
||||
} else {
|
||||
Packet->InDataBuffer = Buffer;
|
||||
Packet->InDataBuffer = Buffer;
|
||||
Packet->InTransferLength = TransferLength;
|
||||
}
|
||||
|
||||
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsWrite];
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_SECTOR_COUNT;
|
||||
//
|
||||
// |------------------------|-----------------|------------------------|-----------------|
|
||||
// | ATA PIO Transfer Mode | Transfer Rate | ATA DMA Transfer Mode | Transfer Rate |
|
||||
@@ -544,12 +541,12 @@ TransferAtaDevice (
|
||||
//
|
||||
// Calculate the maximum timeout value for DMA read/write operation.
|
||||
//
|
||||
Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 2100000) + 31);
|
||||
Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 2100000) + 31);
|
||||
} else {
|
||||
//
|
||||
// Calculate the maximum timeout value for PIO read/write operation
|
||||
//
|
||||
Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 3300000) + 31);
|
||||
Packet->Timeout = EFI_TIMER_PERIOD_SECONDS (DivU64x32 (MultU64x32 (TransferLength, AtaDevice->BlockMedia.BlockSize), 3300000) + 31);
|
||||
}
|
||||
|
||||
return AtaDevicePassThru (AtaDevice, TaskPacket, Event);
|
||||
@@ -570,6 +567,7 @@ FreeAtaSubTask (
|
||||
if (Task->Packet.Asb != NULL) {
|
||||
FreeAlignedBuffer (Task->Packet.Asb, sizeof (EFI_ATA_STATUS_BLOCK));
|
||||
}
|
||||
|
||||
if (Task->Packet.Acb != NULL) {
|
||||
FreePool (Task->Packet.Acb);
|
||||
}
|
||||
@@ -590,14 +588,14 @@ FreeAtaSubTask (
|
||||
VOID
|
||||
EFIAPI
|
||||
AtaTerminateNonBlockingTask (
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
IN ATA_DEVICE *AtaDevice
|
||||
)
|
||||
{
|
||||
BOOLEAN SubTaskEmpty;
|
||||
EFI_TPL OldTpl;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
LIST_ENTRY *Entry;
|
||||
LIST_ENTRY *List;
|
||||
BOOLEAN SubTaskEmpty;
|
||||
EFI_TPL OldTpl;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
LIST_ENTRY *Entry;
|
||||
LIST_ENTRY *List;
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
//
|
||||
@@ -607,13 +605,14 @@ AtaTerminateNonBlockingTask (
|
||||
|
||||
List = &AtaDevice->AtaTaskList;
|
||||
for (Entry = GetFirstNode (List); !IsNull (List, Entry);) {
|
||||
AtaTask = ATA_ASYN_TASK_FROM_ENTRY (Entry);
|
||||
AtaTask = ATA_ASYN_TASK_FROM_ENTRY (Entry);
|
||||
AtaTask->Token->TransactionStatus = EFI_ABORTED;
|
||||
gBS->SignalEvent (AtaTask->Token->Event);
|
||||
|
||||
Entry = RemoveEntryList (Entry);
|
||||
FreePool (AtaTask);
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
|
||||
do {
|
||||
@@ -628,7 +627,7 @@ AtaTerminateNonBlockingTask (
|
||||
//
|
||||
// Aborting operation has been done. From now on, don't need to abort normal operation.
|
||||
//
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
AtaDevice->Abort = FALSE;
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
}
|
||||
@@ -644,17 +643,17 @@ AtaTerminateNonBlockingTask (
|
||||
VOID
|
||||
EFIAPI
|
||||
AtaNonBlockingCallBack (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
{
|
||||
ATA_BUS_ASYN_SUB_TASK *Task;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
LIST_ENTRY *Entry;
|
||||
EFI_STATUS Status;
|
||||
ATA_BUS_ASYN_SUB_TASK *Task;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
ATA_DEVICE *AtaDevice;
|
||||
LIST_ENTRY *Entry;
|
||||
EFI_STATUS Status;
|
||||
|
||||
Task = (ATA_BUS_ASYN_SUB_TASK *) Context;
|
||||
Task = (ATA_BUS_ASYN_SUB_TASK *)Context;
|
||||
gBS->CloseEvent (Event);
|
||||
|
||||
AtaDevice = Task->AtaDevice;
|
||||
@@ -682,7 +681,7 @@ AtaNonBlockingCallBack (
|
||||
//
|
||||
// Reduce the SubEventCount, till it comes to zero.
|
||||
//
|
||||
(*Task->UnsignalledEventCount) --;
|
||||
(*Task->UnsignalledEventCount)--;
|
||||
DEBUG ((DEBUG_BLKIO, "UnsignalledEventCount = %d\n", *Task->UnsignalledEventCount));
|
||||
|
||||
//
|
||||
@@ -702,7 +701,6 @@ AtaNonBlockingCallBack (
|
||||
FreePool (Task->UnsignalledEventCount);
|
||||
FreePool (Task->IsError);
|
||||
|
||||
|
||||
//
|
||||
// Finish all subtasks and move to the next task in AtaTaskList.
|
||||
//
|
||||
@@ -723,6 +721,7 @@ AtaNonBlockingCallBack (
|
||||
AtaTask->Token->TransactionStatus = Status;
|
||||
gBS->SignalEvent (AtaTask->Token->Event);
|
||||
}
|
||||
|
||||
RemoveEntryList (Entry);
|
||||
FreePool (AtaTask);
|
||||
}
|
||||
@@ -763,27 +762,27 @@ AtaNonBlockingCallBack (
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AccessAtaDevice(
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT UINT8 *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINTN NumberOfBlocks,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token
|
||||
AccessAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT UINT8 *Buffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINTN NumberOfBlocks,
|
||||
IN BOOLEAN IsWrite,
|
||||
IN OUT EFI_BLOCK_IO2_TOKEN *Token
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN MaxTransferBlockNumber;
|
||||
UINTN TransferBlockNumber;
|
||||
UINTN BlockSize;
|
||||
ATA_BUS_ASYN_SUB_TASK *SubTask;
|
||||
UINTN *EventCount;
|
||||
UINTN TempCount;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
EFI_EVENT SubEvent;
|
||||
UINTN Index;
|
||||
BOOLEAN *IsError;
|
||||
EFI_TPL OldTpl;
|
||||
EFI_STATUS Status;
|
||||
UINTN MaxTransferBlockNumber;
|
||||
UINTN TransferBlockNumber;
|
||||
UINTN BlockSize;
|
||||
ATA_BUS_ASYN_SUB_TASK *SubTask;
|
||||
UINTN *EventCount;
|
||||
UINTN TempCount;
|
||||
ATA_BUS_ASYN_TASK *AtaTask;
|
||||
EFI_EVENT SubEvent;
|
||||
UINTN Index;
|
||||
BOOLEAN *IsError;
|
||||
EFI_TPL OldTpl;
|
||||
|
||||
TempCount = 0;
|
||||
Status = EFI_SUCCESS;
|
||||
@@ -797,7 +796,7 @@ AccessAtaDevice(
|
||||
//
|
||||
// Ensure AtaDevice->Lba48Bit is a valid boolean value
|
||||
//
|
||||
ASSERT ((UINTN) AtaDevice->Lba48Bit < 2);
|
||||
ASSERT ((UINTN)AtaDevice->Lba48Bit < 2);
|
||||
MaxTransferBlockNumber = mMaxTransferBlockNumber[AtaDevice->Lba48Bit];
|
||||
BlockSize = AtaDevice->BlockMedia.BlockSize;
|
||||
|
||||
@@ -813,6 +812,7 @@ AccessAtaDevice(
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
AtaTask->AtaDevice = AtaDevice;
|
||||
AtaTask->Buffer = Buffer;
|
||||
AtaTask->IsWrite = IsWrite;
|
||||
@@ -825,10 +825,11 @@ AccessAtaDevice(
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
|
||||
Token->TransactionStatus = EFI_SUCCESS;
|
||||
EventCount = AllocateZeroPool (sizeof (UINTN));
|
||||
EventCount = AllocateZeroPool (sizeof (UINTN));
|
||||
if (EventCount == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
@@ -838,8 +839,9 @@ AccessAtaDevice(
|
||||
FreePool (EventCount);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_BLKIO, "Allocation IsError Addr=%x\n", IsError));
|
||||
*IsError = FALSE;
|
||||
*IsError = FALSE;
|
||||
TempCount = (NumberOfBlocks + MaxTransferBlockNumber - 1) / MaxTransferBlockNumber;
|
||||
*EventCount = TempCount;
|
||||
DEBUG ((DEBUG_BLKIO, "AccessAtaDevice, NumberOfBlocks=%x\n", NumberOfBlocks));
|
||||
@@ -858,7 +860,7 @@ AccessAtaDevice(
|
||||
if (NumberOfBlocks > MaxTransferBlockNumber) {
|
||||
TransferBlockNumber = MaxTransferBlockNumber;
|
||||
NumberOfBlocks -= MaxTransferBlockNumber;
|
||||
} else {
|
||||
} else {
|
||||
TransferBlockNumber = NumberOfBlocks;
|
||||
NumberOfBlocks = 0;
|
||||
}
|
||||
@@ -876,7 +878,7 @@ AccessAtaDevice(
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
SubTask->UnsignalledEventCount = EventCount;
|
||||
SubTask->Signature = ATA_SUB_TASK_SIGNATURE;
|
||||
SubTask->AtaDevice = AtaDevice;
|
||||
@@ -901,13 +903,13 @@ AccessAtaDevice(
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
Status = TransferAtaDevice (AtaDevice, &SubTask->Packet, Buffer, StartLba, (UINT32) TransferBlockNumber, IsWrite, SubEvent);
|
||||
Status = TransferAtaDevice (AtaDevice, &SubTask->Packet, Buffer, StartLba, (UINT32)TransferBlockNumber, IsWrite, SubEvent);
|
||||
} else {
|
||||
//
|
||||
// Blocking Mode.
|
||||
//
|
||||
DEBUG ((DEBUG_BLKIO, "Blocking AccessAtaDevice, TransferBlockNumber=%x; StartLba = %x\n", TransferBlockNumber, StartLba));
|
||||
Status = TransferAtaDevice (AtaDevice, NULL, Buffer, StartLba, (UINT32) TransferBlockNumber, IsWrite, NULL);
|
||||
Status = TransferAtaDevice (AtaDevice, NULL, Buffer, StartLba, (UINT32)TransferBlockNumber, IsWrite, NULL);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
@@ -925,10 +927,10 @@ EXIT:
|
||||
// Release resource at non-blocking mode.
|
||||
//
|
||||
if (EFI_ERROR (Status)) {
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
|
||||
Token->TransactionStatus = Status;
|
||||
*EventCount = (*EventCount) - (TempCount - Index);
|
||||
*IsError = TRUE;
|
||||
*EventCount = (*EventCount) - (TempCount - Index);
|
||||
*IsError = TRUE;
|
||||
|
||||
if (*EventCount == 0) {
|
||||
FreePool (EventCount);
|
||||
@@ -943,6 +945,7 @@ EXIT:
|
||||
if (SubEvent != NULL) {
|
||||
gBS->CloseEvent (SubEvent);
|
||||
}
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
}
|
||||
}
|
||||
@@ -982,14 +985,14 @@ EXIT:
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
TrustTransferAtaDevice (
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT VOID *Buffer,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN TransferLength,
|
||||
IN BOOLEAN IsTrustSend,
|
||||
IN UINT64 Timeout,
|
||||
OUT UINTN *TransferLengthOut
|
||||
IN OUT ATA_DEVICE *AtaDevice,
|
||||
IN OUT VOID *Buffer,
|
||||
IN UINT8 SecurityProtocolId,
|
||||
IN UINT16 SecurityProtocolSpecificData,
|
||||
IN UINTN TransferLength,
|
||||
IN BOOLEAN IsTrustSend,
|
||||
IN UINT64 Timeout,
|
||||
OUT UINTN *TransferLengthOut
|
||||
)
|
||||
{
|
||||
EFI_ATA_COMMAND_BLOCK *Acb;
|
||||
@@ -1001,27 +1004,28 @@ TrustTransferAtaDevice (
|
||||
//
|
||||
// Ensure AtaDevice->UdmaValid and IsTrustSend are valid boolean values
|
||||
//
|
||||
ASSERT ((UINTN) AtaDevice->UdmaValid < 2);
|
||||
ASSERT ((UINTN) IsTrustSend < 2);
|
||||
ASSERT ((UINTN)AtaDevice->UdmaValid < 2);
|
||||
ASSERT ((UINTN)IsTrustSend < 2);
|
||||
//
|
||||
// Prepare for ATA command block.
|
||||
//
|
||||
Acb = ZeroMem (&AtaDevice->Acb, sizeof (EFI_ATA_COMMAND_BLOCK));
|
||||
if (TransferLength == 0) {
|
||||
Acb->AtaCommand = ATA_CMD_TRUST_NON_DATA;
|
||||
Acb->AtaCommand = ATA_CMD_TRUST_NON_DATA;
|
||||
} else {
|
||||
Acb->AtaCommand = mAtaTrustCommands[AtaDevice->UdmaValid][IsTrustSend];
|
||||
Acb->AtaCommand = mAtaTrustCommands[AtaDevice->UdmaValid][IsTrustSend];
|
||||
}
|
||||
Acb->AtaFeatures = SecurityProtocolId;
|
||||
Acb->AtaSectorCount = (UINT8) (TransferLength / 512);
|
||||
Acb->AtaSectorNumber = (UINT8) ((TransferLength / 512) >> 8);
|
||||
|
||||
Acb->AtaFeatures = SecurityProtocolId;
|
||||
Acb->AtaSectorCount = (UINT8)(TransferLength / 512);
|
||||
Acb->AtaSectorNumber = (UINT8)((TransferLength / 512) >> 8);
|
||||
//
|
||||
// NOTE: ATA Spec has no explicitly definition for Security Protocol Specific layout.
|
||||
// Here use big endian for Cylinder register.
|
||||
//
|
||||
Acb->AtaCylinderHigh = (UINT8) SecurityProtocolSpecificData;
|
||||
Acb->AtaCylinderLow = (UINT8) (SecurityProtocolSpecificData >> 8);
|
||||
Acb->AtaDeviceHead = (UINT8) (BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
Acb->AtaCylinderHigh = (UINT8)SecurityProtocolSpecificData;
|
||||
Acb->AtaCylinderLow = (UINT8)(SecurityProtocolSpecificData >> 8);
|
||||
Acb->AtaDeviceHead = (UINT8)(BIT7 | BIT6 | BIT5 | (AtaDevice->PortMultiplierPort == 0xFFFF ? 0 : (AtaDevice->PortMultiplierPort << 4)));
|
||||
|
||||
//
|
||||
// Prepare for ATA pass through packet.
|
||||
@@ -1030,7 +1034,7 @@ TrustTransferAtaDevice (
|
||||
if (TransferLength == 0) {
|
||||
Packet->InTransferLength = 0;
|
||||
Packet->OutTransferLength = 0;
|
||||
Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_ATA_NON_DATA;
|
||||
Packet->Protocol = EFI_ATA_PASS_THRU_PROTOCOL_ATA_NON_DATA;
|
||||
} else if (IsTrustSend) {
|
||||
//
|
||||
// Check the alignment of the incoming buffer prior to invoking underlying ATA PassThru
|
||||
@@ -1046,22 +1050,25 @@ TrustTransferAtaDevice (
|
||||
FreePool (Buffer);
|
||||
Buffer = NewBuffer;
|
||||
}
|
||||
Packet->OutDataBuffer = Buffer;
|
||||
Packet->OutTransferLength = (UINT32) TransferLength;
|
||||
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];
|
||||
|
||||
Packet->OutDataBuffer = Buffer;
|
||||
Packet->OutTransferLength = (UINT32)TransferLength;
|
||||
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];
|
||||
} else {
|
||||
Packet->InDataBuffer = Buffer;
|
||||
Packet->InTransferLength = (UINT32) TransferLength;
|
||||
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];
|
||||
Packet->InDataBuffer = Buffer;
|
||||
Packet->InTransferLength = (UINT32)TransferLength;
|
||||
Packet->Protocol = mAtaPassThruCmdProtocols[AtaDevice->UdmaValid][IsTrustSend];
|
||||
}
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES;
|
||||
Packet->Timeout = Timeout;
|
||||
|
||||
Packet->Length = EFI_ATA_PASS_THRU_LENGTH_BYTES;
|
||||
Packet->Timeout = Timeout;
|
||||
|
||||
Status = AtaDevicePassThru (AtaDevice, NULL, NULL);
|
||||
if (TransferLengthOut != NULL) {
|
||||
if (! IsTrustSend) {
|
||||
if (!IsTrustSend) {
|
||||
*TransferLengthOut = Packet->InTransferLength;
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
@@ -11,20 +11,19 @@
|
||||
//
|
||||
// Driver name table
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mAtaBusDriverNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mAtaBusDriverNameTable[] = {
|
||||
{ "eng;en", L"ATA Bus Driver" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
//
|
||||
// Controller name table
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mAtaBusControllerNameTable[] = {
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mAtaBusControllerNameTable[] = {
|
||||
{ "eng;en", L"ATA Controller" },
|
||||
{ NULL , NULL }
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// EFI Component Name Protocol
|
||||
//
|
||||
@@ -37,9 +36,9 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gAtaBusComponentName
|
||||
//
|
||||
// EFI Component Name 2 Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gAtaBusComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) AtaBusComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) AtaBusComponentNameGetControllerName,
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gAtaBusComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)AtaBusComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)AtaBusComponentNameGetControllerName,
|
||||
"en"
|
||||
};
|
||||
|
||||
@@ -99,7 +98,6 @@ AtaBusComponentNameGetDriverName (
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
@@ -171,11 +169,11 @@ AtaBusComponentNameGetDriverName (
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AtaBusComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
@@ -205,13 +203,14 @@ AtaBusComponentNameGetControllerName (
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Get the child context
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
ChildHandle,
|
||||
&gEfiBlockIoProtocolGuid,
|
||||
(VOID **) &BlockIo,
|
||||
(VOID **)&BlockIo,
|
||||
gAtaBusDriverBinding.DriverBindingHandle,
|
||||
ChildHandle,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
@@ -219,9 +218,11 @@ AtaBusComponentNameGetControllerName (
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (BlockIo);
|
||||
ControllerNameTable =AtaDevice->ControllerNameTable;
|
||||
|
||||
AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (BlockIo);
|
||||
ControllerNameTable = AtaDevice->ControllerNameTable;
|
||||
}
|
||||
|
||||
return LookupUnicodeString2 (
|
||||
Language,
|
||||
This->SupportedLanguages,
|
||||
|
Reference in New Issue
Block a user