Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Jan 2005 22:55:21 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 69254 for review
Message-ID:  <200501182255.j0IMtL2D093392@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=69254

Change 69254 by jhb@jhb_slimer on 2005/01/18 22:54:47

	IFC @69250.

Affected files ...

.. //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#25 integrate
.. //depot/projects/smpng/sys/alpha/alpha/vm_machdep.c#38 integrate
.. //depot/projects/smpng/sys/alpha/include/bus.h#16 integrate
.. //depot/projects/smpng/sys/amd64/amd64/vm_machdep.c#23 integrate
.. //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#9 integrate
.. //depot/projects/smpng/sys/arm/conf/IQ31244#5 integrate
.. //depot/projects/smpng/sys/arm/include/bus.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/endian.h#8 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/files.i80321#2 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/files.iq31244#2 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_timer.c#3 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/i80321_wdog.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq31244_7seg.c#1 branch
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq80321.c#3 integrate
.. //depot/projects/smpng/sys/compat/ndis/kern_ndis.c#20 integrate
.. //depot/projects/smpng/sys/compat/ndis/ntoskrnl_var.h#12 integrate
.. //depot/projects/smpng/sys/compat/ndis/subr_ndis.c#22 integrate
.. //depot/projects/smpng/sys/compat/ndis/subr_ntoskrnl.c#22 integrate
.. //depot/projects/smpng/sys/conf/kern.pre.mk#42 integrate
.. //depot/projects/smpng/sys/conf/newvers.sh#16 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_pci_link.c#27 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_pcib.c#29 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_resource.c#25 integrate
.. //depot/projects/smpng/sys/dev/amr/amr.c#26 integrate
.. //depot/projects/smpng/sys/dev/amr/amr_cam.c#12 integrate
.. //depot/projects/smpng/sys/dev/amr/amr_disk.c#16 integrate
.. //depot/projects/smpng/sys/dev/amr/amr_pci.c#18 integrate
.. //depot/projects/smpng/sys/dev/amr/amrvar.h#17 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath.c#21 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_pci.c#11 integrate
.. //depot/projects/smpng/sys/dev/ath/if_athvar.h#11 integrate
.. //depot/projects/smpng/sys/dev/em/if_em.c#42 integrate
.. //depot/projects/smpng/sys/dev/em/if_em.h#24 integrate
.. //depot/projects/smpng/sys/dev/hme/if_hme.c#20 integrate
.. //depot/projects/smpng/sys/dev/pccard/pccard.c#30 integrate
.. //depot/projects/smpng/sys/fs/udf/udf_vnops.c#24 integrate
.. //depot/projects/smpng/sys/geom/geom_ctl.c#21 integrate
.. //depot/projects/smpng/sys/geom/geom_disk.c#41 integrate
.. //depot/projects/smpng/sys/i386/conf/NOTES#94 integrate
.. //depot/projects/smpng/sys/i386/i386/db_trace.c#24 integrate
.. //depot/projects/smpng/sys/i386/i386/io_apic.c#9 integrate
.. //depot/projects/smpng/sys/i386/i386/local_apic.c#25 integrate
.. //depot/projects/smpng/sys/i386/i386/machdep.c#87 integrate
.. //depot/projects/smpng/sys/i386/i386/mptable.c#14 integrate
.. //depot/projects/smpng/sys/i386/i386/vm_machdep.c#61 integrate
.. //depot/projects/smpng/sys/i386/include/intr_machdep.h#6 integrate
.. //depot/projects/smpng/sys/i386/isa/atpic.c#11 integrate
.. //depot/projects/smpng/sys/i386/isa/elcr.c#2 integrate
.. //depot/projects/smpng/sys/ia64/ia64/busdma_machdep.c#23 integrate
.. //depot/projects/smpng/sys/ia64/ia64/vm_machdep.c#45 integrate
.. //depot/projects/smpng/sys/ia64/include/bus.h#16 integrate
.. //depot/projects/smpng/sys/kern/kern_umtx.c#19 integrate
.. //depot/projects/smpng/sys/kern/sys_generic.c#38 integrate
.. //depot/projects/smpng/sys/kern/sys_pipe.c#51 integrate
.. //depot/projects/smpng/sys/kern/vfs_subr.c#94 integrate
.. //depot/projects/smpng/sys/modules/ath_hal/Makefile#4 integrate
.. //depot/projects/smpng/sys/net/bridge.c#34 integrate
.. //depot/projects/smpng/sys/net/if_ethersubr.c#56 integrate
.. //depot/projects/smpng/sys/net/if_fwsubr.c#5 integrate
.. //depot/projects/smpng/sys/net80211/ieee80211_input.c#12 integrate
.. //depot/projects/smpng/sys/net80211/ieee80211_node.c#13 integrate
.. //depot/projects/smpng/sys/net80211/ieee80211_node.h#9 integrate
.. //depot/projects/smpng/sys/net80211/ieee80211_proto.c#9 integrate
.. //depot/projects/smpng/sys/netgraph/ng_lmi.c#8 integrate
.. //depot/projects/smpng/sys/netgraph/ng_parse.h#7 integrate
.. //depot/projects/smpng/sys/netinet/ip_dummynet.c#35 integrate
.. //depot/projects/smpng/sys/netinet/ip_dummynet.h#16 integrate
.. //depot/projects/smpng/sys/netinet/ip_fw_pfil.c#10 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_vfsops.c#47 integrate
.. //depot/projects/smpng/sys/pc98/conf/NOTES#33 integrate
.. //depot/projects/smpng/sys/powerpc/include/bus.h#14 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/busdma_machdep.c#18 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/vm_machdep.c#41 integrate
.. //depot/projects/smpng/sys/sparc64/include/bus.h#22 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/bus_machdep.c#28 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/iommu.c#28 integrate
.. //depot/projects/smpng/sys/sys/umtx.h#10 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vfsops.c#66 integrate
.. //depot/projects/smpng/sys/vm/vm_map.c#71 integrate
.. //depot/projects/smpng/sys/vm/vm_object.c#66 integrate

