Date: Sun, 17 Nov 2013 03:08:18 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r258248 - in projects/altix2/sys: kern sys Message-ID: <201311170308.rAH38IFX094058@svn.freebsd.org>
index | next in thread | raw e-mail
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)help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311170308.rAH38IFX094058>
