diff options
Diffstat (limited to 'src/drivers/intel/gma/text_fb/gma.adb')
-rw-r--r-- | src/drivers/intel/gma/text_fb/gma.adb | 75 |
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; |