PERFORCE change 105207 for review

Alex Lyashkov als at FreeBSD.org
Mon Aug 28 05:20:45 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=105207

Change 105207 by als at als_head on 2006/08/28 05:20:33

	update to last HEAD

Affected files ...

.. //depot/projects/jail2/sys/amd64/amd64/support.S#3 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_dummy.c#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_machdep.c#3 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_proto.h#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_syscall.h#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/linux32_sysent.c#4 integrate
.. //depot/projects/jail2/sys/amd64/linux32/syscalls.master#4 integrate
.. //depot/projects/jail2/sys/arm/arm/busdma_machdep.c#2 integrate
.. //depot/projects/jail2/sys/arm/arm/cpufunc.c#2 integrate
.. //depot/projects/jail2/sys/arm/arm/elf_trampoline.c#4 integrate
.. //depot/projects/jail2/sys/arm/arm/fusu.S#2 integrate
.. //depot/projects/jail2/sys/arm/arm/identcpu.c#2 integrate
.. //depot/projects/jail2/sys/arm/at91/if_ate.c#4 integrate
.. //depot/projects/jail2/sys/arm/conf/EP80219#1 branch
.. //depot/projects/jail2/sys/arm/include/armreg.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/cpuconf.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/cpufunc.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/elf.h#2 integrate
.. //depot/projects/jail2/sys/arm/include/vmparam.h#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/ep80219_machdep.c#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/files.ep80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/files.i80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321_intr.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321_pci.c#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321reg.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/i80321var.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq31244_machdep.c#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq80321.c#3 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/iq80321reg.h#2 integrate
.. //depot/projects/jail2/sys/arm/xscale/i80321/std.ep80219#1 branch
.. //depot/projects/jail2/sys/arm/xscale/i80321/std.i80219#1 branch
.. //depot/projects/jail2/sys/bsm/audit.h#2 integrate
.. //depot/projects/jail2/sys/bsm/audit_internal.h#2 integrate
.. //depot/projects/jail2/sys/bsm/audit_kevents.h#3 integrate
.. //depot/projects/jail2/sys/bsm/audit_record.h#3 integrate
.. //depot/projects/jail2/sys/cam/scsi/scsi_all.c#2 integrate
.. //depot/projects/jail2/sys/cam/scsi/scsi_all.h#2 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_futex.c#2 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_misc.c#5 integrate
.. //depot/projects/jail2/sys/compat/linux/linux_stats.c#3 integrate
.. //depot/projects/jail2/sys/conf/NOTES#5 integrate
.. //depot/projects/jail2/sys/conf/files.powerpc#3 integrate
.. //depot/projects/jail2/sys/conf/options.arm#3 integrate
.. //depot/projects/jail2/sys/crypto/sha2/sha2.c#2 integrate
.. //depot/projects/jail2/sys/dev/ata/ata-raid.c#2 integrate
.. //depot/projects/jail2/sys/dev/bge/if_bge.c#3 integrate
.. //depot/projects/jail2/sys/dev/bge/if_bgereg.h#3 integrate
.. //depot/projects/jail2/sys/dev/em/if_em.c#3 integrate
.. //depot/projects/jail2/sys/dev/fb/creator.c#2 integrate
.. //depot/projects/jail2/sys/dev/iicbus/if_ic.c#2 integrate
.. //depot/projects/jail2/sys/dev/iicbus/iicbb.c#2 integrate
.. //depot/projects/jail2/sys/dev/isp/isp_ioctl.h#3 integrate
.. //depot/projects/jail2/sys/dev/isp/isp_pci.c#3 integrate
.. //depot/projects/jail2/sys/dev/ispfw/asm_2400.h#1 branch
.. //depot/projects/jail2/sys/dev/ispfw/ispfw.c#3 integrate
.. //depot/projects/jail2/sys/dev/mii/brgphy.c#3 integrate
.. //depot/projects/jail2/sys/i386/i386/support.s#3 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_dummy.c#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_machdep.c#3 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_proto.h#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_syscall.h#4 integrate
.. //depot/projects/jail2/sys/i386/linux/linux_sysent.c#4 integrate
.. //depot/projects/jail2/sys/i386/linux/syscalls.master#4 integrate
.. //depot/projects/jail2/sys/ia64/ia64/support.S#2 integrate
.. //depot/projects/jail2/sys/ia64/include/vmparam.h#2 integrate
.. //depot/projects/jail2/sys/kern/init_main.c#3 integrate
.. //depot/projects/jail2/sys/kern/init_sysent.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_thr.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_thread.c#3 integrate
.. //depot/projects/jail2/sys/kern/kern_umtx.c#2 integrate
.. //depot/projects/jail2/sys/kern/sched_4bsd.c#3 integrate
.. //depot/projects/jail2/sys/kern/sched_core.c#3 integrate
.. //depot/projects/jail2/sys/kern/sched_ule.c#2 integrate
.. //depot/projects/jail2/sys/kern/subr_witness.c#2 integrate
.. //depot/projects/jail2/sys/kern/syscalls.c#3 integrate
.. //depot/projects/jail2/sys/kern/syscalls.master#3 integrate
.. //depot/projects/jail2/sys/kern/systrace_args.c#2 integrate
.. //depot/projects/jail2/sys/kern/vfs_mount.c#4 integrate
.. //depot/projects/jail2/sys/modules/ispfw/Makefile#3 integrate
.. //depot/projects/jail2/sys/modules/ispfw/isp_2400/Makefile#1 branch
.. //depot/projects/jail2/sys/net/if_bridge.c#4 integrate
.. //depot/projects/jail2/sys/net/if_ethersubr.c#3 integrate
.. //depot/projects/jail2/sys/net/if_spppsubr.c#3 integrate
.. //depot/projects/jail2/sys/net/if_vlan.c#4 integrate
.. //depot/projects/jail2/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c#3 integrate
.. //depot/projects/jail2/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c#3 integrate
.. //depot/projects/jail2/sys/netgraph/ng_fec.c#2 integrate
.. //depot/projects/jail2/sys/netinet/tcp_subr.c#3 integrate
.. //depot/projects/jail2/sys/netsmb/smb_crypt.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_iod.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_rq.c#2 integrate
.. //depot/projects/jail2/sys/netsmb/smb_rq.h#2 integrate
.. //depot/projects/jail2/sys/pci/agp_amd64.c#2 integrate
.. //depot/projects/jail2/sys/powerpc/include/gdb_machdep.h#1 branch
.. //depot/projects/jail2/sys/powerpc/include/vmparam.h#2 integrate
.. //depot/projects/jail2/sys/powerpc/powerpc/copyinout.c#2 integrate
.. //depot/projects/jail2/sys/powerpc/powerpc/gdb_machdep.c#1 branch
.. //depot/projects/jail2/sys/security/audit/audit_bsm.c#3 integrate
.. //depot/projects/jail2/sys/security/audit/audit_bsm_token.c#3 integrate
.. //depot/projects/jail2/sys/security/audit/audit_ioctl.h#2 integrate
.. //depot/projects/jail2/sys/security/audit/audit_pipe.c#2 integrate
.. //depot/projects/jail2/sys/security/mac_mls/mac_mls.c#2 integrate
.. //depot/projects/jail2/sys/sparc64/sparc64/support.S#2 integrate
.. //depot/projects/jail2/sys/sys/kobj.h#2 integrate
.. //depot/projects/jail2/sys/sys/proc.h#2 integrate
.. //depot/projects/jail2/sys/sys/sched.h#2 integrate
.. //depot/projects/jail2/sys/sys/syscall.h#3 integrate
.. //depot/projects/jail2/sys/sys/syscall.mk#3 integrate
.. //depot/projects/jail2/sys/sys/sysctl.h#3 integrate
.. //depot/projects/jail2/sys/sys/sysproto.h#3 integrate
.. //depot/projects/jail2/sys/sys/systm.h#4 integrate
.. //depot/projects/jail2/sys/sys/umtx.h#2 integrate
.. //depot/projects/jail2/sys/ufs/ffs/ffs_snapshot.c#2 integrate
.. //depot/projects/jail2/sys/vm/vm_contig.c#2 integrate
.. //depot/projects/jail2/sys/vm/vm_object.c#4 integrate
.. //depot/projects/jail2/sys/vm/vm_page.c#4 integrate
.. //depot/projects/jail2/sys/vm/vm_page.h#3 integrate
.. //depot/projects/jail2/sys/vm/vm_pageq.c#3 integrate
.. //depot/projects/jail2/sys/vm/vm_zeroidle.c#2 integrate

