-\r
-EFI_DRIVER_BINDING_PROTOCOL gUnixBlockIoDriverBinding = {\r
- UnixBlockIoDriverBindingSupported,\r
- UnixBlockIoDriverBindingStart,\r
- UnixBlockIoDriverBindingStop,\r
- 0xa,\r
- NULL,\r
- NULL\r
-};\r
-\r
-/**\r
- The user Entry Point for module UnixBlockIo. The user code starts with this function.\r
-\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
- @param[in] SystemTable A pointer to the EFI System Table.\r
- \r
- @retval EFI_SUCCESS The entry point is executed successfully.\r
- @retval other Some error occurs when executing this entry point.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-InitializeUnixBlockIo(\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- EFI_STATUS Status;\r
-\r
- Status = EfiLibInstallAllDriverProtocols2 (\r
- ImageHandle,\r
- SystemTable,\r
- &gUnixBlockIoDriverBinding,\r
- ImageHandle,\r
- &gUnixBlockIoComponentName,\r
- &gUnixBlockIoComponentName2,\r
- NULL,\r
- &gUnixBlockIoDriverDiagnostics,\r
- &gUnixBlockIoDriverDiagnostics2\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
-\r
- return Status;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UnixBlockIoDriverBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Handle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
- None\r
-\r
-**/\r
-{\r
- EFI_STATUS Status;\r
- EMU_IO_THUNK_PROTOCOL *EmuIoThunk;\r
-\r
- //\r
- // Open the IO Abstraction(s) needed to perform the supported test\r
- //\r
- Status = gBS->OpenProtocol (\r
- Handle,\r
- &gEmuIoThunkProtocolGuid,\r
- (VOID **)&EmuIoThunk,\r
- This->DriverBindingHandle,\r
- Handle,\r
- EFI_OPEN_PROTOCOL_BY_DRIVER\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- //\r
- // Make sure the UnixThunkProtocol is valid\r
- //\r
- Status = EFI_UNSUPPORTED;\r
- if (EmuIoThunk->UnixThunk->Signature == EFI_EMU_THUNK_PROTOCOL_SIGNATURE) {\r
-\r
- //\r
- // Check the GUID to see if this is a handle type the driver supports\r
- //\r
- if (CompareGuid (EmuIoThunk->TypeGuid, &gEfiUnixVirtualDisksGuid) ) {\r
- Status = EFI_SUCCESS;\r
- }\r
- }\r
-\r
- //\r
- // Close the I/O Abstraction(s) used to perform the supported test\r
- //\r
- gBS->CloseProtocol (\r
- Handle,\r
- &gEmuIoThunkProtocolGuid,\r
- This->DriverBindingHandle,\r
- Handle\r
- );\r
- return Status;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UnixBlockIoDriverBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Handle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
- None\r
-\r
-**/\r
-{\r
- EFI_STATUS Status;\r
- EMU_IO_THUNK_PROTOCOL *EmuIoThunk;\r
- CHAR16 Buffer[FILENAME_BUFFER_SIZE];\r
- CHAR16 *Str;\r