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_console.h
Go to the documentation of this file.
1
/*
2
* hvc_console.h
3
* Copyright (C) 2005 IBM Corporation
4
*
5
* Author(s):
6
* Ryan S. Arnold <
[email protected]
>
7
*
8
* hvc_console header information:
9
* moved here from arch/powerpc/include/asm/hvconsole.h
10
* and drivers/char/hvc_console.c
11
*
12
* This program is free software; you can redistribute it and/or modify
13
* it under the terms of the GNU General Public License as published by
14
* the Free Software Foundation; either version 2 of the License, or
15
* (at your option) any later version.
16
*
17
* This program is distributed in the hope that it will be useful,
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
* GNU General Public License for more details.
21
*
22
* You should have received a copy of the GNU General Public License
23
* along with this program; if not, write to the Free Software
24
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
*/
26
27
#ifndef HVC_CONSOLE_H
28
#define HVC_CONSOLE_H
29
#include <
linux/kref.h
>
30
#include <linux/tty.h>
31
#include <
linux/spinlock.h
>
32
33
/*
34
* This is the max number of console adapters that can/will be found as
35
* console devices on first stage console init. Any number beyond this range
36
* can't be used as a console device but is still a valid tty device.
37
*/
38
#define MAX_NR_HVC_CONSOLES 16
39
40
/*
41
* The Linux TTY code does not support dynamic addition of tty derived devices
42
* so we need to know how many tty devices we might need when space is allocated
43
* for the tty device. Since this driver supports hotplug of vty adapters we
44
* need to make sure we have enough allocated.
45
*/
46
#define HVC_ALLOC_TTY_ADAPTERS 8
47
48
struct
hvc_struct
{
49
struct
tty_port
port
;
50
spinlock_t
lock
;
51
int
index
;
52
int
do_wakeup
;
53
char
*
outbuf
;
54
int
outbuf_size
;
55
int
n_outbuf
;
56
uint32_t
vtermno
;
57
const
struct
hv_ops
*
ops
;
58
int
irq_requested
;
59
int
data
;
60
struct
winsize
ws
;
61
struct
work_struct
tty_resize
;
62
struct
list_head
next
;
63
};
64
65
/* implemented by a low level driver */
66
struct
hv_ops
{
67
int
(*
get_chars
)(
uint32_t
vtermno,
char
*
buf
,
int
count
);
68
int
(*
put_chars
)(
uint32_t
vtermno,
const
char
*
buf
,
int
count
);
69
70
/* Callbacks for notification. Called in open, close and hangup */
71
int
(*
notifier_add
)(
struct
hvc_struct
*hp,
int
irq
);
72
void
(*
notifier_del
)(
struct
hvc_struct
*hp,
int
irq
);
73
void
(*
notifier_hangup
)(
struct
hvc_struct
*hp,
int
irq
);
74
75
/* tiocmget/set implementation */
76
int
(*
tiocmget
)(
struct
hvc_struct
*hp);
77
int
(*
tiocmset
)(
struct
hvc_struct
*hp,
unsigned
int
set
,
unsigned
int
clear
);
78
};
79
80
/* Register a vterm and a slot index for use as a console (console_init) */
81
extern
int
hvc_instantiate
(
uint32_t
vtermno
,
int
index
,
82
const
struct
hv_ops
*
ops
);
83
84
/* register a vterm for hvc tty operation (module_init or hotplug add) */
85
extern
struct
hvc_struct
*
hvc_alloc
(
uint32_t
vtermno
,
int
data
,
86
const
struct
hv_ops
*
ops
,
int
outbuf_size
);
87
/* remove a vterm from hvc tty operation (module_exit or hotplug remove) */
88
extern
int
hvc_remove
(
struct
hvc_struct
*hp);
89
90
/* data available */
91
int
hvc_poll
(
struct
hvc_struct
*hp);
92
void
hvc_kick
(
void
);
93
94
/* Resize hvc tty terminal window */
95
extern
void
__hvc_resize
(
struct
hvc_struct
*hp,
struct
winsize
ws
);
96
97
static
inline
void
hvc_resize(
struct
hvc_struct
*hp,
struct
winsize
ws
)
98
{
99
unsigned
long
flags
;
100
101
spin_lock_irqsave
(&hp->
lock
, flags);
102
__hvc_resize
(hp, ws);
103
spin_unlock_irqrestore(&hp->
lock
, flags);
104
}
105
106
/* default notifier for irq based notification */
107
extern
int
notifier_add_irq
(
struct
hvc_struct
*hp,
int
data
);
108
extern
void
notifier_del_irq
(
struct
hvc_struct
*hp,
int
data
);
109
extern
void
notifier_hangup_irq
(
struct
hvc_struct
*hp,
int
data
);
110
111
112
#if defined(CONFIG_XMON) && defined(CONFIG_SMP)
113
#include <
asm/xmon.h
>
114
#else
115
static
inline
int
cpus_are_in_xmon(
void
)
116
{
117
return
0;
118
}
119
#endif
120
121
#endif // HVC_CONSOLE_H
Generated on Thu Jan 10 2013 14:33:37 for Linux Kernel by
1.8.2