--
-- 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; 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.GFX.GMA.Registers;

use type HW.Int32;

private package HW.GFX.GMA.Pipe_Setup
is

   type Controller_Kind is (A, B, C);
   type Controller_Type is private;
   type Controller_Array is array (Controller_Kind) of Controller_Type;

   type Pipe_Head is (Head_EDP, Head_A, Head_B, Head_C);
   type Head_Type is private;
   type Head_Array is array (Pipe_Head) of Head_Type;

   procedure On
     (Controller  : Controller_Type;
      Head        : Head_Type;
      Port_Cfg    : Port_Config;
      Framebuffer : Framebuffer_Type)
   with
      Pre =>
         Framebuffer.Width <= Pos32 (Port_Cfg.Mode.H_Visible) and
         Framebuffer.Height <= Pos32 (Port_Cfg.Mode.V_Visible);

   procedure Off
     (Controller : Controller_Type;
      Head       : Head_Type);

   procedure All_Off;

   function Get_Pipe_Hint (Head : Head_Type) return Word32;

   procedure Update_Offset
     (Controller  : Controller_Type;
      Framebuffer : HW.GFX.Framebuffer_Type);

   Controllers : constant Controller_Array;

   Heads : constant Head_Array;

   function Default_Pipe_Head (Kind : Controller_Kind) return Head_Type;

