1c20dd9e0SHaibo Xu /* SPDX-License-Identifier: GPL-2.0-only */
2c20dd9e0SHaibo Xu /*
3c20dd9e0SHaibo Xu  * timer test specific header
4c20dd9e0SHaibo Xu  *
5c20dd9e0SHaibo Xu  * Copyright (C) 2018, Google LLC
6c20dd9e0SHaibo Xu  */
7c20dd9e0SHaibo Xu 
8c20dd9e0SHaibo Xu #ifndef SELFTEST_KVM_TIMER_TEST_H
9c20dd9e0SHaibo Xu #define SELFTEST_KVM_TIMER_TEST_H
10c20dd9e0SHaibo Xu 
11c20dd9e0SHaibo Xu #include "kvm_util.h"
12c20dd9e0SHaibo Xu 
13c20dd9e0SHaibo Xu #define NR_VCPUS_DEF            4
14c20dd9e0SHaibo Xu #define NR_TEST_ITERS_DEF       5
15c20dd9e0SHaibo Xu #define TIMER_TEST_PERIOD_MS_DEF    10
16c20dd9e0SHaibo Xu #define TIMER_TEST_ERR_MARGIN_US    100
17c20dd9e0SHaibo Xu #define TIMER_TEST_MIGRATION_FREQ_MS    2
18c20dd9e0SHaibo Xu 
19c20dd9e0SHaibo Xu /* Timer test cmdline parameters */
20c20dd9e0SHaibo Xu struct test_args {
21c20dd9e0SHaibo Xu 	uint32_t nr_vcpus;
22c20dd9e0SHaibo Xu 	uint32_t nr_iter;
23c20dd9e0SHaibo Xu 	uint32_t timer_period_ms;
24c20dd9e0SHaibo Xu 	uint32_t migration_freq_ms;
25c20dd9e0SHaibo Xu 	uint32_t timer_err_margin_us;
26*d0b94bcbSHaibo Xu 	/* Members of struct kvm_arm_counter_offset */
27*d0b94bcbSHaibo Xu 	uint64_t counter_offset;
28*d0b94bcbSHaibo Xu 	uint64_t reserved;
29c20dd9e0SHaibo Xu };
30c20dd9e0SHaibo Xu 
31c20dd9e0SHaibo Xu /* Shared variables between host and guest */
32c20dd9e0SHaibo Xu struct test_vcpu_shared_data {
33c20dd9e0SHaibo Xu 	uint32_t nr_iter;
34c20dd9e0SHaibo Xu 	int guest_stage;
35c20dd9e0SHaibo Xu 	uint64_t xcnt;
36c20dd9e0SHaibo Xu };
37c20dd9e0SHaibo Xu 
38c20dd9e0SHaibo Xu extern struct test_args test_args;
39c20dd9e0SHaibo Xu extern struct kvm_vcpu *vcpus[];
40c20dd9e0SHaibo Xu extern struct test_vcpu_shared_data vcpu_shared_data[];
41c20dd9e0SHaibo Xu 
42c20dd9e0SHaibo Xu struct kvm_vm *test_vm_create(void);
43c20dd9e0SHaibo Xu void test_vm_cleanup(struct kvm_vm *vm);
44c20dd9e0SHaibo Xu 
45c20dd9e0SHaibo Xu #endif /* SELFTEST_KVM_TIMER_TEST_H */
46