162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2001 - 2012 Tensilica Inc.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _XTENSA_SYSTEM_H
1062306a36Sopenharmony_ci#define _XTENSA_SYSTEM_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <asm/core.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define __mb()  ({ __asm__ __volatile__("memw" : : : "memory"); })
1562306a36Sopenharmony_ci#define __rmb() barrier()
1662306a36Sopenharmony_ci#define __wmb() __mb()
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#ifdef CONFIG_SMP
1962306a36Sopenharmony_ci#define __smp_mb() __mb()
2062306a36Sopenharmony_ci#define __smp_rmb() __rmb()
2162306a36Sopenharmony_ci#define __smp_wmb() __wmb()
2262306a36Sopenharmony_ci#endif
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#if XCHAL_HAVE_S32C1I
2562306a36Sopenharmony_ci#define __smp_mb__before_atomic()		barrier()
2662306a36Sopenharmony_ci#define __smp_mb__after_atomic()		barrier()
2762306a36Sopenharmony_ci#endif
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#include <asm-generic/barrier.h>
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#endif /* _XTENSA_SYSTEM_H */
32