NetworkPkg: Apply uncrustify changes

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737

Apply uncrustify changes to .c/.h files in the NetworkPkg package

Cc: Andrew Fish <afish@apple.com>
Cc: Leif Lindholm <leif@nuviainc.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com>
This commit is contained in:
Michael Kubacki
2021-12-05 14:54:07 -08:00
committed by mergify[bot]
parent 2f88bd3a12
commit d1050b9dff
294 changed files with 29888 additions and 30440 deletions

View File

@@ -28,13 +28,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
VOID
EFIAPI
SnpUndi32CallbackBlock (
IN UINT64 UniqueId,
IN UINT32 Enable
IN UINT64 UniqueId,
IN UINT32 Enable
)
{
SNP_DRIVER *Snp;
Snp = (SNP_DRIVER *) (UINTN) UniqueId;
Snp = (SNP_DRIVER *)(UINTN)UniqueId;
//
// tcpip was calling snp at tpl_notify and when we acquire a lock that was
// created at a lower level (TPL_CALLBACK) it gives an assert!
@@ -60,12 +60,12 @@ SnpUndi32CallbackBlock (
VOID
EFIAPI
SnpUndi32CallbackDelay (
IN UINT64 UniqueId,
IN UINT64 MicroSeconds
IN UINT64 UniqueId,
IN UINT64 MicroSeconds
)
{
if (MicroSeconds != 0) {
gBS->Stall ((UINTN) MicroSeconds);
gBS->Stall ((UINTN)MicroSeconds);
}
}
@@ -87,92 +87,96 @@ SnpUndi32CallbackDelay (
VOID
EFIAPI
SnpUndi32CallbackMemio (
IN UINT64 UniqueId,
IN UINT8 ReadOrWrite,
IN UINT8 NumBytes,
IN UINT64 MemOrPortAddr,
IN OUT UINT64 BufferPtr
IN UINT64 UniqueId,
IN UINT8 ReadOrWrite,
IN UINT8 NumBytes,
IN UINT64 MemOrPortAddr,
IN OUT UINT64 BufferPtr
)
{
SNP_DRIVER *Snp;
EFI_PCI_IO_PROTOCOL_WIDTH Width;
SNP_DRIVER *Snp;
EFI_PCI_IO_PROTOCOL_WIDTH Width;
Snp = (SNP_DRIVER *) (UINTN) UniqueId;
Snp = (SNP_DRIVER *)(UINTN)UniqueId;
Width = (EFI_PCI_IO_PROTOCOL_WIDTH) 0;
Width = (EFI_PCI_IO_PROTOCOL_WIDTH)0;
switch (NumBytes) {
case 2:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH) 1;
break;
case 2:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH)1;
break;
case 4:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH) 2;
break;
case 4:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH)2;
break;
case 8:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH) 3;
break;
case 8:
Width = (EFI_PCI_IO_PROTOCOL_WIDTH)3;
break;
}
switch (ReadOrWrite) {
case PXE_IO_READ:
ASSERT (Snp->IoBarIndex < PCI_MAX_BAR);
if (Snp->IoBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Io.Read (
Snp->PciIo,
Width,
Snp->IoBarIndex, // BAR 1 (for 32bit regs), IO base address
MemOrPortAddr,
1, // count
(VOID *) (UINTN) BufferPtr
);
}
break;
case PXE_IO_READ:
ASSERT (Snp->IoBarIndex < PCI_MAX_BAR);
if (Snp->IoBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Io.Read (
Snp->PciIo,
Width,
Snp->IoBarIndex, // BAR 1 (for 32bit regs), IO base address
MemOrPortAddr,
1, // count
(VOID *)(UINTN)BufferPtr
);
}
case PXE_IO_WRITE:
ASSERT (Snp->IoBarIndex < PCI_MAX_BAR);
if (Snp->IoBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Io.Write (
Snp->PciIo,
Width,
Snp->IoBarIndex, // BAR 1 (for 32bit regs), IO base address
MemOrPortAddr,
1, // count
(VOID *) (UINTN) BufferPtr
);
}
break;
break;
case PXE_MEM_READ:
ASSERT (Snp->MemoryBarIndex < PCI_MAX_BAR);
if (Snp->MemoryBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Mem.Read (
Snp->PciIo,
Width,
Snp->MemoryBarIndex, // BAR 0, Memory base address
MemOrPortAddr,
1, // count
(VOID *) (UINTN) BufferPtr
);
}
break;
case PXE_IO_WRITE:
ASSERT (Snp->IoBarIndex < PCI_MAX_BAR);
if (Snp->IoBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Io.Write (
Snp->PciIo,
Width,
Snp->IoBarIndex, // BAR 1 (for 32bit regs), IO base address
MemOrPortAddr,
1, // count
(VOID *)(UINTN)BufferPtr
);
}
case PXE_MEM_WRITE:
ASSERT (Snp->MemoryBarIndex < PCI_MAX_BAR);
if (Snp->MemoryBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Mem.Write (
Snp->PciIo,
Width,
Snp->MemoryBarIndex, // BAR 0, Memory base address
MemOrPortAddr,
1, // count
(VOID *) (UINTN) BufferPtr
);
}
break;
break;
case PXE_MEM_READ:
ASSERT (Snp->MemoryBarIndex < PCI_MAX_BAR);
if (Snp->MemoryBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Mem.Read (
Snp->PciIo,
Width,
Snp->MemoryBarIndex, // BAR 0, Memory base address
MemOrPortAddr,
1, // count
(VOID *)(UINTN)BufferPtr
);
}
break;
case PXE_MEM_WRITE:
ASSERT (Snp->MemoryBarIndex < PCI_MAX_BAR);
if (Snp->MemoryBarIndex < PCI_MAX_BAR) {
Snp->PciIo->Mem.Write (
Snp->PciIo,
Width,
Snp->MemoryBarIndex, // BAR 0, Memory base address
MemOrPortAddr,
1, // count
(VOID *)(UINTN)BufferPtr
);
}
break;
}
return ;
return;
}
/**
@@ -193,49 +197,50 @@ SnpUndi32CallbackMemio (
VOID
EFIAPI
SnpUndi32CallbackMap (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN OUT UINT64 DeviceAddrPtr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN OUT UINT64 DeviceAddrPtr
)
{
EFI_PHYSICAL_ADDRESS *DevAddrPtr;
EFI_PCI_IO_PROTOCOL_OPERATION DirectionFlag;
UINTN BuffSize;
SNP_DRIVER *Snp;
UINTN Index;
EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS *DevAddrPtr;
EFI_PCI_IO_PROTOCOL_OPERATION DirectionFlag;
UINTN BuffSize;
SNP_DRIVER *Snp;
UINTN Index;
EFI_STATUS Status;
BuffSize = (UINTN) NumBytes;
Snp = (SNP_DRIVER *) (UINTN) UniqueId;
DevAddrPtr = (EFI_PHYSICAL_ADDRESS *) (UINTN) DeviceAddrPtr;
BuffSize = (UINTN)NumBytes;
Snp = (SNP_DRIVER *)(UINTN)UniqueId;
DevAddrPtr = (EFI_PHYSICAL_ADDRESS *)(UINTN)DeviceAddrPtr;
if (CpuAddr == 0) {
*DevAddrPtr = 0;
return ;
return;
}
switch (Direction) {
case TO_AND_FROM_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterCommonBuffer;
break;
case TO_AND_FROM_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterCommonBuffer;
break;
case FROM_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterWrite;
break;
case FROM_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterWrite;
break;
case TO_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterRead;
break;
case TO_DEVICE:
DirectionFlag = EfiPciIoOperationBusMasterRead;
break;
default:
*DevAddrPtr = 0;
//
// any non zero indicates error!
//
return ;
default:
*DevAddrPtr = 0;
//
// any non zero indicates error!
//
return;
}
//
// find an unused map_list entry
//
@@ -248,15 +253,15 @@ SnpUndi32CallbackMap (
if (Index >= MAX_MAP_LENGTH) {
DEBUG ((DEBUG_INFO, "SNP maplist is FULL\n"));
*DevAddrPtr = 0;
return ;
return;
}
Snp->MapList[Index].VirtualAddress = (EFI_PHYSICAL_ADDRESS) CpuAddr;
Snp->MapList[Index].VirtualAddress = (EFI_PHYSICAL_ADDRESS)CpuAddr;
Status = Snp->PciIo->Map (
Snp->PciIo,
DirectionFlag,
(VOID *) (UINTN) CpuAddr,
(VOID *)(UINTN)CpuAddr,
&BuffSize,
DevAddrPtr,
&(Snp->MapList[Index].MapCookie)
@@ -266,7 +271,7 @@ SnpUndi32CallbackMap (
Snp->MapList[Index].VirtualAddress = 0;
}
return ;
return;
}
/**
@@ -287,17 +292,17 @@ SnpUndi32CallbackMap (
VOID
EFIAPI
SnpUndi32CallbackUnmap (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
)
{
SNP_DRIVER *Snp;
UINT16 Index;
Snp = (SNP_DRIVER *) (UINTN) UniqueId;
Snp = (SNP_DRIVER *)(UINTN)UniqueId;
for (Index = 0; Index < MAX_MAP_LENGTH; Index++) {
if (Snp->MapList[Index].VirtualAddress == CpuAddr) {
@@ -307,13 +312,13 @@ SnpUndi32CallbackUnmap (
if (Index >= MAX_MAP_LENGTH) {
DEBUG ((DEBUG_ERROR, "SNP could not find a mapping, failed to unmap.\n"));
return ;
return;
}
Snp->PciIo->Unmap (Snp->PciIo, Snp->MapList[Index].MapCookie);
Snp->MapList[Index].VirtualAddress = 0;
Snp->MapList[Index].MapCookie = NULL;
return ;
return;
}
/**
@@ -341,27 +346,26 @@ SnpUndi32CallbackUnmap (
VOID
EFIAPI
SnpUndi32CallbackSync (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
)
{
if ((CpuAddr == 0) || (DeviceAddr == 0) || (NumBytes == 0)) {
return ;
return;
}
switch (Direction) {
case FROM_DEVICE:
CopyMem ((UINT8 *) (UINTN) CpuAddr, (UINT8 *) (UINTN) DeviceAddr, NumBytes);
break;
case FROM_DEVICE:
CopyMem ((UINT8 *)(UINTN)CpuAddr, (UINT8 *)(UINTN)DeviceAddr, NumBytes);
break;
case TO_DEVICE:
CopyMem ((UINT8 *) (UINTN) DeviceAddr, (UINT8 *) (UINTN) CpuAddr, NumBytes);
break;
case TO_DEVICE:
CopyMem ((UINT8 *)(UINTN)DeviceAddr, (UINT8 *)(UINTN)CpuAddr, NumBytes);
break;
}
return ;
return;
}

View File

@@ -6,12 +6,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Snp.h"
//
// EFI Component Name Functions
//
/**
Retrieves a Unicode string that is the user readable name of the driver.
@@ -59,7 +59,6 @@ SimpleNetworkComponentNameGetDriverName (
OUT CHAR16 **DriverName
);
/**
Retrieves a Unicode string that is the user readable name of the controller
that is being managed by a driver.
@@ -131,14 +130,13 @@ SimpleNetworkComponentNameGetDriverName (
EFI_STATUS
EFIAPI
SimpleNetworkComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
//
// EFI Component Name Protocol
//
@@ -151,14 +149,13 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkCompone
//
// EFI Component Name 2 Protocol
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) SimpleNetworkComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) SimpleNetworkComponentNameGetControllerName,
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2 = {
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME)SimpleNetworkComponentNameGetDriverName,
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)SimpleNetworkComponentNameGetControllerName,
"en"
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable[] = {
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameTable[] = {
{
"eng;en",
L"Simple Network Protocol Driver"
@@ -169,7 +166,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mSimpleNetworkDriverNameT
}
};
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE *gSimpleNetworkControllerNameTable = NULL;
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE *gSimpleNetworkControllerNameTable = NULL;
/**
Retrieves a Unicode string that is the user readable name of the driver.
@@ -239,19 +236,19 @@ SimpleNetworkComponentNameGetDriverName (
**/
EFI_STATUS
UpdateName (
IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp
IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp
)
{
EFI_STATUS Status;
CHAR16 HandleName[80];
UINTN OffSet;
UINTN Index;
EFI_STATUS Status;
CHAR16 HandleName[80];
UINTN OffSet;
UINTN Index;
if (Snp == NULL) {
return EFI_INVALID_PARAMETER;
}
OffSet = 0;
OffSet = 0;
OffSet += UnicodeSPrint (
HandleName,
sizeof (HandleName),
@@ -265,6 +262,7 @@ UpdateName (
Snp->Mode->CurrentAddress.Addr[Index]
);
}
ASSERT (OffSet > 0);
//
// Remove the last '-'
@@ -372,15 +370,15 @@ UpdateName (
EFI_STATUS
EFIAPI
SimpleNetworkComponentNameGetControllerName (
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
)
{
EFI_STATUS Status;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
EFI_STATUS Status;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
if (ChildHandle != NULL) {
return EFI_UNSUPPORTED;
@@ -412,6 +410,7 @@ SimpleNetworkComponentNameGetControllerName (
if (EFI_ERROR (Status)) {
return Status;
}
//
// Update the component name for this child handle.
//

View File

@@ -28,21 +28,21 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeGetStatus (
IN SNP_DRIVER *Snp,
OUT UINT32 *InterruptStatusPtr,
IN BOOLEAN GetTransmittedBuf
IN SNP_DRIVER *Snp,
OUT UINT32 *InterruptStatusPtr,
IN BOOLEAN GetTransmittedBuf
)
{
PXE_DB_GET_STATUS *Db;
UINT16 InterruptFlags;
UINT32 Index;
UINT64 *Tmp;
PXE_DB_GET_STATUS *Db;
UINT16 InterruptFlags;
UINT32 Index;
UINT64 *Tmp;
Tmp = NULL;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_GET_STATUS;
Tmp = NULL;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_GET_STATUS;
Snp->Cdb.OpFlags = 0;
Snp->Cdb.OpFlags = 0;
if (GetTransmittedBuf) {
Snp->Cdb.OpFlags |= PXE_OPFLAGS_GET_TRANSMITTED_BUFFERS;
@@ -57,39 +57,40 @@ PxeGetStatus (
Snp->Cdb.OpFlags |= PXE_OPFLAGS_GET_MEDIA_STATUS;
}
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_GET_STATUS);
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_GET_STATUS);
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nSnp->undi.get_status() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
DEBUG (
(DEBUG_NET,
"\nSnp->undi.get_status() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nSnp->undi.get_status() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
}
//
// report the values back..
//
if (InterruptStatusPtr != NULL) {
InterruptFlags = (UINT16) (Snp->Cdb.StatFlags & PXE_STATFLAGS_GET_STATUS_INTERRUPT_MASK);
InterruptFlags = (UINT16)(Snp->Cdb.StatFlags & PXE_STATFLAGS_GET_STATUS_INTERRUPT_MASK);
*InterruptStatusPtr = 0;
@@ -108,7 +109,6 @@ PxeGetStatus (
if ((InterruptFlags & PXE_STATFLAGS_GET_STATUS_SOFTWARE) == PXE_STATFLAGS_GET_STATUS_SOFTWARE) {
*InterruptStatusPtr |= EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT;
}
}
if (GetTransmittedBuf) {
@@ -125,15 +125,18 @@ PxeGetStatus (
if ((Snp->MaxRecycledTxBuf + SNP_TX_BUFFER_INCREASEMENT) >= SNP_MAX_TX_BUFFER_NUM) {
return EFI_DEVICE_ERROR;
}
Tmp = AllocatePool (sizeof (UINT64) * (Snp->MaxRecycledTxBuf + SNP_TX_BUFFER_INCREASEMENT));
if (Tmp == NULL) {
return EFI_DEVICE_ERROR;
}
CopyMem (Tmp, Snp->RecycledTxBuf, sizeof (UINT64) * Snp->RecycledTxBufCount);
FreePool (Snp->RecycledTxBuf);
Snp->RecycledTxBuf = Tmp;
Snp->RecycledTxBuf = Tmp;
Snp->MaxRecycledTxBuf += SNP_TX_BUFFER_INCREASEMENT;
}
Snp->RecycledTxBuf[Snp->RecycledTxBufCount] = Db->TxBuffer[Index];
Snp->RecycledTxBufCount++;
}
@@ -147,7 +150,7 @@ PxeGetStatus (
//
if (Snp->MediaStatusSupported) {
Snp->Snp.Mode->MediaPresent =
(BOOLEAN) (((Snp->Cdb.StatFlags & PXE_STATFLAGS_GET_STATUS_NO_MEDIA) != 0) ? FALSE : TRUE);
(BOOLEAN)(((Snp->Cdb.StatFlags & PXE_STATFLAGS_GET_STATUS_NO_MEDIA) != 0) ? FALSE : TRUE);
}
return EFI_SUCCESS;
@@ -194,9 +197,9 @@ PxeGetStatus (
EFI_STATUS
EFIAPI
SnpUndi32GetStatus (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
)
{
SNP_DRIVER *Snp;
@@ -207,7 +210,7 @@ SnpUndi32GetStatus (
return EFI_INVALID_PARAMETER;
}
if (InterruptStatus == NULL && TxBuf == NULL) {
if ((InterruptStatus == NULL) && (TxBuf == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -220,19 +223,19 @@ SnpUndi32GetStatus (
}
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
if (Snp->RecycledTxBufCount == 0 && TxBuf != NULL) {
if ((Snp->RecycledTxBufCount == 0) && (TxBuf != NULL)) {
Status = PxeGetStatus (Snp, InterruptStatus, TRUE);
} else {
Status = PxeGetStatus (Snp, InterruptStatus, FALSE);
@@ -246,7 +249,7 @@ SnpUndi32GetStatus (
*TxBuf = NULL;
} else {
Snp->RecycledTxBufCount--;
*TxBuf = (VOID *) (UINTN) Snp->RecycledTxBuf[Snp->RecycledTxBufCount];
*TxBuf = (VOID *)(UINTN)Snp->RecycledTxBuf[Snp->RecycledTxBufCount];
}
}

View File

@@ -6,7 +6,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Snp.h"
/**
@@ -23,8 +22,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeInit (
SNP_DRIVER *Snp,
UINT16 CableDetectFlag
SNP_DRIVER *Snp,
UINT16 CableDetectFlag
)
{
PXE_CPB_INITIALIZE *Cpb;
@@ -47,9 +46,9 @@ PxeInit (
if (Status != EFI_SUCCESS) {
DEBUG (
(DEBUG_ERROR,
"\nSnp->PxeInit() AllocateBuffer %xh (%r)\n",
Status,
Status)
"\nSnp->PxeInit() AllocateBuffer %xh (%r)\n",
Status,
Status)
);
return Status;
@@ -60,40 +59,40 @@ PxeInit (
Snp->TxRxBuffer = Addr;
}
Cpb->MemoryAddr = (UINT64)(UINTN) Snp->TxRxBuffer;
Cpb->MemoryAddr = (UINT64)(UINTN)Snp->TxRxBuffer;
Cpb->MemoryLength = Snp->TxRxBufferSize;
//
// let UNDI decide/detect these values
//
Cpb->LinkSpeed = 0;
Cpb->TxBufCnt = 0;
Cpb->TxBufSize = 0;
Cpb->RxBufCnt = 0;
Cpb->RxBufSize = 0;
Cpb->LinkSpeed = 0;
Cpb->TxBufCnt = 0;
Cpb->TxBufSize = 0;
Cpb->RxBufCnt = 0;
Cpb->RxBufSize = 0;
Cpb->DuplexMode = PXE_DUPLEX_DEFAULT;
Cpb->DuplexMode = PXE_DUPLEX_DEFAULT;
Cpb->LoopBackMode = LOOPBACK_NORMAL;
Cpb->LoopBackMode = LOOPBACK_NORMAL;
Snp->Cdb.OpCode = PXE_OPCODE_INITIALIZE;
Snp->Cdb.OpFlags = CableDetectFlag;
Snp->Cdb.OpCode = PXE_OPCODE_INITIALIZE;
Snp->Cdb.OpFlags = CableDetectFlag;
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_INITIALIZE);
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_INITIALIZE);
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_INITIALIZE);
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_INITIALIZE);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Snp->Cpb;
Snp->Cdb.DBaddr = (UINT64)(UINTN) Snp->Db;
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Snp->Cpb;
Snp->Cdb.DBaddr = (UINT64)(UINTN)Snp->Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
DEBUG ((DEBUG_NET, "\nSnp->undi.initialize() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
//
// There are two fields need to be checked here:
@@ -103,47 +102,47 @@ PxeInit (
// the CDB.StatCode field contains the result of the command execution.
//
if ((((Snp->Cdb.StatFlags) & PXE_STATFLAGS_STATUS_MASK) == PXE_STATFLAGS_COMMAND_COMPLETE) &&
(Snp->Cdb.StatCode == PXE_STATCODE_SUCCESS)) {
(Snp->Cdb.StatCode == PXE_STATCODE_SUCCESS))
{
//
// If cable detect feature is enabled in CDB.OpFlags, check the CDB.StatFlags to see if there is an
// active connection to this network device. If the no media StatFlag is set, the UNDI and network
// device are still initialized.
//
if (CableDetectFlag == PXE_OPFLAGS_INITIALIZE_DETECT_CABLE) {
if(((Snp->Cdb.StatFlags) & PXE_STATFLAGS_INITIALIZED_NO_MEDIA) != PXE_STATFLAGS_INITIALIZED_NO_MEDIA) {
if (((Snp->Cdb.StatFlags) & PXE_STATFLAGS_INITIALIZED_NO_MEDIA) != PXE_STATFLAGS_INITIALIZED_NO_MEDIA) {
Snp->Mode.MediaPresent = TRUE;
} else {
Snp->Mode.MediaPresent = FALSE;
}
}
Snp->Mode.State = EfiSimpleNetworkInitialized;
Status = EFI_SUCCESS;
Snp->Mode.State = EfiSimpleNetworkInitialized;
Status = EFI_SUCCESS;
} else {
DEBUG (
(DEBUG_WARN,
"\nSnp->undi.initialize() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nSnp->undi.initialize() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
if (Snp->TxRxBuffer != NULL) {
Snp->PciIo->FreeBuffer (
Snp->PciIo,
SNP_MEM_PAGES (Snp->TxRxBufferSize),
(VOID *) Snp->TxRxBuffer
(VOID *)Snp->TxRxBuffer
);
}
Snp->TxRxBuffer = NULL;
Status = EFI_DEVICE_ERROR;
Status = EFI_DEVICE_ERROR;
}
return Status;
}
/**
Resets a network adapter and allocates the transmit and receive buffers
required by the network interface; optionally, also requests allocation of
@@ -180,9 +179,9 @@ PxeInit (
EFI_STATUS
EFIAPI
SnpUndi32Initialize (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
)
{
EFI_STATUS EfiStatus;
@@ -203,36 +202,37 @@ SnpUndi32Initialize (
}
switch (Snp->Mode.State) {
case EfiSimpleNetworkStarted:
break;
case EfiSimpleNetworkStarted:
break;
case EfiSimpleNetworkStopped:
EfiStatus = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
EfiStatus = EFI_NOT_STARTED;
goto ON_EXIT;
default:
EfiStatus = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
EfiStatus = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
EfiStatus = gBS->CreateEvent (
EVT_NOTIFY_WAIT,
TPL_NOTIFY,
&SnpWaitForPacketNotify,
Snp,
&Snp->Snp.WaitForPacket
);
EVT_NOTIFY_WAIT,
TPL_NOTIFY,
&SnpWaitForPacketNotify,
Snp,
&Snp->Snp.WaitForPacket
);
if (EFI_ERROR (EfiStatus)) {
Snp->Snp.WaitForPacket = NULL;
EfiStatus = EFI_DEVICE_ERROR;
EfiStatus = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
//
//
//
Snp->Mode.MCastFilterCount = 0;
Snp->Mode.ReceiveFilterSetting = 0;
Snp->Mode.MCastFilterCount = 0;
Snp->Mode.ReceiveFilterSetting = 0;
ZeroMem (Snp->Mode.MCastFilter, sizeof Snp->Mode.MCastFilter);
CopyMem (
&Snp->Mode.CurrentAddress,
@@ -243,7 +243,7 @@ SnpUndi32Initialize (
//
// Compute tx/rx buffer sizes based on UNDI init info and parameters.
//
Snp->TxRxBufferSize = (UINT32) (Snp->InitInfo.MemoryRequired + ExtraRxBufferSize + ExtraTxBufferSize);
Snp->TxRxBufferSize = (UINT32)(Snp->InitInfo.MemoryRequired + ExtraRxBufferSize + ExtraTxBufferSize);
//
// If UNDI support cable detect for INITIALIZE command, try it first.
@@ -254,9 +254,9 @@ SnpUndi32Initialize (
}
}
Snp->Mode.MediaPresent = FALSE;
Snp->Mode.MediaPresent = FALSE;
EfiStatus = PxeInit (Snp, PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE);
EfiStatus = PxeInit (Snp, PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE);
if (EFI_ERROR (EfiStatus)) {
gBS->CloseEvent (Snp->Snp.WaitForPacket);

View File

@@ -26,29 +26,29 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeIp2Mac (
IN SNP_DRIVER *Snp,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
IN OUT EFI_MAC_ADDRESS *MAC
IN SNP_DRIVER *Snp,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
IN OUT EFI_MAC_ADDRESS *MAC
)
{
PXE_CPB_MCAST_IP_TO_MAC *Cpb;
PXE_DB_MCAST_IP_TO_MAC *Db;
PXE_CPB_MCAST_IP_TO_MAC *Cpb;
PXE_DB_MCAST_IP_TO_MAC *Db;
Cpb = Snp->Cpb;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_MCAST_IP_TO_MAC;
Snp->Cdb.OpFlags = (UINT16) (IPv6 ? PXE_OPFLAGS_MCAST_IPV6_TO_MAC : PXE_OPFLAGS_MCAST_IPV4_TO_MAC);
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_MCAST_IP_TO_MAC);
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_MCAST_IP_TO_MAC);
Cpb = Snp->Cpb;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_MCAST_IP_TO_MAC;
Snp->Cdb.OpFlags = (UINT16)(IPv6 ? PXE_OPFLAGS_MCAST_IPV6_TO_MAC : PXE_OPFLAGS_MCAST_IPV4_TO_MAC);
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_MCAST_IP_TO_MAC);
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_MCAST_IP_TO_MAC);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb;
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
CopyMem (&Cpb->IP, IP, sizeof (PXE_IP_ADDR));
@@ -57,44 +57,43 @@ PxeIp2Mac (
//
DEBUG ((DEBUG_NET, "\nSnp->undi.mcast_ip_to_mac() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_INVALID_CPB:
return EFI_INVALID_PARAMETER;
case PXE_STATCODE_INVALID_CPB:
return EFI_INVALID_PARAMETER;
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_NET,
"\nSnp->undi.mcast_ip_to_mac() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_UNSUPPORTED;
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_NET,
"\nSnp->undi.mcast_ip_to_mac() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_UNSUPPORTED;
default:
//
// UNDI command failed. Return EFI_DEVICE_ERROR
// to caller.
//
DEBUG (
(DEBUG_NET,
"\nSnp->undi.mcast_ip_to_mac() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
default:
//
// UNDI command failed. Return EFI_DEVICE_ERROR
// to caller.
//
DEBUG (
(DEBUG_NET,
"\nSnp->undi.mcast_ip_to_mac() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
return EFI_DEVICE_ERROR;
}
CopyMem (MAC, &Db->MAC, sizeof (PXE_MAC_ADDR));
return EFI_SUCCESS;
}
/**
Converts a multicast IP address to a multicast HW MAC address.
@@ -126,10 +125,10 @@ PxeIp2Mac (
EFI_STATUS
EFIAPI
SnpUndi32McastIpToMac (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
)
{
SNP_DRIVER *Snp;
@@ -143,7 +142,7 @@ SnpUndi32McastIpToMac (
return EFI_INVALID_PARAMETER;
}
if (IP == NULL || MAC == NULL) {
if ((IP == NULL) || (MAC == NULL)) {
return EFI_INVALID_PARAMETER;
}
@@ -152,16 +151,16 @@ SnpUndi32McastIpToMac (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
Status = PxeIp2Mac (Snp, IPv6, IP, MAC);

View File

@@ -9,7 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
This routine calls Undi to read the desired number of eeprom bytes.
@@ -26,60 +25,60 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeNvDataRead (
IN SNP_DRIVER *Snp,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN SNP_DRIVER *Snp,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
)
{
PXE_DB_NVDATA *Db;
PXE_DB_NVDATA *Db;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_NVDATA;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_NVDATA;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NVDATA_READ;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NVDATA_READ;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_NVDATA);
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_NVDATA);
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.nvdata () "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.nvdata() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.nvdata() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_UNSUPPORTED;
return EFI_UNSUPPORTED;
default:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.nvdata() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
default:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.nvdata() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
return EFI_DEVICE_ERROR;
}
ASSERT (Offset < sizeof (Db->Data));
@@ -89,7 +88,6 @@ PxeNvDataRead (
return EFI_SUCCESS;
}
/**
Performs read and write operations on the NVRAM device attached to a network
interface.
@@ -144,11 +142,11 @@ PxeNvDataRead (
EFI_STATUS
EFIAPI
SnpUndi32NvData (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
)
{
SNP_DRIVER *Snp;
@@ -170,24 +168,26 @@ SnpUndi32NvData (
// Return error if the SNP is not initialized.
//
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
//
// Return error if non-volatile memory variables are not valid.
//
if (Snp->Mode.NvRamSize == 0 || Snp->Mode.NvRamAccessSize == 0) {
if ((Snp->Mode.NvRamSize == 0) || (Snp->Mode.NvRamAccessSize == 0)) {
Status = EFI_UNSUPPORTED;
goto ON_EXIT;
}
//
// Check for invalid parameter combinations.
//
@@ -197,10 +197,12 @@ SnpUndi32NvData (
(Offset + BufferSize > Snp->Mode.NvRamSize) ||
(BufferSize % Snp->Mode.NvRamAccessSize != 0) ||
(Offset % Snp->Mode.NvRamAccessSize != 0)
) {
)
{
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
//
// check the implementation flags of undi if we can write the nvdata!
//

View File

@@ -6,7 +6,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Snp.h"
/**
@@ -37,72 +36,72 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeReceive (
SNP_DRIVER *Snp,
VOID *Buffer,
UINTN *BufferSize,
UINTN *HeaderSize,
EFI_MAC_ADDRESS *SrcAddr,
EFI_MAC_ADDRESS *DestAddr,
UINT16 *Protocol
SNP_DRIVER *Snp,
VOID *Buffer,
UINTN *BufferSize,
UINTN *HeaderSize,
EFI_MAC_ADDRESS *SrcAddr,
EFI_MAC_ADDRESS *DestAddr,
UINT16 *Protocol
)
{
PXE_CPB_RECEIVE *Cpb;
PXE_DB_RECEIVE *Db;
UINTN BuffSize;
PXE_CPB_RECEIVE *Cpb;
PXE_DB_RECEIVE *Db;
UINTN BuffSize;
Cpb = Snp->Cpb;
Db = Snp->Db;
BuffSize = *BufferSize;
Cpb = Snp->Cpb;
Db = Snp->Db;
BuffSize = *BufferSize;
Cpb->BufferAddr = (UINT64)(UINTN) Buffer;
Cpb->BufferLen = (UINT32) *BufferSize;
Cpb->BufferAddr = (UINT64)(UINTN)Buffer;
Cpb->BufferLen = (UINT32)*BufferSize;
Cpb->reserved = 0;
Cpb->reserved = 0;
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_RECEIVE);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_RECEIVE);
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb;
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_RECEIVE);
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_RECEIVE);
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.receive () "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_NO_DATA:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.receive () %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
case PXE_STATCODE_NO_DATA:
DEBUG (
(DEBUG_NET,
"\nsnp->undi.receive () %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_NOT_READY;
return EFI_NOT_READY;
default:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.receive() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
default:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.receive() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
return EFI_DEVICE_ERROR;
}
*BufferSize = Db->FrameLen;
@@ -123,7 +122,7 @@ PxeReceive (
//
// We need to do the byte swapping
//
*Protocol = (UINT16) PXE_SWAP_UINT16 (Db->Protocol);
*Protocol = (UINT16)PXE_SWAP_UINT16 (Db->Protocol);
}
//
@@ -190,13 +189,13 @@ PxeReceive (
EFI_STATUS
EFIAPI
SnpUndi32Receive (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
)
{
SNP_DRIVER *Snp;
@@ -212,16 +211,16 @@ SnpUndi32Receive (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
if ((BufferSize == NULL) || (Buffer == NULL)) {

View File

@@ -7,8 +7,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Snp.h"
/**
@@ -28,22 +26,22 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeRecvFilterEnable (
SNP_DRIVER *Snp,
UINT32 EnableFlags,
UINTN MCastAddressCount,
EFI_MAC_ADDRESS *MCastAddressList
SNP_DRIVER *Snp,
UINT32 EnableFlags,
UINTN MCastAddressCount,
EFI_MAC_ADDRESS *MCastAddressList
)
{
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_RECEIVE_FILTER_ENABLE;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_RECEIVE_FILTER_ENABLE;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_UNICAST) != 0) {
Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_UNICAST;
@@ -66,16 +64,17 @@ PxeRecvFilterEnable (
}
if (MCastAddressCount != 0) {
Snp->Cdb.CPBsize = (UINT16) (MCastAddressCount * sizeof (EFI_MAC_ADDRESS));
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Snp->Cpb;
Snp->Cdb.CPBsize = (UINT16)(MCastAddressCount * sizeof (EFI_MAC_ADDRESS));
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Snp->Cpb;
CopyMem (Snp->Cpb, MCastAddressList, Snp->Cdb.CPBsize);
}
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.receive_filters() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
//
@@ -83,19 +82,19 @@ PxeRecvFilterEnable (
//
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_INVALID_CDB:
case PXE_STATCODE_INVALID_CPB:
case PXE_STATCODE_INVALID_PARAMETER:
return EFI_INVALID_PARAMETER;
case PXE_STATCODE_INVALID_CDB:
case PXE_STATCODE_INVALID_CPB:
case PXE_STATCODE_INVALID_PARAMETER:
return EFI_INVALID_PARAMETER;
case PXE_STATCODE_UNSUPPORTED:
return EFI_UNSUPPORTED;
case PXE_STATCODE_UNSUPPORTED:
return EFI_UNSUPPORTED;
}
return EFI_DEVICE_ERROR;
@@ -118,22 +117,22 @@ PxeRecvFilterEnable (
**/
EFI_STATUS
PxeRecvFilterDisable (
SNP_DRIVER *Snp,
UINT32 DisableFlags,
BOOLEAN ResetMCastList
SNP_DRIVER *Snp,
UINT32 DisableFlags,
BOOLEAN ResetMCastList
)
{
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpFlags = (UINT16) ((DisableFlags != 0) ? PXE_OPFLAGS_RECEIVE_FILTER_DISABLE : PXE_OPFLAGS_NOT_USED);
Snp->Cdb.OpFlags = (UINT16)((DisableFlags != 0) ? PXE_OPFLAGS_RECEIVE_FILTER_DISABLE : PXE_OPFLAGS_NOT_USED);
if (ResetMCastList) {
Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST;
@@ -158,12 +157,13 @@ PxeRecvFilterDisable (
if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0) {
Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST;
}
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.receive_filters() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
//
@@ -171,9 +171,9 @@ PxeRecvFilterDisable (
//
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
@@ -193,29 +193,29 @@ PxeRecvFilterDisable (
**/
EFI_STATUS
PxeRecvFilterRead (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
)
{
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_RECEIVE_FILTER_READ;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = (UINT16) (Snp->Mode.MaxMCastFilterCount * sizeof (EFI_MAC_ADDRESS));
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.OpCode = PXE_OPCODE_RECEIVE_FILTERS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_RECEIVE_FILTER_READ;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = (UINT16)(Snp->Mode.MaxMCastFilterCount * sizeof (EFI_MAC_ADDRESS));
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
if (Snp->Cdb.DBsize == 0) {
Snp->Cdb.DBaddr = (UINT64)(UINTN) NULL;
Snp->Cdb.DBaddr = (UINT64)(UINTN)NULL;
} else {
Snp->Cdb.DBaddr = (UINT64)(UINTN) Snp->Db;
Snp->Cdb.DBaddr = (UINT64)(UINTN)Snp->Db;
ZeroMem (Snp->Db, Snp->Cdb.DBsize);
}
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
DEBUG ((DEBUG_NET, "\nsnp->undi.receive_filters() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
//
@@ -223,13 +223,14 @@ PxeRecvFilterRead (
//
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.receive_filters() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
}
//
// Convert UNDI32 StatFlags to EFI SNP filter flags.
//
@@ -261,19 +262,21 @@ PxeRecvFilterRead (
// Count number of active entries in multicast filter list.
//
{
EFI_MAC_ADDRESS ZeroMacAddr;
EFI_MAC_ADDRESS ZeroMacAddr;
SetMem (&ZeroMacAddr, sizeof ZeroMacAddr, 0);
for (Snp->Mode.MCastFilterCount = 0;
Snp->Mode.MCastFilterCount < Snp->Mode.MaxMCastFilterCount;
Snp->Mode.MCastFilterCount++
) {
)
{
if (CompareMem (
&Snp->Mode.MCastFilter[Snp->Mode.MCastFilterCount],
&ZeroMacAddr,
sizeof ZeroMacAddr
) == 0) {
) == 0)
{
break;
}
}
@@ -282,7 +285,6 @@ PxeRecvFilterRead (
return EFI_SUCCESS;
}
/**
Manages the multicast receive filters of a network interface.
@@ -380,12 +382,12 @@ PxeRecvFilterRead (
EFI_STATUS
EFIAPI
SnpUndi32ReceiveFilters (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
)
{
SNP_DRIVER *Snp;
@@ -401,49 +403,50 @@ SnpUndi32ReceiveFilters (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
//
// check if we are asked to enable or disable something that the UNDI
// does not even support!
//
if (((Enable &~Snp->Mode.ReceiveFilterMask) != 0) ||
((Disable &~Snp->Mode.ReceiveFilterMask) != 0)) {
((Disable &~Snp->Mode.ReceiveFilterMask) != 0))
{
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
if (ResetMCastFilter) {
Disable |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST & Snp->Mode.ReceiveFilterMask;
Disable |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST & Snp->Mode.ReceiveFilterMask;
MCastFilterCnt = 0;
MCastFilter = NULL;
} else {
if (MCastFilterCnt != 0) {
if ((MCastFilterCnt > Snp->Mode.MaxMCastFilterCount) ||
(MCastFilter == NULL)) {
(MCastFilter == NULL))
{
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
}
}
if (Enable == 0 && Disable == 0 && !ResetMCastFilter && MCastFilterCnt == 0) {
if ((Enable == 0) && (Disable == 0) && !ResetMCastFilter && (MCastFilterCnt == 0)) {
Status = EFI_SUCCESS;
goto ON_EXIT;
}
if ((Enable & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0 && MCastFilterCnt == 0) {
if (((Enable & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0) && (MCastFilterCnt == 0)) {
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to reset the NIC.
@@ -20,33 +19,33 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeReset (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
)
{
Snp->Cdb.OpCode = PXE_OPCODE_RESET;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_RESET;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.reset() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
DEBUG (
(DEBUG_WARN,
"\nsnp->undi32.reset() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi32.reset() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
//
@@ -58,7 +57,6 @@ PxeReset (
return EFI_SUCCESS;
}
/**
Resets a network adapter and reinitializes it with the parameters that were
provided in the previous call to Initialize().
@@ -86,8 +84,8 @@ PxeReset (
EFI_STATUS
EFIAPI
SnpUndi32Reset (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
{
SNP_DRIVER *Snp;
@@ -109,16 +107,16 @@ SnpUndi32Reset (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
Status = PxeReset (Snp);

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to shut down the interface.
@@ -20,26 +19,26 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeShutdown (
IN SNP_DRIVER *Snp
IN SNP_DRIVER *Snp
)
{
Snp->Cdb.OpCode = PXE_OPCODE_SHUTDOWN;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_SHUTDOWN;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.shutdown() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
//
@@ -49,6 +48,7 @@ PxeShutdown (
return EFI_DEVICE_ERROR;
}
//
// Free allocated memory.
//
@@ -56,17 +56,16 @@ PxeShutdown (
Snp->PciIo->FreeBuffer (
Snp->PciIo,
SNP_MEM_PAGES (Snp->TxRxBufferSize),
(VOID *) Snp->TxRxBuffer
(VOID *)Snp->TxRxBuffer
);
}
Snp->TxRxBuffer = NULL;
Snp->TxRxBufferSize = 0;
Snp->TxRxBuffer = NULL;
Snp->TxRxBufferSize = 0;
return EFI_SUCCESS;
}
/**
Resets a network adapter and leaves it in a state that is safe for another
driver to initialize.
@@ -89,7 +88,7 @@ PxeShutdown (
EFI_STATUS
EFIAPI
SnpUndi32Shutdown (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
SNP_DRIVER *Snp;
@@ -111,25 +110,25 @@ SnpUndi32Shutdown (
// Return error if the SNP is not initialized.
//
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
Status = PxeShutdown (Snp);
Status = PxeShutdown (Snp);
Snp->Mode.State = EfiSimpleNetworkStarted;
Snp->Mode.ReceiveFilterSetting = 0;
Snp->Mode.State = EfiSimpleNetworkStarted;
Snp->Mode.ReceiveFilterSetting = 0;
Snp->Mode.MCastFilterCount = 0;
Snp->Mode.ReceiveFilterSetting = 0;
Snp->Mode.MCastFilterCount = 0;
Snp->Mode.ReceiveFilterSetting = 0;
ZeroMem (Snp->Mode.MCastFilter, sizeof Snp->Mode.MCastFilter);
CopyMem (
&Snp->Mode.CurrentAddress,

View File

@@ -19,13 +19,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
VOID
EFIAPI
SnpNotifyExitBootServices (
EFI_EVENT Event,
VOID *Context
EFI_EVENT Event,
VOID *Context
)
{
SNP_DRIVER *Snp;
SNP_DRIVER *Snp;
Snp = (SNP_DRIVER *)Context;
Snp = (SNP_DRIVER *)Context;
//
// Shutdown and stop UNDI driver
@@ -47,22 +47,21 @@ SnpNotifyExitBootServices (
EFI_STATUS
EFIAPI
IssueHwUndiCommand (
UINT64 Cdb
UINT64 Cdb
)
{
DEBUG ((DEBUG_ERROR, "\nIssueHwUndiCommand() - This should not be called!"));
if (Cdb == 0) {
return EFI_INVALID_PARAMETER;
}
//
// %%TBD - For now, nothing is done.
//
return EFI_UNSUPPORTED;
}
/**
Compute 8-bit checksum of a buffer.
@@ -75,22 +74,22 @@ IssueHwUndiCommand (
**/
UINT8
Calc8BitCksum (
VOID *Buffer,
UINTN Length
VOID *Buffer,
UINTN Length
)
{
UINT8 *Ptr;
UINT8 Cksum;
UINT8 *Ptr;
UINT8 Cksum;
Ptr = Buffer;
Cksum = 0;
if (Ptr == NULL || Length == 0) {
if ((Ptr == NULL) || (Length == 0)) {
return 0;
}
while (Length-- != 0) {
Cksum = (UINT8) (Cksum + *Ptr++);
Cksum = (UINT8)(Cksum + *Ptr++);
}
return Cksum;
@@ -117,14 +116,14 @@ Calc8BitCksum (
EFI_STATUS
EFIAPI
SimpleNetworkDriverSupported (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_STATUS Status;
EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiProtocol;
PXE_UNDI *Pxe;
EFI_STATUS Status;
EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *NiiProtocol;
PXE_UNDI *Pxe;
Status = gBS->OpenProtocol (
Controller,
@@ -141,7 +140,7 @@ SimpleNetworkDriverSupported (
Status = gBS->OpenProtocol (
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
(VOID **) &NiiProtocol,
(VOID **)&NiiProtocol,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
@@ -151,6 +150,7 @@ SimpleNetworkDriverSupported (
if (Status == EFI_ALREADY_STARTED) {
DEBUG ((DEBUG_INFO, "Support(): Already Started. on handle %p\n", Controller));
}
return Status;
}
@@ -163,6 +163,7 @@ SimpleNetworkDriverSupported (
Status = EFI_UNSUPPORTED;
goto Done;
}
//
// Check to see if !PXE structure is valid. Paragraph alignment of !PXE structure is required.
//
@@ -172,7 +173,7 @@ SimpleNetworkDriverSupported (
goto Done;
}
Pxe = (PXE_UNDI *) (UINTN) (NiiProtocol->Id);
Pxe = (PXE_UNDI *)(UINTN)(NiiProtocol->Id);
//
// Verify !PXE revisions.
@@ -190,16 +191,15 @@ SimpleNetworkDriverSupported (
}
if (Pxe->hw.MajorVer < PXE_ROMID_MAJORVER) {
DEBUG ((DEBUG_NET, "\n!PXE.MajorVer is not supported.\n"));
Status = EFI_UNSUPPORTED;
goto Done;
} else if (Pxe->hw.MajorVer == PXE_ROMID_MAJORVER && Pxe->hw.MinorVer < PXE_ROMID_MINORVER) {
} else if ((Pxe->hw.MajorVer == PXE_ROMID_MAJORVER) && (Pxe->hw.MinorVer < PXE_ROMID_MINORVER)) {
DEBUG ((DEBUG_NET, "\n!PXE.MinorVer is not supported."));
Status = EFI_UNSUPPORTED;
goto Done;
}
//
// Do S/W UNDI specific checks.
//
@@ -222,11 +222,11 @@ SimpleNetworkDriverSupported (
Done:
gBS->CloseProtocol (
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
This->DriverBindingHandle,
Controller
);
return Status;
}
@@ -252,31 +252,31 @@ Done:
EFI_STATUS
EFIAPI
SimpleNetworkDriverStart (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
)
{
EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;
EFI_DEVICE_PATH_PROTOCOL *NiiDevicePath;
EFI_STATUS Status;
PXE_UNDI *Pxe;
SNP_DRIVER *Snp;
VOID *Address;
EFI_HANDLE Handle;
UINT8 BarIndex;
PXE_STATFLAGS InitStatFlags;
EFI_PCI_IO_PROTOCOL *PciIo;
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;
BOOLEAN FoundIoBar;
BOOLEAN FoundMemoryBar;
EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;
EFI_DEVICE_PATH_PROTOCOL *NiiDevicePath;
EFI_STATUS Status;
PXE_UNDI *Pxe;
SNP_DRIVER *Snp;
VOID *Address;
EFI_HANDLE Handle;
UINT8 BarIndex;
PXE_STATFLAGS InitStatFlags;
EFI_PCI_IO_PROTOCOL *PciIo;
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc;
BOOLEAN FoundIoBar;
BOOLEAN FoundMemoryBar;
DEBUG ((DEBUG_NET, "\nSnpNotifyNetworkInterfaceIdentifier() "));
Status = gBS->OpenProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
(VOID **) &NiiDevicePath,
(VOID **)&NiiDevicePath,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
@@ -299,7 +299,7 @@ SimpleNetworkDriverStart (
Status = gBS->OpenProtocol (
Handle,
&gEfiPciIoProtocolGuid,
(VOID **) &PciIo,
(VOID **)&PciIo,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -307,30 +307,31 @@ SimpleNetworkDriverStart (
if (EFI_ERROR (Status)) {
return Status;
}
//
// Get the NII interface.
//
Status = gBS->OpenProtocol (
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
(VOID **) &Nii,
(VOID **)&Nii,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_BY_DRIVER
);
if (EFI_ERROR (Status)) {
gBS->CloseProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
Controller
);
return Status;
}
DEBUG ((DEBUG_INFO, "Start(): UNDI3.1 found\n"));
Pxe = (PXE_UNDI *) (UINTN) (Nii->Id);
Pxe = (PXE_UNDI *)(UINTN)(Nii->Id);
if (Calc8BitCksum (Pxe, Pxe->hw.Len) != 0) {
DEBUG ((DEBUG_NET, "\n!PXE checksum is not correct.\n"));
@@ -351,6 +352,7 @@ SimpleNetworkDriverStart (
DEBUG ((DEBUG_NET, "\nUNDI does not have promiscuous or broadcast support."));
goto NiiError;
}
//
// OK, we like this UNDI, and we know snp is not already there on this handle
// Allocate and initialize a new simple network protocol structure.
@@ -369,12 +371,12 @@ SimpleNetworkDriverStart (
goto NiiError;
}
Snp = (SNP_DRIVER *) (UINTN) Address;
Snp = (SNP_DRIVER *)(UINTN)Address;
ZeroMem (Snp, sizeof (SNP_DRIVER));
Snp->PciIo = PciIo;
Snp->Signature = SNP_DRIVER_SIGNATURE;
Snp->PciIo = PciIo;
Snp->Signature = SNP_DRIVER_SIGNATURE;
EfiInitializeLock (&Snp->Lock, TPL_NOTIFY);
@@ -394,38 +396,39 @@ SimpleNetworkDriverStart (
Snp->Snp.Receive = SnpUndi32Receive;
Snp->Snp.WaitForPacket = NULL;
Snp->Snp.Mode = &Snp->Mode;
Snp->Snp.Mode = &Snp->Mode;
Snp->TxRxBufferSize = 0;
Snp->TxRxBuffer = NULL;
Snp->TxRxBufferSize = 0;
Snp->TxRxBuffer = NULL;
Snp->RecycledTxBuf = AllocatePool (sizeof (UINT64) * SNP_TX_BUFFER_INCREASEMENT);
if (Snp->RecycledTxBuf == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto Error_DeleteSNP;
}
Snp->MaxRecycledTxBuf = SNP_TX_BUFFER_INCREASEMENT;
Snp->RecycledTxBufCount = 0;
Snp->MaxRecycledTxBuf = SNP_TX_BUFFER_INCREASEMENT;
Snp->RecycledTxBufCount = 0;
if (Nii->Revision >= EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL_REVISION) {
Snp->IfNum = Nii->IfNum;
} else {
Snp->IfNum = (UINT8) (Nii->IfNum & 0xFF);
Snp->IfNum = (UINT8)(Nii->IfNum & 0xFF);
}
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_HW_UNDI) != 0) {
Snp->IsSwUndi = FALSE;
Snp->IssueUndi32Command = &IssueHwUndiCommand;
Snp->IsSwUndi = FALSE;
Snp->IssueUndi32Command = &IssueHwUndiCommand;
} else {
Snp->IsSwUndi = TRUE;
if ((Pxe->sw.Implementation & PXE_ROMID_IMP_SW_VIRT_ADDR) != 0) {
Snp->IssueUndi32Command = (ISSUE_UNDI32_COMMAND) (UINTN) Pxe->sw.EntryPoint;
Snp->IssueUndi32Command = (ISSUE_UNDI32_COMMAND)(UINTN)Pxe->sw.EntryPoint;
} else {
Snp->IssueUndi32Command = (ISSUE_UNDI32_COMMAND) (UINTN) ((UINT8) (UINTN) Pxe + Pxe->sw.EntryPoint);
Snp->IssueUndi32Command = (ISSUE_UNDI32_COMMAND)(UINTN)((UINT8)(UINTN)Pxe + Pxe->sw.EntryPoint);
}
}
//
// Allocate a global CPB and DB buffer for this UNDI interface.
// we do this because:
@@ -456,8 +459,8 @@ SimpleNetworkDriverStart (
goto Error_DeleteSNP;
}
Snp->Cpb = (VOID *) (UINTN) Address;
Snp->Db = (VOID *) ((UINTN) Address + 2048);
Snp->Cpb = (VOID *)(UINTN)Address;
Snp->Db = (VOID *)((UINTN)Address + 2048);
//
// Find the correct BAR to do IO.
@@ -475,7 +478,7 @@ SimpleNetworkDriverStart (
PciIo,
BarIndex,
NULL,
(VOID**) &BarDesc
(VOID **)&BarDesc
);
if (Status == EFI_UNSUPPORTED) {
continue;
@@ -504,24 +507,24 @@ SimpleNetworkDriverStart (
goto Error_DeleteSNP;
}
Snp->Cdb.OpCode = PXE_OPCODE_GET_INIT_INFO;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.OpCode = PXE_OPCODE_GET_INIT_INFO;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.DBsize = (UINT16) sizeof (Snp->InitInfo);
Snp->Cdb.DBaddr = (UINT64)(UINTN) (&Snp->InitInfo);
Snp->Cdb.DBsize = (UINT16)sizeof (Snp->InitInfo);
Snp->Cdb.DBaddr = (UINT64)(UINTN)(&Snp->InitInfo);
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
DEBUG ((DEBUG_NET, "\nSnp->undi.get_init_info() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
//
// Save the INIT Stat Code...
@@ -548,23 +551,23 @@ SimpleNetworkDriverStart (
Snp->Mode.MCastFilterCount = 0;
switch (InitStatFlags & PXE_STATFLAGS_CABLE_DETECT_MASK) {
case PXE_STATFLAGS_CABLE_DETECT_SUPPORTED:
Snp->CableDetectSupported = TRUE;
break;
case PXE_STATFLAGS_CABLE_DETECT_SUPPORTED:
Snp->CableDetectSupported = TRUE;
break;
case PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED:
default:
Snp->CableDetectSupported = FALSE;
case PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED:
default:
Snp->CableDetectSupported = FALSE;
}
switch (InitStatFlags & PXE_STATFLAGS_GET_STATUS_NO_MEDIA_MASK) {
case PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED:
Snp->MediaStatusSupported = TRUE;
break;
case PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED:
Snp->MediaStatusSupported = TRUE;
break;
case PXE_STATFLAGS_GET_STATUS_NO_MEDIA_NOT_SUPPORTED:
default:
Snp->MediaStatusSupported = FALSE;
case PXE_STATFLAGS_GET_STATUS_NO_MEDIA_NOT_SUPPORTED:
default:
Snp->MediaStatusSupported = FALSE;
}
if (Snp->CableDetectSupported || Snp->MediaStatusSupported) {
@@ -587,27 +590,22 @@ SimpleNetworkDriverStart (
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_PROMISCUOUS_MULTICAST_RX_SUPPORTED) != 0) {
Snp->Mode.ReceiveFilterMask |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;
}
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_PROMISCUOUS_RX_SUPPORTED) != 0) {
Snp->Mode.ReceiveFilterMask |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;
}
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_BROADCAST_RX_SUPPORTED) != 0) {
Snp->Mode.ReceiveFilterMask |= EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;
}
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_FILTERED_MULTICAST_RX_SUPPORTED) != 0) {
Snp->Mode.ReceiveFilterMask |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST;
}
if ((Pxe->hw.Implementation & PXE_ROMID_IMP_PROMISCUOUS_MULTICAST_RX_SUPPORTED) != 0) {
Snp->Mode.ReceiveFilterMask |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;
}
Snp->Mode.ReceiveFilterSetting = 0;
@@ -698,18 +696,18 @@ Error_DeleteSNP:
);
NiiError:
gBS->CloseProtocol (
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiNetworkInterfaceIdentifierProtocolGuid_31,
This->DriverBindingHandle,
Controller
);
gBS->CloseProtocol (
Controller,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
Controller
);
Controller,
&gEfiDevicePathProtocolGuid,
This->DriverBindingHandle,
Controller
);
//
// If we got here that means we are in error state.
@@ -742,16 +740,16 @@ NiiError:
EFI_STATUS
EFIAPI
SimpleNetworkDriverStop (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE Controller,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
)
{
EFI_STATUS Status;
EFI_SIMPLE_NETWORK_PROTOCOL *SnpProtocol;
SNP_DRIVER *Snp;
EFI_PCI_IO_PROTOCOL *PciIo;
EFI_STATUS Status;
EFI_SIMPLE_NETWORK_PROTOCOL *SnpProtocol;
SNP_DRIVER *Snp;
EFI_PCI_IO_PROTOCOL *PciIo;
//
// Get our context back.
@@ -759,7 +757,7 @@ SimpleNetworkDriverStop (
Status = gBS->OpenProtocol (
Controller,
&gEfiSimpleNetworkProtocolGuid,
(VOID **) &SnpProtocol,
(VOID **)&SnpProtocol,
This->DriverBindingHandle,
Controller,
EFI_OPEN_PROTOCOL_GET_PROTOCOL
@@ -826,7 +824,7 @@ SimpleNetworkDriverStop (
//
// Simple Network Protocol Driver Global Variables
//
EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding = {
EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding = {
SimpleNetworkDriverSupported,
SimpleNetworkDriverStart,
SimpleNetworkDriverStop,
@@ -852,8 +850,8 @@ EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding = {
EFI_STATUS
EFIAPI
InitializeSnpNiiDriver (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
return EfiLibInstallDriverBindingComponentName2 (

View File

@@ -5,10 +5,10 @@ Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _SNP_H_
#define _SNP_H_
#include <Uefi.h>
#include <Protocol/SimpleNetwork.h>
@@ -33,35 +33,34 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define FOUR_GIGABYTES (UINT64) 0x100000000ULL
#define SNP_DRIVER_SIGNATURE SIGNATURE_32 ('s', 'n', 'd', 's')
#define MAX_MAP_LENGTH 100
#define PCI_BAR_IO_MASK 0x00000003
#define PCI_BAR_IO_MODE 0x00000001
#define PCI_BAR_IO_MASK 0x00000003
#define PCI_BAR_IO_MODE 0x00000001
#define PCI_BAR_MEM_MASK 0x0000000F
#define PCI_BAR_MEM_MODE 0x00000000
#define PCI_BAR_MEM_64BIT 0x00000004
#define PCI_BAR_MEM_MASK 0x0000000F
#define PCI_BAR_MEM_MODE 0x00000000
#define PCI_BAR_MEM_64BIT 0x00000004
#define SNP_TX_BUFFER_INCREASEMENT MAX_XMIT_BUFFERS
#define SNP_MAX_TX_BUFFER_NUM 65536
#define SNP_TX_BUFFER_INCREASEMENT MAX_XMIT_BUFFERS
#define SNP_MAX_TX_BUFFER_NUM 65536
typedef
EFI_STATUS
(EFIAPI *ISSUE_UNDI32_COMMAND) (
(EFIAPI *ISSUE_UNDI32_COMMAND)(
UINT64 Cdb
);
typedef struct {
UINT32 Signature;
EFI_LOCK Lock;
UINT32 Signature;
EFI_LOCK Lock;
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
EFI_SIMPLE_NETWORK_MODE Mode;
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
EFI_SIMPLE_NETWORK_MODE Mode;
EFI_HANDLE DeviceHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
EFI_HANDLE DeviceHandle;
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
//
// Local instance data needed by SNP driver
@@ -69,96 +68,96 @@ typedef struct {
// Pointer to S/W UNDI API entry point
// This will be NULL for H/W UNDI
//
ISSUE_UNDI32_COMMAND IssueUndi32Command;
ISSUE_UNDI32_COMMAND IssueUndi32Command;
BOOLEAN IsSwUndi;
BOOLEAN IsSwUndi;
//
// undi interface number, if one undi manages more nics
//
PXE_IFNUM IfNum;
PXE_IFNUM IfNum;
//
// Allocated tx/rx buffer that was passed to UNDI Initialize.
//
UINT32 TxRxBufferSize;
VOID *TxRxBuffer;
UINT32 TxRxBufferSize;
VOID *TxRxBuffer;
//
// mappable buffers for receive and fill header for undi3.0
// these will be used if the user buffers are above 4GB limit (instead of
// mapping the user buffers)
//
UINT8 *ReceiveBufffer;
VOID *ReceiveBufferUnmap;
UINT8 *FillHeaderBuffer;
VOID *FillHeaderBufferUnmap;
UINT8 *ReceiveBufffer;
VOID *ReceiveBufferUnmap;
UINT8 *FillHeaderBuffer;
VOID *FillHeaderBufferUnmap;
EFI_PCI_IO_PROTOCOL *PciIo;
UINT8 IoBarIndex;
UINT8 MemoryBarIndex;
EFI_PCI_IO_PROTOCOL *PciIo;
UINT8 IoBarIndex;
UINT8 MemoryBarIndex;
//
// Buffers for command descriptor block, command parameter block
// and data block.
//
PXE_CDB Cdb;
VOID *Cpb;
VOID *CpbUnmap;
VOID *Db;
PXE_CDB Cdb;
VOID *Cpb;
VOID *CpbUnmap;
VOID *Db;
//
// UNDI structure, we need to remember the init info for a long time!
//
PXE_DB_GET_INIT_INFO InitInfo;
PXE_DB_GET_INIT_INFO InitInfo;
VOID *SnpDriverUnmap;
VOID *SnpDriverUnmap;
//
// when ever we map an address, we must remember it's address and the un-map
// cookie so that we can unmap later
//
struct MAP_LIST {
EFI_PHYSICAL_ADDRESS VirtualAddress;
VOID *MapCookie;
EFI_PHYSICAL_ADDRESS VirtualAddress;
VOID *MapCookie;
} MapList[MAX_MAP_LENGTH];
EFI_EVENT ExitBootServicesEvent;
EFI_EVENT ExitBootServicesEvent;
//
// Whether UNDI support reporting media status from GET_STATUS command,
// i.e. PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED or
// PXE_STATFLAGS_GET_STATUS_NO_MEDIA_NOT_SUPPORTED
//
BOOLEAN MediaStatusSupported;
BOOLEAN MediaStatusSupported;
//
// Whether UNDI support cable detect for INITIALIZE command,
// i.e. PXE_STATFLAGS_CABLE_DETECT_SUPPORTED or
// PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED
//
BOOLEAN CableDetectSupported;
BOOLEAN CableDetectSupported;
//
// Array of the recycled transmit buffer address from UNDI.
//
UINT64 *RecycledTxBuf;
UINT64 *RecycledTxBuf;
//
// The maximum number of recycled buffer pointers in RecycledTxBuf.
//
UINT32 MaxRecycledTxBuf;
UINT32 MaxRecycledTxBuf;
//
// Current number of recycled buffer pointers in RecycledTxBuf.
//
UINT32 RecycledTxBufCount;
UINT32 RecycledTxBufCount;
} SNP_DRIVER;
#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, Snp, SNP_DRIVER_SIGNATURE)
#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, Snp, SNP_DRIVER_SIGNATURE)
//
// Global Variables
//
extern EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2;
extern EFI_DRIVER_BINDING_PROTOCOL gSimpleNetworkDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;
extern EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2;
/**
this routine calls undi to start the interface and changes the snp state.
@@ -171,7 +170,7 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2;
**/
EFI_STATUS
PxeStart (
IN SNP_DRIVER *Snp
IN SNP_DRIVER *Snp
);
/**
@@ -187,7 +186,7 @@ PxeStart (
**/
EFI_STATUS
PxeStop (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
);
/**
@@ -203,8 +202,8 @@ PxeStop (
**/
EFI_STATUS
PxeInit (
SNP_DRIVER *Snp,
UINT16 CableDetectFlag
SNP_DRIVER *Snp,
UINT16 CableDetectFlag
);
/**
@@ -218,7 +217,7 @@ PxeInit (
**/
EFI_STATUS
PxeShutdown (
IN SNP_DRIVER *Snp
IN SNP_DRIVER *Snp
);
/**
@@ -233,7 +232,7 @@ PxeShutdown (
**/
EFI_STATUS
PxeGetStnAddr (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
);
/**
@@ -255,9 +254,9 @@ PxeGetStnAddr (
**/
EFI_STATUS
PxeGetStatus (
IN SNP_DRIVER *Snp,
OUT UINT32 *InterruptStatusPtr,
IN BOOLEAN GetTransmittedBuf
IN SNP_DRIVER *Snp,
OUT UINT32 *InterruptStatusPtr,
IN BOOLEAN GetTransmittedBuf
);
/**
@@ -277,8 +276,8 @@ PxeGetStatus (
VOID
EFIAPI
SnpUndi32CallbackBlock (
IN UINT64 UniqueId,
IN UINT32 Enable
IN UINT64 UniqueId,
IN UINT32 Enable
);
/**
@@ -294,8 +293,8 @@ SnpUndi32CallbackBlock (
VOID
EFIAPI
SnpUndi32CallbackDelay (
IN UINT64 UniqueId,
IN UINT64 MicroSeconds
IN UINT64 UniqueId,
IN UINT64 MicroSeconds
);
/**
@@ -314,11 +313,11 @@ SnpUndi32CallbackDelay (
VOID
EFIAPI
SnpUndi32CallbackMemio (
IN UINT64 UniqueId,
IN UINT8 ReadOrWrite,
IN UINT8 NumBytes,
IN UINT64 MemOrPortAddr,
IN OUT UINT64 BufferPtr
IN UINT64 UniqueId,
IN UINT8 ReadOrWrite,
IN UINT8 NumBytes,
IN UINT64 MemOrPortAddr,
IN OUT UINT64 BufferPtr
);
/**
@@ -338,11 +337,11 @@ SnpUndi32CallbackMemio (
VOID
EFIAPI
SnpUndi32CallbackMap (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN OUT UINT64 DeviceAddrPtr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN OUT UINT64 DeviceAddrPtr
);
/**
@@ -362,11 +361,11 @@ SnpUndi32CallbackMap (
VOID
EFIAPI
SnpUndi32CallbackUnmap (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
);
/**
@@ -393,11 +392,11 @@ SnpUndi32CallbackUnmap (
VOID
EFIAPI
SnpUndi32CallbackSync (
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
IN UINT64 UniqueId,
IN UINT64 CpuAddr,
IN UINT32 NumBytes,
IN UINT32 Direction,
IN UINT64 DeviceAddr
);
/**
@@ -419,7 +418,7 @@ SnpUndi32CallbackSync (
EFI_STATUS
EFIAPI
SnpUndi32Start (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@@ -443,7 +442,7 @@ SnpUndi32Start (
EFI_STATUS
EFIAPI
SnpUndi32Stop (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@@ -482,9 +481,9 @@ SnpUndi32Stop (
EFI_STATUS
EFIAPI
SnpUndi32Initialize (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN ExtraRxBufferSize OPTIONAL,
IN UINTN ExtraTxBufferSize OPTIONAL
);
/**
@@ -540,7 +539,7 @@ SnpUndi32Reset (
EFI_STATUS
EFIAPI
SnpUndi32Shutdown (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
);
/**
@@ -640,12 +639,12 @@ SnpUndi32Shutdown (
EFI_STATUS
EFIAPI
SnpUndi32ReceiveFilters (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINT32 Enable,
IN UINT32 Disable,
IN BOOLEAN ResetMCastFilter,
IN UINTN MCastFilterCnt OPTIONAL,
IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
);
/**
@@ -683,9 +682,9 @@ SnpUndi32ReceiveFilters (
EFI_STATUS
EFIAPI
SnpUndi32StationAddress (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
);
/**
@@ -738,10 +737,10 @@ SnpUndi32StationAddress (
EFI_STATUS
EFIAPI
SnpUndi32Statistics (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
IN OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
IN OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
);
/**
@@ -775,10 +774,10 @@ SnpUndi32Statistics (
EFI_STATUS
EFIAPI
SnpUndi32McastIpToMac (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN IPv6,
IN EFI_IP_ADDRESS *IP,
OUT EFI_MAC_ADDRESS *MAC
);
/**
@@ -835,11 +834,11 @@ SnpUndi32McastIpToMac (
EFI_STATUS
EFIAPI
SnpUndi32NvData (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN ReadWrite,
IN UINTN Offset,
IN UINTN BufferSize,
IN OUT VOID *Buffer
);
/**
@@ -883,9 +882,9 @@ SnpUndi32NvData (
EFI_STATUS
EFIAPI
SnpUndi32GetStatus (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINT32 *InterruptStatus OPTIONAL,
OUT VOID **TxBuf OPTIONAL
);
/**
@@ -945,13 +944,13 @@ SnpUndi32GetStatus (
EFI_STATUS
EFIAPI
SnpUndi32Transmit (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
);
/**
@@ -1005,13 +1004,13 @@ SnpUndi32Transmit (
EFI_STATUS
EFIAPI
SnpUndi32Receive (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
OUT UINTN *HeaderSize OPTIONAL,
IN OUT UINTN *BufferSize,
OUT VOID *Buffer,
OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
OUT UINT16 *Protocol OPTIONAL
);
/**
@@ -1024,11 +1023,10 @@ SnpUndi32Receive (
VOID
EFIAPI
SnpWaitForPacketNotify (
EFI_EVENT Event,
VOID *SnpPtr
EFI_EVENT Event,
VOID *SnpPtr
);
#define SNP_MEM_PAGES(x) (((x) - 1) / 4096 + 1)
#endif /* _SNP_H_ */

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to start the interface and changes the snp state.
@@ -20,55 +19,56 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeStart (
IN SNP_DRIVER *Snp
IN SNP_DRIVER *Snp
)
{
PXE_CPB_START_31 *Cpb31;
Cpb31 = Snp->Cpb;
Cpb31 = Snp->Cpb;
//
// Initialize UNDI Start CDB for H/W UNDI
//
Snp->Cdb.OpCode = PXE_OPCODE_START;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_START;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Make changes to H/W UNDI Start CDB if this is
// a S/W UNDI.
//
if (Snp->IsSwUndi) {
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_START_31);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb31;
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_START_31);
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb31;
Cpb31->Delay = (UINT64)(UINTN) &SnpUndi32CallbackDelay;
Cpb31->Block = (UINT64)(UINTN) &SnpUndi32CallbackBlock;
Cpb31->Delay = (UINT64)(UINTN)&SnpUndi32CallbackDelay;
Cpb31->Block = (UINT64)(UINTN)&SnpUndi32CallbackBlock;
//
// Virtual == Physical. This can be set to zero.
//
Cpb31->Virt2Phys = (UINT64)(UINTN) 0;
Cpb31->Mem_IO = (UINT64)(UINTN) &SnpUndi32CallbackMemio;
Cpb31->Virt2Phys = (UINT64)(UINTN)0;
Cpb31->Mem_IO = (UINT64)(UINTN)&SnpUndi32CallbackMemio;
Cpb31->Map_Mem = (UINT64)(UINTN) &SnpUndi32CallbackMap;
Cpb31->UnMap_Mem = (UINT64)(UINTN) &SnpUndi32CallbackUnmap;
Cpb31->Sync_Mem = (UINT64)(UINTN) &SnpUndi32CallbackSync;
Cpb31->Map_Mem = (UINT64)(UINTN)&SnpUndi32CallbackMap;
Cpb31->UnMap_Mem = (UINT64)(UINTN)&SnpUndi32CallbackUnmap;
Cpb31->Sync_Mem = (UINT64)(UINTN)&SnpUndi32CallbackSync;
Cpb31->Unique_ID = (UINT64)(UINTN) Snp;
Cpb31->Unique_ID = (UINT64)(UINTN)Snp;
}
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.start() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
//
@@ -76,13 +76,14 @@ PxeStart (
//
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.start() %xh:%xh\n",
Snp->Cdb.StatCode,
Snp->Cdb.StatFlags)
"\nsnp->undi.start() %xh:%xh\n",
Snp->Cdb.StatCode,
Snp->Cdb.StatFlags)
);
return EFI_DEVICE_ERROR;
}
//
// Set simple network state to Started and return success.
//
@@ -91,7 +92,6 @@ PxeStart (
return EFI_SUCCESS;
}
/**
Change the state of a network interface from "stopped" to "started."
@@ -111,7 +111,7 @@ PxeStart (
EFI_STATUS
EFIAPI
SnpUndi32Start (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
SNP_DRIVER *Snp;
@@ -128,23 +128,24 @@ SnpUndi32Start (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkStopped:
break;
case EfiSimpleNetworkStopped:
break;
case EfiSimpleNetworkStarted:
case EfiSimpleNetworkInitialized:
Status = EFI_ALREADY_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStarted:
case EfiSimpleNetworkInitialized:
Status = EFI_ALREADY_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
Status = PxeStart (Snp);
if (EFI_ERROR (Status)) {
goto ON_EXIT;
}
//
// clear the map_list in SNP structure
//

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to read the MAC address of the NIC and update the mode structure
with the address.
@@ -21,43 +20,44 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeGetStnAddr (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
)
{
PXE_DB_STATION_ADDRESS *Db;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_STATION_ADDRESS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_READ;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_STATION_ADDRESS;
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_READ;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_STATION_ADDRESS);
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_STATION_ADDRESS);
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.station_addr() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.station_addr() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.station_addr() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
}
//
// Set new station address in SNP->Mode structure and return success.
//
@@ -82,7 +82,6 @@ PxeGetStnAddr (
return EFI_SUCCESS;
}
/**
Call UNDI to set a new MAC address for the NIC.
@@ -95,21 +94,21 @@ PxeGetStnAddr (
**/
EFI_STATUS
PxeSetStnAddr (
SNP_DRIVER *Snp,
EFI_MAC_ADDRESS *NewMacAddr
SNP_DRIVER *Snp,
EFI_MAC_ADDRESS *NewMacAddr
)
{
PXE_CPB_STATION_ADDRESS *Cpb;
PXE_DB_STATION_ADDRESS *Db;
PXE_CPB_STATION_ADDRESS *Cpb;
PXE_DB_STATION_ADDRESS *Db;
Cpb = Snp->Cpb;
Db = Snp->Db;
Snp->Cdb.OpCode = PXE_OPCODE_STATION_ADDRESS;
if (NewMacAddr == NULL) {
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_RESET;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_RESET;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
} else {
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_WRITE;
//
@@ -117,31 +116,31 @@ PxeSetStnAddr (
//
CopyMem (&Cpb->StationAddr, NewMacAddr, Snp->Mode.HwAddressSize);
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_STATION_ADDRESS);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_STATION_ADDRESS);
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb;
}
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_STATION_ADDRESS);
Snp->Cdb.DBaddr = (UINT64)(UINTN) Db;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_STATION_ADDRESS);
Snp->Cdb.DBaddr = (UINT64)(UINTN)Db;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.station_addr() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.station_addr() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.station_addr() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
//
@@ -149,6 +148,7 @@ PxeSetStnAddr (
//
return EFI_DEVICE_ERROR;
}
//
// read the changed address and save it in SNP->Mode structure
//
@@ -157,7 +157,6 @@ PxeSetStnAddr (
return EFI_SUCCESS;
}
/**
Modifies or resets the current station address, if supported.
@@ -193,9 +192,9 @@ PxeSetStnAddr (
EFI_STATUS
EFIAPI
SnpUndi32StationAddress (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN EFI_MAC_ADDRESS *New OPTIONAL
)
{
SNP_DRIVER *Snp;
@@ -206,7 +205,8 @@ SnpUndi32StationAddress (
// Check for invalid parameter combinations.
//
if ((This == NULL) ||
(!Reset && (New == NULL))) {
(!Reset && (New == NULL)))
{
return EFI_INVALID_PARAMETER;
}
@@ -218,16 +218,16 @@ SnpUndi32StationAddress (
// Return error if the SNP is not initialized.
//
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
if (Reset) {

View File

@@ -6,10 +6,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "Snp.h"
/**
Resets or collects the statistics on a network interface.
@@ -60,20 +58,20 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
EFI_STATUS
EFIAPI
SnpUndi32Statistics (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
IN OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN BOOLEAN Reset,
IN OUT UINTN *StatisticsSize OPTIONAL,
IN OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
)
{
SNP_DRIVER *Snp;
PXE_DB_STATISTICS *Db;
UINT64 *Stp;
UINT64 Mask;
UINTN Size;
UINTN Index;
EFI_TPL OldTpl;
EFI_STATUS Status;
SNP_DRIVER *Snp;
PXE_DB_STATISTICS *Db;
UINT64 *Stp;
UINT64 Mask;
UINTN Size;
UINTN Index;
EFI_TPL OldTpl;
EFI_STATUS Status;
//
// Get pointer to SNP driver instance for *This.
@@ -90,78 +88,81 @@ SnpUndi32Statistics (
// Return error if the SNP is not initialized.
//
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
//
// if we are not resetting the counters, we have to have a valid stat table
// with >0 size. if no reset, no table and no size, return success.
//
if (!Reset && StatisticsSize == NULL) {
if (!Reset && (StatisticsSize == NULL)) {
Status = (StatisticsTable != NULL) ? EFI_INVALID_PARAMETER : EFI_SUCCESS;
goto ON_EXIT;
}
//
// Initialize UNDI Statistics CDB
//
Snp->Cdb.OpCode = PXE_OPCODE_STATISTICS;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_STATISTICS;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
if (Reset) {
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATISTICS_RESET;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Db = Snp->Db;
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATISTICS_RESET;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Db = Snp->Db;
} else {
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATISTICS_READ;
Snp->Cdb.DBsize = (UINT16) sizeof (PXE_DB_STATISTICS);
Snp->Cdb.DBaddr = (UINT64)(UINTN) (Db = Snp->Db);
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATISTICS_READ;
Snp->Cdb.DBsize = (UINT16)sizeof (PXE_DB_STATISTICS);
Snp->Cdb.DBaddr = (UINT64)(UINTN)(Db = Snp->Db);
}
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nsnp->undi.statistics() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_SUCCESS:
break;
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.statistics() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
case PXE_STATCODE_UNSUPPORTED:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.statistics() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
Status = EFI_UNSUPPORTED;
goto ON_EXIT;
Status = EFI_UNSUPPORTED;
goto ON_EXIT;
default:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.statistics() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
default:
DEBUG (
(DEBUG_ERROR,
"\nsnp->undi.statistics() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
if (Reset) {
@@ -171,16 +172,17 @@ SnpUndi32Statistics (
if (StatisticsTable == NULL) {
*StatisticsSize = sizeof (EFI_NETWORK_STATISTICS);
Status = EFI_BUFFER_TOO_SMALL;
Status = EFI_BUFFER_TOO_SMALL;
goto ON_EXIT;
}
//
// Convert the UNDI statistics information to SNP statistics
// information.
//
ZeroMem (StatisticsTable, *StatisticsSize);
Stp = (UINT64 *) StatisticsTable;
Size = 0;
Stp = (UINT64 *)StatisticsTable;
Size = 0;
for (Index = 0, Mask = 1; Index < 64; Index++, Mask = LShiftU64 (Mask, 1), Stp++) {
//
@@ -192,12 +194,13 @@ SnpUndi32Statistics (
}
if ((Db->Supported & Mask) != 0) {
*Stp = Db->Data[Index];
Size = Index + 1;
*Stp = Db->Data[Index];
Size = Index + 1;
} else {
SetMem (Stp, sizeof (UINT64), 0xFF);
}
}
//
// Compute size up to last supported statistic.
//
@@ -211,10 +214,10 @@ SnpUndi32Statistics (
if (*StatisticsSize >= Size) {
*StatisticsSize = Size;
Status = EFI_SUCCESS;
Status = EFI_SUCCESS;
} else {
*StatisticsSize = Size;
Status = EFI_BUFFER_TOO_SMALL;
Status = EFI_BUFFER_TOO_SMALL;
}
ON_EXIT:

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to stop the interface and changes the snp state.
@@ -20,37 +19,38 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeStop (
SNP_DRIVER *Snp
SNP_DRIVER *Snp
)
{
Snp->Cdb.OpCode = PXE_OPCODE_STOP;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.OpCode = PXE_OPCODE_STOP;
Snp->Cdb.OpFlags = PXE_OPFLAGS_NOT_USED;
Snp->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command
//
DEBUG ((DEBUG_NET, "\nsnp->undi.stop() "));
(*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {
DEBUG (
(DEBUG_WARN,
"\nsnp->undi.stop() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
"\nsnp->undi.stop() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
}
//
// Set simple network state to Started and return success.
//
@@ -58,7 +58,6 @@ PxeStop (
return EFI_SUCCESS;
}
/**
Changes the state of a network interface from "started" to "stopped."
@@ -83,7 +82,7 @@ PxeStop (
EFI_STATUS
EFIAPI
SnpUndi32Stop (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
IN EFI_SIMPLE_NETWORK_PROTOCOL *This
)
{
SNP_DRIVER *Snp;
@@ -99,16 +98,16 @@ SnpUndi32Stop (
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
switch (Snp->Mode.State) {
case EfiSimpleNetworkStarted:
break;
case EfiSimpleNetworkStarted:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
Status = PxeStop (Snp);

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Call UNDI to create the meadia header for the given data buffer.
@@ -27,14 +26,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
EFI_STATUS
PxeFillHeader (
SNP_DRIVER *Snp,
VOID *MacHeaderPtr,
UINTN HeaderSize,
VOID *Buffer,
UINTN BufferSize,
EFI_MAC_ADDRESS *DestAddr,
EFI_MAC_ADDRESS *SrcAddr,
UINT16 *ProtocolPtr
SNP_DRIVER *Snp,
VOID *MacHeaderPtr,
UINTN HeaderSize,
VOID *Buffer,
UINTN BufferSize,
EFI_MAC_ADDRESS *DestAddr,
EFI_MAC_ADDRESS *SrcAddr,
UINT16 *ProtocolPtr
)
{
PXE_CPB_FILL_HEADER_FRAGMENTED *Cpb;
@@ -42,90 +41,89 @@ PxeFillHeader (
Cpb = Snp->Cpb;
if (SrcAddr != NULL) {
CopyMem (
(VOID *) Cpb->SrcAddr,
(VOID *) SrcAddr,
(VOID *)Cpb->SrcAddr,
(VOID *)SrcAddr,
Snp->Mode.HwAddressSize
);
} else {
CopyMem (
(VOID *) Cpb->SrcAddr,
(VOID *) &(Snp->Mode.CurrentAddress),
(VOID *)Cpb->SrcAddr,
(VOID *)&(Snp->Mode.CurrentAddress),
Snp->Mode.HwAddressSize
);
}
CopyMem (
(VOID *) Cpb->DestAddr,
(VOID *) DestAddr,
(VOID *)Cpb->DestAddr,
(VOID *)DestAddr,
Snp->Mode.HwAddressSize
);
//
// we need to do the byte swapping
//
Cpb->Protocol = (UINT16) PXE_SWAP_UINT16 (*ProtocolPtr);
Cpb->Protocol = (UINT16)PXE_SWAP_UINT16 (*ProtocolPtr);
Cpb->PacketLen = (UINT32) (BufferSize);
Cpb->MediaHeaderLen = (UINT16) HeaderSize;
Cpb->PacketLen = (UINT32)(BufferSize);
Cpb->MediaHeaderLen = (UINT16)HeaderSize;
Cpb->FragCnt = 2;
Cpb->reserved = 0;
Cpb->FragCnt = 2;
Cpb->reserved = 0;
Cpb->FragDesc[0].FragAddr = (UINT64)(UINTN) MacHeaderPtr;
Cpb->FragDesc[0].FragLen = (UINT32) HeaderSize;
Cpb->FragDesc[1].FragAddr = (UINT64)(UINTN) Buffer;
Cpb->FragDesc[1].FragLen = (UINT32) BufferSize;
Cpb->FragDesc[0].FragAddr = (UINT64)(UINTN)MacHeaderPtr;
Cpb->FragDesc[0].FragLen = (UINT32)HeaderSize;
Cpb->FragDesc[1].FragAddr = (UINT64)(UINTN)Buffer;
Cpb->FragDesc[1].FragLen = (UINT32)BufferSize;
Cpb->FragDesc[0].reserved = Cpb->FragDesc[1].reserved = 0;
Snp->Cdb.OpCode = PXE_OPCODE_FILL_HEADER;
Snp->Cdb.OpFlags = PXE_OPFLAGS_FILL_HEADER_FRAGMENTED;
Snp->Cdb.OpCode = PXE_OPCODE_FILL_HEADER;
Snp->Cdb.OpFlags = PXE_OPFLAGS_FILL_HEADER_FRAGMENTED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_FILL_HEADER_FRAGMENTED);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_FILL_HEADER_FRAGMENTED);
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
//
DEBUG ((DEBUG_NET, "\nSnp->undi.fill_header() "));
(*Snp->IssueUndi32Command) ((UINT64) (UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
return EFI_SUCCESS;
case PXE_STATCODE_SUCCESS:
return EFI_SUCCESS;
case PXE_STATCODE_INVALID_PARAMETER:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.fill_header() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
case PXE_STATCODE_INVALID_PARAMETER:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.fill_header() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_INVALID_PARAMETER;
return EFI_INVALID_PARAMETER;
default:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.fill_header() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
default:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.fill_header() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
return EFI_DEVICE_ERROR;
return EFI_DEVICE_ERROR;
}
}
/**
This routine calls undi to transmit the given data buffer
@@ -139,34 +137,34 @@ PxeFillHeader (
**/
EFI_STATUS
PxeTransmit (
SNP_DRIVER *Snp,
VOID *Buffer,
UINTN BufferSize
SNP_DRIVER *Snp,
VOID *Buffer,
UINTN BufferSize
)
{
PXE_CPB_TRANSMIT *Cpb;
EFI_STATUS Status;
Cpb = Snp->Cpb;
Cpb->FrameAddr = (UINT64) (UINTN) Buffer;
Cpb->DataLen = (UINT32) BufferSize;
Cpb = Snp->Cpb;
Cpb->FrameAddr = (UINT64)(UINTN)Buffer;
Cpb->DataLen = (UINT32)BufferSize;
Cpb->MediaheaderLen = 0;
Cpb->reserved = 0;
Snp->Cdb.OpFlags = PXE_OPFLAGS_TRANSMIT_WHOLE;
Snp->Cdb.OpFlags = PXE_OPFLAGS_TRANSMIT_WHOLE;
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_TRANSMIT);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
Snp->Cdb.CPBsize = (UINT16)sizeof (PXE_CPB_TRANSMIT);
Snp->Cdb.CPBaddr = (UINT64)(UINTN)Cpb;
Snp->Cdb.OpCode = PXE_OPCODE_TRANSMIT;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.OpCode = PXE_OPCODE_TRANSMIT;
Snp->Cdb.DBsize = PXE_DBSIZE_NOT_USED;
Snp->Cdb.DBaddr = PXE_DBADDR_NOT_USED;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
Snp->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
Snp->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
Snp->Cdb.IFnum = Snp->IfNum;
Snp->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Issue UNDI command and check result.
@@ -177,7 +175,7 @@ PxeTransmit (
DEBUG ((DEBUG_NET, "\nSnp->Cdb.DBaddr == %LX", Snp->Cdb.DBaddr));
DEBUG ((DEBUG_NET, "\nCpb->FrameAddr == %LX\n", Cpb->FrameAddr));
(*Snp->IssueUndi32Command) ((UINT64) (UINTN) &Snp->Cdb);
(*Snp->IssueUndi32Command)((UINT64)(UINTN)&Snp->Cdb);
DEBUG ((DEBUG_NET, "\nexit Snp->undi.transmit() "));
@@ -185,29 +183,29 @@ PxeTransmit (
// we will unmap the buffers in get_status call, not here
//
switch (Snp->Cdb.StatCode) {
case PXE_STATCODE_SUCCESS:
return EFI_SUCCESS;
case PXE_STATCODE_SUCCESS:
return EFI_SUCCESS;
case PXE_STATCODE_BUFFER_FULL:
case PXE_STATCODE_QUEUE_FULL:
case PXE_STATCODE_BUSY:
Status = EFI_NOT_READY;
DEBUG (
(DEBUG_NET,
"\nSnp->undi.transmit() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
break;
case PXE_STATCODE_BUFFER_FULL:
case PXE_STATCODE_QUEUE_FULL:
case PXE_STATCODE_BUSY:
Status = EFI_NOT_READY;
DEBUG (
(DEBUG_NET,
"\nSnp->undi.transmit() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
break;
default:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.transmit() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
Status = EFI_DEVICE_ERROR;
default:
DEBUG (
(DEBUG_ERROR,
"\nSnp->undi.transmit() %xh:%xh\n",
Snp->Cdb.StatFlags,
Snp->Cdb.StatCode)
);
Status = EFI_DEVICE_ERROR;
}
return Status;
@@ -270,13 +268,13 @@ PxeTransmit (
EFI_STATUS
EFIAPI
SnpUndi32Transmit (
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
IN UINTN HeaderSize,
IN UINTN BufferSize,
IN VOID *Buffer,
IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
IN UINT16 *Protocol OPTIONAL
)
{
SNP_DRIVER *Snp;
@@ -296,16 +294,16 @@ SnpUndi32Transmit (
}
switch (Snp->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
case EfiSimpleNetworkStopped:
Status = EFI_NOT_STARTED;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
default:
Status = EFI_DEVICE_ERROR;
goto ON_EXIT;
}
if (Buffer == NULL) {
@@ -323,21 +321,21 @@ SnpUndi32Transmit (
// we need the destination address and the protocol
//
if (HeaderSize != 0) {
if (HeaderSize != Snp->Mode.MediaHeaderSize || DestAddr == 0 || Protocol == 0) {
if ((HeaderSize != Snp->Mode.MediaHeaderSize) || (DestAddr == 0) || (Protocol == 0)) {
Status = EFI_INVALID_PARAMETER;
goto ON_EXIT;
}
Status = PxeFillHeader (
Snp,
Buffer,
HeaderSize,
(UINT8 *) Buffer + HeaderSize,
BufferSize - HeaderSize,
DestAddr,
SrcAddr,
Protocol
);
Snp,
Buffer,
HeaderSize,
(UINT8 *)Buffer + HeaderSize,
BufferSize - HeaderSize,
DestAddr,
SrcAddr,
Protocol
);
if (EFI_ERROR (Status)) {
goto ON_EXIT;

View File

@@ -8,7 +8,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "Snp.h"
/**
Notification call back function for WaitForPacket event.
@@ -19,64 +18,67 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
VOID
EFIAPI
SnpWaitForPacketNotify (
EFI_EVENT Event,
VOID *SnpPtr
EFI_EVENT Event,
VOID *SnpPtr
)
{
PXE_DB_GET_STATUS PxeDbGetStatus;
PXE_DB_GET_STATUS PxeDbGetStatus;
//
// Do nothing if either parameter is a NULL pointer.
//
if (Event == NULL || SnpPtr == NULL) {
return ;
if ((Event == NULL) || (SnpPtr == NULL)) {
return;
}
//
// Do nothing if the SNP interface is not initialized.
//
switch (((SNP_DRIVER *) SnpPtr)->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
switch (((SNP_DRIVER *)SnpPtr)->Mode.State) {
case EfiSimpleNetworkInitialized:
break;
case EfiSimpleNetworkStopped:
case EfiSimpleNetworkStarted:
default:
return ;
case EfiSimpleNetworkStopped:
case EfiSimpleNetworkStarted:
default:
return;
}
//
// Fill in CDB for UNDI GetStatus().
//
((SNP_DRIVER *) SnpPtr)->Cdb.OpCode = PXE_OPCODE_GET_STATUS;
((SNP_DRIVER *) SnpPtr)->Cdb.OpFlags = 0;
((SNP_DRIVER *) SnpPtr)->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
((SNP_DRIVER *) SnpPtr)->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
((SNP_DRIVER *) SnpPtr)->Cdb.DBsize = (UINT16) (sizeof (UINT32) * 2);
((SNP_DRIVER *) SnpPtr)->Cdb.DBaddr = (UINT64)(UINTN) (((SNP_DRIVER *) SnpPtr)->Db);
((SNP_DRIVER *) SnpPtr)->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
((SNP_DRIVER *) SnpPtr)->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
((SNP_DRIVER *) SnpPtr)->Cdb.IFnum = ((SNP_DRIVER *) SnpPtr)->IfNum;
((SNP_DRIVER *) SnpPtr)->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
((SNP_DRIVER *)SnpPtr)->Cdb.OpCode = PXE_OPCODE_GET_STATUS;
((SNP_DRIVER *)SnpPtr)->Cdb.OpFlags = 0;
((SNP_DRIVER *)SnpPtr)->Cdb.CPBsize = PXE_CPBSIZE_NOT_USED;
((SNP_DRIVER *)SnpPtr)->Cdb.CPBaddr = PXE_CPBADDR_NOT_USED;
((SNP_DRIVER *)SnpPtr)->Cdb.DBsize = (UINT16)(sizeof (UINT32) * 2);
((SNP_DRIVER *)SnpPtr)->Cdb.DBaddr = (UINT64)(UINTN)(((SNP_DRIVER *)SnpPtr)->Db);
((SNP_DRIVER *)SnpPtr)->Cdb.StatCode = PXE_STATCODE_INITIALIZE;
((SNP_DRIVER *)SnpPtr)->Cdb.StatFlags = PXE_STATFLAGS_INITIALIZE;
((SNP_DRIVER *)SnpPtr)->Cdb.IFnum = ((SNP_DRIVER *)SnpPtr)->IfNum;
((SNP_DRIVER *)SnpPtr)->Cdb.Control = PXE_CONTROL_LAST_CDB_IN_LIST;
//
// Clear contents of DB buffer.
//
ZeroMem (((SNP_DRIVER *) SnpPtr)->Db, sizeof (UINT32) * 2);
ZeroMem (((SNP_DRIVER *)SnpPtr)->Db, sizeof (UINT32) * 2);
//
// Issue UNDI command and check result.
//
(*((SNP_DRIVER *) SnpPtr)->IssueUndi32Command) ((UINT64)(UINTN) &((SNP_DRIVER *) SnpPtr)->Cdb);
(*((SNP_DRIVER *)SnpPtr)->IssueUndi32Command)((UINT64)(UINTN)&((SNP_DRIVER *)SnpPtr)->Cdb);
if (((SNP_DRIVER *) SnpPtr)->Cdb.StatCode != EFI_SUCCESS) {
return ;
if (((SNP_DRIVER *)SnpPtr)->Cdb.StatCode != EFI_SUCCESS) {
return;
}
//
// We might have a packet. Check the receive length and signal
// the event if the length is not zero.
//
CopyMem (
&PxeDbGetStatus,
((SNP_DRIVER *) SnpPtr)->Db,
((SNP_DRIVER *)SnpPtr)->Db,
sizeof (UINT32) * 2
);