aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/intel/gma/text_fb
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/intel/gma/text_fb')
-rw-r--r--src/drivers/intel/gma/text_fb/gma.adb75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/drivers/intel/gma/text_fb/gma.adb b/src/drivers/intel/gma/text_fb/gma.adb
new file mode 100644
index 0000000000..bbb6d74e3d
--- /dev/null
+++ b/src/drivers/intel/gma/text_fb/gma.adb
@@ -0,0 +1,75 @@
+with HW.GFX;
+with HW.GFX.GMA;
+
+use HW.GFX;
+use HW.GFX.GMA;
+
+with GMA.Mainboard;
+
+package body GMA
+is
+
+ function vbe_mode_info_valid return Interfaces.C.int
+ is
+ begin
+ return 0;
+ end vbe_mode_info_valid;
+
+ procedure fill_lb_framebuffer (framebuffer : out lb_framebuffer)
+ is
+ begin
+ null;
+ end fill_lb_framebuffer;
+
+ ----------------------------------------------------------------------------
+
+ procedure gfxinit
+ (mmio_base : in word64;
+ linear_fb : in word64;
+ phys_fb : in word32;
+ lightup_ok : out Interfaces.C.int)
+ is
+ ports : Port_List;
+ configs : Configs_Type;
+
+ success : boolean;
+
+ -- from pc80/vga driver
+ procedure vga_io_init;
+ pragma Import (C, vga_io_init, "vga_io_init");
+ procedure vga_textmode_init;
+ pragma Import (C, vga_textmode_init, "vga_textmode_init");
+ begin
+ lightup_ok := 0;
+
+ HW.GFX.GMA.Initialize
+ (MMIO_Base => mmio_base,
+ Success => success);
+
+ if success then
+ ports := Mainboard.ports;
+ HW.GFX.GMA.Scan_Ports
+ (Configs => configs,
+ Ports => ports,
+ Max_Pipe => Primary);
+
+ if configs (Primary).Port /= Disabled then
+ vga_io_init;
+ vga_textmode_init;
+
+ configs (Primary).Framebuffer :=
+ (Width => 640,
+ Height => 400,
+ BPC => Auto_BPC, -- ignored for VGA plane
+ Stride => 320, -- ignored
+ Offset => VGA_PLANE_FRAMEBUFFER_OFFSET);
+
+ HW.GFX.GMA.Dump_Configs (configs);
+ HW.GFX.GMA.Update_Outputs (configs);
+
+ lightup_ok := 1;
+ end if;
+ end if;
+ end gfxinit;
+
+end GMA;