Differences ...

==== //depot/projects/jail2/sys/amd64/amd64/support.S#3 (text+ko) ====

@@ -27,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.119 2006/08/16 22:22:28 davidxu Exp $
+ * $FreeBSD: src/sys/amd64/amd64/support.S,v 1.120 2006/08/28 02:28:14 davidxu Exp $
  */
 
 #include "opt_ddb.h"
@@ -314,6 +314,34 @@
 	ret
 
 /*
+ * casuword32.  Compare and set user integer.  Returns -1 or the current value.
+ *        dst = %rdi, old = %rsi, new = %rdx
+ */
+ENTRY(casuword32)
+	movq	PCPU(CURPCB),%rcx
+	movq	$fusufault,PCB_ONFAULT(%rcx)
+
+	movq	$VM_MAXUSER_ADDRESS-4,%rax
+	cmpq	%rax,%rdi			/* verify address is valid */
+	ja	fusufault
+
+	movl	%esi,%eax			/* old */
+#ifdef SMP
+	lock
+#endif
+	cmpxchgl %edx,(%rdi)			/* new = %edx */
+
+	/*
+	 * The old value is in %eax.  If the store succeeded it will be the
+	 * value we expected (old) from before the store, otherwise it will
+	 * be the current value.
+	 */
+
+	movq	PCPU(CURPCB),%rcx
+	movq	$0,PCB_ONFAULT(%rcx)
+	ret
+
+/*
  * casuptr.  Compare and set user pointer.  Returns -1 or the current value.
  *        dst = %rdi, old = %rsi, new = %rdx
  */

