Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
powerpc
include
asm
synch.h
Go to the documentation of this file.
1
#ifndef _ASM_POWERPC_SYNCH_H
2
#define _ASM_POWERPC_SYNCH_H
3
#ifdef __KERNEL__
4
5
#include <
linux/stringify.h
>
6
#include <
asm/feature-fixups.h
>
7
8
#if defined(__powerpc64__) || defined(CONFIG_PPC_E500MC)
9
#define __SUBARCH_HAS_LWSYNC
10
#endif
11
12
#ifndef __ASSEMBLY__
13
extern
unsigned
int
__start___lwsync_fixup, __stop___lwsync_fixup;
14
extern
void
do_lwsync_fixups
(
unsigned
long
value
,
void
*fixup_start,
15
void
*fixup_end);
16
extern
void
do_final_fixups
(
void
);
17
18
static
inline
void
eieio
(
void
)
19
{
20
__asm__
__volatile__ (
"eieio"
: : :
"memory"
);
21
}
22
23
static
inline
void
isync(
void
)
24
{
25
__asm__
__volatile__ (
"isync"
: : :
"memory"
);
26
}
27
#endif
/* __ASSEMBLY__ */
28
29
#if defined(__powerpc64__)
30
# define LWSYNC lwsync
31
#elif defined(CONFIG_E500)
32
# define LWSYNC \
33
START_LWSYNC_SECTION(96); \
34
sync; \
35
MAKE_LWSYNC_SECTION_ENTRY(96, __lwsync_fixup);
36
#else
37
# define LWSYNC sync
38
#endif
39
40
#ifdef CONFIG_SMP
41
#define __PPC_ACQUIRE_BARRIER \
42
START_LWSYNC_SECTION(97); \
43
isync; \
44
MAKE_LWSYNC_SECTION_ENTRY(97, __lwsync_fixup);
45
#define PPC_ACQUIRE_BARRIER "\n" stringify_in_c(__PPC_ACQUIRE_BARRIER)
46
#define PPC_RELEASE_BARRIER stringify_in_c(LWSYNC) "\n"
47
#define PPC_ATOMIC_ENTRY_BARRIER "\n" stringify_in_c(LWSYNC) "\n"
48
#define PPC_ATOMIC_EXIT_BARRIER "\n" stringify_in_c(sync) "\n"
49
#else
50
#define PPC_ACQUIRE_BARRIER
51
#define PPC_RELEASE_BARRIER
52
#define PPC_ATOMIC_ENTRY_BARRIER
53
#define PPC_ATOMIC_EXIT_BARRIER
54
#endif
55
56
#endif
/* __KERNEL__ */
57
#endif
/* _ASM_POWERPC_SYNCH_H */
Generated on Thu Jan 10 2013 13:13:29 for Linux Kernel by
1.8.2