1f30828a6745281edda735f642b5f814e1123ecd3Adrian Bunk/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * printf.c: Internal prom library printf facility. 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* This routine is internal to the prom library, no one else should know 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * about or use it! It's simple and smelly anyway.... 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h> 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/openprom.h> 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/oplib.h> 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_KGDB 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int kgdb_initialized; 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic char ppbuf[1024]; 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsprom_printf(char *fmt, ...) 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds va_list args; 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char ch, *bptr; 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int i; 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds va_start(args, fmt); 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_KGDB 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ppbuf[0] = 'O'; 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds i = vsprintf(ppbuf + 1, fmt, args) + 1; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds i = vsprintf(ppbuf, fmt, args); 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds bptr = ppbuf; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_KGDB 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (kgdb_initialized) { 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds printk("kgdb_initialized = %d\n", kgdb_initialized); 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds putpacket(bptr, 1); 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } else 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds while((ch = *(bptr++)) != 0) { 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if(ch == '\n') 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds prom_putchar('\r'); 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds prom_putchar(ch); 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds va_end(args); 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return; 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 56