]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c
Patch to remove STATIC modifier. This is on longer recommended by EFI Framework codin...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / MnpDxe / MnpIo.c
index cde235912f1b34117ba8a7422da25519cc703270..13bf552339a1be9f2828a763bbb5766a522df757 100644 (file)
@@ -20,11 +20,11 @@ Abstract:
 \r
 **/\r
 \r
+#include "MnpImpl.h"\r
 #include <Library/NetLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
-#include "MnpImpl.h"\r
 \r
 \r
 /**\r
@@ -43,7 +43,6 @@ MnpIsValidTxToken (
   )\r
 {\r
   MNP_SERVICE_DATA                  *MnpServiceData;\r
-  EFI_SIMPLE_NETWORK_MODE           *SnpMode;\r
   EFI_MANAGED_NETWORK_TRANSMIT_DATA *TxData;\r
   UINT32                            Index;\r
   UINT32                            TotalLength;\r
@@ -52,7 +51,6 @@ MnpIsValidTxToken (
   MnpServiceData = Instance->MnpServiceData;\r
   NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
 \r
-  SnpMode = MnpServiceData->Snp->Mode;\r
   TxData  = Token->Packet.TxData;\r
 \r
   if ((Token->Event == NULL) || (TxData == NULL) || (TxData->FragmentCount == 0)) {\r
@@ -60,7 +58,7 @@ MnpIsValidTxToken (
     // The token is invalid if the Event is NULL, or the TxData is NULL, or\r
     // the fragment count is zero.\r
     //\r
-    MNP_DEBUG_WARN (("MnpIsValidTxToken: Invalid Token.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpIsValidTxToken: Invalid Token.\n"));\r
     return FALSE;\r
   }\r
 \r
@@ -69,7 +67,7 @@ MnpIsValidTxToken (
     // The token is invalid if the HeaderLength isn't zero while the DestinationAddress\r
     // is NULL (The destination address is already put into the packet).\r
     //\r
-    MNP_DEBUG_WARN (("MnpIsValidTxToken: DestinationAddress isn't NULL, HeaderLength must be 0.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpIsValidTxToken: DestinationAddress isn't NULL, HeaderLength must be 0.\n"));\r
     return FALSE;\r
   }\r
 \r
@@ -81,7 +79,7 @@ MnpIsValidTxToken (
       //\r
       // The token is invalid if any FragmentLength is zero or any FragmentBuffer is NULL.\r
       //\r
-      MNP_DEBUG_WARN (("MnpIsValidTxToken: Invalid FragmentLength or FragmentBuffer.\n"));\r
+      DEBUG ((EFI_D_WARN, "MnpIsValidTxToken: Invalid FragmentLength or FragmentBuffer.\n"));\r
       return FALSE;\r
     }\r
 \r
@@ -100,7 +98,7 @@ MnpIsValidTxToken (
     // The length calculated from the fragment information doesn't equal to the\r
     // sum of the DataLength and the HeaderLength.\r
     //\r
-    MNP_DEBUG_WARN (("MnpIsValidTxData: Invalid Datalength compared with the sum of fragment length.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpIsValidTxData: Invalid Datalength compared with the sum of fragment length.\n"));\r
     return FALSE;\r
   }\r
 \r
@@ -108,7 +106,7 @@ MnpIsValidTxToken (
     //\r
     // The total length is larger than the MTU.\r
     //\r
-    MNP_DEBUG_WARN (("MnpIsValidTxData: TxData->DataLength exceeds Mtu.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpIsValidTxData: TxData->DataLength exceeds Mtu.\n"));\r
     return FALSE;\r
   }\r
 \r
@@ -171,7 +169,7 @@ MnpBuildTxPacket (
       //\r
       // Copy the data.\r
       //\r
-      NetCopyMem (\r
+      CopyMem (\r
         DstPos,\r
         TxData->FragmentTable[Index].FragmentBuffer,\r
         TxData->FragmentTable[Index].FragmentLength\r
@@ -262,7 +260,7 @@ MnpSyncSendPacket (
       //\r
       // Get the recycled transmit buffer status.\r
       //\r
-      Snp->GetStatus (Snp, NULL, &TxBuf);\r
+      Snp->GetStatus (Snp, NULL, (VOID **) &TxBuf);\r
 \r
       if (!EFI_ERROR (gBS->CheckEvent (MnpServiceData->TxTimeoutEvent))) {\r
 \r
@@ -296,6 +294,11 @@ SIGNAL_TOKEN:
   Token->Status = Status;\r
   gBS->SignalEvent (Token->Event);\r
 \r
+  //\r
+  // Dispatch the DPC queued by the NotifyFunction of Token->Event.\r
+  //\r
+  NetLibDispatchDpc ();\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -326,7 +329,7 @@ MnpInstanceDeliverPacket (
   MnpServiceData = Instance->MnpServiceData;\r
   NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
 \r
-  if (NetMapIsEmpty (&Instance->RxTokenMap) || NetListIsEmpty (&Instance->RcvdPacketQueue)) {\r
+  if (NetMapIsEmpty (&Instance->RxTokenMap) || IsListEmpty (&Instance->RcvdPacketQueue)) {\r
     //\r
     // No pending received data or no available receive token, return.\r
     //\r
@@ -343,7 +346,7 @@ MnpInstanceDeliverPacket (
     //\r
     DupNbuf = MnpAllocNbuf (MnpServiceData);\r
     if (DupNbuf == NULL) {\r
-      MNP_DEBUG_WARN (("MnpDeliverPacket: Failed to allocate a free Nbuf.\n"));\r
+      DEBUG ((EFI_D_WARN, "MnpDeliverPacket: Failed to allocate a free Nbuf.\n"));\r
 \r
       return EFI_OUT_OF_RESOURCES;\r
     }\r
@@ -376,7 +379,7 @@ MnpInstanceDeliverPacket (
   //\r
   // Insert this RxDataWrap into the delivered queue.\r
   //\r
-  NetListInsertTail (&Instance->RxDeliveredPacketQueue, &RxDataWrap->WrapEntry);\r
+  InsertTailList (&Instance->RxDeliveredPacketQueue, &RxDataWrap->WrapEntry);\r
 \r
   //\r
   // Get the receive token from the RxTokenMap.\r
@@ -402,13 +405,12 @@ MnpInstanceDeliverPacket (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 MnpDeliverPacket (\r
   IN MNP_SERVICE_DATA  *MnpServiceData\r
   )\r
 {\r
-  NET_LIST_ENTRY    *Entry;\r
+  LIST_ENTRY        *Entry;\r
   MNP_INSTANCE_DATA *Instance;\r
 \r
   NET_CHECK_SIGNATURE (MnpServiceData, MNP_SERVICE_DATA_SIGNATURE);\r
@@ -469,9 +471,9 @@ MnpRecycleRxData (
   //\r
   // Remove this Wrap entry from the list.\r
   //\r
-  NetListRemoveEntry (&RxDataWrap->WrapEntry);\r
+  RemoveEntryList (&RxDataWrap->WrapEntry);\r
 \r
-  NetFreePool (RxDataWrap);\r
+  gBS->FreePool (RxDataWrap);\r
 }\r
 \r
 \r
@@ -485,7 +487,6 @@ MnpRecycleRxData (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 MnpQueueRcvdPacket (\r
   IN MNP_INSTANCE_DATA  *Instance,\r
@@ -502,7 +503,7 @@ MnpQueueRcvdPacket (
   //\r
   if (Instance->RcvdPacketQueueSize == MNP_MAX_RCVD_PACKET_QUE_SIZE) {\r
 \r
-    MNP_DEBUG_WARN (("MnpQueueRcvdPacket: Drop one packet bcz queue size limit reached.\n"));\r
+    DEBUG ((EFI_D_WARN, "MnpQueueRcvdPacket: Drop one packet bcz queue size limit reached.\n"));\r
 \r
     //\r
     // Get the oldest packet.\r
@@ -528,7 +529,7 @@ MnpQueueRcvdPacket (
   //\r
   // Insert this Wrap into the instance queue.\r
   //\r
-  NetListInsertTail (&Instance->RcvdPacketQueue, &RxDataWrap->WrapEntry);\r
+  InsertTailList (&Instance->RcvdPacketQueue, &RxDataWrap->WrapEntry);\r
   Instance->RcvdPacketQueueSize++;\r
 }\r
 \r
@@ -547,7 +548,6 @@ MnpQueueRcvdPacket (
   @return The received packet matches the instance's receive filters or not.\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 MnpMatchPacket (\r
   IN MNP_INSTANCE_DATA                 *Instance,\r
@@ -557,19 +557,13 @@ MnpMatchPacket (
   )\r
 {\r
   EFI_MANAGED_NETWORK_CONFIG_DATA *ConfigData;\r
-  NET_LIST_ENTRY                  *Entry;\r
+  LIST_ENTRY                      *Entry;\r
   MNP_GROUP_CONTROL_BLOCK         *GroupCtrlBlk;\r
 \r
   NET_CHECK_SIGNATURE (Instance, MNP_INSTANCE_DATA_SIGNATURE);\r
 \r
   ConfigData = &Instance->ConfigData;\r
 \r
-  if (ConfigData->EnablePromiscuousReceive) {\r
-    //\r
-    // Always match if this instance is configured to be promiscuous.\r
-    //\r
-    return TRUE;\r
-  }\r
   //\r
   // Check the protocol type.\r
   //\r
@@ -577,6 +571,13 @@ MnpMatchPacket (
     return FALSE;\r
   }\r
 \r
+  if (ConfigData->EnablePromiscuousReceive) {\r
+    //\r
+    // Always match if this instance is configured to be promiscuous.\r
+    //\r
+    return TRUE;\r
+  }\r
+\r
   //\r
   // The protocol type is matched, check receive filter, include unicast and broadcast.\r
   //\r
@@ -628,7 +629,6 @@ MnpMatchPacket (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 MnpAnalysePacket (\r
   IN  MNP_SERVICE_DATA                  *MnpServiceData,\r
@@ -640,7 +640,7 @@ MnpAnalysePacket (
 {\r
   EFI_SIMPLE_NETWORK_MODE *SnpMode;\r
   UINT8                   *BufPtr;\r
-  NET_LIST_ENTRY          *Entry;\r
+  LIST_ENTRY              *Entry;\r
 \r
   SnpMode = MnpServiceData->Snp->Mode;\r
 \r
@@ -703,7 +703,7 @@ MnpAnalysePacket (
     }\r
   }\r
 \r
-  NetZeroMem (&RxData->Timestamp, sizeof (EFI_TIME));\r
+  ZeroMem (&RxData->Timestamp, sizeof (EFI_TIME));\r
 \r
   //\r
   // Fill the common parts of RxData.\r
@@ -725,7 +725,6 @@ MnpAnalysePacket (
   @return Pointer to a MNP_RXDATA_WRAP which wraps the RxData.\r
 \r
 **/\r
