Initialize Transfer_Rings.State
[libxhcidbg.git] / src / hw-dbc-transfer_rings.ads
1 --
2 -- Copyright (C) 2016-2017 secunet Security Networks AG
3 --
4 -- This program is free software; you can redistribute it and/or modify
5 -- it under the terms of the GNU General Public License as published by
6 -- the Free Software Foundation; either version 2 of the License, or
7 -- (at your option) any later version.
8 --
9 -- This program is distributed in the hope that it will be useful,
10 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 -- GNU General Public License for more details.
13 --
14
15 private package HW.DbC.Transfer_Rings
16 with
17    Abstract_State => ((State with Part_Of  => HW.DbC.State),
18                       (DMA   with Part_Of  => HW.DbC.DMA,
19                        External            => (Async_Readers, Async_Writers))),
20    Initializes    => State
21 is
22
23    function Physical (EP : Endpoint_Range) return Word64;
24
25    function Full (EP : Endpoint_Range) return Boolean;
26
27    function Last_Started (EP : Endpoint_Range) return Boolean;
28
29    ----------------------------------------------------------------------------
30
31    procedure Toggle_CS (EP : Endpoint_Range);
32
33    ----------------------------------------------------------------------------
34
35    procedure Initialize (EP : Endpoint_Range);
36
37    ----------------------------------------------------------------------------
38
39    procedure Dequeue
40      (EP                : Endpoint_Range;
41       Pointer           : Word64;
42       Status            : Error;
43       Remaining_Length  : Natural);
44
45    ----------------------------------------------------------------------------
46
47    use type Word64;
48    procedure Enqueue_Data_TRB
49      (EP                : Endpoint_Range;
50       Data_Length       : Natural;
51       Data_Buf          : Word64;
52       Toggle_CS         : Boolean)
53    with
54       Pre =>
55          Data_Length <= 2 ** 16 and
56          Data_Buf / 2 ** 16 =
57            (Data_Buf + Word64 (Data_Length) - 1) / 2 ** 16 and
58          Data_Buf + Word64 (Data_Length) - 1 <= Word64'Last;
59
60    procedure Requeue_Data_TRB
61      (EP       : Endpoint_Range;
62       Length   : Natural;
63       Buf_Addr : Word64)
64    with
65       Pre =>
66          Length <= 2 ** 16 and
67          Buf_Addr / 2 ** 16 =
68            (Buf_Addr + Word64 (Length) - 1) / 2 ** 16 and
69          Buf_Addr + Word64 (Length) - 1 <= Word64'Last;
70
71 end HW.DbC.Transfer_Rings;
72
73 --  vim: set ts=8 sts=3 sw=3 et: