]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/SnpNt32Dxe/SnpNt32.h
Nt32Pkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Nt32Pkg / SnpNt32Dxe / SnpNt32.h
CommitLineData
057d744e 1/** @file\r
2\r
d547b32d 3Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
9d2eedba 4SPDX-License-Identifier: BSD-2-Clause-Patent\r
057d744e 5\r
6Module Name:\r
7\r
8 SnpNt32.h\r
9\r
10Abstract:\r
11\r
12-**/\r
13\r
14#ifndef _SNP_NT32_H_\r
15#define _SNP_NT32_H_\r
593a8308 16\r
60c93673 17#include <Uefi.h>\r
593a8308 18\r
19#include <Protocol/SimpleNetwork.h>\r
057d744e 20#include <Protocol/DevicePath.h>\r
593a8308 21#include <Protocol/WinNtThunk.h>\r
057d744e 22\r
593a8308 23#include <Library/BaseLib.h>\r
24#include <Library/DebugLib.h>\r
25#include <Library/BaseMemoryLib.h>\r
26#include <Library/UefiBootServicesTableLib.h>\r
27#include <Library/UefiLib.h>\r
057d744e 28#include <Library/DevicePathLib.h>\r
29#include <Library/NetLib.h>\r
30#include <Library/MemoryAllocationLib.h>\r
31\r
32typedef struct _SNPNT32_GLOBAL_DATA SNPNT32_GLOBAL_DATA;\r
33typedef struct _SNPNT32_INSTANCE_DATA SNPNT32_INSTANCE_DATA;\r
34\r
35#define NETWORK_LIBRARY_NAME_U L"SnpNt32Io.dll"\r
36\r
37#define NETWORK_LIBRARY_INITIALIZE "SnpInitialize"\r
38#define NETWORK_LIBRARY_FINALIZE "SnpFinalize"\r
39#define NETWORK_LIBRARY_SET_RCV_FILTER "SnpSetReceiveFilter"\r
40#define NETWORK_LIBRARY_RECEIVE "SnpReceive"\r
41#define NETWORK_LIBRARY_TRANSMIT "SnpTransmit"\r
42\r
43#pragma pack(1)\r
44typedef struct _NT_NET_INTERFACE_INFO {\r
45 UINT32 InterfaceIndex;\r
46 EFI_MAC_ADDRESS MacAddr;\r
47} NT_NET_INTERFACE_INFO;\r
48#pragma pack()\r
49\r
50#define NET_ETHER_HEADER_SIZE 14\r
51\r
52#define MAX_INTERFACE_INFO_NUMBER 16\r
53#define MAX_FILE_NAME_LENGTH 280\r
54\r
a2cc5fea
ZL
55#define SNP_MAX_TX_BUFFER_NUM 65536\r
56#define SNP_TX_BUFFER_INCREASEMENT 32\r
57\r
58\r
59\r
60\r
057d744e 61//\r
62// Functions in Net Library\r
63//\r
64typedef\r
65INT32\r
66(*NT_NET_INITIALIZE) (\r
67 IN OUT UINT32 *InterfaceCount,\r
68 IN OUT NT_NET_INTERFACE_INFO * InterfaceInfoBuffer\r
69 );\r
70\r
71typedef\r
72INT32\r
73(*NT_NET_FINALIZE) (\r
74 VOID\r
75 );\r
76\r
77typedef\r
78INT32\r
79(*NT_NET_SET_RECEIVE_FILTER) (\r
80 IN UINT32 Index,\r
81 IN UINT32 EnableFilter,\r
82 IN UINT32 MCastFilterCnt,\r
83 IN EFI_MAC_ADDRESS * MCastFilter\r
84 );\r
85\r
86typedef\r
87INT32\r
88(*NT_NET_RECEIVE) (\r
89 IN UINT32 Index,\r
90 IN OUT UINT32 *BufferSize,\r
91 OUT VOID *Buffer\r
92 );\r
93\r
94typedef\r
95INT32\r
96(*NT_NET_TRANSMIT) (\r
97 IN UINT32 Index,\r
98 IN UINT32 HeaderSize,\r
99 IN UINT32 BufferSize,\r
100 IN VOID *Buffer,\r
101 IN EFI_MAC_ADDRESS * SrcAddr,\r
102 IN EFI_MAC_ADDRESS * DestAddr,\r
103 IN UINT16 *Protocol\r
104 );\r
105\r
106typedef struct _NT_NET_UTILITY_TABLE {\r
107 NT_NET_INITIALIZE Initialize;\r
108 NT_NET_FINALIZE Finalize;\r
109 NT_NET_SET_RECEIVE_FILTER SetReceiveFilter;\r
110 NT_NET_RECEIVE Receive;\r
111 NT_NET_TRANSMIT Transmit;\r
112} NT_NET_UTILITY_TABLE;\r
113\r
114//\r
115// Private functions\r
116//\r
117typedef\r
118EFI_STATUS\r
119(*SNPNT32_INITIALIZE_GLOBAL_DATA) (\r
120 IN SNPNT32_GLOBAL_DATA * This\r
121 );\r
122\r
123typedef\r
124EFI_STATUS\r
125(*SNPNT32_INITIALIZE_INSTANCE_DATA) (\r
126 IN SNPNT32_GLOBAL_DATA * This,\r
127 IN SNPNT32_INSTANCE_DATA * Instance\r
128 );\r
129\r
130typedef\r
131EFI_STATUS\r
132(*SNPNT32_CLOSE_INSTANCE) (\r
133 IN SNPNT32_GLOBAL_DATA * This,\r
134 IN SNPNT32_INSTANCE_DATA * Instance\r
135 );\r
136\r
137//\r
138// Global data for this driver\r
139//\r
99e1dd89 140#define SNP_NT32_DRIVER_SIGNATURE SIGNATURE_32 ('W', 'S', 'N', 'P')\r
057d744e 141\r
a00ec39b 142struct _SNPNT32_GLOBAL_DATA {\r
057d744e 143 UINT32 Signature;\r
144\r
145 //\r
146 // List for all the fake SNP instance\r
147 //\r
e90e8777 148 LIST_ENTRY InstanceList;\r
057d744e 149\r
150 EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk;\r
151 HMODULE NetworkLibraryHandle;\r
152\r
153 NT_NET_UTILITY_TABLE NtNetUtilityTable;\r
154\r
e90e8777 155 EFI_LOCK Lock;\r
057d744e 156\r
157 //\r
158 // Private functions\r
159 //\r
160 SNPNT32_INITIALIZE_GLOBAL_DATA InitializeGlobalData;\r
161 SNPNT32_INITIALIZE_INSTANCE_DATA InitializeInstanceData;\r
162 SNPNT32_CLOSE_INSTANCE CloseInstance;\r
a00ec39b 163};\r
057d744e 164\r
165//\r
166// Instance data for each fake SNP instance\r
167//\r
99e1dd89 168#define SNP_NT32_INSTANCE_SIGNATURE SIGNATURE_32 ('w', 'S', 'N', 'P')\r
057d744e 169\r
a00ec39b 170struct _SNPNT32_INSTANCE_DATA {\r
057d744e 171 UINT32 Signature;\r
172\r
173 //\r
174 // List entry use for linking with other instance\r
175 //\r
e90e8777 176 LIST_ENTRY Entry;\r
057d744e 177\r
d547b32d
JW
178 //\r
179 // Array of the recycled transmit buffer address.\r
180 //\r
181 UINT64 *RecycledTxBuf;\r
182\r
183 //\r
184 // Current number of recycled buffer pointers in RecycledTxBuf.\r
185 //\r
186 UINT32 RecycledTxBufCount;\r
187\r
188 //\r
189 // The maximum number of recycled buffer pointers in RecycledTxBuf.\r
190 //\r
191 UINT32 MaxRecycledTxBuf;\r
192\r
057d744e 193 SNPNT32_GLOBAL_DATA *GlobalData;\r
194\r
195 EFI_HANDLE DeviceHandle;\r
196 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
197\r
198 EFI_SIMPLE_NETWORK_PROTOCOL Snp;\r
199 EFI_SIMPLE_NETWORK_MODE Mode;\r
200\r
201 NT_NET_INTERFACE_INFO InterfaceInfo;\r
202\r
203 //\r
204 // Private functions\r
205 //\r
a00ec39b 206};\r
057d744e 207\r
208#define SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS(a) \\r
209 CR ( \\r
210 a, \\r
211 SNPNT32_INSTANCE_DATA, \\r
212 Snp, \\r
213 SNP_NT32_INSTANCE_SIGNATURE \\r
214 )\r
215\r
531237a5 216extern EFI_DRIVER_BINDING_PROTOCOL gSnpNt32DriverBinding;\r
057d744e 217extern EFI_COMPONENT_NAME_PROTOCOL gSnpNt32DriverComponentName;\r
218extern EFI_COMPONENT_NAME2_PROTOCOL gSnpNt32DriverComponentName2;\r
219\r
531237a5 220/**\r
221 Test to see if this driver supports ControllerHandle. This service\r
222 is called by the EFI boot service ConnectController(). In\r
223 order to make drivers as small as possible, there are a few calling\r
224 restrictions for this service. ConnectController() must\r
225 follow these calling restrictions. If any other agent wishes to call\r
226 Supported() it must also follow these calling restrictions.\r
227\r
228 @param This Protocol instance pointer.\r
229 @param ControllerHandle Handle of device to test\r
230 @param RemainingDevicePath Optional parameter use to pick a specific child\r
231 device to start.\r
232\r
233 @retval EFI_SUCCESS This driver supports this device\r
234 @retval EFI_UNSUPPORTED This driver does not support this device\r
235\r
236**/\r
057d744e 237EFI_STATUS\r
238EFIAPI\r
239SnpNt32DriverBindingSupported (\r
240 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
241 IN EFI_HANDLE ControllerHandle,\r
242 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
243 );\r
244\r
531237a5 245/**\r
246 Start this driver on ControllerHandle. This service is called by the\r
247 EFI boot service ConnectController(). In order to make\r
248 drivers as small as possible, there are a few calling restrictions for\r
249 this service. ConnectController() must follow these\r
250 calling restrictions. If any other agent wishes to call Start() it\r
251 must also follow these calling restrictions.\r
252\r
253 @param This Protocol instance pointer.\r
254 @param ControllerHandle Handle of device to bind driver to\r
255 @param RemainingDevicePath Optional parameter use to pick a specific child\r
256 device to start.\r
257\r
258 @retval EFI_SUCCESS Always succeeds.\r
259\r
260**/\r
057d744e 261EFI_STATUS\r
262EFIAPI\r
263SnpNt32DriverBindingStart (\r
264 IN EFI_DRIVER_BINDING_PROTOCOL * This,\r
265 IN EFI_HANDLE ControllerHandle,\r
266 IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL\r
267 );\r
268\r
531237a5 269/**\r
270 Stop this driver on ControllerHandle. This service is called by the\r
271 EFI boot service DisconnectController(). In order to\r
272 make drivers as small as possible, there are a few calling\r
273 restrictions for this service. DisconnectController()\r
274 must follow these calling restrictions. If any other agent wishes\r
275 to call Stop() it must also follow these calling restrictions.\r
276 \r
277 @param This Protocol instance pointer.\r
278 @param ControllerHandle Handle of device to stop driver on\r
279 @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of\r
280 children is zero stop the entire bus driver.\r
281 @param ChildHandleBuffer List of Child Handles to Stop.\r
282\r
283 @retval EFI_SUCCESS Always succeeds.\r
284\r
285**/\r
057d744e 286EFI_STATUS\r
287EFIAPI\r
288SnpNt32DriverBindingStop (\r
289 IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
290 IN EFI_HANDLE ControllerHandle,\r
291 IN UINTN NumberOfChildren,\r
292 IN EFI_HANDLE *ChildHandleBuffer\r
293 );\r
294\r
531237a5 295/**\r
296 Initialize the driver's global data.\r
297\r
298 @param This Pointer to the global context data.\r
299\r
300 @retval EFI_SUCCESS The global data is initialized.\r
301 @retval EFI_NOT_FOUND The required DLL is not found.\r
302 @retval EFI_DEVICE_ERROR Error initialize network utility library.\r
303 @retval EFI_OUT_OF_RESOURCES Out of resource.\r
304 @retval other Other errors.\r
305\r
306**/\r
057d744e 307EFI_STATUS\r
308SnpNt32InitializeGlobalData (\r
531237a5 309 IN OUT SNPNT32_GLOBAL_DATA *This\r
057d744e 310 );\r
311\r
531237a5 312/**\r
313 Initialize the snpnt32 driver instance.\r
314\r
315 @param This Pointer to the SnpNt32 global data.\r
316 @param Instance Pointer to the instance context data.\r
317\r
318 @retval EFI_SUCCESS The driver instance is initialized.\r
319 @retval other Initialization errors.\r
320\r
321**/\r
057d744e 322EFI_STATUS\r
323SnpNt32InitializeInstanceData (\r
531237a5 324 IN SNPNT32_GLOBAL_DATA *This,\r
325 IN OUT SNPNT32_INSTANCE_DATA *Instance\r
057d744e 326 );\r
327\r
531237a5 328/**\r
329 Close the SnpNt32 driver instance.\r
330\r
331 @param This Pointer to the SnpNt32 global data.\r
332 @param Instance Pointer to the instance context data.\r
333\r
334 @retval EFI_SUCCESS The instance is closed.\r
335\r
336**/\r
057d744e 337EFI_STATUS\r
338SnpNt32CloseInstance (\r
531237a5 339 IN SNPNT32_GLOBAL_DATA *This,\r
340 IN OUT SNPNT32_INSTANCE_DATA *Instance\r
057d744e 341 );\r
342\r
343#endif\r