intel_iommu.c (d45a5270d075ea589f0b0ddcf963a5fea1f500ac) | intel_iommu.c (37557b09a6ee1dc93328b1dd53bb26c2b5897cc3) |
---|---|
1/* 2 * QEMU emulation of an Intel IOMMU (VT-d) 3 * (DMA Remapping device) 4 * 5 * Copyright (C) 2013 Knut Omang, Oracle <knut.omang@oracle.com> 6 * Copyright (C) 2014 Le Tan, <tamlokveer@gmail.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 665 unchanged lines hidden (view full) --- 674 case VTD_SM_PASID_ENTRY_NESTED: 675 break; 676 case VTD_SM_PASID_ENTRY_PT: 677 if (!x86_iommu->pt_supported) { 678 return false; 679 } 680 break; 681 default: | 1/* 2 * QEMU emulation of an Intel IOMMU (VT-d) 3 * (DMA Remapping device) 4 * 5 * Copyright (C) 2013 Knut Omang, Oracle <knut.omang@oracle.com> 6 * Copyright (C) 2014 Le Tan, <tamlokveer@gmail.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 665 unchanged lines hidden (view full) --- 674 case VTD_SM_PASID_ENTRY_NESTED: 675 break; 676 case VTD_SM_PASID_ENTRY_PT: 677 if (!x86_iommu->pt_supported) { 678 return false; 679 } 680 break; 681 default: |
682 /* Unknwon type */ | 682 /* Unknown type */ |
683 return false; 684 } 685 return true; 686} 687 688static inline bool vtd_pdire_present(VTDPASIDDirEntry *pdire) 689{ 690 return pdire->val & 1; 691} 692 693/** 694 * Caller of this function should check present bit if wants | 683 return false; 684 } 685 return true; 686} 687 688static inline bool vtd_pdire_present(VTDPASIDDirEntry *pdire) 689{ 690 return pdire->val & 1; 691} 692 693/** 694 * Caller of this function should check present bit if wants |
695 * to use pdir entry for futher usage except for fpd bit check. | 695 * to use pdir entry for further usage except for fpd bit check. |
696 */ 697static int vtd_get_pdire_from_pdir_table(dma_addr_t pasid_dir_base, 698 uint32_t pasid, 699 VTDPASIDDirEntry *pdire) 700{ 701 uint32_t index; 702 dma_addr_t addr, entry_size; 703 --- 37 unchanged lines hidden (view full) --- 741 return -VTD_FR_PASID_TABLE_INV; 742 } 743 744 return 0; 745} 746 747/** 748 * Caller of this function should check present bit if wants | 696 */ 697static int vtd_get_pdire_from_pdir_table(dma_addr_t pasid_dir_base, 698 uint32_t pasid, 699 VTDPASIDDirEntry *pdire) 700{ 701 uint32_t index; 702 dma_addr_t addr, entry_size; 703 --- 37 unchanged lines hidden (view full) --- 741 return -VTD_FR_PASID_TABLE_INV; 742 } 743 744 return 0; 745} 746 747/** 748 * Caller of this function should check present bit if wants |
749 * to use pasid entry for futher usage except for fpd bit check. | 749 * to use pasid entry for further usage except for fpd bit check. |
750 */ 751static int vtd_get_pe_from_pdire(IntelIOMMUState *s, 752 uint32_t pasid, 753 VTDPASIDDirEntry *pdire, 754 VTDPASIDEntry *pe) 755{ 756 dma_addr_t addr = pdire->val & VTD_PASID_TABLE_BASE_ADDR_MASK; 757 --- 744 unchanged lines hidden (view full) --- 1502 } 1503 return ret; 1504 } 1505 1506 return vtd_sync_shadow_page_table_range(vtd_as, &ce, 0, UINT64_MAX); 1507} 1508 1509/* | 750 */ 751static int vtd_get_pe_from_pdire(IntelIOMMUState *s, 752 uint32_t pasid, 753 VTDPASIDDirEntry *pdire, 754 VTDPASIDEntry *pe) 755{ 756 dma_addr_t addr = pdire->val & VTD_PASID_TABLE_BASE_ADDR_MASK; 757 --- 744 unchanged lines hidden (view full) --- 1502 } 1503 return ret; 1504 } 1505 1506 return vtd_sync_shadow_page_table_range(vtd_as, &ce, 0, UINT64_MAX); 1507} 1508 1509/* |
1510 * Check if specific device is configed to bypass address | 1510 * Check if specific device is configured to bypass address |
1511 * translation for DMA requests. In Scalable Mode, bypass 1512 * 1st-level translation or 2nd-level translation, it depends 1513 * on PGTT setting. 1514 */ 1515static bool vtd_dev_pt_enabled(VTDAddressSpace *as) 1516{ 1517 IntelIOMMUState *s; 1518 VTDContextEntry ce; --- 2379 unchanged lines hidden --- | 1511 * translation for DMA requests. In Scalable Mode, bypass 1512 * 1st-level translation or 2nd-level translation, it depends 1513 * on PGTT setting. 1514 */ 1515static bool vtd_dev_pt_enabled(VTDAddressSpace *as) 1516{ 1517 IntelIOMMUState *s; 1518 VTDContextEntry ce; --- 2379 unchanged lines hidden --- |