From owner-p4-projects@FreeBSD.ORG Tue Jan 18 22:55:23 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 07C6716A4D1; Tue, 18 Jan 2005 22:55:23 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D4A0F16A4CF for ; Tue, 18 Jan 2005 22:55:22 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 58F6F43D54 for ; Tue, 18 Jan 2005 22:55:22 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j0IMtM3T093395 for ; Tue, 18 Jan 2005 22:55:22 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j0IMtL2D093392 for perforce@freebsd.org; Tue, 18 Jan 2005 22:55:21 GMT (envelope-from jhb@freebsd.org) Date: Tue, 18 Jan 2005 22:55:21 GMT Message-Id: <200501182255.j0IMtL2D093392@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Subject: PERFORCE change 69254 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Jan 2005 22:55:23 -0000 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 -__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 #include @@ -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 -__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 #include ==== //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 -__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 -__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 #include #include +#include #include #include @@ -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 -__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 #include @@ -63,6 +63,7 @@ #include +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 -__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 @@ -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 -__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 #include @@ -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 -__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 -__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 #include @@ -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 -__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 @@ -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) <<<