• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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