2 * (c) 2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>
3 * economic rights: Technische Universität Dresden (Germany)
5 * This file is part of TUD:OS and distributed under the terms of the
6 * GNU General Public License 2.
7 * Please see the COPYING-GPL-2 file for details.
9 * As a special exception, you may use this file as part of a free software
10 * library without restriction. Specifically, if other files instantiate
11 * templates or use macros or inline functions from this file, or you compile
12 * this file and link it with other files to produce an executable, this
13 * file does not by itself cause the resulting executable to be covered by
14 * the GNU General Public License. This exception does not however
15 * invalidate any other reasons why the executable file might be covered by
16 * the GNU General Public License.
18 #ifndef __L4SYS__INCLUDE__ARCH_PPC32__KDEBUG_H__
19 #define __L4SYS__INCLUDE__ARCH_PPC32__KDEBUG_H__
21 #include <l4/sys/compiler.h>
22 #include <l4/sys/consts.h>
25 #ifndef L4_SYSCALL_MAGIC_OFFSET
26 # define L4_SYSCALL_MAGIC_OFFSET 8
28 #define L4_SYSCALL_ENTER_KDEBUG (-0x00000020-L4_SYSCALL_MAGIC_OFFSET)
31 #define enter_kdebug(text...) \
32 __asm__ __volatile__ ( \
36 " .ascii \"" text "\" \n" \
41 : "i" (L4_SYSCALL_ENTER_KDEBUG), \
46 outnstring(const char* x, unsigned len);
49 outstring(const char *text);
73 kd_display(char *text);
90 L4_INLINE void __touch_ro(const char *x, unsigned len);
92 L4_INLINE unsigned long
93 __kdebug_param(unsigned long nr, unsigned long p1, unsigned long p2);
95 L4_INLINE unsigned long
96 __kdebug_param_5(unsigned long nr, unsigned long p1, unsigned long p2,
97 unsigned long p3, unsigned long p4, unsigned long p5);
101 __kdebug_param(unsigned long nr, unsigned long p1, unsigned long p2)
103 register unsigned long r3 asm("r3") = (nr) | (1 << 31);
104 register unsigned long r4 asm("r4") = (p1);
105 register unsigned long r5 asm("r5") = (p2);
106 asm volatile ( " bla %1 \n"
108 : "i" (L4_SYSCALL_ENTER_KDEBUG),
109 "0" (r4), "r" (r3), "r" (r5)
117 __kdebug_param_5(unsigned long nr, unsigned long p1, unsigned long p2,
118 unsigned long p3, unsigned long p4, unsigned long p5)
120 register unsigned long r3 asm("r3") = (nr) | (1 << 31);
121 register unsigned long r4 asm("r4") = (p1);
122 register unsigned long r5 asm("r5") = (p2);
123 register unsigned long r6 asm("r6") = (p3);
124 register unsigned long r7 asm("r7") = (p4);
125 register unsigned long r8 asm("r8") = (p5);
127 asm volatile ( " bla %1 \n"
129 : "i" (L4_SYSCALL_ENTER_KDEBUG),
130 "0" (r4), "r" (r3), "r" (r5),
131 "r" (r6), "r" (r7), "r" (r8)
138 __touch_ro(const char *x, unsigned len)
140 volatile const char *sptr, *eptr;
141 sptr = (const char*)((unsigned)x & L4_PAGEMASK);
142 eptr = (const char*)(((unsigned)x + len -1) & L4_PAGEMASK);
144 for(;sptr <= eptr; sptr += L4_PAGESIZE)
149 outnstring(const char* x, unsigned len)
152 __kdebug_param(3, (unsigned long)x, (unsigned long)len);
156 outstring(const char *text)
166 __kdebug_param(1, (unsigned long)c, 0);
172 __kdebug_param(4, (unsigned long)number, 0);
178 __kdebug_param(5, (unsigned long)number, 0);
184 __kdebug_param(6, (unsigned long)number, 0);
190 __kdebug_param(7, (unsigned long)number, 0);
196 __kdebug_param(8, (unsigned long)number, 0);
202 __kdebug_param(9, (unsigned long)number, 0);
206 kd_display(char *text)
214 return __kdebug_param(0xd, 0, 0);
220 __kdebug_param(0x32, 0, 0);
226 __kdebug_param(0x33, 0, 0);
232 // __KDEBUG_ARM_PARAM_0(0x3f);
237 return __kdebug_param(0x34, 0, 0);
241 #endif /* ! __L4SYS__INCLUDE__ARCH_PPC32__KDEBUG_H__ */