X-Git-Url: https://git.codelabs.ch/?p=libxhcidbg.git;a=blobdiff_plain;f=src%2Fhw-dbc-transfer_info.adb;h=fe41a89df63e4bfc2463549c89035e140698f361;hp=44165d92d25538ba0cbe87a4e6309b99e770bf38;hb=53f4999e90fdc85f6f0970375a6400144d907513;hpb=9d4d4b92f6a736132805db7ae7338351c0ea151a diff --git a/src/hw-dbc-transfer_info.adb b/src/hw-dbc-transfer_info.adb index 44165d9..fe41a89 100644 --- a/src/hw-dbc-transfer_info.adb +++ b/src/hw-dbc-transfer_info.adb @@ -45,9 +45,9 @@ is Finished => False)); type Stats_Info is record - Enqueued : Natural; - Transfered : Natural; - Lost : Natural; + Enqueued : Word32; + Transfered : Word32; + Lost : Word32; end record; type Stats_Array is array (Endpoint_Range) of Stats_Info; Stats : Stats_Array := (Endpoint_Range => (others => 0)); @@ -99,6 +99,7 @@ is Id : out Transfer_Id; Success : out Boolean) is + use type Word32; use type Word64; begin Success := False; @@ -113,7 +114,8 @@ is Status => Error'First, Started => True, Finished => False); - Stats (Endpoint).Enqueued := Stats (Endpoint).Enqueued + Length; + Stats (Endpoint).Enqueued := + Stats (Endpoint).Enqueued + Word32 (Length); Start_Counter := Start_Counter + 1; Success := True; Id := I; @@ -126,6 +128,7 @@ is (Id : Transfer_Id; Length : Natural) is + use type Word32; use type Word64; Endpoint : constant Endpoint_Range := Xfers (Id).Endpoint; @@ -139,7 +142,8 @@ is Started => True, Finished => False); Start_Counter := Start_Counter + 1; - Stats (Endpoint).Enqueued := Stats (Endpoint).Enqueued + Length; + Stats (Endpoint).Enqueued + := Stats (Endpoint).Enqueued + Word32 (Length); end Restart; procedure Append @@ -148,6 +152,7 @@ is Offset : out Natural; Id : out Transfer_Id) is + use type Word32; use type Word64; Success : Boolean; Max_Counter : Word64; @@ -169,7 +174,8 @@ is Length := Natural'Min (Length, Max_Bulk_Size - Xfers (Id).Length); Offset := Xfers (Id).Length; Xfers (Id).Length := Xfers (Id).Length + Length; - Stats (Endpoint).Enqueued := Stats (Endpoint).Enqueued + Length; + Stats (Endpoint).Enqueued + := Stats (Endpoint).Enqueued + Word32 (Length); else Length := 0; Offset := 0; @@ -181,6 +187,7 @@ is Remaining_Length : Natural; Status : Error) is + use type Word32; use type Word64; Id : Transfer_Id; begin @@ -197,12 +204,13 @@ is if Remaining_Length <= Xfers (Id).Length then Xfers (Id).Length := Xfers (Id).Length - Remaining_Length; Stats (Xfers (Id).Endpoint).Transfered := - Stats (Xfers (Id).Endpoint).Transfered + Xfers (Id).Length; + Stats (Xfers (Id).Endpoint).Transfered + Word32 + (Xfers (Id).Length); Stats (Xfers (Id).Endpoint).Lost := - Stats (Xfers (Id).Endpoint).Lost + Remaining_Length; + Stats (Xfers (Id).Endpoint).Lost + Word32 (Remaining_Length); else Stats (Xfers (Id).Endpoint).Lost := - Stats (Xfers (Id).Endpoint).Lost + Xfers (Id).Length; + Stats (Xfers (Id).Endpoint).Lost + Word32 (Xfers (Id).Length); Xfers (Id).Length := 0; Xfers (Id).Status := Controller_Error; end if; @@ -279,8 +287,6 @@ is Id : out Transfer_Id; Success : out Boolean) is - generic - Endpoint : Endpoint_Range; function Check_Finished (Id : Transfer_Id) return Boolean; function Check_Finished (Id : Transfer_Id) return Boolean is @@ -290,8 +296,8 @@ is Xfers (Id).Started and Xfers (Id).Finished; end Check_Finished; - function Check_Finished_Inst is new Check_Finished (Endpoint); - procedure Walk_Finished_Inst is new Walk (Check_Finished_Inst); + + procedure Walk_Finished_Inst is new Walk (Check_Finished); begin Walk_Finished_Inst (Minimum_Ctr, Id, Success); end Walk_Finished; @@ -300,6 +306,7 @@ is procedure Dump_Stats is + use type Word32; begin Debug.Put_Line ("DbC statistics:"); for EP in Endpoint_Range loop @@ -307,23 +314,23 @@ is Debug.Put_Int8 (Int8 (EP)); Debug.New_Line; Debug.Put (" enqueued: "); - Debug.Put_Word32 (Word32 (Stats (EP).Enqueued)); + Debug.Put_Word32 (Stats (EP).Enqueued); Debug.Put (" ("); Debug.Put_Int32 (Int32 (Stats (EP).Enqueued)); Debug.Put_Line (")"); Debug.Put (" transfered: "); - Debug.Put_Word32 (Word32 (Stats (EP).Transfered)); + Debug.Put_Word32 (Stats (EP).Transfered); Debug.Put (" ("); Debug.Put_Int32 (Int32 (Stats (EP).Transfered)); Debug.Put_Line (")"); Debug.Put (" lost: "); - Debug.Put_Word32 (Word32 (Stats (EP).Lost)); + Debug.Put_Word32 (Stats (EP).Lost); Debug.Put (" ("); Debug.Put_Int32 (Int32 (Stats (EP).Lost)); Debug.Put_Line (")"); Debug.Put (" in queue: "); - Debug.Put_Word32 (Word32 - (Stats (EP).Enqueued - Stats (EP).Transfered - Stats (EP).Lost)); + Debug.Put_Word32 + (Stats (EP).Enqueued - Stats (EP).Transfered - Stats (EP).Lost); Debug.Put (" ("); Debug.Put_Int32 (Int32 (Stats (EP).Enqueued - Stats (EP).Transfered - Stats (EP).Lost));