| -- |
| -- 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; |