Import BaseMemoryLibMmx;
Import PeiMemoryLib; Import BasePeCoffLib; Import PeiSmbusLibSmbus2; Import DxeMemoryLib; Import HiiLib; Update UefiLib to support multiple language codes; git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2886 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
67
MdePkg/Library/DxeMemoryLib/CompareMemWrapper.c
Normal file
67
MdePkg/Library/DxeMemoryLib/CompareMemWrapper.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/** @file
|
||||||
|
CompareMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: CompareMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares the contents of two buffers.
|
||||||
|
|
||||||
|
This function compares Length bytes of SourceBuffer to Length bytes of DestinationBuffer.
|
||||||
|
If all Length bytes of the two buffers are identical, then 0 is returned. Otherwise, the
|
||||||
|
value returned is the first mismatched byte in SourceBuffer subtracted from the first
|
||||||
|
mismatched byte in DestinationBuffer.
|
||||||
|
If Length > 0 and DestinationBuffer is NULL and Length > 0, then ASSERT().
|
||||||
|
If Length > 0 and SourceBuffer is NULL and Length > 0, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
|
||||||
|
@param DestinationBuffer Pointer to the destination buffer to compare.
|
||||||
|
@param SourceBuffer Pointer to the source buffer to compare.
|
||||||
|
@param Length Number of bytes to compare.
|
||||||
|
|
||||||
|
@return 0 All Length bytes of the two buffers are identical.
|
||||||
|
@retval Non-zero The first mismatched byte in SourceBuffer subtracted from the first
|
||||||
|
mismatched byte in DestinationBuffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
CompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ASSERT (DestinationBuffer != NULL);
|
||||||
|
ASSERT (SourceBuffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
|
||||||
|
|
||||||
|
return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length);
|
||||||
|
}
|
62
MdePkg/Library/DxeMemoryLib/CopyMemWrapper.c
Normal file
62
MdePkg/Library/DxeMemoryLib/CopyMemWrapper.c
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/** @file
|
||||||
|
CopyMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: CopyMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copies a source buffer to a destination buffer, and returns the destination buffer.
|
||||||
|
|
||||||
|
This function copies Length bytes from SourceBuffer to DestinationBuffer, and returns
|
||||||
|
DestinationBuffer. The implementation must be reentrant, and it must handle the case
|
||||||
|
where SourceBuffer overlaps DestinationBuffer.
|
||||||
|
If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param DestinationBuffer Pointer to the destination buffer of the memory copy.
|
||||||
|
@param SourceBuffer Pointer to the source buffer of the memory copy.
|
||||||
|
@param Length Number of bytes to copy from SourceBuffer to DestinationBuffer.
|
||||||
|
|
||||||
|
@return DestinationBuffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
CopyMem (
|
||||||
|
OUT VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return DestinationBuffer;
|
||||||
|
}
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
|
||||||
|
|
||||||
|
if (DestinationBuffer == SourceBuffer) {
|
||||||
|
return DestinationBuffer;
|
||||||
|
}
|
||||||
|
return InternalMemCopyMem (DestinationBuffer, SourceBuffer, Length);
|
||||||
|
}
|
63
MdePkg/Library/DxeMemoryLib/DxeMemoryLib.msa
Normal file
63
MdePkg/Library/DxeMemoryLib/DxeMemoryLib.msa
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>DxeMemoryLib</ModuleName>
|
||||||
|
<ModuleType>UEFI_DRIVER</ModuleType>
|
||||||
|
<GuidValue>f1bbe03d-2f28-4dee-bec7-d98d7a30c36a</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Component description file for Dxe Memory Library.</Abstract>
|
||||||
|
<Description>Base Memory Library implementation that uses EFI Boot Services
|
||||||
|
where possible for size reduction.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>DxeMemoryLib</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_PRODUCED" SupModuleList="DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>UefiBootServicesTableLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>MemLibInternals.h</Filename>
|
||||||
|
<Filename>MemLib.c</Filename>
|
||||||
|
<Filename>MemLibGuid.c</Filename>
|
||||||
|
<Filename>MemLibGeneric.c</Filename>
|
||||||
|
<Filename>CopyMemWrapper.c</Filename>
|
||||||
|
<Filename>SetMemWrapper.c</Filename>
|
||||||
|
<Filename>SetMem16Wrapper.c</Filename>
|
||||||
|
<Filename>SetMem32Wrapper.c</Filename>
|
||||||
|
<Filename>SetMem64Wrapper.c</Filename>
|
||||||
|
<Filename>CompareMemWrapper.c</Filename>
|
||||||
|
<Filename>ZeroMemWrapper.c</Filename>
|
||||||
|
<Filename>ScanMem8Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem16Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem32Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem64Wrapper.c</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
</Externs>
|
||||||
|
</ModuleSurfaceArea>
|
41
MdePkg/Library/DxeMemoryLib/MemLib.c
Normal file
41
MdePkg/Library/DxeMemoryLib/MemLib.c
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
/** @file
|
||||||
|
Base Memory Library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCopyMem (
|
||||||
|
OUT VOID *Destination,
|
||||||
|
IN CONST VOID *Source,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
gBS->CopyMem (Destination, (VOID*)Source, Length);
|
||||||
|
return Destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Size,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
gBS->SetMem (Buffer, Size, Value);
|
||||||
|
return Buffer;
|
||||||
|
}
|
261
MdePkg/Library/DxeMemoryLib/MemLibGeneric.c
Normal file
261
MdePkg/Library/DxeMemoryLib/MemLibGeneric.c
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
/** @file
|
||||||
|
Architecture Independent Base Memory Library Implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibGeneric.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT16*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT32*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT64*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to 0 for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalMemSetMem (Buffer, Length, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two memory buffers of a given length.
|
||||||
|
|
||||||
|
@param DestinationBuffer First memory buffer
|
||||||
|
@param SourceBuffer Second memory buffer
|
||||||
|
@param Length Length of DestinationBuffer and SourceBuffer memory
|
||||||
|
regions to compare. Must be non-zero.
|
||||||
|
|
||||||
|
@retval 0 if MemOne == MemTwo
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
while ((--Length != 0) &&
|
||||||
|
(*(INT8*)DestinationBuffer == *(INT8*)SourceBuffer)) {
|
||||||
|
DestinationBuffer = (INT8*)DestinationBuffer + 1;
|
||||||
|
SourceBuffer = (INT8*)SourceBuffer + 1;
|
||||||
|
}
|
||||||
|
return (INTN)*(UINT8*)DestinationBuffer - (INTN)*(UINT8*)SourceBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the
|
||||||
|
matching 8-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT8 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT8*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the
|
||||||
|
matching 16-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT16 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT16*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the
|
||||||
|
matching 32-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT32 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT32*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the
|
||||||
|
matching 64-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT64 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT64*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
137
MdePkg/Library/DxeMemoryLib/MemLibGuid.c
Normal file
137
MdePkg/Library/DxeMemoryLib/MemLibGuid.c
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of GUID functions.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibGuid.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copies a source GUID to a destination GUID.
|
||||||
|
|
||||||
|
This function copies the contents of the 128-bit GUID specified by SourceGuid to
|
||||||
|
DestinationGuid, and returns DestinationGuid.
|
||||||
|
If DestinationGuid is NULL, then ASSERT().
|
||||||
|
If SourceGuid is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param DestinationGuid Pointer to the destination GUID.
|
||||||
|
@param SourceGuid Pointer to the source GUID.
|
||||||
|
|
||||||
|
@return DestinationGuid.
|
||||||
|
|
||||||
|
**/
|
||||||
|
GUID *
|
||||||
|
EFIAPI
|
||||||
|
CopyGuid (
|
||||||
|
OUT GUID *DestinationGuid,
|
||||||
|
IN CONST GUID *SourceGuid
|
||||||
|
)
|
||||||
|
{
|
||||||
|
WriteUnaligned64 (
|
||||||
|
(UINT64*)DestinationGuid,
|
||||||
|
ReadUnaligned64 ((CONST UINT64*)SourceGuid)
|
||||||
|
);
|
||||||
|
WriteUnaligned64 (
|
||||||
|
(UINT64*)DestinationGuid + 1,
|
||||||
|
ReadUnaligned64 ((CONST UINT64*)SourceGuid + 1)
|
||||||
|
);
|
||||||
|
return DestinationGuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two GUIDs.
|
||||||
|
|
||||||
|
This function compares Guid1 to Guid2. If the GUIDs are identical then TRUE is returned.
|
||||||
|
If there are any bit differences in the two GUIDs, then FALSE is returned.
|
||||||
|
If Guid1 is NULL, then ASSERT().
|
||||||
|
If Guid2 is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param Guid1 A pointer to a 128 bit GUID.
|
||||||
|
@param Guid2 A pointer to a 128 bit GUID.
|
||||||
|
|
||||||
|
@retval TRUE Guid1 and Guid2 are identical.
|
||||||
|
@retval FALSE Guid1 and Guid2 are not identical.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
CompareGuid (
|
||||||
|
IN CONST GUID *Guid1,
|
||||||
|
IN CONST GUID *Guid2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT64 LowPartOfGuid1;
|
||||||
|
UINT64 LowPartOfGuid2;
|
||||||
|
UINT64 HighPartOfGuid1;
|
||||||
|
UINT64 HighPartOfGuid2;
|
||||||
|
|
||||||
|
LowPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1);
|
||||||
|
LowPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2);
|
||||||
|
HighPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1 + 1);
|
||||||
|
HighPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2 + 1);
|
||||||
|
|
||||||
|
return (BOOLEAN) (LowPartOfGuid1 == LowPartOfGuid2 && HighPartOfGuid1 == HighPartOfGuid2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a GUID, and returns a pointer to the matching GUID
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from
|
||||||
|
the lowest address to the highest address at 128-bit increments for the 128-bit
|
||||||
|
GUID value that matches Guid. If a match is found, then a pointer to the matching
|
||||||
|
GUID in the target buffer is returned. If no match is found, then NULL is returned.
|
||||||
|
If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 128-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Guid Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching Guid in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanGuid (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN CONST GUID *Guid
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST GUID *GuidPtr;
|
||||||
|
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Guid->Data1) - 1)) == 0);
|
||||||
|
ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
|
||||||
|
ASSERT ((Length & (sizeof (*GuidPtr) - 1)) == 0);
|
||||||
|
|
||||||
|
GuidPtr = (GUID*)Buffer;
|
||||||
|
Buffer = GuidPtr + Length / sizeof (*GuidPtr);
|
||||||
|
while (GuidPtr < (CONST GUID*)Buffer) {
|
||||||
|
if (CompareGuid (GuidPtr, Guid)) {
|
||||||
|
return (VOID*)GuidPtr;
|
||||||
|
}
|
||||||
|
GuidPtr++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
230
MdePkg/Library/DxeMemoryLib/MemLibInternals.h
Normal file
230
MdePkg/Library/DxeMemoryLib/MemLibInternals.h
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
/** @file
|
||||||
|
Declaration of internal functions for Base Memory Library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibInternals.h
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __MEM_LIB_INTERNALS__
|
||||||
|
#define __MEM_LIB_INTERNALS__
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copy Length bytes from Source to Destination.
|
||||||
|
|
||||||
|
@param Destination Target of copy
|
||||||
|
@param Source Place to copy from
|
||||||
|
@param Length Number of bytes to copy
|
||||||
|
|
||||||
|
@return Destination
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCopyMem (
|
||||||
|
OUT VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to Value for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
@param Value Value of the set operation.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to 0 for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two memory buffers of a given length.
|
||||||
|
|
||||||
|
@param DestinationBuffer First memory buffer
|
||||||
|
@param SourceBuffer Second memory buffer
|
||||||
|
@param Length Length of DestinationBuffer and SourceBuffer memory
|
||||||
|
regions to compare. Must be non-zero.
|
||||||
|
|
||||||
|
@retval 0 if MemOne == MemTwo
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the
|
||||||
|
matching 8-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the
|
||||||
|
matching 16-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the
|
||||||
|
matching 32-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the
|
||||||
|
matching 64-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
66
MdePkg/Library/DxeMemoryLib/ScanMem16Wrapper.c
Normal file
66
MdePkg/Library/DxeMemoryLib/ScanMem16Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem16() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem16Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the matching 16-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 16-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem16 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
66
MdePkg/Library/DxeMemoryLib/ScanMem32Wrapper.c
Normal file
66
MdePkg/Library/DxeMemoryLib/ScanMem32Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem32() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem32Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the matching 32-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 32-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem32 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
66
MdePkg/Library/DxeMemoryLib/ScanMem64Wrapper.c
Normal file
66
MdePkg/Library/DxeMemoryLib/ScanMem64Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem64() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem64Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the matching 64-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 64-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem64 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
61
MdePkg/Library/DxeMemoryLib/ScanMem8Wrapper.c
Normal file
61
MdePkg/Library/DxeMemoryLib/ScanMem8Wrapper.c
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem8() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem8Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the matching 8-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for an 8-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem8 (Buffer, Length, Value);
|
||||||
|
}
|
65
MdePkg/Library/DxeMemoryLib/SetMem16Wrapper.c
Normal file
65
MdePkg/Library/DxeMemoryLib/SetMem16Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem16() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem16Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 16-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 16-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem16 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
65
MdePkg/Library/DxeMemoryLib/SetMem32Wrapper.c
Normal file
65
MdePkg/Library/DxeMemoryLib/SetMem32Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem32() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem32Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 32-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 32-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem32 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
65
MdePkg/Library/DxeMemoryLib/SetMem64Wrapper.c
Normal file
65
MdePkg/Library/DxeMemoryLib/SetMem64Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem64() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem64Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 64-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 64-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem64 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
56
MdePkg/Library/DxeMemoryLib/SetMemWrapper.c
Normal file
56
MdePkg/Library/DxeMemoryLib/SetMemWrapper.c
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a byte value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with Value, and returns Buffer.
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Length Number of bytes to set.
|
||||||
|
@param Value Value of the set operation.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
|
||||||
|
return InternalMemSetMem (Buffer, Length, Value);
|
||||||
|
}
|
51
MdePkg/Library/DxeMemoryLib/ZeroMemWrapper.c
Normal file
51
MdePkg/Library/DxeMemoryLib/ZeroMemWrapper.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/** @file
|
||||||
|
ZeroMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ZeroMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with zeros, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with zeros, and returns Buffer.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill with zeros.
|
||||||
|
@param Length Number of bytes in Buffer to fill with zeros.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!(Buffer == NULL && Length > 0));
|
||||||
|
ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
|
||||||
|
return InternalMemZeroMem (Buffer, Length);
|
||||||
|
}
|
104
MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c
Normal file
104
MdePkg/Library/DxeSmbusLib/DxeSmbusLib.c
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of SmBusLib class library for PEI phase.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: DxeSmbusLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "InternalSmbusLib.h"
|
||||||
|
|
||||||
|
#include <Protocol/SmbusHc.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Globle varible to cache pointer to Smbus protocol.
|
||||||
|
//
|
||||||
|
STATIC EFI_SMBUS_HC_PROTOCOL *mSmbus = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The constructor function caches the pointer to Smbus protocol.
|
||||||
|
|
||||||
|
The constructor function locates Smbus protocol from protocol database.
|
||||||
|
It will ASSERT() if that operation fails and it will always return EFI_SUCCESS.
|
||||||
|
|
||||||
|
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||||
|
@param SystemTable A pointer to the EFI System Table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SmbusLibConstructor (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
|
Status = gBS->LocateProtocol (&gEfiSmbusHcProtocolGuid, NULL, (VOID**) &mSmbus);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
ASSERT (mSmbus != NULL);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBus operation to an SMBus controller.
|
||||||
|
|
||||||
|
This function provides a standard way to execute Smbus script
|
||||||
|
as defined in the SmBus Specification. The data can either be of
|
||||||
|
the Length byte, word, or a block of data.
|
||||||
|
|
||||||
|
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
|
||||||
|
execute the SMBus transactions.
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Length Signifies the number of bytes that this operation will do. The maximum number of
|
||||||
|
bytes can be revision specific and operation specific.
|
||||||
|
@param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations
|
||||||
|
require this argument. The length of this buffer is identified by Length.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The actual number of bytes that are executed for this operation..
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
InternalSmBusExec (
|
||||||
|
IN EFI_SMBUS_OPERATION SmbusOperation,
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
RETURN_STATUS ReturnStatus;
|
||||||
|
EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
|
||||||
|
|
||||||
|
SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);
|
||||||
|
|
||||||
|
ReturnStatus = mSmbus->Execute (
|
||||||
|
mSmbus,
|
||||||
|
SmbusDeviceAddress,
|
||||||
|
SMBUS_LIB_COMMAND (SmBusAddress),
|
||||||
|
SmbusOperation,
|
||||||
|
SMBUS_LIB_PEC (SmBusAddress),
|
||||||
|
&Length,
|
||||||
|
Buffer
|
||||||
|
);
|
||||||
|
if (Status != NULL) {
|
||||||
|
*Status = ReturnStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Length;
|
||||||
|
}
|
58
MdePkg/Library/DxeSmbusLib/DxeSmbusLib.msa
Normal file
58
MdePkg/Library/DxeSmbusLib/DxeSmbusLib.msa
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>DxeSmbusLib</ModuleName>
|
||||||
|
<ModuleType>DXE_DRIVER</ModuleType>
|
||||||
|
<GuidValue>07720769-A7D0-4a8d-BE41-71CC18EB3338</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Component description file for Dxe Smbus Library.</Abstract>
|
||||||
|
<Description>SMBUS Library that layers on top of the SMBUS Protocol.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>DxeSmbusLib</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_PRODUCED" SupModuleList="DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER">
|
||||||
|
<Keyword>SmbusLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>UefiBootServicesTableLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>InternalSmbusLib.h</Filename>
|
||||||
|
<Filename>DxeSmbusLib.c</Filename>
|
||||||
|
<Filename>SmbusLib.c</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<Protocols>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiSmbusProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
</Protocols>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
<Extern>
|
||||||
|
<Constructor>SmbusLibConstructor</Constructor>
|
||||||
|
</Extern>
|
||||||
|
</Externs>
|
||||||
|
</ModuleSurfaceArea>
|
60
MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h
Normal file
60
MdePkg/Library/DxeSmbusLib/InternalSmbusLib.h
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/** @file
|
||||||
|
Internal header file for Smbus library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __INTERNAL_SMBUS_LIB_H
|
||||||
|
#define __INTERNAL_SMBUS_LIB_H
|
||||||
|
|
||||||
|
#include <IndustryStandard/Smbus.h>
|
||||||
|
|
||||||
|
#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f)
|
||||||
|
#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff)
|
||||||
|
#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x3f)
|
||||||
|
#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) (((SmBusAddress) & SMBUS_LIB_PEC_BIT) != 0))
|
||||||
|
#define SMBUS_LIB_RESEARVED(SmBusAddress) ((SmBusAddress) & ~(((1 << 22) - 2) | SMBUS_LIB_PEC_BIT))
|
||||||
|
|
||||||
|
//
|
||||||
|
// Declaration for internal functions
|
||||||
|
//
|
||||||
|
/**
|
||||||
|
Executes an SMBus operation to an SMBus controller.
|
||||||
|
|
||||||
|
This function provides a standard way to execute Smbus script
|
||||||
|
as defined in the SmBus Specification. The data can either be of
|
||||||
|
the Length byte, word, or a block of data.
|
||||||
|
|
||||||
|
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
|
||||||
|
execute the SMBus transactions.
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Length Signifies the number of bytes that this operation will do. The maximum number of
|
||||||
|
bytes can be revision specific and operation specific.
|
||||||
|
@param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations
|
||||||
|
require this argument. The length of this buffer is identified by Length.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The actual number of bytes that are executed for this operation.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
InternalSmBusExec (
|
||||||
|
IN EFI_SMBUS_OPERATION SmbusOperation,
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
470
MdePkg/Library/DxeSmbusLib/SmbusLib.c
Normal file
470
MdePkg/Library/DxeSmbusLib/SmbusLib.c
Normal file
@@ -0,0 +1,470 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of SmBusLib class library for PEI phase.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SmbusLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "InternalSmbusLib.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS quick read command.
|
||||||
|
|
||||||
|
Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If PEC is set in SmBusAddress, then ASSERT().
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
SmBusQuickRead (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusQuickRead, SmBusAddress, 0, NULL, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS quick write command.
|
||||||
|
|
||||||
|
Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If PEC is set in SmBusAddress, then ASSERT().
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
SmBusQuickWrite (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusQuickWrite, SmBusAddress, 0, NULL, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS receive byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
The byte received from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte received from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusReceiveByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReceiveByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS send byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The byte specified by Value is sent.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 8-bit value to send.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusSendByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT8 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Byte = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusSendByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read data byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 8-bit value read from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte read from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadDataByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReadByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write data byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 8-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 8-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteDataByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT8 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Byte = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusWriteByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read data word command.
|
||||||
|
|
||||||
|
Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 16-bit value read from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte read from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadDataWord (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Word;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReadWord, SmBusAddress, 2, &Word, Status);
|
||||||
|
|
||||||
|
return Word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write data word command.
|
||||||
|
|
||||||
|
Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 16-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 16-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteDataWord (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT16 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Word;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Word = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusWriteWord, SmBusAddress, 2, &Word, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS process call command.
|
||||||
|
|
||||||
|
Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 16-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 16-bit value returned by the process call command is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 16-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The 16-bit value returned by the process call command.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusProcessCall (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT16 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusProcessCall, SmBusAddress, 2, &Value, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read block command.
|
||||||
|
|
||||||
|
Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Bytes are read from the SMBUS and stored in Buffer.
|
||||||
|
The number of bytes read is returned, and will never return a value larger than 32-bytes.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||||
|
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Buffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes read.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadBlock (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x20, Buffer, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write block command.
|
||||||
|
|
||||||
|
Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||||
|
Bytes are written to the SMBUS from Buffer.
|
||||||
|
The number of bytes written is returned, and will never return a value larger than 32-bytes.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||||
|
If Buffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes written.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteBlock (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN Length;
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Length = SMBUS_LIB_LENGTH (SmBusAddress);
|
||||||
|
return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, Length, Buffer, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS block process call command.
|
||||||
|
|
||||||
|
Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||||
|
Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
|
||||||
|
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||||
|
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||||
|
If WriteBuffer is NULL, then ASSERT().
|
||||||
|
If ReadBuffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
|
||||||
|
@param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes written.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusBlockProcessCall (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN VOID *WriteBuffer,
|
||||||
|
OUT VOID *ReadBuffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN Length;
|
||||||
|
|
||||||
|
ASSERT (WriteBuffer != NULL);
|
||||||
|
ASSERT (ReadBuffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Length = SMBUS_LIB_LENGTH (SmBusAddress);
|
||||||
|
//
|
||||||
|
// Assuming that ReadBuffer is large enough to save another memory copy.
|
||||||
|
//
|
||||||
|
ReadBuffer = CopyMem (ReadBuffer, WriteBuffer, Length);
|
||||||
|
return InternalSmBusExec (EfiSmbusBWBRProcessCall, SmBusAddress, Length, ReadBuffer, Status);
|
||||||
|
}
|
42
MdePkg/Library/HiiLib/HiiLib.c
Normal file
42
MdePkg/Library/HiiLib/HiiLib.c
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/** @file
|
||||||
|
HII Library implementation that uses DXE protocols and services.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: HiiLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function allocates pool for an EFI_HII_PACKAGES structure
|
||||||
|
with enough space for the variable argument list of package pointers.
|
||||||
|
The allocated structure is initialized using NumberOfPackages, Guid,
|
||||||
|
and the variable length argument list of package pointers.
|
||||||
|
|
||||||
|
@param NumberOfPackages The number of HII packages to prepare.
|
||||||
|
@param Guid Package GUID.
|
||||||
|
|
||||||
|
@return The allocated and initialized packages.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_HII_PACKAGE_LIST_HEADER *
|
||||||
|
EFIAPI
|
||||||
|
PreparePackages (
|
||||||
|
IN CONST UINTN NumberOfPackages,
|
||||||
|
IN CONST EFI_GUID *Guid OPTIONAL,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// BugBug: Need more detail on UEFI spec.
|
||||||
|
//
|
||||||
|
ASSERT (FALSE);
|
||||||
|
return NULL;
|
||||||
|
}
|
45
MdePkg/Library/HiiLib/HiiLib.msa
Normal file
45
MdePkg/Library/HiiLib/HiiLib.msa
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>HiiLib</ModuleName>
|
||||||
|
<ModuleType>DXE_DRIVER</ModuleType>
|
||||||
|
<GuidValue>1e2c4c2e-67e6-4e57-b3ae-cf5a5af72c2c</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Library instance for HII common routines.</Abstract>
|
||||||
|
<Description>This library instance implements the common HII routines.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>HiiLib</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_PRODUCED" SupModuleList="DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER">
|
||||||
|
<Keyword>HiiLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>MemoryAllocationLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>HiiLib.c</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
</Externs>
|
||||||
|
</ModuleSurfaceArea>
|
67
MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c
Normal file
67
MdePkg/Library/PeiMemoryLib/CompareMemWrapper.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/** @file
|
||||||
|
CompareMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: CompareMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares the contents of two buffers.
|
||||||
|
|
||||||
|
This function compares Length bytes of SourceBuffer to Length bytes of DestinationBuffer.
|
||||||
|
If all Length bytes of the two buffers are identical, then 0 is returned. Otherwise, the
|
||||||
|
value returned is the first mismatched byte in SourceBuffer subtracted from the first
|
||||||
|
mismatched byte in DestinationBuffer.
|
||||||
|
If Length > 0 and DestinationBuffer is NULL and Length > 0, then ASSERT().
|
||||||
|
If Length > 0 and SourceBuffer is NULL and Length > 0, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
|
||||||
|
@param DestinationBuffer Pointer to the destination buffer to compare.
|
||||||
|
@param SourceBuffer Pointer to the source buffer to compare.
|
||||||
|
@param Length Number of bytes to compare.
|
||||||
|
|
||||||
|
@return 0 All Length bytes of the two buffers are identical.
|
||||||
|
@retval Non-zero The first mismatched byte in SourceBuffer subtracted from the first
|
||||||
|
mismatched byte in DestinationBuffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
CompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
ASSERT (DestinationBuffer != NULL);
|
||||||
|
ASSERT (SourceBuffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
|
||||||
|
|
||||||
|
return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length);
|
||||||
|
}
|
62
MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c
Normal file
62
MdePkg/Library/PeiMemoryLib/CopyMemWrapper.c
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/** @file
|
||||||
|
CopyMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: CopyMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copies a source buffer to a destination buffer, and returns the destination buffer.
|
||||||
|
|
||||||
|
This function copies Length bytes from SourceBuffer to DestinationBuffer, and returns
|
||||||
|
DestinationBuffer. The implementation must be reentrant, and it must handle the case
|
||||||
|
where SourceBuffer overlaps DestinationBuffer.
|
||||||
|
If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param DestinationBuffer Pointer to the destination buffer of the memory copy.
|
||||||
|
@param SourceBuffer Pointer to the source buffer of the memory copy.
|
||||||
|
@param Length Number of bytes to copy from SourceBuffer to DestinationBuffer.
|
||||||
|
|
||||||
|
@return DestinationBuffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
CopyMem (
|
||||||
|
OUT VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return DestinationBuffer;
|
||||||
|
}
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
|
||||||
|
|
||||||
|
if (DestinationBuffer == SourceBuffer) {
|
||||||
|
return DestinationBuffer;
|
||||||
|
}
|
||||||
|
return InternalMemCopyMem (DestinationBuffer, SourceBuffer, Length);
|
||||||
|
}
|
49
MdePkg/Library/PeiMemoryLib/MemLib.c
Normal file
49
MdePkg/Library/PeiMemoryLib/MemLib.c
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/** @file
|
||||||
|
Base Memory Library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCopyMem (
|
||||||
|
OUT VOID *Destination,
|
||||||
|
IN CONST VOID *Source,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
(*GetPeiServicesTablePointer ())->CopyMem (
|
||||||
|
Destination,
|
||||||
|
(VOID*)Source,
|
||||||
|
Length
|
||||||
|
);
|
||||||
|
return Destination;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Size,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
(*GetPeiServicesTablePointer ())->SetMem (
|
||||||
|
Buffer,
|
||||||
|
Size,
|
||||||
|
Value
|
||||||
|
);
|
||||||
|
return Buffer;
|
||||||
|
}
|
261
MdePkg/Library/PeiMemoryLib/MemLibGeneric.c
Normal file
261
MdePkg/Library/PeiMemoryLib/MemLibGeneric.c
Normal file
@@ -0,0 +1,261 @@
|
|||||||
|
/** @file
|
||||||
|
Architecture Independent Base Memory Library Implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibGeneric.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT16*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT32*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
((UINT64*)Buffer)[--Length] = Value;
|
||||||
|
} while (Length != 0);
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to 0 for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return InternalMemSetMem (Buffer, Length, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two memory buffers of a given length.
|
||||||
|
|
||||||
|
@param DestinationBuffer First memory buffer
|
||||||
|
@param SourceBuffer Second memory buffer
|
||||||
|
@param Length Length of DestinationBuffer and SourceBuffer memory
|
||||||
|
regions to compare. Must be non-zero.
|
||||||
|
|
||||||
|
@retval 0 if MemOne == MemTwo
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
while ((--Length != 0) &&
|
||||||
|
(*(INT8*)DestinationBuffer == *(INT8*)SourceBuffer)) {
|
||||||
|
DestinationBuffer = (INT8*)DestinationBuffer + 1;
|
||||||
|
SourceBuffer = (INT8*)SourceBuffer + 1;
|
||||||
|
}
|
||||||
|
return (INTN)*(UINT8*)DestinationBuffer - (INTN)*(UINT8*)SourceBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the
|
||||||
|
matching 8-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT8 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT8*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the
|
||||||
|
matching 16-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT16 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT16*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the
|
||||||
|
matching 32-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT32 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT32*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the
|
||||||
|
matching 64-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST UINT64 *Pointer;
|
||||||
|
|
||||||
|
Pointer = (CONST UINT64*)Buffer;
|
||||||
|
do {
|
||||||
|
if (*(Pointer++) == Value) {
|
||||||
|
return Pointer;
|
||||||
|
}
|
||||||
|
} while (--Length != 0);
|
||||||
|
return NULL;
|
||||||
|
}
|
137
MdePkg/Library/PeiMemoryLib/MemLibGuid.c
Normal file
137
MdePkg/Library/PeiMemoryLib/MemLibGuid.c
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of GUID functions.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibGuid.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copies a source GUID to a destination GUID.
|
||||||
|
|
||||||
|
This function copies the contents of the 128-bit GUID specified by SourceGuid to
|
||||||
|
DestinationGuid, and returns DestinationGuid.
|
||||||
|
If DestinationGuid is NULL, then ASSERT().
|
||||||
|
If SourceGuid is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param DestinationGuid Pointer to the destination GUID.
|
||||||
|
@param SourceGuid Pointer to the source GUID.
|
||||||
|
|
||||||
|
@return DestinationGuid.
|
||||||
|
|
||||||
|
**/
|
||||||
|
GUID *
|
||||||
|
EFIAPI
|
||||||
|
CopyGuid (
|
||||||
|
OUT GUID *DestinationGuid,
|
||||||
|
IN CONST GUID *SourceGuid
|
||||||
|
)
|
||||||
|
{
|
||||||
|
WriteUnaligned64 (
|
||||||
|
(UINT64*)DestinationGuid,
|
||||||
|
ReadUnaligned64 ((CONST UINT64*)SourceGuid)
|
||||||
|
);
|
||||||
|
WriteUnaligned64 (
|
||||||
|
(UINT64*)DestinationGuid + 1,
|
||||||
|
ReadUnaligned64 ((CONST UINT64*)SourceGuid + 1)
|
||||||
|
);
|
||||||
|
return DestinationGuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two GUIDs.
|
||||||
|
|
||||||
|
This function compares Guid1 to Guid2. If the GUIDs are identical then TRUE is returned.
|
||||||
|
If there are any bit differences in the two GUIDs, then FALSE is returned.
|
||||||
|
If Guid1 is NULL, then ASSERT().
|
||||||
|
If Guid2 is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param Guid1 A pointer to a 128 bit GUID.
|
||||||
|
@param Guid2 A pointer to a 128 bit GUID.
|
||||||
|
|
||||||
|
@retval TRUE Guid1 and Guid2 are identical.
|
||||||
|
@retval FALSE Guid1 and Guid2 are not identical.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
CompareGuid (
|
||||||
|
IN CONST GUID *Guid1,
|
||||||
|
IN CONST GUID *Guid2
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT64 LowPartOfGuid1;
|
||||||
|
UINT64 LowPartOfGuid2;
|
||||||
|
UINT64 HighPartOfGuid1;
|
||||||
|
UINT64 HighPartOfGuid2;
|
||||||
|
|
||||||
|
LowPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1);
|
||||||
|
LowPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2);
|
||||||
|
HighPartOfGuid1 = ReadUnaligned64 ((CONST UINT64*) Guid1 + 1);
|
||||||
|
HighPartOfGuid2 = ReadUnaligned64 ((CONST UINT64*) Guid2 + 1);
|
||||||
|
|
||||||
|
return (BOOLEAN) (LowPartOfGuid1 == LowPartOfGuid2 && HighPartOfGuid1 == HighPartOfGuid2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a GUID, and returns a pointer to the matching GUID
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from
|
||||||
|
the lowest address to the highest address at 128-bit increments for the 128-bit
|
||||||
|
GUID value that matches Guid. If a match is found, then a pointer to the matching
|
||||||
|
GUID in the target buffer is returned. If no match is found, then NULL is returned.
|
||||||
|
If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 128-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Guid Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching Guid in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanGuid (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN CONST GUID *Guid
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CONST GUID *GuidPtr;
|
||||||
|
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Guid->Data1) - 1)) == 0);
|
||||||
|
ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
|
||||||
|
ASSERT ((Length & (sizeof (*GuidPtr) - 1)) == 0);
|
||||||
|
|
||||||
|
GuidPtr = (GUID*)Buffer;
|
||||||
|
Buffer = GuidPtr + Length / sizeof (*GuidPtr);
|
||||||
|
while (GuidPtr < (CONST GUID*)Buffer) {
|
||||||
|
if (CompareGuid (GuidPtr, Guid)) {
|
||||||
|
return (VOID*)GuidPtr;
|
||||||
|
}
|
||||||
|
GuidPtr++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
230
MdePkg/Library/PeiMemoryLib/MemLibInternals.h
Normal file
230
MdePkg/Library/PeiMemoryLib/MemLibInternals.h
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
/** @file
|
||||||
|
Declaration of internal functions for Base Memory Library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: MemLibInternals.h
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __MEM_LIB_INTERNALS__
|
||||||
|
#define __MEM_LIB_INTERNALS__
|
||||||
|
|
||||||
|
/**
|
||||||
|
Copy Length bytes from Source to Destination.
|
||||||
|
|
||||||
|
@param Destination Target of copy
|
||||||
|
@param Source Place to copy from
|
||||||
|
@param Length Number of bytes to copy
|
||||||
|
|
||||||
|
@return Destination
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCopyMem (
|
||||||
|
OUT VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to Value for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
@param Value Value of the set operation.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemSetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set Buffer to 0 for Size bytes.
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Size Number of bytes to set
|
||||||
|
|
||||||
|
@return Buffer
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Compares two memory buffers of a given length.
|
||||||
|
|
||||||
|
@param DestinationBuffer First memory buffer
|
||||||
|
@param SourceBuffer Second memory buffer
|
||||||
|
@param Length Length of DestinationBuffer and SourceBuffer memory
|
||||||
|
regions to compare. Must be non-zero.
|
||||||
|
|
||||||
|
@retval 0 if MemOne == MemTwo
|
||||||
|
|
||||||
|
**/
|
||||||
|
INTN
|
||||||
|
EFIAPI
|
||||||
|
InternalMemCompareMem (
|
||||||
|
IN CONST VOID *DestinationBuffer,
|
||||||
|
IN CONST VOID *SourceBuffer,
|
||||||
|
IN UINTN Length
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the
|
||||||
|
matching 8-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the
|
||||||
|
matching 16-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the
|
||||||
|
matching 32-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the
|
||||||
|
matching 64-bit value in the target buffer.
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan. Must be non-zero.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return Pointer to the first occurrence or NULL if not found.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CONST VOID *
|
||||||
|
EFIAPI
|
||||||
|
InternalMemScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
63
MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa
Normal file
63
MdePkg/Library/PeiMemoryLib/PeiMemoryLib.msa
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>PeiMemoryLib</ModuleName>
|
||||||
|
<ModuleType>PEIM</ModuleType>
|
||||||
|
<GuidValue>3a9759d2-53bc-4eb2-abcd-c93099419063</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Component description file for Pei Memory Library</Abstract>
|
||||||
|
<Description>Base Memory Library implementation that uses PEI Services
|
||||||
|
where possible for size reduction.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>PeiMemoryLib</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_PRODUCED" SupModuleList="PEIM">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PeiServicesTablePointerLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>MemLibInternals.h</Filename>
|
||||||
|
<Filename>MemLib.c</Filename>
|
||||||
|
<Filename>MemLibGuid.c</Filename>
|
||||||
|
<Filename>MemLibGeneric.c</Filename>
|
||||||
|
<Filename>CopyMemWrapper.c</Filename>
|
||||||
|
<Filename>SetMemWrapper.c</Filename>
|
||||||
|
<Filename>SetMem16Wrapper.c</Filename>
|
||||||
|
<Filename>SetMem32Wrapper.c</Filename>
|
||||||
|
<Filename>SetMem64Wrapper.c</Filename>
|
||||||
|
<Filename>CompareMemWrapper.c</Filename>
|
||||||
|
<Filename>ZeroMemWrapper.c</Filename>
|
||||||
|
<Filename>ScanMem8Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem16Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem32Wrapper.c</Filename>
|
||||||
|
<Filename>ScanMem64Wrapper.c</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
</Externs>
|
||||||
|
</ModuleSurfaceArea>
|
66
MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c
Normal file
66
MdePkg/Library/PeiMemoryLib/ScanMem16Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem16() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem16Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 16-bit value, and returns a pointer to the matching 16-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 16-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem16 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem16 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
66
MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c
Normal file
66
MdePkg/Library/PeiMemoryLib/ScanMem32Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem32() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem32Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 32-bit value, and returns a pointer to the matching 32-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 32-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem32 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem32 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
66
MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c
Normal file
66
MdePkg/Library/PeiMemoryLib/ScanMem64Wrapper.c
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem64() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem64Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for a 64-bit value, and returns a pointer to the matching 64-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for a 64-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Buffer is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem64 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem64 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
61
MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c
Normal file
61
MdePkg/Library/PeiMemoryLib/ScanMem8Wrapper.c
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/** @file
|
||||||
|
ScanMem8() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ScanMem8Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Scans a target buffer for an 8-bit value, and returns a pointer to the matching 8-bit value
|
||||||
|
in the target buffer.
|
||||||
|
|
||||||
|
This function searches target the buffer specified by Buffer and Length from the lowest
|
||||||
|
address to the highest address for an 8-bit value that matches Value. If a match is found,
|
||||||
|
then a pointer to the matching byte in the target buffer is returned. If no match is found,
|
||||||
|
then NULL is returned. If Length is 0, then NULL is returned.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to scan.
|
||||||
|
@param Length Number of bytes in Buffer to scan.
|
||||||
|
@param Value Value to search for in the target buffer.
|
||||||
|
|
||||||
|
@return A pointer to the matching byte in the target buffer or NULL otherwise.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ScanMem8 (
|
||||||
|
IN CONST VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
|
||||||
|
return (VOID*)InternalMemScanMem8 (Buffer, Length, Value);
|
||||||
|
}
|
65
MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c
Normal file
65
MdePkg/Library/PeiMemoryLib/SetMem16Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem16() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem16Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 16-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 16-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 16-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 16-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem16 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT16 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem16 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
65
MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c
Normal file
65
MdePkg/Library/PeiMemoryLib/SetMem32Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem32() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem32Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 32-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 32-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 32-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 32-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem32 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT32 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem32 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
65
MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c
Normal file
65
MdePkg/Library/PeiMemoryLib/SetMem64Wrapper.c
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem64() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMem64Wrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a 64-bit value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with the 64-bit value specified by
|
||||||
|
Value, and returns Buffer. Value is repeated every 64-bits in for Length
|
||||||
|
bytes of Buffer.
|
||||||
|
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
||||||
|
If Buffer is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
If Length is not aligned on a 64-bit boundary, then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill.
|
||||||
|
@param Length Number of bytes in Buffer to fill.
|
||||||
|
@param Value Value with which to fill Length bytes of Buffer.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem64 (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT64 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
|
||||||
|
ASSERT ((Length & (sizeof (Value) - 1)) == 0);
|
||||||
|
|
||||||
|
return InternalMemSetMem64 (Buffer, Length / sizeof (Value), Value);
|
||||||
|
}
|
56
MdePkg/Library/PeiMemoryLib/SetMemWrapper.c
Normal file
56
MdePkg/Library/PeiMemoryLib/SetMemWrapper.c
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/** @file
|
||||||
|
SetMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SetMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with a byte value, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with Value, and returns Buffer.
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Memory to set.
|
||||||
|
@param Length Number of bytes to set.
|
||||||
|
@param Value Value of the set operation.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
SetMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN UINT8 Value
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Length == 0) {
|
||||||
|
return Buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
||||||
|
|
||||||
|
return InternalMemSetMem (Buffer, Length, Value);
|
||||||
|
}
|
51
MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c
Normal file
51
MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/** @file
|
||||||
|
ZeroMem() implementation.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: ZeroMemWrapper.c
|
||||||
|
|
||||||
|
The following BaseMemoryLib instances share the same version of this file:
|
||||||
|
|
||||||
|
BaseMemoryLib
|
||||||
|
BaseMemoryLibMmx
|
||||||
|
BaseMemoryLibSse2
|
||||||
|
BaseMemoryLibRepStr
|
||||||
|
PeiMemoryLib
|
||||||
|
DxeMemoryLib
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "MemLibInternals.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Fills a target buffer with zeros, and returns the target buffer.
|
||||||
|
|
||||||
|
This function fills Length bytes of Buffer with zeros, and returns Buffer.
|
||||||
|
If Length > 0 and Buffer is NULL, then ASSERT().
|
||||||
|
If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT().
|
||||||
|
|
||||||
|
@param Buffer Pointer to the target buffer to fill with zeros.
|
||||||
|
@param Length Number of bytes in Buffer to fill with zeros.
|
||||||
|
|
||||||
|
@return Buffer.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
ZeroMem (
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
IN UINTN Length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!(Buffer == NULL && Length > 0));
|
||||||
|
ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
|
||||||
|
return InternalMemZeroMem (Buffer, Length);
|
||||||
|
}
|
74
MdePkg/Library/PeiSmbusLibSmbus2/InternalSmbusLib.h
Normal file
74
MdePkg/Library/PeiSmbusLibSmbus2/InternalSmbusLib.h
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/** @file
|
||||||
|
Internal header file for Smbus library.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef __INTERNAL_SMBUS_LIB_H
|
||||||
|
#define __INTERNAL_SMBUS_LIB_H
|
||||||
|
|
||||||
|
#define SMBUS_LIB_SLAVE_ADDRESS(SmBusAddress) (((SmBusAddress) >> 1) & 0x7f)
|
||||||
|
#define SMBUS_LIB_COMMAND(SmBusAddress) (((SmBusAddress) >> 8) & 0xff)
|
||||||
|
#define SMBUS_LIB_LENGTH(SmBusAddress) (((SmBusAddress) >> 16) & 0x3f)
|
||||||
|
#define SMBUS_LIB_PEC(SmBusAddress) ((BOOLEAN) (((SmBusAddress) & SMBUS_LIB_PEC_BIT) != 0))
|
||||||
|
#define SMBUS_LIB_RESEARVED(SmBusAddress) ((SmBusAddress) & ~(((1 << 22) - 2) | SMBUS_LIB_PEC_BIT))
|
||||||
|
|
||||||
|
//
|
||||||
|
// Declaration for internal functions
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gets Smbus PPIs.
|
||||||
|
|
||||||
|
This internal function retrieves Smbus PPI from PPI database.
|
||||||
|
|
||||||
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES published by the PEI Foundation.
|
||||||
|
|
||||||
|
@return The pointer to Smbus PPI.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_PEI_SMBUS2_PPI *
|
||||||
|
InternalGetSmbusPpi (
|
||||||
|
EFI_PEI_SERVICES **PeiServices
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBus operation to an SMBus controller.
|
||||||
|
|
||||||
|
This function provides a standard way to execute Smbus script
|
||||||
|
as defined in the SmBus Specification. The data can either be of
|
||||||
|
the Length byte, word, or a block of data.
|
||||||
|
|
||||||
|
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
|
||||||
|
execute the SMBus transactions.
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Length Signifies the number of bytes that this operation will do. The maximum number of
|
||||||
|
bytes can be revision specific and operation specific.
|
||||||
|
@param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations
|
||||||
|
require this argument. The length of this buffer is identified by Length.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The actual number of bytes that are executed for this operation.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
InternalSmBusExec (
|
||||||
|
IN EFI_SMBUS_OPERATION SmbusOperation,
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif
|
100
MdePkg/Library/PeiSmbusLibSmbus2/PeiSmbusLib.c
Normal file
100
MdePkg/Library/PeiSmbusLibSmbus2/PeiSmbusLib.c
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of SmBusLib class library for PEI phase.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: PeiSmbusLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <Ppi/Smbus2.h>
|
||||||
|
|
||||||
|
#include "InternalSmbusLib.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Gets Smbus PPIs.
|
||||||
|
|
||||||
|
This internal function retrieves Smbus PPI from PPI database.
|
||||||
|
|
||||||
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES published by the PEI Foundation.
|
||||||
|
|
||||||
|
@return The pointer to Smbus PPI.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_PEI_SMBUS2_PPI *
|
||||||
|
InternalGetSmbusPpi (
|
||||||
|
EFI_PEI_SERVICES **PeiServices
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_PEI_SMBUS2_PPI *SmbusPpi;
|
||||||
|
|
||||||
|
Status = (*PeiServices)->LocatePpi (PeiServices, &gEfiPeiSmbus2PpiGuid, 0, NULL, (VOID **) &SmbusPpi);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
ASSERT (SmbusPpi != NULL);
|
||||||
|
|
||||||
|
return SmbusPpi;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBus operation to an SMBus controller.
|
||||||
|
|
||||||
|
This function provides a standard way to execute Smbus script
|
||||||
|
as defined in the SmBus Specification. The data can either be of
|
||||||
|
the Length byte, word, or a block of data.
|
||||||
|
|
||||||
|
@param SmbusOperation Signifies which particular SMBus hardware protocol instance that it will use to
|
||||||
|
execute the SMBus transactions.
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Length Signifies the number of bytes that this operation will do. The maximum number of
|
||||||
|
bytes can be revision specific and operation specific.
|
||||||
|
@param Buffer Contains the value of data to execute to the SMBus slave device. Not all operations
|
||||||
|
require this argument. The length of this buffer is identified by Length.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The actual number of bytes that are executed for this operation..
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
InternalSmBusExec (
|
||||||
|
IN EFI_SMBUS_OPERATION SmbusOperation,
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINTN Length,
|
||||||
|
IN OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_PEI_SMBUS2_PPI *SmbusPpi;
|
||||||
|
EFI_PEI_SERVICES **PeiServices;
|
||||||
|
RETURN_STATUS ReturnStatus;
|
||||||
|
EFI_SMBUS_DEVICE_ADDRESS SmbusDeviceAddress;
|
||||||
|
|
||||||
|
PeiServices = GetPeiServicesTablePointer ();
|
||||||
|
SmbusPpi = InternalGetSmbusPpi (PeiServices);
|
||||||
|
SmbusDeviceAddress.SmbusDeviceAddress = SMBUS_LIB_SLAVE_ADDRESS (SmBusAddress);
|
||||||
|
|
||||||
|
ReturnStatus = SmbusPpi->Execute (
|
||||||
|
SmbusPpi,
|
||||||
|
SmbusDeviceAddress,
|
||||||
|
SMBUS_LIB_COMMAND (SmBusAddress),
|
||||||
|
SmbusOperation,
|
||||||
|
SMBUS_LIB_PEC (SmBusAddress),
|
||||||
|
&Length,
|
||||||
|
Buffer
|
||||||
|
);
|
||||||
|
if (Status != NULL) {
|
||||||
|
*Status = ReturnStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Length;
|
||||||
|
}
|
55
MdePkg/Library/PeiSmbusLibSmbus2/PeiSmbusLib.msa
Normal file
55
MdePkg/Library/PeiSmbusLibSmbus2/PeiSmbusLib.msa
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<MsaHeader>
|
||||||
|
<ModuleName>PeiSmbusLib</ModuleName>
|
||||||
|
<ModuleType>PEIM</ModuleType>
|
||||||
|
<GuidValue>51C4C059-67F0-4e3c-9A55-FF42A8291C8C</GuidValue>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<Abstract>Component description file for Pei Smbus Library.</Abstract>
|
||||||
|
<Description>SMBUS library that layers on top of the SMBUS PPI.</Description>
|
||||||
|
<Copyright>Copyright (c) 2006 - 2007, Intel Corporation</Copyright>
|
||||||
|
<License>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.</License>
|
||||||
|
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||||
|
</MsaHeader>
|
||||||
|
<ModuleDefinitions>
|
||||||
|
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||||
|
<BinaryModule>false</BinaryModule>
|
||||||
|
<OutputFileBasename>PeiSmbusLib</OutputFileBasename>
|
||||||
|
</ModuleDefinitions>
|
||||||
|
<LibraryClassDefinitions>
|
||||||
|
<LibraryClass Usage="ALWAYS_PRODUCED" SupModuleList="PEIM">
|
||||||
|
<Keyword>SmbusLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>DebugLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>PeiServicesTablePointerLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||||
|
<Keyword>BaseMemoryLib</Keyword>
|
||||||
|
</LibraryClass>
|
||||||
|
</LibraryClassDefinitions>
|
||||||
|
<SourceFiles>
|
||||||
|
<Filename>InternalSmbusLib.h</Filename>
|
||||||
|
<Filename>PeiSmbusLib.c</Filename>
|
||||||
|
<Filename>SmbusLib.c</Filename>
|
||||||
|
</SourceFiles>
|
||||||
|
<PackageDependencies>
|
||||||
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
|
</PackageDependencies>
|
||||||
|
<PPIs>
|
||||||
|
<Ppi Usage="ALWAYS_CONSUMED">
|
||||||
|
<PpiCName>gEfiPeiSmbusPpiGuid</PpiCName>
|
||||||
|
</Ppi>
|
||||||
|
</PPIs>
|
||||||
|
<Externs>
|
||||||
|
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||||
|
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||||
|
</Externs>
|
||||||
|
</ModuleSurfaceArea>
|
471
MdePkg/Library/PeiSmbusLibSmbus2/SmbusLib.c
Normal file
471
MdePkg/Library/PeiSmbusLibSmbus2/SmbusLib.c
Normal file
@@ -0,0 +1,471 @@
|
|||||||
|
/** @file
|
||||||
|
Implementation of SmBusLib class library for PEI phase.
|
||||||
|
|
||||||
|
Copyright (c) 2006, Intel Corporation<BR>
|
||||||
|
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: SmbusLib.c
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include <Ppi/Smbus2.h>
|
||||||
|
#include "InternalSmbusLib.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS quick read command.
|
||||||
|
|
||||||
|
Executes an SMBUS quick read command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If PEC is set in SmBusAddress, then ASSERT().
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
SmBusQuickRead (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusQuickRead, SmBusAddress, 0, NULL, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS quick write command.
|
||||||
|
|
||||||
|
Executes an SMBUS quick write command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If PEC is set in SmBusAddress, then ASSERT().
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
SmBusQuickWrite (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (!SMBUS_LIB_PEC (SmBusAddress));
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusQuickWrite, SmBusAddress, 0, NULL, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS receive byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS receive byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required.
|
||||||
|
The byte received from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte received from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusReceiveByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReceiveByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS send byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS send byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The byte specified by Value is sent.
|
||||||
|
Only the SMBUS slave address field of SmBusAddress is required. Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Command in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 8-bit value to send.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusSendByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT8 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_COMMAND (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Byte = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusSendByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read data byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS read data byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 8-bit value read from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte read from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadDataByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReadByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Byte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write data byte command.
|
||||||
|
|
||||||
|
Executes an SMBUS write data byte command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 8-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 8-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteDataByte (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT8 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT8 Byte;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Byte = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusWriteByte, SmBusAddress, 1, &Byte, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read data word command.
|
||||||
|
|
||||||
|
Executes an SMBUS read data word command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 16-bit value read from the SMBUS is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The byte read from the SMBUS.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadDataWord (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Word;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusReadWord, SmBusAddress, 2, &Word, Status);
|
||||||
|
|
||||||
|
return Word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write data word command.
|
||||||
|
|
||||||
|
Executes an SMBUS write data word command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 16-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Value is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 16-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The parameter of Value.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteDataWord (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT16 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT16 Word;
|
||||||
|
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Word = Value;
|
||||||
|
InternalSmBusExec (EfiSmbusWriteWord, SmBusAddress, 2, &Word, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS process call command.
|
||||||
|
|
||||||
|
Executes an SMBUS process call command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The 16-bit value specified by Value is written.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
The 16-bit value returned by the process call command is returned.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Value The 16-bit value to write.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The 16-bit value returned by the process call command.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT16
|
||||||
|
EFIAPI
|
||||||
|
SmBusProcessCall (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN UINT16 Value,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
InternalSmBusExec (EfiSmbusProcessCall, SmBusAddress, 2, &Value, Status);
|
||||||
|
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS read block command.
|
||||||
|
|
||||||
|
Executes an SMBUS read block command on the SMBUS device specified by SmBusAddress.
|
||||||
|
Only the SMBUS slave address and SMBUS command fields of SmBusAddress are required.
|
||||||
|
Bytes are read from the SMBUS and stored in Buffer.
|
||||||
|
The number of bytes read is returned, and will never return a value larger than 32-bytes.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
|
||||||
|
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||||
|
If Length in SmBusAddress is not zero, then ASSERT().
|
||||||
|
If Buffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes read.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusReadBlock (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) == 0);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
return InternalSmBusExec (EfiSmbusReadBlock, SmBusAddress, 0x20, Buffer, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS write block command.
|
||||||
|
|
||||||
|
Executes an SMBUS write block command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||||
|
Bytes are written to the SMBUS from Buffer.
|
||||||
|
The number of bytes written is returned, and will never return a value larger than 32-bytes.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||||
|
If Buffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param Buffer Pointer to the buffer to store the bytes read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes written.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusWriteBlock (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
OUT VOID *Buffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN Length;
|
||||||
|
|
||||||
|
ASSERT (Buffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Length = SMBUS_LIB_LENGTH (SmBusAddress);
|
||||||
|
return InternalSmBusExec (EfiSmbusWriteBlock, SmBusAddress, Length, Buffer, Status);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Executes an SMBUS block process call command.
|
||||||
|
|
||||||
|
Executes an SMBUS block process call command on the SMBUS device specified by SmBusAddress.
|
||||||
|
The SMBUS slave address, SMBUS command, and SMBUS length fields of SmBusAddress are required.
|
||||||
|
Bytes are written to the SMBUS from WriteBuffer. Bytes are then read from the SMBUS into ReadBuffer.
|
||||||
|
If Status is not NULL, then the status of the executed command is returned in Status.
|
||||||
|
It is the caller's responsibility to make sure ReadBuffer is large enough for the total number of bytes read.
|
||||||
|
SMBUS supports a maximum transfer size of 32 bytes, so Buffer does not need to be any larger than 32 bytes.
|
||||||
|
If Length in SmBusAddress is zero or greater than 32, then ASSERT().
|
||||||
|
If WriteBuffer is NULL, then ASSERT().
|
||||||
|
If ReadBuffer is NULL, then ASSERT().
|
||||||
|
If any reserved bits of SmBusAddress are set, then ASSERT().
|
||||||
|
|
||||||
|
@param SmBusAddress Address that encodes the SMBUS Slave Address,
|
||||||
|
SMBUS Command, SMBUS Data Length, and PEC.
|
||||||
|
@param WriteBuffer Pointer to the buffer of bytes to write to the SMBUS.
|
||||||
|
@param ReadBuffer Pointer to the buffer of bytes to read from the SMBUS.
|
||||||
|
@param Status Return status for the executed command.
|
||||||
|
This is an optional parameter and may be NULL.
|
||||||
|
|
||||||
|
@return The number of bytes written.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINTN
|
||||||
|
EFIAPI
|
||||||
|
SmBusBlockProcessCall (
|
||||||
|
IN UINTN SmBusAddress,
|
||||||
|
IN VOID *WriteBuffer,
|
||||||
|
OUT VOID *ReadBuffer,
|
||||||
|
OUT RETURN_STATUS *Status OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN Length;
|
||||||
|
|
||||||
|
ASSERT (WriteBuffer != NULL);
|
||||||
|
ASSERT (ReadBuffer != NULL);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) >= 1);
|
||||||
|
ASSERT (SMBUS_LIB_LENGTH (SmBusAddress) <= 32);
|
||||||
|
ASSERT (SMBUS_LIB_RESEARVED (SmBusAddress) == 0);
|
||||||
|
|
||||||
|
Length = SMBUS_LIB_LENGTH (SmBusAddress);
|
||||||
|
//
|
||||||
|
// Assuming that ReadBuffer is large enough to save another memory copy.
|
||||||
|
//
|
||||||
|
ReadBuffer = CopyMem (ReadBuffer, WriteBuffer, Length);
|
||||||
|
return InternalSmBusExec (EfiSmbusBWBRProcessCall, SmBusAddress, Length, ReadBuffer, Status);
|
||||||
|
}
|
@@ -513,32 +513,51 @@ EfiTestChildHandle (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function looks up a Unicode string in UnicodeStringTable. If Language is
|
This function looks up a Unicode string in UnicodeStringTable.
|
||||||
a member of SupportedLanguages and a Unicode string is found in UnicodeStringTable
|
If Language is a member of SupportedLanguages and a Unicode
|
||||||
that matches the language code specified by Language, then it is returned in
|
string is found in UnicodeStringTable that matches the
|
||||||
|
language code specified by Language, then it is returned in
|
||||||
UnicodeString.
|
UnicodeString.
|
||||||
|
|
||||||
@param Language A pointer to the ISO 639-2 language code for the
|
@param Language A pointer to the ISO 639-2
|
||||||
Unicode string to look up and return.
|
language code for the Unicode
|
||||||
@param SupportedLanguages A pointer to the set of ISO 639-2 language codes
|
string to look up and return.
|
||||||
that the Unicode string table supports. Language
|
|
||||||
must be a member of this set.
|
@param SupportedLanguages A pointer to the set of ISO
|
||||||
@param UnicodeStringTable A pointer to the table of Unicode strings.
|
639-2language
|
||||||
@param UnicodeString A pointer to the Unicode string from UnicodeStringTable
|
codes that the Unicode string
|
||||||
that matches the language specified by Language.
|
table supports. Language must
|
||||||
|
be a member of this set.
|
||||||
|
|
||||||
|
@param UnicodeStringTable A pointer to the table of
|
||||||
|
Unicode strings.
|
||||||
|
|
||||||
|
@param UnicodeString A pointer to the Unicode
|
||||||
|
string from UnicodeStringTable
|
||||||
|
that matches the language
|
||||||
|
specified by Language.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The Unicode string that matches the language
|
@retval EFI_SUCCESS The Unicode string that
|
||||||
specified by Language was found
|
matches the language specified
|
||||||
in the table of Unicoide strings UnicodeStringTable,
|
by Language was found in the
|
||||||
and it was returned in UnicodeString.
|
table of Unicoide strings
|
||||||
|
UnicodeStringTable, and it was
|
||||||
|
returned in UnicodeString.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
|
|
||||||
@retval EFI_UNSUPPORTED UnicodeStringTable is NULL.
|
@retval EFI_UNSUPPORTED UnicodeStringTable is NULL.
|
||||||
@retval EFI_UNSUPPORTED The language specified by Language is not a
|
|
||||||
member of SupportedLanguages.
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
@retval EFI_UNSUPPORTED The language specified by Language is not
|
Language is not a member
|
||||||
supported by UnicodeStringTable.
|
ofSupportedLanguages.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
|
Language is not supported by
|
||||||
|
UnicodeStringTable.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@@ -596,36 +615,195 @@ LookupUnicodeString (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
This function looks up a Unicode string in UnicodeStringTable.
|
||||||
|
If Language is a member of SupportedLanguages and a Unicode
|
||||||
|
string is found in UnicodeStringTable that matches the
|
||||||
|
language code specified by Language, then it is returned in
|
||||||
|
UnicodeString.
|
||||||
|
|
||||||
|
@param Language A pointer to the ISO 639-2 or
|
||||||
|
RFC 3066 language code for the
|
||||||
|
Unicode string to look up and
|
||||||
|
return.
|
||||||
|
|
||||||
|
@param SupportedLanguages A pointer to the set of ISO
|
||||||
|
639-2 or RFC 3066 language
|
||||||
|
codes that the Unicode string
|
||||||
|
table supports. Language must
|
||||||
|
be a member of this set.
|
||||||
|
|
||||||
|
@param UnicodeStringTable A pointer to the table of
|
||||||
|
Unicode strings.
|
||||||
|
|
||||||
|
@param UnicodeString A pointer to the Unicode
|
||||||
|
string from UnicodeStringTable
|
||||||
|
that matches the language
|
||||||
|
specified by Language.
|
||||||
|
|
||||||
|
@param Iso639Language Specify the language code
|
||||||
|
format supported. If true,
|
||||||
|
then the format follow ISO
|
||||||
|
639-2. If false, then it
|
||||||
|
follows RFC3066.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Unicode string that
|
||||||
|
matches the language specified
|
||||||
|
by Language was found in the
|
||||||
|
table of Unicoide strings
|
||||||
|
UnicodeStringTable, and it was
|
||||||
|
returned in UnicodeString.
|
||||||
|
|
||||||
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED UnicodeStringTable is NULL.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
|
Language is not a member
|
||||||
|
ofSupportedLanguages.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
|
Language is not supported by
|
||||||
|
UnicodeStringTable.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
LookupUnicodeString2 (
|
||||||
|
IN CONST CHAR8 *Language,
|
||||||
|
IN CONST CHAR8 *SupportedLanguages,
|
||||||
|
IN CONST EFI_UNICODE_STRING_TABLE *UnicodeStringTable,
|
||||||
|
OUT CHAR16 **UnicodeString,
|
||||||
|
IN BOOLEAN Iso639Language
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BOOLEAN Found;
|
||||||
|
UINTN Index;
|
||||||
|
CHAR8 *LanguageString;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure the parameters are valid
|
||||||
|
//
|
||||||
|
if (Language == NULL || UnicodeString == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If there are no supported languages, or the Unicode String Table is empty, then the
|
||||||
|
// Unicode String specified by Language is not supported by this Unicode String Table
|
||||||
|
//
|
||||||
|
if (SupportedLanguages == NULL || UnicodeStringTable == NULL) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure Language is in the set of Supported Languages
|
||||||
|
//
|
||||||
|
Found = FALSE;
|
||||||
|
while (*SupportedLanguages != 0) {
|
||||||
|
if (Iso639Language) {
|
||||||
|
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += 3;
|
||||||
|
} else {
|
||||||
|
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
|
||||||
|
if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += Index;
|
||||||
|
for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
|
||||||
|
//
|
||||||
|
if (!Found) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Search the Unicode String Table for the matching Language specifier
|
||||||
|
//
|
||||||
|
while (UnicodeStringTable->Language != NULL) {
|
||||||
|
LanguageString = UnicodeStringTable->Language;
|
||||||
|
while (0 != *LanguageString) {
|
||||||
|
for (Index = 0 ;LanguageString[Index] != 0 && LanguageString[Index] != ';'; Index++);
|
||||||
|
if (AsciiStrnCmp(LanguageString, Language, Index) == 0) {
|
||||||
|
*UnicodeString = UnicodeStringTable->UnicodeString;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
LanguageString += Index;
|
||||||
|
for (Index = 0 ;LanguageString[Index] != 0 && LanguageString[Index] == ';'; Index++);
|
||||||
|
}
|
||||||
|
UnicodeStringTable++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
This function adds a Unicode string to UnicodeStringTable.
|
This function adds a Unicode string to UnicodeStringTable.
|
||||||
If Language is a member of SupportedLanguages then UnicodeString is added to
|
If Language is a member of SupportedLanguages then
|
||||||
UnicodeStringTable. New buffers are allocated for both Language and
|
UnicodeString is added to UnicodeStringTable. New buffers are
|
||||||
UnicodeString. The contents of Language and UnicodeString are copied into
|
allocated for both Language and UnicodeString. The contents
|
||||||
these new buffers. These buffers are automatically freed when
|
of Language and UnicodeString are copied into these new
|
||||||
|
buffers. These buffers are automatically freed when
|
||||||
FreeUnicodeStringTable() is called.
|
FreeUnicodeStringTable() is called.
|
||||||
|
|
||||||
@param Language A pointer to the ISO 639-2 language code for the Unicode
|
@param Language A pointer to the ISO 639-2
|
||||||
|
language code for the Unicode
|
||||||
|
string to add.
|
||||||
|
|
||||||
|
@param SupportedLanguages A pointer to the set of ISO
|
||||||
|
639-2 language codes that the
|
||||||
|
Unicode string table supports.
|
||||||
|
Language must be a member of
|
||||||
|
this set.
|
||||||
|
|
||||||
|
@param UnicodeStringTable A pointer to the table of
|
||||||
|
Unicode strings.
|
||||||
|
|
||||||
|
@param UnicodeString A pointer to the Unicode
|
||||||
string to add.
|
string to add.
|
||||||
@param SupportedLanguages A pointer to the set of ISO 639-2 language codes
|
|
||||||
that the Unicode string table supports.
|
|
||||||
Language must be a member of this set.
|
|
||||||
@param UnicodeStringTable A pointer to the table of Unicode strings.
|
|
||||||
@param UnicodeString A pointer to the Unicode string to add.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The Unicode string that matches the language
|
@retval EFI_SUCCESS The Unicode string that
|
||||||
specified by Language was found in the table of
|
matches the language specified
|
||||||
Unicode strings UnicodeStringTable, and it was
|
by Language was found in the
|
||||||
|
table of Unicode strings
|
||||||
|
UnicodeStringTable, and it was
|
||||||
returned in UnicodeString.
|
returned in UnicodeString.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
|
|
||||||
@retval EFI_INVALID_PARAMETER UnicodeString is an empty string.
|
@retval EFI_INVALID_PARAMETER UnicodeString is an empty string.
|
||||||
|
|
||||||
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
@retval EFI_ALREADY_STARTED A Unicode string with language Language is
|
|
||||||
already present in UnicodeStringTable.
|
@retval EFI_ALREADY_STARTED A Unicode string with language
|
||||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory to add another
|
Language is already present in
|
||||||
Unicode string to UnicodeStringTable.
|
UnicodeStringTable.
|
||||||
@retval EFI_UNSUPPORTED The language specified by Language is not a
|
|
||||||
member of SupportedLanguages.
|
@retval EFI_OUT_OF_RESOURCES There is not enough memory to
|
||||||
|
add another Unicode string to
|
||||||
|
UnicodeStringTable.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
|
Language is not a member of
|
||||||
|
SupportedLanguages.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@@ -762,10 +940,229 @@ AddUnicodeString (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
|
||||||
|
This function adds a Unicode string to UnicodeStringTable.
|
||||||
|
If Language is a member of SupportedLanguages then
|
||||||
|
UnicodeString is added to UnicodeStringTable. New buffers are
|
||||||
|
allocated for both Language and UnicodeString. The contents
|
||||||
|
of Language and UnicodeString are copied into these new
|
||||||
|
buffers. These buffers are automatically freed when
|
||||||
|
FreeUnicodeStringTable() is called.
|
||||||
|
|
||||||
|
@param Language A pointer to the ISO 639-2 or
|
||||||
|
RFC 3066 language code for the
|
||||||
|
Unicode string to add.
|
||||||
|
|
||||||
|
@param SupportedLanguages A pointer to the set of ISO
|
||||||
|
639-2 or RFC 3.66 language
|
||||||
|
codes that the Unicode string
|
||||||
|
table supports. Language must
|
||||||
|
be a member of this set.
|
||||||
|
|
||||||
|
@param UnicodeStringTable A pointer to the table of
|
||||||
|
Unicode strings.
|
||||||
|
|
||||||
|
@param UnicodeString A pointer to the Unicode
|
||||||
|
string to add.
|
||||||
|
|
||||||
|
@param Iso639Language Specify the language code
|
||||||
|
format supported. If true,
|
||||||
|
then the format follow ISO
|
||||||
|
639-2. If false, then it
|
||||||
|
follows RFC3066.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The Unicode string that
|
||||||
|
matches the language specified
|
||||||
|
by Language was found in the
|
||||||
|
table of Unicode strings
|
||||||
|
UnicodeStringTable, and it was
|
||||||
|
returned in UnicodeString.
|
||||||
|
|
||||||
|
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||||
|
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is NULL.
|
||||||
|
|
||||||
|
@retval EFI_INVALID_PARAMETER UnicodeString is an empty string.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED SupportedLanguages is NULL.
|
||||||
|
|
||||||
|
@retval EFI_ALREADY_STARTED A Unicode string with language
|
||||||
|
Language is already present in
|
||||||
|
UnicodeStringTable.
|
||||||
|
|
||||||
|
@retval EFI_OUT_OF_RESOURCES There is not enough memory to
|
||||||
|
add another Unicode string to
|
||||||
|
UnicodeStringTable.
|
||||||
|
|
||||||
|
@retval EFI_UNSUPPORTED The language specified by
|
||||||
|
Language is not a member of
|
||||||
|
SupportedLanguages.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
AddUnicodeString2 (
|
||||||
|
IN CONST CHAR8 *Language,
|
||||||
|
IN CONST CHAR8 *SupportedLanguages,
|
||||||
|
IN EFI_UNICODE_STRING_TABLE **UnicodeStringTable,
|
||||||
|
IN CONST CHAR16 *UnicodeString,
|
||||||
|
IN BOOLEAN Iso639Language
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN NumberOfEntries;
|
||||||
|
EFI_UNICODE_STRING_TABLE *OldUnicodeStringTable;
|
||||||
|
EFI_UNICODE_STRING_TABLE *NewUnicodeStringTable;
|
||||||
|
UINTN UnicodeStringLength;
|
||||||
|
BOOLEAN Found;
|
||||||
|
UINTN Index;
|
||||||
|
CHAR8 *LanguageString;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure the parameter are valid
|
||||||
|
//
|
||||||
|
if (Language == NULL || UnicodeString == NULL || UnicodeStringTable == NULL) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If there are no supported languages, then a Unicode String can not be added
|
||||||
|
//
|
||||||
|
if (SupportedLanguages == NULL) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the Unicode String is empty, then a Unicode String can not be added
|
||||||
|
//
|
||||||
|
if (UnicodeString[0] == 0) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure Language is a member of SupportedLanguages
|
||||||
|
//
|
||||||
|
Found = FALSE;
|
||||||
|
while (*SupportedLanguages != 0) {
|
||||||
|
if (Iso639Language) {
|
||||||
|
if (CompareIso639LanguageCode (Language, SupportedLanguages)) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += 3;
|
||||||
|
} else {
|
||||||
|
for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);
|
||||||
|
if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {
|
||||||
|
Found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SupportedLanguages += Index;
|
||||||
|
for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED
|
||||||
|
//
|
||||||
|
if (!Found) {
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Determine the size of the Unicode String Table by looking for a NULL Language entry
|
||||||
|
//
|
||||||
|
NumberOfEntries = 0;
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
OldUnicodeStringTable = *UnicodeStringTable;
|
||||||
|
while (OldUnicodeStringTable->Language != NULL) {
|
||||||
|
LanguageString = OldUnicodeStringTable->Language;
|
||||||
|
|
||||||
|
while (*LanguageString) {
|
||||||
|
for (Index = 0; LanguageString[Index] != 0 && LanguageString[Index] != ';'; Index++);
|
||||||
|
|
||||||
|
if (AsciiStrnCmp (Language, LanguageString, Index) == 0) {
|
||||||
|
return EFI_ALREADY_STARTED;
|
||||||
|
}
|
||||||
|
LanguageString += Index;
|
||||||
|
for (; *LanguageString != 0 && *LanguageString == ';'; LanguageString++);
|
||||||
|
}
|
||||||
|
OldUnicodeStringTable++;
|
||||||
|
NumberOfEntries++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a new Unicode String Table. It must hold the current number of
|
||||||
|
// entries, plus 1 entry for the new Unicode String, plus 1 entry for the end of table
|
||||||
|
// marker
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable = AllocatePool ((NumberOfEntries + 2) * sizeof (EFI_UNICODE_STRING_TABLE));
|
||||||
|
if (NewUnicodeStringTable == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the current Unicode String Table contains any entries, then copy them to the
|
||||||
|
// newly allocated Unicode String Table.
|
||||||
|
//
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
CopyMem (
|
||||||
|
NewUnicodeStringTable,
|
||||||
|
*UnicodeStringTable,
|
||||||
|
NumberOfEntries * sizeof (EFI_UNICODE_STRING_TABLE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a copy of the Language specifier
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries].Language = AllocateCopyPool (AsciiStrSize(Language), Language);
|
||||||
|
if (NewUnicodeStringTable[NumberOfEntries].Language == NULL) {
|
||||||
|
gBS->FreePool (NewUnicodeStringTable);
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Compute the length of the Unicode String
|
||||||
|
//
|
||||||
|
for (UnicodeStringLength = 0; UnicodeString[UnicodeStringLength] != 0; UnicodeStringLength++);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate space for a copy of the Unicode String
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries].UnicodeString = AllocateCopyPool (StrSize (UnicodeString), UnicodeString);
|
||||||
|
if (NewUnicodeStringTable[NumberOfEntries].UnicodeString == NULL) {
|
||||||
|
gBS->FreePool (NewUnicodeStringTable[NumberOfEntries].Language);
|
||||||
|
gBS->FreePool (NewUnicodeStringTable);
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mark the end of the Unicode String Table
|
||||||
|
//
|
||||||
|
NewUnicodeStringTable[NumberOfEntries + 1].Language = NULL;
|
||||||
|
NewUnicodeStringTable[NumberOfEntries + 1].UnicodeString = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Free the old Unicode String Table
|
||||||
|
//
|
||||||
|
if (*UnicodeStringTable != NULL) {
|
||||||
|
gBS->FreePool (*UnicodeStringTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Point UnicodeStringTable at the newly allocated Unicode String Table
|
||||||
|
//
|
||||||
|
*UnicodeStringTable = NewUnicodeStringTable;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function frees the table of Unicode strings in UnicodeStringTable.
|
This function frees the table of Unicode strings in UnicodeStringTable.
|
||||||
If UnicodeStringTable is NULL, then EFI_SUCCESS is returned.
|
If UnicodeStringTable is NULL, then EFI_SUCCESS is returned.
|
||||||
Otherwise, each language code, and each Unicode string in the Unicode string
|
Otherwise, each language code, and each Unicode string in the Unicode string
|
||||||
table are freed, and EFI_SUCCESS is returned.
|
table are freed, and EFI_SUCCESS is returned.
|
||||||
|
|
||||||
@param UnicodeStringTable A pointer to the table of Unicode strings.
|
@param UnicodeStringTable A pointer to the table of Unicode strings.
|
||||||
@@ -814,73 +1211,3 @@ FreeUnicodeStringTable (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Intialize a driver by installing the Driver Binding Protocol onto the
|
|
||||||
driver's DriverBindingHandle. This is typically the same as the driver's
|
|
||||||
ImageHandle, but it can be different if the driver produces multiple
|
|
||||||
DriverBinding Protocols. This function also initializes the EFI Driver
|
|
||||||
Library that initializes the global variables gST, gBS, gRT.
|
|
||||||
|
|
||||||
@param ImageHandle The image handle of the driver
|
|
||||||
@param SystemTable The EFI System Table that was passed to the driver's entry point
|
|
||||||
@param DriverBinding A Driver Binding Protocol instance that this driver is producing
|
|
||||||
@param DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
|
|
||||||
parameter is NULL, then a new handle is created.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS DriverBinding is installed onto DriverBindingHandle
|
|
||||||
@retval Other Status from gBS->InstallProtocolInterface()
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EfiLibInstallDriverBinding (
|
|
||||||
IN const EFI_HANDLE ImageHandle,
|
|
||||||
IN const EFI_SYSTEM_TABLE *SystemTable,
|
|
||||||
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
||||||
IN EFI_HANDLE DriverBindingHandle
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// bugbug:Need to implement ...
|
|
||||||
//
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Intialize a driver by installing the Driver Binding Protocol onto the
|
|
||||||
driver's DriverBindingHandle. This is typically the same as the driver's
|
|
||||||
ImageHandle, but it can be different if the driver produces multiple
|
|
||||||
DriverBinding Protocols. This function also initializes the EFI Driver
|
|
||||||
Library that initializes the global variables gST, gBS, gRT.
|
|
||||||
|
|
||||||
@ImageHandle The image handle of the driver
|
|
||||||
@SystemTable The EFI System Table that was passed to the driver's entry point
|
|
||||||
@DriverBinding A Driver Binding Protocol instance that this driver is producing
|
|
||||||
@DriverBindingHandle The handle that DriverBinding is to be installe onto. If this
|
|
||||||
parameter is NULL, then a new handle is created.
|
|
||||||
@ComponentName A Component Name Protocol instance that this driver is producing
|
|
||||||
@DriverConfiguration A Driver Configuration Protocol instance that this driver is producing
|
|
||||||
@DriverDiagnostics A Driver Diagnostics Protocol instance that this driver is producing
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS DriverBinding is installed onto DriverBindingHandle
|
|
||||||
@retval Other Status from gBS->InstallProtocolInterface()
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EfiLibInstallAllDriverProtocols (
|
|
||||||
IN const EFI_HANDLE ImageHandle,
|
|
||||||
IN const EFI_SYSTEM_TABLE *SystemTable,
|
|
||||||
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding,
|
|
||||||
IN EFI_HANDLE DriverBindingHandle,
|
|
||||||
IN const EFI_COMPONENT_NAME_PROTOCOL *ComponentName, OPTIONAL
|
|
||||||
IN const EFI_DRIVER_CONFIGURATION_PROTOCOL *DriverConfiguration, OPTIONAL
|
|
||||||
IN const EFI_DRIVER_DIAGNOSTICS_PROTOCOL *DriverDiagnostics OPTIONAL
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// bugbug:Need to implement ...
|
|
||||||
//
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@@ -60,6 +60,26 @@
|
|||||||
<PackageDependencies>
|
<PackageDependencies>
|
||||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||||
</PackageDependencies>
|
</PackageDependencies>
|
||||||
|
<Protocols>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiDriverBindingProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiComponentName2ProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiComponentNameProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiDriverConfigurationProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiDriverDiagnosticsProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
<Protocol Usage="ALWAYS_CONSUMED">
|
||||||
|
<ProtocolCName>gEfiDriverDiagnostics2ProtocolGuid</ProtocolCName>
|
||||||
|
</Protocol>
|
||||||
|
</Protocols>
|
||||||
<Guids>
|
<Guids>
|
||||||
<GuidCNames Usage="ALWAYS_CONSUMED">
|
<GuidCNames Usage="ALWAYS_CONSUMED">
|
||||||
<GuidCName>gEfiEventLegacyBootGuid</GuidCName>
|
<GuidCName>gEfiEventLegacyBootGuid</GuidCName>
|
||||||
|
Reference in New Issue
Block a user