<p>Nico Huber has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/27146">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gfx_test: Refactor to allow Restrictions (No_Elaboration_Code)<br><br>Move the `Ada.Numerics.Discrete_Random.Generator` into the Main()<br>procedure.<br><br>Change-Id: I63c72501fd7d49574042fc5a459d6751a776a1f1<br>Signed-off-by: Nico Huber <nico.h@gmx.de><br>---<br>M gfxtest/hw-gfx-gma-gfx_test.adb<br>1 file changed, 31 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/libgfxinit refs/changes/46/27146/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/gfxtest/hw-gfx-gma-gfx_test.adb b/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>index 736b93d..fc1868f 100644</span><br><span>--- a/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>+++ b/gfxtest/hw-gfx-gma-gfx_test.adb</span><br><span>@@ -20,8 +20,8 @@</span><br><span>    Seed                 : constant := 12345;</span><br><span> </span><br><span>    package Rand_P is new Ada.Numerics.Discrete_Random (Natural);</span><br><span style="color: hsl(0, 100%, 40%);">-   Gen : Rand_P.Generator;</span><br><span style="color: hsl(0, 100%, 40%);">-   function Rand return Int32 is (Int32 (Rand_P.Random (Gen)));</span><br><span style="color: hsl(120, 100%, 40%);">+   function Rand (Gen : Rand_P.Generator)</span><br><span style="color: hsl(120, 100%, 40%);">+      return Int32 is (Int32 (Rand_P.Random (Gen)));</span><br><span> </span><br><span>    Start_X : constant := 0;</span><br><span>    Start_Y : constant := 0;</span><br><span>@@ -341,7 +341,7 @@</span><br><span> </span><br><span>    Pipes : GMA.Pipe_Configs;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   procedure Prepare_Configs (Rotation : Rotation_Type)</span><br><span style="color: hsl(120, 100%, 40%);">+   procedure Prepare_Configs (Rotation : Rotation_Type; Gen : Rand_P.Generator)</span><br><span>    is</span><br><span>       use type HW.GFX.GMA.Port_Type;</span><br><span> </span><br><span>@@ -366,7 +366,7 @@</span><br><span>             end if;</span><br><span>          end if;</span><br><span>          Prepare_Cursors (Cursors (Pipe), Offset);</span><br><span style="color: hsl(0, 100%, 40%);">-         Pipes (Pipe).Cursor := Cursors (Pipe) (Cursor_Size'Val (Rand mod 3));</span><br><span style="color: hsl(120, 100%, 40%);">+         Pipes (Pipe).Cursor := Cursors (Pipe) (Cursor_Size'Val (Rand (Gen) mod 3));</span><br><span>       end loop;</span><br><span> </span><br><span>       GMA.Dump_Configs (Pipes);</span><br><span>@@ -427,18 +427,14 @@</span><br><span>       Color : Pipe_Index;</span><br><span>       Size : Cursor_Size;</span><br><span>    end record;</span><br><span style="color: hsl(0, 100%, 40%);">-   function Cursor_Rand return Int32 is (Rand mod 51 - 25);</span><br><span style="color: hsl(0, 100%, 40%);">-   Cursor_Infos : array (Pipe_Index) of Cursor_Info :=</span><br><span style="color: hsl(0, 100%, 40%);">-     (others =></span><br><span style="color: hsl(0, 100%, 40%);">-        (Color    => Pipe_Index'Val (Rand mod 3),</span><br><span style="color: hsl(0, 100%, 40%);">-         Size     => Cursor_Size'Val (Rand mod 3),</span><br><span style="color: hsl(0, 100%, 40%);">-         X_Velo   => 3 * Cursor_Rand,</span><br><span style="color: hsl(0, 100%, 40%);">-         Y_Velo   => 3 * Cursor_Rand,</span><br><span style="color: hsl(0, 100%, 40%);">-         others   => Cursor_Rand));</span><br><span style="color: hsl(120, 100%, 40%);">+   function Cursor_Rand (Gen : Rand_P.Generator)</span><br><span style="color: hsl(120, 100%, 40%);">+      return Int32 is (Rand (Gen) mod 51 - 25);</span><br><span style="color: hsl(120, 100%, 40%);">+   Cursor_Infos : array (Pipe_Index) of Cursor_Info;</span><br><span> </span><br><span>    procedure Move_Cursors</span><br><span>      (Pipes    : in out GMA.Pipe_Configs;</span><br><span style="color: hsl(0, 100%, 40%);">-      Time_MS  : in     Natural)</span><br><span style="color: hsl(120, 100%, 40%);">+      Time_MS  : in     Natural;</span><br><span style="color: hsl(120, 100%, 40%);">+      Gen      : in     Rand_P.Generator)</span><br><span>    is</span><br><span>       procedure Select_New_Cursor</span><br><span>         (P  : in     Pipe_Index;</span><br><span>@@ -448,12 +444,12 @@</span><br><span>          Old_C : constant Cursor_Type := C;</span><br><span>       begin</span><br><span>          -- change either size or color</span><br><span style="color: hsl(0, 100%, 40%);">-         if Rand mod 2 = 0 then</span><br><span style="color: hsl(120, 100%, 40%);">+         if Rand (Gen) mod 2 = 0 then</span><br><span>             CI.Color := Pipe_Index'Val</span><br><span style="color: hsl(0, 100%, 40%);">-              ((Pipe_Index'Pos (CI.Color) + 1 + Rand mod 2) mod 3);</span><br><span style="color: hsl(120, 100%, 40%);">+              ((Pipe_Index'Pos (CI.Color) + 1 + Rand (Gen) mod 2) mod 3);</span><br><span>          else</span><br><span>             CI.Size := Cursor_Size'Val</span><br><span style="color: hsl(0, 100%, 40%);">-              ((Cursor_Size'Pos (CI.Size) + 1 + Rand mod 2) mod 3);</span><br><span style="color: hsl(120, 100%, 40%);">+              ((Cursor_Size'Pos (CI.Size) + 1 + Rand (Gen) mod 2) mod 3);</span><br><span>          end if;</span><br><span>          C := Cursors (CI.Color) (CI.Size);</span><br><span>          C.Center_X := Old_C.Center_X;</span><br><span>@@ -482,8 +478,8 @@</span><br><span>                Update : Boolean := False;</span><br><span>             begin</span><br><span>                if Cnt mod 16 = 0 then</span><br><span style="color: hsl(0, 100%, 40%);">-                  CI.X_Acc := Cursor_Rand;</span><br><span style="color: hsl(0, 100%, 40%);">-                  CI.Y_Acc := Cursor_Rand;</span><br><span style="color: hsl(120, 100%, 40%);">+                  CI.X_Acc := Cursor_Rand (Gen);</span><br><span style="color: hsl(120, 100%, 40%);">+                  CI.Y_Acc := Cursor_Rand (Gen);</span><br><span>                end if;</span><br><span>                CI.X_Velo := CI.X_Velo + CI.X_Acc;</span><br><span>                CI.Y_Velo := CI.Y_Velo + CI.Y_Acc;</span><br><span>@@ -537,6 +533,8 @@</span><br><span>       Dev_Init,</span><br><span>       Initialized : Boolean;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      Gen : Rand_P.Generator;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       function iopl (level : Interfaces.C.int) return Interfaces.C.int;</span><br><span>       pragma Import (C, iopl, "iopl");</span><br><span>    begin</span><br><span>@@ -584,7 +582,7 @@</span><br><span>       if Initialized then</span><br><span>          Backup_GTT;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         Prepare_Configs (Rotation);</span><br><span style="color: hsl(120, 100%, 40%);">+         Prepare_Configs (Rotation, Gen);</span><br><span> </span><br><span>          GMA.Update_Outputs (Pipes);</span><br><span> </span><br><span>@@ -600,6 +598,14 @@</span><br><span>             end loop;</span><br><span>          end loop;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         Cursor_Infos :=</span><br><span style="color: hsl(120, 100%, 40%);">+           (others =></span><br><span style="color: hsl(120, 100%, 40%);">+              (Color    => Pipe_Index'Val (Rand (Gen) mod 3),</span><br><span style="color: hsl(120, 100%, 40%);">+               Size     => Cursor_Size'Val (Rand (Gen) mod 3),</span><br><span style="color: hsl(120, 100%, 40%);">+               X_Velo   => 3 * Cursor_Rand (Gen),</span><br><span style="color: hsl(120, 100%, 40%);">+               Y_Velo   => 3 * Cursor_Rand (Gen),</span><br><span style="color: hsl(120, 100%, 40%);">+               others   => Cursor_Rand (Gen)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          if Delay_MS < Primary_Delay_MS + Secondary_Delay_MS then</span><br><span>             Script_Cursors (Pipes, Delay_MS);</span><br><span>          else -- getting bored?</span><br><span>@@ -609,10 +615,10 @@</span><br><span>                New_Pipes : GMA.Pipe_Configs := Pipes;</span><br><span> </span><br><span>                function Rand_Div (Num : Position_Type) return Position_Type is</span><br><span style="color: hsl(0, 100%, 40%);">-                 (case Rand mod 4 is</span><br><span style="color: hsl(0, 100%, 40%);">-                     when 3 => Rand mod Num / 3,</span><br><span style="color: hsl(0, 100%, 40%);">-                     when 2 => Rand mod Num / 2,</span><br><span style="color: hsl(0, 100%, 40%);">-                     when 1 => Rand mod Num,</span><br><span style="color: hsl(120, 100%, 40%);">+                 (case Rand (Gen) mod 4 is</span><br><span style="color: hsl(120, 100%, 40%);">+                     when 3 => Rand (Gen) mod Num / 3,</span><br><span style="color: hsl(120, 100%, 40%);">+                     when 2 => Rand (Gen) mod Num / 2,</span><br><span style="color: hsl(120, 100%, 40%);">+                     when 1 => Rand (Gen) mod Num,</span><br><span>                      when others => 0);</span><br><span>             begin</span><br><span>                Rand_P.Reset (Gen, Seed);</span><br><span>@@ -645,10 +651,10 @@</span><br><span>                   end loop;</span><br><span>                   GMA.Dump_Configs (New_Pipes);</span><br><span>                   GMA.Update_Outputs (New_Pipes);</span><br><span style="color: hsl(0, 100%, 40%);">-                  Move_Cursors (New_Pipes, Secondary_Delay_MS);</span><br><span style="color: hsl(120, 100%, 40%);">+                  Move_Cursors (New_Pipes, Secondary_Delay_MS, Gen);</span><br><span>                   Delay_MS := Delay_MS - Secondary_Delay_MS;</span><br><span>                end loop;</span><br><span style="color: hsl(0, 100%, 40%);">-               Move_Cursors (New_Pipes, Delay_MS);</span><br><span style="color: hsl(120, 100%, 40%);">+               Move_Cursors (New_Pipes, Delay_MS, Gen);</span><br><span>             end;</span><br><span>          end if;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/27146">change 27146</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/27146"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libgfxinit </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I63c72501fd7d49574042fc5a459d6751a776a1f1 </div>
<div style="display:none"> Gerrit-Change-Number: 27146 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Nico Huber <nico.h@gmx.de> </div>