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 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 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; }