]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6ConfigImpl.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6ConfigImpl.h
index 5ae483931a97940ea5bcccafbd5d3cba000946e8..66b730a32d1d049448a5fa69a643ff35c07bb3bd 100644 (file)
@@ -1,34 +1,26 @@
 /** @file\r
-  Definitions for EFI IPv6 Configuartion Protocol implementation.\r
+  Definitions for EFI IPv6 Configuration Protocol implementation.\r
 \r
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
 #ifndef __IP6_CONFIG_IMPL_H__\r
 #define __IP6_CONFIG_IMPL_H__\r
 \r
-#define IP6_CONFIG_INSTANCE_SIGNATURE    SIGNATURE_32 ('I', 'P', '6', 'C')\r
-#define IP6_FORM_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('I', 'F', 'C', 'I')\r
-#define IP6_CONFIG_VARIABLE_ATTRIBUTE    (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)\r
+#define IP6_CONFIG_INSTANCE_SIGNATURE     SIGNATURE_32 ('I', 'P', '6', 'C')\r
+#define IP6_FORM_CALLBACK_INFO_SIGNATURE  SIGNATURE_32 ('I', 'F', 'C', 'I')\r
+#define IP6_CONFIG_VARIABLE_ATTRIBUTE     (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)\r
 \r
-#define IP6_CONFIG_DEFAULT_DAD_XMITS        1\r
-#define IP6_CONFIG_DHCP6_OPTION_ORO         6\r
-#define IP6_CONFIG_DHCP6_OPTION_DNS_SERVERS 23\r
+#define IP6_CONFIG_DEFAULT_DAD_XMITS  1\r
 \r
-#define DATA_ATTRIB_SIZE_FIXED              0x1\r
-#define DATA_ATTRIB_VOLATILE                0x2\r
+#define DATA_ATTRIB_SIZE_FIXED  0x1\r
+#define DATA_ATTRIB_VOLATILE    0x2\r
 \r
-#define DATA_ATTRIB_SET(Attrib, Bits)       (BOOLEAN)((Attrib) & (Bits))\r
-#define SET_DATA_ATTRIB(Attrib, Bits)       ((Attrib) |= (Bits))\r
+#define DATA_ATTRIB_SET(Attrib, Bits)  (BOOLEAN)((Attrib) & (Bits))\r
+#define SET_DATA_ATTRIB(Attrib, Bits)  ((Attrib) |= (Bits))\r
 \r
 typedef struct _IP6_CONFIG_INSTANCE IP6_CONFIG_INSTANCE;\r
 \r
@@ -39,7 +31,6 @@ typedef struct _IP6_CONFIG_INSTANCE IP6_CONFIG_INSTANCE;
       IP6_CONFIG_INSTANCE_SIGNATURE \\r
       )\r
 \r
-\r
 #define IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK(Callback) \\r
   CR ((Callback), \\r
       IP6_CONFIG_INSTANCE, \\r
@@ -72,7 +63,7 @@ typedef struct _IP6_CONFIG_INSTANCE IP6_CONFIG_INSTANCE;
                                8 bytes.\r
   @retval EFI_SUCCESS          The specified configuration data for the EFI IPv6\r
                                network stack was set successfully.\r
-  \r
+\r
 **/\r
 typedef\r
 EFI_STATUS\r
@@ -89,14 +80,14 @@ EFI_STATUS
   @param[in, out] DataSize On input, in bytes, the size of Data. On output, in\r
                            bytes, the size of buffer required to store the specified\r
                            configuration data.\r
-  @param[in]      Data     The data buffer in which the configuration data is returned.  \r
+  @param[in]      Data     The data buffer in which the configuration data is returned.\r
                            Ignored if DataSize is ZERO.\r
 \r
   @retval EFI_BUFFER_TOO_SMALL The size of Data is too small for the specified\r
-                               configuration data, and the required size is \r
+                               configuration data, and the required size is\r
                                returned in DataSize.\r
-  @retval EFI_SUCCESS          The specified configuration data was obtained successfully.                               \r
-  \r
+  @retval EFI_SUCCESS          The specified configuration data was obtained successfully.\r
+\r
 **/\r
 typedef\r
 EFI_STATUS\r
