18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef _COPY_MC_TEST_H_
38c2ecf20Sopenharmony_ci#define _COPY_MC_TEST_H_
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__
68c2ecf20Sopenharmony_ci#ifdef CONFIG_COPY_MC_TEST
78c2ecf20Sopenharmony_ciextern unsigned long copy_mc_test_src;
88c2ecf20Sopenharmony_ciextern unsigned long copy_mc_test_dst;
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistatic inline void copy_mc_inject_src(void *addr)
118c2ecf20Sopenharmony_ci{
128c2ecf20Sopenharmony_ci	if (addr)
138c2ecf20Sopenharmony_ci		copy_mc_test_src = (unsigned long) addr;
148c2ecf20Sopenharmony_ci	else
158c2ecf20Sopenharmony_ci		copy_mc_test_src = ~0UL;
168c2ecf20Sopenharmony_ci}
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic inline void copy_mc_inject_dst(void *addr)
198c2ecf20Sopenharmony_ci{
208c2ecf20Sopenharmony_ci	if (addr)
218c2ecf20Sopenharmony_ci		copy_mc_test_dst = (unsigned long) addr;
228c2ecf20Sopenharmony_ci	else
238c2ecf20Sopenharmony_ci		copy_mc_test_dst = ~0UL;
248c2ecf20Sopenharmony_ci}
258c2ecf20Sopenharmony_ci#else /* CONFIG_COPY_MC_TEST */
268c2ecf20Sopenharmony_cistatic inline void copy_mc_inject_src(void *addr)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci}
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_cistatic inline void copy_mc_inject_dst(void *addr)
318c2ecf20Sopenharmony_ci{
328c2ecf20Sopenharmony_ci}
338c2ecf20Sopenharmony_ci#endif /* CONFIG_COPY_MC_TEST */
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci#else /* __ASSEMBLY__ */
368c2ecf20Sopenharmony_ci#include <asm/export.h>
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci#ifdef CONFIG_COPY_MC_TEST
398c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_CTL
408c2ecf20Sopenharmony_ci	.pushsection .data
418c2ecf20Sopenharmony_ci	.align 8
428c2ecf20Sopenharmony_ci	.globl copy_mc_test_src
438c2ecf20Sopenharmony_ci	copy_mc_test_src:
448c2ecf20Sopenharmony_ci		.quad 0
458c2ecf20Sopenharmony_ci	EXPORT_SYMBOL_GPL(copy_mc_test_src)
468c2ecf20Sopenharmony_ci	.globl copy_mc_test_dst
478c2ecf20Sopenharmony_ci	copy_mc_test_dst:
488c2ecf20Sopenharmony_ci		.quad 0
498c2ecf20Sopenharmony_ci	EXPORT_SYMBOL_GPL(copy_mc_test_dst)
508c2ecf20Sopenharmony_ci	.popsection
518c2ecf20Sopenharmony_ci.endm
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_SRC reg count target
548c2ecf20Sopenharmony_ci	leaq \count(\reg), %r9
558c2ecf20Sopenharmony_ci	cmp copy_mc_test_src, %r9
568c2ecf20Sopenharmony_ci	ja \target
578c2ecf20Sopenharmony_ci.endm
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_DST reg count target
608c2ecf20Sopenharmony_ci	leaq \count(\reg), %r9
618c2ecf20Sopenharmony_ci	cmp copy_mc_test_dst, %r9
628c2ecf20Sopenharmony_ci	ja \target
638c2ecf20Sopenharmony_ci.endm
648c2ecf20Sopenharmony_ci#else
658c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_CTL
668c2ecf20Sopenharmony_ci.endm
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_SRC reg count target
698c2ecf20Sopenharmony_ci.endm
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci.macro COPY_MC_TEST_DST reg count target
728c2ecf20Sopenharmony_ci.endm
738c2ecf20Sopenharmony_ci#endif /* CONFIG_COPY_MC_TEST */
748c2ecf20Sopenharmony_ci#endif /* __ASSEMBLY__ */
758c2ecf20Sopenharmony_ci#endif /* _COPY_MC_TEST_H_ */
76