~ubuntu-branches/ubuntu/wily/edk2/wily

« back to all changes in this revision

Viewing changes to NetworkPkg/UefiPxeBcDxe/PxeBcSupport.h

  • Committer: Package Import Robot
  • Author(s): Steve Langasek
  • Date: 2013-02-10 13:11:25 UTC
  • Revision ID: package-import@ubuntu.com-20130210131125-0zwkb8f8m4ecia4m
Tags: upstream-0~20121205.edae8d2d
ImportĀ upstreamĀ versionĀ 0~20121205.edae8d2d

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/** @file
 
2
  Support functions declaration for UefiPxeBc Driver.
 
3
 
 
4
  Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
 
5
 
 
6
  This program and the accompanying materials
 
7
  are licensed and made available under the terms and conditions of the BSD License
 
8
  which accompanies this distribution.  The full text of the license may be found at
 
9
  http://opensource.org/licenses/bsd-license.php.
 
10
 
 
11
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 
12
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 
13
 
 
14
**/
 
15
 
 
16
#ifndef __EFI_PXEBC_SUPPORT_H__
 
17
#define __EFI_PXEBC_SUPPORT_H__
 
18
 
 
19
 
 
20
#define ICMP_DEST_UNREACHABLE      3
 
21
#define ICMP_SOURCE_QUENCH         4
 
22
#define ICMP_REDIRECT              5
 
23
#define ICMP_ECHO_REQUEST          8
 
24
#define ICMP_TIME_EXCEEDED         11
 
25
#define ICMP_PARAMETER_PROBLEM     12
 
26
 
 
27
 
 
28
 
 
29
/**
 
30
  Flush the previous configration using the new station Ip address.
 
31
 
 
32
  @param[in]   Private        Pointer to PxeBc private data.
 
33
  @param[in]   StationIp      Pointer to the station Ip address.
 
34
  @param[in]   SubnetMask     Pointer to the subnet mask address for v4.
 
35
 
 
36
  @retval EFI_SUCCESS         Successfully flushed the previous config.
 
37
  @retval Others              Failed to flush using the new station Ip.
 
38
 
 
39
**/
 
40
EFI_STATUS
 
41
PxeBcFlushStaionIp (
 
42
  PXEBC_PRIVATE_DATA       *Private,
 
43
  EFI_IP_ADDRESS           *StationIp,
 
44
  EFI_IP_ADDRESS           *SubnetMask     OPTIONAL
 
45
  );
 
46
 
 
47
 
 
48
/**
 
49
  Notify callback function when an event is triggered.
 
50
 
 
51
  @param[in]  Event           The triggered event.
 
52
  @param[in]  Context         The opaque parameter to the function.
 
53
 
 
54
**/
 
55
VOID
 
56
EFIAPI
 
57
PxeBcCommonNotify (
 
58
  IN EFI_EVENT           Event,
 
59
  IN VOID                *Context
 
60
  );
 
61
 
 
62
 
 
63
/**
 
64
  Perform arp resolution from the arp cache in PxeBcMode.
 
65
 
 
66
  @param  Mode           Pointer to EFI_PXE_BASE_CODE_MODE.
 
67
  @param  Ip4Addr        The Ip4 address for resolution.
 
68
  @param  MacAddress     The resoluted MAC address if the resolution is successful.
 
69
                         The value is undefined if resolution fails.
 
70
 
 
71
  @retval TRUE           Found a matched entry.
 
72
  @retval FALSE          Did not find a matched entry.
 
73
 
 
74
**/
 
75
BOOLEAN
 
76
PxeBcCheckArpCache (
 
77
  IN  EFI_PXE_BASE_CODE_MODE    *Mode,
 
78
  IN  EFI_IPv4_ADDRESS          *Ip4Addr,
 
79
  OUT EFI_MAC_ADDRESS           *MacAddress
 
80
  );
 
81
 
 
82
 
 
83
/**
 
84
  Update arp cache periodically.
 
85
 
 
86
  @param  Event              Pointer to EFI_PXE_BC_PROTOCOL.
 
87
  @param  Context            Context of the timer event.
 
88
 
 
89
**/
 
90
VOID
 
91
EFIAPI
 
92
PxeBcArpCacheUpdate (
 
93
  IN EFI_EVENT    Event,
 
94
  IN VOID         *Context
 
95
  );
 
96
 
 
97
 
 
98
/**
 
99
  xxx
 
100
 
 
101
  @param  Event                 The event signaled.
 
102
  @param  Context               The context passed in by the event notifier.
 
103
 
 
104
**/
 
