LCOV - code coverage report
Current view: top level - zephyr/arch/x86 - msr.h Hit Total Coverage
Test: new.info Lines: 0 20 0.0 %
Date: 2025-01-02 12:14:04

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2019 Intel Corp.
       3             :  * SPDX-License-Identifier: Apache-2.0
       4             :  */
       5             : 
       6             : #ifndef ZEPHYR_INCLUDE_ARCH_X86_MSR_H_
       7             : #define ZEPHYR_INCLUDE_ARCH_X86_MSR_H_
       8             : 
       9             : /*
      10             :  * Model specific registers (MSR).  Access with z_x86_msr_read/write().
      11             :  */
      12             : 
      13           0 : #define X86_TIME_STAMP_COUNTER_MSR      0x00000010
      14             : 
      15           0 : #define X86_SPEC_CTRL_MSR               0x00000048
      16           0 : #define X86_SPEC_CTRL_MSR_IBRS          BIT(0)
      17           0 : #define X86_SPEC_CTRL_MSR_SSBD          BIT(2)
      18             : 
      19           0 : #define X86_APIC_BASE_MSR               0x0000001b
      20           0 : #define X86_APIC_BASE_MSR_X2APIC        BIT(10)
      21             : 
      22           0 : #define X86_MTRR_DEF_TYPE_MSR           0x000002ff
      23           0 : #define X86_MTRR_DEF_TYPE_MSR_ENABLE    BIT(11)
      24             : 
      25           0 : #define X86_X2APIC_BASE_MSR             0x00000800 /* .. thru 0x00000BFF */
      26             : 
      27           0 : #define X86_EFER_MSR                    0xC0000080U
      28           0 : #define X86_EFER_MSR_SCE                BIT(0)
      29           0 : #define X86_EFER_MSR_LME                BIT(8)
      30           0 : #define X86_EFER_MSR_NXE                BIT(11)
      31             : 
      32             : /* STAR 31:0   Unused in long mode
      33             :  *      47:32  Kernel CS (SS = CS+8)
      34             :  *      63:48  User CS (SS = CS+8)
      35             :  */
      36           0 : #define X86_STAR_MSR                    0xC0000081U
      37             : 
      38             : /* Location for system call entry point */
      39           0 : #define X86_LSTAR_MSR                   0xC0000082U
      40             : 
      41             : /* Low 32 bits in this MSR are the SYSCALL mask applied to EFLAGS */
      42           0 : #define X86_FMASK_MSR                   0xC0000084U
      43             : 
      44           0 : #define X86_FS_BASE                     0xC0000100U
      45           0 : #define X86_GS_BASE                     0xC0000101U
      46           0 : #define X86_KERNEL_GS_BASE              0xC0000102U
      47             : 
      48             : #ifndef _ASMLANGUAGE
      49             : #ifdef __cplusplus
      50             : extern "C" {
      51             : #endif
      52             : 
      53             : /*
      54             :  * z_x86_msr_write() is shared between 32- and 64-bit implementations, but
      55             :  * due to ABI differences with long return values, z_x86_msr_read() is not.
      56             :  */
      57             : 
      58             : static inline void z_x86_msr_write(unsigned int msr, uint64_t data)
      59             : {
      60             :         uint32_t high = data >> 32;
      61             :         uint32_t low = data & 0xFFFFFFFFU;
      62             : 
      63             :         __asm__ volatile ("wrmsr" : : "c"(msr), "a"(low), "d"(high));
      64             : }
      65             : 
      66             : #ifdef CONFIG_X86_64
      67             : 
      68             : static inline uint64_t z_x86_msr_read(unsigned int msr)
      69             : {
      70             :         union {
      71             :                 struct {
      72             :                         uint32_t lo;
      73             :                         uint32_t hi;
      74             :                 };
      75             :                 uint64_t value;
      76             :         } rv;
      77             : 
      78             :         __asm__ volatile ("rdmsr" : "=a" (rv.lo), "=d" (rv.hi) : "c" (msr));
      79             : 
      80             :         return rv.value;
      81             : }
      82             : 
      83             : #else
      84             : 
      85             : static inline uint64_t z_x86_msr_read(unsigned int msr)
      86             : {
      87             :         uint64_t ret;
      88             : 
      89             :         __asm__ volatile("rdmsr" : "=A" (ret) : "c" (msr));
      90             : 
      91             :         return ret;
      92             : }
      93             : 
      94             : #endif
      95             : 
      96             : #ifdef __cplusplus
      97             : }
      98             : #endif
      99             : #endif /* _ASMLANGUAGE */
     100             : 
     101             : #endif /* ZEPHYR_INCLUDE_ARCH_X86_MSR_H_ */

Generated by: LCOV version 1.14