Statistics
| Branch: | Revision:

root / target-i386 / hyperv.c @ 444ba679

History | View | Annotate | Download (1.2 kB)

1 28f52cc0 Vadim Rozenfeld
/*
2 28f52cc0 Vadim Rozenfeld
 * QEMU Hyper-V support
3 28f52cc0 Vadim Rozenfeld
 *
4 28f52cc0 Vadim Rozenfeld
 * Copyright Red Hat, Inc. 2011
5 28f52cc0 Vadim Rozenfeld
 *
6 28f52cc0 Vadim Rozenfeld
 * Author: Vadim Rozenfeld     <vrozenfe@redhat.com>
7 28f52cc0 Vadim Rozenfeld
 *
8 28f52cc0 Vadim Rozenfeld
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
9 28f52cc0 Vadim Rozenfeld
 * See the COPYING file in the top-level directory.
10 28f52cc0 Vadim Rozenfeld
 *
11 28f52cc0 Vadim Rozenfeld
 */
12 28f52cc0 Vadim Rozenfeld
13 28f52cc0 Vadim Rozenfeld
#include "hyperv.h"
14 28f52cc0 Vadim Rozenfeld
15 28f52cc0 Vadim Rozenfeld
static bool hyperv_vapic;
16 28f52cc0 Vadim Rozenfeld
static bool hyperv_relaxed_timing;
17 28f52cc0 Vadim Rozenfeld
static int hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY;
18 28f52cc0 Vadim Rozenfeld
19 28f52cc0 Vadim Rozenfeld
void hyperv_enable_vapic_recommended(bool val)
20 28f52cc0 Vadim Rozenfeld
{
21 28f52cc0 Vadim Rozenfeld
    hyperv_vapic = val;
22 28f52cc0 Vadim Rozenfeld
}
23 28f52cc0 Vadim Rozenfeld
24 28f52cc0 Vadim Rozenfeld
void hyperv_enable_relaxed_timing(bool val)
25 28f52cc0 Vadim Rozenfeld
{
26 28f52cc0 Vadim Rozenfeld
    hyperv_relaxed_timing = val;
27 28f52cc0 Vadim Rozenfeld
}
28 28f52cc0 Vadim Rozenfeld
29 28f52cc0 Vadim Rozenfeld
void hyperv_set_spinlock_retries(int val)
30 28f52cc0 Vadim Rozenfeld
{
31 28f52cc0 Vadim Rozenfeld
    hyperv_spinlock_attempts = val;
32 28f52cc0 Vadim Rozenfeld
    if (hyperv_spinlock_attempts < 0xFFF) {
33 28f52cc0 Vadim Rozenfeld
        hyperv_spinlock_attempts = 0xFFF;
34 28f52cc0 Vadim Rozenfeld
    }
35 28f52cc0 Vadim Rozenfeld
}
36 28f52cc0 Vadim Rozenfeld
37 28f52cc0 Vadim Rozenfeld
bool hyperv_enabled(void)
38 28f52cc0 Vadim Rozenfeld
{
39 28f52cc0 Vadim Rozenfeld
    return hyperv_hypercall_available() || hyperv_relaxed_timing_enabled();
40 28f52cc0 Vadim Rozenfeld
}
41 28f52cc0 Vadim Rozenfeld
42 28f52cc0 Vadim Rozenfeld
bool hyperv_hypercall_available(void)
43 28f52cc0 Vadim Rozenfeld
{
44 28f52cc0 Vadim Rozenfeld
    if (hyperv_vapic ||
45 28f52cc0 Vadim Rozenfeld
        (hyperv_spinlock_attempts != HYPERV_SPINLOCK_NEVER_RETRY)) {
46 28f52cc0 Vadim Rozenfeld
      return true;
47 28f52cc0 Vadim Rozenfeld
    }
48 28f52cc0 Vadim Rozenfeld
    return false;
49 28f52cc0 Vadim Rozenfeld
}
50 28f52cc0 Vadim Rozenfeld
51 28f52cc0 Vadim Rozenfeld
bool hyperv_vapic_recommended(void)
52 28f52cc0 Vadim Rozenfeld
{
53 28f52cc0 Vadim Rozenfeld
    return hyperv_vapic;
54 28f52cc0 Vadim Rozenfeld
}
55 28f52cc0 Vadim Rozenfeld
56 28f52cc0 Vadim Rozenfeld
bool hyperv_relaxed_timing_enabled(void)
57 28f52cc0 Vadim Rozenfeld
{
58 28f52cc0 Vadim Rozenfeld
    return hyperv_relaxed_timing;
59 28f52cc0 Vadim Rozenfeld
}
60 28f52cc0 Vadim Rozenfeld
61 28f52cc0 Vadim Rozenfeld
int hyperv_get_spinlock_retries(void)
62 28f52cc0 Vadim Rozenfeld
{
63 28f52cc0 Vadim Rozenfeld
    return hyperv_spinlock_attempts;
64 28f52cc0 Vadim Rozenfeld
}