blob: 8aeac9f431d8a4aadea8441f46177585ef594f1b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <log.h>
#include <mmio.h>
#ifndef __KERNEL_MODULE__
#define __KERNEL_MODULE__
#endif
extern console_callback_t callback;
struct console_device_meta {
void *register_controller;
void *data_start;
void *data_end;
};
const char compatible[] __attribute__((section(".compatible"))) = "unix,soc-tty";
size_t pos = 0;
struct console_device_meta dev_meta = { NULL, NULL, NULL };
__attribute__((visibility("hidden"))) void console_put_char(char c) {
((char *)dev_meta.data_start)[pos++] = c;
if (c == '\n') {
*((uint8_t *)dev_meta.register_controller) = 1;
pos = 0;
}
return;
}
int __attribute__((section(".module_init"))) module_init(struct mmio_device_meta *meta) {
callback = console_put_char;
dev_meta.register_controller = meta->start;
dev_meta.data_start = (void *)((uint8_t *)meta->start + 1);
dev_meta.data_end = (void *)((uint8_t *)meta->start + meta->size);
printk("Registered console device successfully");
return 0;
}
void __attribute__((section(".module_exit"))) module_exit(void) {
printk("Unregistered console device (nothing to do)");
}
|