private

   subtype WM_Levels is Natural range 0 .. 7;
   type PLANE_WM_Type is array (WM_Levels) of Registers.Registers_Index;

   type Controller_Type is
      record
         Kind              : Controller_Kind;
         PIPESRC           : Registers.Registers_Index;
         PIPEMISC          : Registers.Registers_Index;
         PF_CTL_1          : Registers.Registers_Index;
         PF_WIN_POS        : Registers.Registers_Index;
         PF_WIN_SZ         : Registers.Registers_Index;
         DSPCNTR           : Registers.Registers_Index;
         DSPLINOFF         : Registers.Registers_Index;
         DSPSTRIDE         : Registers.Registers_Index;
         DSPSURF           : Registers.Registers_Index;
         DSPTILEOFF        : Registers.Registers_Index;
         SPCNTR            : Registers.Registers_Index;
         TRANS_CLK_SEL     : Registers.Registers_Index;
         -- Skylake registers (partially aliased)
         PLANE_CTL         : Registers.Registers_Index;
         PLANE_OFFSET      : Registers.Registers_Index;
         PLANE_POS         : Registers.Registers_Index;
         PLANE_SIZE        : Registers.Registers_Index;
         PLANE_STRIDE      : Registers.Registers_Index;
         PLANE_SURF        : Registers.Registers_Index;
         PS_CTRL_1         : Registers.Registers_Index;
         PS_CTRL_2         : Registers.Registers_Invalid_Index;
         PS_WIN_SZ_1       : Registers.Registers_Index;
         PS_WIN_SZ_2       : Registers.Registers_Invalid_Index;
         WM_LINETIME       : Registers.Registers_Index;
         PLANE_BUF_CFG     : Registers.Registers_Index;
         PLANE_WM          : PLANE_WM_Type;
      end record;

   type Head_Type is
      record
         Head              : Pipe_Head;
         HTOTAL            : Registers.Registers_Index;
         HBLANK            : Registers.Registers_Index;
         HSYNC             : Registers.Registers_Index;
         VTOTAL            : Registers.Registers_Index;
         VBLANK            : Registers.Registers_Index;
         VSYNC             : Registers.Registers_Index;
         PIPECONF          : Registers.Registers_Index;
         PIPE_DATA_M1      : Registers.Registers_Index;
         PIPE_DATA_N1      : Registers.Registers_Index;
         PIPE_LINK_M1      : Registers.Registers_Index;
         PIPE_LINK_N1      : Registers.Registers_Index;
         PIPE_DDI_FUNC_CTL : Registers.Registers_Index;
         PIPE_MSA_MISC     : Registers.Registers_Index;
      end record;

   Controllers : constant Controller_Array := Controller_Array'
     (A => Controller_Type'
        (Kind              => A,
         PIPESRC           => Registers.PIPEASRC,
         PIPEMISC          => Registers.PIPEAMISC,
         PF_CTL_1          => Registers.PFA_CTL_1,
         PF_WIN_POS        => Registers.PFA_WIN_POS,
         PF_WIN_SZ         => Registers.PFA_WIN_SZ,
         DSPCNTR           => Registers.DSPACNTR,
         DSPLINOFF         => Registers.DSPALINOFF,
         DSPSTRIDE         => Registers.DSPASTRIDE,
         DSPSURF           => Registers.DSPASURF,
         DSPTILEOFF        => Registers.DSPATILEOFF,
         SPCNTR            => Registers.SPACNTR,
         TRANS_CLK_SEL     => Registers.TRANSA_CLK_SEL,
         PLANE_CTL         => Registers.DSPACNTR,
         PLANE_OFFSET      => Registers.DSPATILEOFF,
         PLANE_POS         => Registers.PLANE_POS_1_A,
         PLANE_SIZE        => Registers.PLANE_SIZE_1_A,
         PLANE_STRIDE      => Registers.DSPASTRIDE,
         PLANE_SURF        => Registers.DSPASURF,
         PS_CTRL_1         => Registers.PS_CTRL_1_A,
         PS_CTRL_2         => Registers.PS_CTRL_2_A,
         PS_WIN_SZ_1       => Registers.PS_WIN_SZ_1_A,
         PS_WIN_SZ_2       => Registers.PS_WIN_SZ_2_A,
         WM_LINETIME       => Registers.WM_LINETIME_A,
         PLANE_BUF_CFG     => Registers.PLANE_BUF_CFG_1_A,
         PLANE_WM          => PLANE_WM_Type'(
                              Registers.PLANE_WM_1_A_0,
                              Registers.PLANE_WM_1_A_1,
                              Registers.PLANE_WM_1_A_2,
                              Registers.PLANE_WM_1_A_3,
                              Registers.PLANE_WM_1_A_4,
                              Registers.PLANE_WM_1_A_5,
                              Registers.PLANE_WM_1_A_6,
                              Registers.PLANE_WM_1_A_7)),
      B => Controller_Type'
        (Kind              => B,
         PIPESRC           => Registers.PIPEBSRC,
         PIPEMISC          => Registers.PIPEBMISC,
         PF_CTL_1          => Registers.PFB_CTL_1,
         PF_WIN_POS        => Registers.PFB_WIN_POS,
         PF_WIN_SZ         => Registers.PFB_WIN_SZ,
         DSPCNTR           => Registers.DSPBCNTR,
         DSPLINOFF         => Registers.DSPBLINOFF,
         DSPSTRIDE         => Registers.DSPBSTRIDE,
         DSPSURF           => Registers.DSPBSURF,
         DSPTILEOFF        => Registers.DSPBTILEOFF,
         SPCNTR            => Registers.SPBCNTR,
         TRANS_CLK_SEL     => Registers.TRANSB_CLK_SEL,
         PLANE_CTL         => Registers.DSPBCNTR,
         PLANE_OFFSET      => Registers.DSPBTILEOFF,
         PLANE_POS         => Registers.PLANE_POS_1_B,
         PLANE_SIZE        => Registers.PLANE_SIZE_1_B,
         PLANE_STRIDE      => Registers.DSPBSTRIDE,
         PLANE_SURF        => Registers.DSPBSURF,
         PS_CTRL_1         => Registers.PS_CTRL_1_B,
         PS_CTRL_2         => Registers.PS_CTRL_2_B,
         PS_WIN_SZ_1       => Registers.PS_WIN_SZ_1_B,
         PS_WIN_SZ_2       => Registers.PS_WIN_SZ_2_B,
         WM_LINETIME       => Registers.WM_LINETIME_B,
         PLANE_BUF_CFG     => Registers.PLANE_BUF_CFG_1_B,
         PLANE_WM          => PLANE_WM_Type'(
                              Registers.PLANE_WM_1_B_0,
                              Registers.PLANE_WM_1_B_1,
                              Registers.PLANE_WM_1_B_2,
                              Registers.PLANE_WM_1_B_3,
                              Registers.PLANE_WM_1_B_4,
                              Registers.PLANE_WM_1_B_5,
                              Registers.PLANE_WM_1_B_6,
                              Registers.PLANE_WM_1_B_7)),
      C => Controller_Type'
        (Kind              => C,
         PIPESRC           => Registers.PIPECSRC,
         PIPEMISC          => Registers.PIPECMISC,
         PF_CTL_1          => Registers.PFC_CTL_1,
         PF_WIN_POS        => Registers.PFC_WIN_POS,
         PF_WIN_SZ         => Registers.PFC_WIN_SZ,
         DSPCNTR           => Registers.DSPCCNTR,
         DSPLINOFF         => Registers.DSPCLINOFF,
         DSPSTRIDE         => Registers.DSPCSTRIDE,
         DSPSURF           => Registers.DSPCSURF,
         DSPTILEOFF        => Registers.DSPCTILEOFF,
         SPCNTR            => Registers.SPCCNTR,
         TRANS_CLK_SEL     => Registers.TRANSC_CLK_SEL,
         PLANE_CTL         => Registers.DSPCCNTR,
         PLANE_OFFSET      => Registers.DSPCTILEOFF,
         PLANE_POS         => Registers.PLANE_POS_1_C,
         PLANE_SIZE        => Registers.PLANE_SIZE_1_C,
         PLANE_STRIDE      => Registers.DSPCSTRIDE,
         PLANE_SURF        => Registers.DSPCSURF,
         PS_CTRL_1         => Registers.PS_CTRL_1_C,
         PS_CTRL_2         => Registers.Invalid_Register,
         PS_WIN_SZ_1       => Registers.PS_WIN_SZ_1_C,
         PS_WIN_SZ_2       => Registers.Invalid_Register,
         WM_LINETIME       => Registers.WM_LINETIME_C,
         PLANE_BUF_CFG     => Registers.PLANE_BUF_CFG_1_C,
         PLANE_WM          => PLANE_WM_Type'(
                              Registers.PLANE_WM_1_C_0,
                              Registers.PLANE_WM_1_C_1,
                              Registers.PLANE_WM_1_C_2,
                              Registers.PLANE_WM_1_C_3,
                              Registers.PLANE_WM_1_C_4,
                              Registers.PLANE_WM_1_C_5,
                              Registers.PLANE_WM_1_C_6,
                              Registers.PLANE_WM_1_C_7)));

   Heads : constant Head_Array := Head_Array'
     (Head_EDP => Head_Type'
        (Head              => Head_EDP,
         HTOTAL            => Registers.HTOTAL_EDP,
         HBLANK            => Registers.HBLANK_EDP,
         HSYNC             => Registers.HSYNC_EDP,
         VTOTAL            => Registers.VTOTAL_EDP,
         VBLANK            => Registers.VBLANK_EDP,
         VSYNC             => Registers.VSYNC_EDP,
         PIPECONF          => Registers.PIPE_EDP_CONF,
         PIPE_DATA_M1      => Registers.PIPE_EDP_DATA_M1,
         PIPE_DATA_N1      => Registers.PIPE_EDP_DATA_N1,
         PIPE_LINK_M1      => Registers.PIPE_EDP_LINK_M1,
         PIPE_LINK_N1      => Registers.PIPE_EDP_LINK_N1,
         PIPE_DDI_FUNC_CTL => Registers.PIPE_EDP_DDI_FUNC_CTL,
         PIPE_MSA_MISC     => Registers.PIPE_EDP_MSA_MISC),
      Head_A => Head_Type'
        (Head              => Head_A,
         HTOTAL            => Registers.HTOTAL_A,
         HBLANK            => Registers.HBLANK_A,
         HSYNC             => Registers.HSYNC_A,
         VTOTAL            => Registers.VTOTAL_A,
         VBLANK            => Registers.VBLANK_A,
         VSYNC             => Registers.VSYNC_A,
         PIPECONF          => Registers.PIPEACONF,
         PIPE_DATA_M1      => Registers.PIPEA_DATA_M1,
         PIPE_DATA_N1      => Registers.PIPEA_DATA_N1,
         PIPE_LINK_M1      => Registers.PIPEA_LINK_M1,
         PIPE_LINK_N1      => Registers.PIPEA_LINK_N1,
         PIPE_DDI_FUNC_CTL => Registers.PIPEA_DDI_FUNC_CTL,
         PIPE_MSA_MISC     => Registers.PIPEA_MSA_MISC),
      Head_B => Head_Type'
        (Head              => Head_B,
         HTOTAL            => Registers.HTOTAL_B,
         HBLANK            => Registers.HBLANK_B,
         HSYNC             => Registers.HSYNC_B,
         VTOTAL            => Registers.VTOTAL_B,
         VBLANK            => Registers.VBLANK_B,
         VSYNC             => Registers.VSYNC_B,
         PIPECONF          => Registers.PIPEBCONF,
         PIPE_DATA_M1      => Registers.PIPEB_DATA_M1,
         PIPE_DATA_N1      => Registers.PIPEB_DATA_N1,
         PIPE_LINK_M1      => Registers.PIPEB_LINK_M1,
         PIPE_LINK_N1      => Registers.PIPEB_LINK_N1,
         PIPE_DDI_FUNC_CTL => Registers.PIPEB_DDI_FUNC_CTL,
         PIPE_MSA_MISC     => Registers.PIPEB_MSA_MISC),
      Head_C => Head_Type'
        (Head              => Head_C,
         HTOTAL            => Registers.HTOTAL_C,
         HBLANK            => Registers.HBLANK_C,
         HSYNC             => Registers.HSYNC_C,
         VTOTAL            => Registers.VTOTAL_C,
         VBLANK            => Registers.VBLANK_C,
         VSYNC             => Registers.VSYNC_C,
         PIPECONF          => Registers.PIPECCONF,
         PIPE_DATA_M1      => Registers.PIPEC_DATA_M1,
         PIPE_DATA_N1      => Registers.PIPEC_DATA_N1,
         PIPE_LINK_M1      => Registers.PIPEC_LINK_M1,
         PIPE_LINK_N1      => Registers.PIPEC_LINK_N1,
         PIPE_DDI_FUNC_CTL => Registers.PIPEC_DDI_FUNC_CTL,
         PIPE_MSA_MISC     => Registers.PIPEC_MSA_MISC));

end HW.GFX.GMA.Pipe_Setup;
