hyperv: Move timer frequency definition to common place.

And cleanup event timer period settings.

MFC after:	1 week
Sponsored by:	Microsoft OSTC
Differential Revision:	https://reviews.freebsd.org/D6597
This commit is contained in:
Sepherosa Ziehau 2016-05-30 09:20:08 +00:00
parent 049342a994
commit 3f07976a64
3 changed files with 12 additions and 13 deletions

View File

@ -41,10 +41,6 @@ __FBSDID("$FreeBSD$");
#include <dev/hyperv/vmbus/hyperv_var.h>
#include <dev/hyperv/vmbus/vmbus_var.h>
#define HV_TIMER_FREQUENCY (10 * 1000 * 1000LL) /* 100ns period */
#define HV_MAX_DELTA_TICKS 0xffffffffLL
#define HV_MIN_DELTA_TICKS 1LL
#define MSR_HV_STIMER0_CFG_SINT \
((((uint64_t)VMBUS_SINT_TIMER) << MSR_HV_STIMER_CFG_SINT_SHIFT) & \
MSR_HV_STIMER_CFG_SINT_MASK)
@ -67,7 +63,8 @@ sbintime2tick(sbintime_t time)
struct timespec val;
val = sbttots(time);
return (val.tv_sec * HV_TIMER_FREQUENCY) + (val.tv_nsec / 100);
return (val.tv_sec * HYPERV_TIMER_FREQ) +
(val.tv_nsec / HYPERV_TIMER_NS_FACTOR);
}
static int
@ -151,11 +148,9 @@ hv_et_attach(device_t dev)
vmbus_et.et_name = "Hyper-V";
vmbus_et.et_flags = ET_FLAGS_ONESHOT | ET_FLAGS_PERCPU;
vmbus_et.et_quality = 1000;
vmbus_et.et_frequency = HV_TIMER_FREQUENCY;
vmbus_et.et_min_period =
HV_MIN_DELTA_TICKS * ((1LL << 32) / HV_TIMER_FREQUENCY);
vmbus_et.et_max_period =
HV_MAX_DELTA_TICKS * ((1LL << 32) / HV_TIMER_FREQUENCY);
vmbus_et.et_frequency = HYPERV_TIMER_FREQ;
vmbus_et.et_min_period = (0x00000001ULL << 32) / HYPERV_TIMER_FREQ;
vmbus_et.et_max_period = (0xfffffffeULL << 32) / HYPERV_TIMER_FREQ;
vmbus_et.et_start = hv_et_start;
/*

View File

@ -49,8 +49,6 @@ __FBSDID("$FreeBSD$");
#include <dev/hyperv/vmbus/hyperv_var.h>
#include <dev/hyperv/vmbus/vmbus_var.h>
#define HV_NANOSECONDS_PER_SEC 1000000000L
#define HYPERV_FREEBSD_BUILD 0ULL
#define HYPERV_FREEBSD_VERSION ((uint64_t)__FreeBSD_version)
#define HYPERV_FREEBSD_OSID 0ULL
@ -87,7 +85,7 @@ static struct timecounter hyperv_timecounter = {
.tc_get_timecount = hyperv_get_timecount,
.tc_poll_pps = NULL,
.tc_counter_mask = 0xffffffff,
.tc_frequency = HV_NANOSECONDS_PER_SEC/100,
.tc_frequency = HYPERV_TIMER_FREQ,
.tc_name = "Hyper-V",
.tc_quality = 2000,
.tc_flags = 0,

View File

@ -29,6 +29,12 @@
#ifndef _HYPERV_VAR_H_
#define _HYPERV_VAR_H_
#ifndef NANOSEC
#define NANOSEC 1000000000ULL
#endif
#define HYPERV_TIMER_NS_FACTOR 100ULL
#define HYPERV_TIMER_FREQ (NANOSEC / HYPERV_TIMER_NS_FACTOR)
extern u_int hyperv_features;
extern u_int hyperv_recommends;