Differences ...

==== //depot/projects/smpng/sys/alpha/alpha/busdma_machdep.c#25 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.47 2005/01/05 20:05:48 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.48 2005/01/15 20:11:25 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -637,18 +637,16 @@
 			struct thread *td,
 			int flags,
 			vm_offset_t *lastaddrp,
+			bus_dma_segment_t *segs,
 			int *segp,
 			int first)
 {
-	bus_dma_segment_t *segs;
 	bus_size_t sgsize;
 	bus_addr_t curaddr, lastaddr, baddr, bmask;
 	vm_offset_t vaddr = (vm_offset_t)buf;
 	int seg;
 	pmap_t pmap;
 
-	segs = dmat->segments;
-
 	if (td != NULL)
 		pmap = vmspace_pmap(td->td_proc->p_vmspace);
 	else
@@ -745,7 +743,7 @@
 				error = _bus_dmamap_load_buffer(dmat,
 						m->m_data, m->m_len,
 						NULL, flags, &lastaddr,
-						&nsegs, first);
+						dmat->segments, &nsegs, first);
 				first = 0;
 			}
 		}
@@ -763,6 +761,41 @@
 	return (error);
 }
 
+int
+bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
+			struct mbuf *m0, bus_dma_segment_t *segs,
+			int *nsegs, int flags)
+{
+	int error;
+
+	KASSERT(dmat->lowaddr >= ptoa(Maxmem) || map != NULL,
+		("bus_dmamap_load_mbuf: No support for bounce pages!"));
+	M_ASSERTPKTHDR(m0);
+
+	*nsegs = 0;
+	error = 0;
+	if (m0->m_pkthdr.len <= dmat->maxsize) {
+		int first = 1;
+		bus_addr_t lastaddr = 0;
+		struct mbuf *m;
+
+		for (m = m0; m != NULL && error == 0; m = m->m_next) {
+			if (m->m_len > 0) {
+				error = _bus_dmamap_load_buffer(dmat,
+						m->m_data, m->m_len,
+						NULL, flags, &lastaddr,
+						segs, nsegs, first);
+				first = 0;
+			}
+		}
+		++*nsegs;
+	} else {
+		error = EINVAL;
+	}
+
+	return (error);
+}
+
 /*
  * Like _bus_dmamap_load(), but for uios.
  */
@@ -804,7 +837,8 @@
 
 		if (minlen > 0) {
 			error = _bus_dmamap_load_buffer(dmat, addr, minlen,
-					td, flags, &lastaddr, &nsegs, first);
+					td, flags, &lastaddr, dmat->segments,
+					&nsegs, first);
 			first = 0;
 
 			resid -= minlen;

==== //depot/projects/smpng/sys/alpha/alpha/vm_machdep.c#38 (text+ko) ====

@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/vm_machdep.c,v 1.106 2005/01/05 20:05:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/vm_machdep.c,v 1.107 2005/01/14 20:13:04 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/smpng/sys/alpha/include/bus.h#16 (text+ko) ====

@@ -67,7 +67,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/* $FreeBSD: src/sys/alpha/include/bus.h,v 1.26 2005/01/05 20:05:50 imp Exp $ */
+/* $FreeBSD: src/sys/alpha/include/bus.h,v 1.27 2005/01/15 20:11:25 scottl Exp $ */
 
 #ifndef _ALPHA_BUS_H_
 #define _ALPHA_BUS_H_
@@ -639,6 +639,9 @@
 			 struct mbuf *mbuf,
 			 bus_dmamap_callback2_t *callback, void *callback_arg,
 			 int flags);
