]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Impl.h
1. Add DPC protocol and DpcLib library in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Udp4Dxe / Udp4Impl.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
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 Udp4Impl.h\r
15\r
16Abstract:\r
17\r
18 EFI UDPv4 protocol implementation\r
19\r
20\r
21**/\r
22\r
23#ifndef _UDP4_IMPL_H_\r
24#define _UDP4_IMPL_H_\r
25\r
8a67d61d 26#include <PiDxe.h>\r
27\r
28#include <Protocol/IP4.h>\r
29#include <Protocol/Udp4.h>\r
83cbd279 30\r
8a67d61d 31#include <Library/IpIoLib.h>\r
32#include <Library/DebugLib.h>\r
33#include <Library/UefiRuntimeServicesTableLib.h>\r
34#include <Library/UefiDriverEntryPoint.h>\r
35#include <Library/UefiBootServicesTableLib.h>\r
36#include <Library/BaseLib.h>\r
83cbd279 37#include <Library/UefiLib.h>\r
38#include <Library/BaseMemoryLib.h>\r
39#include <Library/MemoryAllocationLib.h>\r
40\r
41#include "Udp4Driver.h"\r
42\r
43\r
44extern EFI_COMPONENT_NAME_PROTOCOL gUdp4ComponentName;\r
45extern EFI_COMPONENT_NAME2_PROTOCOL gUdp4ComponentName2;\r
46extern EFI_SERVICE_BINDING_PROTOCOL mUdp4ServiceBinding;\r
47extern EFI_UDP4_PROTOCOL mUdp4Protocol;\r
48extern UINT16 mUdp4RandomPort;\r
49\r
50#define ICMP_ERROR_PACKET_LENGTH 8\r
51\r
52#define UDP4_TIMEOUT_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds\r
53\r
54#define UDP4_HEADER_SIZE sizeof (EFI_UDP4_HEADER)\r
55#define UDP4_MAX_DATA_SIZE 65507\r
56\r
57#define UDP4_PORT_KNOWN 1024\r
58\r
59#define UDP4_SERVICE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', '4')\r
60\r
61#define UDP4_SERVICE_DATA_FROM_THIS(a) \\r
62 CR ( \\r
63 (a), \\r
64 UDP4_SERVICE_DATA, \\r
65 ServiceBinding, \\r
66 UDP4_SERVICE_DATA_SIGNATURE \\r
67 )\r
68\r
69typedef struct _UDP4_SERVICE_DATA_ {\r
70 UINT32 Signature;\r
71 EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
72 EFI_HANDLE ImageHandle;\r
73 EFI_HANDLE ControllerHandle;\r
74 NET_LIST_ENTRY ChildrenList;\r
75 UINTN ChildrenNumber;\r
76 IP_IO *IpIo;\r
77\r
78 EFI_EVENT TimeoutEvent;\r
79\r
80 CHAR16 *MacString;\r
81} UDP4_SERVICE_DATA;\r
82\r
83#define UDP4_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32('U', 'd', 'p', 'I')\r
84\r
85#define UDP4_INSTANCE_DATA_FROM_THIS(a) \\r
86 CR ( \\r
87 (a), \\r
88 UDP4_INSTANCE_DATA, \\r
89 Udp4Proto, \\r
90 UDP4_INSTANCE_DATA_SIGNATURE \\r
91 )\r
92\r
93typedef struct _UDP4_INSTANCE_DATA_ {\r
94 UINT32 Signature;\r
95 NET_LIST_ENTRY Link;\r
96\r
97 UDP4_SERVICE_DATA *Udp4Service;\r
98 EFI_UDP4_PROTOCOL Udp4Proto;\r
99 EFI_UDP4_CONFIG_DATA ConfigData;\r
100 EFI_HANDLE ChildHandle;\r
101 BOOLEAN Configured;\r
102 BOOLEAN IsNoMapping;\r
103\r
104 NET_MAP TxTokens;\r
105 NET_MAP RxTokens;\r
106\r
107 NET_MAP McastIps;\r
108\r
109 NET_LIST_ENTRY RcvdDgramQue;\r
110 NET_LIST_ENTRY DeliveredDgramQue;\r
111\r
112 UINT16 HeadSum;\r
113\r
114 EFI_STATUS IcmpError;\r
115\r
116 IP_IO_IP_INFO *IpInfo;\r
117\r
118 BOOLEAN Destroyed;\r
119} UDP4_INSTANCE_DATA;\r
120\r
121typedef struct _UDP4_RXDATA_WRAP_ {\r
122 NET_LIST_ENTRY Link;\r
123 NET_BUF *Packet;\r
124 UINT32 TimeoutTick;\r
125 EFI_UDP4_RECEIVE_DATA RxData;\r
126} UDP4_RXDATA_WRAP;\r
127\r
128EFI_STATUS\r
129EFIAPI\r
130Udp4GetModeData (\r
131 IN EFI_UDP4_PROTOCOL *This,\r
132 OUT EFI_UDP4_CONFIG_DATA *Udp4ConfigData OPTIONAL,\r
133 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,\r
134 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,\r
135 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL\r
136 );\r
137\r
138EFI_STATUS\r
139EFIAPI\r
140Udp4Configure (\r
141 IN EFI_UDP4_PROTOCOL *This,\r
142 IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL\r
143 );\r
144\r
145EFI_STATUS\r
146EFIAPI\r
147Udp4Groups (\r
148 IN EFI_UDP4_PROTOCOL *This,\r
149 IN BOOLEAN JoinFlag,\r
150 IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL\r
151 );\r
152\r
153EFI_STATUS\r
154EFIAPI\r
155Udp4Routes (\r
156 IN EFI_UDP4_PROTOCOL *This,\r
157 IN BOOLEAN DeleteRoute,\r
158 IN EFI_IPv4_ADDRESS *SubnetAddress,\r
159 IN EFI_IPv4_ADDRESS *SubnetMask,\r
160 IN EFI_IPv4_ADDRESS *GatewayAddress\r
161 );\r
162\r
163EFI_STATUS\r
164EFIAPI\r
165Udp4Transmit (\r
166 IN EFI_UDP4_PROTOCOL *This,\r
167 IN EFI_UDP4_COMPLETION_TOKEN *Token\r
168 );\r
169\r
170EFI_STATUS\r
171EFIAPI\r
172Udp4Receive (\r
173 IN EFI_UDP4_PROTOCOL *This,\r
174 IN EFI_UDP4_COMPLETION_TOKEN *Token\r
175 );\r
176\r
177EFI_STATUS\r
178EFIAPI\r
179Udp4Cancel (\r
180 IN EFI_UDP4_PROTOCOL *This,\r
181 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL\r
182 );\r
183\r
184EFI_STATUS\r
185EFIAPI\r
186Udp4Poll (\r
187 IN EFI_UDP4_PROTOCOL *This\r
188 );\r
189\r
190EFI_STATUS\r
191Udp4CreateService (\r
192 IN UDP4_SERVICE_DATA *Udp4Service,\r
193 IN EFI_HANDLE ImageHandle,\r
194 IN EFI_HANDLE ControllerHandle\r
195 );\r
196\r
197VOID\r
198Udp4CleanService (\r
199 IN UDP4_SERVICE_DATA *Udp4Service\r
200 );\r
201\r
202VOID\r
203Udp4InitInstance (\r
204 IN UDP4_SERVICE_DATA *Udp4Service,\r
205 IN UDP4_INSTANCE_DATA *Instance\r
206 );\r
207\r
208VOID\r
209Udp4CleanInstance (\r
210 IN UDP4_INSTANCE_DATA *Instance\r
211 );\r
212\r
213EFI_STATUS\r
214Udp4Bind (\r
215 IN NET_LIST_ENTRY *InstanceList,\r
216 IN EFI_UDP4_CONFIG_DATA *ConfigData\r
217 );\r
218\r
219BOOLEAN\r
220Udp4IsReconfigurable (\r
221 IN EFI_UDP4_CONFIG_DATA *OldConfigData,\r
222 IN EFI_UDP4_CONFIG_DATA *NewConfigData\r
223 );\r
224\r
225VOID\r
226Udp4BuildIp4ConfigData (\r
227 IN EFI_UDP4_CONFIG_DATA *Udp4ConfigData,\r
228 IN EFI_IP4_CONFIG_DATA *Ip4ConfigData\r
229 );\r
230\r
231EFI_STATUS\r
232Udp4ValidateTxToken (\r
233 IN UDP4_INSTANCE_DATA *Instance,\r
234 IN EFI_UDP4_COMPLETION_TOKEN *TxToken\r
235 );\r
236\r
237EFI_STATUS\r
238Udp4TokenExist (\r
239 IN NET_MAP *Map,\r
240 IN NET_MAP_ITEM *Item,\r
241 IN VOID *Context\r
242 );\r
243\r
244UINT16\r
245Udp4Checksum (\r
246 IN NET_BUF *Packet,\r
247 IN UINT16 HeadSum\r
248 );\r
249\r
250EFI_STATUS\r
251Udp4RemoveToken (\r
252 IN NET_MAP *TokenMap,\r
253 IN EFI_UDP4_COMPLETION_TOKEN *Token\r
254 );\r
255\r
256EFI_STATUS\r
257Udp4LeaveGroup (\r
258 IN NET_MAP *Map,\r
259 IN NET_MAP_ITEM *Item,\r
260 IN VOID *Arg OPTIONAL\r
261 );\r
262\r
263VOID\r
36ee91ca 264Udp4FlushRcvdDgram (\r
265 IN UDP4_INSTANCE_DATA *Instance\r
83cbd279 266 );\r
267\r
268EFI_STATUS\r
269Udp4InstanceCancelToken (\r
270 IN UDP4_INSTANCE_DATA *Instance,\r
271 IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL\r
272 );\r
273\r
274VOID\r
275Udp4InstanceDeliverDgram (\r
276 IN UDP4_INSTANCE_DATA *Instance\r
277 );\r
278\r
279VOID\r
280Udp4ReportIcmpError (\r
281 IN UDP4_INSTANCE_DATA *Instance\r
282 );\r
283\r
284VOID\r
285Udp4NetVectorExtFree (\r
286 VOID *Context\r
287 );\r
288\r
289EFI_STATUS\r
290Udp4SetVariableData (\r
291 IN UDP4_SERVICE_DATA *Udp4Service\r
292 );\r
293\r
294VOID\r
295Udp4ClearVariableData (\r
296 IN UDP4_SERVICE_DATA *Udp4Service\r
297 );\r
298\r
299#endif\r
300\r