/** @file\r
\r
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\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
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
Module Name:\r
\r
NULL,\r
NULL\r
}, // Entry\r
+ NULL, // RecycledTxBuf\r
+ 0, // RecycledTxBufCount\r
+ 32, // MaxRecycledTxBuf\r
NULL, // GlobalData\r
NULL, // DeviceHandle\r
NULL, // DevicePath\r
OUT VOID **TxBuffer\r
)\r
{\r
+ SNPNT32_INSTANCE_DATA *Instance;\r
+\r
+ Instance = SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS (This);\r
\r
if (TxBuffer != NULL) {\r
- *((UINT8 **) TxBuffer) = (UINT8 *)(UINTN) 1;\r
+ if (Instance->RecycledTxBufCount != 0) {\r
+ Instance->RecycledTxBufCount --;\r
+ *((UINT8 **) TxBuffer) = (UINT8 *) (UINTN)Instance->RecycledTxBuf[Instance->RecycledTxBufCount];\r
+ } else {\r
+ *((UINT8 **) TxBuffer) = NULL;\r
+ }\r
}\r
\r
if (InterruptStatus != NULL) {\r
SNPNT32_INSTANCE_DATA *Instance;\r
SNPNT32_GLOBAL_DATA *GlobalData;\r
INT32 ReturnValue;\r
+ UINT64 *Tmp;\r
\r
Instance = SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS (This);\r
\r
\r
if (ReturnValue < 0) {\r
return EFI_DEVICE_ERROR;\r
+ } else {\r
+ if ((Instance->MaxRecycledTxBuf + SNP_TX_BUFFER_INCREASEMENT) >= SNP_MAX_TX_BUFFER_NUM) {\r
+ return EFI_NOT_READY;\r
+ }\r
+\r
+ if (Instance->RecycledTxBufCount < Instance->MaxRecycledTxBuf) {\r
+ Instance->RecycledTxBuf[Instance->RecycledTxBufCount] = (UINT64) Buffer;\r
+ Instance->RecycledTxBufCount ++;\r
+ } else {\r
+ Tmp = AllocatePool (sizeof (UINT64) * (Instance->MaxRecycledTxBuf + SNP_TX_BUFFER_INCREASEMENT));\r
+ if (Tmp == NULL) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+ CopyMem (Tmp, Instance->RecycledTxBuf, sizeof (UINT64) * Instance->RecycledTxBufCount);\r
+ FreePool (Instance->RecycledTxBuf);\r
+ Instance->RecycledTxBuf = Tmp;\r
+ Instance->MaxRecycledTxBuf += SNP_TX_BUFFER_INCREASEMENT;\r
+ }\r
}\r
\r
return EFI_SUCCESS;\r
//\r
for (Index = 0; Index < InterfaceCount; Index++) {\r
\r
- Instance = AllocatePool (sizeof (SNPNT32_INSTANCE_DATA));\r
+ Instance = AllocateZeroPool (sizeof (SNPNT32_INSTANCE_DATA));\r
\r
if (NULL == Instance) {\r
Status = EFI_OUT_OF_RESOURCES;\r
//\r
CopyMem (Instance, &gSnpNt32InstanceTemplate, sizeof (SNPNT32_INSTANCE_DATA));\r
\r
+ //\r
+ // Allocate the RecycledTxBuf.\r
+ //\r
+ Instance->RecycledTxBuf = AllocatePool (sizeof (UINT64) * Instance->MaxRecycledTxBuf);\r
+ if (Instance->RecycledTxBuf == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
//\r
// Set the interface information.\r
//\r