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