| /* $Id: printf.c,v 1.5 1996/04/04 16:31:07 tridge Exp $ | |
| * printf.c: Internal prom library printf facility. | |
| * | |
| * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | |
| */ | |
| /* This routine is internal to the prom library, no one else should know | |
| * about or use it! It's simple and smelly anyway.... | |
| */ | |
| #include <linux/kernel.h> | |
| #include <asm/openprom.h> | |
| #include <asm/oplib.h> | |
| #ifdef CONFIG_KGDB | |
| extern int kgdb_initialized; | |
| #endif | |
| static char ppbuf[1024]; | |
| void | |
| prom_printf(char *fmt, ...) | |
| { | |
| va_list args; | |
| char ch, *bptr; | |
| int i; | |
| va_start(args, fmt); | |
| #ifdef CONFIG_KGDB | |
| ppbuf[0] = 'O'; | |
| i = vsprintf(ppbuf + 1, fmt, args) + 1; | |
| #else | |
| i = vsprintf(ppbuf, fmt, args); | |
| #endif | |
| bptr = ppbuf; | |
| #ifdef CONFIG_AP1000 | |
| ap_write(1,bptr,strlen(bptr)); | |
| #else | |
| #ifdef CONFIG_KGDB | |
| if (kgdb_initialized) { | |
| printk("kgdb_initialized = %d\n", kgdb_initialized); | |
| putpacket(bptr, 1); | |
| } else | |
| #else | |
| while((ch = *(bptr++)) != 0) { | |
| if(ch == '\n') | |
| prom_putchar('\r'); | |
| prom_putchar(ch); | |
| } | |
| #endif | |
| #endif | |
| va_end(args); | |
| return; | |
| } |