summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Include/Library/UdpIoLib.h
diff options
context:
space:
mode:
Diffstat (limited to 'MdeModulePkg/Include/Library/UdpIoLib.h')
-rw-r--r--MdeModulePkg/Include/Library/UdpIoLib.h177
1 files changed, 177 insertions, 0 deletions
diff --git a/MdeModulePkg/Include/Library/UdpIoLib.h b/MdeModulePkg/Include/Library/UdpIoLib.h
new file mode 100644
index 0000000000..3f49cc9209
--- /dev/null
+++ b/MdeModulePkg/Include/Library/UdpIoLib.h
@@ -0,0 +1,177 @@
+/** @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;
+
+typedef 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