1 #include <linux/screen_info.h>
2 #include <linux/init.h>
4 #include <asm/bootparam.h>
7 #include <xen/interface/xen.h>
11 void __init
xen_init_vga(const struct dom0_vga_console_info
*info
, size_t size
)
13 struct screen_info
*screen_info
= &boot_params
.screen_info
;
15 /* This is drawn from a dump from vgacon:startup in
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;
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
))
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
;
38 case XEN_VGATYPE_VESA_LFB
:
39 if (size
< offsetof(struct dom0_vga_console_info
,
42 screen_info
->orig_video_isVGA
= VIDEO_TYPE_VLFB
;
43 screen_info
->lfb_width
= info
->u
.vesa_lfb
.width
;
44 screen_info
->lfb_height
= info
->u
.vesa_lfb
.height
;
45 screen_info
->lfb_depth
= info
->u
.vesa_lfb
.bits_per_pixel
;
46 screen_info
->lfb_base
= info
->u
.vesa_lfb
.lfb_base
;
47 screen_info
->lfb_size
= info
->u
.vesa_lfb
.lfb_size
;
48 screen_info
->lfb_linelength
= info
->u
.vesa_lfb
.bytes_per_line
;
49 screen_info
->red_size
= info
->u
.vesa_lfb
.red_size
;
50 screen_info
->red_pos
= info
->u
.vesa_lfb
.red_pos
;
51 screen_info
->green_size
= info
->u
.vesa_lfb
.green_size
;
52 screen_info
->green_pos
= info
->u
.vesa_lfb
.green_pos
;
53 screen_info
->blue_size
= info
->u
.vesa_lfb
.blue_size
;
54 screen_info
->blue_pos
= info
->u
.vesa_lfb
.blue_pos
;
55 screen_info
->rsvd_size
= info
->u
.vesa_lfb
.rsvd_size
;
56 screen_info
->rsvd_pos
= info
->u
.vesa_lfb
.rsvd_pos
;
57 if (size
>= offsetof(struct dom0_vga_console_info
,
59 + sizeof(info
->u
.vesa_lfb
.gbl_caps
))
60 screen_info
->capabilities
= info
->u
.vesa_lfb
.gbl_caps
;
61 if (size
>= offsetof(struct dom0_vga_console_info
,
62 u
.vesa_lfb
.mode_attrs
)
63 + sizeof(info
->u
.vesa_lfb
.mode_attrs
))
64 screen_info
->vesa_attributes
= info
->u
.vesa_lfb
.mode_attrs
;