61 lines
2.1 KiB
Ada
61 lines
2.1 KiB
Ada
--
|
|
-- Copyright (C) 2016, 2019 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;
|
|
|
|
private package HW.GFX.GMA.PCode is
|
|
|
|
-- We have to ensure that previous usage of the mailbox finished
|
|
-- (Wait_Ready) or know that we already did so (Mailbox_Ready).
|
|
--
|
|
-- If we wait for the other side to acknowledge (Wait_Ack), we
|
|
-- know that it's ready (=> Mailbox_Ready).
|
|
|
|
-- XXX: Supposed to be a `Ghost` variable, but GNAT seems too broken?
|
|
Mailbox_Ready : Boolean with Part_Of => HW.GFX.GMA.State;
|
|
|
|
-- Just send a command, discard the reply.
|
|
procedure Mailbox_Write
|
|
(MBox : in Word32;
|
|
Command : in Word64;
|
|
Wait_Ready : in Boolean := False;
|
|
Wait_Ack : in Boolean := True;
|
|
Success : out Boolean)
|
|
with
|
|
Pre => Mailbox_Ready or Wait_Ready,
|
|
Post => (if Wait_Ack and Success then Mailbox_Ready);
|
|
|
|
-- Repeatedly send a request command the expected reply is received.
|
|
procedure Mailbox_Request
|
|
(MBox : in Word32;
|
|
Command : in Word64;
|
|
Reply_Mask : in Word64;
|
|
Reply : in Word64 := 16#ffff_ffff_ffff_ffff#;
|
|
TOut_MS : in Natural := Registers.Default_Timeout_MS;
|
|
Wait_Ready : in Boolean := False;
|
|
Success : out Boolean)
|
|
with
|
|
Pre => Mailbox_Ready or Wait_Ready,
|
|
Post => (if Success then Mailbox_Ready);
|
|
|
|
-- For final mailbox commands that don't have to wait.
|
|
procedure Mailbox_Write
|
|
(MBox : Word32;
|
|
Command : Word64;
|
|
Wait_Ready : Boolean := False)
|
|
with
|
|
Pre => Mailbox_Ready or Wait_Ready;
|
|
|
|
end HW.GFX.GMA.PCode;
|