It also pass ICC+IPF and MYTOOLS+EBC build. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3711 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			178 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
| Copyright (c) 2006, Intel Corporation
 | |
| All rights reserved. This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   Udp4Io.h
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   The helper routines to access UDP service. It is used by both
 | |
|   DHCP and MTFTP.
 | |
| 
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _UDP4IO_H_
 | |
| #define _UDP4IO_H_
 | |
| 
 | |
| #include <PiDxe.h>
 | |
| 
 | |
| #include <Protocol/Udp4.h>
 | |
| 
 | |
| #include <Library/UdpIoLib.h>
 | |
| #include <Library/NetLib.h>
 | |
| 
 | |
| typedef struct _UDP_IO_PORT UDP_IO_PORT;
 | |
| 
 | |
| enum {
 | |
|   UDP_IO_RX_SIGNATURE = EFI_SIGNATURE_32 ('U', 'D', 'P', 'R'),
 | |
|   UDP_IO_TX_SIGNATURE = EFI_SIGNATURE_32 ('U', 'D', 'P', 'T'),
 | |
|   UDP_IO_SIGNATURE    = EFI_SIGNATURE_32 ('U', 'D', 'P', 'I'),
 | |
| };
 | |
| 
 | |
| typedef struct {
 | |
|   IP4_ADDR                  LocalAddr;
 | |
|   UINT16                    LocalPort;
 | |
|   IP4_ADDR                  RemoteAddr;
 | |
|   UINT16                    RemotePort;
 | |
| } UDP_POINTS;
 | |
| 
 | |
| //
 | |
| // This prototype is used by both receive and transmission.
 | |
| // When receiving Netbuf is allocated by UDP access point, and
 | |
| // released by user. When transmitting, the NetBuf is from user,
 | |
| // and provided to the callback as a reference.
 | |
| //
 | |
| typedef
 | |
| VOID
 | |
| (*UDP_IO_CALLBACK) (
 | |
|   IN NET_BUF                *Packet,
 | |
|   IN UDP_POINTS             *Points,
 | |
|   IN EFI_STATUS             IoStatus,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Each receive request is wrapped in an UDP_RX_TOKEN. Upon completion,
 | |
| // the CallBack will be called. Only one receive request is send to UDP.
 | |
| // HeadLen gives the length of the application's header. UDP_IO will
 | |
| // make the application's header continous before delivery up.
 | |
| //
 | |
| typedef struct {
 | |
|   UINT32                    Signature;
 | |
|   UDP_IO_PORT               *UdpIo;
 | |
| 
 | |
|   UDP_IO_CALLBACK           CallBack;
 | |
|   VOID                      *Context;
 | |
| 
 | |
|   UINT32                    HeadLen;
 | |
|   EFI_UDP4_COMPLETION_TOKEN UdpToken;
 | |
| } UDP_RX_TOKEN;
 | |
| 
 | |
| //
 | |
| // Each transmit request is wrapped in an UDP_TX_TOKEN. Upon completion,
 | |
| // the CallBack will be called. There can be several transmit requests.
 | |
| //
 | |
| typedef struct {
 | |
|   UINT32                    Signature;
 | |
|   NET_LIST_ENTRY            Link;
 | |
|   UDP_IO_PORT               *UdpIo;
 | |
| 
 | |
|   UDP_IO_CALLBACK           CallBack;
 | |
|   NET_BUF                   *Packet;
 | |
|   VOID                      *Context;
 | |
| 
 | |
|   EFI_UDP4_SESSION_DATA     UdpSession;
 | |
|   EFI_IPv4_ADDRESS          Gateway;
 | |
| 
 | |
|   EFI_UDP4_COMPLETION_TOKEN UdpToken;
 | |
|   EFI_UDP4_TRANSMIT_DATA    UdpTxData;
 | |
| } UDP_TX_TOKEN;
 | |
| 
 | |
| struct _UDP_IO_PORT {
 | |
|   UINT32                    Signature;
 | |
|   NET_LIST_ENTRY            Link;
 | |
|   INTN                      RefCnt;
 | |
| 
 | |
|   //
 | |
|   // Handle used to create/destory UDP child
 | |
|   //
 | |
|   EFI_HANDLE                Controller;
 | |
|   EFI_HANDLE                Image;
 | |
|   EFI_HANDLE                UdpHandle;
 | |
| 
 | |
|   EFI_UDP4_PROTOCOL         *Udp;
 | |
|   EFI_UDP4_CONFIG_DATA      UdpConfig;
 | |
|   EFI_SIMPLE_NETWORK_MODE   SnpMode;
 | |
| 
 | |
|   NET_LIST_ENTRY            SentDatagram;
 | |
|   UDP_RX_TOKEN              *RecvRequest;
 | |
| };
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (*UDP_IO_CONFIG) (
 | |
|   IN UDP_IO_PORT            *UdpIo,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| typedef
 | |
| BOOLEAN
 | |
| (*UDP_IO_TO_CANCEL) (
 | |
|   IN UDP_TX_TOKEN           *Token,
 | |
|   IN VOID                   *Context
 | |
|   );
 | |
| 
 | |
| UDP_IO_PORT *
 | |
| UdpIoCreatePort (
 | |
|   IN  EFI_HANDLE            Controller,
 | |
|   IN  EFI_HANDLE            ImageHandle,
 | |
|   IN  UDP_IO_CONFIG         Configure,
 | |
|   IN  VOID                  *Context
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UdpIoFreePort (
 | |
|   IN  UDP_IO_PORT           *UdpIo
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| UdpIoCleanPort (
 | |
|   IN  UDP_IO_PORT           *UdpIo
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UdpIoSendDatagram (
 | |
|   IN  UDP_IO_PORT           *UdpIo,
 | |
|   IN  NET_BUF               *Packet,
 | |
|   IN  UDP_POINTS            *EndPoint, OPTIONAL
 | |
|   IN  IP4_ADDR              Gateway,
 | |
|   IN  UDP_IO_CALLBACK       CallBack,
 | |
|   IN  VOID                  *Context
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| UdpIoCancelSentDatagram (
 | |
|   IN  UDP_IO_PORT           *UdpIo,
 | |
|   IN  NET_BUF               *Packet
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| UdpIoRecvDatagram (
 | |
|   IN  UDP_IO_PORT           *UdpIo,
 | |
|   IN  UDP_IO_CALLBACK       CallBack,
 | |
|   IN  VOID                  *Context,
 | |
|   IN  UINT32                HeadLen
 | |
|   );
 | |
| #endif
 |