arch/x86/ebda: Change memcpy() to endian wrappers
Change memcpy()s and memset()s to endian.h wrappers for consistency and safety. Add zero_n() wrapper to safely clear memory. Change-Id: If155d82608c81992f05eae4d2223de6f506e98c5 Signed-off-by: Ryan Salsamendi <rsalsamendi@hotmail.com> Reviewed-on: https://review.coreboot.org/20240 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
927f06a565
commit
f511c1f118
|
@ -19,6 +19,7 @@
|
||||||
#include <arch/io.h>
|
#include <arch/io.h>
|
||||||
#include <arch/ebda.h>
|
#include <arch/ebda.h>
|
||||||
#include <arch/acpi.h>
|
#include <arch/acpi.h>
|
||||||
|
#include <commonlib/endian.h>
|
||||||
|
|
||||||
void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size)
|
void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size)
|
||||||
{
|
{
|
||||||
|
@ -38,15 +39,15 @@ void setup_ebda(u32 low_memory_size, u16 ebda_segment, u16 ebda_size)
|
||||||
ebda = (void *)((uintptr_t)ebda_segment << 4);
|
ebda = (void *)((uintptr_t)ebda_segment << 4);
|
||||||
|
|
||||||
/* clear BIOS DATA AREA */
|
/* clear BIOS DATA AREA */
|
||||||
memset(X86_BDA_BASE, 0, X86_BDA_SIZE);
|
zero_n(X86_BDA_BASE, X86_BDA_SIZE);
|
||||||
|
|
||||||
/* Avoid unaligned write16() since it's undefined behavior */
|
/* Avoid unaligned write16() since it's undefined behavior */
|
||||||
memcpy(X86_EBDA_LOWMEM, &low_memory_kb, sizeof(low_memory_kb));
|
write_le16(X86_EBDA_LOWMEM, low_memory_kb);
|
||||||
memcpy(X86_EBDA_SEGMENT, &ebda_segment, sizeof(ebda_segment));
|
write_le16(X86_EBDA_SEGMENT, ebda_segment);
|
||||||
|
|
||||||
/* Set up EBDA */
|
/* Set up EBDA */
|
||||||
memset(ebda, 0, ebda_size);
|
zero_n(ebda, ebda_size);
|
||||||
memcpy(ebda, &ebda_kb, sizeof(ebda_kb));
|
write_le16(ebda, ebda_kb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_default_ebda(void)
|
void setup_default_ebda(void)
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
/* Endian agnostic functions working on single byte. */
|
/* Endian agnostic functions working on single byte. */
|
||||||
|
|
||||||
|
@ -254,4 +255,9 @@ static inline void write_at_le64(void *dest, uint64_t val, size_t offset)
|
||||||
write_le64(d, val);
|
write_le64(d, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void zero_n(void *dest, size_t n)
|
||||||
|
{
|
||||||
|
memset(dest, 0, n);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue