acrn-hypervisor/hypervisor/include/arch/x86/guest/vmtrr.h
Zide Chen c89d6e6526 modularization: clean up namings in vMTRR module
- rename 3 module interface APIs
  init_mtrr() -> init_vmtrr()
  mtrr_rdmsr -> read_vmtrr()
  mtrr_wrmsr() -> write_vmtrr()

- follow naming convention for other modules, rename struct mtrr_state
  to struct acrn_vmtrr. And add acrn_vcpu to it.

- because MTRR is x86 architecture specific, move struct acrn_vmtrr to
  struct acrn_vcpu_arch.

Tracked-on: #1842
Signed-off-by: Zide Chen <zide.chen@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
2018-12-14 09:43:06 +08:00

88 lines
1.7 KiB
C

/*
* Copyright (C) <2018> Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* @file vmtrr.h
*
* @brief MTRR Virtualization
*/
#ifndef VMTRR_H
#define VMTRR_H
/**
* @brief MTRR Virtualization
*
* @addtogroup acrn_mem ACRN Memory Management
* @{
*/
#define FIXED_RANGE_MTRR_NUM 11U
#define MTRR_SUB_RANGE_NUM 8U
union mtrr_cap_reg {
uint64_t value;
struct {
uint32_t vcnt:8;
uint32_t fix:1;
uint32_t res0:1;
uint32_t wc:1;
uint32_t res1:21;
uint32_t res2:32;
} bits;
};
union mtrr_def_type_reg {
uint64_t value;
struct {
uint32_t type:8;
uint32_t res0:2;
uint32_t fixed_enable:1;
uint32_t enable:1;
uint32_t res1:20;
uint32_t res2:32;
} bits;
};
union mtrr_fixed_range_reg {
uint64_t value;
uint8_t type[MTRR_SUB_RANGE_NUM];
};
struct acrn_vmtrr {
struct acrn_vcpu *vcpu;
union mtrr_cap_reg cap;
union mtrr_def_type_reg def_type;
union mtrr_fixed_range_reg fixed_range[FIXED_RANGE_MTRR_NUM];
};
/**
* @brief Virtual MTRR MSR write
*
* @param[inout] vcpu The pointer that points VCPU data structure
* @param[in] msr Virtual MTRR MSR Address
* @param[in] value The value that will be writen into virtual MTRR MSR
*
* @return None
*/
void write_vmtrr(struct acrn_vcpu *vcpu, uint32_t msr, uint64_t value);
/**
* @brief Virtual MTRR MSR read
*
* @param[in] vcpu The pointer that points VCPU data structure
* @param[in] msr Virtual MTRR MSR Address
*
* @return The specified virtual MTRR MSR value
*/
uint64_t read_vmtrr(const struct acrn_vcpu *vcpu, uint32_t msr);
/**
* @brief Virtual MTRR initialization
*
* @param[inout] vcpu The pointer that points VCPU data structure
*
* @return None
*/
void init_vmtrr(struct acrn_vcpu *vcpu);
/**
* @}
*/
#endif /* VMTRR_H */