1 /* console.c: Routines that deal with sending and receiving IO 2 * to/from the current console device using the PROM. 3 * 4 * Copyright (C) 1995 David S. Miller (davem@davemloft.net) 5 * Copyright (C) 1996,1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 6 */ 7 8 #include <linux/types.h> 9 #include <linux/kernel.h> 10 #include <linux/sched.h> 11 #include <asm/openprom.h> 12 #include <asm/oplib.h> 13 #include <asm/system.h> 14 #include <linux/string.h> 15 16 extern int prom_stdin, prom_stdout; 17 18 /* Non blocking get character from console input device, returns -1 19 * if no input was taken. This can be used for polling. 20 */ 21 inline int 22 prom_nbgetchar(void) 23 { 24 char inc; 25 26 if (p1275_cmd("read", P1275_ARG(1,P1275_ARG_OUT_BUF)| 27 P1275_INOUT(3,1), 28 prom_stdin, &inc, P1275_SIZE(1)) == 1) 29 return inc; 30 else 31 return -1; 32 } 33 34 /* Non blocking put character to console device, returns -1 if 35 * unsuccessful. 36 */ 37 inline int 38 prom_nbputchar(char c) 39 { 40 char outc; 41 42 outc = c; 43 if (p1275_cmd("write", P1275_ARG(1,P1275_ARG_IN_BUF)| 44 P1275_INOUT(3,1), 45 prom_stdout, &outc, P1275_SIZE(1)) == 1) 46 return 0; 47 else 48 return -1; 49 } 50 51 /* Blocking version of get character routine above. */ 52 char 53 prom_getchar(void) 54 { 55 int character; 56 while((character = prom_nbgetchar()) == -1) ; 57 return (char) character; 58 } 59 60 /* Blocking version of put character routine above. */ 61 void 62 prom_putchar(char c) 63 { 64 prom_nbputchar(c); 65 return; 66 } 67 68 void 69 prom_puts(const char *s, int len) 70 { 71 p1275_cmd("write", P1275_ARG(1,P1275_ARG_IN_BUF)| 72 P1275_INOUT(3,1), 73 prom_stdout, s, P1275_SIZE(len)); 74 } 75