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:
committed by
mergify[bot]
parent
2f88bd3a12
commit
d1050b9dff
@@ -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;
|
||||
}
|
||||
|
@@ -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.
|
||||
//
|
||||
|
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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!
|
||||
//
|
||||
|
@@ -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)) {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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,
|
||||
|
@@ -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 (
|
||||
|
@@ -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_ */
|
||||
|
@@ -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
|
||||
//
|
||||
|
@@ -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) {
|
||||
|
@@ -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:
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
);
|
||||
|
||||
|
Reference in New Issue
Block a user