==== //depot/projects/jail2/sys/amd64/linux32/linux32_dummy.c#4 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.4 2006/08/15 12:54:29 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.5 2006/08/27 08:56:53 netchild Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -77,7 +77,6 @@
 DUMMY(timer_gettime);
 DUMMY(timer_getoverrun);
 DUMMY(timer_delete);
-DUMMY(statfs64);
 DUMMY(fstatfs64);
 DUMMY(utimes);
 DUMMY(fadvise64_64);

==== //depot/projects/jail2/sys/amd64/linux32/linux32_machdep.c#3 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.14 2006/08/16 18:54:50 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_machdep.c,v 1.16 2006/08/25 11:59:56 netchild Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -60,6 +60,7 @@
 #include <compat/linux/linux_ipc.h>
 #include <compat/linux/linux_signal.h>
 #include <compat/linux/linux_util.h>
+#include <compat/linux/linux_emul.h>
 
 struct l_old_select_argv {
 	l_int		nfds;
@@ -211,6 +212,14 @@
 	free(path, M_TEMP);
 	if (error == 0)
 		error = kern_execve(td, &eargs, NULL);
+	if (error == 0)
+	   	/* linux process can exec fbsd one, dont attempt
+		 * to create emuldata for such process using
+		 * linux_proc_init, this leads to a panic on KASSERT
+		 * because such process has p->p_emuldata == NULL
+		 */
+	   	if (td->td_proc->p_sysent == &elf_linux_sysvec)
+   		   	error = linux_proc_init(td, 0, 0);
 	return (error);
 }
 
@@ -452,6 +461,10 @@
 
 	if (td->td_retval[1] == 1)
 		td->td_retval[0] = 0;
+	error = linux_proc_init(td, td->td_retval[0], 0);
+	if (error)
+		return (error);
+
 	return (0);
 }
 
@@ -459,17 +472,31 @@
 linux_vfork(struct thread *td, struct linux_vfork_args *args)
 {
 	int error;
+	struct proc *p2;
 
 #ifdef DEBUG
 	if (ldebug(vfork))
 		printf(ARGS(vfork, ""));
 #endif
 
-	if ((error = vfork(td, (struct vfork_args *)args)) != 0)
+	/* exclude RFPPWAIT */
+	if ((error = fork1(td, RFFDG | RFPROC | RFMEM, 0, &p2)) != 0)
 		return (error);
+	if (error == 0) {
+	   	td->td_retval[0] = p2->p_pid;
+		td->td_retval[1] = 0;
+	}
 	/* Are we the child? */
 	if (td->td_retval[1] == 1)
 		td->td_retval[0] = 0;
+	error = linux_proc_init(td, td->td_retval[0], 0);
+	if (error)
+		return (error);
+	/* wait for the children to exit, ie. emulate vfork */
+	PROC_LOCK(p2);
+	while (p2->p_flag & P_PPWAIT)
+	   	msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
+	PROC_UNLOCK(p2);
 	return (0);
 }
 
@@ -480,12 +507,14 @@
 	struct proc *p2;
 	struct thread *td2;
 	int exit_signal;
+	struct linux_emuldata *em;
 
 #ifdef DEBUG
 	if (ldebug(clone)) {
-		printf(ARGS(clone, "flags %x, stack %x"),
-		    (unsigned int)(uintptr_t)args->flags,
-		    (unsigned int)(uintptr_t)args->stack);
+   	   	printf(ARGS(clone, "flags %x, stack %x, parent tid: %x, child tid: %x"),
+		    (unsigned int)args->flags, (unsigned int)(uintptr_t)args->stack, 
+		    (unsigned int)(uintptr_t)args->parent_tidptr, 
+		    (unsigned int)(uintptr_t)args->child_tidptr);
 	}
 #endif
 
@@ -503,11 +532,75 @@
 	if (!(args->flags & CLONE_FILES))
 		ff |= RFFDG;
 
+	/*
+	 * Attempt to detect when linux_clone(2) is used for creating
+	 * kernel threads. Unfortunately despite the existence of the
+	 * CLONE_THREAD flag, version of linuxthreads package used in
+	 * most popular distros as of beginning of 2005 doesn't make
+	 * any use of it. Therefore, this detection relay fully on
+	 * empirical observation that linuxthreads sets certain
+	 * combination of flags, so that we can make more or less
+	 * precise detection and notify the FreeBSD kernel that several
+	 * processes are in fact part of the same threading group, so
+	 * that special treatment is necessary for signal delivery
+	 * between those processes and fd locking.
+	 */
+	if ((args->flags & 0xffffff00) == THREADING_FLAGS)
+		ff |= RFTHREAD;
+
 	error = fork1(td, ff, 0, &p2);
 	if (error)
 		return (error);
 	
