64 lines
1.7 KiB
Ada
64 lines
1.7 KiB
Ada
--
|
|
-- Copyright (C) 2015-2016 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; version 2 of the License.
|
|
--
|
|
-- 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 System;
|
|
|
|
with Musinfo;
|
|
with Muschedinfo;
|
|
|
|
package body HW.Time.Timer
|
|
with Refined_State => (Timer_State => (Sinfo),
|
|
Abstract_Time => (Sched_Info))
|
|
is
|
|
Sinfo_Base_Address : constant := 16#000e_0000_0000#;
|
|
Sinfo_Page_Size : constant
|
|
:= ((Musinfo.Subject_Info_Type_Size + (16#1000# - 1))
|
|
/ 16#1000#) * 16#1000#;
|
|
|
|
Sinfo : Musinfo.Subject_Info_Type
|
|
with
|
|
Volatile,
|
|
Async_Writers,
|
|
Address => System'To_Address (Sinfo_Base_Address);
|
|
|
|
Sched_Info : Muschedinfo.Scheduling_Info_Type
|
|
with
|
|
Volatile,
|
|
Async_Writers,
|
|
Address => System'To_Address (Sinfo_Base_Address + Sinfo_Page_Size);
|
|
|
|
function Raw_Value_Min return T
|
|
is
|
|
TSC_Schedule_Start : constant Interfaces.Unsigned_64
|
|
:= Sched_Info.TSC_Schedule_Start;
|
|
begin
|
|
return T (TSC_Schedule_Start);
|
|
end Raw_Value_Min;
|
|
|
|
function Raw_Value_Max return T
|
|
is
|
|
TSC_Schedule_End : constant Interfaces.Unsigned_64
|
|
:= Sched_Info.TSC_Schedule_End;
|
|
begin
|
|
return T (TSC_Schedule_End);
|
|
end Raw_Value_Max;
|
|
|
|
function Hz return T
|
|
is
|
|
Khz : constant T := T (Sinfo.TSC_Khz);
|
|
begin
|
|
return Khz * 1000;
|
|
end Hz;
|
|
|
|
end HW.Time.Timer;
|