Home | History | Annotate | Line # | Download | only in inc
      1  1.1  jakllsch /*	$NetBSD: efiip.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $	*/
      2  1.1  jakllsch 
      3  1.1  jakllsch #ifndef _EFI_IP_H
      4  1.1  jakllsch #define _EFI_IP_H
      5  1.1  jakllsch 
      6  1.1  jakllsch /*++
      7  1.1  jakllsch Copyright (c) 2013  Intel Corporation
      8  1.1  jakllsch 
      9  1.1  jakllsch --*/
     10  1.1  jakllsch 
     11  1.1  jakllsch #define EFI_IP4_SERVICE_BINDING_PROTOCOL \
     12  1.1  jakllsch    {0xc51711e7,0xb4bf,0x404a,{0xbf,0xb8,0x0a,0x04, 0x8e,0xf1,0xff,0xe4}}
     13  1.1  jakllsch 
     14  1.1  jakllsch #define EFI_IP4_PROTOCOL \
     15  1.1  jakllsch     {0x41d94cd2,0x35b6,0x455a,{0x82,0x58,0xd4,0xe5,0x13,0x34,0xaa,0xdd}}
     16  1.1  jakllsch 
     17  1.1  jakllsch #define EFI_IP6_SERVICE_BINDING_PROTOCOL \
     18  1.1  jakllsch     {0xec835dd3,0xfe0f,0x617b,{0xa6,0x21,0xb3,0x50,0xc3,0xe1,0x33,0x88}}
     19  1.1  jakllsch 
     20  1.1  jakllsch #define EFI_IP6_PROTOCOL \
     21  1.1  jakllsch     {0x2c8759d5,0x5c2d,0x66ef,{0x92,0x5f,0xb6,0x6c,0x10,0x19,0x57,0xe2}}
     22  1.1  jakllsch 
     23  1.1  jakllsch INTERFACE_DECL(_EFI_IP4);
     24  1.1  jakllsch INTERFACE_DECL(_EFI_IP6);
     25  1.1  jakllsch 
     26  1.1  jakllsch typedef struct {
     27  1.1  jakllsch     EFI_HANDLE       InstanceHandle;
     28  1.1  jakllsch     EFI_IPv4_ADDRESS Ip4Address;
     29  1.1  jakllsch     EFI_IPv4_ADDRESS SubnetMask;
     30  1.1  jakllsch } EFI_IP4_ADDRESS_PAIR;
     31  1.1  jakllsch 
     32  1.1  jakllsch typedef struct {
     33  1.1  jakllsch     EFI_HANDLE           DriverHandle;
     34  1.1  jakllsch     UINT32               AddressCount;
     35  1.1  jakllsch     EFI_IP4_ADDRESS_PAIR AddressPairs[1];
     36  1.1  jakllsch } EFI_IP4_VARIABLE_DATA;
     37  1.1  jakllsch 
     38  1.1  jakllsch typedef struct {
     39  1.1  jakllsch     UINT8            DefaultProtocol;
     40  1.1  jakllsch     BOOLEAN          AcceptAnyProtocol;
     41  1.1  jakllsch     BOOLEAN          AcceptIcmpErrors;
     42  1.1  jakllsch     BOOLEAN          AcceptBroadcast;
     43  1.1  jakllsch     BOOLEAN          AcceptPromiscuous;
     44  1.1  jakllsch     BOOLEAN          UseDefaultAddress;
     45  1.1  jakllsch     EFI_IPv4_ADDRESS StationAddress;
     46  1.1  jakllsch     EFI_IPv4_ADDRESS SubnetMask;
     47  1.1  jakllsch     UINT8            TypeOfService;
     48  1.1  jakllsch     UINT8            TimeToLive;
     49  1.1  jakllsch     BOOLEAN          DoNotFragment;
     50  1.1  jakllsch     BOOLEAN          RawData;
     51  1.1  jakllsch     UINT32           ReceiveTimeout;
     52  1.1  jakllsch     UINT32           TransmitTimeout;
     53  1.1  jakllsch } EFI_IP4_CONFIG_DATA;
     54  1.1  jakllsch 
     55  1.1  jakllsch typedef struct {
     56  1.1  jakllsch     EFI_IPv4_ADDRESS SubnetAddress;
     57  1.1  jakllsch     EFI_IPv4_ADDRESS SubnetMask;
     58  1.1  jakllsch     EFI_IPv4_ADDRESS GatewayAddress;
     59  1.1  jakllsch } EFI_IP4_ROUTE_TABLE;
     60  1.1  jakllsch 
     61  1.1  jakllsch typedef struct {
     62  1.1  jakllsch     UINT8 Type;
     63  1.1  jakllsch     UINT8 Code;
     64  1.1  jakllsch } EFI_IP4_ICMP_TYPE;
     65  1.1  jakllsch 
     66  1.1  jakllsch typedef struct {
     67  1.1  jakllsch     BOOLEAN             IsStarted;
     68  1.1  jakllsch     UINT32              MaxPacketSize;
     69  1.1  jakllsch     EFI_IP4_CONFIG_DATA ConfigData;
     70  1.1  jakllsch     BOOLEAN             IsConfigured;
     71  1.1  jakllsch     UINT32              GroupCount;
     72  1.1  jakllsch     EFI_IPv4_ADDRESS    *GroupTable;
     73  1.1  jakllsch     UINT32              RouteCount;
     74  1.1  jakllsch     EFI_IP4_ROUTE_TABLE *RouteTable;
     75  1.1  jakllsch     UINT32              IcmpTypeCount;
     76  1.1  jakllsch     EFI_IP4_ICMP_TYPE   *IcmpTypeList;
     77  1.1  jakllsch } EFI_IP4_MODE_DATA;
     78  1.1  jakllsch 
     79  1.1  jakllsch typedef
     80  1.1  jakllsch EFI_STATUS
     81  1.1  jakllsch (EFIAPI *EFI_IP4_GET_MODE_DATA) (
     82  1.1  jakllsch     IN struct _EFI_IP4                  *This,
     83  1.1  jakllsch     OUT EFI_IP4_MODE_DATA               *Ip4ModeData   OPTIONAL,
     84  1.1  jakllsch     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
     85  1.1  jakllsch     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData   OPTIONAL
     86  1.1  jakllsch     );
     87  1.1  jakllsch 
     88  1.1  jakllsch typedef
     89  1.1  jakllsch EFI_STATUS
     90  1.1  jakllsch (EFIAPI *EFI_IP4_CONFIGURE) (
     91  1.1  jakllsch     IN struct _EFI_IP4     *This,
     92  1.1  jakllsch     IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL
     93  1.1  jakllsch     );
     94  1.1  jakllsch 
     95  1.1  jakllsch typedef
     96  1.1  jakllsch EFI_STATUS
     97  1.1  jakllsch (EFIAPI *EFI_IP4_GROUPS) (
     98  1.1  jakllsch     IN struct _EFI_IP4  *This,
     99  1.1  jakllsch     IN BOOLEAN          JoinFlag,
    100  1.1  jakllsch     IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL
    101  1.1  jakllsch     );
    102  1.1  jakllsch 
    103  1.1  jakllsch typedef
    104  1.1  jakllsch EFI_STATUS
    105  1.1  jakllsch (EFIAPI *EFI_IP4_ROUTES) (
    106  1.1  jakllsch     IN struct _EFI_IP4  *This,
    107  1.1  jakllsch     IN BOOLEAN          DeleteRoute,
    108  1.1  jakllsch     IN EFI_IPv4_ADDRESS *SubnetAddress,
    109  1.1  jakllsch     IN EFI_IPv4_ADDRESS *SubnetMask,
    110  1.1  jakllsch     IN EFI_IPv4_ADDRESS *GatewayAddress
    111  1.1  jakllsch     );
    112  1.1  jakllsch 
    113  1.1  jakllsch #pragma pack(1)
    114  1.1  jakllsch typedef struct {
    115  1.1  jakllsch     UINT8            HeaderLength:4;
    116  1.1  jakllsch     UINT8            Version:4;
    117  1.1  jakllsch     UINT8            TypeOfService;
    118  1.1  jakllsch     UINT16           TotalLength;
    119  1.1  jakllsch     UINT16           Identification;
    120  1.1  jakllsch     UINT16           Fragmentation;
    121  1.1  jakllsch     UINT8            TimeToLive;
    122  1.1  jakllsch     UINT8            Protocol;
    123  1.1  jakllsch     UINT16           Checksum;
    124  1.1  jakllsch     EFI_IPv4_ADDRESS SourceAddress;
    125  1.1  jakllsch     EFI_IPv4_ADDRESS DestinationAddress;
    126  1.1  jakllsch } EFI_IP4_HEADER;
    127  1.1  jakllsch #pragma pack()
    128  1.1  jakllsch 
    129  1.1  jakllsch typedef struct {
    130  1.1  jakllsch     UINT32 FragmentLength;
    131  1.1  jakllsch     VOID   *FragmentBuffer;
    132  1.1  jakllsch } EFI_IP4_FRAGMENT_DATA;
    133  1.1  jakllsch 
    134  1.1  jakllsch typedef struct {
    135  1.1  jakllsch     EFI_TIME              TimeStamp;
    136  1.1  jakllsch     EFI_EVENT             RecycleSignal;
    137  1.1  jakllsch     UINT32                HeaderLength;
    138  1.1  jakllsch     EFI_IP4_HEADER        *Header;
    139  1.1  jakllsch     UINT32                OptionsLength;
    140  1.1  jakllsch     VOID                  *Options;
    141  1.1  jakllsch     UINT32                DataLength;
    142  1.1  jakllsch     UINT32                FragmentCount;
    143  1.1  jakllsch     EFI_IP4_FRAGMENT_DATA FragmentTable[1];
    144  1.1  jakllsch } EFI_IP4_RECEIVE_DATA;
    145  1.1  jakllsch 
    146  1.1  jakllsch typedef struct {
    147  1.1  jakllsch     EFI_IPv4_ADDRESS SourceAddress;
    148  1.1  jakllsch     EFI_IPv4_ADDRESS GatewayAddress;
    149  1.1  jakllsch     UINT8            Protocol;
    150  1.1  jakllsch     UINT8            TypeOfService;
    151  1.1  jakllsch     UINT8            TimeToLive;
    152  1.1  jakllsch     BOOLEAN          DoNotFragment;
    153  1.1  jakllsch } EFI_IP4_OVERRIDE_DATA;
    154  1.1  jakllsch 
    155  1.1  jakllsch typedef struct {
    156  1.1  jakllsch     EFI_IPv4_ADDRESS      DestinationAddress;
    157  1.1  jakllsch     EFI_IP4_OVERRIDE_DATA *OverrideData;
    158  1.1  jakllsch     UINT32                OptionsLength;
    159  1.1  jakllsch     VOID                  *OptionsBuffer;
    160  1.1  jakllsch     UINT32                TotalDataLength;
    161  1.1  jakllsch     UINT32                FragmentCount;
    162  1.1  jakllsch     EFI_IP4_FRAGMENT_DATA FragmentTable[1];
    163  1.1  jakllsch } EFI_IP4_TRANSMIT_DATA;
    164  1.1  jakllsch 
    165  1.1  jakllsch typedef struct {
    166  1.1  jakllsch     EFI_EVENT                 Event;
    167  1.1  jakllsch     EFI_STATUS                Status;
    168  1.1  jakllsch     union {
    169  1.1  jakllsch         EFI_IP4_RECEIVE_DATA  *RxData;
    170  1.1  jakllsch         EFI_IP4_TRANSMIT_DATA *TxData;
    171  1.1  jakllsch     } Packet;
    172  1.1  jakllsch } EFI_IP4_COMPLETION_TOKEN;
    173  1.1  jakllsch 
    174  1.1  jakllsch typedef
    175  1.1  jakllsch EFI_STATUS
    176  1.1  jakllsch (EFIAPI *EFI_IP4_TRANSMIT) (
    177  1.1  jakllsch     IN struct _EFI_IP4          *This,
    178  1.1  jakllsch     IN EFI_IP4_COMPLETION_TOKEN *Token
    179  1.1  jakllsch     );
    180  1.1  jakllsch 
    181  1.1  jakllsch typedef
    182  1.1  jakllsch EFI_STATUS
    183  1.1  jakllsch (EFIAPI *EFI_IP4_RECEIVE) (
    184  1.1  jakllsch     IN struct _EFI_IP4          *This,
    185  1.1  jakllsch     IN EFI_IP4_COMPLETION_TOKEN *Token
    186  1.1  jakllsch     );
    187  1.1  jakllsch 
    188  1.1  jakllsch typedef
    189  1.1  jakllsch EFI_STATUS
    190  1.1  jakllsch (EFIAPI *EFI_IP4_CANCEL)(
    191  1.1  jakllsch     IN struct _EFI_IP4          *This,
    192  1.1  jakllsch     IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL
    193  1.1  jakllsch     );
    194  1.1  jakllsch 
    195  1.1  jakllsch typedef
    196  1.1  jakllsch EFI_STATUS
    197  1.1  jakllsch (EFIAPI *EFI_IP4_POLL) (
    198  1.1  jakllsch     IN struct _EFI_IP4 *This
    199  1.1  jakllsch     );
    200  1.1  jakllsch 
    201  1.1  jakllsch typedef struct _EFI_IP4 {
    202  1.1  jakllsch     EFI_IP4_GET_MODE_DATA GetModeData;
    203  1.1  jakllsch     EFI_IP4_CONFIGURE     Configure;
    204  1.1  jakllsch     EFI_IP4_GROUPS        Groups;
    205  1.1  jakllsch     EFI_IP4_ROUTES        Routes;
    206  1.1  jakllsch     EFI_IP4_TRANSMIT      Transmit;
    207  1.1  jakllsch     EFI_IP4_RECEIVE       Receive;
    208  1.1  jakllsch     EFI_IP4_CANCEL        Cancel;
    209  1.1  jakllsch     EFI_IP4_POLL          Poll;
    210  1.1  jakllsch } EFI_IP4;
    211  1.1  jakllsch 
    212  1.1  jakllsch typedef struct {
    213  1.1  jakllsch     UINT8            DefaultProtocol;
    214  1.1  jakllsch     BOOLEAN          AcceptAnyProtocol;
    215  1.1  jakllsch     BOOLEAN          AcceptIcmpErrors;
    216  1.1  jakllsch     BOOLEAN          AcceptPromiscuous;
    217  1.1  jakllsch     EFI_IPv6_ADDRESS DestinationAddress;
    218  1.1  jakllsch     EFI_IPv6_ADDRESS StationAddress;
    219  1.1  jakllsch     UINT8            TrafficClass;
    220  1.1  jakllsch     UINT8            HopLimit;
    221  1.1  jakllsch     UINT32           FlowLabel;
    222  1.1  jakllsch     UINT32           ReceiveTimeout;
    223  1.1  jakllsch     UINT32           TransmitTimeout;
    224  1.1  jakllsch } EFI_IP6_CONFIG_DATA;
    225  1.1  jakllsch 
    226  1.1  jakllsch typedef struct {
    227  1.1  jakllsch     EFI_IPv6_ADDRESS Address;
    228  1.1  jakllsch     UINT8            PrefixLength;
    229  1.1  jakllsch } EFI_IP6_ADDRESS_INFO;
    230  1.1  jakllsch 
    231  1.1  jakllsch typedef struct {
    232  1.1  jakllsch     EFI_IPv6_ADDRESS Gateway;
    233  1.1  jakllsch     EFI_IPv6_ADDRESS Destination;
    234  1.1  jakllsch     UINT8            PrefixLength;
    235  1.1  jakllsch } EFI_IP6_ROUTE_TABLE;
    236  1.1  jakllsch 
    237  1.1  jakllsch typedef enum {
    238  1.1  jakllsch     EfiNeighborInComplete,
    239  1.1  jakllsch     EfiNeighborReachable,
    240  1.1  jakllsch     EfiNeighborStale,
    241  1.1  jakllsch     EfiNeighborDelay,
    242  1.1  jakllsch     EfiNeighborProbe
    243  1.1  jakllsch } EFI_IP6_NEIGHBOR_STATE;
    244  1.1  jakllsch 
    245  1.1  jakllsch typedef struct {
    246  1.1  jakllsch     EFI_IPv6_ADDRESS       Neighbor;
    247  1.1  jakllsch     EFI_MAC_ADDRESS        LinkAddress;
    248  1.1  jakllsch     EFI_IP6_NEIGHBOR_STATE State;
    249  1.1  jakllsch } EFI_IP6_NEIGHBOR_CACHE;
    250  1.1  jakllsch 
    251  1.1  jakllsch typedef struct {
    252  1.1  jakllsch     UINT8 Type;
    253  1.1  jakllsch     UINT8 Code;
    254  1.1  jakllsch } EFI_IP6_ICMP_TYPE;
    255  1.1  jakllsch 
    256  1.1  jakllsch //***********************************************************
    257  1.1  jakllsch // ICMPv6 type definitions for error messages
    258  1.1  jakllsch //***********************************************************
    259  1.1  jakllsch #define ICMP_V6_DEST_UNREACHABLE     0x1
    260  1.1  jakllsch #define ICMP_V6_PACKET_TOO_BIG       0x2
    261  1.1  jakllsch #define ICMP_V6_TIME_EXCEEDED        0x3
    262  1.1  jakllsch #define ICMP_V6_PARAMETER_PROBLEM    0x4
    263  1.1  jakllsch 
    264  1.1  jakllsch //***********************************************************
    265  1.1  jakllsch // ICMPv6 type definition for informational messages
    266  1.1  jakllsch //***********************************************************
    267  1.1  jakllsch #define ICMP_V6_ECHO_REQUEST         0x80
    268  1.1  jakllsch #define ICMP_V6_ECHO_REPLY           0x81
    269  1.1  jakllsch #define ICMP_V6_LISTENER_QUERY       0x82
    270  1.1  jakllsch #define ICMP_V6_LISTENER_REPORT      0x83
    271  1.1  jakllsch #define ICMP_V6_LISTENER_DONE        0x84
    272  1.1  jakllsch #define ICMP_V6_ROUTER_SOLICIT       0x85
    273  1.1  jakllsch #define ICMP_V6_ROUTER_ADVERTISE     0x86
    274  1.1  jakllsch #define ICMP_V6_NEIGHBOR_SOLICIT     0x87
    275  1.1  jakllsch #define ICMP_V6_NEIGHBOR_ADVERTISE   0x88
    276  1.1  jakllsch #define ICMP_V6_REDIRECT             0x89
    277  1.1  jakllsch #define ICMP_V6_LISTENER_REPORT_2    0x8F
    278  1.1  jakllsch 
    279  1.1  jakllsch //***********************************************************
    280  1.1  jakllsch // ICMPv6 code definitions for ICMP_V6_DEST_UNREACHABLE
    281  1.1  jakllsch //***********************************************************
    282  1.1  jakllsch #define ICMP_V6_NO_ROUTE_TO_DEST     0x0
    283  1.1  jakllsch #define ICMP_V6_COMM_PROHIBITED      0x1
    284  1.1  jakllsch #define ICMP_V6_BEYOND_SCOPE         0x2
    285  1.1  jakllsch #define ICMP_V6_ADDR_UNREACHABLE     0x3
    286  1.1  jakllsch #define ICMP_V6_PORT_UNREACHABLE     0x4
    287  1.1  jakllsch #define ICMP_V6_SOURCE_ADDR_FAILED   0x5
    288  1.1  jakllsch #define ICMP_V6_ROUTE_REJECTED       0x6
    289  1.1  jakllsch 
    290  1.1  jakllsch //***********************************************************
    291  1.1  jakllsch // ICMPv6 code definitions for ICMP_V6_TIME_EXCEEDED
    292  1.1  jakllsch //***********************************************************
    293  1.1  jakllsch #define ICMP_V6_TIMEOUT_HOP_LIMIT    0x0
    294  1.1  jakllsch #define ICMP_V6_TIMEOUT_REASSEMBLE   0x1
    295  1.1  jakllsch 
    296  1.1  jakllsch //***********************************************************
    297  1.1  jakllsch // ICMPv6 code definitions for ICMP_V6_PARAMETER_PROBLEM
    298  1.1  jakllsch //***********************************************************
    299  1.1  jakllsch #define ICMP_V6_ERRONEOUS_HEADER     0x0
    300  1.1  jakllsch #define ICMP_V6_UNRECOGNIZE_NEXT_HDR 0x1
    301  1.1  jakllsch #define ICMP_V6_UNRECOGNIZE_OPTION   0x2
    302  1.1  jakllsch 
    303  1.1  jakllsch typedef struct {
    304  1.1  jakllsch     BOOLEAN                IsStarted;
    305  1.1  jakllsch     UINT32                 MaxPacketSize;
    306  1.1  jakllsch     EFI_IP6_CONFIG_DATA    ConfigData;
    307  1.1  jakllsch     BOOLEAN                IsConfigured;
    308  1.1  jakllsch     UINT32                 AddressCount;
    309  1.1  jakllsch     EFI_IP6_ADDRESS_INFO   *AddressList;
    310  1.1  jakllsch     UINT32                 GroupCount;
    311  1.1  jakllsch     EFI_IPv6_ADDRESS       *GroupTable;
    312  1.1  jakllsch     UINT32                 RouteCount;
    313  1.1  jakllsch     EFI_IP6_ROUTE_TABLE    *RouteTable;
    314  1.1  jakllsch     UINT32                 NeighborCount;
    315  1.1  jakllsch     EFI_IP6_NEIGHBOR_CACHE *NeighborCache;
    316  1.1  jakllsch     UINT32                 PrefixCount;
    317  1.1  jakllsch     EFI_IP6_ADDRESS_INFO   *PrefixTable;
    318  1.1  jakllsch     UINT32                 IcmpTypeCount;
    319  1.1  jakllsch     EFI_IP6_ICMP_TYPE      *IcmpTypeList;
    320  1.1  jakllsch } EFI_IP6_MODE_DATA;
    321  1.1  jakllsch 
    322  1.1  jakllsch typedef
    323  1.1  jakllsch EFI_STATUS
    324  1.1  jakllsch (EFIAPI *EFI_IP6_GET_MODE_DATA) (
    325  1.1  jakllsch     IN struct _EFI_IP6                  *This,
    326  1.1  jakllsch     OUT EFI_IP6_MODE_DATA               *Ip6ModeData   OPTIONAL,
    327  1.1  jakllsch     OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
    328  1.1  jakllsch     OUT EFI_SIMPLE_NETWORK_MODE         *SnpModeData   OPTIONAL
    329  1.1  jakllsch     );
    330  1.1  jakllsch 
    331  1.1  jakllsch typedef
    332  1.1  jakllsch EFI_STATUS
    333  1.1  jakllsch (EFIAPI *EFI_IP6_CONFIGURE) (
    334  1.1  jakllsch     IN struct _EFI_IP6     *This,
    335  1.1  jakllsch     IN EFI_IP6_CONFIG_DATA *Ip6ConfigData OPTIONAL
    336  1.1  jakllsch     );
    337  1.1  jakllsch typedef
    338  1.1  jakllsch EFI_STATUS
    339  1.1  jakllsch (EFIAPI *EFI_IP6_GROUPS) (
    340  1.1  jakllsch     IN struct _EFI_IP6  *This,
    341  1.1  jakllsch     IN BOOLEAN          JoinFlag,
    342  1.1  jakllsch     IN EFI_IPv6_ADDRESS *GroupAddress OPTIONAL
    343  1.1  jakllsch     );
    344  1.1  jakllsch 
    345  1.1  jakllsch typedef
    346  1.1  jakllsch EFI_STATUS
    347  1.1  jakllsch (EFIAPI *EFI_IP6_ROUTES) (
    348  1.1  jakllsch     IN struct _EFI_IP6  *This,
    349  1.1  jakllsch     IN BOOLEAN          DeleteRoute,
    350  1.1  jakllsch     IN EFI_IPv6_ADDRESS *Destination    OPTIONAL,
    351  1.1  jakllsch     IN UINT8            PrefixLength,
    352  1.1  jakllsch     IN EFI_IPv6_ADDRESS *GatewayAddress OPTIONAL
    353  1.1  jakllsch     );
    354  1.1  jakllsch 
    355  1.1  jakllsch typedef
    356  1.1  jakllsch EFI_STATUS
    357  1.1  jakllsch (EFIAPI *EFI_IP6_NEIGHBORS) (
    358  1.1  jakllsch     IN struct _EFI_IP6  *This,
    359  1.1  jakllsch     IN BOOLEAN          DeleteFlag,
    360  1.1  jakllsch     IN EFI_IPv6_ADDRESS *TargetIp6Address,
    361  1.1  jakllsch     IN EFI_MAC_ADDRESS  *TargetLinkAddress OPTIONAL,
    362  1.1  jakllsch     IN UINT32           Timeout,
    363  1.1  jakllsch     IN BOOLEAN          Override
    364  1.1  jakllsch     );
    365  1.1  jakllsch 
    366  1.1  jakllsch typedef struct _EFI_IP6_FRAGMENT_DATA {
    367  1.1  jakllsch     UINT32 FragmentLength;
    368  1.1  jakllsch     VOID   *FragmentBuffer;
    369  1.1  jakllsch } EFI_IP6_FRAGMENT_DATA;
    370  1.1  jakllsch 
    371  1.1  jakllsch typedef struct _EFI_IP6_OVERRIDE_DATA {
    372  1.1  jakllsch     UINT8  Protocol;
    373  1.1  jakllsch     UINT8  HopLimit;
    374  1.1  jakllsch     UINT32 FlowLabel;
    375  1.1  jakllsch } EFI_IP6_OVERRIDE_DATA;
    376  1.1  jakllsch 
    377  1.1  jakllsch typedef struct _EFI_IP6_TRANSMIT_DATA {
    378  1.1  jakllsch     EFI_IPv6_ADDRESS      DestinationAddress;
    379  1.1  jakllsch     EFI_IP6_OVERRIDE_DATA *OverrideData;
    380  1.1  jakllsch     UINT32                ExtHdrsLength;
    381  1.1  jakllsch     VOID                  *ExtHdrs;
    382  1.1  jakllsch     UINT8                 NextHeader;
    383  1.1  jakllsch     UINT32                DataLength;
    384  1.1  jakllsch     UINT32                FragmentCount;
    385  1.1  jakllsch     EFI_IP6_FRAGMENT_DATA FragmentTable[1];
    386  1.1  jakllsch } EFI_IP6_TRANSMIT_DATA;
    387  1.1  jakllsch 
    388  1.1  jakllsch #pragma pack(1)
    389  1.1  jakllsch typedef struct _EFI_IP6_HEADER {
    390  1.1  jakllsch     UINT8            TrafficClassH:4;
    391  1.1  jakllsch     UINT8            Version:4;
    392  1.1  jakllsch     UINT8            FlowLabelH:4;
    393  1.1  jakllsch     UINT8            TrafficClassL:4;
    394  1.1  jakllsch     UINT16           FlowLabelL;
    395  1.1  jakllsch     UINT16           PayloadLength;
    396  1.1  jakllsch     UINT8            NextHeader;
    397  1.1  jakllsch     UINT8            HopLimit;
    398  1.1  jakllsch     EFI_IPv6_ADDRESS SourceAddress;
    399  1.1  jakllsch     EFI_IPv6_ADDRESS DestinationAddress;
    400  1.1  jakllsch } EFI_IP6_HEADER;
    401  1.1  jakllsch #pragma pack()
    402  1.1  jakllsch 
    403  1.1  jakllsch typedef struct _EFI_IP6_RECEIVE_DATA {
    404  1.1  jakllsch     EFI_TIME              TimeStamp;
    405  1.1  jakllsch     EFI_EVENT             RecycleSignal;
    406  1.1  jakllsch     UINT32                HeaderLength;
    407  1.1  jakllsch     EFI_IP6_HEADER        *Header;
    408  1.1  jakllsch     UINT32                DataLength;
    409  1.1  jakllsch     UINT32                FragmentCount;
    410  1.1  jakllsch     EFI_IP6_FRAGMENT_DATA FragmentTable[1];
    411  1.1  jakllsch } EFI_IP6_RECEIVE_DATA;
    412  1.1  jakllsch 
    413  1.1  jakllsch typedef struct {
    414  1.1  jakllsch     EFI_EVENT                 Event;
    415  1.1  jakllsch     EFI_STATUS                Status;
    416  1.1  jakllsch     union {
    417  1.1  jakllsch 	EFI_IP6_RECEIVE_DATA  *RxData;
    418  1.1  jakllsch 	EFI_IP6_TRANSMIT_DATA *TxData;
    419  1.1  jakllsch     }                         Packet;
    420  1.1  jakllsch } EFI_IP6_COMPLETION_TOKEN;
    421  1.1  jakllsch 
    422  1.1  jakllsch typedef
    423  1.1  jakllsch EFI_STATUS
    424  1.1  jakllsch (EFIAPI *EFI_IP6_TRANSMIT) (
    425  1.1  jakllsch     IN struct _EFI_IP6          *This,
    426  1.1  jakllsch     IN EFI_IP6_COMPLETION_TOKEN *Token
    427  1.1  jakllsch     );
    428  1.1  jakllsch 
    429  1.1  jakllsch typedef
    430  1.1  jakllsch EFI_STATUS
    431  1.1  jakllsch (EFIAPI *EFI_IP6_RECEIVE) (
    432  1.1  jakllsch     IN struct _EFI_IP6          *This,
    433  1.1  jakllsch     IN EFI_IP6_COMPLETION_TOKEN *Token
    434  1.1  jakllsch     );
    435  1.1  jakllsch 
    436  1.1  jakllsch typedef
    437  1.1  jakllsch EFI_STATUS
    438  1.1  jakllsch (EFIAPI *EFI_IP6_CANCEL)(
    439  1.1  jakllsch     IN struct _EFI_IP6          *This,
    440  1.1  jakllsch     IN EFI_IP6_COMPLETION_TOKEN *Token OPTIONAL
    441  1.1  jakllsch     );
    442  1.1  jakllsch 
    443  1.1  jakllsch typedef
    444  1.1  jakllsch EFI_STATUS
    445  1.1  jakllsch (EFIAPI *EFI_IP6_POLL) (
    446  1.1  jakllsch     IN struct _EFI_IP6 *This
    447  1.1  jakllsch     );
    448  1.1  jakllsch 
    449  1.1  jakllsch typedef struct _EFI_IP6 {
    450  1.1  jakllsch     EFI_IP6_GET_MODE_DATA GetModeData;
    451  1.1  jakllsch     EFI_IP6_CONFIGURE     Configure;
    452  1.1  jakllsch     EFI_IP6_GROUPS        Groups;
    453  1.1  jakllsch     EFI_IP6_ROUTES        Routes;
    454  1.1  jakllsch     EFI_IP6_NEIGHBORS     Neighbors;
    455  1.1  jakllsch     EFI_IP6_TRANSMIT      Transmit;
    456  1.1  jakllsch     EFI_IP6_RECEIVE       Receive;
    457  1.1  jakllsch     EFI_IP6_CANCEL        Cancel;
    458  1.1  jakllsch     EFI_IP6_POLL          Poll;
    459  1.1  jakllsch } EFI_IP6;
    460  1.1  jakllsch 
    461  1.1  jakllsch #endif /* _EFI_IP_H */
    462