+	/* create the emuldata */
+	error = linux_proc_init(td, p2->p_pid, args->flags);
+	/* reference it - no need to check this */
+	em = em_find(p2, EMUL_UNLOCKED);
+	KASSERT(em != NULL, ("clone: emuldata not found.\n"));
+	/* and adjust it */
+	if (args->flags & CLONE_PARENT_SETTID) {
+	   	if (args->parent_tidptr == NULL) {
+		   	EMUL_UNLOCK(&emul_lock);
+			return (EINVAL);
+		}
+		error = copyout(&p2->p_pid, args->parent_tidptr, sizeof(p2->p_pid));
+		if (error) {
+		   	EMUL_UNLOCK(&emul_lock);
+			return (error);
+		}
+	}
 
+	if (args->flags & CLONE_PARENT) {
+#ifdef DEBUG
+	   	printf("linux_clone: CLONE_PARENT\n");
+#endif
+	}
+	   	
+	if (args->flags & CLONE_THREAD) {
+	   	/* XXX: linux mangles pgrp and pptr somehow
+		 * I think it might be this but I am not sure.
+		 */
+#ifdef notyet
+	   	p2->p_pgrp = td->td_proc->p_pgrp;
+	 	p2->p_pptr = td->td_proc->p_pptr;
+#endif
+	 	exit_signal = 0;
+#ifdef DEBUG
+	   	printf("linux_clone: CLONE_THREADS\n");
+#endif
+	}
+
+	if (args->flags & CLONE_CHILD_SETTID)
+		em->child_set_tid = args->child_tidptr;
+	else
+	   	em->child_set_tid = NULL;
+
+	if (args->flags & CLONE_CHILD_CLEARTID)
+		em->child_clear_tid = args->child_tidptr;
+	else
+	   	em->child_clear_tid = NULL;
+	EMUL_UNLOCK(&emul_lock);
+
 	PROC_LOCK(p2);
 	p2->p_sigparent = exit_signal;
 	PROC_UNLOCK(p2);
@@ -519,6 +612,10 @@
 	if (args->stack)
    	   	td2->td_frame->tf_rsp = PTROUT(args->stack);
 
+	if (args->flags & CLONE_SETTLS) {
+	   	/* XXX: todo */
+	}
+
 #ifdef DEBUG
 	if (ldebug(clone))
 		printf(LMSG("clone: successful rfork to %ld, stack %p sig = %d"),

==== //depot/projects/jail2/sys/amd64/linux32/linux32_proto.h#4 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp 
+ * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp 
  */
 
 #ifndef _LINUX_SYSPROTO_H_
@@ -782,7 +782,8 @@
 	char rmtp_l_[PADL_(struct l_timespec *)]; struct l_timespec * rmtp; char rmtp_r_[PADR_(struct l_timespec *)];
 };
 struct linux_statfs64_args {
-	register_t dummy;
+	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+	char buf_l_[PADL_(struct l_statfs64_buf *)]; struct l_statfs64_buf * buf; char buf_r_[PADR_(struct l_statfs64_buf *)];
 };
 struct linux_fstatfs64_args {
 	register_t dummy;

==== //depot/projects/jail2/sys/amd64/linux32/linux32_syscall.h#4 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp 
+ * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp 
  */
 
 #define	LINUX_SYS_exit	1

==== //depot/projects/jail2/sys/amd64/linux32/linux32_sysent.c#4 (text+ko) ====

@@ -2,8 +2,8 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.21 2006/08/15 17:36:58 jhb Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp 
+ * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.22 2006/08/27 08:58:00 netchild Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp 
  */
 
 #include <bsm/audit_kevents.h>
@@ -288,7 +288,7 @@
 	{ AS(linux_clock_gettime_args), (sy_call_t *)linux_clock_gettime, AUE_NULL, NULL, 0, 0 },	/* 265 = linux_clock_gettime */
 	{ AS(linux_clock_getres_args), (sy_call_t *)linux_clock_getres, AUE_NULL, NULL, 0, 0 },	/* 266 = linux_clock_getres */
 	{ AS(linux_clock_nanosleep_args), (sy_call_t *)linux_clock_nanosleep, AUE_NULL, NULL, 0, 0 },	/* 267 = linux_clock_nanosleep */
-	{ 0, (sy_call_t *)linux_statfs64, AUE_NULL, NULL, 0, 0 },	/* 268 = linux_statfs64 */
+	{ AS(linux_statfs64_args), (sy_call_t *)linux_statfs64, AUE_NULL, NULL, 0, 0 },	/* 268 = linux_statfs64 */
 	{ 0, (sy_call_t *)linux_fstatfs64, AUE_NULL, NULL, 0, 0 },	/* 269 = linux_fstatfs64 */
 	{ AS(linux_tgkill_args), (sy_call_t *)linux_tgkill, AUE_NULL, NULL, 0, 0 },	/* 270 = linux_tgkill */
 	{ 0, (sy_call_t *)linux_utimes, AUE_NULL, NULL, 0, 0 },	/* 271 = linux_utimes */

==== //depot/projects/jail2/sys/amd64/linux32/syscalls.master#4 (text+ko) ====

@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.19 2006/08/15 12:28:14 netchild Exp $
+ $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.20 2006/08/27 08:56:53 netchild Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from LINUX).
@@ -430,7 +430,7 @@
 266	AUE_NULL	STD	{ int linux_clock_getres(clockid_t which, struct l_timespec *tp); }
 267	AUE_NULL	STD	{ int linux_clock_nanosleep(clockid_t which, int flags, \
 					struct l_timespec *rqtp, struct l_timespec *rmtp); }
