c8e73111a55a383fe64fe58bf7b039f38fc0f659
[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 is
21
22    function Physical (EP : Endpoint_Range) return Word64;
23
24    function Full (EP : Endpoint_Range) return Boolean;
25
26    function Last_Started (EP : Endpoint_Range) return Boolean;
27
28    ----------------------------------------------------------------------------
29
30    procedure Toggle_CS (EP : Endpoint_Range);
31
32    ----------------------------------------------------------------------------
33
34    procedure Initialize (EP : Endpoint_Range);
35
36    ----------------------------------------------------------------------------
37
38    procedure Dequeue
39      (EP                : Endpoint_Range;
40       Pointer           : Word64;
41       Status            : Error;
42       Remaining_Length  : Natural);
43
44    ----------------------------------------------------------------------------
45
46    use type Word64;
47    procedure Enqueue_Data_TRB
48      (EP                : Endpoint_Range;
49       Data_Length       : Natural;
50       Data_Buf          : Word64;
51       Toggle_CS         : Boolean)
52    with
53       Pre =>
54          Data_Length <= 2 ** 16 and
55          Data_Buf / 2 ** 16 =
56            (Data_Buf + Word64 (Data_Length) - 1) / 2 ** 16 and
57          Data_Buf + Word64 (Data_Length) - 1 <= Word64'Last;
58
59    procedure Requeue_Data_TRB
60      (EP       : Endpoint_Range;
61       Length   : Natural;
62       Buf_Addr : Word64)
63    with
64       Pre =>
65          Length <= 2 ** 16 and
66          Buf_Addr / 2 ** 16 =
67            (Buf_Addr + Word64 (Length) - 1) / 2 ** 16 and
68          Buf_Addr + Word64 (Length) - 1 <= Word64'Last;
69
70 end HW.DbC.Transfer_Rings;
71
72 --  vim: set ts=8 sts=3 sw=3 et: