diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2006-10-30 14:17:14 +0000 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2006-10-30 14:17:14 +0000 |
commit | f29cae0d26e21e35f71845b6726aca3b81aa6a77 (patch) | |
tree | 5ef4ebf5356e0266ec5769d21a380bc1164d61f4 /firmware/target/coldfire/system-target.h | |
parent | 522da3a67723ea8fe1a3b640272da298771f2cd8 (diff) | |
download | rockbox-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.h | 131 |
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 | |||
47 | static inline void coldfire_set_macsr(unsigned long flags) | ||
48 | { | ||
49 | asm volatile ("move.l %0, %%macsr" : : "i,r" (flags)); | ||
50 | } | ||
51 | |||
52 | static 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) | ||
61 | static 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 | |||
71 | static 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 | |||
80 | static 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 | |||
90 | static 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 | |||
113 | static 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 */ | ||