Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/sparc/prom/console_32.c
10817 views
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 ([email protected])
6
* Copyright (C) 1998 Pete Zaitcev <[email protected]>
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 <asm/system.h>
15
#include <linux/string.h>
16
17
extern void restore_current(void);
18
19
/* Non blocking put character to console device, returns -1 if
20
* unsuccessful.
21
*/
22
static 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
47
void 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
59