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