summaryrefslogtreecommitdiff
path: root/firmware/target/coldfire/system-target.h
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2006-10-30 14:17:14 +0000
committerMichael Sevakis <jethead71@rockbox.org>2006-10-30 14:17:14 +0000
commitf29cae0d26e21e35f71845b6726aca3b81aa6a77 (patch)
tree5ef4ebf5356e0266ec5769d21a380bc1164d61f4 /firmware/target/coldfire/system-target.h
parent522da3a67723ea8fe1a3b640272da298771f2cd8 (diff)
downloadrockbox-f29cae0d26e21e35f71845b6726aca3b81aa6a77.tar.gz
rockbox-f29cae0d26e21e35f71845b6726aca3b81aa6a77.zip
Moved coldfire code in system.c and system.h into target tree.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11399 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire/system-target.h')
-rw-r--r--firmware/target/coldfire/system-target.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/firmware/target/coldfire/system-target.h b/firmware/target/coldfire/system-target.h
new file mode 100644
index 0000000000..03852115ad
--- /dev/null
+++ b/firmware/target/coldfire/system-target.h
@@ -0,0 +1,131 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Alan Korr
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef SYSTEM_TARGET_H
20#define SYSTEM_TARGET_H
21
22#define or_l(mask, address) \
23 asm \
24 ("or.l %0,(%1)" \
25 : \
26 : /* %0 */ "d"(mask), \
27 /* %1 */ "a"(address))
28
29#define and_l(mask, address) \
30 asm \
31 ("and.l %0,(%1)" \
32 : \
33 : /* %0 */ "d"(mask), \
34 /* %1 */ "a"(address))
35
36#define eor_l(mask, address) \
37 asm \
38 ("eor.l %0,(%1)" \
39 : \
40 : /* %0 */ "d"(mask), \
41 /* %1 */ "a"(address))
42
43#define EMAC_ROUND 0x10
44#define EMAC_FRACTIONAL 0x20
45#define EMAC_SATURATE 0x80
46
47static inline void coldfire_set_macsr(unsigned long flags)
48{
49 asm volatile ("move.l %0, %%macsr" : : "i,r" (flags));
50}
51
52static inline unsigned long coldfire_get_macsr(void)
53{
54 unsigned long m;
55
56 asm volatile ("move.l %%macsr, %0" : "=r" (m));
57 return m;
58}
59
60#define HIGHEST_IRQ_LEVEL (7<<8)
61static inline int set_irq_level(int level)
62{
63 int oldlevel;
64 /* Read the old level and set the new one */
65 asm volatile ("move.w %%sr,%0\n"
66 "or.l #0x2000,%1\n"
67 "move.w %1,%%sr\n" : "=d" (oldlevel), "+d" (level) : );
68 return oldlevel;
69}
70
71static inline unsigned short swap16(unsigned short value)
72 /*
73 result[15..8] = value[ 7..0];
74 result[ 7..0] = value[15..8];
75 */
76{
77 return (value >> 8) | (value << 8);
78}
79
80static inline unsigned long SWAW32(unsigned long value)
81 /*
82 result[31..16] = value[15.. 0];
83 result[15.. 0] = value[31..16];
84 */
85{
86 asm ("swap %%0" : "+r"(value));
87 return value;
88}
89
90static inline unsigned long swap32(unsigned long value)
91 /*
92 result[31..24] = value[ 7.. 0];
93 result[23..16] = value[15.. 8];
94 result[15.. 8] = value[23..16];
95 result[ 7.. 0] = value[31..24];
96 */
97{
98 unsigned long mask = 0x00FF00FF;
99 asm ( /* val = ABCD */
100 "and.l %[val],%[mask] \n" /* mask = .B.D */
101 "eor.l %[mask],%[val] \n" /* val = A.C. */
102 "lsl.l #8,%[mask] \n" /* mask = B.D. */
103 "lsr.l #8,%[val] \n" /* val = .A.C */
104 "or.l %[mask],%[val] \n" /* val = BADC */
105 "swap %[val] \n" /* val = DCBA */
106 : /* outputs */
107 [val] "+d"(value),
108 [mask]"+d"(mask)
109 );
110 return value;
111}
112
113static inline void invalidate_icache(void)
114{
115 asm volatile ("move.l #0x01000000,%d0\n"
116 "movec.l %d0,%cacr\n"
117 "move.l #0x80000000,%d0\n"
118 "movec.l %d0,%cacr");
119}
120
121/* 11.2896 MHz */
122#define CPUFREQ_DEFAULT_MULT 1
123#define CPUFREQ_DEFAULT (CPUFREQ_DEFAULT_MULT * CPU_FREQ)
124/* 45.1584 MHz */
125#define CPUFREQ_NORMAL_MULT 4
126#define CPUFREQ_NORMAL (CPUFREQ_NORMAL_MULT * CPU_FREQ)
127/* 124.1856 MHz */
128#define CPUFREQ_MAX_MULT 11
129#define CPUFREQ_MAX (CPUFREQ_MAX_MULT * CPU_FREQ)
130
131#endif /* SYSTEM_TARGET_H */