mirror of https://github.com/acidanthera/audk.git
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:
parent
dbb735a3c4
commit
3be743974a
|
@ -106,7 +106,6 @@
|
|||
ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||
ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
|
||||
ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf
|
||||
ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf
|
||||
ArmPkg/Library/BdsLib/BdsLib.inf
|
||||
ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.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);
|
||||
}
|
Loading…
Reference in New Issue