176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef _EFI_UDP_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define _EFI_UDP_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*++
676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanCopyright (c) 2013  Intel Corporation
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman--*/
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_UDP4_PROTOCOL \
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_UDP6_PROTOCOL \
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanINTERFACE_DECL(_EFI_UDP4);
2376d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanINTERFACE_DECL(_EFI_UDP6);
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AcceptBroadcast;
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AcceptPromiscuous;
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AcceptAnyPort;
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AllowDuplicatePort;
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8            TypeOfService;
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8            TimeToLive;
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          DoNotFragment;
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32           ReceiveTimeout;
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32           TransmitTimeout;
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          UseDefaultAddress;
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS StationAddress;
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS SubnetMask;
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           StationPort;
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS RemoteAddress;
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           RemotePort;
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_CONFIG_DATA;
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
4476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_GET_MODE_DATA) (
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4                 *This,
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
5476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_CONFIGURE) (
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4     *This,
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
6176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_GROUPS) (
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4 *This,
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN BOOLEAN          JoinFlag,
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
6976d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_ROUTES) (
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4 *This,
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN BOOLEAN          DeleteRoute,
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_IPv4_ADDRESS *SubnetAddress,
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_IPv4_ADDRESS *SubnetMask,
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_IPv4_ADDRESS *GatewayAddress
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_NETWORK_UNREACHABLE  EFIERR(100)
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_HOST_UNREACHABLE     EFIERR(101)
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_PORT_UNREACHABLE     EFIERR(103)
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS SourceAddress;
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           SourcePort;
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS DestinationAddress;
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           DestinationPort;
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_SESSION_DATA;
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32 FragmentLength;
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    VOID   *FragmentBuffer;
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_FRAGMENT_DATA;
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_TIME               TimeStamp;
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_EVENT              RecycleSignal;
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_SESSION_DATA  UdpSession;
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 DataLength;
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 FragmentCount;
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_RECEIVE_DATA;
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_SESSION_DATA  *UdpSessionData;
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv4_ADDRESS       *GatewayAddress;
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 DataLength;
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 FragmentCount;
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_TRANSMIT_DATA;
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_EVENT                  Event;
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_STATUS                 Status;
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    union {
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        EFI_UDP4_RECEIVE_DATA  *RxData;
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	EFI_UDP4_TRANSMIT_DATA *TxData;
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }                          Packet;
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4_COMPLETION_TOKEN;
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
12276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_TRANSMIT) (
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4          *This,
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP4_COMPLETION_TOKEN *Token
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
12976d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_RECEIVE) (
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4          *This,
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP4_COMPLETION_TOKEN *Token
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
13676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_CANCEL)(
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4          *This,
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
14376d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP4_POLL) (
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP4 *This
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _EFI_UDP4 {
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_GET_MODE_DATA GetModeData;
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_CONFIGURE     Configure;
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_GROUPS        Groups;
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_ROUTES        Routes;
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_TRANSMIT      Transmit;
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_RECEIVE       Receive;
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_CANCEL        Cancel;
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP4_POLL          Poll;
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP4;
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AcceptPromiscuous;
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AcceptAnyPort;
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    BOOLEAN          AllowDuplicatePort;
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8            TrafficClass;
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8            HopLimit;
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32           ReceiveTimeout;
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32           TransmitTimeout;
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv6_ADDRESS StationAddress;
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           StationPort;
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv6_ADDRESS RemoteAddress;
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           RemotePort;
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_CONFIG_DATA;
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
17476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_GET_MODE_DATA) (
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6                 *This,
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
18476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_CONFIGURE) (
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6     *This,
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
19176d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_GROUPS) (
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6 *This,
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN BOOLEAN          JoinFlag,
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv6_ADDRESS SourceAddress;
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           SourcePort;
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_IPv6_ADDRESS DestinationAddress;
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT16           DestinationPort;
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_SESSION_DATA;
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32 FragmentLength;
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    VOID   *FragmentBuffer;
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_FRAGMENT_DATA;
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_TIME               TimeStamp;
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_EVENT              RecycleSignal;
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_SESSION_DATA  UdpSession;
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 DataLength;
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 FragmentCount;
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_RECEIVE_DATA;
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_SESSION_DATA  *UdpSessionData;
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 DataLength;
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT32                 FragmentCount;
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_TRANSMIT_DATA;
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_EVENT                  Event;
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_STATUS                 Status;
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    union {
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        EFI_UDP6_RECEIVE_DATA  *RxData;
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        EFI_UDP6_TRANSMIT_DATA *TxData;
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }                          Packet;
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6_COMPLETION_TOKEN;
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
23676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_TRANSMIT) (
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6          *This,
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP6_COMPLETION_TOKEN *Token
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
24376d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_RECEIVE) (
24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6          *This,
24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP6_COMPLETION_TOKEN *Token
24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
25076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_CANCEL)(
25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6          *This,
25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef
25776d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS
25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_UDP6_POLL) (
25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    IN struct _EFI_UDP6 *This
26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    );
26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _EFI_UDP6 {
26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_GET_MODE_DATA GetModeData;
26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_CONFIGURE     Configure;
26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_GROUPS        Groups;
26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_TRANSMIT      Transmit;
26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_RECEIVE       Receive;
26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_CANCEL        Cancel;
26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    EFI_UDP6_POLL          Poll;
27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_UDP6;
27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* _EFI_UDP_H */
273