105
VOID
 
106
EFIAPI
 
107
PxeBcIcmpErrorUpdate (
 
108
  IN EFI_EVENT             Event,
 
109
  IN VOID                  *Context
 
110
  );
 
111
 
 
112
 
 
113
/**
 
114
  xxx
 
115
 
 
116
  @param  Event                 The event signaled.
 
117
  @param  Context               The context passed in by the event notifier.
 
118
 
 
119
**/
 
120
VOID
 
121
EFIAPI
 
122
PxeBcIcmp6ErrorUpdate (
 
123
  IN EFI_EVENT             Event,
 
124
  IN VOID                  *Context
 
125
  );
 
126
 
 
127
 
 
128
/**
 
129
  This function is to configure a UDPv4 instance for UdpWrite.
 
130
 
 
131
  @param[in]       Udp4                 Pointer to EFI_UDP4_PROTOCOL.
 
132
  @param[in]       StationIp            Pointer to the station address.
 
133
  @param[in]       SubnetMask           Pointer to the subnet mask.
 
134
  @param[in]       Gateway              Pointer to the gateway address.
 
135
  @param[in, out]  SrcPort              Pointer to the source port.
 
136
  @param[in]       DoNotFragment        The flag of DoNotFragment bit in the IPv4
 
137
                                        packet.
 
138
 
 
139
  @retval          EFI_SUCCESS          Successfully configured this instance.
 
140
  @retval          Others               Failed to configure this instance.
 
141
 
 
142
**/
 
143
EFI_STATUS
 
144
PxeBcConfigUdp4Write (
 
145
  IN     EFI_UDP4_PROTOCOL  *Udp4,
 
146
  IN     EFI_IPv4_ADDRESS   *StationIp,
 
147
  IN     EFI_IPv4_ADDRESS   *SubnetMask,
 
148
  IN     EFI_IPv4_ADDRESS   *Gateway,
 
149
  IN OUT UINT16             *SrcPort,
 
150
  IN     BOOLEAN            DoNotFragment
 
151
  );
 
152
 
 
153
 
 
154
/**
 
155
  This function is to configure a UDPv6 instance for UdpWrite.
 
156
 
 
157
  @param[in]       Udp6                 Pointer to EFI_UDP6_PROTOCOL.
 
158
  @param[in]       StationIp            Pointer to the station address.
 
159
  @param[in, out]  SrcPort              Pointer to the source port.
 
160
 
 
161
  @retval          EFI_SUCCESS          Successfuly configured this instance.
 
162
  @retval          Others               Failed to configure this instance.
 
163
 
 
164
**/
 
165
EFI_STATUS
 
166
PxeBcConfigUdp6Write (
 
167
  IN     EFI_UDP6_PROTOCOL  *Udp6,
 
168
  IN     EFI_IPv6_ADDRESS   *StationIp,
 
169
  IN OUT UINT16             *SrcPort
 
170
  );
 
171
 
 
172
/**
 
173
  This function is to configure a UDPv4 instance for UdpWrite.
 
174
 
 
175
  @param[in]       Udp4                 Pointer to EFI_UDP4_PROTOCOL.
 
176
  @param[in]       Session              Pointer to the UDP4 session data.
 
177
  @param[in]       TimeoutEvent         The event for timeout.
 
178
  @param[in]       Gateway              Pointer to the gateway address.
 
179
  @param[in]       HeaderSize           An optional field which may be set to the length of a header
 
180
                                        at HeaderPtr to be prefixed to the data at BufferPtr.
 
181
  @param[in]       HeaderPtr            If HeaderSize is not NULL, a pointer to a header to be
 
182
                                        prefixed to the data at BufferPtr.
 
183
  @param[in]       BufferSize           A pointer to the size of the data at BufferPtr.
 
184
  @param[in]       BufferPtr            A pointer to the data to be written.
 
185
 
 
186
  @retval          EFI_SUCCESS          Successfully sent out data with Udp4Write.
 
187
  @retval          Others               Failed to send out data.
 
188
 
 
189
**/
 
190
EFI_STATUS
 
191
PxeBcUdp4Write (
 
192
  IN EFI_UDP4_PROTOCOL       *Udp4,
 
193
  IN EFI_UDP4_SESSION_DATA   *Session,
 
194
  IN EFI_EVENT               TimeoutEvent,
 
195
  IN EFI_IPv4_ADDRESS        *Gateway      OPTIONAL,
 
196
  IN UINTN                   *HeaderSize   OPTIONAL,
 
197
  IN VOID                    *HeaderPtr    OPTIONAL,
 
198
  IN UINTN                   *BufferSize,
 
199
  IN VOID                    *BufferPtr
 
200
  );
 
