/*
 * Copyright (C) 2022 Intel Corporation.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef VRTC_H
#define VRTC_H

typedef int32_t time_t;

/* Register layout of the RTC */
struct rtcdev {
	uint8_t	sec;
	uint8_t	alarm_sec;
	uint8_t	min;
	uint8_t	alarm_min;
	uint8_t	hour;
	uint8_t	alarm_hour;
	uint8_t	day_of_week;
	uint8_t	day_of_month;
	uint8_t	month;
	uint8_t	year;
	uint8_t	reg_a;
	uint8_t	reg_b;
	uint8_t	reg_c;
	uint8_t	reg_d;
	uint8_t	res[36];
	uint8_t	century;
};

struct acrn_vrtc {
	struct acrn_vm	*vm;
	uint32_t	addr;           /* RTC register to read or write */

	time_t		base_rtctime;	/* Base time calulated from physical rtc register. */
	time_t		offset_rtctime;	/* RTC offset against base time. */
	time_t		last_rtctime;	/* Last RTC time, to keep monotonicity. */

	uint64_t	base_tsc;	/* Base tsc value */

	struct rtcdev	rtcdev;		/* RTC register */
};

#endif /* VRTC_H */
