| -- |
| -- 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.Config; |
| with HW.MMIO_Range; |
| pragma Elaborate_All (HW.MMIO_Range); |
| |
| package body HW.GFX.Framebuffer_Filler |
| with |
| Refined_State => (State => FB.State, Base_Address => FB.Base_Address) |
| is |
| |
| type FB_Index is new Natural range |
| 0 .. Natural (Width_Type'Last * Height_Type'Last) - 1; |
| type FB_Range is array (FB_Index) of Word32 with Pack; |
| package FB is new MMIO_Range (0, Word32, FB_Index, FB_Range); |
| |
| procedure Fill (Linear_FB : Word64; Framebuffer : Framebuffer_Type) |
| is |
| Line_Start : Int32 := 0; |
| begin |
| if not HW.Config.Dynamic_MMIO then |
| return; |
| end if; |
| |
| FB.Set_Base_Address (Linear_FB); |
| for Line in 0 .. Framebuffer.Height - 1 loop |
| pragma Loop_Invariant (Line_Start = Line * Framebuffer.Stride); |
| for Col in 0 .. Framebuffer.Width - 1 loop |
| pragma Loop_Invariant (Line_Start = Line * Framebuffer.Stride); |
| FB.Write (FB_Index (Line_Start + Col), 16#ff000000#); |
| end loop; |
| Line_Start := Line_Start + Framebuffer.Stride; |
| end loop; |
| end Fill; |
| |
| end HW.GFX.Framebuffer_Filler; |