EFI_STATUS InitializeBBTestDeviceIo ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) /*++ Routine Description: Creates/installs the BlackBox Interface and eminating Entry Point node list. Arguments: ImageHandle: NULL *SystemTable: Pointer to System Table Returns: EFI_SUCCESS: Indicates the interface was installed. EFI_OUT_OF_RESOURCES: Indicates space for the new handle could not be allocated EFI_INVALID_PARAMETER: One of the parameters has an invalid value. --*/ { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); GetSystemDevicePathAndFilePath (ImageHandle); return EfiInitAndInstallIHVBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestDeviceIoUnload, &gBBTestProtocolInterface ); }
/** * Creates/installs the BlackBox Interface and eminating Entry Point node list. * @param ImageHandle The test driver image handle * @param SystemTable Pointer to System Table * @return EFI_SUCCESS Indicates the interface was installed * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value. */ EFI_STATUS InitializeBBTestPxeBCProtocol ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); EfiInitializeDriverLib (ImageHandle, SystemTable); Status = gtBS->CreateEvent (EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); if (EFI_ERROR(Status)) { return Status; } Status = GetSystemDevicePathAndFilePath (ImageHandle); if (EFI_ERROR(Status)) { return Status; } return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gEfiPxeBcTestProtField, gPxeTestEntryField, BBTestPxeBcUnload, &gBBTestProtocolInterface ); }
EFI_STATUS InitializeRuntimeServicesDriver3 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE *HandleBuffer; UINTN NoHandles; EFI_LOADED_IMAGE_PROTOCOL *LoadedImageInfoPtr; mPrivateData.Handle = NULL; mPrivateData.OpenHandle = NULL; HandleBuffer = NULL; EfiInitializeTestLib (ImageHandle, SystemTable); // // UnLoad Function Handler // gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImageInfoPtr ); LoadedImageInfoPtr->Unload = RuntimeServicesDriver3Unload; gtBS->InstallProtocolInterface ( &mPrivateData.Handle, &mImageTestNoInterfaceProtocol1Guid, EFI_NATIVE_INTERFACE, NULL ); Status = gtBS->LocateHandleBuffer ( ByProtocol, &mImageTestNoInterfaceProtocol2Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { return EFI_SUCCESS; } mPrivateData.OpenHandle = HandleBuffer[0]; gtBS->OpenProtocol ( mPrivateData.OpenHandle, &mImageTestNoInterfaceProtocol2Guid, NULL, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); gtBS->FreePool (HandleBuffer); return EFI_SUCCESS; }
EFI_STATUS InitializeGraphicsOutputBBTest ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) /*++ Routine Description: GraphicsOutput Protocol Test Driver Entry point. Arguments: ImageHandle - The driver image handle SystemTable - The system table Returns: EFI_SUCCESS - The driver is loaded successfully. --*/ { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); EfiInitializeDriverLib (ImageHandle, SystemTable); return EfiInitAndInstallIHVBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, UnloadEfiGraphicsOutputBBTest, &gBBTestProtocolInterface ); }
/********************************************************************************* * Creates/installs the BlackBox Interface and eminating Entry Point node list. * @param ImageHandle The test driver image handle * @param SystemTable Pointer to System Table * @return EFI_SUCCESS Indicates the interface was installed * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value. ********************************************************************************/ EFI_STATUS InitializeTapeTest ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); EfiInitializeDriverLib (ImageHandle, SystemTable); // // Make sure the Protocol is not already installed in the system // //ASSERT_PROTOCOL_ALREADY_INSTALLED (NULL, &gEfiTapeIoProtocolGuid); Status = gtBS->CreateEvent (EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); if (EFI_ERROR(Status)) { return Status; } Status = EfiInitAndInstallBBTestInterface ( &ImageHandle, &gEfiTapeTestProtField, gTapeTestEntryField, UnloadTapeTest, &gTapeTestProtocol ); return Status; }
/** * UGA Draw Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestUgaDraw ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); EfiInitializeDriverLib (ImageHandle, SystemTable); // // Initialize Demo Data // DemoResolutionMax = sizeof (DemoResolution) / sizeof (DEMO_RESOLUTION_TYPE); DemoRefreshRateMax = sizeof (DemoRefreshRate) / sizeof (DEMO_REFRESH_RATE_TYPE); DemoColorDepthMax = sizeof (DemoColorDepth) / sizeof (DEMO_COLOR_DEPTH_TYPE); gtBS->CreateEvent (EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestUgaDrawProtocolUnload, &gBBTestProtocolInterface ); }
EFI_STATUS InitializeRuntimeServicesDriver1 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; EfiInitializeTestLib (ImageHandle, SystemTable); // // UnLoad Function Handler // Status = gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImage ); if (EFI_ERROR (Status)) { return Status; } LoadedImage->Unload = RuntimeServicesDriver1Unload; return EFI_SUCCESS; }
/** * Creates/installs the BlackBox Interface and eminating Entry Point * node list. * @param ImageHandle The test driver image handle * @param SystemTable Pointer to System Table * @return EFI_SUCCESS Indicates the interface was installed * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value. */ EFI_STATUS InitializeBBTestProtocolHandlerBootServices ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EfiInitializeTestLib (ImageHandle, SystemTable); // // initialize test utility lib // InitializeLib (ImageHandle, SystemTable); mImageHandle = ImageHandle; Status = InitializeGlobalData (); if (EFI_ERROR (Status)) { return Status; } return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestProtocolHandlerBootServicesUnload, &gBBTestProtocolInterface ); }
EFI_STATUS InitializeEfiApplication1 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE *HandleBuffer; UINTN NoHandles; HandleBuffer = NULL; NoHandles = 0; EfiInitializeTestLib (ImageHandle, SystemTable); Status = gtBS->InstallProtocolInterface ( &ImageHandle, &mImageTestNoInterfaceProtocol1Guid, EFI_NATIVE_INTERFACE, NULL ); if (EFI_ERROR(Status)) { return Status; } Status = gtBS->LocateHandleBuffer ( ByProtocol, &mImageTestNoInterfaceProtocol2Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { goto Done; } Status = gtBS->OpenProtocol ( HandleBuffer[0], &mImageTestNoInterfaceProtocol2Guid, NULL, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); Done: if (HandleBuffer != NULL && NoHandles > 0) { gtBS->FreePool (HandleBuffer); } gtBS->UninstallProtocolInterface ( ImageHandle, &mImageTestNoInterfaceProtocol1Guid, NULL ); return EFI_SUCCESS; }
EFI_STATUS InitializeDeviceDriver3 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImageInfoPtr; EfiInitializeTestLib (ImageHandle, SystemTable); // // allocate memory for PrivateData // Status = gtBS->AllocatePool ( EfiBootServicesData, sizeof (DEVICE_DRIVER_3_PRIVATE_DATA), (VOID**)&mPrivateData ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem (mPrivateData,sizeof (DEVICE_DRIVER_3_PRIVATE_DATA),0); InitializeDriverBinding (&mPrivateData->DriverBinding); Status = gtBS->InstallProtocolInterface ( &ImageHandle, &gEfiDriverBindingProtocolGuid, EFI_NATIVE_INTERFACE, &mPrivateData->DriverBinding ); mPrivateData->DriverBinding.ImageHandle = ImageHandle; mPrivateData->DriverBinding.DriverBindingHandle = ImageHandle; // // UnLoad Function Handler // gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImageInfoPtr ); LoadedImageInfoPtr->Unload = DeviceDriver3Unload; return EFI_SUCCESS; }
EFI_STATUS InitializeEfiCompliantBbTest ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, EfiCompliantBbTestUnload, &gBBTestProtocolInterface ); }
/** * Efi Driver Supported Efi Version Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestDriverSupportedEfiVersion ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestDriverSupportedEfiVersionProtocolUnload, &gBBTestProtocolInterface ); }
/** * Scsi Pass Through Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestScsiPassThru ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestScsiPassThruProtocolUnload, &gBBTestProtocolInterface ); }
/** * Simple Text Output Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestSimpleTextOutput ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); gtBS->CreateEvent (EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); return EfiInitAndInstallIHVBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestSimpleTextOutputProtocolUnload, &gBBTestProtocolInterface ); }
/** * Unicode Collation Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestUnicodeCollation ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); InitCharMapping(); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestUnicodeCollationProtocolUnload, &gBBTestProtocolInterface ); }
/** * Platform Driver Override Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestPlatformDriverOverride ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); DriverImageHandle = ImageHandle; return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestPlatformDriverOverrideProtocolUnload, &gBBTestProtocolInterface ); }
/** * Creates/installs the BlackBox Interface and eminating Entry Point * node list. * @param ImageHandle The test driver image handle * @param SystemTable Pointer to System Table * @return EFI_SUCCESS Indicates the interface was installed * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value. */ EFI_STATUS InitializeBBTestSimpleFileSystem ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); mImageHandle = ImageHandle; return EfiInitAndInstallIHVBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestSimpleFileSystemUnload, &gBBTestProtocolInterface ); }
/** * SimpleNetwork Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestSimpleNetworkProtocol ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { // // Initialize library // EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); EfiInitializeDriverLib (ImageHandle, SystemTable); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestSimpleNetworkUnload, &gBBTestProtocolInterface ); }
EFI_STATUS InitializeBBTestUsb2Hc ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) /*++ Routine Description: Creates/installs the BlackBox Interface and the Entry Point list. Arguments: ImageHandle - The image handle. SystemTable -The system table. Returns: EFI_SUCCESS - The interface was installed successfully. EFI_OUT_OF_RESOURCES - Failed due to the lack of resources. EFI_INVALID_PARAMETER - One of parameters is invalid. --*/ { EFI_STATUS status; DEBUG ((EFI_D_INFO | EFI_D_LOAD, "wwwwwwwwwwwwwwwwwwwww")); EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); gtBS->CreateEvent (EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); status = EfiInitAndInstallIHVBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestUsb2HcUnload, &gBBTestProtocolInterface ); return status; }
EFI_STATUS InitializeBBTestPciRootBridgeIo ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { // //initialize all the library to be used in this driver. // EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); GetSystemDevicePathAndFilePath (ImageHandle); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestPciRootBridgeIoUnload, &gBBTestProtocolInterface ); }
/** * Disk I/O Protocol Test Driver Entry point. * @param ImageHandle the driver image handle. * @param SystemTable the system table. * @return EFI_SUCCESS the driver is loaded successfully. */ EFI_STATUS InitializeBBTestDiskIo ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); Status = gtBS->CreateEvent(EFI_EVENT_TIMER, 0, NULL, NULL, &TimerEvent); ASSERT_EFI_ERROR(Status); return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestDiskIoProtocolUnload, &gBBTestProtocolInterface ); }
/** * Creates/installs the BlackBox Interface and eminating Entry Point * node list. * @param ImageHandle The test driver image handle * @param SystemTable Pointer to System Table * @return EFI_SUCCESS Indicates the interface was installed * @return EFI_OUT_OF_RESOURCES Indicates space for the new handle could not be allocated * @return EFI_INVALID_PARAMETER: One of the parameters has an invalid value. */ EFI_STATUS InitializeBBTestComponentName ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EfiInitializeTestLib (ImageHandle, SystemTable); // // initialize test utility lib // InitializeLib (ImageHandle, SystemTable); mImageHandle = ImageHandle; return EfiInitAndInstallBBTestInterface ( &ImageHandle, &gBBTestProtocolField, gBBTestEntryField, BBTestComponentNameUnload, &gBBTestProtocolInterface ); }
EFI_STATUS InitializeEfiApplication4 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE *HandleBuffer; UINTN NoHandles; CHAR16 *ExitData; CHAR16 *ErrorMessage; UINTN ExitSize; HandleBuffer = NULL; ExitData = NULL; ExitSize = 0; EfiInitializeTestLib (ImageHandle, SystemTable); gtBS->InstallProtocolInterface ( &ImageHandle, &mImageTestNoInterfaceProtocol3Guid, EFI_NATIVE_INTERFACE, NULL ); Status = gtBS->LocateHandleBuffer ( ByProtocol, &mImageTestNoInterfaceProtocol4Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { goto Done; } gtBS->OpenProtocol ( HandleBuffer[0], &mImageTestNoInterfaceProtocol4Guid, NULL, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); Done: if (HandleBuffer != NULL && NoHandles > 0) { gtBS->FreePool (HandleBuffer); } gtBS->UninstallProtocolInterface ( ImageHandle, &mImageTestNoInterfaceProtocol3Guid, NULL ); ErrorMessage = ERROR_MESSAGE_FOR_APPLICATION_4; ExitSize = StrSize (ErrorMessage); Status = gtBS->AllocatePool ( EfiBootServicesData, ExitSize, (VOID**)&ExitData ); if (!EFI_ERROR(Status)) { gtBS->CopyMem (ExitData, ErrorMessage, ExitSize); } gtBS->Exit (ImageHandle, EFI_DEVICE_ERROR, ExitSize, ExitData); // //the code should not arrive here so we add a variable to verify if the Exit //return control to StartImage correctly. // // //first make sure there is no duplicated variable exist so we first delete once. // gtRT->SetVariable ( IMAGE_APPLICATION4_CALLED_AFTER_EXIT, &mImageTestVariableVendorGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, 0, (VOID*)&ImageHandle ); // //then call SetVariable to set a variable. // gtRT->SetVariable ( IMAGE_APPLICATION4_CALLED_AFTER_EXIT, &mImageTestVariableVendorGuid, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS, sizeof(EFI_HANDLE), (VOID*)&ImageHandle ); // // actually should not arrive here. Just to pass compiling. // return EFI_SUCCESS; }
EFI_STATUS InitializeRuntimeServicesDriver4 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE *HandleBuffer; UINTN NoHandles; EfiInitializeTestLib (ImageHandle, SystemTable); // // init // HandleBuffer = NULL; gtBS->SetMem (&mPrivateData,sizeof (BOOT_SERVICES_DRIVER_4_PRIVATE_DATA), 0); mPrivateData.ImageHandle = ImageHandle; InitializeDriverBinding (&(mPrivateData.DriverBinding)); Status = gtBS->InstallProtocolInterface ( &ImageHandle, &gEfiDriverBindingProtocolGuid, EFI_NATIVE_INTERFACE, &(mPrivateData.DriverBinding) ); if (EFI_ERROR(Status)) { return Status; } mPrivateData.DriverBinding.ImageHandle = ImageHandle; mPrivateData.DriverBinding.DriverBindingHandle = ImageHandle; gtBS->InstallProtocolInterface ( &mPrivateData.Handle, &mImageTestNoInterfaceProtocol1Guid, EFI_NATIVE_INTERFACE, NULL ); Status = gtBS->LocateHandleBuffer ( ByProtocol, &mImageTestNoInterfaceProtocol2Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { return EFI_SUCCESS; } mPrivateData.OpenHandle = HandleBuffer[0]; gtBS->OpenProtocol ( mPrivateData.OpenHandle, &mImageTestNoInterfaceProtocol2Guid, NULL, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); gtBS->FreePool (HandleBuffer); return EFI_SUCCESS; }
EFI_STATUS InitializeBootServicesDriver2 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE *HandleBuffer; UINTN NoHandles; CHAR16 *ExitData; CHAR16 *ErrorMessage; UINTN ExitSize; EFI_HANDLE Handle; Handle = NULL; HandleBuffer = NULL; ExitData = NULL; ExitSize = 0; EfiInitializeTestLib (ImageHandle, SystemTable); Status = gtBS->LocateHandleBuffer ( ByProtocol, &mImageTestNoInterfaceProtocol2Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status) || (NoHandles == 0)) { return Status; } gtBS->OpenProtocol ( HandleBuffer[0], &mImageTestNoInterfaceProtocol2Guid, NULL, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); gtBS->InstallProtocolInterface ( &Handle, &mImageTestNoInterfaceProtocol1Guid, EFI_NATIVE_INTERFACE, NULL ); // // clean resources before exit // gtBS->FreePool (HandleBuffer); gtBS->UninstallProtocolInterface ( Handle, &mImageTestNoInterfaceProtocol1Guid, NULL ); ErrorMessage = ERROR_MESSAGE_FOR_BOOT_SERVICES_DRIVER_2; ExitSize = StrSize (ErrorMessage); Status = gtBS->AllocatePool ( EfiBootServicesData, ExitSize, (VOID**)&ExitData ); if (!EFI_ERROR(Status)) { gtBS->CopyMem (ExitData, ErrorMessage, ExitSize); } gtBS->Exit (ImageHandle,EFI_DEVICE_ERROR,ExitSize,ExitData); // // actually should not arrive here. Just to pass compiling. // return EFI_SUCCESS; }
EFI_STATUS InitializeCombinationImage5 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_HANDLE Handle; EFI_DEVICE_PATH_PROTOCOL *FilePath; EFI_HANDLE AnotherImageHandle; CHAR16 *ExitData; UINTN ExitDataSize; // // Init // FilePath = NULL; Handle = NULL; AnotherImageHandle = NULL; Status = EFI_SUCCESS; ExitData = NULL; EfiInitializeTestLib (ImageHandle, SystemTable); InitializeLib (ImageHandle, SystemTable); gtBS->InstallProtocolInterface ( &Handle, &mImageTestNoInterfaceProtocol5Guid, EFI_NATIVE_INTERFACE, NULL ); Status = ImageTestComposeSimpleFilePath ( NULL,ImageHandle, COMBINATION_IMAGE_6_NAME, &FilePath ); if (EFI_ERROR(Status)) { goto Done; } // // load image 6 // Status = gtBS->LoadImage ( FALSE, ImageHandle, FilePath, NULL, 0, &AnotherImageHandle ); if (EFI_ERROR(Status)) { goto Done; } // // start image 6 // Status = gtBS->StartImage (AnotherImageHandle, &ExitDataSize, &ExitData); Done: if (Handle != NULL) { gtBS->UninstallProtocolInterface ( Handle, &mImageTestNoInterfaceProtocol5Guid, NULL ); } if (ExitData != NULL) { gtBS->FreePool (ExitData); } if (FilePath != NULL) { gtBS->FreePool (FilePath); } if (AnotherImageHandle != NULL) { gtBS->UnloadImage (AnotherImageHandle); } gtBS->Exit (ImageHandle, Status, 0, NULL); // // actually should not arrive here. Just to pass compiling. // return EFI_SUCCESS; }
EFI_STATUS InitializeBootServicesDriver2 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImage; EFI_HANDLE Handle; UINTN *Options; Handle = NULL; EfiInitializeTestLib (ImageHandle, SystemTable); // // UnLoad Function Handler // Status = gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImage ); if (EFI_ERROR (Status)) { return Status; } LoadedImage->Unload = BootServicesDriver2Unload; Options = (UINTN*)(LoadedImage->LoadOptions); if (Options == NULL) { return EFI_SUCCESS; } if (*Options == 3) { gtBS->InstallProtocolInterface ( &Handle, &mLoadedImageTestNoInterfaceProtocol3Guid, EFI_NATIVE_INTERFACE, NULL ); } else if (*Options == 4) { gtBS->InstallProtocolInterface ( &Handle, &mLoadedImageTestNoInterfaceProtocol4Guid, EFI_NATIVE_INTERFACE, NULL ); } if (Handle != NULL) { gtBS->UninstallProtocolInterface ( Handle, &mLoadedImageTestNoInterfaceProtocol3Guid, NULL ); gtBS->UninstallProtocolInterface ( Handle, &mLoadedImageTestNoInterfaceProtocol4Guid, NULL ); } return EFI_SUCCESS; }
EFI_STATUS InitializeBusOverrideDriver1 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImageInfoPtr; EfiInitializeTestLib (ImageHandle, SystemTable); // // initialize test utility lib // InitializeLib (ImageHandle, SystemTable); // // allocate memory for PrivateData // Status = gtBS->AllocatePool ( EfiBootServicesData, sizeof (BUS_OVERRIDE_PRIVATE_DATA), (VOID**)&mPrivateData ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem (mPrivateData,sizeof (BUS_OVERRIDE_PRIVATE_DATA),0); mPrivateData->Index = 0xffffffff; LoadAndStartImage ( ImageHandle, DEVICE_DRIVER_110_NAME, &mPrivateData->DriverImageHandle[0] ); LoadAndStartImage ( ImageHandle, DEVICE_DRIVER_111_NAME, &mPrivateData->DriverImageHandle[1] ); InitializeDriverBinding (&mPrivateData->DriverBinding); Status = gtBS->InstallProtocolInterface ( &ImageHandle, &gEfiDriverBindingProtocolGuid, EFI_NATIVE_INTERFACE, &mPrivateData->DriverBinding ); mPrivateData->DriverBinding.ImageHandle = ImageHandle; mPrivateData->DriverBinding.DriverBindingHandle = ImageHandle; // // UnLoad Function Handler // gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImageInfoPtr ); LoadedImageInfoPtr->Unload = BusOverrideDriver1Unload; return EFI_SUCCESS; }
EFI_STATUS InitializeDBindingDriver4 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; EFI_LOADED_IMAGE_PROTOCOL *LoadedImageInfoPtr; EfiInitializeTestLib (ImageHandle, SystemTable); // // allocate memory for PrivateData // Status = gtBS->AllocatePool ( EfiBootServicesData, sizeof (DBINDING_DRIVER_PRIVATE_DATA), (VOID**)&mPrivateData ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem (mPrivateData,sizeof (DBINDING_DRIVER_PRIVATE_DATA),0); InitializeDriverBinding (&mPrivateData->DriverBinding); Status = gtBS->InstallProtocolInterface ( &ImageHandle, &gEfiDriverBindingProtocolGuid, EFI_NATIVE_INTERFACE, &mPrivateData->DriverBinding ); mPrivateData->DriverBinding.ImageHandle = ImageHandle; mPrivateData->DriverBinding.DriverBindingHandle = ImageHandle; // // UnLoad Function Handler // gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImageInfoPtr ); LoadedImageInfoPtr->Unload = DBindingDriver4Unload; mPrivateData->ArrayCount = 4; Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_STATUS), (VOID**)&(mPrivateData->StatusArray) ); if (EFI_ERROR(Status)) { return Status; } // // init StatusArray with invalid data // gtBS->SetMem ( mPrivateData->StatusArray, mPrivateData->ArrayCount * sizeof (EFI_STATUS), 0xff ); Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_HANDLE), (VOID**)&(mPrivateData->HandleArray) ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem ( mPrivateData->HandleArray, mPrivateData->ArrayCount * sizeof (EFI_HANDLE), 0 ); Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_GUID), (VOID**)&(mPrivateData->ProtGuidArray) ); if (EFI_ERROR(Status)) { return Status; } mPrivateData->ProtGuidArray[0] = mInterfaceFunctionTestProtocol1Guid; mPrivateData->ProtGuidArray[1] = mInterfaceFunctionTestProtocol2Guid; mPrivateData->ProtGuidArray[2] = mInterfaceFunctionTestProtocol3Guid; mPrivateData->ProtGuidArray[3] = mInterfaceFunctionTestProtocol4Guid; Status = gtBS->InstallProtocolInterface ( &mPrivateData->ChildHandle, &mTestNoInterfaceProtocol1Guid, EFI_NATIVE_INTERFACE, NULL ); if (EFI_ERROR(Status)) { return Status; } return EFI_SUCCESS; }
EFI_STATUS InitializeTestDriver3 ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; INTERFACE_FUNCTION_TEST_PROTOCOL_1 *IFTestProt1; INTERFACE_FUNCTION_TEST_PROTOCOL_2 *IFTestProt2; EFI_HANDLE *HandleBuffer; UINTN NoHandles; EFI_LOADED_IMAGE_PROTOCOL *LoadedImageInfoPtr; HandleBuffer = NULL; EfiInitializeTestLib (ImageHandle, SystemTable); // // allocate memory for PrivateData // Status = gtBS->AllocatePool ( EfiBootServicesData, sizeof (TEST_DRIVER_PRIVATE_DATA), (VOID**)&mPrivateData ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem (mPrivateData,sizeof (TEST_DRIVER_PRIVATE_DATA),0); // // UnLoad Function Handler // gtBS->HandleProtocol ( ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID*)&LoadedImageInfoPtr ); LoadedImageInfoPtr->Unload = TestDriver3Unload; mPrivateData->ArrayCount = 2; Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_STATUS), (VOID**)&(mPrivateData->StatusArray) ); if (EFI_ERROR(Status)) { return Status; } // // init StatusArray with invalid data // gtBS->SetMem ( mPrivateData->StatusArray, mPrivateData->ArrayCount * sizeof (EFI_STATUS), 0xff ); Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_HANDLE), (VOID**)&(mPrivateData->HandleArray) ); if (EFI_ERROR(Status)) { return Status; } gtBS->SetMem ( mPrivateData->HandleArray, mPrivateData->ArrayCount * sizeof (EFI_HANDLE), 0 ); Status = gtBS->AllocatePool ( EfiBootServicesData, mPrivateData->ArrayCount * sizeof (EFI_GUID), (VOID**)&(mPrivateData->ProtGuidArray) ); if (EFI_ERROR(Status)) { return Status; } mPrivateData->ProtGuidArray[0] = mInterfaceFunctionTestProtocol1Guid; mPrivateData->ProtGuidArray[1] = mInterfaceFunctionTestProtocol2Guid; // // locate handle which contains INTERFACE_FUNCTION_TEST_PROTOCOL_1 // Status = gtBS->LocateHandleBuffer ( ByProtocol, &mInterfaceFunctionTestProtocol1Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { return Status; } mPrivateData->HandleArray[0] = HandleBuffer[0]; mPrivateData->StatusArray[0] = gtBS->OpenProtocol ( HandleBuffer[0], &mInterfaceFunctionTestProtocol1Guid, &IFTestProt1, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); if (HandleBuffer != NULL) { gtBS->FreePool (HandleBuffer); HandleBuffer = NULL; } Status = gtBS->LocateHandleBuffer ( ByProtocol, &mInterfaceFunctionTestProtocol2Guid, NULL, &NoHandles, &HandleBuffer ); if (EFI_ERROR(Status)) { goto Done; } mPrivateData->HandleArray[1] = HandleBuffer[0]; mPrivateData->StatusArray[1] = gtBS->OpenProtocol ( HandleBuffer[0], &mInterfaceFunctionTestProtocol2Guid, &IFTestProt2, ImageHandle, NULL, EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); mPrivateData->ExProt1.GetNextStatusReport = TestDriver3GetNextStatusReport; Status = gtBS->InstallProtocolInterface ( &mPrivateData->Handle, &mExternalDriverProtocol1Guid, EFI_NATIVE_INTERFACE, &mPrivateData->ExProt1 ); Done: if (HandleBuffer != NULL) { gtBS->FreePool (HandleBuffer); HandleBuffer = NULL; } return EFI_SUCCESS; }