STRUCT IOMMU_HW_INFO_AMD(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct iommu_hw_info_amd(9) ✨

okay so bestie, welcome to the Kernel API Manual πŸ’– this one is a little struct page and it's literally so straightforward, no cap. it's the AMD IOMMU device info struct. let's go πŸ¦‹


🌸 NAME 🌸

struct iommu_hw_info_amd - AMD IOMMU device info

like, that's the whole vibe. it's device info. for an AMD IOMMU. slay πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

here's the whole thing, it's giving minimal queen πŸ‘‘

struct iommu_hw_info_amd {
    __aligned_u64 efr;
    __aligned_u64 efr2;
};

two fields. that's it. two. iconic behaviour honestly 🌟


πŸ’œ Members πŸ’œ

  • efr β€” the value of the AMD IOMMU Extended Feature Register (EFR), just handing you the raw number 🫢
  • efr2 β€” the value of the AMD IOMMU Extended Feature 2 Register (EFR2), same deal, raw value, no filter ✨

πŸ¦‹ Description πŸ¦‹

so like, if you actually wanna know what these registers mean, the original page says please see the description of these registers in the following sections of the AMD I/O Virtualization Technology (IOMMU) Specification. yes it's a whole PDF, go read it, iykyk πŸ“š

here's the link, no gatekeeping:

https://docs.amd.com/v/u/en-US/48882_3.10_PUB

and the specific sections are these two:

  • MMIO Offset 0030h IOMMU Extended Feature Register
  • MMIO Offset 01A0h IOMMU Extended Feature 2 Register

that's the whole lore. go forth 🌈


πŸ’€ Note πŸ’€

okay this part is the important part, pay attention bestie πŸ‘€

EFR and EFR2 are raw values reported by hardware. like, the hardware just says the thing and nobody has cleaned it up for you. the VMM is responsible to determine the appropriate flags to be exposed to the VM, since cetertain features are not currently supported by the kernel for HW-vIOMMU. so yeah β€” the kernel is not doing that vetting for you, that's on the VMM, fr fr 😭

the current VMM-allowed list of feature flags is:
  • EFR[GTSup, GASup, GioSup, PPRSup, EPHSup, GATS, GLX, PASmax]

that's the whole allowed list. if it's not in there, it's not in there. periodt 🎯


πŸ”₯ SEE ALSO πŸ”₯

okay this list is LONG, like genuinely a whole scroll, but we don't skip, we don't summarise, we list every single one because that's the whole point πŸ’ͺ

  • Kernel file ./include/uapi/linux/iommufd.h
  • General ioctl format(9)
  • struct iommu_destroy(9)
  • struct iommu_ioas_alloc(9)
  • struct iommu_iova_range(9)
  • struct iommu_ioas_iova_ranges(9)
  • struct iommu_ioas_allow_iovas(9)
  • enum iommufd_ioas_map_flags(9)
  • struct iommu_ioas_map(9)
  • struct iommu_ioas_noiommu_get_pa(9)
  • struct iommu_ioas_map_file(9)
  • struct iommu_ioas_copy(9)
  • struct iommu_ioas_unmap(9)
  • enum iommufd_option(9)
  • enum iommufd_option_ops(9)
  • struct iommu_option(9)
  • enum iommufd_vfio_ioas_op(9)
  • struct iommu_vfio_ioas(9)
  • enum iommufd_hwpt_alloc_flags(9)
  • enum iommu_hwpt_vtd_s1_flags(9)
  • struct iommu_hwpt_vtd_s1(9)
  • struct iommu_hwpt_arm_smmuv3(9)
  • struct iommu_hwpt_amd_guest(9)
  • enum iommu_hwpt_data_type(9)
  • struct iommu_hwpt_alloc(9)
  • enum iommu_hw_info_vtd_flags(9)
  • struct iommu_hw_info_vtd(9)
  • enum iommu_hw_info_arm_smmuv3_flags(9)
  • struct iommu_hw_info_arm_smmuv3(9)
  • struct iommu_hw_info_tegra241_cmdqv(9)
  • enum iommu_hw_info_type(9)
  • enum iommufd_hw_capabilities(9)
  • enum iommufd_hw_info_flags(9)
  • struct iommu_hw_info(9)
  • struct iommu_hwpt_set_dirty_tracking(9)
  • enum iommufd_hwpt_get_dirty_bitmap_flags(9)
  • struct iommu_hwpt_get_dirty_bitmap(9)
  • enum iommu_hwpt_invalidate_data_type(9)
  • enum iommu_hwpt_vtd_s1_invalidate_flags(9)
  • struct iommu_hwpt_vtd_s1_invalidate(9)
  • struct iommu_viommu_arm_smmuv3_invalidate(9)
  • struct iommu_hwpt_invalidate(9)
  • enum iommu_hwpt_pgfault_flags(9)
  • enum iommu_hwpt_pgfault_perm(9)
  • struct iommu_hwpt_pgfault(9)
  • enum iommufd_page_response_code(9)
  • struct iommu_hwpt_page_response(9)
  • struct iommu_fault_alloc(9)
  • enum iommu_viommu_type(9)
  • struct iommu_viommu_tegra241_cmdqv(9)
  • struct iommu_viommu_alloc(9)
  • struct iommu_vdevice_alloc(9)
  • struct iommu_ioas_change_process(9)
  • enum iommu_veventq_flag(9)
  • struct iommufd_vevent_header(9)
  • enum iommu_veventq_type(9)
  • struct iommu_vevent_arm_smmuv3(9)
  • struct iommu_vevent_tegra241_cmdqv(9)
  • struct iommu_veventq_alloc(9)
  • enum iommu_hw_queue_type(9)
  • struct iommu_hw_queue_alloc(9)

see? not one skipped. you're welcome 🫑


that's the whole page bestie, you ate that πŸ’…βœ¨ this little gem lives over in ./include/uapi/linux, and the version/date stamp on it is October 2026 β€” so yeah, mark your calendar, mwah πŸŽ€πŸ’–πŸŒΈ

πŸ“¦ where this page comes from