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:
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user