ArmPkg: remove BaseMemoryLibStm
All users have moved to the generic or accelerated versions in MdePkg, so remove the obsolete BaseMemoryLibStm. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
This commit is contained in:
@@ -106,7 +106,6 @@
|
|||||||
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||||
ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
|
ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
|
||||||
ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
|
ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
|
||||||
ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf
|
|
||||||
ArmPkg/Library/BdsLib/BdsLib.inf
|
ArmPkg/Library/BdsLib/BdsLib.inf
|
||||||
ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
|
ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
|
||||||
ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
|
ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
|
||||||
|
@@ -1,146 +0,0 @@
|
|||||||
/** @file
|
|
||||||
|
|
||||||
Copyright (c) 2012-2013, ARM Ltd. All rights reserved.<BR>
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy Length bytes from Source to Destination.
|
|
||||||
|
|
||||||
@param DestinationBuffer Target of copy
|
|
||||||
@param SourceBuffer 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Declare the local variables that actually move the data elements as
|
|
||||||
// volatile to prevent the optimizer from replacing this function with
|
|
||||||
// the intrinsic memcpy()
|
|
||||||
//
|
|
||||||
volatile UINT8 *Destination8;
|
|
||||||
CONST UINT8 *Source8;
|
|
||||||
volatile UINT32 *Destination32;
|
|
||||||
CONST UINT32 *Source32;
|
|
||||||
volatile UINT64 *Destination64;
|
|
||||||
CONST UINT64 *Source64;
|
|
||||||
UINTN Alignment;
|
|
||||||
|
|
||||||
if ((((UINTN)DestinationBuffer & 0x7) == 0) && (((UINTN)SourceBuffer & 0x7) == 0) && (Length >= 8)) {
|
|
||||||
if (SourceBuffer > DestinationBuffer) {
|
|
||||||
Destination64 = (UINT64*)DestinationBuffer;
|
|
||||||
Source64 = (CONST UINT64*)SourceBuffer;
|
|
||||||
while (Length >= 8) {
|
|
||||||
*(Destination64++) = *(Source64++);
|
|
||||||
Length -= 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finish if there are still some bytes to copy
|
|
||||||
Destination8 = (UINT8*)Destination64;
|
|
||||||
Source8 = (CONST UINT8*)Source64;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(Destination8++) = *(Source8++);
|
|
||||||
}
|
|
||||||
} else if (SourceBuffer < DestinationBuffer) {
|
|
||||||
Destination64 = (UINT64*)((UINTN)DestinationBuffer + Length);
|
|
||||||
Source64 = (CONST UINT64*)((UINTN)SourceBuffer + Length);
|
|
||||||
|
|
||||||
// Destination64 and Source64 were aligned on a 64-bit boundary
|
|
||||||
// but if length is not a multiple of 8 bytes then they won't be
|
|
||||||
// anymore.
|
|
||||||
|
|
||||||
Alignment = Length & 0x7;
|
|
||||||
if (Alignment != 0) {
|
|
||||||
Destination8 = (UINT8*)Destination64;
|
|
||||||
Source8 = (CONST UINT8*)Source64;
|
|
||||||
|
|
||||||
while (Alignment-- != 0) {
|
|
||||||
*(--Destination8) = *(--Source8);
|
|
||||||
--Length;
|
|
||||||
}
|
|
||||||
Destination64 = (UINT64*)Destination8;
|
|
||||||
Source64 = (CONST UINT64*)Source8;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (Length > 0) {
|
|
||||||
*(--Destination64) = *(--Source64);
|
|
||||||
Length -= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if ((((UINTN)DestinationBuffer & 0x3) == 0) && (((UINTN)SourceBuffer & 0x3) == 0) && (Length >= 4)) {
|
|
||||||
if (SourceBuffer > DestinationBuffer) {
|
|
||||||
Destination32 = (UINT32*)DestinationBuffer;
|
|
||||||
Source32 = (CONST UINT32*)SourceBuffer;
|
|
||||||
while (Length >= 4) {
|
|
||||||
*(Destination32++) = *(Source32++);
|
|
||||||
Length -= 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finish if there are still some bytes to copy
|
|
||||||
Destination8 = (UINT8*)Destination32;
|
|
||||||
Source8 = (CONST UINT8*)Source32;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(Destination8++) = *(Source8++);
|
|
||||||
}
|
|
||||||
} else if (SourceBuffer < DestinationBuffer) {
|
|
||||||
Destination32 = (UINT32*)((UINTN)DestinationBuffer + Length);
|
|
||||||
Source32 = (CONST UINT32*)((UINTN)SourceBuffer + Length);
|
|
||||||
|
|
||||||
// Destination32 and Source32 were aligned on a 32-bit boundary
|
|
||||||
// but if length is not a multiple of 4 bytes then they won't be
|
|
||||||
// anymore.
|
|
||||||
|
|
||||||
Alignment = Length & 0x3;
|
|
||||||
if (Alignment != 0) {
|
|
||||||
Destination8 = (UINT8*)Destination32;
|
|
||||||
Source8 = (CONST UINT8*)Source32;
|
|
||||||
|
|
||||||
while (Alignment-- != 0) {
|
|
||||||
*(--Destination8) = *(--Source8);
|
|
||||||
--Length;
|
|
||||||
}
|
|
||||||
Destination32 = (UINT32*)Destination8;
|
|
||||||
Source32 = (CONST UINT32*)Source8;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (Length > 0) {
|
|
||||||
*(--Destination32) = *(--Source32);
|
|
||||||
Length -= 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (SourceBuffer > DestinationBuffer) {
|
|
||||||
Destination8 = (UINT8*)DestinationBuffer;
|
|
||||||
Source8 = (CONST UINT8*)SourceBuffer;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(Destination8++) = *(Source8++);
|
|
||||||
}
|
|
||||||
} else if (SourceBuffer < DestinationBuffer) {
|
|
||||||
Destination8 = (UINT8*)DestinationBuffer + Length;
|
|
||||||
Source8 = (CONST UINT8*)SourceBuffer + Length;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(--Destination8) = *(--Source8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return DestinationBuffer;
|
|
||||||
}
|
|
@@ -1,84 +0,0 @@
|
|||||||
/** @file
|
|
||||||
|
|
||||||
Copyright (c) 2012-2013, ARM Ltd. All rights reserved.<BR>
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set Buffer to Value for Size bytes.
|
|
||||||
|
|
||||||
@param Buffer Memory to set.
|
|
||||||
@param Length 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Declare the local variables that actually move the data elements as
|
|
||||||
// volatile to prevent the optimizer from replacing this function with
|
|
||||||
// the intrinsic memset()
|
|
||||||
//
|
|
||||||
volatile UINT8 *Pointer8;
|
|
||||||
volatile UINT32 *Pointer32;
|
|
||||||
volatile UINT64 *Pointer64;
|
|
||||||
UINT32 Value32;
|
|
||||||
UINT64 Value64;
|
|
||||||
|
|
||||||
if ((((UINTN)Buffer & 0x7) == 0) && (Length >= 8)) {
|
|
||||||
// Generate the 64bit value
|
|
||||||
Value32 = (Value << 24) | (Value << 16) | (Value << 8) | Value;
|
|
||||||
Value64 = (((UINT64)Value32) << 32) | Value32;
|
|
||||||
|
|
||||||
Pointer64 = (UINT64*)Buffer;
|
|
||||||
while (Length >= 8) {
|
|
||||||
*(Pointer64++) = Value64;
|
|
||||||
Length -= 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finish with bytes if needed
|
|
||||||
Pointer8 = (UINT8*)Pointer64;
|
|
||||||
while (Length-- > 0) {
|
|
||||||
*(Pointer8++) = Value;
|
|
||||||
}
|
|
||||||
} else if ((((UINTN)Buffer & 0x3) == 0) && (Length >= 4)) {
|
|
||||||
// Generate the 32bit value
|
|
||||||
Value32 = (Value << 24) | (Value << 16) | (Value << 8) | Value;
|
|
||||||
|
|
||||||
Pointer32 = (UINT32*)Buffer;
|
|
||||||
while (Length >= 4) {
|
|
||||||
*(Pointer32++) = Value32;
|
|
||||||
Length -= 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finish with bytes if needed
|
|
||||||
Pointer8 = (UINT8*)Pointer32;
|
|
||||||
while (Length-- > 0) {
|
|
||||||
*(Pointer8++) = Value;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Pointer8 = (UINT8*)Buffer;
|
|
||||||
while (Length-- > 0) {
|
|
||||||
*(Pointer8++) = Value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Buffer;
|
|
||||||
}
|
|
@@ -1,169 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# CopyMem() worker for ARM
|
|
||||||
#
|
|
||||||
# This file started out as C code that did 64 bit moves if the buffer was
|
|
||||||
# 32-bit aligned, else it does a byte copy. It also does a byte copy for
|
|
||||||
# any trailing bytes. It was updated to do 32-byte copies using stm/ldm.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroIoLib.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy Length bytes from Source to Destination. Overlap is OK.
|
|
||||||
|
|
||||||
This implementation
|
|
||||||
|
|
||||||
@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
|
|
||||||
)
|
|
||||||
**/
|
|
||||||
ASM_FUNC(InternalMemCopyMem)
|
|
||||||
stmfd sp!, {r4-r11, lr}
|
|
||||||
// Save the input parameters in extra registers (r11 = destination, r14 = source, r12 = length)
|
|
||||||
mov r11, r0
|
|
||||||
mov r10, r0
|
|
||||||
mov r12, r2
|
|
||||||
mov r14, r1
|
|
||||||
|
|
||||||
memcopy_check_overlapped:
|
|
||||||
cmp r11, r1
|
|
||||||
// If (dest < source)
|
|
||||||
bcc memcopy_check_optim_default
|
|
||||||
// If (dest <= source). But with the previous condition -> If (dest == source)
|
|
||||||
bls memcopy_end
|
|
||||||
|
|
||||||
// If (source + length < dest)
|
|
||||||
rsb r3, r1, r11
|
|
||||||
cmp r12, r3
|
|
||||||
bcc memcopy_check_optim_default
|
|
||||||
|
|
||||||
// If (length == 0)
|
|
||||||
cmp r12, #0
|
|
||||||
beq memcopy_end
|
|
||||||
|
|
||||||
b memcopy_check_optim_overlap
|
|
||||||
|
|
||||||
memcopy_check_optim_default:
|
|
||||||
// Check if we can use an optimized path ((length >= 32) && destination word-aligned && source word-aligned) for the memcopy (optimized path if r0 == 1)
|
|
||||||
tst r0, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
bne memcopy_default
|
|
||||||
tst r1, #0xF
|
|
||||||
movne r3, #0
|
|
||||||
moveq r3, #1
|
|
||||||
cmp r2, #31
|
|
||||||
movls r0, #0
|
|
||||||
andhi r0, r3, #1
|
|
||||||
b memcopy_default
|
|
||||||
|
|
||||||
memcopy_check_optim_overlap:
|
|
||||||
// r10 = dest_end, r14 = source_end
|
|
||||||
add r10, r11, r12
|
|
||||||
add r14, r12, r1
|
|
||||||
|
|
||||||
// Are we in the optimized case ((length >= 32) && dest_end word-aligned && source_end word-aligned)
|
|
||||||
cmp r2, #31
|
|
||||||
movls r0, #0
|
|
||||||
movhi r0, #1
|
|
||||||
tst r10, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
tst r14, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
b memcopy_overlapped
|
|
||||||
|
|
||||||
memcopy_overlapped_non_optim:
|
|
||||||
// We read 1 byte from the end of the source buffer
|
|
||||||
sub r3, r14, #1
|
|
||||||
sub r12, r12, #1
|
|
||||||
ldrb r3, [r3, #0]
|
|
||||||
sub r2, r10, #1
|
|
||||||
cmp r12, #0
|
|
||||||
// We write 1 byte at the end of the dest buffer
|
|
||||||
sub r10, r10, #1
|
|
||||||
sub r14, r14, #1
|
|
||||||
strb r3, [r2, #0]
|
|
||||||
bne memcopy_overlapped_non_optim
|
|
||||||
b memcopy_end
|
|
||||||
|
|
||||||
// r10 = dest_end, r14 = source_end
|
|
||||||
memcopy_overlapped:
|
|
||||||
// Are we in the optimized case ?
|
|
||||||
cmp r0, #0
|
|
||||||
beq memcopy_overlapped_non_optim
|
|
||||||
|
|
||||||
// Optimized Overlapped - Read 32 bytes
|
|
||||||
sub r14, r14, #32
|
|
||||||
sub r12, r12, #32
|
|
||||||
cmp r12, #31
|
|
||||||
ldmia r14, {r2-r9}
|
|
||||||
|
|
||||||
// If length is less than 32 then disable optim
|
|
||||||
movls r0, #0
|
|
||||||
|
|
||||||
cmp r12, #0
|
|
||||||
|
|
||||||
// Optimized Overlapped - Write 32 bytes
|
|
||||||
sub r10, r10, #32
|
|
||||||
stmia r10, {r2-r9}
|
|
||||||
|
|
||||||
// while (length != 0)
|
|
||||||
bne memcopy_overlapped
|
|
||||||
b memcopy_end
|
|
||||||
|
|
||||||
memcopy_default_non_optim:
|
|
||||||
// Byte copy
|
|
||||||
ldrb r3, [r14], #1
|
|
||||||
sub r12, r12, #1
|
|
||||||
strb r3, [r10], #1
|
|
||||||
|
|
||||||
memcopy_default:
|
|
||||||
cmp r12, #0
|
|
||||||
beq memcopy_end
|
|
||||||
|
|
||||||
// r10 = dest, r14 = source
|
|
||||||
memcopy_default_loop:
|
|
||||||
cmp r0, #0
|
|
||||||
beq memcopy_default_non_optim
|
|
||||||
|
|
||||||
// Optimized memcopy - Read 32 Bytes
|
|
||||||
sub r12, r12, #32
|
|
||||||
cmp r12, #31
|
|
||||||
ldmia r14!, {r2-r9}
|
|
||||||
|
|
||||||
// If length is less than 32 then disable optim
|
|
||||||
movls r0, #0
|
|
||||||
|
|
||||||
cmp r12, #0
|
|
||||||
|
|
||||||
// Optimized memcopy - Write 32 Bytes
|
|
||||||
stmia r10!, {r2-r9}
|
|
||||||
|
|
||||||
// while (length != 0)
|
|
||||||
bne memcopy_default_loop
|
|
||||||
|
|
||||||
memcopy_end:
|
|
||||||
mov r0, r11
|
|
||||||
ldmfd sp!, {r4-r11, pc}
|
|
||||||
|
|
@@ -1,172 +0,0 @@
|
|||||||
;------------------------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; CopyMem() worker for ARM
|
|
||||||
;
|
|
||||||
; This file started out as C code that did 64 bit moves if the buffer was
|
|
||||||
; 32-bit aligned, else it does a byte copy. It also does a byte copy for
|
|
||||||
; any trailing bytes. It was updated to do 32-byte copies using stm/ldm.
|
|
||||||
;
|
|
||||||
; Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
; 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.
|
|
||||||
;
|
|
||||||
;------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy Length bytes from Source to Destination. Overlap is OK.
|
|
||||||
|
|
||||||
This implementation
|
|
||||||
|
|
||||||
@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
|
|
||||||
)
|
|
||||||
**/
|
|
||||||
|
|
||||||
INCLUDE AsmMacroExport.inc
|
|
||||||
|
|
||||||
RVCT_ASM_EXPORT InternalMemCopyMem
|
|
||||||
stmfd sp!, {r4-r11, lr}
|
|
||||||
// Save the input parameters in extra registers (r11 = destination, r14 = source, r12 = length)
|
|
||||||
mov r11, r0
|
|
||||||
mov r10, r0
|
|
||||||
mov r12, r2
|
|
||||||
mov r14, r1
|
|
||||||
|
|
||||||
memcopy_check_overlapped
|
|
||||||
cmp r11, r1
|
|
||||||
// If (dest < source)
|
|
||||||
bcc memcopy_check_optim_default
|
|
||||||
// If (dest <= source). But with the previous condition -> If (dest == source)
|
|
||||||
bls memcopy_end
|
|
||||||
|
|
||||||
// If (source + length < dest)
|
|
||||||
rsb r3, r1, r11
|
|
||||||
cmp r12, r3
|
|
||||||
bcc memcopy_check_optim_default
|
|
||||||
|
|
||||||
// If (length == 0)
|
|
||||||
cmp r12, #0
|
|
||||||
beq memcopy_end
|
|
||||||
|
|
||||||
b memcopy_check_optim_overlap
|
|
||||||
|
|
||||||
memcopy_check_optim_default
|
|
||||||
// Check if we can use an optimized path ((length >= 32) && destination word-aligned && source word-aligned) for the memcopy (optimized path if r0 == 1)
|
|
||||||
tst r0, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
bne memcopy_default
|
|
||||||
tst r1, #0xF
|
|
||||||
movne r3, #0
|
|
||||||
moveq r3, #1
|
|
||||||
cmp r2, #31
|
|
||||||
movls r0, #0
|
|
||||||
andhi r0, r3, #1
|
|
||||||
b memcopy_default
|
|
||||||
|
|
||||||
memcopy_check_optim_overlap
|
|
||||||
// r10 = dest_end, r14 = source_end
|
|
||||||
add r10, r11, r12
|
|
||||||
add r14, r12, r1
|
|
||||||
|
|
||||||
// Are we in the optimized case ((length >= 32) && dest_end word-aligned && source_end word-aligned)
|
|
||||||
cmp r2, #31
|
|
||||||
movls r0, #0
|
|
||||||
movhi r0, #1
|
|
||||||
tst r10, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
tst r14, #0xF
|
|
||||||
movne r0, #0
|
|
||||||
b memcopy_overlapped
|
|
||||||
|
|
||||||
memcopy_overlapped_non_optim
|
|
||||||
// We read 1 byte from the end of the source buffer
|
|
||||||
sub r3, r14, #1
|
|
||||||
sub r12, r12, #1
|
|
||||||
ldrb r3, [r3, #0]
|
|
||||||
sub r2, r10, #1
|
|
||||||
cmp r12, #0
|
|
||||||
// We write 1 byte at the end of the dest buffer
|
|
||||||
sub r10, r10, #1
|
|
||||||
sub r14, r14, #1
|
|
||||||
strb r3, [r2, #0]
|
|
||||||
bne memcopy_overlapped_non_optim
|
|
||||||
b memcopy_end
|
|
||||||
|
|
||||||
// r10 = dest_end, r14 = source_end
|
|
||||||
memcopy_overlapped
|
|
||||||
// Are we in the optimized case ?
|
|
||||||
cmp r0, #0
|
|
||||||
beq memcopy_overlapped_non_optim
|
|
||||||
|
|
||||||
// Optimized Overlapped - Read 32 bytes
|
|
||||||
sub r14, r14, #32
|
|
||||||
sub r12, r12, #32
|
|
||||||
cmp r12, #31
|
|
||||||
ldmia r14, {r2-r9}
|
|
||||||
|
|
||||||
// If length is less than 32 then disable optim
|
|
||||||
movls r0, #0
|
|
||||||
|
|
||||||
cmp r12, #0
|
|
||||||
|
|
||||||
// Optimized Overlapped - Write 32 bytes
|
|
||||||
sub r10, r10, #32
|
|
||||||
stmia r10, {r2-r9}
|
|
||||||
|
|
||||||
// while (length != 0)
|
|
||||||
bne memcopy_overlapped
|
|
||||||
b memcopy_end
|
|
||||||
|
|
||||||
memcopy_default_non_optim
|
|
||||||
// Byte copy
|
|
||||||
ldrb r3, [r14], #1
|
|
||||||
sub r12, r12, #1
|
|
||||||
strb r3, [r10], #1
|
|
||||||
|
|
||||||
memcopy_default
|
|
||||||
cmp r12, #0
|
|
||||||
beq memcopy_end
|
|
||||||
|
|
||||||
// r10 = dest, r14 = source
|
|
||||||
memcopy_default_loop
|
|
||||||
cmp r0, #0
|
|
||||||
beq memcopy_default_non_optim
|
|
||||||
|
|
||||||
// Optimized memcopy - Read 32 Bytes
|
|
||||||
sub r12, r12, #32
|
|
||||||
cmp r12, #31
|
|
||||||
ldmia r14!, {r2-r9}
|
|
||||||
|
|
||||||
// If length is less than 32 then disable optim
|
|
||||||
movls r0, #0
|
|
||||||
|
|
||||||
cmp r12, #0
|
|
||||||
|
|
||||||
// Optimized memcopy - Write 32 Bytes
|
|
||||||
stmia r10!, {r2-r9}
|
|
||||||
|
|
||||||
// while (length != 0)
|
|
||||||
bne memcopy_default_loop
|
|
||||||
|
|
||||||
memcopy_end
|
|
||||||
mov r0, r11
|
|
||||||
ldmfd sp!, {r4-r11, pc}
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
@@ -1,81 +0,0 @@
|
|||||||
#------------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# SemMem() worker for ARM
|
|
||||||
#
|
|
||||||
# This file started out as C code that did 64 bit moves if the buffer was
|
|
||||||
# 32-bit aligned, else it does a byte copy. It also does a byte copy for
|
|
||||||
# any trailing bytes. It was updated to do 32-byte at a time.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#include <AsmMacroIoLib.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set Buffer to Value for Size bytes.
|
|
||||||
|
|
||||||
@param Buffer Memory to set.
|
|
||||||
@param Length 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
|
|
||||||
)
|
|
||||||
**/
|
|
||||||
|
|
||||||
.syntax unified
|
|
||||||
|
|
||||||
ASM_FUNC(InternalMemSetMem)
|
|
||||||
stmfd sp!, {r4-r11, lr}
|
|
||||||
tst r0, #3
|
|
||||||
movne r3, #0
|
|
||||||
moveq r3, #1
|
|
||||||
cmp r1, #31
|
|
||||||
movls lr, #0
|
|
||||||
andhi lr, r3, #1
|
|
||||||
cmp lr, #0
|
|
||||||
mov r12, r0
|
|
||||||
bne L31
|
|
||||||
L32:
|
|
||||||
mov r3, #0
|
|
||||||
b L43
|
|
||||||
L31:
|
|
||||||
and r4, r2, #0xff
|
|
||||||
orr r4, r4, r4, LSL #8
|
|
||||||
orr r4, r4, r4, LSL #16
|
|
||||||
mov r5, r4
|
|
||||||
mov r6, r4
|
|
||||||
mov r7, r4
|
|
||||||
mov r8, r4
|
|
||||||
mov r9, r4
|
|
||||||
mov r10, r4
|
|
||||||
mov r11, r4
|
|
||||||
b L32
|
|
||||||
L34:
|
|
||||||
cmp lr, #0
|
|
||||||
strbeq r2, [r12], #1
|
|
||||||
subeq r1, r1, #1
|
|
||||||
beq L43
|
|
||||||
sub r1, r1, #32
|
|
||||||
cmp r1, #31
|
|
||||||
movls lr, r3
|
|
||||||
stmia r12!, {r4-r11}
|
|
||||||
L43:
|
|
||||||
cmp r1, #0
|
|
||||||
bne L34
|
|
||||||
ldmfd sp!, {r4-r11, pc}
|
|
||||||
|
|
@@ -1,80 +0,0 @@
|
|||||||
;------------------------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; SetMem() worker for ARM
|
|
||||||
;
|
|
||||||
; This file started out as C code that did 64 bit moves if the buffer was
|
|
||||||
; 32-bit aligned, else it does a byte copy. It also does a byte copy for
|
|
||||||
; any trailing bytes. It was updated to do 32-byte at a time.
|
|
||||||
;
|
|
||||||
; Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
; 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.
|
|
||||||
;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set Buffer to Value for Size bytes.
|
|
||||||
|
|
||||||
@param Buffer Memory to set.
|
|
||||||
@param Length 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
|
|
||||||
)
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
INCLUDE AsmMacroExport.inc
|
|
||||||
|
|
||||||
RVCT_ASM_EXPORT InternalMemSetMem
|
|
||||||
stmfd sp!, {r4-r11, lr}
|
|
||||||
tst r0, #3
|
|
||||||
movne r3, #0
|
|
||||||
moveq r3, #1
|
|
||||||
cmp r1, #31
|
|
||||||
movls lr, #0
|
|
||||||
andhi lr, r3, #1
|
|
||||||
cmp lr, #0
|
|
||||||
mov r12, r0
|
|
||||||
bne L31
|
|
||||||
L32
|
|
||||||
mov r3, #0
|
|
||||||
b L43
|
|
||||||
L31
|
|
||||||
and r4, r2, #0xff
|
|
||||||
orr r4, r4, r4, LSL #8
|
|
||||||
orr r4, r4, r4, LSL #16
|
|
||||||
mov r5, r4
|
|
||||||
mov r6, r4
|
|
||||||
mov r7, r4
|
|
||||||
mov r8, r4
|
|
||||||
mov r9, r4
|
|
||||||
mov r10, r4
|
|
||||||
mov r11, r4
|
|
||||||
b L32
|
|
||||||
L34
|
|
||||||
cmp lr, #0
|
|
||||||
streqb r2, [r12], #1
|
|
||||||
subeq r1, r1, #1
|
|
||||||
beq L43
|
|
||||||
sub r1, r1, #32
|
|
||||||
cmp r1, #31
|
|
||||||
movls lr, r3
|
|
||||||
stmia r12!, {r4-r11}
|
|
||||||
L43
|
|
||||||
cmp r1, #0
|
|
||||||
bne L34
|
|
||||||
ldmfd sp!, {r4-r11, pc}
|
|
||||||
|
|
||||||
END
|
|
@@ -1,70 +0,0 @@
|
|||||||
## @file
|
|
||||||
# Instance of Base Memory Library with some ARM ldm/stm assembly.
|
|
||||||
#
|
|
||||||
# This is a copy of the MdePkg BaseMemoryLib with the CopyMem and
|
|
||||||
# SetMem worker functions replaced with assembler that uses
|
|
||||||
# ldm/stm.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
|
||||||
# Portions copyright (c) 2010, Apple Inc. All rights reserved.<BR>
|
|
||||||
# Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
##
|
|
||||||
|
|
||||||
[Defines]
|
|
||||||
INF_VERSION = 0x00010005
|
|
||||||
BASE_NAME = BaseMemoryLibStm
|
|
||||||
FILE_GUID = 4D466AF3-2380-448D-A337-E4033F29F3F7
|
|
||||||
MODULE_TYPE = BASE
|
|
||||||
VERSION_STRING = 1.0
|
|
||||||
LIBRARY_CLASS = BaseMemoryLib
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# VALID_ARCHITECTURES = ARM AARCH64
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
[Sources.Common]
|
|
||||||
ScanMem64Wrapper.c
|
|
||||||
ScanMem32Wrapper.c
|
|
||||||
ScanMem16Wrapper.c
|
|
||||||
ScanMem8Wrapper.c
|
|
||||||
ZeroMemWrapper.c
|
|
||||||
CompareMemWrapper.c
|
|
||||||
SetMem64Wrapper.c
|
|
||||||
SetMem32Wrapper.c
|
|
||||||
SetMem16Wrapper.c
|
|
||||||
SetMemWrapper.c
|
|
||||||
CopyMemWrapper.c
|
|
||||||
IsZeroBufferWrapper.c
|
|
||||||
MemLibGeneric.c
|
|
||||||
MemLibGuid.c
|
|
||||||
MemLibInternals.h
|
|
||||||
|
|
||||||
[Sources.ARM]
|
|
||||||
Arm/CopyMem.asm
|
|
||||||
Arm/CopyMem.S
|
|
||||||
Arm/SetMem.asm
|
|
||||||
Arm/SetMem.S
|
|
||||||
|
|
||||||
[Sources.AARCH64]
|
|
||||||
AArch64/CopyMem.c
|
|
||||||
AArch64/SetMem.c
|
|
||||||
|
|
||||||
[Packages]
|
|
||||||
MdePkg/MdePkg.dec
|
|
||||||
ArmPkg/ArmPkg.dec
|
|
||||||
|
|
||||||
[LibraryClasses]
|
|
||||||
DebugLib
|
|
||||||
BaseLib
|
|
||||||
|
|
@@ -1,66 +0,0 @@
|
|||||||
/** @file
|
|
||||||
CompareMem() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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, then ASSERT().
|
|
||||||
If Length > 0 and SourceBuffer is NULL, 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 || DestinationBuffer == SourceBuffer) {
|
|
||||||
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);
|
|
||||||
}
|
|
@@ -1,62 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Implementation of the InternalMemCopyMem routine. This function is broken
|
|
||||||
out into its own source file so that it can be excluded from a build for a
|
|
||||||
particular platform easily if an optimized version is desired.
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy Length bytes from Source to Destination.
|
|
||||||
|
|
||||||
@param DestinationBuffer Target of copy
|
|
||||||
@param SourceBuffer 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Declare the local variables that actually move the data elements as
|
|
||||||
// volatile to prevent the optimizer from replacing this function with
|
|
||||||
// the intrinsic memcpy()
|
|
||||||
//
|
|
||||||
volatile UINT8 *Destination8;
|
|
||||||
CONST UINT8 *Source8;
|
|
||||||
|
|
||||||
if (SourceBuffer > DestinationBuffer) {
|
|
||||||
Destination8 = (UINT8*)DestinationBuffer;
|
|
||||||
Source8 = (CONST UINT8*)SourceBuffer;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(Destination8++) = *(Source8++);
|
|
||||||
}
|
|
||||||
} else if (SourceBuffer < DestinationBuffer) {
|
|
||||||
Destination8 = (UINT8*)DestinationBuffer + Length;
|
|
||||||
Source8 = (CONST UINT8*)SourceBuffer + Length;
|
|
||||||
while (Length-- != 0) {
|
|
||||||
*(--Destination8) = *(--Source8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return DestinationBuffer;
|
|
||||||
}
|
|
@@ -1,63 +0,0 @@
|
|||||||
/** @file
|
|
||||||
CopyMem() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
@@ -1,54 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Implementation of IsZeroBuffer function.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Checks if the contents of a buffer are all zeros.
|
|
||||||
|
|
||||||
This function checks whether the contents of a buffer are all zeros. If the
|
|
||||||
contents are all zeros, return TRUE. Otherwise, return FALSE.
|
|
||||||
|
|
||||||
If Length > 0 and Buffer is NULL, then ASSERT().
|
|
||||||
If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
|
|
||||||
|
|
||||||
@param Buffer The pointer to the buffer to be checked.
|
|
||||||
@param Length The size of the buffer (in bytes) to be checked.
|
|
||||||
|
|
||||||
@retval TRUE Contents of the buffer are all zeros.
|
|
||||||
@retval FALSE Contents of the buffer are not all zeros.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
IsZeroBuffer (
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Length
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT (!(Buffer == NULL && Length > 0));
|
|
||||||
ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
|
|
||||||
return InternalMemIsZeroBuffer (Buffer, Length);
|
|
||||||
}
|
|
@@ -1,293 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Architecture Independent Base Memory Library Implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 Count of 16-bit value 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 Count of 32-bit value 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 Count of 64-bit value 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 Length 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.
|
|
||||||
|
|
||||||
@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
|
|
||||||
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 Count of 8-bit value 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;
|
|
||||||
}
|
|
||||||
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 Count of 16-bit value 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;
|
|
||||||
}
|
|
||||||
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 Count of 32-bit value 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;
|
|
||||||
}
|
|
||||||
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 Count of 64-bit value 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;
|
|
||||||
}
|
|
||||||
Pointer++;
|
|
||||||
} while (--Length != 0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Checks whether the contents of a buffer are all zeros.
|
|
||||||
|
|
||||||
@param Buffer The pointer to the buffer to be checked.
|
|
||||||
@param Length The size of the buffer (in bytes) to be checked.
|
|
||||||
|
|
||||||
@retval TRUE Contents of the buffer are all zeros.
|
|
||||||
@retval FALSE Contents of the buffer are not all zeros.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
InternalMemIsZeroBuffer (
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Length
|
|
||||||
)
|
|
||||||
{
|
|
||||||
CONST UINT8 *BufferData;
|
|
||||||
UINTN Index;
|
|
||||||
|
|
||||||
BufferData = Buffer;
|
|
||||||
for (Index = 0; Index < Length; Index++) {
|
|
||||||
if (BufferData[Index] != 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
@@ -1,161 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Implementation of GUID functions.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return (CompareMem(Guid1, Guid2, sizeof(GUID)) == 0) ? TRUE : FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Scans a target buffer for a GUID, and returns a pointer to the matching GUID
|
|
||||||
in the target buffer.
|
|
||||||
|
|
||||||
This function searches the target 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Checks if the given GUID is a zero GUID.
|
|
||||||
|
|
||||||
This function checks whether the given GUID is a zero GUID. If the GUID is
|
|
||||||
identical to a zero GUID then TRUE is returned. Otherwise, FALSE is returned.
|
|
||||||
|
|
||||||
If Guid is NULL, then ASSERT().
|
|
||||||
|
|
||||||
@param Guid The pointer to a 128 bit GUID.
|
|
||||||
|
|
||||||
@retval TRUE Guid is a zero GUID.
|
|
||||||
@retval FALSE Guid is not a zero GUID.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
IsZeroGuid (
|
|
||||||
IN CONST GUID *Guid
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT64 LowPartOfGuid;
|
|
||||||
UINT64 HighPartOfGuid;
|
|
||||||
|
|
||||||
LowPartOfGuid = ReadUnaligned64 ((CONST UINT64*) Guid);
|
|
||||||
HighPartOfGuid = ReadUnaligned64 ((CONST UINT64*) Guid + 1);
|
|
||||||
|
|
||||||
return (BOOLEAN) (LowPartOfGuid == 0 && HighPartOfGuid == 0);
|
|
||||||
}
|
|
@@ -1,251 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Declaration of internal functions for Base Memory Library.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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 __MEM_LIB_INTERNALS__
|
|
||||||
#define __MEM_LIB_INTERNALS__
|
|
||||||
|
|
||||||
#include <Base.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
|
||||||
#include <Library/BaseLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
Copy Length bytes from Source to Destination.
|
|
||||||
|
|
||||||
@param DestinationBuffer Target of copy
|
|
||||||
@param SourceBuffer 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 Length 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 Count of 16-bit value 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 Count of 32-bit value 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 Count of 64-bit value 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 Length 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.
|
|
||||||
|
|
||||||
@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
|
|
||||||
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 Count of 8-bit value 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 Count of 16-bit value 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 Count of 32-bit value 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 Count of 64-bit value 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
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Checks whether the contents of a buffer are all zeros.
|
|
||||||
|
|
||||||
@param Buffer The pointer to the buffer to be checked.
|
|
||||||
@param Length The size of the buffer (in bytes) to be checked.
|
|
||||||
|
|
||||||
@retval TRUE Contents of the buffer are all zeros.
|
|
||||||
@retval FALSE Contents of the buffer are not all zeros.
|
|
||||||
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
EFIAPI
|
|
||||||
InternalMemIsZeroBuffer (
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Length
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,67 +0,0 @@
|
|||||||
/** @file
|
|
||||||
ScanMem16() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 the target 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);
|
|
||||||
}
|
|
@@ -1,66 +0,0 @@
|
|||||||
/** @file
|
|
||||||
ScanMem32() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 the target 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);
|
|
||||||
}
|
|
@@ -1,67 +0,0 @@
|
|||||||
/** @file
|
|
||||||
ScanMem64() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 the target 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);
|
|
||||||
}
|
|
@@ -1,99 +0,0 @@
|
|||||||
/** @file
|
|
||||||
ScanMem8() and ScanMemN() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 the target 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Scans a target buffer for a UINTN sized value, and returns a pointer to the matching
|
|
||||||
UINTN sized value in the target buffer.
|
|
||||||
|
|
||||||
This function searches the target buffer specified by Buffer and Length from the lowest
|
|
||||||
address to the highest address for a UINTN sized 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 UINTN boundary, then ASSERT().
|
|
||||||
If Length is not aligned on a UINTN 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
|
|
||||||
ScanMemN (
|
|
||||||
IN CONST VOID *Buffer,
|
|
||||||
IN UINTN Length,
|
|
||||||
IN UINTN Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (sizeof (UINTN) == sizeof (UINT64)) {
|
|
||||||
return ScanMem64 (Buffer, Length, (UINT64)Value);
|
|
||||||
} else {
|
|
||||||
return ScanMem32 (Buffer, Length, (UINT32)Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,53 +0,0 @@
|
|||||||
/** @file
|
|
||||||
Implementation of the EfiSetMem routine. This function is broken
|
|
||||||
out into its own source file so that it can be excluded from a
|
|
||||||
build for a particular platform easily if an optimized version
|
|
||||||
is desired.
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "MemLibInternals.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set Buffer to Value for Size bytes.
|
|
||||||
|
|
||||||
@param Buffer Memory to set.
|
|
||||||
@param Length 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
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Declare the local variables that actually move the data elements as
|
|
||||||
// volatile to prevent the optimizer from replacing this function with
|
|
||||||
// the intrinsic memset()
|
|
||||||
//
|
|
||||||
volatile UINT8 *Pointer;
|
|
||||||
|
|
||||||
Pointer = (UINT8*)Buffer;
|
|
||||||
while (Length-- > 0) {
|
|
||||||
*(Pointer++) = Value;
|
|
||||||
}
|
|
||||||
return Buffer;
|
|
||||||
}
|
|
@@ -1,64 +0,0 @@
|
|||||||
/** @file
|
|
||||||
SetMem16() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
@@ -1,64 +0,0 @@
|
|||||||
/** @file
|
|
||||||
SetMem32() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
@@ -1,64 +0,0 @@
|
|||||||
/** @file
|
|
||||||
SetMem64() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
@@ -1,91 +0,0 @@
|
|||||||
/** @file
|
|
||||||
SetMem() and SetMemN() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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 with which to fill Length bytes of Buffer.
|
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Fills a target buffer with a value that is size UINTN, and returns the target buffer.
|
|
||||||
|
|
||||||
This function fills Length bytes of Buffer with the UINTN sized value specified by
|
|
||||||
Value, and returns Buffer. Value is repeated every sizeof(UINTN) bytes 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 UINTN boundary, then ASSERT().
|
|
||||||
If Length is not aligned on a UINTN 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
|
|
||||||
SetMemN (
|
|
||||||
OUT VOID *Buffer,
|
|
||||||
IN UINTN Length,
|
|
||||||
IN UINTN Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (sizeof (UINTN) == sizeof (UINT64)) {
|
|
||||||
return SetMem64 (Buffer, Length, (UINT64)Value);
|
|
||||||
} else {
|
|
||||||
return SetMem32 (Buffer, Length, (UINT32)Value);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,52 +0,0 @@
|
|||||||
/** @file
|
|
||||||
ZeroMem() implementation.
|
|
||||||
|
|
||||||
The following BaseMemoryLib instances contain the same copy of this file:
|
|
||||||
|
|
||||||
BaseMemoryLib
|
|
||||||
BaseMemoryLibMmx
|
|
||||||
BaseMemoryLibSse2
|
|
||||||
BaseMemoryLibRepStr
|
|
||||||
BaseMemoryLibOptDxe
|
|
||||||
BaseMemoryLibOptPei
|
|
||||||
PeiMemoryLib
|
|
||||||
UefiMemoryLib
|
|
||||||
|
|
||||||
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
|
|
||||||
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.
|
|
||||||
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
Reference in New Issue
Block a user