201
 
 
202
 
 
203
/**
 
204
  This function is to configure a UDPv6 instance for UdpWrite.
 
205
 
 
206
  @param[in]       Udp6                 Pointer to EFI_UDP6_PROTOCOL.
 
207
  @param[in]       Session              Pointer to the UDP6 session data.
 
208
  @param[in]       TimeoutEvent         The event for timeout.
 
209
  @param[in]       HeaderSize           An optional field which may be set to the length of a header
 
210
                                        at HeaderPtr to be prefixed to the data at BufferPtr.
 
211
  @param[in]       HeaderPtr            If HeaderSize is not NULL, a pointer to a header to be
 
212
                                        prefixed to the data at BufferPtr.
 
213
  @param[in]       BufferSize           A pointer to the size of the data at BufferPtr.
 
214
  @param[in]       BufferPtr            A pointer to the data to be written.
 
215
 
 
216
  @retval          EFI_SUCCESS          Successfully to send out data with Udp6Write.
 
217
  @retval          Others               Failed to send out data.
 
218
 
 
219
**/
 
220
EFI_STATUS
 
221
PxeBcUdp6Write (
 
222
  IN EFI_UDP6_PROTOCOL       *Udp6,
 
223
  IN EFI_UDP6_SESSION_DATA   *Session,
 
224
  IN EFI_EVENT               TimeoutEvent,
 
225
  IN UINTN                   *HeaderSize   OPTIONAL,
 
226
  IN VOID                    *HeaderPtr    OPTIONAL,
 
227
  IN UINTN                   *BufferSize,
 
228
  IN VOID                    *BufferPtr
 
229
  );
 
230
 
 
231
 
 
232
/**
 
233
  Check the received packet with the Ip filter.
 
234
 
 
235
  @param[in]  Mode                Pointer to mode data of PxeBc.
 
236
  @param[in]  Session             Pointer to the current UDPv4 session.
 
237
  @param[in]  OpFlags             Operation flag for UdpRead/UdpWrite.
 
238
 
 
239
  @retval     TRUE                Succesfully passed the Ip filter.
 
240
  @retval     FALSE               Failed to pass the Ip filter.
 
241
 
 
242
**/
 
243
BOOLEAN
 
244
PxeBcCheckByIpFilter (
 
245
  IN EFI_PXE_BASE_CODE_MODE    *Mode,
 
246
  IN VOID                      *Session,
 
247
  IN UINT16                    OpFlags
 
248
  );
 
249
 
 
250
 
 
251
/**
 
252
  Filter the received packet with the destination Ip.
 
253
 
 
254
  @param[in]       Mode           Pointer to mode data of PxeBc.
 
255
  @param[in]       Session        Pointer to the current UDPv4 session.
 
256
  @param[in, out]  DestIp         Pointer to the dest Ip address.
 
257
  @param[in]       OpFlags        Operation flag for UdpRead/UdpWrite.
 
258
 
 
259
  @retval     TRUE                Succesfully passed the IPv4 filter.
 
260
  @retval     FALSE               Failed to pass the IPv4 filter.
 
261
 
 
262
**/
 
263
BOOLEAN
 
264
PxeBcCheckByDestIp (
 
265
  IN     EFI_PXE_BASE_CODE_MODE    *Mode,
 
266
  IN     VOID                      *Session,
 
267
  IN OUT EFI_IP_ADDRESS            *DestIp,
 
268
  IN     UINT16                    OpFlags
 
269
  );
 
270
 
 
271
 
 
272
/**
 
273
  Check the received packet with the destination port.
 
274
 
 
275
  @param[in]       Mode           Pointer to mode data of PxeBc.
 
276
  @param[in]       Session        Pointer to the current UDPv4 session.
 
277
  @param[in, out]  DestPort       Pointer to the destination port.
 
278
  @param[in]       OpFlags        Operation flag for UdpRead/UdpWrite.
 
279
 
 
280
  @retval     TRUE                Succesfully passed the IPv4 filter.
 
281
  @retval     FALSE               Failed to pass the IPv4 filter.
 
282
 
 
283
**/
 
284
BOOLEAN
 
285
PxeBcCheckByDestPort (
 
286
  IN     EFI_PXE_BASE_CODE_MODE    *Mode,
 
287
  IN     VOID                      *Session,
 
288
  IN OUT UINT16                    *DestPort,
 
289
  IN     UINT16                    OpFlags
 
290
  );
 
