[if !mso]>[if gte mso 9]>
Subject: Re: [edk2] MdeModulePkg/Universal/Network/SnpDxp/Station_address.c
From: "Li, Ruth" <firstname.lastname@example.org>
To: "email@example.com" <firstname.lastname@example.org>
Date: 2014-03-11 15:43:08
I tend to agree with your assessment.
At the same time, I checked UEFI/code again. It turns out the PXE_OPFLAGS_STATION_ADDRESS_READ and PXE_OPFLAG_STATION_ADDRESS_WRITE are both defined as zero.
So, using current BIOS FW, I thought there’ll be no actual functionality impact if you pass PXE_OPFLAGS_STATION_ADDRESS_WRITE.
Yes, I’m developing a UNDI driver for our device.
The bellow code, if integrated into a BIOS FW, do cause me an issue as it implies that there is no need to pass PXE_OPFLAGS_STATION_ADDRESS_WRITE whereas my driver expects this kind of flag in order to perform SetAddress(). With the current implementation, calling to SetStationAddress on the SNP driver will not be processed by our UNDI driver.
I tend to think that this code is not aligned to UNDI spec.
Below piece of code has been here for many years, the purpose of the comment seems to remind the operation result for some UNDI implementation.
Are you development UNDI driver for some device? Whether below code bring any issue to you?
I found this weird comment (and consequent behavior) in the SnpDxe PxeSetStnAddr() implementation:
Snp->Cdb.OpFlags = PXE_OPFLAGS_STATION_ADDRESS_READ;
// even though the OPFLAGS are set to READ, supplying a new address
// in the CPB will make undi change the mac address to the new one.
CopyMem (&Cpb->StationAddr, NewMacAddr, Snp->Mode.HwAddressSize);
Snp->Cdb.CPBsize = (UINT16) sizeof (PXE_CPB_STATION_ADDRESS);
Snp->Cdb.CPBaddr = (UINT64)(UINTN) Cpb;
I looked through the UNDI section in the UEFI 2.4A spec for a statement declaring that once a CPB is present UNDI corresponding StationAddress() shall set the current mac address to the address specified in the CPB struct, but my efforts were in vain.
Can anyone refute (or substantiate) this claim?