-268	AUE_NULL	STD	{ int linux_statfs64(void); }
+268	AUE_NULL	STD	{ int linux_statfs64(char *path, struct l_statfs64_buf *buf); }
 269	AUE_NULL	STD	{ int linux_fstatfs64(void); }
 270	AUE_NULL	STD	{ int linux_tgkill(int tgid, int pid, int sig); }
 271	AUE_NULL	STD	{ int linux_utimes(void); }

==== //depot/projects/jail2/sys/arm/arm/busdma_machdep.c#2 (text+ko) ====

@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.26 2006/05/31 15:50:33 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.27 2006/08/25 15:10:45 cognet Exp $");
 
 /*
  * MacPPC bus dma support routines
@@ -346,6 +346,7 @@
 	}
 	*mapp = newmap;
 	newmap->dmat = dmat;
+	newmap->allocbuffer = NULL;
 	dmat->map_count++;
 
 	CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",

==== //depot/projects/jail2/sys/arm/arm/cpufunc.c#2 (text+ko) ====

@@ -45,7 +45,7 @@
  * Created      : 30/01/97
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.10 2006/04/09 23:07:31 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc.c,v 1.11 2006/08/24 23:51:27 cognet Exp $");
 
 #include <sys/cdefs.h>
 
@@ -71,7 +71,7 @@
 #include <arm/xscale/i80200/i80200var.h>
 #endif
 
-#ifdef CPU_XSCALE_80321
+#if defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219)
 #include <arm/xscale/i80321/i80321reg.h>
 #include <arm/xscale/i80321/i80321var.h>
 #endif
@@ -81,7 +81,8 @@
 #include <arm/xscale/ixp425/ixp425var.h>
 #endif
 
-#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321)
+#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+    defined(CPU_XSCALE_80219)
 #include <arm/xscale/xscalereg.h>
 #endif
 
@@ -511,7 +512,9 @@
 #endif	/* CPU_IXP12X0 */
 
 #if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+  defined(CPU_XSCALE_80219)
+
 struct cpu_functions xscale_cpufuncs = {
 	/* CPU functions */
 	
@@ -567,7 +570,8 @@
 	xscale_setup			/* cpu setup		*/
 };
 #endif
-/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425
+   CPU_XSCALE_80219 */
 
 /*
  * Global constants also used by locore.s
@@ -578,9 +582,11 @@
 u_int cpu_reset_needs_v4_MMU_disable;	/* flag used in locore.s */
 
 #if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) || \
-    defined (CPU_ARM10) || \
-    defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+  defined (CPU_ARM10) ||					       \
+  defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||	       \
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||	       \
+  defined(CPU_XSCALE_80219)
+
 static void get_cachetype_cp15(void);
 
 /* Additional cache information local to this file.  Log2 of some of the
@@ -888,9 +894,10 @@
 		return 0;
 	}
 #endif /* CPU_XSCALE_80200 */
-#ifdef CPU_XSCALE_80321
+#if defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219)
 	if (cputype == CPU_ID_80321_400 || cputype == CPU_ID_80321_600 ||
-	    cputype == CPU_ID_80321_400_B0 || cputype == CPU_ID_80321_600_B0) {
+	    cputype == CPU_ID_80321_400_B0 || cputype == CPU_ID_80321_600_B0 ||
+	    cputype == CPU_ID_80219_400 || cputype == CPU_ID_80219_600) {
 
 		/*
 		 * Reset the Performance Monitoring Unit to a
@@ -915,6 +922,7 @@
 		return 0;
 	}
 #endif /* CPU_XSCALE_80321 */
+
 #ifdef CPU_XSCALE_PXA2X0
 	/* ignore core revision to test PXA2xx CPUs */
 	if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA250 ||
@@ -1318,9 +1326,10 @@
  */
 
 #if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined (CPU_ARM9) || \
-    defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
-	defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-	defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+  defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) ||	\
+  defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||		\
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||		\
+  defined(CPU_XSCALE_80219)
 
 #define IGN	0
 #define OR	1
@@ -1365,7 +1374,7 @@
 	}
 	return(cpuctrl);
 }