291
 
 
292
 
 
293
/**
 
294
  Filter the received packet with the source Ip.
 
295
 
 
296
  @param[in]       Mode           Pointer to mode data of PxeBc.
 
297
  @param[in]       Session        Pointer to the current UDPv4 session.
 
298
  @param[in, out]  SrcIp          Pointer to the source Ip address.
 
299
  @param[in]       OpFlags        Operation flag for UdpRead/UdpWrite.
 
300
 
 
301
  @retval     TRUE                Succesfully passed the IPv4 filter.
 
302
  @retval     FALSE               Failed to pass the IPv4 filter.
 
303
 
 
304
**/
 
305
BOOLEAN
 
306
PxeBcFilterBySrcIp (
 
307
  IN     EFI_PXE_BASE_CODE_MODE    *Mode,
 
308
  IN     VOID                      *Session,
 
309
  IN OUT EFI_IP_ADDRESS            *SrcIp,
 
310
  IN     UINT16                    OpFlags
 
311
  );
 
312
 
 
313
 
 
314
/**
 
315
  Filter the received packet with the source port.
 
316
 
 
317
  @param[in]       Mode           Pointer to mode data of PxeBc.
 
318
  @param[in]       Session        Pointer to the current UDPv4 session.
 
319
  @param[in, out]  SrcPort        Pointer to the source port.
 
320
  @param[in]       OpFlags        Operation flag for UdpRead/UdpWrite.
 
321
 
 
322
  @retval     TRUE                Succesfully passed the IPv4 filter.
 
323
  @retval     FALSE               Failed to pass the IPv4 filter.
 
324
 
 
325
**/
 
326
BOOLEAN
 
327
PxeBcFilterBySrcPort (
 
328
  IN     EFI_PXE_BASE_CODE_MODE    *Mode,
 
329
  IN     VOID                      *Session,
 
330
  IN OUT UINT16                    *SrcPort,
 
331
  IN     UINT16                    OpFlags
 
332
  );
 
333
 
 
334
 
 
335
/**
 
336
  This function is to receive packet with Udp4Read.
 
337
 
 
338
  @param[in]       Udp4                 Pointer to EFI_UDP4_PROTOCOL.
 
339
  @param[in]       Token                Pointer to EFI_UDP4_COMPLETION_TOKEN.
 
340
  @param[in]       Mode                 Pointer to EFI_PXE_BASE_CODE_MODE.
 
341
  @param[in]       TimeoutEvent         The event for timeout.
 
342
  @param[in]       OpFlags              The UDP operation flags.
 
343
  @param[in]       IsDone               Pointer to IsDone flag.
 
344
  @param[out]      IsMatched            Pointer to IsMatched flag.
 
345
  @param[in, out]  DestIp               Pointer to destination address.
 
346
  @param[in, out]  DestPort             Pointer to destination port.
 
347
  @param[in, out]  SrcIp                Pointer to source address.
 
348
  @param[in, out]  SrcPort              Pointer to source port.
 
349
 
 
350
  @retval          EFI_SUCCESS          Successfully read data with Udp4.
 
351
  @retval          Others               Failed to send out data.
 
352
 
 
353
**/
 
354
EFI_STATUS
 
355
PxeBcUdp4Read (
 
356
  IN     EFI_UDP4_PROTOCOL            *Udp4,
 
357
  IN     EFI_UDP4_COMPLETION_TOKEN    *Token,
 
358
  IN     EFI_PXE_BASE_CODE_MODE       *Mode,
 
359
  IN     EFI_EVENT                    TimeoutEvent,
 
360
  IN     UINT16                       OpFlags,
 
361
  IN     BOOLEAN                      *IsDone,
 
362
     OUT BOOLEAN                      *IsMatched,
 
363
  IN OUT EFI_IP_ADDRESS               *DestIp      OPTIONAL,
 
364
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *DestPort    OPTIONAL,
 
365
  IN OUT EFI_IP_ADDRESS               *SrcIp       OPTIONAL,
 
366
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort     OPTIONAL
 
367
  );
 