@@ -107,30 +98,30 @@ EFI_STATUS
   );\r
 \r
 typedef union {\r
-  VOID                                      *Ptr;\r
-  EFI_IP6_CONFIG_INTERFACE_INFO             *IfInfo;\r
-  EFI_IP6_CONFIG_INTERFACE_ID               *AltIfId;\r
-  EFI_IP6_CONFIG_POLICY                     *Policy;\r
-  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS  *DadXmits;\r
-  EFI_IP6_CONFIG_MANUAL_ADDRESS             *ManualAddress;\r
-  EFI_IPv6_ADDRESS                          *Gateway;\r
-  EFI_IPv6_ADDRESS                          *DnsServers;\r
+  VOID                                        *Ptr;\r
+  EFI_IP6_CONFIG_INTERFACE_INFO               *IfInfo;\r
+  EFI_IP6_CONFIG_INTERFACE_ID                 *AltIfId;\r
+  EFI_IP6_CONFIG_POLICY                       *Policy;\r
+  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS    *DadXmits;\r
+  EFI_IP6_CONFIG_MANUAL_ADDRESS               *ManualAddress;\r
+  EFI_IPv6_ADDRESS                            *Gateway;\r
+  EFI_IPv6_ADDRESS                            *DnsServers;\r
 } IP6_CONFIG_DATA;\r
 \r
 typedef struct {\r
-  IP6_CONFIG_SET_DATA  SetData;\r
-  IP6_CONFIG_GET_DATA  GetData;\r
-  EFI_STATUS           Status;\r
-  UINT8                Attribute;\r
-  NET_MAP              EventMap;\r
-  IP6_CONFIG_DATA      Data;\r
-  UINTN                DataSize;\r
+  IP6_CONFIG_SET_DATA    SetData;\r
+  IP6_CONFIG_GET_DATA    GetData;\r
+  EFI_STATUS             Status;\r
+  UINT8                  Attribute;\r
+  NET_MAP                EventMap;\r
+  IP6_CONFIG_DATA        Data;\r
+  UINTN                  DataSize;\r
 } IP6_CONFIG_DATA_ITEM;\r
 \r
 typedef struct {\r
-  UINT16                    Offset;\r
-  UINTN                     DataSize;\r
-  EFI_IP6_CONFIG_DATA_TYPE  DataType;\r
+  UINT16                      Offset;\r
+  UINT32                      DataSize;\r
+  EFI_IP6_CONFIG_DATA_TYPE    DataType;\r
 } IP6_CONFIG_DATA_RECORD;\r
 \r
 #pragma pack(1)\r
