summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/Network/MnpDxe
diff options
context:
space:
mode:
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2007-07-30 02:37:10 +0000
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>2007-07-30 02:37:10 +0000
commit772db4bb33ae66fa20e39f786b5f80d107d450a5 (patch)
tree206a2d4756e0f7e245e08ca75f3ba10df2e1cf7a /MdeModulePkg/Universal/Network/MnpDxe
parenteca7eaf49be5f23e3c79270621df7097ef585349 (diff)
downloadedk2-platforms-772db4bb33ae66fa20e39f786b5f80d107d450a5.tar.xz
Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3492 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Network/MnpDxe')
-rw-r--r--MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c16
-rw-r--r--MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c1
-rw-r--r--MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h1
-rw-r--r--MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c5
4 files changed, 20 insertions, 3 deletions
diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c b/MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c
index 5a648f5ffc..83fc3c6ae4 100644
--- a/MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c
+++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpConfig.c
@@ -139,7 +139,7 @@ MnpAddFreeNbuf (
for (Index = 0; Index < Count; Index++) {
- Nbuf = NetbufAlloc (MnpServiceData->BufferLength);
+ Nbuf = NetbufAlloc (MnpServiceData->BufferLength + MnpServiceData->PaddingSize);
if (Nbuf == NULL) {
MNP_DEBUG_ERROR (("MnpAddFreeNbuf: NetBufAlloc failed.\n"));
@@ -147,6 +147,14 @@ MnpAddFreeNbuf (
break;
}
+ if (MnpServiceData->PaddingSize > 0) {
+ //
+ // Pad padding bytes before the media header
+ //
+ NetbufAllocSpace (Nbuf, MnpServiceData->PaddingSize, NET_BUF_TAIL);
+ NetbufTrim (Nbuf, MnpServiceData->PaddingSize, NET_BUF_HEAD);
+ }
+
NetbufQueAppend (&MnpServiceData->FreeNbufQue, Nbuf);
}
@@ -329,6 +337,12 @@ MnpInitializeServiceData (
MnpServiceData->BufferLength = MnpServiceData->Mtu + SnpMode->MediaHeaderSize + NET_ETHER_FCS_SIZE;
//
+ // Make sure the protocol headers immediately following the media header
+ // 4-byte aligned
+ //
+ MnpServiceData->PaddingSize = (4 - SnpMode->MediaHeaderSize) & 0x3;
+
+ //
// Initialize the FreeNetBufQue and pre-allocate some NET_BUFs.
//
NetbufQueInit (&MnpServiceData->FreeNbufQue);
diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c b/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
index 07be21dced..932b21c5ef 100644
--- a/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
+++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
@@ -521,7 +521,6 @@ MnpServiceBindingDestroyChild (
return Status;
}
-//@MT: EFI_DRIVER_ENTRY_POINT (MnpDriverEntryPoint)
EFI_STATUS
EFIAPI
diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h b/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h
index 48ad0960cd..a387eb05d0 100644
--- a/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h
+++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.h
@@ -82,6 +82,7 @@ typedef struct _MNP_SERVICE_DATA {
// store a packet.
//
UINT32 BufferLength;
+ UINT32 PaddingSize;
NET_BUF *RxNbufCache;
UINT8 *TxBuf;
} MNP_SERVICE_DATA;
diff --git a/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c b/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c
index 91b8d4e0b8..aafc8433a5 100644
--- a/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c
+++ b/MdeModulePkg/Universal/Network/MnpDxe/MnpIo.c
@@ -974,7 +974,10 @@ MnpReceivePacket (
//
// No receiver for this packet.
//
- NetbufAllocSpace (Nbuf, Trimmed, NET_BUF_TAIL);
+ if (Trimmed > 0) {
+ NetbufAllocSpace (Nbuf, Trimmed, NET_BUF_TAIL);
+ }
+
goto EXIT;
}
//