blob: c683d6f68c4f086bf9c16a800f276f8614931335 [file] [log] [blame]
--
-- 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;