git: ff54674b0950 - main - x86 iommu: move device_tag_init() to utils

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Wed, 04 Sep 2024 21:50:48 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=ff54674b09501f4302e675bb2d3e34a752a63405

commit ff54674b09501f4302e675bb2d3e34a752a63405
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-06-30 01:16:51 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-09-04 21:50:19 +0000

    x86 iommu: move device_tag_init() to utils
    
    Sponsored by:   Advanced Micro Devices (AMD)
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
---
 sys/x86/iommu/intel_ctx.c   | 21 +--------------------
 sys/x86/iommu/iommu_utils.c | 17 +++++++++++++++++
 sys/x86/iommu/x86_iommu.h   |  2 ++
 3 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/sys/x86/iommu/intel_ctx.c b/sys/x86/iommu/intel_ctx.c
index e39d2a136d8a..12dd0f0a5259 100644
--- a/sys/x86/iommu/intel_ctx.c
+++ b/sys/x86/iommu/intel_ctx.c
@@ -124,25 +124,6 @@ dmar_map_ctx_entry(struct dmar_ctx *ctx, struct sf_buf **sfp)
 	return (ctxp);
 }
 
-static void
-device_tag_init(struct dmar_ctx *ctx, device_t dev)
-{
-	struct dmar_domain *domain;
-	bus_addr_t maxaddr;
-
-	domain = CTX2DOM(ctx);
-	maxaddr = MIN(domain->iodom.end, BUS_SPACE_MAXADDR);
-	ctx->context.tag->common.impl = &bus_dma_iommu_impl;
-	ctx->context.tag->common.boundary = 0;
-	ctx->context.tag->common.lowaddr = maxaddr;
-	ctx->context.tag->common.highaddr = maxaddr;
-	ctx->context.tag->common.maxsize = maxaddr;
-	ctx->context.tag->common.nsegments = BUS_SPACE_UNRESTRICTED;
-	ctx->context.tag->common.maxsegsz = maxaddr;
-	ctx->context.tag->ctx = CTX2IOCTX(ctx);
-	ctx->context.tag->owner = dev;
-}
-
 static void
 ctx_id_entry_init_one(dmar_ctx_entry_t *ctxp, struct dmar_domain *domain,
     vm_page_t ctx_root)
@@ -586,7 +567,7 @@ dmar_get_ctx_for_dev1(struct dmar_unit *dmar, device_t dev, uint16_t rid,
 			ctx = ctx1;
 			dmar_ctx_link(ctx);
 			ctx->context.tag->owner = dev;
-			device_tag_init(ctx, dev);
+			iommu_device_tag_init(CTX2IOCTX(ctx), dev);
 
 			/*
 			 * This is the first activated context for the
diff --git a/sys/x86/iommu/iommu_utils.c b/sys/x86/iommu/iommu_utils.c
index 04d42799310e..20ca7890ce65 100644
--- a/sys/x86/iommu/iommu_utils.c
+++ b/sys/x86/iommu/iommu_utils.c
@@ -588,3 +588,20 @@ iommu_release_intr(struct iommu_unit *unit, int idx)
 	    dev, dmd->irq);
 	dmd->irq = -1;
 }
+
+void
+iommu_device_tag_init(struct iommu_ctx *ctx, device_t dev)
+{
+	bus_addr_t maxaddr;
+
+	maxaddr = MIN(ctx->domain->end, BUS_SPACE_MAXADDR);
+	ctx->tag->common.impl = &bus_dma_iommu_impl;
+	ctx->tag->common.boundary = 0;
+	ctx->tag->common.lowaddr = maxaddr;
+	ctx->tag->common.highaddr = maxaddr;
+	ctx->tag->common.maxsize = maxaddr;
+	ctx->tag->common.nsegments = BUS_SPACE_UNRESTRICTED;
+	ctx->tag->common.maxsegsz = maxaddr;
+	ctx->tag->ctx = ctx;
+	ctx->tag->owner = dev;
+}
diff --git a/sys/x86/iommu/x86_iommu.h b/sys/x86/iommu/x86_iommu.h
index d6e3ea56bd2c..5f56a2db74b5 100644
--- a/sys/x86/iommu/x86_iommu.h
+++ b/sys/x86/iommu/x86_iommu.h
@@ -183,4 +183,6 @@ void iommu_qi_common_fini(struct iommu_unit *unit, void (*disable_qi)(
 int iommu_alloc_irq(struct iommu_unit *unit, int idx);
 void iommu_release_intr(struct iommu_unit *unit, int idx);
 
+void iommu_device_tag_init(struct iommu_ctx *ctx, device_t dev);
+
 #endif