89 lines
3.0 KiB
Ada
89 lines
3.0 KiB
Ada
--
|
|
-- Copyright (C) 2015-2017 secunet Security Networks AG
|
|
--
|
|
-- This program is free software; you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation; either version 2 of the License, or
|
|
-- (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
--
|
|
|
|
with HW;
|
|
|
|
private package HW.GFX.GMA.Config_Helpers
|
|
is
|
|
|
|
function To_GPU_Port
|
|
(Pipe : Pipe_Index;
|
|
Port : Active_Port_Type)
|
|
return GPU_Port;
|
|
|
|
function To_PCH_Port (Port : Active_Port_Type) return PCH_Port;
|
|
|
|
function To_Display_Type (Port : Active_Port_Type) return Display_Type;
|
|
|
|
procedure Fill_Port_Config
|
|
(Port_Cfg : out Port_Config;
|
|
Pipe : in Pipe_Index;
|
|
Port : in Port_Type;
|
|
Mode : in Mode_Type;
|
|
Success : out Boolean)
|
|
with
|
|
Post =>
|
|
(if Success then
|
|
Port_Cfg.Mode.H_Visible = Mode.H_Visible and
|
|
Port_Cfg.Mode.V_Visible = Mode.V_Visible);
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
pragma Warnings (GNAT, Off, """Integer_32"" is already use-visible *",
|
|
Reason => "Needed for older compiler versions");
|
|
use type HW.Pos32;
|
|
pragma Warnings (GNAT, On, """Integer_32"" is already use-visible *");
|
|
|
|
-- Validate just enough to satisfy Pipe_Setup pre conditions.
|
|
function Valid_FB
|
|
(FB : Framebuffer_Type;
|
|
Mode : Mode_Type)
|
|
return Boolean is
|
|
(Rotated_Width (FB) <= Mode.H_Visible and
|
|
Rotated_Height (FB) <= Mode.V_Visible and
|
|
(FB.Offset = VGA_PLANE_FRAMEBUFFER_OFFSET or
|
|
FB.Height + FB.Start_Y <= FB.V_Stride));
|
|
|
|
-- Also validate that we only use supported values / features.
|
|
function Validate_Config
|
|
(FB : Framebuffer_Type;
|
|
Mode : Mode_Type;
|
|
Pipe : Pipe_Index)
|
|
return Boolean
|
|
with
|
|
Post => (if Validate_Config'Result then Valid_FB (FB, Mode));
|
|
|
|
-- For still active pipes, ensure only timings
|
|
-- changed that don't affect FB validity.
|
|
function Stable_FB (Old_C, New_C : Pipe_Configs) return Boolean is
|
|
(for all P in Pipe_Index =>
|
|
New_C (P).Port = Disabled or
|
|
(New_C (P).Port = Old_C (P).Port and
|
|
New_C (P).Framebuffer = Old_C (P).Framebuffer and
|
|
New_C (P).Cursor = Old_C (P).Cursor and
|
|
New_C (P).Mode.H_Visible = Old_C (P).Mode.H_Visible and
|
|
New_C (P).Mode.V_Visible = Old_C (P).Mode.V_Visible));
|
|
|
|
----------------------------------------------------------------------------
|
|
|
|
function Highest_Dotclock (Configs : Pipe_Configs) return Frequency_Type;
|
|
|
|
procedure Limit_Dotclocks
|
|
(Configs : in out Pipe_Configs;
|
|
Max : in Frequency_Type)
|
|
with
|
|
Post => Stable_FB (Configs'Old, Configs);
|
|
|
|
end HW.GFX.GMA.Config_Helpers;
|