]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6If.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6If.c
index 280cd764f14cb996f855a5fa20a3ddc78ee5d18b..4629c05f25a09b89ace18b508d4b3443d6754416 100644 (file)
@@ -1,15 +1,9 @@
 /** @file\r
-  Implement IP6 pesudo interface.\r
+  Implement IP6 pseudo interface.\r
 \r
-  Copyright (c) 2009 - 2012, 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
@@ -25,8 +19,8 @@
 VOID\r
 EFIAPI\r
 Ip6OnFrameSent (\r
-  IN EFI_EVENT               Event,\r
-  IN VOID                    *Context\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
   );\r
 \r
 /**\r
@@ -43,11 +37,11 @@ Ip6OnFrameSent (
 **/\r
 BOOLEAN\r
 Ip6CancelInstanceFrame (\r
-  IN IP6_LINK_TX_TOKEN *Frame,\r
-  IN VOID              *Context\r
+  IN IP6_LINK_TX_TOKEN  *Frame,\r
+  IN VOID               *Context\r
   )\r
 {\r
-  if (Frame->IpInstance == (IP6_PROTOCOL *) Context) {\r
+  if (Frame->IpInstance == (IP6_PROTOCOL *)Context) {\r
     return TRUE;\r
   }\r
 \r
@@ -79,14 +73,14 @@ Ip6CancelInstanceFrame (
 **/\r
 EFI_STATUS\r
 Ip6SetAddress (\r
-  IN IP6_INTERFACE          *Interface,\r
-  IN EFI_IPv6_ADDRESS       *Ip6Addr,\r
-  IN BOOLEAN                IsAnycast,\r
-  IN UINT8                  PrefixLength,\r
-  IN UINT32                 ValidLifetime,\r
-  IN UINT32                 PreferredLifetime,\r
-  IN IP6_DAD_CALLBACK       DadCallback  OPTIONAL,\r
-  IN VOID                   *Context     OPTIONAL\r
+  IN IP6_INTERFACE     *Interface,\r
+  IN EFI_IPv6_ADDRESS  *Ip6Addr,\r
+  IN BOOLEAN           IsAnycast,\r
+  IN UINT8             PrefixLength,\r
+  IN UINT32            ValidLifetime,\r
+  IN UINT32            PreferredLifetime,\r
+  IN IP6_DAD_CALLBACK  DadCallback  OPTIONAL,\r
+  IN VOID              *Context     OPTIONAL\r
   )\r
 {\r
   IP6_SERVICE            *IpSb;\r
@@ -115,12 +109,12 @@ Ip6SetAddress (
     return EFI_SUCCESS;\r
   }\r
 \r
-  AddressInfo = (IP6_ADDRESS_INFO *) AllocatePool (sizeof (IP6_ADDRESS_INFO));\r
+  AddressInfo = (IP6_ADDRESS_INFO *)AllocatePool (sizeof (IP6_ADDRESS_INFO));\r
   if (AddressInfo == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  AddressInfo->Signature         = IP6_ADDR_INFO_SIGNATURE;\r
+  AddressInfo->Signature = IP6_ADDR_INFO_SIGNATURE;\r
   IP6_COPY_ADDRESS (&AddressInfo->Address, Ip6Addr);\r
   AddressInfo->IsAnycast         = IsAnycast;\r
   AddressInfo->PrefixLength      = PrefixLength;\r
@@ -164,24 +158,23 @@ Ip6SetAddress (
     AddressInfo->PrefixLength = IP6_LINK_LOCAL_PREFIX_LENGTH;\r
   }\r
 \r
-\r
   //\r
-  // Node should delay joining the solicited-node mulitcast address by a random delay\r
+  // Node should delay joining the solicited-node multicast address by a random delay\r
   // between 0 and MAX_RTR_SOLICITATION_DELAY (1 second).\r
   // Thus queue the address to be processed in Duplicate Address Detection module\r
   // after the delay time (in milliseconds).\r
   //\r
-  Delay = (UINT64) NET_RANDOM (NetRandomInitSeed ());\r
+  Delay = (UINT64)NET_RANDOM (NetRandomInitSeed ());\r
   Delay = MultU64x32 (Delay, IP6_ONE_SECOND_IN_MS);\r
   Delay = RShiftU64 (Delay, 32);\r
 \r
-  DelayNode = (IP6_DELAY_JOIN_LIST *) AllocatePool (sizeof (IP6_DELAY_JOIN_LIST));\r
+  DelayNode = (IP6_DELAY_JOIN_LIST *)AllocatePool (sizeof (IP6_DELAY_JOIN_LIST));\r
   if (DelayNode == NULL) {\r
     FreePool (AddressInfo);\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  DelayNode->DelayTime   = (UINT32) (DivU64x32 (Delay, IP6_TIMER_INTERVAL_IN_MS));\r
+  DelayNode->DelayTime   = (UINT32)(DivU64x32 (Delay, IP6_TIMER_INTERVAL_IN_MS));\r
   DelayNode->Interface   = Interface;\r
   DelayNode->AddressInfo = AddressInfo;\r
   DelayNode->DadCallback = DadCallback;\r
@@ -203,13 +196,13 @@ Ip6SetAddress (
 **/\r
 IP6_INTERFACE *\r
 Ip6CreateInterface (\r
-  IN IP6_SERVICE            *IpSb,\r
-  IN BOOLEAN                LinkLocal\r
+  IN IP6_SERVICE  *IpSb,\r
+  IN BOOLEAN      LinkLocal\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
-  IP6_INTERFACE             *Interface;\r
-  EFI_IPv6_ADDRESS          *Ip6Addr;\r
+  EFI_STATUS        Status;\r
+  IP6_INTERFACE     *Interface;\r
+  EFI_IPv6_ADDRESS  *Ip6Addr;\r
 \r
   NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
 \r
@@ -218,27 +211,27 @@ Ip6CreateInterface (
     return NULL;\r
   }\r
 \r
-  Interface->Signature        = IP6_INTERFACE_SIGNATURE;\r
-  Interface->RefCnt           = 1;\r
+  Interface->Signature = IP6_INTERFACE_SIGNATURE;\r
+  Interface->RefCnt    = 1;\r
 \r
   InitializeListHead (&Interface->AddressList);\r
-  Interface->AddressCount     = 0;\r
-  Interface->Configured       = FALSE;\r
+  Interface->AddressCount = 0;\r
+  Interface->Configured   = FALSE;\r
 \r
-  Interface->Service          = IpSb;\r
-  Interface->Controller       = IpSb->Controller;\r
-  Interface->Image            = IpSb->Image;\r
+  Interface->Service    = IpSb;\r
+  Interface->Controller = IpSb->Controller;\r
+  Interface->Image      = IpSb->Image;\r
 \r
   InitializeListHead (&Interface->ArpQues);\r
   InitializeListHead (&Interface->SentFrames);\r
 \r
-  Interface->DupAddrDetect    = IpSb->Ip6ConfigInstance.DadXmits.DupAddrDetectTransmits;\r
+  Interface->DupAddrDetect = IpSb->Ip6ConfigInstance.DadXmits.DupAddrDetectTransmits;\r
   InitializeListHead (&Interface->DupAddrDetectList);\r
 \r
   InitializeListHead (&Interface->DelayJoinList);\r
 \r
   InitializeListHead (&Interface->IpInstances);\r
-  Interface->PromiscRecv      = FALSE;\r
+  Interface->PromiscRecv = FALSE;\r
 \r
   if (!LinkLocal) {\r
     return Interface;\r
@@ -260,8 +253,8 @@ Ip6CreateInterface (
              Ip6Addr,\r
              FALSE,\r
              IP6_LINK_LOCAL_PREFIX_LENGTH,\r
-             (UINT32) IP6_INFINIT_LIFETIME,\r
-             (UINT32) IP6_INFINIT_LIFETIME,\r
+             (UINT32)IP6_INFINIT_LIFETIME,\r
+             (UINT32)IP6_INFINIT_LIFETIME,\r
              NULL,\r
              NULL\r
              );\r
@@ -294,12 +287,12 @@ ON_ERROR:
 **/\r
 VOID\r
 Ip6CleanInterface (\r
-  IN  IP6_INTERFACE         *Interface,\r
-  IN  IP6_PROTOCOL          *IpInstance           OPTIONAL\r
+  IN  IP6_INTERFACE  *Interface,\r
+  IN  IP6_PROTOCOL   *IpInstance           OPTIONAL\r
   )\r
 {\r
-  IP6_DAD_ENTRY             *Duplicate;\r
-  IP6_DELAY_JOIN_LIST       *Delay;\r
+  IP6_DAD_ENTRY        *Duplicate;\r
+  IP6_DELAY_JOIN_LIST  *Delay;\r
 \r
   NET_CHECK_SIGNATURE (Interface, IP6_INTERFACE_SIGNATURE);\r
   ASSERT (Interface->RefCnt > 0);\r
@@ -358,11 +351,11 @@ Ip6CleanInterface (
 **/\r
 IP6_LINK_TX_TOKEN *\r
 Ip6CreateLinkTxToken (\r
-  IN IP6_INTERFACE          *Interface,\r
-  IN IP6_PROTOCOL           *IpInstance    OPTIONAL,\r
-  IN NET_BUF                *Packet,\r
-  IN IP6_FRAME_CALLBACK     CallBack,\r
-  IN VOID                   *Context\r
+  IN IP6_INTERFACE       *Interface,\r
+  IN IP6_PROTOCOL        *IpInstance    OPTIONAL,\r
+  IN NET_BUF             *Packet,\r
+  IN IP6_FRAME_CALLBACK  CallBack,\r
+  IN VOID                *Context\r
   )\r
 {\r
   EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *MnpToken;\r
@@ -387,8 +380,8 @@ Ip6CreateLinkTxToken (
   ZeroMem (&Token->DstMac, sizeof (EFI_MAC_ADDRESS));\r
   IP6_COPY_LINK_ADDRESS (&Token->SrcMac, &Interface->Service->SnpMode.CurrentAddress);\r
 \r
-  MnpToken          = &(Token->MnpToken);\r
-  MnpToken->Status  = EFI_NOT_READY;\r
+  MnpToken         = &(Token->MnpToken);\r
+  MnpToken->Status = EFI_NOT_READY;\r
 \r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL,\r
@@ -403,8 +396,8 @@ Ip6CreateLinkTxToken (
     return NULL;\r
   }\r
 \r
-  MnpTxData                     = &Token->MnpTxData;\r
-  MnpToken->Packet.TxData       = MnpTxData;\r
+  MnpTxData               = &Token->MnpTxData;\r
+  MnpToken->Packet.TxData = MnpTxData;\r
 \r
   MnpTxData->DestinationAddress = &Token->DstMac;\r
   MnpTxData->SourceAddress      = &Token->SrcMac;\r
@@ -412,10 +405,10 @@ Ip6CreateLinkTxToken (
   MnpTxData->DataLength         = Packet->TotalSize;\r
   MnpTxData->HeaderLength       = 0;\r
 \r
-  Count                         = Packet->BlockOpNum;\r
+  Count = Packet->BlockOpNum;\r
 \r
-  NetbufBuildExt (Packet, (NET_FRAGMENT *) MnpTxData->FragmentTable, &Count);\r
-  MnpTxData->FragmentCount      = (UINT16)Count;\r
+  NetbufBuildExt (Packet, (NET_FRAGMENT *)MnpTxData->FragmentTable, &Count);\r
+  MnpTxData->FragmentCount = (UINT16)Count;\r
 \r
   return Token;\r
 }\r
@@ -429,7 +422,7 @@ Ip6CreateLinkTxToken (
 **/\r
 VOID\r
 Ip6FreeLinkTxToken (\r
-  IN IP6_LINK_TX_TOKEN      *Token\r
+  IN IP6_LINK_TX_TOKEN  *Token\r
   )\r
 {\r
   NET_CHECK_SIGNATURE (Token, IP6_LINK_TX_SIGNATURE);\r
@@ -448,12 +441,12 @@ Ip6FreeLinkTxToken (
 VOID\r
 EFIAPI\r
 Ip6RecycleFrame (\r
-  IN VOID                   *Context\r
+  IN VOID  *Context\r
   )\r
 {\r
   EFI_MANAGED_NETWORK_RECEIVE_DATA  *RxData;\r
 \r
-  RxData = (EFI_MANAGED_NETWORK_RECEIVE_DATA *) Context;\r
+  RxData = (EFI_MANAGED_NETWORK_RECEIVE_DATA *)Context;\r
 \r
   gBS->SignalEvent (RxData->RecycleEvent);\r
 }\r
@@ -472,7 +465,7 @@ Ip6RecycleFrame (
 VOID\r
 EFIAPI\r
 Ip6OnFrameReceivedDpc (\r
-  IN VOID                     *Context\r
+  IN VOID  *Context\r
   )\r
 {\r
   EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *MnpToken;\r
@@ -483,27 +476,26 @@ Ip6OnFrameReceivedDpc (
   UINT32                                Flag;\r
   IP6_SERVICE                           *IpSb;\r
 \r
-  Token = (IP6_LINK_RX_TOKEN *) Context;\r
+  Token = (IP6_LINK_RX_TOKEN *)Context;\r
   NET_CHECK_SIGNATURE (Token, IP6_LINK_RX_SIGNATURE);\r
 \r
   //\r
   // First clear the interface's receive request in case the\r
   // caller wants to call Ip6ReceiveFrame in the callback.\r
   //\r
-  IpSb = (IP6_SERVICE *) Token->Context;\r
+  IpSb = (IP6_SERVICE *)Token->Context;\r
   NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
 \r
-\r
   MnpToken  = &Token->MnpToken;\r
   MnpRxData = MnpToken->Packet.RxData;\r
 \r
   if (EFI_ERROR (MnpToken->Status) || (MnpRxData == NULL)) {\r
     Token->CallBack (NULL, MnpToken->Status, 0, Token->Context);\r
-    return ;\r
+    return;\r
   }\r
 \r
   //\r
-  // Wrap the frame in a net buffer then deliever it to IP input.\r
+  // Wrap the frame in a net buffer then deliver it to IP input.\r
   // IP will reassemble the packet, and deliver it to upper layer\r
   //\r
   Netfrag.Len  = MnpRxData->DataLength;\r
@@ -516,7 +508,7 @@ Ip6OnFrameReceivedDpc (
 \r
     Token->CallBack (NULL, EFI_OUT_OF_RESOURCES, 0, Token->Context);\r
 \r
-    return ;\r
+    return;\r
   }\r
 \r
   Flag  = (MnpRxData->BroadcastFlag ? IP6_LINK_BROADCAST : 0);\r
@@ -536,8 +528,8 @@ Ip6OnFrameReceivedDpc (
 VOID\r
 EFIAPI\r
 Ip6OnFrameReceived (\r
-  IN EFI_EVENT                Event,\r
-  IN VOID                     *Context\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
   )\r
 {\r
   //\r
@@ -554,23 +546,23 @@ Ip6OnFrameReceived (
 \r
   @retval EFI_ALREADY_STARTED   There is already a pending receive request.\r
   @retval EFI_OUT_OF_RESOURCES  Failed to allocate resource to receive.\r
-  @retval EFI_SUCCESS           The recieve request has been started.\r
+  @retval EFI_SUCCESS           The receive request has been started.\r
 \r
 **/\r
 EFI_STATUS\r
 Ip6ReceiveFrame (\r
-  IN  IP6_FRAME_CALLBACK    CallBack,\r
-  IN  IP6_SERVICE           *IpSb\r
+  IN  IP6_FRAME_CALLBACK  CallBack,\r
+  IN  IP6_SERVICE         *IpSb\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
-  IP6_LINK_RX_TOKEN         *Token;\r
-  \r
+  EFI_STATUS         Status;\r
+  IP6_LINK_RX_TOKEN  *Token;\r
+\r
   NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
 \r
   Token           = &IpSb->RecvRequest;\r
   Token->CallBack = CallBack;\r
-  Token->Context  = (VOID *) IpSb;\r
+  Token->Context  = (VOID *)IpSb;\r
 \r
   Status = IpSb->Mnp->Receive (IpSb->Mnp, &Token->MnpToken);\r
   if (EFI_ERROR (Status)) {\r
@@ -581,7 +573,7 @@ Ip6ReceiveFrame (
 }\r
 \r
 /**\r
-  Callback funtion when frame transmission is finished. It will\r
+  Callback function when frame transmission is finished. It will\r
   call the frame owner's callback function to tell it the result.\r
 \r
   @param[in]  Context        Context which points to the token.\r
@@ -590,22 +582,22 @@ Ip6ReceiveFrame (
 VOID\r
 EFIAPI\r
 Ip6OnFrameSentDpc (\r
-  IN VOID                    *Context\r
+  IN VOID  *Context\r
   )\r
 {\r
-  IP6_LINK_TX_TOKEN         *Token;\r
+  IP6_LINK_TX_TOKEN  *Token;\r
 \r
-  Token = (IP6_LINK_TX_TOKEN *) Context;\r
+  Token = (IP6_LINK_TX_TOKEN *)Context;\r
   NET_CHECK_SIGNATURE (Token, IP6_LINK_TX_SIGNATURE);\r
 \r
   RemoveEntryList (&Token->Link);\r
 \r
   Token->CallBack (\r
-          Token->Packet,\r
-          Token->MnpToken.Status,\r
-          0,\r
-          Token->Context\r
-          );\r
+           Token->Packet,\r
+           Token->MnpToken.Status,\r
+           0,\r
+           Token->Context\r
+           );\r
 \r
   Ip6FreeLinkTxToken (Token);\r
 }\r
@@ -620,8 +612,8 @@ Ip6OnFrameSentDpc (
 VOID\r
 EFIAPI\r
 Ip6OnFrameSent (\r
-  IN EFI_EVENT               Event,\r
-  IN VOID                    *Context\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
   )\r
 {\r
   //\r
@@ -652,20 +644,20 @@ Ip6OnFrameSent (
 **/\r
 EFI_STATUS\r
 Ip6SendFrame (\r
-  IN  IP6_INTERFACE         *Interface,\r
-  IN  IP6_PROTOCOL          *IpInstance      OPTIONAL,\r
-  IN  NET_BUF               *Packet,\r
-  IN  EFI_IPv6_ADDRESS      *NextHop,\r
-  IN  IP6_FRAME_CALLBACK    CallBack,\r
-  IN  VOID                  *Context\r
+  IN  IP6_INTERFACE       *Interface,\r
+  IN  IP6_PROTOCOL        *IpInstance      OPTIONAL,\r
+  IN  NET_BUF             *Packet,\r
+  IN  EFI_IPv6_ADDRESS    *NextHop,\r
+  IN  IP6_FRAME_CALLBACK  CallBack,\r
+  IN  VOID                *Context\r
   )\r
 {\r
-  IP6_SERVICE               *IpSb;\r
-  IP6_LINK_TX_TOKEN         *Token;\r
-  EFI_STATUS                Status;\r
-  IP6_NEIGHBOR_ENTRY        *NeighborCache;\r
-  LIST_ENTRY                *Entry;\r
-  IP6_NEIGHBOR_ENTRY        *ArpQue;\r
+  IP6_SERVICE         *IpSb;\r
+  IP6_LINK_TX_TOKEN   *Token;\r
+  EFI_STATUS          Status;\r
+  IP6_NEIGHBOR_ENTRY  *NeighborCache;\r
+  LIST_ENTRY          *Entry;\r
+  IP6_NEIGHBOR_ENTRY  *ArpQue;\r
 \r
   IpSb = Interface->Service;\r
   NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
@@ -712,21 +704,21 @@ Ip6SendFrame (
   }\r
 \r
   switch (NeighborCache->State) {\r
-  case EfiNeighborStale:\r
-    NeighborCache->State = EfiNeighborDelay;\r
-    NeighborCache->Ticks = (UINT32) IP6_GET_TICKS (IP6_DELAY_FIRST_PROBE_TIME);\r
+    case EfiNeighborStale:\r
+      NeighborCache->State = EfiNeighborDelay;\r
+      NeighborCache->Ticks = (UINT32)IP6_GET_TICKS (IP6_DELAY_FIRST_PROBE_TIME);\r
     //\r
     // Fall through\r
     //\r
-  case EfiNeighborReachable:\r
-  case EfiNeighborDelay:\r
-  case EfiNeighborProbe:\r
-    IP6_COPY_LINK_ADDRESS (&Token->DstMac, &NeighborCache->LinkAddress);\r
-    goto SendNow;\r
-    break;\r
-\r
-  default:\r
-    break;\r
+    case EfiNeighborReachable:\r
+    case EfiNeighborDelay:\r
+    case EfiNeighborProbe:\r
+      IP6_COPY_LINK_ADDRESS (&Token->DstMac, &NeighborCache->LinkAddress);\r
+      goto SendNow;\r
+      break;\r
+\r
+    default:\r
+      break;\r
   }\r
 \r
   //\r
@@ -753,7 +745,7 @@ Ip6SendFrame (
   return EFI_SUCCESS;\r
 \r
 SendNow:\r
- //\r
 //\r
   // Insert the tx token into the SentFrames list before calling Mnp->Transmit.\r
   // Remove it if the returned status is not EFI_SUCCESS.\r
   //\r
@@ -783,13 +775,13 @@ Error:
 VOID\r
 EFIAPI\r
 Ip6TimerTicking (\r
-  IN EFI_EVENT              Event,\r
-  IN VOID                   *Context\r
+  IN EFI_EVENT  Event,\r
+  IN VOID       *Context\r
   )\r
 {\r
-  IP6_SERVICE               *IpSb;\r
+  IP6_SERVICE  *IpSb;\r
 \r
-  IpSb = (IP6_SERVICE *) Context;\r
+  IpSb = (IP6_SERVICE *)Context;\r
   NET_CHECK_SIGNATURE (IpSb, IP6_SERVICE_SIGNATURE);\r
 \r
   Ip6PacketTimerTicking (IpSb);\r