Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/*
2 * Common header file for blackfin family of processors.
3 *
4 */
5
6#ifndef _BLACKFIN_H_
7#define _BLACKFIN_H_
8
9#include <mach/anomaly.h>
10
11#ifndef __ASSEMBLY__
12
13/* SSYNC implementation for C file */
14static inline void SSYNC(void)
15{
16 int _tmp;
17 if (ANOMALY_05000312)
18 __asm__ __volatile__(
19 "cli %0;"
20 "nop;"
21 "nop;"
22 "ssync;"
23 "sti %0;"
24 : "=d" (_tmp)
25 );
26 else if (ANOMALY_05000244)
27 __asm__ __volatile__(
28 "nop;"
29 "nop;"
30 "nop;"
31 "ssync;"
32 );
33 else
34 __asm__ __volatile__("ssync;");
35}
36
37/* CSYNC implementation for C file */
38static inline void CSYNC(void)
39{
40 int _tmp;
41 if (ANOMALY_05000312)
42 __asm__ __volatile__(
43 "cli %0;"
44 "nop;"
45 "nop;"
46 "csync;"
47 "sti %0;"
48 : "=d" (_tmp)
49 );
50 else if (ANOMALY_05000244)
51 __asm__ __volatile__(
52 "nop;"
53 "nop;"
54 "nop;"
55 "csync;"
56 );
57 else
58 __asm__ __volatile__("csync;");
59}
60
61#else /* __ASSEMBLY__ */
62
63#define LO(con32) ((con32) & 0xFFFF)
64#define lo(con32) ((con32) & 0xFFFF)
65#define HI(con32) (((con32) >> 16) & 0xFFFF)
66#define hi(con32) (((con32) >> 16) & 0xFFFF)
67
68/* SSYNC & CSYNC implementations for assembly files */
69
70#define ssync(x) SSYNC(x)
71#define csync(x) CSYNC(x)
72
73#if ANOMALY_05000312
74#define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch;
75#define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch;
76
77#elif ANOMALY_05000244
78#define SSYNC(scratch) nop; nop; nop; SSYNC;
79#define CSYNC(scratch) nop; nop; nop; CSYNC;
80
81#else
82#define SSYNC(scratch) SSYNC;
83#define CSYNC(scratch) CSYNC;
84
85#endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */
86
87#endif /* __ASSEMBLY__ */
88
89#include <mach/blackfin.h>
90#include <asm/bfin-global.h>
91
92#endif /* _BLACKFIN_H_ */