34 EFI_BLOCK_IO_PROTOCOL_REVISION,
129 if (Buffer !=
NULL) {
156 if (AtaDevice->DevicePath !=
NULL) {
160 OldTpl =
gBS->RaiseTPL (TPL_NOTIFY);
165 for (Entry = AtaDevice->AtaSubTaskList.ForwardLink;
166 Entry != (&AtaDevice->AtaSubTaskList);
170 Entry = Entry->ForwardLink;
171 SubTask = ATA_ASYN_SUB_TASK_FROM_ENTRY (DelEntry);
182 for (Entry = AtaDevice->AtaTaskList.ForwardLink;
183 Entry != (&AtaDevice->AtaTaskList);
187 Entry = Entry->ForwardLink;
188 AtaTask = ATA_ASYN_TASK_FROM_ENTRY (DelEntry);
195 gBS->RestoreTPL (OldTpl);
220 IN UINT16 PortMultiplierPort
232 NewDevicePathNode =
NULL;
234 RemainingDevicePath =
NULL;
239 AtaPassThru = AtaBusDriverData->AtaPassThru;
240 Status = AtaPassThru->BuildDevicePath (AtaPassThru, Port, PortMultiplierPort, &NewDevicePathNode);
241 if (EFI_ERROR (Status)) {
246 if (DevicePath ==
NULL) {
247 Status = EFI_OUT_OF_RESOURCES;
252 RemainingDevicePath = DevicePath;
253 Status =
gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &DeviceHandle);
254 if (!EFI_ERROR (Status) && (DeviceHandle !=
NULL) &&
IsDevicePathEnd (RemainingDevicePath)) {
255 Status = EFI_ALREADY_STARTED;
264 if (AtaDevice ==
NULL) {
265 Status = EFI_OUT_OF_RESOURCES;
272 AtaDevice->BlockIo.
Media = &AtaDevice->BlockMedia;
273 AtaDevice->BlockIo2.
Media = &AtaDevice->BlockMedia;
274 AtaDevice->AtaBusDriverData = AtaBusDriverData;
275 AtaDevice->DevicePath = DevicePath;
276 AtaDevice->Port = Port;
277 AtaDevice->PortMultiplierPort = PortMultiplierPort;
279 if (AtaDevice->Asb ==
NULL) {
280 Status = EFI_OUT_OF_RESOURCES;
285 if (AtaDevice->IdentifyData ==
NULL) {
286 Status = EFI_OUT_OF_RESOURCES;
301 (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_ENABLE),
302 AtaBusDriverData->ParentDevicePath
309 if (EFI_ERROR (Status)) {
319 &AtaDevice->ControllerNameTable,
320 AtaDevice->ModelName,
323 if (EFI_ERROR (Status)) {
330 &AtaDevice->ControllerNameTable,
331 AtaDevice->ModelName,
334 if (EFI_ERROR (Status)) {
346 Status =
gBS->InstallMultipleProtocolInterfaces (
348 &gEfiDevicePathProtocolGuid,
349 AtaDevice->DevicePath,
350 &gEfiBlockIoProtocolGuid,
352 &gEfiBlockIo2ProtocolGuid,
353 &AtaDevice->BlockIo2,
354 &gEfiDiskInfoProtocolGuid,
355 &AtaDevice->DiskInfo,
358 if (EFI_ERROR (Status)) {
366 if ((AtaDevice->IdentifyData->trusted_computing_support & BIT0) != 0) {
367 DEBUG ((DEBUG_INFO,
"Found TCG support in Port %x PortMultiplierPort %x\n", Port, PortMultiplierPort));
368 Status =
gBS->InstallProtocolInterface (
370 &gEfiStorageSecurityCommandProtocolGuid,
372 &AtaDevice->StorageSecurity
374 if (EFI_ERROR (Status)) {
378 DEBUG ((DEBUG_INFO,
"Successfully Install Storage Security Protocol on the ATA device\n"));
382 AtaBusDriverData->Controller,
383 &gEfiAtaPassThruProtocolGuid,
384 (VOID **)&AtaPassThru,
385 AtaBusDriverData->DriverBindingHandle,
387 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
391 if (NewDevicePathNode !=
NULL) {
395 if (EFI_ERROR (Status) && (AtaDevice !=
NULL)) {
397 DEBUG ((DEBUG_ERROR | DEBUG_INIT,
"Failed to initialize Port %x PortMultiplierPort %x, status = %r\n", Port, PortMultiplierPort, Status));
434 Status =
gBS->OpenProtocol (
436 &gEfiBlockIoProtocolGuid,
438 This->DriverBindingHandle,
440 EFI_OPEN_PROTOCOL_GET_PROTOCOL
442 if (EFI_ERROR (Status)) {
446 Status =
gBS->OpenProtocol (
448 &gEfiBlockIo2ProtocolGuid,
450 This->DriverBindingHandle,
452 EFI_OPEN_PROTOCOL_GET_PROTOCOL
454 if (EFI_ERROR (Status)) {
462 if (BlockIo !=
NULL) {
463 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (BlockIo);
465 ASSERT (BlockIo2 !=
NULL);
466 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO2 (BlockIo2);
474 &gEfiAtaPassThruProtocolGuid,
475 This->DriverBindingHandle,
483 Status =
gBS->UninstallMultipleProtocolInterfaces (
485 &gEfiDevicePathProtocolGuid,
486 AtaDevice->DevicePath,
487 &gEfiBlockIoProtocolGuid,
489 &gEfiBlockIo2ProtocolGuid,
490 &AtaDevice->BlockIo2,
491 &gEfiDiskInfoProtocolGuid,
492 &AtaDevice->DiskInfo,
496 if (EFI_ERROR (Status)) {
499 &gEfiAtaPassThruProtocolGuid,
500 (VOID **)&AtaPassThru,
501 This->DriverBindingHandle,
503 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
511 Status =
gBS->OpenProtocol (
513 &gEfiStorageSecurityCommandProtocolGuid,
514 (VOID **)&StorageSecurity,
515 This->DriverBindingHandle,
517 EFI_OPEN_PROTOCOL_GET_PROTOCOL
520 if (!EFI_ERROR (Status)) {
521 Status =
gBS->UninstallProtocolInterface (
523 &gEfiStorageSecurityCommandProtocolGuid,
524 &AtaDevice->StorageSecurity
526 if (EFI_ERROR (Status)) {
529 &gEfiAtaPassThruProtocolGuid,
530 (VOID **)&AtaPassThru,
531 This->DriverBindingHandle,
533 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
597 UINT16 PortMultiplierPort;
602 Status =
gBS->OpenProtocol (
604 &gEfiAtaPassThruProtocolGuid,
605 (VOID **)&AtaPassThru,
606 This->DriverBindingHandle,
608 EFI_OPEN_PROTOCOL_BY_DRIVER
611 if (Status == EFI_ALREADY_STARTED) {
615 if (EFI_ERROR (Status)) {
628 &gEfiAtaPassThruProtocolGuid,
629 This->DriverBindingHandle,
632 return EFI_UNSUPPORTED;
639 Status = AtaPassThru->GetDevice (AtaPassThru, RemainingDevicePath, &Port, &PortMultiplierPort);
640 if (EFI_ERROR (Status)) {
646 &gEfiAtaPassThruProtocolGuid,
647 This->DriverBindingHandle,
659 &gEfiAtaPassThruProtocolGuid,
660 This->DriverBindingHandle,
667 Status =
gBS->OpenProtocol (
669 &gEfiDevicePathProtocolGuid,
670 (VOID **)&ParentDevicePath,
671 This->DriverBindingHandle,
673 EFI_OPEN_PROTOCOL_GET_PROTOCOL
726 UINT16 PortMultiplierPort;
728 AtaBusDriverData =
NULL;
730 Status =
gBS->OpenProtocol (
732 &gEfiDevicePathProtocolGuid,
733 (VOID **)&ParentDevicePath,
734 This->DriverBindingHandle,
736 EFI_OPEN_PROTOCOL_GET_PROTOCOL
738 if (EFI_ERROR (Status)) {
751 Status =
gBS->OpenProtocol (
753 &gEfiAtaPassThruProtocolGuid,
754 (VOID **)&AtaPassThru,
755 This->DriverBindingHandle,
757 EFI_OPEN_PROTOCOL_BY_DRIVER
759 if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {
766 if (Status != EFI_ALREADY_STARTED) {
768 if (AtaBusDriverData ==
NULL) {
769 Status = EFI_OUT_OF_RESOURCES;
773 AtaBusDriverData->AtaPassThru = AtaPassThru;
774 AtaBusDriverData->Controller = Controller;
775 AtaBusDriverData->ParentDevicePath = ParentDevicePath;
776 AtaBusDriverData->DriverBindingHandle = This->DriverBindingHandle;
778 Status =
gBS->InstallMultipleProtocolInterfaces (
784 if (EFI_ERROR (Status)) {
788 Status =
gBS->OpenProtocol (
791 (VOID **)&AtaBusDriverData,
792 This->DriverBindingHandle,
794 EFI_OPEN_PROTOCOL_GET_PROTOCOL
796 if (EFI_ERROR (Status)) {
797 AtaBusDriverData =
NULL;
807 (EFI_IO_BUS_ATA_ATAPI | EFI_IOB_PC_DETECT),
811 if (RemainingDevicePath ==
NULL) {
814 Status = AtaPassThru->GetNextPort (AtaPassThru, &Port);
815 if (EFI_ERROR (Status)) {
822 PortMultiplierPort = 0xFFFF;
824 Status = AtaPassThru->GetNextDevice (AtaPassThru, Port, &PortMultiplierPort);
825 if (EFI_ERROR (Status)) {
839 Status = AtaPassThru->GetDevice (AtaPassThru, RemainingDevicePath, &Port, &PortMultiplierPort);
840 if (!EFI_ERROR (Status)) {
849 if (AtaBusDriverData !=
NULL) {
850 gBS->UninstallMultipleProtocolInterfaces (
861 &gEfiAtaPassThruProtocolGuid,
862 This->DriverBindingHandle,
905 BOOLEAN AllChildrenStopped;
909 if (NumberOfChildren == 0) {
910 Status =
gBS->OpenProtocol (
913 (VOID **)&AtaBusDriverData,
914 This->DriverBindingHandle,
916 EFI_OPEN_PROTOCOL_GET_PROTOCOL
918 if (!EFI_ERROR (Status)) {
919 gBS->UninstallMultipleProtocolInterfaces (
930 &gEfiAtaPassThruProtocolGuid,
931 This->DriverBindingHandle,
938 AllChildrenStopped =
TRUE;
940 for (Index = 0; Index < NumberOfChildren; Index++) {
942 if (EFI_ERROR (Status)) {
943 AllChildrenStopped =
FALSE;
947 if (!AllChildrenStopped) {
948 return EFI_DEVICE_ERROR;
969 IN BOOLEAN ExtendedVerification
976 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
978 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (This);
982 if (EFI_ERROR (Status)) {
983 Status = EFI_DEVICE_ERROR;
986 gBS->RestoreTPL (OldTpl);
1024 IN BOOLEAN IsBlockIo2,
1033 UINTN NumberOfBlocks;
1038 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO2 (This);
1041 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO (This);
1044 if (MediaId != Media->
MediaId) {
1045 return EFI_MEDIA_CHANGED;
1051 if (Buffer ==
NULL) {
1052 return EFI_INVALID_PARAMETER;
1055 if (BufferSize == 0) {
1056 if ((Token !=
NULL) && (Token->Event !=
NULL)) {
1058 gBS->SignalEvent (Token->Event);
1065 if ((BufferSize % BlockSize) != 0) {
1066 return EFI_BAD_BUFFER_SIZE;
1069 NumberOfBlocks = BufferSize / BlockSize;
1070 if ((Lba + NumberOfBlocks - 1) > Media->
LastBlock) {
1071 return EFI_INVALID_PARAMETER;
1075 if ((IoAlign > 0) && (((
UINTN)Buffer & (IoAlign - 1)) != 0)) {
1076 return EFI_INVALID_PARAMETER;
1079 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1084 Status =
AccessAtaDevice (AtaDevice, Buffer, Lba, NumberOfBlocks, IsWrite, Token);
1086 gBS->RestoreTPL (OldTpl);
1193 IN BOOLEAN ExtendedVerification
1200 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1202 AtaDevice = ATA_DEVICE_FROM_BLOCK_IO2 (This);
1208 if (EFI_ERROR (Status)) {
1209 Status = EFI_DEVICE_ERROR;
1212 gBS->RestoreTPL (OldTpl);
1313 if ((Token !=
NULL) && (Token->Event !=
NULL)) {
1315 gBS->SignalEvent (Token->Event);
1341 IN OUT VOID *InquiryData,
1342 IN OUT UINT32 *InquiryDataSize
1345 return EFI_NOT_FOUND;
1370 IN OUT VOID *IdentifyData,
1371 IN OUT UINT32 *IdentifyDataSize
1377 AtaDevice = ATA_DEVICE_FROM_DISK_INFO (This);
1379 Status = EFI_BUFFER_TOO_SMALL;
1411 IN OUT VOID *SenseData,
1412 IN OUT UINT32 *SenseDataSize,
1413 OUT UINT8 *SenseDataNumber
1416 return EFI_NOT_FOUND;
1434 OUT UINT32 *IdeChannel,
1435 OUT UINT32 *IdeDevice
1440 AtaDevice = ATA_DEVICE_FROM_DISK_INFO (This);
1441 *IdeChannel = AtaDevice->Port;
1442 *IdeDevice = AtaDevice->PortMultiplierPort;
1527 IN UINT8 SecurityProtocolId,
1528 IN UINT16 SecurityProtocolSpecificData,
1530 OUT VOID *PayloadBuffer,
1538 DEBUG ((DEBUG_INFO,
"EFI Storage Security Protocol - Read\n"));
1539 if (((PayloadBuffer ==
NULL) || (PayloadTransferSize ==
NULL)) && (PayloadBufferSize != 0)) {
1540 return EFI_INVALID_PARAMETER;
1544 Private = ATA_DEVICE_FROM_STORAGE_SECURITY (This);
1547 return EFI_MEDIA_CHANGED;
1551 return EFI_NO_MEDIA;
1554 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1560 SecurityProtocolSpecificData,
1567 gBS->RestoreTPL (OldTpl);
1640 IN UINT8 SecurityProtocolId,
1641 IN UINT16 SecurityProtocolSpecificData,
1643 IN VOID *PayloadBuffer
1650 DEBUG ((DEBUG_INFO,
"EFI Storage Security Protocol - Send\n"));
1651 if ((PayloadBuffer ==
NULL) && (PayloadBufferSize != 0)) {
1652 return EFI_INVALID_PARAMETER;
1656 Private = ATA_DEVICE_FROM_STORAGE_SECURITY (This);
1659 return EFI_MEDIA_CHANGED;
1662 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1667 SecurityProtocolSpecificData,
1674 gBS->RestoreTPL (OldTpl);
1703 &gAtaBusDriverBinding,
1705 &gAtaBusComponentName,
1706 &gAtaBusComponentName2
EFI_STATUS TrustTransferAtaDevice(IN PEI_AHCI_ATA_DEVICE_DATA *DeviceData, IN OUT VOID *Buffer, IN UINT8 SecurityProtocolId, IN UINT16 SecurityProtocolSpecificData, IN UINTN TransferLength, IN BOOLEAN IsTrustSend, IN UINT64 Timeout, OUT UINTN *TransferLengthOut)
EFI_STATUS AccessAtaDevice(IN PEI_AHCI_ATA_DEVICE_DATA *DeviceData, IN OUT UINT8 *Buffer, IN EFI_LBA StartLba, IN UINTN NumberOfBlocks)
EFI_STATUS RegisterAtaDevice(IN OUT ATA_BUS_DRIVER_DATA *AtaBusDriverData, IN UINT16 Port, IN UINT16 PortMultiplierPort)
EFI_STATUS UnregisterAtaDevice(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_HANDLE Handle)
EFI_STATUS EFIAPI AtaBlockIoResetEx(IN EFI_BLOCK_IO2_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI AtaDiskInfoSenseData(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *SenseData, IN OUT UINT32 *SenseDataSize, OUT UINT8 *SenseDataNumber)
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)
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)
VOID FreeAlignedBuffer(IN VOID *Buffer, IN UINTN BufferSize)
EFI_STATUS EFIAPI AtaBusDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI AtaBlockIoWriteBlocksEx(IN EFI_BLOCK_IO2_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, IN VOID *Buffer)
EFI_STATUS EFIAPI AtaBlockIoFlushBlocksEx(IN EFI_BLOCK_IO2_PROTOCOL *This, IN OUT EFI_BLOCK_IO2_TOKEN *Token)
EFI_STATUS EFIAPI InitializeAtaBus(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
EFI_STATUS EFIAPI AtaBlockIoWriteBlocks(IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, IN VOID *Buffer)
EFI_STATUS EFIAPI AtaBlockIoReset(IN EFI_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
EFI_STATUS EFIAPI AtaDiskInfoInquiry(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *InquiryData, IN OUT UINT32 *InquiryDataSize)
EFI_STATUS EFIAPI AtaBusDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
EFI_STATUS EFIAPI AtaBusDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS EFIAPI AtaBlockIoReadBlocksEx(IN EFI_BLOCK_IO2_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI AtaDiskInfoWhichIde(IN EFI_DISK_INFO_PROTOCOL *This, OUT UINT32 *IdeChannel, OUT UINT32 *IdeDevice)
VOID * AllocateAlignedBuffer(IN ATA_DEVICE *AtaDevice, IN UINTN BufferSize)
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)
EFI_STATUS EFIAPI AtaBlockIoReadBlocks(IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI AtaDiskInfoIdentify(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *IdentifyData, IN OUT UINT32 *IdentifyDataSize)
VOID ReleaseAtaResources(IN ATA_DEVICE *AtaDevice)
EFI_STATUS EFIAPI AtaBlockIoFlushBlocks(IN EFI_BLOCK_IO_PROTOCOL *This)
EFI_STATUS ResetAtaDevice(IN ATA_DEVICE *AtaDevice)
EFI_STATUS DiscoverAtaDevice(IN OUT ATA_DEVICE *AtaDevice)
VOID EFIAPI FreeAtaSubTask(IN OUT ATA_BUS_ASYN_SUB_TASK *Task)
VOID EFIAPI AtaTerminateNonBlockingTask(IN ATA_DEVICE *AtaDevice)
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI AppendDevicePathNode(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL, IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePathNode OPTIONAL)
BOOLEAN EFIAPI IsDevicePathEnd(IN CONST VOID *Node)
#define EFI_DISK_INFO_IDE_INTERFACE_GUID
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID EFIAPI FreeAlignedPages(IN VOID *Buffer, IN UINTN Pages)
VOID *EFIAPI AllocateCopyPool(IN UINTN AllocationSize, IN CONST VOID *Buffer)
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define REPORT_STATUS_CODE_WITH_DEVICE_PATH(Type, Value, DevicePathParameter)
#define EFI_ATA_PASS_THRU_ATTRIBUTES_LOGICAL
#define EFI_PROGRESS_CODE
VOID *EFIAPI AllocateAlignedPages(IN UINTN Pages, IN UINTN Alignment)
#define EFI_SIZE_TO_PAGES(Size)
EFI_STATUS EFIAPI AddUnicodeString2(IN CONST CHAR8 *Language, IN CONST CHAR8 *SupportedLanguages, IN OUT EFI_UNICODE_STRING_TABLE **UnicodeStringTable, IN CONST CHAR16 *UnicodeString, IN BOOLEAN Iso639Language)
EFI_STATUS EFIAPI EfiLibInstallDriverBindingComponentName2(IN CONST EFI_HANDLE ImageHandle, IN CONST EFI_SYSTEM_TABLE *SystemTable, IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, IN EFI_HANDLE DriverBindingHandle, IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL, IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL)
EFI_STATUS EFIAPI FreeUnicodeStringTable(IN EFI_UNICODE_STRING_TABLE *UnicodeStringTable)
EFI_BLOCK_IO_MEDIA * Media
EFI_BLOCK_IO_MEDIA * Media
CHAR8 * SupportedLanguages
CHAR8 * SupportedLanguages