Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: efitcp.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2 
      3 #ifndef _EFI_TCP_H
      4 #define _EFI_TCP_H
      5 
      6 /*++
      7 Copyright (c) 2013  Intel Corporation
      8 
      9 --*/
     10 
     11 #define EFI_TCP4_SERVICE_BINDING_PROTOCOL \
     12     { 0x00720665, 0x67eb, 0x4a99, {0xba, 0xf7, 0xd3, 0xc3, 0x3a, 0x1c,0x7c, 0xc9}}
     13 
     14 #define EFI_TCP4_PROTOCOL \
     15     { 0x65530bc7, 0xa359, 0x410f, {0xb0, 0x10, 0x5a, 0xad, 0xc7, 0xec, 0x2b, 0x62}}
     16 
     17 #define EFI_TCP6_SERVICE_BINDING_PROTOCOL \
     18     { 0xec20eb79, 0x6c1a, 0x4664, {0x9a, 0xd, 0xd2, 0xe4, 0xcc, 0x16, 0xd6, 0x64}}
     19 
     20 #define EFI_TCP6_PROTOCOL \
     21     { 0x46e44855, 0xbd60, 0x4ab7, {0xab, 0xd, 0xa6, 0x79, 0xb9, 0x44, 0x7d, 0x77}}
     22 
     23 INTERFACE_DECL(_EFI_TCP4);
     24 INTERFACE_DECL(_EFI_TCP6);
     25 
     26 typedef struct {
     27     BOOLEAN            UseDefaultAddress;
     28     EFI_IPv4_ADDRESS   StationAddress;
     29     EFI_IPv4_ADDRESS   SubnetMask;
     30     UINT16             StationPort;
     31     EFI_IPv4_ADDRESS   RemoteAddress;
     32     UINT16             RemotePort;
     33     BOOLEAN            ActiveFlag;
     34 } EFI_TCP4_ACCESS_POINT;
     35 
     36 typedef struct {
     37     UINT32             ReceiveBufferSize;
     38     UINT32             SendBufferSize;
     39     UINT32             MaxSynBackLog;
     40     UINT32             ConnectionTimeout;
     41     UINT32             DataRetries;
     42     UINT32             FinTimeout;
     43     UINT32             TimeWaitTimeout;
     44     UINT32             KeepAliveProbes;
     45     UINT32             KeepAliveTime;
     46     UINT32             KeepAliveInterval;
     47     BOOLEAN            EnableNagle;
     48     BOOLEAN            EnableTimeStamp;
     49     BOOLEAN            EnableWindowScaling;
     50     BOOLEAN            EnableSelectiveAck;
     51     BOOLEAN            EnablePAthMtuDiscovery;
     52 } EFI_TCP4_OPTION;
     53 
     54 typedef struct {
     55     // Receiving Filters
     56     // I/O parameters
     57     UINT8                 TypeOfService;
     58     UINT8                 TimeToLive;
     59 
     60     // Access Point
     61     EFI_TCP4_ACCESS_POINT AccessPoint;
     62 
     63     // TCP Control Options
     64     EFI_TCP4_OPTION       *ControlOption;
     65 } EFI_TCP4_CONFIG_DATA;
     66 
     67 typedef enum {
     68     Tcp4StateClosed      = 0,
     69     Tcp4StateListen      = 1,
     70     Tcp4StateSynSent     = 2,
     71     Tcp4StateSynReceived = 3,
     72     Tcp4StateEstablished = 4,
     73     Tcp4StateFinWait1    = 5,
     74     Tcp4StateFinWait2    = 6,
     75     Tcp4StateClosing     = 7,
     76     Tcp4StateTimeWait    = 8,
     77     Tcp4StateCloseWait   = 9,
     78     Tcp4StateLastAck     = 10
     79 } EFI_TCP4_CONNECTION_STATE;
     80 
     81 typedef
     82 EFI_STATUS
     83 (EFIAPI *EFI_TCP4_GET_MODE_DATA) (
     84     IN struct _EFI_TCP4                 *This,
     85     OUT EFI_TCP4_CONNECTION_STATE       *Tcp4State      OPTIONAL,
     86     OUT EFI_TCP4_CONFIG_DATA            *Tcp4ConfigData OPTIONAL,
     87     OUT EFI_IP4_MODE_DATA               *Ip4ModeData    OPTIONAL,
     88     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
     89     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
     90     );
     91 
     92 typedef
     93 EFI_STATUS
     94 (EFIAPI *EFI_TCP4_CONFIGURE) (
     95     IN struct _EFI_TCP4     *This,
     96     IN EFI_TCP4_CONFIG_DATA *TcpConfigData OPTIONAL
     97     );
     98 
     99 typedef
    100 EFI_STATUS
    101 (EFIAPI *EFI_TCP4_ROUTES) (
    102     IN struct _EFI_TCP4 *This,
    103     IN BOOLEAN          DeleteRoute,
    104     IN EFI_IPv4_ADDRESS *SubnetAddress,
    105     IN EFI_IPv4_ADDRESS *SubnetMask,
    106     IN EFI_IPv4_ADDRESS *GatewayAddress
    107 );
    108 
    109 typedef struct {
    110     EFI_EVENT  Event;
    111     EFI_STATUS Status;
    112 } EFI_TCP4_COMPLETION_TOKEN;
    113 
    114 typedef struct {
    115     EFI_TCP4_COMPLETION_TOKEN CompletionToken;
    116 } EFI_TCP4_CONNECTION_TOKEN;
    117 
    118 typedef
    119 EFI_STATUS
    120 (EFIAPI *EFI_TCP4_CONNECT) (
    121     IN struct _EFI_TCP4          *This,
    122     IN EFI_TCP4_CONNECTION_TOKEN *ConnectionToken
    123     );
    124 
    125 typedef struct {
    126     EFI_TCP4_COMPLETION_TOKEN CompletionToken;
    127     EFI_HANDLE                NewChildHandle;
    128 } EFI_TCP4_LISTEN_TOKEN;
    129 
    130 typedef
    131 EFI_STATUS
    132 (EFIAPI *EFI_TCP4_ACCEPT) (
    133     IN struct _EFI_TCP4      *This,
    134     IN EFI_TCP4_LISTEN_TOKEN *ListenToken
    135     );
    136 
    137 #define EFI_CONNECTION_FIN     EFIERR(104)
    138 #define EFI_CONNECTION_RESET   EFIERR(105)
    139 #define EFI_CONNECTION_REFUSED EFIERR(106)
    140 
    141 typedef struct {
    142     UINT32 FragmentLength;
    143     VOID   *FragmentBuffer;
    144 } EFI_TCP4_FRAGMENT_DATA;
    145 
    146 typedef struct {
    147     BOOLEAN                UrgentFlag;
    148     UINT32                 DataLength;
    149     UINT32                 FragmentCount;
    150     EFI_TCP4_FRAGMENT_DATA FragmentTable[1];
    151 } EFI_TCP4_RECEIVE_DATA;
    152 
    153 typedef struct {
    154     BOOLEAN                Push;
    155     BOOLEAN                Urgent;
    156     UINT32                 DataLength;
    157     UINT32                 FragmentCount;
    158     EFI_TCP4_FRAGMENT_DATA FragmentTable[1];
    159 } EFI_TCP4_TRANSMIT_DATA;
    160 
    161 typedef struct {
    162     EFI_TCP4_COMPLETION_TOKEN  CompletionToken;
    163     union {
    164 	EFI_TCP4_RECEIVE_DATA  *RxData;
    165 	EFI_TCP4_TRANSMIT_DATA *TxData;
    166     }                          Packet;
    167 } EFI_TCP4_IO_TOKEN;
    168 
    169 typedef
    170 EFI_STATUS
    171 (EFIAPI *EFI_TCP4_TRANSMIT) (
    172     IN struct _EFI_TCP4  *This,
    173     IN EFI_TCP4_IO_TOKEN *Token
    174     );
    175 
    176 typedef
    177 EFI_STATUS
    178 (EFIAPI *EFI_TCP4_RECEIVE) (
    179     IN struct _EFI_TCP4  *This,
    180     IN EFI_TCP4_IO_TOKEN *Token
    181     );
    182 
    183 typedef struct {
    184     EFI_TCP4_COMPLETION_TOKEN CompletionToken;
    185     BOOLEAN                   AbortOnClose;
    186 } EFI_TCP4_CLOSE_TOKEN;
    187 
    188 typedef
    189 EFI_STATUS
    190 (EFIAPI *EFI_TCP4_CLOSE)(
    191     IN struct _EFI_TCP4     *This,
    192     IN EFI_TCP4_CLOSE_TOKEN *CloseToken
    193     );
    194 
    195 typedef
    196 EFI_STATUS
    197 (EFIAPI *EFI_TCP4_CANCEL)(
    198     IN struct _EFI_TCP4 *This,
    199     IN EFI_TCP4_COMPLETION_TOKEN *Token OPTIONAL
    200 );
    201 
    202 typedef
    203 EFI_STATUS
    204 (EFIAPI *EFI_TCP4_POLL) (
    205     IN struct _EFI_TCP4 *This
    206     );
    207 
    208 typedef struct _EFI_TCP4 {
    209     EFI_TCP4_GET_MODE_DATA GetModeData;
    210     EFI_TCP4_CONFIGURE     Configure;
    211     EFI_TCP4_ROUTES        Routes;
    212     EFI_TCP4_CONNECT       Connect;
    213     EFI_TCP4_ACCEPT        Accept;
    214     EFI_TCP4_TRANSMIT      Transmit;
    215     EFI_TCP4_RECEIVE       Receive;
    216     EFI_TCP4_CLOSE         Close;
    217     EFI_TCP4_CANCEL        Cancel;
    218     EFI_TCP4_POLL          Poll;
    219 } EFI_TCP4;
    220 
    221 typedef enum {
    222     Tcp6StateClosed      = 0,
    223     Tcp6StateListen      = 1,
    224     Tcp6StateSynSent     = 2,
    225     Tcp6StateSynReceived = 3,
    226     Tcp6StateEstablished = 4,
    227     Tcp6StateFinWait1    = 5,
    228     Tcp6StateFinWait2    = 6,
    229     Tcp6StateClosing     = 7,
    230     Tcp6StateTimeWait    = 8,
    231     Tcp6StateCloseWait   = 9,
    232     Tcp6StateLastAck     = 10
    233 } EFI_TCP6_CONNECTION_STATE;
    234 
    235 typedef struct {
    236     EFI_IPv6_ADDRESS StationAddress;
    237     UINT16           StationPort;
    238     EFI_IPv6_ADDRESS RemoteAddress;
    239     UINT16           RemotePort;
    240     BOOLEAN          ActiveFlag;
    241 } EFI_TCP6_ACCESS_POINT;
    242 
    243 typedef struct {
    244     UINT32             ReceiveBufferSize;
    245     UINT32             SendBufferSize;
    246     UINT32             MaxSynBackLog;
    247     UINT32             ConnectionTimeout;
    248     UINT32             DataRetries;
    249     UINT32             FinTimeout;
    250     UINT32             TimeWaitTimeout;
    251     UINT32             KeepAliveProbes;
    252     UINT32             KeepAliveTime;
    253     UINT32             KeepAliveInterval;
    254     BOOLEAN            EnableNagle;
    255     BOOLEAN            EnableTimeStamp;
    256     BOOLEAN            EnableWindbowScaling;
    257     BOOLEAN            EnableSelectiveAck;
    258     BOOLEAN            EnablePathMtuDiscovery;
    259 } EFI_TCP6_OPTION;
    260 
    261 typedef struct {
    262     UINT8                 TrafficClass;
    263     UINT8                 HopLimit;
    264     EFI_TCP6_ACCESS_POINT AccessPoint;
    265     EFI_TCP6_OPTION       *ControlOption;
    266 } EFI_TCP6_CONFIG_DATA;
    267 
    268 typedef
    269 EFI_STATUS
    270 (EFIAPI *EFI_TCP6_GET_MODE_DATA) (
    271     IN struct _EFI_TCP6                 *This,
    272     OUT EFI_TCP6_CONNECTION_STATE       *Tcp6State      OPTIONAL,
    273     OUT EFI_TCP6_CONFIG_DATA            *Tcp6ConfigData OPTIONAL,
    274     OUT EFI_IP6_MODE_DATA               *Ip6ModeData    OPTIONAL,
    275     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData  OPTIONAL,
    276     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData    OPTIONAL
    277     );
    278 
    279 typedef
    280 EFI_STATUS
    281 (EFIAPI *EFI_TCP6_CONFIGURE) (
    282     IN struct _EFI_TCP6     *This,
    283     IN EFI_TCP6_CONFIG_DATA *Tcp6ConfigData OPTIONAL
    284     );
    285 
    286 typedef struct {
    287     EFI_EVENT  Event;
    288     EFI_STATUS Status;
    289 } EFI_TCP6_COMPLETION_TOKEN;
    290 
    291 typedef struct {
    292     EFI_TCP6_COMPLETION_TOKEN CompletionToken;
    293 } EFI_TCP6_CONNECTION_TOKEN;
    294 
    295 typedef
    296 EFI_STATUS
    297 (EFIAPI *EFI_TCP6_CONNECT) (
    298     IN struct _EFI_TCP6          *This,
    299     IN EFI_TCP6_CONNECTION_TOKEN *ConnectionToken
    300     );
    301 
    302 typedef struct {
    303     EFI_TCP6_COMPLETION_TOKEN CompletionToken;
    304     EFI_HANDLE                NewChildHandle;
    305 } EFI_TCP6_LISTEN_TOKEN;
    306 
    307 typedef
    308 EFI_STATUS
    309 (EFIAPI *EFI_TCP6_ACCEPT) (
    310     IN struct _EFI_TCP6      *This,
    311     IN EFI_TCP6_LISTEN_TOKEN *ListenToken
    312     );
    313 
    314 typedef struct {
    315     UINT32 FragmentLength;
    316     VOID   *FragmentBuffer;
    317 } EFI_TCP6_FRAGMENT_DATA;
    318 
    319 typedef struct {
    320     BOOLEAN                UrgentFlag;
    321     UINT32                 DataLength;
    322     UINT32                 FragmentCount;
    323     EFI_TCP6_FRAGMENT_DATA FragmentTable[1];
    324 } EFI_TCP6_RECEIVE_DATA;
    325 
    326 typedef struct {
    327     BOOLEAN                Push;
    328     BOOLEAN                Urgent;
    329     UINT32                 DataLength;
    330     UINT32                 FragmentCount;
    331     EFI_TCP6_FRAGMENT_DATA FragmentTable[1];
    332 } EFI_TCP6_TRANSMIT_DATA;
    333 
    334 typedef struct {
    335     EFI_TCP6_COMPLETION_TOKEN  CompletionToken;
    336     union {
    337 	EFI_TCP6_RECEIVE_DATA  *RxData;
    338 	EFI_TCP6_TRANSMIT_DATA *TxData;
    339     }                          Packet;
    340 } EFI_TCP6_IO_TOKEN;
    341 
    342 typedef
    343 EFI_STATUS
    344 (EFIAPI *EFI_TCP6_TRANSMIT) (
    345     IN struct _EFI_TCP6  *This,
    346     IN EFI_TCP6_IO_TOKEN *Token
    347     );
    348 
    349 typedef
    350 EFI_STATUS
    351 (EFIAPI *EFI_TCP6_RECEIVE) (
    352     IN struct _EFI_TCP6  *This,
    353     IN EFI_TCP6_IO_TOKEN *Token
    354     );
    355 
    356 typedef struct {
    357     EFI_TCP6_COMPLETION_TOKEN CompletionToken;
    358     BOOLEAN                   AbortOnClose;
    359 } EFI_TCP6_CLOSE_TOKEN;
    360 
    361 typedef
    362 EFI_STATUS
    363 (EFIAPI *EFI_TCP6_CLOSE)(
    364     IN struct _EFI_TCP6     *This,
    365     IN EFI_TCP6_CLOSE_TOKEN *CloseToken
    366     );
    367 
    368 typedef
    369 EFI_STATUS
    370 (EFIAPI *EFI_TCP6_CANCEL)(
    371     IN struct _EFI_TCP6          *This,
    372     IN EFI_TCP6_COMPLETION_TOKEN *Token OPTIONAL
    373     );
    374 
    375 typedef
    376 EFI_STATUS
    377 (EFIAPI *EFI_TCP6_POLL) (
    378     IN struct _EFI_TCP6 *This
    379     );
    380 
    381 typedef struct _EFI_TCP6 {
    382     EFI_TCP6_GET_MODE_DATA GetModeData;
    383     EFI_TCP6_CONFIGURE     Configure;
    384     EFI_TCP6_CONNECT       Connect;
    385     EFI_TCP6_ACCEPT        Accept;
    386     EFI_TCP6_TRANSMIT      Transmit;
    387     EFI_TCP6_RECEIVE       Receive;
    388     EFI_TCP6_CLOSE         Close;
    389     EFI_TCP6_CANCEL        Cancel;
    390     EFI_TCP6_POLL          Poll;
    391 } EFI_TCP6;
    392 
    393 #endif /* _EFI_TCP_H */
    394