git: ff54674b0950 - main - x86 iommu: move device_tag_init() to utils
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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