PERFORCE change 69254 for review
John Baldwin
jhb at FreeBSD.org
Tue Jan 18 14:55:23 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=69254
Change 69254 by jhb at 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) <<<
More information about the p4-projects
mailing list