svn commit: r258248 - in projects/altix2/sys: kern sys
Marcel Moolenaar
marcel at FreeBSD.org
Sun Nov 17 03:08:18 UTC 2013
Author: marcel
Date: Sun Nov 17 03:08:17 2013
New Revision: 258248
URL: http://svnweb.freebsd.org/changeset/base/258248
Log:
Add some more tag accessor functions:
. busdma_tag_get_align()
. busdma_tag_get_bndry()
Add an I/O MMU private field to the MD's segment. The implementation for
sparc64 uses it to save a pointer to the corresponding struct resource.
I may remove it later, since it doesn't seem to be necessary per se.
Modified:
projects/altix2/sys/kern/subr_busdma.c
projects/altix2/sys/sys/busdma.h
Modified: projects/altix2/sys/kern/subr_busdma.c
==============================================================================
--- projects/altix2/sys/kern/subr_busdma.c Sun Nov 17 02:26:09 2013 (r258247)
+++ projects/altix2/sys/kern/subr_busdma.c Sun Nov 17 03:08:17 2013 (r258248)
@@ -72,6 +72,7 @@ struct busdma_md_seg {
vm_paddr_t mds_paddr;
vm_offset_t mds_vaddr;
vm_size_t mds_size;
+ uintptr_t mds_iommu;
};
struct busdma_md {
@@ -625,6 +626,24 @@ busdma_tag_destroy(struct busdma_tag *ta
}
bus_addr_t
+busdma_tag_get_align(struct busdma_tag *tag)
+{
+
+ CTR2(KTR_BUSDMA, "%s: tag=%p", __func__, tag);
+
+ return ((tag != NULL) ? tag->dt_align : 0UL);
+}
+
+bus_addr_t
+busdma_tag_get_bndry(struct busdma_tag *tag)
+{
+
+ CTR2(KTR_BUSDMA, "%s: tag=%p", __func__, tag);
+
+ return ((tag != NULL) ? tag->dt_bndry : 0UL);
+}
+
+bus_addr_t
busdma_tag_get_maxaddr(struct busdma_tag *tag)
{
@@ -695,6 +714,19 @@ busdma_md_get_flags(struct busdma_md *md
return ((md != NULL) ? md->md_flags : 0);
}
+uintptr_t
+busdma_md_get_iommu(struct busdma_md *md, u_int idx)
+{
+ struct busdma_md_seg *seg;
+ uintptr_t iommu;
+
+ CTR3(KTR_BUSDMA, "%s: md=%p, idx=%u", __func__, md, idx);
+
+ seg = _busdma_md_get_seg(md, idx);
+ iommu = (seg != NULL) ? seg->mds_iommu : 0UL;
+ return (iommu);
+}
+
u_int
busdma_md_get_nsegs(struct busdma_md *md)
{
@@ -755,6 +787,24 @@ busdma_md_get_vaddr(struct busdma_md *md
return (vaddr);
}
+uintptr_t
+busdma_md_set_iommu(struct busdma_md *md, u_int idx, uintptr_t iommu)
+{
+ struct busdma_md_seg *seg;
+ uintptr_t prev;
+
+ CTR4(KTR_BUSDMA, "%s: md=%p, idx=%u, iommu=%jx", __func__, md, idx,
+ (uintmax_t)iommu);
+
+ seg = _busdma_md_get_seg(md, idx);
+ if (seg != NULL) {
+ prev = seg->mds_iommu;
+ seg->mds_iommu = iommu;
+ } else
+ prev = 0UL;
+ return (prev);
+}
+
int
busdma_md_load_ccb(busdma_md_t md, union ccb *ccb, busdma_callback_f cb,
void *arg, u_int flags)
Modified: projects/altix2/sys/sys/busdma.h
==============================================================================
--- projects/altix2/sys/sys/busdma.h Sun Nov 17 02:26:09 2013 (r258247)
+++ projects/altix2/sys/sys/busdma.h Sun Nov 17 03:08:17 2013 (r258248)
@@ -93,6 +93,8 @@ int busdma_tag_derive(busdma_tag_t tag,
*/
int busdma_tag_destroy(busdma_tag_t tag);
+bus_addr_t busdma_tag_get_align(busdma_tag_t tag);
+bus_addr_t busdma_tag_get_bndry(busdma_tag_t tag);
bus_addr_t busdma_tag_get_maxaddr(busdma_tag_t tag);
/*
@@ -121,9 +123,11 @@ u_int busdma_md_get_flags(busdma_md_t md
u_int busdma_md_get_nsegs(busdma_md_t md);
busdma_tag_t busdma_md_get_tag(busdma_md_t md);
bus_addr_t busdma_md_get_busaddr(busdma_md_t md, u_int idx);
+uintptr_t busdma_md_get_iommu(busdma_md_t md, u_int idx);
vm_paddr_t busdma_md_get_paddr(busdma_md_t md, u_int idx);
-vm_offset_t busdma_md_get_vaddr(busdma_md_t md, u_int idx);
vm_size_t busdma_md_get_size(busdma_md_t md, u_int idx);
+vm_offset_t busdma_md_get_vaddr(busdma_md_t md, u_int idx);
+uintptr_t busdma_md_set_iommu(busdma_md_t md, u_int idx, uintptr_t);
static __inline void *
busdma_md_get_pointer(busdma_md_t md, u_int idx)
More information about the svn-src-projects
mailing list