On Thu, Jul 19, 2018 at 05:19:43PM +0200, Thomas Gleixner wrote: >On Tue, 17 Jul 2018, Chao Fan wrote: > >> In order to parse ACPI tables, reuse the head file linux/acpi.h, >> so that the files in 'compressed' directory can read ACPI table >> by including this head file. >> >> Signed-off-by: Chao Fan <fanc.f...@cn.fujitsu.com> >> --- >> arch/x86/boot/compressed/acpitb.h | 50 +++++++++++++++++++++++++++++++ >> 1 file changed, 50 insertions(+) >> create mode 100644 arch/x86/boot/compressed/acpitb.h >> >> diff --git a/arch/x86/boot/compressed/acpitb.h >> b/arch/x86/boot/compressed/acpitb.h >> new file mode 100644 >> index 000000000000..fd2bba23f447 >> --- /dev/null >> +++ b/arch/x86/boot/compressed/acpitb.h >> @@ -0,0 +1,50 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +#include <linux/acpi.h> >> + >> +#define ACPI_MAX_TABLES 128 >> + >> +/* Function to get ACPI SRAT table pointer. */ >> +struct acpi_table_header *get_acpi_srat_table(void); >> + >> +#ifdef ACPI_BIG_ENDIAN >> + >> +#define ACPI_MOVE_64_TO_64(d, s) \ >> +{((u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[7]; \ >> +((u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[6]; \ >> +((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[5]; \ >> +((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[4]; \ >> +((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[3]; \ >> +((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[2]; \ >> +((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[1]; \ >> +((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[0]; } > >Whats wrong with be64_to_cpu() ?
Hi tglx, Thanks for your review. ACPI_MOVE_64_TO_64 and ACPI_MOVE_16_TO_32 are copied from arch/x86/boot/compressed/acpitb.h cause I though copying the old code is reliable. I will delete these two definitions and only using le64_to_cpu and le16_to_cpu may be enough(since ACPI table is in little endian). And also add more comments in next version. Thanks, Chao Fan > >> + >> +#define ACPI_MOVE_16_TO_32(d, s) \ >> +{(*(u32 *)(void *)(d)) = 0; \ >> +((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[1]; \ >> +((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[0]; } > >Huch? > >> + >> +#else >> +#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED >> + >> +#define ACPI_MOVE_64_TO_64(d, s) \ >> +{*(u64 *)(void *)(d) = *(u64 *)(void *)(s); } >> + >> +#define ACPI_MOVE_16_TO_32(d, s) \ >> +{*(u32 *)(void *)(d) = *(u16 *)(void *)(s); } >> + >> +#else >> +#define ACPI_MOVE_64_TO_64(d, s) \ >> +{((u8 *)(void *)(d))[0] = ((u8 *)(void *)(s))[0]; \ >> +((u8 *)(void *)(d))[1] = ((u8 *)(void *)(s))[1]; \ >> +((u8 *)(void *)(d))[2] = ((u8 *)(void *)(s))[2]; \ >> +((u8 *)(void *)(d))[3] = ((u8 *)(void *)(s))[3]; \ >> +((u8 *)(void *)(d))[4] = ((u8 *)(void *)(s))[4]; \ >> +((u8 *)(void *)(d))[5] = ((u8 *)(void *)(s))[5]; \ >> +((u8 *)(void *)(d))[6] = ((u8 *)(void *)(s))[6]; \ >> +((u8 *)(void *)(d))[7] = ((u8 *)(void *)(s))[7]; } > >And why doees this have to be done bytewise? Some comments would be >helpful. > >Thanks, > > tglx > >