+int bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
+			    struct mbuf *mbuf, bus_dma_segment_t *segs,
+			    int *nsegs, int flags);
 /*
  * Like bus_dmamap_load but for uios.  Note the use of the
  * bus_dmamap_callback2_t interface.

==== //depot/projects/smpng/sys/amd64/amd64/vm_machdep.c#23 (text+ko) ====

@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.242 2004/12/27 06:42:25 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.243 2005/01/14 20:16:41 jhb Exp $");
 
 #include "opt_isa.h"
 #include "opt_cpu.h"

==== //depot/projects/smpng/sys/arm/arm/busdma_machdep.c#9 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.9 2005/01/05 21:58:47 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.12 2005/01/16 13:15:16 cognet Exp $");
 
 /*
  * MacPPC bus dma support routines
@@ -46,6 +46,7 @@
 #include <sys/mutex.h>
 #include <sys/mbuf.h>
 #include <sys/uio.h>
+#include <sys/ktr.h>
 
 #include <vm/vm.h>
 #include <vm/vm_page.h>
@@ -98,7 +99,7 @@
  */
 
 static __inline int
-bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
+bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
     bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
     int flags, vm_offset_t *lastaddrp, int *segp);
 
@@ -176,8 +177,11 @@
 	*dmat = NULL;
 
 	newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_DEVBUF, M_NOWAIT);
-	if (newtag == NULL)
+	if (newtag == NULL) {
+		CTR3(KTR_BUSDMA, "bus_dma_tag_create returned tag %p tag "
+		    "flags 0x%x error %d", newtag, 0, error);
 		return (ENOMEM);
+	}
 
 	newtag->parent = parent;
 	newtag->alignment = alignment;
@@ -226,12 +230,17 @@
 	}
 
 	*dmat = newtag;
+	CTR3(KTR_BUSDMA, "bus_dma_tag_create returned tag %p tag flags 0x%x "
+	    "error %d", newtag, (newtag != NULL ? newtag->flags : 0), error);
+
 	return (error);
 }
 
 int
 bus_dma_tag_destroy(bus_dma_tag_t dmat)
 {
+	bus_dma_tag_t dmat_copy = dmat;
+
 	if (dmat != NULL) {
 		
                 if (dmat->map_count != 0)
@@ -254,6 +263,8 @@
                                 dmat = NULL;
                 }
         }
+	CTR1(KTR_BUSDMA, "bus_dma_tag_destroy tag %p", dmat_copy);
+
         return (0);
 }
 
@@ -265,15 +276,22 @@
 bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
 {
 	bus_dmamap_t newmap;
+	int error = 0;
 
 	newmap = malloc(sizeof(*newmap), M_DEVBUF, M_NOWAIT | M_ZERO);
-	if (newmap == NULL)
+	if (newmap == NULL) {
+		CTR2(KTR_BUSDMA, "bus_dmamap_create: tag %p error %d",
+		    dmat, ENOMEM);
 		return (ENOMEM);
+	}
 	*mapp = newmap;
 	newmap->dmat = dmat;
 	newmap->flags = 0;
 	dmat->map_count++;
 
+	CTR3(KTR_BUSDMA, "bus_dmamap_create: tag %p tag flags 0x%x error %d",
+	    dmat, dmat->flags, error);
+
 	return (0);
 }
 
@@ -287,6 +305,7 @@
 
 	free(map, M_DEVBUF);
         dmat->map_count--;
+	CTR1(KTR_BUSDMA, "bus_dmamap_destroy: tag %p error 0", dmat);
         return (0);
 }
 
@@ -312,8 +331,11 @@
 
 	if (!*mapp) {
 		newmap = malloc(sizeof(*newmap), M_DEVBUF, M_NOWAIT | M_ZERO);
-		if (newmap == NULL)
+		if (newmap == NULL) {
+			CTR3(KTR_BUSDMA, "bus_dmamem_alloc: tag %p tag "
+			    "flags %0x%x error Md", dmat, dmat->flags, ENOMEM);
 			return (ENOMEM);
+		}
 		dmat->map_count++;
 		newmap->flags = 0;
 		*mapp = newmap;
@@ -332,9 +354,11 @@
                     0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
                     dmat->boundary);
         }
-        if (*vaddr == NULL && newmap != NULL) {
-		free(newmap, M_DEVBUF);
-		dmat->map_count--;
+        if (*vaddr == NULL) {
+		if (newmap != NULL) {
+			free(newmap, M_DEVBUF);
+			dmat->map_count--;
+		}
 		*mapp = NULL;
                 return (ENOMEM);
 	}
@@ -355,6 +379,8 @@
 	}
 	dmat->map_count--;
 	free(map, M_DEVBUF);
+	CTR2(KTR_BUSDMA, "bus_dmamem_free: tag %p flags 0x%x", dmat,
+	    dmat->flags);
 }
 
 /*
@@ -385,6 +411,9 @@
 	else
 		(*callback)(callback_arg, dm_segments, nsegs + 1, error);
 	
+	CTR4(KTR_BUSDMA, "bus_dmamap_load: tag %p tag flags 0x%x error %d "
+	    "nsegs %d", dmat, dmat->flags, nsegs + 1, error);
+
 	return (0);
 }
 
@@ -395,7 +424,7 @@
  * first indicates if this is the first invocation of this function.
  */
 static int __inline
-bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
+bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t *segs,
     bus_dmamap_t map, void *buf, bus_size_t buflen, struct pmap *pmap,
     int flags, vm_offset_t *lastaddrp, int *segp)
 {
@@ -411,6 +440,9 @@
 	lastaddr = *lastaddrp;
 	bmask = ~(dmat->boundary - 1);
 
+	CTR3(KTR_BUSDMA, "lowaddr= %d boundary= %d, "
+	    "alignment= %d", dmat->lowaddr, dmat->boundary, dmat->alignment);
+
 	for (seg = *segp; buflen > 0 ; ) {
 		/*
 		 * Get the physical address for this segment.
@@ -494,7 +526,7 @@
 		     (segs[seg].ds_addr & bmask) == 
 		     (curaddr & bmask))) {
 			segs[seg].ds_len += sgsize;
-				goto segdone;
+			goto segdone;
 		} else {
 			if (++seg >= dmat->nsegments)
 				break;
@@ -563,9 +595,48 @@
 		(*callback)(callback_arg, dm_segments, nsegs + 1,
 		    m0->m_pkthdr.len, error);
 	}
+	CTR4(KTR_BUSDMA, "bus_dmamap_load_mbuf: tag %p tag flags 0x%x "
+	    "error %d nsegs %d", dmat, dmat->flags, error, nsegs + 1);
+
 	return (error);
 }
 
+int
+bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
+			struct mbuf *m0, bus_dma_segment_t *segs, int *nsegs,
+			int flags)
+{
+	int error = 0;
+	M_ASSERTPKTHDR(m0);
+
+	flags |= BUS_DMA_NOWAIT;
+	*nsegs = -1;
+	map->flags &= ~DMAMAP_TYPE_MASK;
+	map->flags |= DMAMAP_MBUF | DMAMAP_COHERENT;
+	map->buffer = m0;			
+	if (m0->m_pkthdr.len <= dmat->maxsize) {
+		vm_offset_t lastaddr = 0;
+		struct mbuf *m;
+
+		for (m = m0; m != NULL && error == 0; m = m->m_next) {
+			if (m->m_len > 0) {
+				error = bus_dmamap_load_buffer(dmat, segs, map,
+						m->m_data, m->m_len,
+						pmap_kernel(), flags, &lastaddr,
+						nsegs);
+			}
+		}
+	} else {
+		error = EINVAL;
+	}
+
+	/* XXX FIXME: Having to increment nsegs is really annoying */
+	++*nsegs;
+	CTR4(KTR_BUSDMA, "bus_dmamap_load_mbuf: tag %p tag flags 0x%x "
+	    "error %d nsegs %d", dmat, dmat->flags, error, *nsegs);
+	return (error);
+}
+
 /*
  * Like bus_dmamap_load(), but for uios.
  */
@@ -627,6 +698,8 @@
 		    uio->uio_resid, error);
 	}
 
+	CTR4(KTR_BUSDMA, "bus_dmamap_load_uio: tag %p tag flags 0x%x "
+	    "error %d nsegs %d", dmat, dmat->flags, error, nsegs + 1);
 	return (error);
 }
 
@@ -671,6 +744,7 @@
 		return;
 	if (map->flags & DMAMAP_COHERENT)
 		return;
+	CTR2(KTR_BUSDMA, "bus_dmamap_sync: op %x flags %x", op, map->flags);
 	switch(map->flags & DMAMAP_TYPE_MASK) {
 	case DMAMAP_LINEAR:
 		bus_dmamap_sync_buf(map->buffer, map->len, op);

==== //depot/projects/smpng/sys/arm/conf/IQ31244#5 (text+ko) ====

@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first 
 # in NOTES.
 #
-# $FreeBSD: src/sys/arm/conf/IQ31244,v 1.5 2004/11/10 22:09:39 cognet Exp $
+# $FreeBSD: src/sys/arm/conf/IQ31244,v 1.7 2005/01/15 18:55:40 cognet Exp $
 
 machine		arm
 ident		IQ31244
@@ -77,6 +77,8 @@
 device		pci
 device		ata
 device		pty
+device		iopwdog			# I80321 Watchdog
+device		"iq31244_7seg"		# IQ31244 7 seg
 #options 	AHC_REG_PRETTY_PRINT	# Print register bitfields in debug
 					# output.  Adds ~128k to driver.
 #options 	AHD_REG_PRETTY_PRINT	# Print register bitfields in debug

==== //depot/projects/smpng/sys/arm/include/bus.h#5 (text+ko) ====

@@ -67,7 +67,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/bus.h,v 1.5 2005/01/05 21:58:48 imp Exp $
+ * $FreeBSD: src/sys/arm/include/bus.h,v 1.6 2005/01/15 19:31:08 cognet Exp $
  */
 
 #ifndef _MACHINE_BUS_H_
@@ -727,6 +727,9 @@
 	    bus_size_t, bus_dmamap_callback_t *, void *, int);
 int	bus_dmamap_load_mbuf (bus_dma_tag_t, bus_dmamap_t,
 	    struct mbuf *, bus_dmamap_callback2_t *, void *, int);
+int	bus_dmamap_load_mbuf_sg(bus_dma_tag_t dmat, bus_dmamap_t map,
+   	    struct mbuf *mbuf, bus_dma_segment_t *segs,
+	    int *nsegs, int flags);
 int	bus_dmamap_load_uio (bus_dma_tag_t, bus_dmamap_t,
 	    struct uio *, bus_dmamap_callback2_t *, void *, int);
 void	bus_dmamap_unload (bus_dma_tag_t, bus_dmamap_t);

==== //depot/projects/smpng/sys/arm/include/endian.h#8 (text+ko) ====

@@ -27,7 +27,7 @@
  *
  *	@(#)endian.h	8.1 (Berkeley) 6/10/93
  * $NetBSD: endian.h,v 1.7 1999/08/21 05:53:51 simonb Exp $
- * $FreeBSD: src/sys/arm/include/endian.h,v 1.7 2005/01/05 21:58:48 imp Exp $
+ * $FreeBSD: src/sys/arm/include/endian.h,v 1.8 2005/01/18 15:51:50 cognet Exp $
  */
 
 #ifndef _ENDIAN_H_
@@ -43,7 +43,11 @@
 #define _BIG_ENDIAN     4321    /* MSB first: 68000, ibm, net */
 #define _PDP_ENDIAN     3412    /* LSB first in word, MSW first in long */
 
+#ifdef __ARMEB__
+#define _BYTE_ORDER	_BIG_ENDIAN
+#else
 #define	_BYTE_ORDER	_LITTLE_ENDIAN
+#endif /* __ARMEB__ */
 
 #if __BSD_VISIBLE
 #define LITTLE_ENDIAN   _LITTLE_ENDIAN
@@ -52,12 +56,21 @@
 #define BYTE_ORDER      _BYTE_ORDER
 #endif
 
+#ifdef __ARMEB__
+#define _QUAD_HIGHWORD 0
+#define _QUAD_LOWWORD 1
+#define __ntohl(x)	((__uint32_t)(x))
+#define __ntohs(x)	((__uint16_t)(x))
+#define __htonl(x)	((__uint32_t)(x))
+#define __htons(x)	((__uint16_t)(x))
+#else
 #define _QUAD_HIGHWORD  1
 #define _QUAD_LOWWORD 0
 #define __ntohl(x)        (__bswap32(x))
 #define __ntohs(x)        (__bswap16(x))
 #define __htonl(x)        (__bswap32(x))
 #define __htons(x)        (__bswap16(x))
+#endif /* __ARMEB__ */
 
 static __inline __uint64_t
 __bswap64(__uint64_t _x)

==== //depot/projects/smpng/sys/arm/xscale/i80321/files.i80321#2 (text+ko) ====

@@ -1,4 +1,4 @@
-#$FreeBSD: src/sys/arm/xscale/i80321/files.i80321,v 1.1 2004/09/23 22:45:36 cognet Exp $
+#$FreeBSD: src/sys/arm/xscale/i80321/files.i80321,v 1.2 2005/01/15 16:56:22 cognet Exp $
 arm/arm/cpufunc_asm_xscale.S		standard
 arm/arm/irq_dispatch.S			standard
 arm/xscale/i80321/i80321.c		standard
@@ -6,3 +6,4 @@
 arm/xscale/i80321/i80321_pci.c		optional	pci
 arm/xscale/i80321/i80321_space.c	standard
 arm/xscale/i80321/i80321_timer.c	standard
+arm/xscale/i80321/i80321_wdog.c		optional	iopwdog

==== //depot/projects/smpng/sys/arm/xscale/i80321/files.iq31244#2 (text+ko) ====

@@ -1,6 +1,7 @@
-#$FreeBSD: src/sys/arm/xscale/i80321/files.iq31244,v 1.1 2004/09/23 22:45:36 cognet Exp $
+#$FreeBSD: src/sys/arm/xscale/i80321/files.iq31244,v 1.2 2005/01/15 18:55:22 cognet Exp $
 arm/xscale/i80321/iq80321.c		standard
 arm/xscale/i80321/iq31244_machdep.c	standard
+arm/xscale/i80321/iq31244_7seg.c	optional	iq31244_7seg
 arm/xscale/i80321/obio.c		standard
 arm/xscale/i80321/obio_space.c		standard
 arm/xscale/i80321/uart_cpu_i80321.c	optional	uart

==== //depot/projects/smpng/sys/arm/xscale/i80321/i80321_timer.c#3 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.2 2005/01/05 21:58:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_timer.c,v 1.4 2005/01/15 18:55:22 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -63,6 +63,7 @@
 
 #include <arm/xscale/xscalevar.h>
 
+void (*i80321_hardclock_hook)(void) = NULL;
 struct i80321_timer_softc {
 	device_t	dev;
 } timer_softc;
@@ -92,6 +93,8 @@
 static int
 i80321_timer_probe(device_t dev)
 {
+
+	device_set_desc(dev, "i80321 timer");
 	return (0);
 }
 
@@ -379,6 +382,8 @@
 	tisr_write(TISR_TMR0);
 	hardclock(frame);
 
+	if (i80321_hardclock_hook != NULL)
+		(*i80321_hardclock_hook)();
 	return;
 }
 

