1 /*
2 * Copyright (c) 2008 Travis Geiselbrecht
3 *
4 * Use of this source code is governed by a MIT-style
5 * license that can be found in the LICENSE file or at
6 * https://opensource.org/licenses/MIT
7 */
8 #include <stdarg.h>
9 #include <lk/reg.h>
10 #include <stdio.h>
11 #include <kernel/thread.h>
12 #include <platform/armemu/memmap.h>
13 #include <platform/debug.h>
14
platform_dputc(char c)15 void platform_dputc(char c) {
16 *REG8(DEBUG_STDOUT) = c;
17 }
18
platform_dgetc(char * c,bool wait)19 int platform_dgetc(char *c, bool wait) {
20 for (;;) {
21 int8_t result = (int8_t)*REG8(DEBUG_STDIN);
22
23 if (result == -1) {
24 if (wait)
25 continue;
26 else
27 return -1;
28 }
29
30 *c = (char)result;
31 return 0;
32 }
33 }
34
debug_dump_regs(void)35 void debug_dump_regs(void) {
36 *REG32(DEBUG_REGDUMP) = 1;
37 }
38
platform_halt(void)39 void platform_halt(void) {
40 *REG32(DEBUG_HALT) = 1;
41 for (;;);
42 }
43
debug_dump_memory_bytes(void * mem,int len)44 void debug_dump_memory_bytes(void *mem, int len) {
45 *REG32(DEBUG_MEMDUMPADDR) = (unsigned int)mem;
46 *REG32(DEBUG_MEMDUMPLEN) = len;
47 *REG32(DEBUG_MEMDUMP_BYTE) = 1;
48 }
49
debug_dump_memory_halfwords(void * mem,int len)50 void debug_dump_memory_halfwords(void *mem, int len) {
51 len /= 2;
52
53 *REG32(DEBUG_MEMDUMPADDR) = (unsigned int)mem;
54 *REG32(DEBUG_MEMDUMPLEN) = len;
55 *REG32(DEBUG_MEMDUMP_HALFWORD) = 1;
56 }
57
debug_dump_memory_words(void * mem,int len)58 void debug_dump_memory_words(void *mem, int len) {
59 len /= 4;
60
61 *REG32(DEBUG_MEMDUMPADDR) = (unsigned int)mem;
62 *REG32(DEBUG_MEMDUMPLEN) = len;
63 *REG32(DEBUG_MEMDUMP_WORD) = 1;
64 }
65
debug_set_trace_level(int trace_type,int level)66 void debug_set_trace_level(int trace_type, int level) {
67 if (trace_type < 0 || trace_type >= 4)
68 return;
69
70 *REG32(DEBUG_SET_TRACELEVEL_CPU + trace_type * 4) = level;
71 }
72
debug_cycle_count(void)73 uint32_t debug_cycle_count(void) {
74 return *REG32(DEBUG_CYCLE_COUNT);
75 }
76