-STATIC\r
 MNP_RXDATA_WRAP *\r
 MnpWrapRxData (\r
   IN MNP_INSTANCE_DATA                 *Instance,\r
@@ -738,9 +737,9 @@ MnpWrapRxData (
   //\r
   // Allocate memory.\r
   //\r
-  RxDataWrap = NetAllocatePool (sizeof (MNP_RXDATA_WRAP));\r
+  RxDataWrap = AllocatePool (sizeof (MNP_RXDATA_WRAP));\r
   if (RxDataWrap == NULL) {\r
-    MNP_DEBUG_ERROR (("MnpDispatchPacket: Failed to allocate a MNP_RXDATA_WRAP.\n"));\r
+    DEBUG ((EFI_D_ERROR, "MnpDispatchPacket: Failed to allocate a MNP_RXDATA_WRAP.\n"));\r
     return NULL;\r
   }\r
 \r
@@ -749,22 +748,22 @@ MnpWrapRxData (
   //\r
   // Fill the RxData in RxDataWrap,\r
   //\r
-  RxDataWrap->RxData = *RxData;\r
+  CopyMem (&RxDataWrap->RxData, RxData, sizeof (RxDataWrap->RxData));\r
 \r
   //\r
   // Create the recycle event.\r
   //\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_SIGNAL,\r
-                  NET_TPL_RECYCLE,\r
+                  TPL_NOTIFY,\r
                   MnpRecycleRxData,\r
                   RxDataWrap,\r
                   &RxDataWrap->RxData.RecycleEvent\r
                   );\r
   if (EFI_ERROR (Status)) {\r
 \r
-    MNP_DEBUG_ERROR (("MnpDispatchPacket: gBS->CreateEvent failed, %r.\n", Status));\r
-    NetFreePool (RxDataWrap);\r
+    DEBUG ((EFI_D_ERROR, "MnpDispatchPacket: gBS->CreateEvent failed, %r.\n", Status));\r
+    gBS->FreePool (RxDataWrap);\r
     return NULL;\r
   }\r
 \r
@@ -783,20 +782,21 @@ MnpWrapRxData (
   @return None.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 MnpEnqueuePacket (\r
   IN MNP_SERVICE_DATA   *MnpServiceData,\r
   IN NET_BUF            *Nbuf\r
   )\r
 {\r
-  NET_LIST_ENTRY                    *Entry;\r
+  LIST_ENTRY                        *Entry;\r
   MNP_INSTANCE_DATA                 *Instance;\r
   EFI_MANAGED_NETWORK_RECEIVE_DATA  RxData;\r
   UINT8                             PktAttr;\r
   MNP_GROUP_ADDRESS                 *GroupAddress;\r
   MNP_RXDATA_WRAP                   *RxDataWrap;\r
 \r
+\r
+  GroupAddress = NULL;\r
   //\r
   // First, analyse the packet header.\r
   //\r
@@ -883,7 +883,7 @@ MnpReceivePacket (
     return EFI_NOT_STARTED;\r
   }\r
 \r
-  if (NetListIsEmpty (&MnpServiceData->ChildrenList)) {\r
+  if (IsListEmpty (&MnpServiceData->ChildrenList)) {\r
     //\r
     // There is no child, no need to receive packets.\r
     //\r
@@ -923,8 +923,8 @@ MnpReceivePacket (
 \r
     DEBUG_CODE (\r
       if (Status != EFI_NOT_READY) {\r
-      MNP_DEBUG_ERROR (("MnpReceivePacket: Snp->Receive() = %r.\n", Status));\r
-    }\r
+        DEBUG ((EFI_D_WARN, "MnpReceivePacket: Snp->Receive() = %r.\n", Status));\r
+      }\r
     );\r
 \r
     return Status;\r
@@ -935,8 +935,9 @@ MnpReceivePacket (
   //\r
   if ((HeaderSize != Snp->Mode->MediaHeaderSize) || (BufLen < HeaderSize)) {\r
 \r
-    MNP_DEBUG_WARN (\r
-      ("MnpReceivePacket: Size error, HL:TL = %d:%d.\n",\r
+    DEBUG (\r
+      (EFI_D_WARN,\r
+      "MnpReceivePacket: Size error, HL:TL = %d:%d.\n",\r
       HeaderSize,\r
       BufLen)\r
       );\r
@@ -967,7 +968,7 @@ MnpReceivePacket (
     Nbuf                        = MnpAllocNbuf (MnpServiceData);\r
     MnpServiceData->RxNbufCache = Nbuf;\r
     if (Nbuf == NULL) {\r
-      MNP_DEBUG_ERROR (("MnpReceivePacket: Alloc packet for receiving cache failed.\n"));\r
+      DEBUG ((EFI_D_ERROR, "MnpReceivePacket: Alloc packet for receiving cache failed.\n"));\r
       return EFI_DEVICE_ERROR;\r
     }\r
 \r
@@ -976,7 +977,10 @@ MnpReceivePacket (
     //\r
     // No receiver for this packet.\r
     //\r
-    NetbufAllocSpace (Nbuf, Trimmed, NET_BUF_TAIL);\r
+    if (Trimmed > 0) {\r
+      NetbufAllocSpace (Nbuf, Trimmed, NET_BUF_TAIL);\r
+    }\r
+\r
     goto EXIT;\r
   }\r
   //\r
@@ -984,6 +988,11 @@ MnpReceivePacket (
   //\r
   MnpDeliverPacket (MnpServiceData);\r
 \r
+  //\r
+  // Dispatch the DPC queued by the NotifyFunction of rx token's events.\r
+  //\r
+  NetLibDispatchDpc ();\r
+\r
 EXIT:\r
 \r
   ASSERT (Nbuf->TotalSize == MnpServiceData->BufferLength);\r
@@ -1010,9 +1019,9 @@ MnpCheckPacketTimeout (
   )\r
 {\r
   MNP_SERVICE_DATA  *MnpServiceData;\r
-  NET_LIST_ENTRY    *Entry;\r
-  NET_LIST_ENTRY    *RxEntry;\r
-  NET_LIST_ENTRY    *NextEntry;\r
+  LIST_ENTRY        *Entry;\r
+  LIST_ENTRY        *RxEntry;\r
+  LIST_ENTRY        *NextEntry;\r
   MNP_INSTANCE_DATA *Instance;\r
   MNP_RXDATA_WRAP   *RxDataWrap;\r
   EFI_TPL           OldTpl;\r
@@ -1033,7 +1042,7 @@ MnpCheckPacketTimeout (
       continue;\r
     }\r
 \r
-    OldTpl = NET_RAISE_TPL (NET_TPL_RECYCLE);\r
+    OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
 \r
     NET_LIST_FOR_EACH_SAFE (RxEntry, NextEntry, &Instance->RcvdPacketQueue) {\r
 \r
@@ -1046,13 +1055,13 @@ MnpCheckPacketTimeout (
         //\r
         // Drop the timeout packet.\r
         //\r
-        MNP_DEBUG_WARN (("MnpCheckPacketTimeout: Received packet timeout.\n"));\r
+        DEBUG ((EFI_D_WARN, "MnpCheckPacketTimeout: Received packet timeout.\n"));\r
         MnpRecycleRxData (NULL, RxDataWrap);\r
         Instance->RcvdPacketQueueSize--;\r
       }\r
     }\r
 \r
-    NET_RESTORE_TPL (OldTpl);\r
+    gBS->RestoreTPL (OldTpl);\r
   }\r
 }\r
 \r
@@ -1084,4 +1093,6 @@ MnpSystemPoll (
   // Try to receive packets from Snp.\r
   //\r
   MnpReceivePacket (MnpServiceData);\r
+\r
+  NetLibDispatchDpc ();\r
 }\r