intel_iommu: Extract out vtd_cap_init() to initialize cap/ecap
Extract cap/ecap initialization in vtd_cap_init() to make code cleaner. No functional change intended. Reviewed-by: Eric Auger <eric.auger@redhat.com> Signed-off-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
ee26474daa
commit
d5fd978d91
@ -3934,30 +3934,10 @@ static void vtd_iommu_replay(IOMMUMemoryRegion *iommu_mr, IOMMUNotifier *n)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Do the initialization. It will also be called when reset, so pay
|
||||
* attention when adding new initialization stuff.
|
||||
*/
|
||||
static void vtd_init(IntelIOMMUState *s)
|
||||
static void vtd_cap_init(IntelIOMMUState *s)
|
||||
{
|
||||
X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s);
|
||||
|
||||
memset(s->csr, 0, DMAR_REG_SIZE);
|
||||
memset(s->wmask, 0, DMAR_REG_SIZE);
|
||||
memset(s->w1cmask, 0, DMAR_REG_SIZE);
|
||||
memset(s->womask, 0, DMAR_REG_SIZE);
|
||||
|
||||
s->root = 0;
|
||||
s->root_scalable = false;
|
||||
s->dmar_enabled = false;
|
||||
s->intr_enabled = false;
|
||||
s->iq_head = 0;
|
||||
s->iq_tail = 0;
|
||||
s->iq = 0;
|
||||
s->iq_size = 0;
|
||||
s->qi_enabled = false;
|
||||
s->iq_last_desc_type = VTD_INV_DESC_NONE;
|
||||
s->iq_dw = false;
|
||||
s->next_frcd_reg = 0;
|
||||
s->cap = VTD_CAP_FRO | VTD_CAP_NFR | VTD_CAP_ND |
|
||||
VTD_CAP_MAMV | VTD_CAP_PSI | VTD_CAP_SLLPS |
|
||||
VTD_CAP_MGAW(s->aw_bits);
|
||||
@ -3974,27 +3954,6 @@ static void vtd_init(IntelIOMMUState *s)
|
||||
}
|
||||
s->ecap = VTD_ECAP_QI | VTD_ECAP_IRO;
|
||||
|
||||
/*
|
||||
* Rsvd field masks for spte
|
||||
*/
|
||||
vtd_spte_rsvd[0] = ~0ULL;
|
||||
vtd_spte_rsvd[1] = VTD_SPTE_PAGE_L1_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
vtd_spte_rsvd[2] = VTD_SPTE_PAGE_L2_RSVD_MASK(s->aw_bits);
|
||||
vtd_spte_rsvd[3] = VTD_SPTE_PAGE_L3_RSVD_MASK(s->aw_bits);
|
||||
vtd_spte_rsvd[4] = VTD_SPTE_PAGE_L4_RSVD_MASK(s->aw_bits);
|
||||
|
||||
vtd_spte_rsvd_large[2] = VTD_SPTE_LPAGE_L2_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
vtd_spte_rsvd_large[3] = VTD_SPTE_LPAGE_L3_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
|
||||
if (s->scalable_mode || s->snoop_control) {
|
||||
vtd_spte_rsvd[1] &= ~VTD_SPTE_SNP;
|
||||
vtd_spte_rsvd_large[2] &= ~VTD_SPTE_SNP;
|
||||
vtd_spte_rsvd_large[3] &= ~VTD_SPTE_SNP;
|
||||
}
|
||||
|
||||
if (x86_iommu_ir_supported(x86_iommu)) {
|
||||
s->ecap |= VTD_ECAP_IR | VTD_ECAP_MHMV;
|
||||
if (s->intr_eim == ON_OFF_AUTO_ON) {
|
||||
@ -4027,6 +3986,56 @@ static void vtd_init(IntelIOMMUState *s)
|
||||
if (s->pasid) {
|
||||
s->ecap |= VTD_ECAP_PASID;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Do the initialization. It will also be called when reset, so pay
|
||||
* attention when adding new initialization stuff.
|
||||
*/
|
||||
static void vtd_init(IntelIOMMUState *s)
|
||||
{
|
||||
X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s);
|
||||
|
||||
memset(s->csr, 0, DMAR_REG_SIZE);
|
||||
memset(s->wmask, 0, DMAR_REG_SIZE);
|
||||
memset(s->w1cmask, 0, DMAR_REG_SIZE);
|
||||
memset(s->womask, 0, DMAR_REG_SIZE);
|
||||
|
||||
s->root = 0;
|
||||
s->root_scalable = false;
|
||||
s->dmar_enabled = false;
|
||||
s->intr_enabled = false;
|
||||
s->iq_head = 0;
|
||||
s->iq_tail = 0;
|
||||
s->iq = 0;
|
||||
s->iq_size = 0;
|
||||
s->qi_enabled = false;
|
||||
s->iq_last_desc_type = VTD_INV_DESC_NONE;
|
||||
s->iq_dw = false;
|
||||
s->next_frcd_reg = 0;
|
||||
|
||||
vtd_cap_init(s);
|
||||
|
||||
/*
|
||||
* Rsvd field masks for spte
|
||||
*/
|
||||
vtd_spte_rsvd[0] = ~0ULL;
|
||||
vtd_spte_rsvd[1] = VTD_SPTE_PAGE_L1_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
vtd_spte_rsvd[2] = VTD_SPTE_PAGE_L2_RSVD_MASK(s->aw_bits);
|
||||
vtd_spte_rsvd[3] = VTD_SPTE_PAGE_L3_RSVD_MASK(s->aw_bits);
|
||||
vtd_spte_rsvd[4] = VTD_SPTE_PAGE_L4_RSVD_MASK(s->aw_bits);
|
||||
|
||||
vtd_spte_rsvd_large[2] = VTD_SPTE_LPAGE_L2_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
vtd_spte_rsvd_large[3] = VTD_SPTE_LPAGE_L3_RSVD_MASK(s->aw_bits,
|
||||
x86_iommu->dt_supported);
|
||||
|
||||
if (s->scalable_mode || s->snoop_control) {
|
||||
vtd_spte_rsvd[1] &= ~VTD_SPTE_SNP;
|
||||
vtd_spte_rsvd_large[2] &= ~VTD_SPTE_SNP;
|
||||
vtd_spte_rsvd_large[3] &= ~VTD_SPTE_SNP;
|
||||
}
|
||||
|
||||
vtd_reset_caches(s);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user