X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FNetwork%2FSnpDxe%2FNvdata.c;h=4b9259f87a0d48bb51155504e085e5a7ba508e13;hp=19d43be8bdb92821a194f0e1f43bd011ce0da36a;hb=4cda7726e5fd30aaf3e05c80207ae1b264bfa123;hpb=fe1e36e550c6ffcd2561903d434683d3939e1942 diff --git a/MdeModulePkg/Universal/Network/SnpDxe/Nvdata.c b/MdeModulePkg/Universal/Network/SnpDxe/Nvdata.c index 19d43be8bd..4b9259f87a 100644 --- a/MdeModulePkg/Universal/Network/SnpDxe/Nvdata.c +++ b/MdeModulePkg/Universal/Network/SnpDxe/Nvdata.c @@ -1,21 +1,16 @@ /** @file -Copyright (c) 2004 - 2007, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php + Implementation of reading and writing operations on the NVRAM device + attached to a network interface. + +Copyright (c) 2004 - 2007, Intel Corporation.
+All rights reserved. This program and the accompanying materials are licensed +and made available under the terms and conditions of the BSD License which +accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -Module name: - nvdata.c - -Abstract: - -Revision history: - 2000-Feb-03 M(f)J Genesis. - **/ #include "Snp.h" @@ -24,47 +19,47 @@ Revision history: /** This routine calls Undi to read the desired number of eeprom bytes. - @param snp pointer to the snp driver structure - @param RegOffset eeprom register value relative to the base address - @param NumBytes number of bytes to read - @param BufferPtr pointer where to read into + @param Snp pointer to the snp driver structure + @param Offset eeprom register value relative to the base address + @param BufferSize number of bytes to read + @param Buffer pointer where to read into **/ EFI_STATUS -pxe_nvdata_read ( - IN SNP_DRIVER *snp, - IN UINTN RegOffset, - IN UINTN NumBytes, - IN OUT VOID *BufferPtr +PxeNvDataRead ( + 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 = sizeof (PXE_DB_NVDATA); - snp->cdb.DBaddr = (UINT64)(UINTN) db; + Snp->Cdb.DBsize = 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->if_num; - 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 ((EFI_D_NET, "\nsnp->undi.nvdata () ")); - (*snp->issue_undi32_command) ((UINT64)(UINTN) &snp->cdb); + (*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb); - switch (snp->cdb.StatCode) { + switch (Snp->Cdb.StatCode) { case PXE_STATCODE_SUCCESS: break; @@ -72,8 +67,8 @@ pxe_nvdata_read ( DEBUG ( (EFI_D_NET, "\nsnp->undi.nvdata() %xh:%xh\n", - snp->cdb.StatFlags, - snp->cdb.StatCode) + Snp->Cdb.StatFlags, + Snp->Cdb.StatCode) ); return EFI_UNSUPPORTED; @@ -82,61 +77,99 @@ pxe_nvdata_read ( DEBUG ( (EFI_D_NET, "\nsnp->undi.nvdata() %xh:%xh\n", - snp->cdb.StatFlags, - snp->cdb.StatCode) + Snp->Cdb.StatFlags, + Snp->Cdb.StatCode) ); return EFI_DEVICE_ERROR; } - CopyMem (BufferPtr, db->Data.Byte + RegOffset, NumBytes); + CopyMem (Buffer, Db->Data.Byte + Offset, BufferSize); return EFI_SUCCESS; } /** - This is an interface call provided by SNP. + Performs read and write operations on the NVRAM device attached to a network + interface. + + This function performs read and write operations on the NVRAM device attached + to a network interface. If ReadWrite is TRUE, a read operation is performed. + If ReadWrite is FALSE, a write operation is performed. Offset specifies the + byte offset at which to start either operation. Offset must be a multiple of + NvRamAccessSize , and it must have a value between zero and NvRamSize. + BufferSize specifies the length of the read or write operation. BufferSize must + also be a multiple of NvRamAccessSize, and Offset + BufferSize must not exceed + NvRamSize. + If any of the above conditions is not met, then EFI_INVALID_PARAMETER will be + returned. + If all the conditions are met and the operation is "read," the NVRAM device + attached to the network interface will be read into Buffer and EFI_SUCCESS + will be returned. If this is a write operation, the contents of Buffer will be + used to update the contents of the NVRAM device attached to the network + interface and EFI_SUCCESS will be returned. + It does the basic checking on the input parameters and retrieves snp structure and then calls the read_nvdata() call which does the actual reading - @param this context pointer - @param ReadOrWrite true for reading and false for writing - @param RegOffset eeprom register relative to the base - @param NumBytes how many bytes to read - @param BufferPtr address of memory to read into - + @param This A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance. + @param ReadWrite TRUE for read operations, FALSE for write operations. + @param Offset Byte offset in the NVRAM device at which to start the read or + write operation. This must be a multiple of NvRamAccessSize + and less than NvRamSize. (See EFI_SIMPLE_NETWORK_MODE) + @param BufferSize The number of bytes to read or write from the NVRAM device. + This must also be a multiple of NvramAccessSize. + @param Buffer A pointer to the data buffer. + + @retval EFI_SUCCESS The NVRAM access was performed. + @retval EFI_NOT_STARTED The network interface has not been started. + @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE: + * The This parameter is NULL + * The This parameter does not point to a valid + EFI_SIMPLE_NETWORK_PROTOCOL structure + * The Offset parameter is not a multiple of + EFI_SIMPLE_NETWORK_MODE.NvRamAccessSize + * The Offset parameter is not less than + EFI_SIMPLE_NETWORK_MODE.NvRamSize + * The BufferSize parameter is not a multiple of + EFI_SIMPLE_NETWORK_MODE.NvRamAccessSize + * The Buffer parameter is NULL + @retval EFI_DEVICE_ERROR The command could not be sent to the network + interface. + @retval EFI_UNSUPPORTED This function is not supported by the network + interface. **/ EFI_STATUS EFIAPI -snp_undi32_nvdata ( - IN EFI_SIMPLE_NETWORK_PROTOCOL *this, - IN BOOLEAN ReadOrWrite, - IN UINTN RegOffset, - IN UINTN NumBytes, - IN OUT VOID *BufferPtr +SnpUndi32NvData ( + IN EFI_SIMPLE_NETWORK_PROTOCOL *This, + IN BOOLEAN ReadWrite, + IN UINTN Offset, + IN UINTN BufferSize, + IN OUT VOID *Buffer ) { - SNP_DRIVER *snp; + SNP_DRIVER *Snp; EFI_TPL OldTpl; EFI_STATUS Status; // // Get pointer to SNP driver instance for *this. // - if (this == NULL) { + if (This == NULL) { return EFI_INVALID_PARAMETER; } - snp = EFI_SIMPLE_NETWORK_DEV_FROM_THIS (this); + Snp = EFI_SIMPLE_NETWORK_DEV_FROM_THIS (This); OldTpl = gBS->RaiseTPL (TPL_CALLBACK); // // Return error if the SNP is not initialized. // - switch (snp->mode.State) { + switch (Snp->Mode.State) { case EfiSimpleNetworkInitialized: break; @@ -151,19 +184,19 @@ snp_undi32_nvdata ( // // 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. // - if ((NumBytes == 0) || - (BufferPtr == NULL) || - (RegOffset >= snp->mode.NvRamSize) || - (RegOffset + NumBytes > snp->mode.NvRamSize) || - (NumBytes % snp->mode.NvRamAccessSize != 0) || - (RegOffset % snp->mode.NvRamAccessSize != 0) + if ((BufferSize == 0) || + (Buffer == NULL) || + (Offset >= Snp->Mode.NvRamSize) || + (Offset + BufferSize > Snp->Mode.NvRamSize) || + (BufferSize % Snp->Mode.NvRamAccessSize != 0) || + (Offset % Snp->Mode.NvRamAccessSize != 0) ) { Status = EFI_INVALID_PARAMETER; goto ON_EXIT; @@ -171,10 +204,10 @@ snp_undi32_nvdata ( // // check the implementation flags of undi if we can write the nvdata! // - if (!ReadOrWrite) { + if (!ReadWrite) { Status = EFI_UNSUPPORTED; } else { - Status = pxe_nvdata_read (snp, RegOffset, NumBytes, BufferPtr); + Status = PxeNvDataRead (Snp, Offset, BufferSize, Buffer); } ON_EXIT: