Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Dec 2012 06:00:55 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r244852 - projects/altix2/sys/ia64/sgisn
Message-ID:  <201212300600.qBU60tc3037638@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Sun Dec 30 06:00:55 2012
New Revision: 244852
URL: http://svnweb.freebsd.org/changeset/base/244852

Log:
  Use 64-bit direct mapped DMA for devices that support it (e.g. isp(4)).

Modified:
  projects/altix2/sys/ia64/sgisn/sgisn_pcib.c

Modified: projects/altix2/sys/ia64/sgisn/sgisn_pcib.c
==============================================================================
--- projects/altix2/sys/ia64/sgisn/sgisn_pcib.c	Sun Dec 30 05:59:10 2012	(r244851)
+++ projects/altix2/sys/ia64/sgisn/sgisn_pcib.c	Sun Dec 30 06:00:55 2012	(r244852)
@@ -506,12 +506,22 @@ sgisn_pcib_iommu_xlate(device_t dev, bus
 static int
 sgisn_pcib_iommu_map(device_t dev, busdma_md_t md, u_int idx, bus_addr_t *ba_p)
 {
-	bus_addr_t bndry = 0x80000000UL;
+	struct sgisn_pcib_softc *sc = device_get_softc(dev);
+	busdma_tag_t tag;
+	bus_addr_t maxaddr = 0x80000000UL;
 	bus_addr_t ba;
 
 	ba = *ba_p;
-	if (ba < bndry) {
-		ba |= bndry;
+	if (ba < maxaddr) {
+		ba |= maxaddr;
+		*ba_p = ba;
+		return (0);
+	}
+
+	tag = busdma_md_get_tag(md);
+	maxaddr = busdma_tag_get_maxaddr(tag);
+	if (maxaddr == ~0UL) {
+		ba |= ((u_long)sc->sc_fwbus->fw_hub_xid << 60) | (1UL << 59);
 		*ba_p = ba;
 		return (0);
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212300600.qBU60tc3037638>