Initial upstream commit

The history contained unlicensed code so everything got squashed, sorry.

Change-Id: I9f5775208f9df6fb29074bf3bc498f68cb17b3a0
Signed-off-by: Nico Huber <nico.huber@secunet.com>
diff --git a/common/hw-gfx-gma.ads b/common/hw-gfx-gma.ads
new file mode 100644
index 0000000..465cf08
--- /dev/null
+++ b/common/hw-gfx-gma.ads
@@ -0,0 +1,138 @@
+--
+-- Copyright (C) 2015-2016 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; version 2 of the License.
+--
+-- 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.Time;
+with HW.Port_IO;
+
+package HW.GFX.GMA
+with
+   Abstract_State =>
+     (State,
+      Init_State,
+      Config_State,
+      (Device_State with External)),
+   Initializes =>
+     (Init_State,
+      Config_State)
+is
+
+   type CPU_Type is
+     (Ironlake,
+      Sandybridge,
+      Ivybridge,
+      Haswell,
+      Broadwell,
+      Skylake);
+
+   type CPU_Variant is (Normal, ULT);
+
+   type Port_Type is
+     (Disabled,
+      Internal,
+      DP1,
+      DP2,
+      DP3,
+      Digital1,
+      Digital2,
+      Digital3,
+      Analog);
+   type Port_List_Range is range 0 .. 7;
+   type Port_List is array (Port_List_Range) of Port_Type;
+
+   type Config_Type is record
+      Port        : Port_Type;
+      Framebuffer : Framebuffer_Type;
+      Mode        : Mode_Type;
+   end record;
+   type Config_Index is (Primary, Secondary, Tertiary);
+   type Configs_Type is array (Config_Index) of Config_Type;
+
+   procedure Initialize
+     (MMIO_Base   : in     Word64 := 0;
+      Write_Delay : in     Word64 := 0;
+      Success     :    out Boolean)
+   with
+      Global =>
+        (In_Out => (Config_State, Device_State, Port_IO.State),
+         Output => (State, Init_State),
+         Input  => (Time.State)),
+      Post => Success = Is_Initialized;
+   function Is_Initialized return Boolean
+   with
+      Global => (Input => Init_State);
+
+   procedure Legacy_VGA_Off;
+
+   procedure Scan_Ports
+     (Configs  :    out Configs_Type;
+      Ports    : in     Port_List);
+   procedure Auto_Configure
+     (Configs     : in out Configs_Type;
+      Keep_Power  : in     Boolean := False);
+   procedure Update_Outputs (Configs : Configs_Type);
+
+   pragma Warnings (GNATprove, Off, "subprogram ""Dump_Configs"" has no effect",
+                    Reason => "It's only used for debugging");
+   procedure Dump_Configs (Configs : Configs_Type);
+
+   type GTT_Address_Type is mod 2 ** 39;
+   type GTT_Range is range 0 .. 16#8_0000# - 1;
+   procedure Write_GTT
+     (GTT_Page       : GTT_Range;
+      Device_Address : GTT_Address_Type;
+      Valid          : Boolean);
+
+   procedure Setup_Default_GTT (FB : Framebuffer_Type; Phys_FB : Word32);
+
+private
+
+   type GPU_Port is (DIGI_A, DIGI_B, DIGI_C, DIGI_D, DIGI_E);
+
+   subtype Digital_Port is GPU_Port range DIGI_A .. DIGI_E;
+
+   type PCH_Port is
+     (PCH_DAC, PCH_LVDS,
+      PCH_HDMI_B, PCH_HDMI_C, PCH_HDMI_D,
+      PCH_DP_B, PCH_DP_C, PCH_DP_D);
+
+   subtype PCH_HDMI_Port is PCH_Port range PCH_HDMI_B .. PCH_HDMI_D;
+   subtype PCH_DP_Port is PCH_Port range PCH_DP_B .. PCH_DP_D;
+
+   type Display_Type is (None, LVDS, DP, HDMI, VGA);
+
+   subtype Internal_Type is Display_Type range None .. DP;
+
+   type Port_Config is
+      record
+         Port     : GPU_Port;
+         PCH_Port : GMA.PCH_Port;
+         Display  : Display_Type;
+         Mode     : Mode_Type;
+         Is_FDI   : Boolean;
+         FDI      : DP_Link;
+         DP       : DP_Link;
+      end record;
+
+   type FDI_Training_Type is (Simple_Training, Full_Training, Auto_Training);
+
+   ----------------------------------------------------------------------------
+
+   type DP_Port is (DP_A, DP_B, DP_C, DP_D);
+
+   ----------------------------------------------------------------------------
+
+   VGA_SR_INDEX   : constant Port_IO.Port_Type  := 16#03c4#;
+   VGA_SR_DATA    : constant Port_IO.Port_Type  := 16#03c5#;
+   VGA_SR01       : constant Word8 := 16#01#;
+
+end HW.GFX.GMA;