Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: efiudp.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 #ifndef _EFI_UDP_H
      4 #define _EFI_UDP_H
      5 
      6 
      7 /*++
      8 Copyright (c) 2013  Intel Corporation
      9 
     10 --*/
     11 
     12 #define EFI_UDP4_SERVICE_BINDING_PROTOCOL \
     13     { 0x83f01464, 0x99bd, 0x45e5, {0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6} }
     14 
     15 #define EFI_UDP4_PROTOCOL \
     16     { 0x3ad9df29, 0x4501, 0x478d, {0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3} }
     17 
     18 #define EFI_UDP6_SERVICE_BINDING_PROTOCOL \
     19     { 0x66ed4721, 0x3c98, 0x4d3e, {0x81, 0xe3, 0xd0, 0x3d, 0xd3, 0x9a, 0x72, 0x54} }
     20 
     21 #define EFI_UDP6_PROTOCOL \
     22     { 0x4f948815, 0xb4b9, 0x43cb, {0x8a, 0x33, 0x90, 0xe0, 0x60, 0xb3,0x49, 0x55} }
     23 
     24 INTERFACE_DECL(_EFI_UDP4);
     25 INTERFACE_DECL(_EFI_UDP6);
     26 
     27 typedef struct {
     28     BOOLEAN          AcceptBroadcast;
     29     BOOLEAN          AcceptPromiscuous;
     30     BOOLEAN          AcceptAnyPort;
     31     BOOLEAN          AllowDuplicatePort;
     32     UINT8            TypeOfService;
     33     UINT8            TimeToLive;
     34     BOOLEAN          DoNotFragment;
     35     UINT32           ReceiveTimeout;
     36     UINT32           TransmitTimeout;
     37     BOOLEAN          UseDefaultAddress;
     38     EFI_IPv4_ADDRESS StationAddress;
     39     EFI_IPv4_ADDRESS SubnetMask;
     40     UINT16           StationPort;
     41     EFI_IPv4_ADDRESS RemoteAddress;
     42     UINT16           RemotePort;
     43 } EFI_UDP4_CONFIG_DATA;
     44 
     45 typedef
     46 EFI_STATUS
     47 (EFIAPI *EFI_UDP4_GET_MODE_DATA) (
     48     IN struct _EFI_UDP4                 *This,
     49     OUT EFI_UDP4_CONFIG_DATA            *Udp4ConfigData OPTIONAL,
     50     OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
     51     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
     52     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
     53     );
     54 
     55 typedef
     56 EFI_STATUS
     57 (EFIAPI *EFI_UDP4_CONFIGURE) (
     58     IN struct _EFI_UDP4     *This,
     59     IN EFI_UDP4_CONFIG_DATA *UdpConfigData OPTIONAL
     60     );
     61 
     62 typedef
     63 EFI_STATUS
     64 (EFIAPI *EFI_UDP4_GROUPS) (
     65     IN struct _EFI_UDP4 *This,
     66     IN BOOLEAN          JoinFlag,
     67     IN EFI_IPv4_ADDRESS *MulticastAddress OPTIONAL
     68     );
     69 
     70 typedef
     71 EFI_STATUS
     72 (EFIAPI *EFI_UDP4_ROUTES) (
     73     IN struct _EFI_UDP4 *This,
     74     IN BOOLEAN          DeleteRoute,
     75     IN EFI_IPv4_ADDRESS *SubnetAddress,
     76     IN EFI_IPv4_ADDRESS *SubnetMask,
     77     IN EFI_IPv4_ADDRESS *GatewayAddress
     78     );
     79 
     80 #define EFI_NETWORK_UNREACHABLE  EFIERR(100)
     81 #define EFI_HOST_UNREACHABLE     EFIERR(101)
     82 #define EFI_PROTOCOL_UNREACHABLE EFIERR(102)
     83 #define EFI_PORT_UNREACHABLE     EFIERR(103)
     84 
     85 typedef struct {
     86     EFI_IPv4_ADDRESS SourceAddress;
     87     UINT16           SourcePort;
     88     EFI_IPv4_ADDRESS DestinationAddress;
     89     UINT16           DestinationPort;
     90 } EFI_UDP4_SESSION_DATA;
     91 
     92 typedef struct {
     93     UINT32 FragmentLength;
     94     VOID   *FragmentBuffer;
     95 } EFI_UDP4_FRAGMENT_DATA;
     96 
     97 typedef struct {
     98     EFI_TIME               TimeStamp;
     99     EFI_EVENT              RecycleSignal;
    100     EFI_UDP4_SESSION_DATA  UdpSession;
    101     UINT32                 DataLength;
    102     UINT32                 FragmentCount;
    103     EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
    104 } EFI_UDP4_RECEIVE_DATA;
    105 
    106 typedef struct {
    107     EFI_UDP4_SESSION_DATA  *UdpSessionData;
    108     EFI_IPv4_ADDRESS       *GatewayAddress;
    109     UINT32                 DataLength;
    110     UINT32                 FragmentCount;
    111     EFI_UDP4_FRAGMENT_DATA FragmentTable[1];
    112 } EFI_UDP4_TRANSMIT_DATA;
    113 
    114 typedef struct {
    115     EFI_EVENT                  Event;
    116     EFI_STATUS                 Status;
    117     union {
    118         EFI_UDP4_RECEIVE_DATA  *RxData;
    119 	EFI_UDP4_TRANSMIT_DATA *TxData;
    120     }                          Packet;
    121 } EFI_UDP4_COMPLETION_TOKEN;
    122 
    123 typedef
    124 EFI_STATUS
    125 (EFIAPI *EFI_UDP4_TRANSMIT) (
    126     IN struct _EFI_UDP4          *This,
    127     IN EFI_UDP4_COMPLETION_TOKEN *Token
    128     );
    129 
    130 typedef
    131 EFI_STATUS
    132 (EFIAPI *EFI_UDP4_RECEIVE) (
    133     IN struct _EFI_UDP4          *This,
    134     IN EFI_UDP4_COMPLETION_TOKEN *Token
    135     );
    136 
    137 typedef
    138 EFI_STATUS
    139 (EFIAPI *EFI_UDP4_CANCEL)(
    140     IN struct _EFI_UDP4          *This,
    141     IN EFI_UDP4_COMPLETION_TOKEN *Token OPTIONAL
    142     );
    143 
    144 typedef
    145 EFI_STATUS
    146 (EFIAPI *EFI_UDP4_POLL) (
    147     IN struct _EFI_UDP4 *This
    148     );
    149 
    150 typedef struct _EFI_UDP4 {
    151     EFI_UDP4_GET_MODE_DATA GetModeData;
    152     EFI_UDP4_CONFIGURE     Configure;
    153     EFI_UDP4_GROUPS        Groups;
    154     EFI_UDP4_ROUTES        Routes;
    155     EFI_UDP4_TRANSMIT      Transmit;
    156     EFI_UDP4_RECEIVE       Receive;
    157     EFI_UDP4_CANCEL        Cancel;
    158     EFI_UDP4_POLL          Poll;
    159 } EFI_UDP4;
    160 
    161 typedef struct {
    162     BOOLEAN          AcceptPromiscuous;
    163     BOOLEAN          AcceptAnyPort;
    164     BOOLEAN          AllowDuplicatePort;
    165     UINT8            TrafficClass;
    166     UINT8            HopLimit;
    167     UINT32           ReceiveTimeout;
    168     UINT32           TransmitTimeout;
    169     EFI_IPv6_ADDRESS StationAddress;
    170     UINT16           StationPort;
    171     EFI_IPv6_ADDRESS RemoteAddress;
    172     UINT16           RemotePort;
    173 } EFI_UDP6_CONFIG_DATA;
    174 
    175 typedef
    176 EFI_STATUS
    177 (EFIAPI *EFI_UDP6_GET_MODE_DATA) (
    178     IN struct _EFI_UDP6                 *This,
    179     OUT EFI_UDP6_CONFIG_DATA            *Udp6ConfigData OPTIONAL,
    180     OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
    181     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
    182     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
    183     );
    184 
    185 typedef
    186 EFI_STATUS
    187 (EFIAPI *EFI_UDP6_CONFIGURE) (
    188     IN struct _EFI_UDP6     *This,
    189     IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
    190     );
    191 
    192 typedef
    193 EFI_STATUS
    194 (EFIAPI *EFI_UDP6_GROUPS) (
    195     IN struct _EFI_UDP6 *This,
    196     IN BOOLEAN          JoinFlag,
    197     IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
    198     );
    199 
    200 typedef struct {
    201     EFI_IPv6_ADDRESS SourceAddress;
    202     UINT16           SourcePort;
    203     EFI_IPv6_ADDRESS DestinationAddress;
    204     UINT16           DestinationPort;
    205 } EFI_UDP6_SESSION_DATA;
    206 
    207 typedef struct {
    208     UINT32 FragmentLength;
    209     VOID   *FragmentBuffer;
    210 } EFI_UDP6_FRAGMENT_DATA;
    211 
    212 typedef struct {
    213     EFI_TIME               TimeStamp;
    214     EFI_EVENT              RecycleSignal;
    215     EFI_UDP6_SESSION_DATA  UdpSession;
    216     UINT32                 DataLength;
    217     UINT32                 FragmentCount;
    218     EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
    219 } EFI_UDP6_RECEIVE_DATA;
    220 
    221 typedef struct {
    222     EFI_UDP6_SESSION_DATA  *UdpSessionData;
    223     UINT32                 DataLength;
    224     UINT32                 FragmentCount;
    225     EFI_UDP6_FRAGMENT_DATA FragmentTable[1];
    226 } EFI_UDP6_TRANSMIT_DATA;
    227 
    228 typedef struct {
    229     EFI_EVENT                  Event;
    230     EFI_STATUS                 Status;
    231     union {
    232         EFI_UDP6_RECEIVE_DATA  *RxData;
    233         EFI_UDP6_TRANSMIT_DATA *TxData;
    234     }                          Packet;
    235 } EFI_UDP6_COMPLETION_TOKEN;
    236 
    237 typedef
    238 EFI_STATUS
    239 (EFIAPI *EFI_UDP6_TRANSMIT) (
    240     IN struct _EFI_UDP6          *This,
    241     IN EFI_UDP6_COMPLETION_TOKEN *Token
    242     );
    243 
    244 typedef
    245 EFI_STATUS
    246 (EFIAPI *EFI_UDP6_RECEIVE) (
    247     IN struct _EFI_UDP6          *This,
    248     IN EFI_UDP6_COMPLETION_TOKEN *Token
    249     );
    250 
    251 typedef
    252 EFI_STATUS
    253 (EFIAPI *EFI_UDP6_CANCEL)(
    254     IN struct _EFI_UDP6          *This,
    255     IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
    256     );
    257 
    258 typedef
    259 EFI_STATUS
    260 (EFIAPI *EFI_UDP6_POLL) (
    261     IN struct _EFI_UDP6 *This
    262     );
    263 
    264 typedef struct _EFI_UDP6 {
    265     EFI_UDP6_GET_MODE_DATA GetModeData;
    266     EFI_UDP6_CONFIGURE     Configure;
    267     EFI_UDP6_GROUPS        Groups;
    268     EFI_UDP6_TRANSMIT      Transmit;
    269     EFI_UDP6_RECEIVE       Receive;
    270     EFI_UDP6_CANCEL        Cancel;
    271     EFI_UDP6_POLL          Poll;
    272 } EFI_UDP6;
    273 
    274 #endif /* _EFI_UDP_H */
    275