==== //depot/projects/smpng/sys/arm/xscale/i80321/iq80321.c#3 (text+ko) ====

@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq80321.c,v 1.2 2005/01/05 21:58:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq80321.c,v 1.4 2005/01/15 18:55:22 cognet Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -253,6 +253,8 @@
 		busno = 0;
 	device_add_child(dev, "obio", 0);
 	device_add_child(dev, "itimer", 0);
+	device_add_child(dev, "iopwdog", 0);
+	device_add_child(dev, "iqseg", 0);
 	device_add_child(dev, "pcib", busno);
 	bus_generic_probe(dev);
 	bus_generic_attach(dev);

==== //depot/projects/smpng/sys/compat/ndis/kern_ndis.c#20 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.61 2005/01/05 22:34:36 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/kern_ndis.c,v 1.62 2005/01/14 22:39:43 wpaul Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -110,6 +110,7 @@
 
 static uma_zone_t ndis_packet_zone, ndis_buffer_zone;
 struct mtx ndis_thr_mtx;
+struct mtx ndis_req_mtx;
 static STAILQ_HEAD(ndisqhead, ndis_req) ndis_ttodo;
 struct ndisqhead ndis_itodo;
 struct ndisqhead ndis_free;
@@ -259,6 +260,8 @@
 
 	mtx_init(&ndis_thr_mtx, "NDIS thread lock",
 	   MTX_NDIS_LOCK, MTX_DEF);
+	mtx_init(&ndis_req_mtx, "NDIS request lock",
+	   MTX_NDIS_LOCK, MTX_DEF);
 
 	STAILQ_INIT(&ndis_ttodo);
 	STAILQ_INIT(&ndis_itodo);
@@ -317,6 +320,7 @@
 		free(r, M_DEVBUF);
 	}
 
+	mtx_destroy(&ndis_req_mtx);
 	mtx_destroy(&ndis_thr_mtx);
 
 	return;
@@ -566,7 +570,7 @@
 	block = adapter;
 
 	block->nmb_setstat = status;
-	wakeup(&block->nmb_wkupdpctimer);
+	wakeup(&block->nmb_setstat);
 	return;
 }
 
@@ -579,7 +583,7 @@
 	block = adapter;
 
 	block->nmb_getstat = status;
-	wakeup(&block->nmb_wkupdpctimer);
+	wakeup(&block->nmb_getstat);
 	return;
 }
 
@@ -1132,15 +1136,15 @@
 	if (adapter == NULL || setfunc == NULL)
 		return(ENXIO);
 
-	irql = ntoskrnl_raise_irql(DISPATCH_LEVEL);
+	ntoskrnl_acquire_spinlock(&sc->ndis_block.nmb_lock, &irql);
 	rval = setfunc(adapter, oid, buf, *buflen,
 	    &byteswritten, &bytesneeded);