-#endif /* CPU_ARM7TDMI || CPU_ARM8 || CPU_SA110 */
+#endif /* CPU_ARM7TDMI || CPU_ARM8 || CPU_SA110 || XSCALE*/
 
 #if defined(CPU_ARM7TDMI) || defined(CPU_ARM8)
 struct cpu_option arm678_options[] = {
@@ -1787,7 +1796,8 @@
 #endif /* CPU_IXP12X0 */
 
 #if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \
+  defined(CPU_XSCALE_80219)
 struct cpu_option xscale_options[] = {
 #ifdef COMPAT_12
 	{ "branchpredict", 	BIC, OR,  CPU_CONTROL_BPRD_ENABLE },
@@ -1864,4 +1874,5 @@
 	__asm __volatile("mcr p15, 0, %0, c1, c0, 1"
 		: : "r" (auxctl));
 }
-#endif	/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+#endif	/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 
+	   CPU_XSCALE_80219 */

==== //depot/projects/jail2/sys/arm/arm/elf_trampoline.c#4 (text+ko) ====

@@ -23,7 +23,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.12 2006/08/15 18:11:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.13 2006/08/24 23:51:27 cognet Exp $");
 #include <machine/asm.h>
 #include <sys/types.h>
 #include <sys/elf32.h>
@@ -64,7 +64,8 @@
     defined(CPU_IXP12X0)
 #define cpu_idcache_wbinv_all	sa1_cache_purgeID
 #elif defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||	\
+  defined(CPU_XSCALE_80219)
 #define cpu_idcache_wbinv_all	xscale_cache_purgeID
 #endif
 

==== //depot/projects/jail2/sys/arm/arm/fusu.S#2 (text+ko) ====

@@ -37,7 +37,7 @@
 #include <machine/asmacros.h>
 #include <machine/armreg.h>
 #include "assym.s"
-__FBSDID("$FreeBSD: src/sys/arm/arm/fusu.S,v 1.7 2005/04/23 16:45:04 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/fusu.S,v 1.8 2006/08/28 02:28:14 davidxu Exp $");
 
 #ifdef MULTIPROCESSOR
 .Lcpu_info:
@@ -52,6 +52,7 @@
  * Fetch an int from the user's address space.
  */
 
+ALTENTRY(casuword32)
 ENTRY(casuptr)
 #ifdef MULTIPROCESSOR
 	/* XXX Probably not appropriate for non-Hydra SMPs */

==== //depot/projects/jail2/sys/arm/arm/identcpu.c#2 (text+ko) ====

@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/identcpu.c,v 1.7 2006/02/03 06:39:57 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/identcpu.c,v 1.8 2006/08/24 23:51:27 cognet Exp $");
 #include <sys/systm.h>
 #include <sys/param.h>
 #include <sys/malloc.h>
@@ -229,6 +229,12 @@
 	{ CPU_ID_80321_600_B0,	CPU_CLASS_XSCALE,	"i80321 600MHz",
 	  i80321_steppings },
 
+	{ CPU_ID_80219_400,	CPU_CLASS_XSCALE,	"i80219 400MHz",
+	  xscale_steppings },
+	
+	{ CPU_ID_80219_600,	CPU_CLASS_XSCALE,	"i80219 600MHz",
+	  xscale_steppings },
+
 	{ CPU_ID_PXA250A,	CPU_CLASS_XSCALE,	"PXA250",
 	  pxa2x0_steppings },
 	{ CPU_ID_PXA210A,	CPU_CLASS_XSCALE,	"PXA210",

==== //depot/projects/jail2/sys/arm/at91/if_ate.c#4 (text) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.9 2006/07/17 21:36:08 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.10 2006/08/25 13:38:42 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -352,11 +352,6 @@
 	    busdma_lock_mutex, &sc->sc_mtx, &sc->rxtag);
 	if (err != 0)
 		goto errout;
-	for (i = 0; i < ATE_MAX_RX_BUFFERS; i++) {
-		err = bus_dmamap_create(sc->rxtag, 0, &sc->rx_map[i]);
-		if (err != 0)
-			goto errout;
-	}
 
 	/* Dma TAG and MAP for the rx descriptors. */
 	err = bus_dma_tag_create(NULL, sizeof(eth_rx_desc_t), 0, 

==== //depot/projects/jail2/sys/arm/include/armreg.h#2 (text+ko) ====

@@ -35,7 +35,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/armreg.h,v 1.3 2005/11/21 19:06:25 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/armreg.h,v 1.4 2006/08/24 23:51:28 cognet Exp $
  */
 
 #ifndef MACHINE_ARMREG_H
@@ -155,6 +155,8 @@
 #define	CPU_ID_80321_600	0x69052430
 #define	CPU_ID_80321_400_B0	0x69052c20
 #define	CPU_ID_80321_600_B0	0x69052c30
+#define	CPU_ID_80219_400	0x69052e20 /* A0 stepping/revision. */
+#define	CPU_ID_80219_600	0x69052e30 /* A0 stepping/revision. */
 #define	CPU_ID_IXP425_533	0x690541c0
 #define	CPU_ID_IXP425_400	0x690541d0
 #define	CPU_ID_IXP425_266	0x690541f0

==== //depot/projects/jail2/sys/arm/include/cpuconf.h#2 (text+ko) ====

@@ -34,7 +34,7 @@
  * 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/cpuconf.h,v 1.7 2006/06/02 09:39:06 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpuconf.h,v 1.8 2006/08/24 23:51:28 cognet Exp $
  *
  */
 
@@ -64,7 +64,7 @@
 #define	ARM_ARCH_4	0
 #endif
 
-#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||		\
+#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || defined(CPU_XSCALE_80219) || \
      defined(CPU_XSCALE_PXA2X0)) || defined(CPU_ARM10)
 #define	ARM_ARCH_5	1
 #else
@@ -112,7 +112,8 @@
 #endif
 
 #if(defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||		\
-     defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425))
+    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||		\
+    defined(CPU_XSCALE_80219))
 #define	ARM_MMU_XSCALE		1
 #else
 #define	ARM_MMU_XSCALE		0
