blob: cec21b5310c82d9c59d61b64387785761ce5ee1c [file] [log] [blame]
Nico Huber9bafc492020-05-18 23:33:28 +02001-- SPDX-License-Identifier: GPL-2.0-only
2
Nico Huber66203df2016-11-07 17:24:47 +01003with HW.GFX;
4with HW.GFX.GMA;
Nico Huber989aae92017-03-08 23:03:01 +01005with HW.GFX.GMA.Display_Probing;
Nico Huber66203df2016-11-07 17:24:47 +01006
7use HW.GFX;
8use HW.GFX.GMA;
Nico Huber989aae92017-03-08 23:03:01 +01009use HW.GFX.GMA.Display_Probing;
Nico Huber66203df2016-11-07 17:24:47 +010010
11with GMA.Mainboard;
12
Nico Huber74586292019-02-18 01:21:11 +010013package body GMA.GFX_Init
Nico Huber66203df2016-11-07 17:24:47 +010014is
15
Nico Huber504d1ef2017-07-16 16:40:41 +020016 procedure gfxinit (lightup_ok : out Interfaces.C.int)
Nico Huber66203df2016-11-07 17:24:47 +010017 is
18 ports : Port_List;
Nico Huber989aae92017-03-08 23:03:01 +010019 configs : Pipe_Configs;
Nico Huber66203df2016-11-07 17:24:47 +010020
21 success : boolean;
22
23 -- from pc80/vga driver
24 procedure vga_io_init;
25 pragma Import (C, vga_io_init, "vga_io_init");
26 procedure vga_textmode_init;
27 pragma Import (C, vga_textmode_init, "vga_textmode_init");
28 begin
29 lightup_ok := 0;
30
Nico Huber504d1ef2017-07-16 16:40:41 +020031 HW.GFX.GMA.Initialize (Success => success);
Nico Huber66203df2016-11-07 17:24:47 +010032
33 if success then
34 ports := Mainboard.ports;
Nico Huber989aae92017-03-08 23:03:01 +010035 HW.GFX.GMA.Display_Probing.Scan_Ports
Nico Huber66203df2016-11-07 17:24:47 +010036 (Configs => configs,
37 Ports => ports,
38 Max_Pipe => Primary);
39
40 if configs (Primary).Port /= Disabled then
Nico Huber82049cb2017-09-04 15:11:41 +020041 HW.GFX.GMA.Power_Up_VGA;
Nico Huber66203df2016-11-07 17:24:47 +010042 vga_io_init;
43 vga_textmode_init;
44
Nico Huber71cbd712018-03-29 15:15:10 +020045 -- override probed framebuffer config
46 configs (Primary).Framebuffer.Width := 640;
47 configs (Primary).Framebuffer.Height := 400;
48 configs (Primary).Framebuffer.Offset :=
49 VGA_PLANE_FRAMEBUFFER_OFFSET;
Nico Huber66203df2016-11-07 17:24:47 +010050
Jeremy Compostellae02e9182023-01-24 13:59:46 -070051 pragma Debug (HW.GFX.GMA.Dump_Configs (configs));
Nico Huber66203df2016-11-07 17:24:47 +010052 HW.GFX.GMA.Update_Outputs (configs);
53
54 lightup_ok := 1;
55 end if;
56 end if;
57 end gfxinit;
58
Jeremy Compostella47f154c2022-12-01 15:55:06 -070059 procedure gfxstop (stop_ok : out Interfaces.C.int)
60 is
61 success : boolean;
62 begin
63 HW.GFX.GMA.Initialize (Clean_State => True,
Elyes Haouasc9f83802023-01-19 06:53:30 +010064 Success => success);
Jeremy Compostella47f154c2022-12-01 15:55:06 -070065 if success then
66 stop_ok := 1;
67 else
68 stop_ok := 0;
69 end if;
70 end gfxstop;
71
Nico Huber74586292019-02-18 01:21:11 +010072end GMA.GFX_Init;