| /** @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 |