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