1 /*++ @file 2 3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4 Portions copyright (c) 2011, Apple Inc. All rights reserved. 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. The full text of the license may be found at 8 http://opensource.org/licenses/bsd-license.php 9 10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12 13 14 **/ 15 #include <PiDxe.h> 16 17 #include <Protocol/DevicePath.h> 18 #include <Protocol/EmuThunk.h> 19 20 #include <Library/DebugLib.h> 21 #include <Library/UefiLib.h> 22 #include <Library/UefiDriverEntryPoint.h> 23 #include <Library/EmuThunkLib.h> 24 #include <Library/MemoryAllocationLib.h> 25 #include <Library/UefiBootServicesTableLib.h> 26 #include <Library/DevicePathLib.h> 27 28 // 29 // EmuThunk Device Path Protocol Instance 30 // 31 EMU_THUNK_DEVICE_PATH mEmuThunkDevicePath = { 32 { 33 { 34 { 35 HARDWARE_DEVICE_PATH, 36 HW_VENDOR_DP, 37 { 38 (UINT8) (sizeof (EMU_VENDOR_DEVICE_PATH_NODE)), 39 (UINT8) ((sizeof (EMU_VENDOR_DEVICE_PATH_NODE)) >> 8) 40 } 41 }, 42 EMU_THUNK_PROTOCOL_GUID 43 }, 44 0 45 }, 46 { 47 END_DEVICE_PATH_TYPE, 48 END_ENTIRE_DEVICE_PATH_SUBTYPE, 49 { 50 END_DEVICE_PATH_LENGTH, 51 0 52 } 53 } 54 }; 55 56 57 EFI_STATUS 58 EFIAPI 59 InitializeEmuThunk ( 60 IN EFI_HANDLE ImageHandle, 61 IN EFI_SYSTEM_TABLE *SystemTable 62 ) 63 /*++ 64 65 Routine Description: 66 Install UnixThunk Protocol and it's associated Device Path protocol 67 68 Arguments: 69 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) 70 71 Returns: 72 EFI_SUCEESS - UnixThunk protocol is added or error status from 73 gBS->InstallMultiProtocolInterfaces(). 74 75 **/ 76 { 77 EFI_STATUS Status; 78 EFI_HANDLE Handle; 79 80 Handle = NULL; 81 Status = gBS->InstallMultipleProtocolInterfaces ( 82 &Handle, 83 &gEmuThunkProtocolGuid, gEmuThunk, 84 &gEfiDevicePathProtocolGuid, &mEmuThunkDevicePath, 85 NULL 86 ); 87 88 return Status; 89 } 90