3 Copyright (c) 2006 - 2007, Intel Corporation
4 All rights reserved. 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
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.
25 #include <Protocol/SimpleNetwork.h>
26 #include <Protocol/DevicePath.h>
27 #include <Protocol/WinNtThunk.h>
29 #include <Library/BaseLib.h>
30 #include <Library/DebugLib.h>
31 #include <Library/BaseMemoryLib.h>
32 #include <Library/UefiBootServicesTableLib.h>
33 #include <Library/UefiLib.h>
34 #include <Library/DevicePathLib.h>
35 #include <Library/NetLib.h>
36 #include <Library/MemoryAllocationLib.h>
38 typedef struct _SNPNT32_GLOBAL_DATA SNPNT32_GLOBAL_DATA
;
39 typedef struct _SNPNT32_INSTANCE_DATA SNPNT32_INSTANCE_DATA
;
41 #define NETWORK_LIBRARY_NAME_U L"SnpNt32Io.dll"
43 #define NETWORK_LIBRARY_INITIALIZE "SnpInitialize"
44 #define NETWORK_LIBRARY_FINALIZE "SnpFinalize"
45 #define NETWORK_LIBRARY_SET_RCV_FILTER "SnpSetReceiveFilter"
46 #define NETWORK_LIBRARY_RECEIVE "SnpReceive"
47 #define NETWORK_LIBRARY_TRANSMIT "SnpTransmit"
50 typedef struct _NT_NET_INTERFACE_INFO
{
51 UINT32 InterfaceIndex
;
52 EFI_MAC_ADDRESS MacAddr
;
53 } NT_NET_INTERFACE_INFO
;
56 #define NET_ETHER_HEADER_SIZE 14
58 #define MAX_INTERFACE_INFO_NUMBER 16
59 #define MAX_FILE_NAME_LENGTH 280
62 // Functions in Net Library
66 (*NT_NET_INITIALIZE
) (
67 IN OUT UINT32
*InterfaceCount
,
68 IN OUT NT_NET_INTERFACE_INFO
* InterfaceInfoBuffer
79 (*NT_NET_SET_RECEIVE_FILTER
) (
81 IN UINT32 EnableFilter
,
82 IN UINT32 MCastFilterCnt
,
83 IN EFI_MAC_ADDRESS
* MCastFilter
90 IN OUT UINT32
*BufferSize
,
101 IN EFI_MAC_ADDRESS
* SrcAddr
,
102 IN EFI_MAC_ADDRESS
* DestAddr
,
106 typedef struct _NT_NET_UTILITY_TABLE
{
107 NT_NET_INITIALIZE Initialize
;
108 NT_NET_FINALIZE Finalize
;
109 NT_NET_SET_RECEIVE_FILTER SetReceiveFilter
;
110 NT_NET_RECEIVE Receive
;
111 NT_NET_TRANSMIT Transmit
;
112 } NT_NET_UTILITY_TABLE
;
119 (*SNPNT32_INITIALIZE_GLOBAL_DATA
) (
120 IN SNPNT32_GLOBAL_DATA
* This
125 (*SNPNT32_INITIALIZE_INSTANCE_DATA
) (
126 IN SNPNT32_GLOBAL_DATA
* This
,
127 IN SNPNT32_INSTANCE_DATA
* Instance
132 (*SNPNT32_CLOSE_INSTANCE
) (
133 IN SNPNT32_GLOBAL_DATA
* This
,
134 IN SNPNT32_INSTANCE_DATA
* Instance
138 // Global data for this driver
140 #define SNP_NT32_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('W', 'S', 'N', 'P')
142 typedef struct _SNPNT32_GLOBAL_DATA
{
146 // List for all the fake SNP instance
148 LIST_ENTRY InstanceList
;
150 EFI_WIN_NT_THUNK_PROTOCOL
*WinNtThunk
;
151 HMODULE NetworkLibraryHandle
;
153 NT_NET_UTILITY_TABLE NtNetUtilityTable
;
160 SNPNT32_INITIALIZE_GLOBAL_DATA InitializeGlobalData
;
161 SNPNT32_INITIALIZE_INSTANCE_DATA InitializeInstanceData
;
162 SNPNT32_CLOSE_INSTANCE CloseInstance
;
163 } SNPNT32_GLOBAL_DATA
;
166 // Instance data for each fake SNP instance
168 #define SNP_NT32_INSTANCE_SIGNATURE EFI_SIGNATURE_32 ('w', 'S', 'N', 'P')
170 typedef struct _SNPNT32_INSTANCE_DATA
{
174 // List entry use for linking with other instance
178 SNPNT32_GLOBAL_DATA
*GlobalData
;
180 EFI_HANDLE DeviceHandle
;
181 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
183 EFI_SIMPLE_NETWORK_PROTOCOL Snp
;
184 EFI_SIMPLE_NETWORK_MODE Mode
;
186 NT_NET_INTERFACE_INFO InterfaceInfo
;
191 } SNPNT32_INSTANCE_DATA
;
193 #define SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS(a) \
196 SNPNT32_INSTANCE_DATA, \
198 SNP_NT32_INSTANCE_SIGNATURE \
201 extern EFI_DRIVER_BINDING_PROTOCOL gSnpNt32DriverBinding
;
202 extern EFI_COMPONENT_NAME_PROTOCOL gSnpNt32DriverComponentName
;
203 extern EFI_COMPONENT_NAME2_PROTOCOL gSnpNt32DriverComponentName2
;
207 SnpNt32DriverBindingSupported (
208 IN EFI_DRIVER_BINDING_PROTOCOL
* This
,
209 IN EFI_HANDLE ControllerHandle
,
210 IN EFI_DEVICE_PATH_PROTOCOL
* RemainingDevicePath OPTIONAL
215 SnpNt32DriverBindingStart (
216 IN EFI_DRIVER_BINDING_PROTOCOL
* This
,
217 IN EFI_HANDLE ControllerHandle
,
218 IN EFI_DEVICE_PATH_PROTOCOL
* RemainingDevicePath OPTIONAL
223 SnpNt32DriverBindingStop (
224 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
225 IN EFI_HANDLE ControllerHandle
,
226 IN UINTN NumberOfChildren
,
227 IN EFI_HANDLE
*ChildHandleBuffer
231 SnpNt32InitializeGlobalData (
232 IN SNPNT32_GLOBAL_DATA
*This
236 SnpNt32InitializeInstanceData (
237 IN SNPNT32_GLOBAL_DATA
*This
,
238 IN SNPNT32_INSTANCE_DATA
*Instance
242 SnpNt32CloseInstance (
243 IN SNPNT32_GLOBAL_DATA
*This
,
244 IN SNPNT32_INSTANCE_DATA
*Instance