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