About
Contact
QtCreator
KDevelop
Solarized
1
// SPDX-License-Identifier: GPL-2.0
2
#include
<linux/screen_info.h>
3
#include
<linux/init.h>
4
5
#include
<asm/bootparam.h>
6
#include
<asm/setup.h>
7
8
#include
<xen/interface/xen.h>
9
10
#include
"xen-ops.h"
11
12
void
__init
xen_init_vga
(
const
struct
dom0_vga_console_info
*
info
,
size_t
size
,
13
struct
screen_info
*
screen_info
)
14
{
15
/* This is drawn from a dump from vgacon:startup in
16
* standard Linux. */
17
screen_info
->
orig_video_mode
=
3
;
18
screen_info
->
orig_video_isVGA
=
1
;
19
screen_info
->
orig_video_lines
=
25
;
20
screen_info
->
orig_video_cols
=
80
;
21
screen_info
->
orig_video_ega_bx
=
3
;
22
screen_info
->
orig_video_points
=
16
;
23
screen_info
->
orig_y
=
screen_info
->
orig_video_lines
-
1
;
24
25
switch
(
info
->
video_type
) {
26
case
XEN_VGATYPE_TEXT_MODE_3
:
27
if
(
size
<
offsetof
(
struct
dom0_vga_console_info
, u.text_mode_3)
28
+
sizeof
(
info
->
u
.
text_mode_3
))
29
break
;
30
screen_info
->
orig_video_lines
=
info
->
u
.
text_mode_3
.
rows
;
31
screen_info
->
orig_video_cols
=
info
->
u
.
text_mode_3
.
columns
;
32
screen_info
->
orig_x
=
info
->
u
.
text_mode_3
.
cursor_x
;
33
screen_info
->
orig_y
=
info
->
u
.
text_mode_3
.
cursor_y
;
34
screen_info
->
orig_video_points
=
35
info
->
u
.
text_mode_3
.
font_height
;
36
break
;
37
38
case
XEN_VGATYPE_EFI_LFB
:
39
case
XEN_VGATYPE_VESA_LFB
:
40
if
(
size
<
offsetof
(
struct
dom0_vga_console_info
,
41
u.vesa_lfb.gbl_caps))
42
break
;
43
screen_info
->
orig_video_isVGA
=
VIDEO_TYPE_VLFB
;
44
screen_info
->
lfb_width
=
info
->
u
.
vesa_lfb
.
width
;
45
screen_info
->
lfb_height
=
info
->
u
.
vesa_lfb
.
height
;
46
screen_info
->
lfb_depth
=
info
->
u
.
vesa_lfb
.
bits_per_pixel
;
47
screen_info
->
lfb_base
=
info
->
u
.
vesa_lfb
.
lfb_base
;
48
screen_info
->
lfb_size
=
info
->
u
.
vesa_lfb
.
lfb_size
;
49
screen_info
->
lfb_linelength
=
info
->
u
.
vesa_lfb
.
bytes_per_line
;
50
screen_info
->
red_size
=
info
->
u
.
vesa_lfb
.
red_size
;
51
screen_info
->
red_pos
=
info
->
u
.
vesa_lfb
.
red_pos
;
52
screen_info
->
green_size
=
info
->
u
.
vesa_lfb
.
green_size
;
53
screen_info
->
green_pos
=
info
->
u
.
vesa_lfb
.
green_pos
;
54
screen_info
->
blue_size
=
info
->
u
.
vesa_lfb
.
blue_size
;
55
screen_info
->
blue_pos
=
info
->
u
.
vesa_lfb
.
blue_pos
;
56
screen_info
->
rsvd_size
=
info
->
u
.
vesa_lfb
.
rsvd_size
;
57
screen_info
->
rsvd_pos
=
info
->
u
.
vesa_lfb
.
rsvd_pos
;
58
59
if
(
size
>=
offsetof
(
struct
dom0_vga_console_info
,
60
u.vesa_lfb.ext_lfb_base)
61
+
sizeof
(
info
->
u
.
vesa_lfb
.
ext_lfb_base
)
62
&&
info
->
u
.
vesa_lfb
.
ext_lfb_base
) {
63
screen_info
->
ext_lfb_base
=
info
->
u
.
vesa_lfb
.
ext_lfb_base
;
64
screen_info
->
capabilities
|=
VIDEO_CAPABILITY_64BIT_BASE
;
65
}
66
67
if
(
info
->
video_type
==
XEN_VGATYPE_EFI_LFB
) {
68
screen_info
->
orig_video_isVGA
=
VIDEO_TYPE_EFI
;
69
break
;
70
}
71
72
if
(
size
>=
offsetof
(
struct
dom0_vga_console_info
,
73
u.vesa_lfb.mode_attrs)
74
+
sizeof
(
info
->
u
.
vesa_lfb
.
mode_attrs
))
75
screen_info
->
vesa_attributes
=
info
->
u
.
vesa_lfb
.
mode_attrs
;
76
break
;
77
}
78
}
79