1 /**@file
2
3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 WinNtThunk.c
15
16 Abstract:
17
18 Produce WinNtThunk protocol and it's associated device path and controller
19 state protocols. WinNtThunk is to the NT emulation environment as
20 PCI_ROOT_BRIGE is to real hardware. The WinNtBusDriver is the child of this
21 driver.
22
23 Since we are a root hardware abstraction we do not install a Driver Binding
24 protocol on this handle. This driver can only support one one WinNtThunk protocol
25 in the system, since the device path is hard coded.
26
27 **/
28
29 //
30 // The package level header files this module uses
31 //
32 #include <Uefi.h>
33 #include <WinNtDxe.h>
34 //
35 // The protocols, PPI and GUID defintions for this module
36 //
37 #include <Protocol/WinNtThunk.h>
38 #include <Protocol/DevicePath.h>
39 //
40 // The Library classes this module consumes
41 //
42 #include <Library/UefiDriverEntryPoint.h>
43 #include <Library/WinNtLib.h>
44 #include <Library/UefiBootServicesTableLib.h>
45 #include <Library/DevicePathLib.h>
46
47 #include "WinNtThunk.h"
48
49 //
50 // WinNtThunk Device Path Protocol Instance
51 //
52 WIN_NT_THUNK_DEVICE_PATH mWinNtThunkDevicePath = {
53 {
54 HARDWARE_DEVICE_PATH,
55 HW_VENDOR_DP,
56 (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
57 (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8),
58 EFI_WIN_NT_THUNK_PROTOCOL_GUID,
59 },
60 {
61 END_DEVICE_PATH_TYPE,
62 END_ENTIRE_DEVICE_PATH_SUBTYPE,
63 END_DEVICE_PATH_LENGTH,
64 0
65 }
66 };
67
68
69 EFI_STATUS
70 EFIAPI
InitializeWinNtThunk(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE * SystemTable)71 InitializeWinNtThunk (
72 IN EFI_HANDLE ImageHandle,
73 IN EFI_SYSTEM_TABLE *SystemTable
74 )
75 /*++
76
77 Routine Description:
78 Install WinNtThunk Protocol and it's associated Device Path protocol
79
80 Arguments:
81 (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
82
83 Returns:
84 EFI_SUCEESS - WinNtThunk protocol is added or error status from
85 gBS->InstallMultiProtocolInterfaces().
86
87 --*/
88 // TODO: ImageHandle - add argument and description to function comment
89 // TODO: SystemTable - add argument and description to function comment
90 {
91 EFI_STATUS Status;
92 EFI_HANDLE ControllerHandle;
93
94 ControllerHandle = NULL;
95 Status = gBS->InstallMultipleProtocolInterfaces (
96 &ControllerHandle,
97 &gEfiWinNtThunkProtocolGuid,
98 gWinNt,
99 &gEfiDevicePathProtocolGuid,
100 &mWinNtThunkDevicePath,
101 NULL
102 );
103
104 return Status;
105 }
106