cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

console_32.c (1240B)


      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