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