Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
tty
hvc
hvc_udbg.c
Go to the documentation of this file.
1
/*
2
* udbg interface to hvc_console.c
3
*
4
* (C) Copyright David Gibson, IBM Corporation 2008.
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*/
20
21
#include <
linux/console.h
>
22
#include <
linux/delay.h
>
23
#include <
linux/err.h
>
24
#include <
linux/init.h
>
25
#include <
linux/moduleparam.h
>
26
#include <linux/types.h>
27
#include <
linux/irq.h
>
28
29
#include <
asm/udbg.h
>
30
31
#include "
hvc_console.h
"
32
33
struct
hvc_struct
*
hvc_udbg_dev
;
34
35
static
int
hvc_udbg_put(
uint32_t
vtermno
,
const
char
*
buf
,
int
count
)
36
{
37
int
i
;
38
39
for
(i = 0; i < count &&
udbg_putc
; i++)
40
udbg_putc
(buf[i]);
41
42
return
i
;
43
}
44
45
static
int
hvc_udbg_get(
uint32_t
vtermno
,
char
*
buf
,
int
count
)
46
{
47
int
i
,
c
;
48
49
if
(!
udbg_getc_poll
)
50
return
0;
51
52
for
(i = 0; i <
count
; i++) {
53
if
((c =
udbg_getc_poll
()) == -1)
54
break
;
55
buf[
i
] =
c
;
56
}
57
58
return
i
;
59
}
60
61
static
const
struct
hv_ops
hvc_udbg_ops = {
62
.get_chars = hvc_udbg_get,
63
.put_chars = hvc_udbg_put,
64
};
65
66
static
int
__init
hvc_udbg_init(
void
)
67
{
68
struct
hvc_struct
*hp;
69
70
if
(!
udbg_putc
)
71
return
-
ENODEV
;
72
73
BUG_ON
(hvc_udbg_dev);
74
75
hp =
hvc_alloc
(0, 0, &hvc_udbg_ops, 16);
76
if
(IS_ERR(hp))
77
return
PTR_ERR(hp);
78
79
hvc_udbg_dev = hp;
80
81
return
0;
82
}
83
module_init
(hvc_udbg_init);
84
85
static
void
__exit
hvc_udbg_exit(
void
)
86
{
87
if
(hvc_udbg_dev)
88
hvc_remove
(hvc_udbg_dev);
89
}
90
module_exit
(hvc_udbg_exit);
91
92
static
int
__init
hvc_udbg_console_init(
void
)
93
{
94
if
(!
udbg_putc
)
95
return
-
ENODEV
;
96
97
hvc_instantiate
(0, 0, &hvc_udbg_ops);
98
add_preferred_console
(
"hvc"
, 0,
NULL
);
99
100
return
0;
101
}
102
console_initcall
(hvc_udbg_console_init);
Generated on Thu Jan 10 2013 14:33:38 for Linux Kernel by
1.8.2