@@ -130,7 +131,8 @@
  *	ARM_XSCALE_PMU		Performance Monitoring Unit on 80200 and 80321
  */
 
-#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321))
+#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
+     defined(CPU_XSCALE_80219))
 #define ARM_XSCALE_PMU	1
 #else
 #define ARM_XSCALE_PMU	0

==== //depot/projects/jail2/sys/arm/include/cpufunc.h#2 (text+ko) ====

@@ -38,7 +38,7 @@
  *
  * Prototypes for cpu, mmu and tlb related functions.
  *
- * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.8 2006/06/01 16:17:44 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.9 2006/08/24 23:51:28 cognet Exp $
  */
 
 #ifndef _MACHINE_CPUFUNC_H_
@@ -371,10 +371,11 @@
 #endif
 
 #if defined(CPU_ARM9) || defined(CPU_ARM10) || defined(CPU_SA110) || \
-    defined(CPU_SA1100) || defined(CPU_SA1110) || \
-    defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
-
+  defined(CPU_SA1100) || defined(CPU_SA1110) ||			     \
+  defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||	     \
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||	     \
+  defined(CPU_XSCALE_80219)
+  
 void	armv4_tlb_flushID	(void);
 void	armv4_tlb_flushI	(void);
 void	armv4_tlb_flushD	(void);
@@ -389,8 +390,9 @@
 void	ixp12x0_setup		(char *string);
 #endif
 
-#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
-    defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425)
+#if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||	\
+  defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||	\
+  defined(CPU_XSCALE_80219)
 void	xscale_cpwait		(void);
 
 void	xscale_cpu_sleep	(int mode);
@@ -428,7 +430,8 @@
 void	xscale_context_switch	(void);
 
 void	xscale_setup		(char *string);
-#endif	/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 */
+#endif	/* CPU_XSCALE_80200 || CPU_XSCALE_80321 || CPU_XSCALE_PXA2X0 || CPU_XSCALE_IXP425 
+	   CPU_XSCALE_80219 */
 
 #define tlb_flush	cpu_tlb_flushID
 #define setttb		cpu_setttb

==== //depot/projects/jail2/sys/arm/include/elf.h#2 (text+ko) ====

@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/elf.h,v 1.6 2005/11/24 02:27:55 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/elf.h,v 1.7 2006/08/24 23:00:03 cognet Exp $
  */
 
 #ifndef _MACHINE_ELF_H_
@@ -121,7 +121,11 @@
 
 /* Define "machine" characteristics */
 #define	ELF_TARG_CLASS	ELFCLASS32
+#ifdef __ARMEB__
+#define	ELF_TARG_DATA	ELFDATA2MSB
+#else
 #define	ELF_TARG_DATA	ELFDATA2LSB
+#endif
 #define	ELF_TARG_MACH	EM_ARM
 #define	ELF_TARG_VER	1
 

==== //depot/projects/jail2/sys/arm/include/vmparam.h#3 (text+ko) ====

@@ -28,7 +28,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/arm/include/vmparam.h,v 1.6 2006/08/08 20:59:38 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/vmparam.h,v 1.7 2006/08/25 23:51:10 alc Exp $
  */
 
 #ifndef	_MACHINE_VMPARAM_H_
@@ -50,15 +50,6 @@
 /*
  * Override the default pager_map size, there's not enough KVA.
  */
-/*
- * Size of User Raw I/O map
- */
-
-#define USRIOSIZE       300
-
-/* virtual sizes (bytes) for various kernel submaps */
-
-#define VM_PHYS_SIZE		(USRIOSIZE*PAGE_SIZE)
 
 /*
  * max number of non-contig chunks of physical RAM you can have

==== //depot/projects/jail2/sys/arm/xscale/i80321/i80321_intr.h#2 (text+ko) ====

@@ -34,7 +34,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  * 
- * $FreeBSD: src/sys/arm/xscale/i80321/i80321_intr.h,v 1.2 2005/01/05 21:58:49 imp Exp $
+ * $FreeBSD: src/sys/arm/xscale/i80321/i80321_intr.h,v 1.3 2006/08/24 23:51:28 cognet Exp $
  *
  */
 
