162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2018 ARM Limited 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef __COMPAT_BARRIER_H 662306a36Sopenharmony_ci#define __COMPAT_BARRIER_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 962306a36Sopenharmony_ci/* 1062306a36Sopenharmony_ci * Warning: This code is meant to be used with 1162306a36Sopenharmony_ci * ENABLE_COMPAT_VDSO only. 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci#ifndef ENABLE_COMPAT_VDSO 1462306a36Sopenharmony_ci#error This header is meant to be used with ENABLE_COMPAT_VDSO only 1562306a36Sopenharmony_ci#endif 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#ifdef dmb 1862306a36Sopenharmony_ci#undef dmb 1962306a36Sopenharmony_ci#endif 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory") 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define aarch32_smp_mb() dmb(ish) 2462306a36Sopenharmony_ci#define aarch32_smp_rmb() dmb(ishld) 2562306a36Sopenharmony_ci#define aarch32_smp_wmb() dmb(ishst) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci#undef smp_mb 2862306a36Sopenharmony_ci#undef smp_rmb 2962306a36Sopenharmony_ci#undef smp_wmb 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define smp_mb() aarch32_smp_mb() 3262306a36Sopenharmony_ci#define smp_rmb() aarch32_smp_rmb() 3362306a36Sopenharmony_ci#define smp_wmb() aarch32_smp_wmb() 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#endif /* !__ASSEMBLY__ */ 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#endif /* __COMPAT_BARRIER_H */ 38