mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-04-30 04:33:58 +00:00
This patch represents TSC freqeuency in KHz using a 32-bit unsigned integer. The conversion macros between ticks and us/ms are changed to inline functions to enforce the types of the input parameters. Note that us_to_ticks accepts only uint32_t (~4K us at most) and never overflows. Results of some unit tests on the conversion functions: calibrate_tsc, tsc_khz=1881600 64us -> ticks: 120422 64us -> ticks -> us: 63 511us -> ticks: 961497 511us -> ticks -> us: 510 1280000 ticks -> us: 680 1280000 ticks -> us -> ticks: 1279488 Signed-off-by: Junjie Mao <junjie.mao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
21 lines
363 B
C
21 lines
363 B
C
/*
|
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <hv_lib.h>
|
|
|
|
void udelay(uint32_t us)
|
|
{
|
|
uint64_t dest_tsc, delta_tsc;
|
|
|
|
/* Calculate number of ticks to wait */
|
|
delta_tsc = us_to_ticks(us);
|
|
dest_tsc = rdtsc() + delta_tsc;
|
|
|
|
/* Loop until time expired */
|
|
while
|
|
(rdtsc() < dest_tsc);
|
|
}
|