368
 
 
369
 
 
370
/**
 
371
  This function is to receive packet with Udp6Read.
 
372
 
 
373
  @param[in]       Udp6                 Pointer to EFI_UDP6_PROTOCOL.
 
374
  @param[in]       Token                Pointer to EFI_UDP6_COMPLETION_TOKEN.
 
375
  @param[in]       Mode                 Pointer to EFI_PXE_BASE_CODE_MODE.
 
376
  @param[in]       TimeoutEvent         The event for timeout.
 
377
  @param[in]       OpFlags              The UDP operation flags.
 
378
  @param[in]       IsDone               Pointer to IsDone flag.
 
379
  @param[out]      IsMatched            Pointer to IsMatched flag.
 
380
  @param[in, out]  DestIp               Pointer to destination address.
 
381
  @param[in, out]  DestPort             Pointer to destination port.
 
382
  @param[in, out]  SrcIp                Pointer to source address.
 
383
  @param[in, out]  SrcPort              Pointer to source port.
 
384
 
 
385
  @retval          EFI_SUCCESS          Successfully read data with Udp6.
 
386
  @retval          Others               Failed to send out data.
 
387
 
 
388
**/
 
389
EFI_STATUS
 
390
PxeBcUdp6Read (
 
391
  IN     EFI_UDP6_PROTOCOL            *Udp6,
 
392
  IN     EFI_UDP6_COMPLETION_TOKEN    *Token,
 
393
  IN     EFI_PXE_BASE_CODE_MODE       *Mode,
 
394
  IN     EFI_EVENT                    TimeoutEvent,
 
395
  IN     UINT16                       OpFlags,
 
396
  IN     BOOLEAN                      *IsDone,
 
397
     OUT BOOLEAN                      *IsMatched,
 
398
  IN OUT EFI_IP_ADDRESS               *DestIp      OPTIONAL,
 
399
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *DestPort    OPTIONAL,
 
400
  IN OUT EFI_IP_ADDRESS               *SrcIp       OPTIONAL,
 
401
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort     OPTIONAL
 
402
  );
 
403
 
 
404
 
 
405
/**
 
406
  This function is to display the IPv4 address.
 
407
 
 
408
  @param[in]  Ip        Pointer to the IPv4 address.
 
409
 
 
410
**/
 
411
VOID
 
412
PxeBcShowIp4Addr (
 
413
  IN EFI_IPv4_ADDRESS   *Ip
 
414
  );
 
415
 
 
416
 
 
417
/**
 
418
  This function is to display the IPv6 address.
 
419
 
 
420
  @param[in]  Ip        Pointer to the IPv6 address.
 
421
 
 
422
**/
 
423
VOID
 
424
PxeBcShowIp6Addr (
 
425
  IN EFI_IPv6_ADDRESS   *Ip
 
426
  );
 
427
 
 
428
 
 
429
/**
 
430
  This function is to convert UINTN to ASCII string with required format.
 
431
 
 
432
  @param[in]  Number         Numeric value to be converted.
 
433
  @param[in]  Buffer         Pointer to the buffer for ASCII string.
 
434
  @param[in]  Length         Length of the required format.
 
435
 
 
436
**/
 
437
VOID
 
438
PxeBcUintnToAscDecWithFormat (
 
439
  IN UINTN                       Number,
 
440
  IN UINT8                       *Buffer,
 
441
  IN INTN                        Length
 
442
  );
 
443
 
 
444
 
 
445
/**
 
446
  This function is to convert a UINTN to a ASCII string, and return the
 
447
  actual length of the buffer.
 
448
 
 
449
  @param[in]  Number         Numeric value to be converted.
 
450
  @param[in]  Buffer         Pointer to the buffer for ASCII string.
 
451
 
 
452
  @return     Length         The actual length of the ASCII string.
 
453
 
 
454
**/
 
455
UINTN
 
456
PxeBcUintnToAscDec (
 
457
  IN UINTN               Number,
 
458
  IN UINT8               *Buffer
 
459
  );
 
460
 
 
461
/**
 
462
  This function is to convert unicode hex number to a UINT8.
 
463
 
 
464
  @param[out]  Digit                   The converted UINT8 for output.
 
465
  @param[in]   Char                    The unicode hex number to be converted.
 
466
 
 
467
  @retval      EFI_SUCCESS             Successfully converted the unicode hex.
 
468
  @retval      EFI_INVALID_PARAMETER   Failed to convert the unicode hex.
 
469
 
 
470
**/
 
471
EFI_STATUS
 
472
PxeBcUniHexToUint8 (
 
473
  OUT UINT8                *Digit,
 
474
  IN  CHAR16               Char
 
475
  );
 
476
 
 
477
/**
 
478
  Calculate the elapsed time.
 
479
 
 
480
  @param[in]      Private      The pointer to PXE private data
 
481
 
 
482
**/
 
483
VOID
 
484
CalcElapsedTime (
 
485
  IN     PXEBC_PRIVATE_DATA     *Private
 
486
  );
 
487
 
 
488
#endif