@@ -150,81 +141,101 @@ typedef struct {
 //  EFI_IPv6_ADDRESS                          DnsServers[];\r
 //\r
 typedef struct {\r
-  UINT32                  IaId;\r
-  UINT16                  Checksum;\r
-  UINT16                  DataRecordCount;\r
-  IP6_CONFIG_DATA_RECORD  DataRecord[1];\r
+  UINT32                    IaId;\r
+  UINT16                    Checksum;\r
+  UINT16                    DataRecordCount;\r
+  IP6_CONFIG_DATA_RECORD    DataRecord[1];\r
 } IP6_CONFIG_VARIABLE;\r
 \r
 #pragma pack()\r
 \r
 typedef struct {\r
-  LIST_ENTRY                  Link;\r
-  EFI_IP6_ADDRESS_INFO        AddrInfo;\r
+  LIST_ENTRY              Link;\r
+  EFI_IP6_ADDRESS_INFO    AddrInfo;\r
 } IP6_ADDRESS_INFO_ENTRY;\r
 \r
 typedef struct {\r
-  EFI_IP6_CONFIG_POLICY                    Policy;              ///< manual or automatic  \r
-  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS DadTransmitCount;    ///< dad transmits count\r
-  EFI_IP6_CONFIG_INTERFACE_ID              InterfaceId;         ///< alternative interface id \r
-  LIST_ENTRY                               ManualAddress;       ///< IP addresses\r
-  UINT32                                   ManualAddressCount;  ///< IP addresses count\r
-  LIST_ENTRY                               GatewayAddress;      ///< Gateway address\r
-  UINT32                                   GatewayAddressCount; ///< Gateway address count\r
-  LIST_ENTRY                               DnsAddress;          ///< DNS server address\r
-  UINT32                                   DnsAddressCount;     ///< DNS server address count\r
+  EFI_IP6_CONFIG_POLICY                       Policy;              ///< manual or automatic\r
+  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS    DadTransmitCount;    ///< dad transmits count\r
+  EFI_IP6_CONFIG_INTERFACE_ID                 InterfaceId;         ///< alternative interface id\r
+  LIST_ENTRY                                  ManualAddress;       ///< IP addresses\r
+  UINT32                                      ManualAddressCount;  ///< IP addresses count\r
+  LIST_ENTRY                                  GatewayAddress;      ///< Gateway address\r
+  UINT32                                      GatewayAddressCount; ///< Gateway address count\r
+  LIST_ENTRY                                  DnsAddress;          ///< DNS server address\r
+  UINT32                                      DnsAddressCount;     ///< DNS server address count\r
 } IP6_CONFIG_NVDATA;\r
 \r
 typedef struct _IP6_FORM_CALLBACK_INFO {\r
-  UINT32                           Signature;\r
-  EFI_HANDLE                       ChildHandle;\r
-  EFI_HII_CONFIG_ACCESS_PROTOCOL   HiiConfigAccess;\r
-  EFI_DEVICE_PATH_PROTOCOL         *HiiVendorDevicePath;\r
-  EFI_HII_HANDLE                   RegisteredHandle;\r
+  UINT32                            Signature;\r
+  EFI_HANDLE                        ChildHandle;\r
+  EFI_HII_CONFIG_ACCESS_PROTOCOL    HiiConfigAccess;\r
+  EFI_DEVICE_PATH_PROTOCOL          *HiiVendorDevicePath;\r
+  EFI_HII_HANDLE                    RegisteredHandle;\r
 } IP6_FORM_CALLBACK_INFO;\r
 \r
 struct _IP6_CONFIG_INSTANCE {\r
-  UINT32                                    Signature;\r
-  BOOLEAN                                   Configured;\r
-  LIST_ENTRY                                Link;\r
-  UINT16                                    IfIndex;\r
-\r
-  EFI_IP6_CONFIG_INTERFACE_INFO             InterfaceInfo;\r
-  EFI_IP6_CONFIG_INTERFACE_ID               AltIfId;\r
-  EFI_IP6_CONFIG_POLICY                     Policy;\r
-  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS  DadXmits;\r
-\r
-  IP6_CONFIG_DATA_ITEM                      DataItem[Ip6ConfigDataTypeMaximum];\r
-  NET_MAP                                   DadFailedMap;\r
-  NET_MAP                                   DadPassedMap;\r
-\r
-  EFI_IP6_CONFIG_PROTOCOL                   Ip6Config;\r
-\r
-  EFI_EVENT                                 Dhcp6SbNotifyEvent;\r
-  VOID                                      *Registration;\r
-  EFI_HANDLE                                Dhcp6Handle;\r
-  EFI_DHCP6_PROTOCOL                        *Dhcp6;\r
-  BOOLEAN                                   OtherInfoOnly;\r
-  UINT32                                    IaId;\r
-  EFI_EVENT                                 Dhcp6Event;\r
-  UINT32                                    FailedIaAddressCount;\r
-  EFI_IPv6_ADDRESS                          *DeclineAddress;\r
-  UINT32                                    DeclineAddressCount;\r
-\r
-  IP6_FORM_CALLBACK_INFO                    CallbackInfo;\r
-  IP6_CONFIG_NVDATA                         Ip6NvData;\r
+  UINT32                                      Signature;\r
+  BOOLEAN                                     Configured;\r
+  LIST_ENTRY                                  Link;\r
+  UINT16                                      IfIndex;\r
+\r
+  EFI_IP6_CONFIG_INTERFACE_INFO               InterfaceInfo;\r
+  EFI_IP6_CONFIG_INTERFACE_ID                 AltIfId;\r
+  EFI_IP6_CONFIG_POLICY                       Policy;\r
+  EFI_IP6_CONFIG_DUP_ADDR_DETECT_TRANSMITS    DadXmits;\r
+\r
+  IP6_CONFIG_DATA_ITEM                        DataItem[Ip6ConfigDataTypeMaximum];\r
+  NET_MAP                                     DadFailedMap;\r
+  NET_MAP                                     DadPassedMap;\r
+\r
+  EFI_IP6_CONFIG_PROTOCOL                     Ip6Config;\r
+\r
+  EFI_EVENT                                   Dhcp6SbNotifyEvent;\r
+  VOID                                        *Registration;\r
+  EFI_HANDLE                                  Dhcp6Handle;\r
+  EFI_DHCP6_PROTOCOL                          *Dhcp6;\r
+  BOOLEAN                                     OtherInfoOnly;\r
+  UINT32                                      IaId;\r
+  EFI_EVENT                                   Dhcp6Event;\r
+  UINT32                                      FailedIaAddressCount;\r
+  EFI_IPv6_ADDRESS                            *DeclineAddress;\r
+  UINT32                                      DeclineAddressCount;\r
+\r
+  IP6_FORM_CALLBACK_INFO                      CallbackInfo;\r
+  IP6_CONFIG_NVDATA                           Ip6NvData;\r
 };\r
 \r
+/**\r
+  Read the configuration data from variable storage according to the VarName and\r
+  gEfiIp6ConfigProtocolGuid. It checks the integrity of variable data. If the\r
+  data is corrupted, it clears the variable data to ZERO. Otherwise, it outputs the\r
+  configuration data to IP6_CONFIG_INSTANCE.\r
+\r
+  @param[in]      VarName  The pointer to the variable name\r
+  @param[in, out] Instance The pointer to the IP6 config instance data.\r
+\r
+  @retval EFI_NOT_FOUND         The variable can not be found or already corrupted.\r
+  @retval EFI_OUT_OF_RESOURCES  Fail to allocate resource to complete the operation.\r
+  @retval EFI_SUCCESS           The configuration data was retrieved successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+Ip6ConfigReadConfigData (\r
+  IN     CHAR16               *VarName,\r
+  IN OUT IP6_CONFIG_INSTANCE  *Instance\r
+  );\r
+\r
 /**\r
   The event process routine when the DHCPv6 server is answered with a reply packet\r
   for an information request.\r
-  \r
+\r
   @param[in]     This          Points to the EFI_DHCP6_PROTOCOL.\r
   @param[in]     Context       The pointer to the IP6 configuration instance data.\r
   @param[in]     Packet        The DHCPv6 reply packet.\r
 \r
   @retval EFI_SUCCESS      The DNS server address was retrieved from the reply packet.\r
-  @retval EFI_NOT_READY    The reply packet does not contain the DNS server option, or \r
+  @retval EFI_NOT_READY    The reply packet does not contain the DNS server option, or\r
                            the DNS server address is not valid.\r
 \r
 **/\r
@@ -238,7 +249,7 @@ Ip6ConfigOnDhcp6Reply (
 \r
 /**\r
   The work function to trigger the DHCPv6 process to perform a stateful autoconfiguration.\r
-  \r
+\r
   @param[in]     Instance      Pointer to the IP6 config instance data.\r
   @param[in]     OtherInfoOnly If FALSE, get stateful address and other information\r
                                via DHCPv6. Otherwise, only get the other information.\r
@@ -257,10 +268,10 @@ Ip6ConfigStartStatefulAutoConfig (
   Initialize an IP6_CONFIG_INSTANCE.\r
 \r
   @param[out]    Instance       The buffer of IP6_CONFIG_INSTANCE to be initialized.\r
-  \r
+\r
   @retval EFI_OUT_OF_RESOURCES  Failed to allocate resources to complete the operation.\r
   @retval EFI_SUCCESS           The IP6_CONFIG_INSTANCE initialized successfully.\r
-  \r
+\r
 **/\r
 EFI_STATUS\r
 Ip6ConfigInitInstance (\r
@@ -271,7 +282,7 @@ Ip6ConfigInitInstance (
   Release an IP6_CONFIG_INSTANCE.\r
 \r
   @param[in, out] Instance    The buffer of IP6_CONFIG_INSTANCE to be freed.\r
-  \r
+\r
 **/\r
 VOID\r
 Ip6ConfigCleanInstance (\r
@@ -279,13 +290,13 @@ Ip6ConfigCleanInstance (
   );\r
 \r
 /**\r
-  Destory the Dhcp6 child in IP6_CONFIG_INSTANCE and release the resources.\r
+  Destroy the Dhcp6 child in IP6_CONFIG_INSTANCE and release the resources.\r
 \r
   @param[in, out] Instance    The buffer of IP6_CONFIG_INSTANCE to be freed.\r
 \r
   @retval EFI_SUCCESS         The child was successfully destroyed.\r
-  @retval Others              Failed to destory the child.\r
-  \r
+  @retval Others              Failed to destroy the child.\r
+\r
 **/\r
 EFI_STATUS\r
 Ip6ConfigDestroyDhcp6 (\r