// 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
// 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
//\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
// 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
//\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
//\r
// Copy the data.\r
//\r
- NetCopyMem (\r
+ CopyMem (\r
DstPos,\r
TxData->FragmentTable[Index].FragmentBuffer,\r
TxData->FragmentTable[Index].FragmentLength\r
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
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
//\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
//\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
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
//\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
//\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
//\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
)\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
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
{\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
}\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
//\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
//\r
// Fill the RxData in RxDataWrap,\r
//\r
- CopyMem (&RxDataWrap->RxData, RxData, sizeof (EFI_MANAGED_NETWORK_RECEIVE_DATA));\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
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
//\r
// Wrap the RxData.\r
//\r
- CopyMem (&RxDataWrap, MnpWrapRxData (Instance, &RxData), sizeof (MNP_RXDATA_WRAP));\r
+ RxDataWrap = MnpWrapRxData (Instance, &RxData);\r
if (RxDataWrap == NULL) {\r
continue;\r
}\r
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
\r
DEBUG_CODE (\r
if (Status != EFI_NOT_READY) {\r
- MNP_DEBUG_ERROR (("MnpReceivePacket: Snp->Receive() = %r.\n", Status));\r
+ DEBUG ((EFI_D_ERROR, "MnpReceivePacket: Snp->Receive() = %r.\n", Status));\r
}\r
);\r
\r
//\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
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
//\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
//\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
)\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
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
//\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
// Try to receive packets from Snp.\r
//\r
MnpReceivePacket (MnpServiceData);\r
+\r
+ NetLibDispatchDpc ();\r
}\r