@@ -73,9 +73,21 @@
 	    : "r" (intr_steer & ICU_INT_HWMASK));
 }
 
+#if defined ( CPU_XSCALE_80219 )
+#define INT_SWMASK														\
+	((1U << ICU_INT_bit26) |											\
+	 (1U << ICU_INT_bit25) |											\
+	 (1U << ICU_INT_bit23) |											\
+	 (1U << ICU_INT_bit22) |											\
+	 (1U << ICU_INT_bit7)  |											\
+	 (1U << ICU_INT_bit6)  |											\
+	 (1U << ICU_INT_bit5)  |											\
+	 (1U << ICU_INT_bit4))
+#else
 #define INT_SWMASK                                                      \
         ((1U << ICU_INT_bit26) | (1U << ICU_INT_bit22) |                \
          (1U << ICU_INT_bit5)  | (1U << ICU_INT_bit4))
+#endif
 
 #if 0
 static __inline void __attribute__((__unused__))

==== //depot/projects/jail2/sys/arm/xscale/i80321/i80321_pci.c#2 (text+ko) ====

@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.8 2006/04/20 04:12:02 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.9 2006/08/24 23:51:28 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,20 +68,6 @@
 #include <dev/pci/pcireg.h>
 extern struct i80321_softc *i80321_softc;
 
-struct i80321_pci_softc {
-	device_t 		sc_dev;
-	bus_space_tag_t 	sc_st;
-	bus_space_handle_t 	sc_atu_sh;
-	bus_space_tag_t		sc_pciio;
-	bus_space_tag_t		sc_pcimem;
-	int			sc_busno;
-	struct rman		sc_mem_rman;
-	struct rman		sc_io_rman;
-	struct rman		sc_irq_rman;
-	uint32_t		sc_mem;
-	uint32_t		sc_io;
-};
-
 static int
 i80321_pci_probe(device_t dev)
 {
@@ -260,62 +246,6 @@
 }
 
 static int
-i80321_pci_route_interrupt(device_t pcib, device_t dev, int pin)
-{
-	int bus;
-	int device;
-	int func;
-	uint32_t busno;
-	struct i80321_pci_softc *sc = device_get_softc(pcib);
-	bus = pci_get_bus(dev);
-	device = pci_get_slot(dev);
-	func = pci_get_function(dev);
-	busno = bus_space_read_4(sc->sc_st, sc->sc_atu_sh, ATU_PCIXSR);
-	busno = PCIXSR_BUSNO(busno);
-	if (busno == 0xff)
-		busno = 0;
-	if (bus != busno)
-		goto no_mapping;
-	switch (device) {
-		/* IQ31244 PCI */
-	case 1: /* PCIX-PCIX bridge */
-		/*
-		 * The S-ATA chips are behind the bridge, and all of
-		 * the S-ATA interrupts are wired together.
-		 */
-		return (ICU_INT_XINT(2));
-	case 2: /* PCI slot */
-		/* All pins are wired together. */
-		return (ICU_INT_XINT(3));
-	case 3: /* i82546 dual Gig-E */
-		if (pin == 1 || pin == 2)
-			return (ICU_INT_XINT(0));
-		goto no_mapping;
-		/* IQ80321 PCI */
-	case 4: /* i82544 Gig-E */
-	case 8: /*
-		 * Apparently you can set the device for the ethernet adapter
-		 * to 8 with a jumper, so handle that as well
-		 */
-		if (pin == 1)
-			return (ICU_INT_XINT(0));
-		goto no_mapping;
-	case 6: /* S-PCI-X slot */
-		if (pin == 1)
-			return (ICU_INT_XINT(2));
-		if (pin == 2)
-			return (ICU_INT_XINT(3));
-		goto no_mapping;
-	default:
-no_mapping:
-		printf("No mapping for %d/%d/%d/%c\n", bus, device, func, pin);
-		
-	}
-	return (0);
-
-}
-
-static int
 i80321_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
 {
 	struct i80321_pci_softc *sc = device_get_softc(dev);
@@ -453,7 +383,7 @@
 	DEVMETHOD(pcib_maxslots,	i80321_pci_maxslots),
 	DEVMETHOD(pcib_read_config,	i80321_pci_read_config),
 	DEVMETHOD(pcib_write_config,	i80321_pci_write_config),
-	DEVMETHOD(pcib_route_interrupt,	i80321_pci_route_interrupt),
+	DEVMETHOD(pcib_route_interrupt,	machdep_pci_route_interrupt),
 
 	{0, 0}
 };


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


More information about the p4-projects mailing list