-	ntoskrnl_lower_irql(irql);
+	ntoskrnl_release_spinlock(&sc->ndis_block.nmb_lock, irql);
 
 	if (rval == NDIS_STATUS_PENDING) {
-		PROC_LOCK(curthread->td_proc);
-		error = msleep(&sc->ndis_block.nmb_wkupdpctimer,
-		    &curthread->td_proc->p_mtx,
+		mtx_lock(&ndis_req_mtx);
+		error = msleep(&sc->ndis_block.nmb_setstat,
+		    &ndis_req_mtx,
 		    curthread->td_priority|PDROP,
 		    "ndisset", 5 * hz);
 		rval = sc->ndis_block.nmb_setstat;
@@ -1322,8 +1326,8 @@
 	ntoskrnl_lower_irql(irql);
 
 	if (rval == NDIS_STATUS_PENDING) {
-		PROC_LOCK(curthread->td_proc);
-		msleep(sc, &curthread->td_proc->p_mtx,
+		mtx_lock(&ndis_req_mtx);
+		msleep(sc, &ndis_req_mtx,
 		    curthread->td_priority|PDROP, "ndisrst", 0);
 	}
 
@@ -1550,17 +1554,17 @@
 	if (adapter == NULL || queryfunc == NULL)
 		return(ENXIO);
 
-	irql = ntoskrnl_raise_irql(DISPATCH_LEVEL);
+	ntoskrnl_acquire_spinlock(&sc->ndis_block.nmb_lock, &irql);
 	rval = queryfunc(adapter, oid, buf, *buflen,
 	    &byteswritten, &bytesneeded);
-	ntoskrnl_lower_irql(irql);
+	ntoskrnl_release_spinlock(&sc->ndis_block.nmb_lock, irql);
 
 	/* Wait for requests that block. */
 
 	if (rval == NDIS_STATUS_PENDING) {
-		PROC_LOCK(curthread->td_proc);
-		error = msleep(&sc->ndis_block.nmb_wkupdpctimer,
-		    &curthread->td_proc->p_mtx,
+		mtx_lock(&ndis_req_mtx);
+		error = msleep(&sc->ndis_block.nmb_getstat,
+		    &ndis_req_mtx,
 		    curthread->td_priority|PDROP,
 		    "ndisget", 5 * hz);
 		rval = sc->ndis_block.nmb_getstat;
@@ -1707,6 +1711,7 @@
 	ndis_enlarge_thrqueue(8);
 
 	TAILQ_INSERT_TAIL(&ndis_devhead, block, link);
+	ntoskrnl_init_lock(&block->nmb_lock);
 
 	return(0);
 }

==== //depot/projects/smpng/sys/compat/ndis/ntoskrnl_var.h#12 (text+ko) ====

@@ -29,7 +29,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/compat/ndis/ntoskrnl_var.h,v 1.18 2005/01/05 22:34:36 imp Exp $
+ * $FreeBSD: src/sys/compat/ndis/ntoskrnl_var.h,v 1.19 2005/01/14 22:39:43 wpaul Exp $
  */
 
 #ifndef _NTOSKRNL_VAR_H_
@@ -508,6 +508,7 @@
 __stdcall extern uint32_t ntoskrnl_read_event(nt_kevent *);
 __stdcall extern uint32_t ntoskrnl_set_event(nt_kevent *, uint32_t, uint8_t);
 __stdcall extern uint32_t ntoskrnl_reset_event(nt_kevent *);
+__stdcall extern void ntoskrnl_init_lock(kspin_lock *);
 __fastcall extern void ntoskrnl_lock_dpc(REGARGS1(kspin_lock *));
 __fastcall extern void ntoskrnl_unlock_dpc(REGARGS1(kspin_lock *));
 

==== //depot/projects/smpng/sys/compat/ndis/subr_ndis.c#22 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.69 2005/01/05 22:34:36 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.70 2005/01/14 22:39:43 wpaul Exp $");
 
 /*
  * This file implements a translation layer between the BSD networking
@@ -776,7 +776,7 @@
 ndis_create_lock(lock)
 	ndis_spin_lock		*lock;
 {
-	lock->nsl_spinlock = 0;
+	ntoskrnl_init_lock(&lock->nsl_spinlock);
 	lock->nsl_kirql = 0;
 
 	return;
@@ -795,7 +795,7 @@
 	ndis_spin_lock		*lock;
 {
 #ifdef notdef
-	lock->nsl_spinlock = 0;
+	ntoskrnl_init_lock(&lock->nsl_spinlock);
 	lock->nsl_kirql = 0;
 #endif
 	return;

==== //depot/projects/smpng/sys/compat/ndis/subr_ntoskrnl.c#22 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.45 2005/01/05 22:34:36 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.46 2005/01/14 22:39:44 wpaul Exp $");
 
 #include <sys/ctype.h>
 #include <sys/unistd.h>
@@ -142,7 +142,6 @@
 __stdcall static void *ntoskrnl_mmaplockedpages_cache(ndis_buffer *,
 	uint8_t, uint32_t, void *, uint32_t, uint32_t);
 __stdcall static void ntoskrnl_munmaplockedpages(void *, ndis_buffer *);
-__stdcall static void ntoskrnl_init_lock(kspin_lock *);
 __stdcall static size_t ntoskrnl_memcmp(const void *, const void *, size_t);
 __stdcall static void ntoskrnl_init_ansi_string(ndis_ansi_string *, char *);
 __stdcall static void ntoskrnl_init_unicode_string(ndis_unicode_string *,
@@ -1137,7 +1136,7 @@
  * lock here because there is no complimentary KeFreeSpinLock()
  * function. Instead, we grab a mutex from the mutex pool.
  */
-__stdcall static void
+__stdcall void
 ntoskrnl_init_lock(lock)
 	kspin_lock		*lock;
 {

==== //depot/projects/smpng/sys/conf/kern.pre.mk#42 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.60 2004/10/25 18:24:39 obrien Exp $
+# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.61 2005/01/18 03:32:53 obrien Exp $
 
 # Part of a unified Makefile for building kernels.  This part contains all
 # of the definitions that need to be before %BEFORE_DEPEND.
@@ -22,7 +22,7 @@
 . if ${MACHINE_ARCH} == "amd64"
 COPTFLAGS?=-O2 -frename-registers -pipe
 . else
-COPTFLAGS?=-O2 -pipe
+COPTFLAGS?=-O -pipe
 . endif
 . if ${COPTFLAGS:M-O[23s]} != ""
 COPTFLAGS+= -fno-strict-aliasing

==== //depot/projects/smpng/sys/conf/newvers.sh#16 (text+ko) ====

@@ -28,7 +28,7 @@
 # SUCH DAMAGE.
 #
 #	@(#)newvers.sh	8.1 (Berkeley) 4/20/94
-# $FreeBSD: src/sys/conf/newvers.sh,v 1.66 2005/01/13 00:21:38 trhodes Exp $
+# $FreeBSD: src/sys/conf/newvers.sh,v 1.68 2005/01/15 13:25:41 ru Exp $
 
 TYPE="FreeBSD"
 REVISION="6.0"
@@ -81,8 +81,7 @@
 fi
 
 touch version
-USER=${USER-`logname`}
-v=`cat version` u=${USER-root} d=`pwd` h=${HOSTNAME-`hostname`} t=`date`
+v=`cat version` u=${USER:-root} d=`pwd` h=${HOSTNAME:-`hostname`} t=`date`
 i=`${MAKE:-make} -V KERN_IDENT`
 cat << EOF > vers.c
 $COPYRIGHT

==== //depot/projects/smpng/sys/dev/acpica/acpi_pci_link.c#27 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pci_link.c,v 1.43 2004/12/27 05:42:32 njl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pci_link.c,v 1.44 2005/01/18 20:18:46 jhb Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -88,7 +88,9 @@
 
 struct acpi_pci_link_softc {
 	int	pl_num_links;
+	int	pl_crs_bad;
 	struct link *pl_links;
+	device_t pl_dev;
 };
 
 struct link {
@@ -302,7 +304,13 @@
 		KASSERT(req->link_index < req->sc->pl_num_links,
 		    ("%s: array boundary violation", __func__));
 		link = &req->sc->pl_links[req->link_index];
+		if (link->l_res_index == -1) {
+			KASSERT(req->sc->pl_crs_bad,
+			    ("res_index should be set"));
+			link->l_res_index = req->res_index;
+		}
 		req->link_index++;
+		req->res_index++;
 
 		/*
 		 * Stash a copy of the resource for later use when doing
@@ -334,6 +342,14 @@
 				link->l_isa_irq = FALSE;
 		}
 		break;
+	default:
+		if (req->in_dpf == DPF_IGNORE)
+			break;
+		if (req->sc->pl_crs_bad)
+			device_printf(req->sc->pl_dev,
+		    "Warning: possible resource %d will be lost during _SRS\n",
+			    req->res_index);
+		req->res_index++;
 	}
 	return (AE_OK);
 }
@@ -396,21 +412,35 @@
 	int i;
 
 	sc = device_get_softc(dev);
+	sc->pl_dev = dev;
 	ACPI_SERIAL_BEGIN(pci_link);
 
 	/*
 	 * Count the number of current resources so we know how big of
-	 * a link array to allocate.
+	 * a link array to allocate.  On some systems, _CRS is broken,
+	 * so for those systems try to derive the count from _PRS instead.
 	 */
 	creq.in_dpf = DPF_OUTSIDE;
 	creq.count = 0;
 	status = AcpiWalkResources(acpi_get_handle(dev), "_CRS",
 	    acpi_count_irq_resources, &creq);
-	if (ACPI_FAILURE(status))
-		return (ENXIO);
+	sc->pl_crs_bad = ACPI_FAILURE(status);
+	if (sc->pl_crs_bad) {
+		creq.in_dpf = DPF_OUTSIDE;
+		creq.count = 0;
+		status = AcpiWalkResources(acpi_get_handle(dev), "_PRS",
+		    acpi_count_irq_resources, &creq);
+		if (ACPI_FAILURE(status)) {
+			device_printf(dev,
+			    "Unable to parse _CRS or _PRS: %s\n",
+			    AcpiFormatException(status));
+			ACPI_SERIAL_END(pci_link);
+			return (ENXIO);
+		}
+	}
+	sc->pl_num_links = creq.count;
 	if (creq.count == 0)
 		return (0);
-	sc->pl_num_links = creq.count;
 	sc->pl_links = malloc(sizeof(struct link) * sc->pl_num_links,
 	    M_PCI_LINK, M_WAITOK | M_ZERO);
 
@@ -420,22 +450,41 @@
 		sc->pl_links[i].l_bios_irq = PCI_INVALID_IRQ;
 		sc->pl_links[i].l_sc = sc;
 		sc->pl_links[i].l_isa_irq = FALSE;
+		sc->pl_links[i].l_res_index = -1;
 	}
+
+	/* Try to read the current settings from _CRS if it is valid. */
+	if (!sc->pl_crs_bad) {
+		rreq.in_dpf = DPF_OUTSIDE;
+		rreq.link_index = 0;
+		rreq.res_index = 0;
+		rreq.sc = sc;
+		status = AcpiWalkResources(acpi_get_handle(dev), "_CRS",
+		    link_add_crs, &rreq);
+		if (ACPI_FAILURE(status)) {
+			device_printf(dev, "Unable to parse _CRS: %s\n",
+			    AcpiFormatException(status));
+			goto fail;
+		}
+	}
+
+	/*
+	 * Try to read the possible settings from _PRS.  Note that if the
+	 * _CRS is toast, we depend on having a working _PRS.  However, if
+	 * _CRS works, then it is ok for _PRS to be missing.
+	 */
 	rreq.in_dpf = DPF_OUTSIDE;
 	rreq.link_index = 0;

>>> TRUNCATED FOR MAIL (1000 lines) <<<



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