Files
vystem/docs/shelter/cpu/tsc.md
2026-03-31 22:15:00 +02:00

1.3 KiB

TSC API

Introduction

In order to be able to measure and approximate time as soon as the kernel start the boot process, the TSC API is implemented in a volontary minimal way. The TSC API is defined inside shelter/lib/include/cpu/tsc.h and implemented inside shelter/lib/src/cpu/tsc.c. The API prefix is sh_tsc_.

Overview

The TSC API being intented for measuring time during the boot process, the provided features are extremely basic. In order for any TSC value to start at 0, we define two concept:

  • kernel_init_tsc: a TSC value initialized at the very start of the kernel boot process
  • kernel_current_tsc: a TSC value which is the result of kernel_init_tsc substracted to the value returned by sh_asm_rdtsc()

API content

The API define the following elements:

  • sh_tsc_TSC_VALUE: a value of the TSC register, which is a wrapper of a sh_uint64
  • sh_tsc_read_value(): an inline function reading the TSC register using sh_asm_rdtsc(), return a sh_tsc_TSC_VALUE
  • sh_tsc_init_tsc(): a function initializing kernel_init_tsc. This function should only be called once as soon as the kernel start. Return a SH_STATUS
  • sh_tsc_get_kernel_init_tsc(): return kernel_init_tsc under a sh_tsc_TSC_VALUE
  • sh_tsc_get_kernel_current_tsc(): return the result of sh_asm_rdtsc() less kernel_init_tsc, under a sh_tsc_TSC_VALUE