-- -- 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;