1
0

initcalls: Add initial implementation

Create simple serial subsystem which makes use of initcalls, and convert
existing serial drivers to its use.
This commit is contained in:
2012-10-04 00:26:35 -04:00
parent 3f624153e7
commit 9d86813d8c
14 changed files with 219 additions and 102 deletions

View File

@ -23,22 +23,23 @@
/* This function exists solely so crashes don't happen if putc() gets
* called before it is initialized. */
void putc_initial(char c) {
int putc_initial(char c) {
(void)c;
return 0;
}
void (*print_putc)(char) = &putc_initial;
int (*print_putc)(char) = &putc_initial;
void print_init(void (*putcfn)(char)) {
void print_init(int (*putcfn)(char)) {
if (putcfn)
print_putc = putcfn;
}
void puts(void (*putc)(char), const char *s)
void puts(int (*putc)(char), const char *s)
{
while (*s) putc (*s++);
}
void puti(void (*putc)(char), int i)
void puti(int (*putc)(char), int i)
{
unsigned int left;
char buf[1 << (sizeof(int)*8) / 10];
@ -64,7 +65,7 @@ void puti(void (*putc)(char), int i)
putc(*p);
}
void putx(void (*putc)(char), unsigned int i) {
void putx(int (*putc)(char), unsigned int i) {
int j;
puts(putc, "0x");
@ -78,7 +79,7 @@ void putx(void (*putc)(char), unsigned int i) {
}
}
void putb(void (*putc)(char), unsigned int i) {
void putb(int (*putc)(char), unsigned int i) {
int j;
puts(putc, "0b");
@ -88,7 +89,7 @@ void putb(void (*putc)(char), unsigned int i) {
}
}
int _print(void (*putc)(char), char *fmt, va_list arg) {
int _print(int (*putc)(char), char *fmt, va_list arg) {
char *c;
for (c = fmt; *c; c++) {
if (*c == '%') {
@ -138,7 +139,7 @@ int print(char *fmt, ...) {
}
int print_func(void (*putc)(char), char *fmt, ...) {
int print_func(int (*putc)(char), char *fmt, ...) {
int ret;
va_list arg;