linux/arch/sparc64/prom/console.c
<<
>>
Prefs
   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
  16extern 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 */
  21inline int
  22prom_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 */
  37inline int
  38prom_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. */
  52char
  53prom_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. */
  61void
  62prom_putchar(char c)
  63{
  64        prom_nbputchar(c);
  65        return;
  66}
  67
  68void
  69prom_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