linux/arch/sparc/prom/console_32.c
<<
>>
Prefs
   1/*
   2 * console.c: Routines that deal with sending and receiving IO
   3 *            to/from the current console device using the PROM.
   4 *
   5 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
   6 * Copyright (C) 1998 Pete Zaitcev <zaitcev@yahoo.com>
   7 */
   8
   9#include <linux/types.h>
  10#include <linux/kernel.h>
  11#include <linux/sched.h>
  12#include <asm/openprom.h>
  13#include <asm/oplib.h>
  14#include <linux/string.h>
  15
  16extern void restore_current(void);
  17
  18/* Non blocking put character to console device, returns -1 if
  19 * unsuccessful.
  20 */
  21static int prom_nbputchar(const char *buf)
  22{
  23        unsigned long flags;
  24        int i = -1;
  25
  26        spin_lock_irqsave(&prom_lock, flags);
  27        switch(prom_vers) {
  28        case PROM_V0:
  29                if ((*(romvec->pv_nbputchar))(*buf))
  30                        i = 1;
  31                break;
  32        case PROM_V2:
  33        case PROM_V3:
  34                if ((*(romvec->pv_v2devops).v2_dev_write)(*romvec->pv_v2bootargs.fd_stdout,
  35                                                          buf, 0x1) == 1)
  36                        i = 1;
  37                break;
  38        default:
  39                break;
  40        }
  41        restore_current();
  42        spin_unlock_irqrestore(&prom_lock, flags);
  43        return i; /* Ugh, we could spin forever on unsupported proms ;( */
  44}
  45
  46void prom_console_write_buf(const char *buf, int len)
  47{
  48        while (len) {
  49                int n = prom_nbputchar(buf);
  50                if (n < 0)
  51                        continue;
  52                len--;
  53                buf++;
  54        }
  55}
  56
  57