mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
IOMMU/AMD: wire common device reserved memory API
Register common device reserved memory similar to how ivmd= parameter is handled. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
faccb3a08b
commit
3fd9456f2d
1 file changed
+21
@@ -1078,6 +1078,25 @@ static inline bool_t is_ivmd_block(u8 type)
|
||||
type == ACPI_IVRS_TYPE_MEMORY_IOMMU);
|
||||
}
|
||||
|
||||
static int __init cf_check add_one_extra_ivmd(unsigned long start,
|
||||
unsigned long nr,
|
||||
uint32_t id, void *ctxt)
|
||||
{
|
||||
struct acpi_ivrs_memory ivmd = {
|
||||
.header = {
|
||||
.length = sizeof(ivmd),
|
||||
.flags = ACPI_IVMD_UNITY | ACPI_IVMD_READ | ACPI_IVMD_WRITE,
|
||||
.device_id = id,
|
||||
.type = ACPI_IVRS_TYPE_MEMORY_ONE,
|
||||
},
|
||||
};
|
||||
|
||||
ivmd.start_address = pfn_to_paddr(start);
|
||||
ivmd.memory_length = pfn_to_paddr(nr);
|
||||
|
||||
return parse_ivmd_block(&ivmd);
|
||||
}
|
||||
|
||||
static int __init cf_check parse_ivrs_table(struct acpi_table_header *table)
|
||||
{
|
||||
const struct acpi_ivrs_header *ivrs_block;
|
||||
@@ -1121,6 +1140,8 @@ static int __init cf_check parse_ivrs_table(struct acpi_table_header *table)
|
||||
AMD_IOMMU_DEBUG("IVMD: %u command line provided entries\n", nr_ivmd);
|
||||
for ( i = 0; !error && i < nr_ivmd; ++i )
|
||||
error = parse_ivmd_block(user_ivmds + i);
|
||||
if ( !error )
|
||||
error = iommu_get_extra_reserved_device_memory(add_one_extra_ivmd, NULL);
|
||||
|
||||
/* Each IO-APIC must have been mentioned in the table. */
|
||||
for ( apic = 0; !error && iommu_intremap && apic < nr_ioapics; ++apic )
|
||||
|
||||