PERFORCE change 114733 for review

Jung-uk Kim jkim at FreeBSD.org
Mon Feb 19 23:00:28 UTC 2007


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

Change 114733 by jkim at jkim_hammer on 2007/02/19 22:59:41

	IFC

Affected files ...

.. //depot/projects/linuxolator/src/sys/amd64/amd64/msi.c#4 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/pmap.c#6 integrate
.. //depot/projects/linuxolator/src/sys/amd64/amd64/uma_machdep.c#2 integrate
.. //depot/projects/linuxolator/src/sys/arm/arm/elf_trampoline.c#4 integrate
.. //depot/projects/linuxolator/src/sys/arm/arm/locore.S#2 integrate
.. //depot/projects/linuxolator/src/sys/arm/conf/EP80219#4 integrate
.. //depot/projects/linuxolator/src/sys/arm/conf/IQ31244#3 integrate
.. //depot/projects/linuxolator/src/sys/arm/conf/SIMICS#3 integrate
.. //depot/projects/linuxolator/src/sys/arm/xscale/ixp425/ixp425_npe.c#2 integrate
.. //depot/projects/linuxolator/src/sys/conf/files#19 integrate
.. //depot/projects/linuxolator/src/sys/conf/options.arm#4 integrate
.. //depot/projects/linuxolator/src/sys/dev/aic7xxx/aic79xx.seq#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/arcmsr/arcmsr.c#4 integrate
.. //depot/projects/linuxolator/src/sys/dev/arcmsr/arcmsr.h#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/ata/ata-all.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/ata/ata-chipset.c#8 integrate
.. //depot/projects/linuxolator/src/sys/dev/ata/ata-pci.c#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/exca/exca.c#3 integrate
.. //depot/projects/linuxolator/src/sys/dev/ipw/if_ipw.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/ipw/if_ipwvar.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/isp/isp_freebsd.h#7 integrate
.. //depot/projects/linuxolator/src/sys/dev/iwi/if_iwi.c#7 integrate
.. //depot/projects/linuxolator/src/sys/dev/iwi/if_iwivar.h#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/msk/if_msk.c#4 integrate
.. //depot/projects/linuxolator/src/sys/dev/mxge/if_mxge.c#7 integrate
.. //depot/projects/linuxolator/src/sys/dev/pccard/pccarddevs#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pccbb/pccbb.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pccbb/pccbb_pci.c#2 integrate
.. //depot/projects/linuxolator/src/sys/dev/pci/pci.c#18 integrate
.. //depot/projects/linuxolator/src/sys/dev/sound/pci/hda/hdac.c#13 integrate
.. //depot/projects/linuxolator/src/sys/fs/cd9660/cd9660_vfsops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/fs/cd9660/cd9660_vnops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/fs/cd9660/iso.h#2 integrate
.. //depot/projects/linuxolator/src/sys/fs/hpfs/hpfs_vfsops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/fs/hpfs/hpfs_vnops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/fs/msdosfs/msdosfs_vfsops.c#9 integrate
.. //depot/projects/linuxolator/src/sys/fs/msdosfs/msdosfs_vnops.c#6 integrate
.. //depot/projects/linuxolator/src/sys/fs/ntfs/ntfs_vfsops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/fs/ntfs/ntfs_vnops.c#4 integrate
.. //depot/projects/linuxolator/src/sys/fs/nullfs/null_vfsops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/fs/nullfs/null_vnops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/fs/procfs/procfs_ioctl.c#5 integrate
.. //depot/projects/linuxolator/src/sys/fs/udf/udf.h#2 integrate
.. //depot/projects/linuxolator/src/sys/fs/udf/udf_vfsops.c#5 integrate
.. //depot/projects/linuxolator/src/sys/fs/udf/udf_vnops.c#4 integrate
.. //depot/projects/linuxolator/src/sys/fs/umapfs/umap_vfsops.c#4 integrate
.. //depot/projects/linuxolator/src/sys/fs/umapfs/umap_vnops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/fs/unionfs/union_vfsops.c#5 integrate
.. //depot/projects/linuxolator/src/sys/fs/unionfs/union_vnops.c#5 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/ext2fs/ext2_vfsops.c#5 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/ext2fs/ext2_vnops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/reiserfs/reiserfs_vfsops.c#4 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/reiserfs/reiserfs_vnops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/xfs/FreeBSD/xfs_mountops.c#3 integrate
.. //depot/projects/linuxolator/src/sys/gnu/fs/xfs/FreeBSD/xfs_vnops.c#2 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/db_trace.c#5 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/msi.c#4 integrate
.. //depot/projects/linuxolator/src/sys/i386/i386/pmap.c#7 integrate
.. //depot/projects/linuxolator/src/sys/ia64/ia64/uma_machdep.c#2 integrate
.. //depot/projects/linuxolator/src/sys/kern/kern_descrip.c#6 integrate
.. //depot/projects/linuxolator/src/sys/kern/kern_jail.c#5 integrate
.. //depot/projects/linuxolator/src/sys/kern/kern_resource.c#8 integrate
.. //depot/projects/linuxolator/src/sys/kern/subr_firmware.c#5 integrate
.. //depot/projects/linuxolator/src/sys/kern/sysv_msg.c#9 integrate
.. //depot/projects/linuxolator/src/sys/kern/uipc_debug.c#1 branch
.. //depot/projects/linuxolator/src/sys/kern/uipc_socket.c#12 integrate
.. //depot/projects/linuxolator/src/sys/kern/vfs_default.c#4 integrate
.. //depot/projects/linuxolator/src/sys/kern/vfs_export.c#6 integrate
.. //depot/projects/linuxolator/src/sys/kern/vfs_init.c#2 integrate
.. //depot/projects/linuxolator/src/sys/kern/vfs_lookup.c#6 integrate
.. //depot/projects/linuxolator/src/sys/kern/vfs_syscalls.c#8 integrate
.. //depot/projects/linuxolator/src/sys/kern/vnode_if.src#3 integrate
.. //depot/projects/linuxolator/src/sys/netatalk/at_control.c#3 integrate
.. //depot/projects/linuxolator/src/sys/netinet/in_pcb.c#6 integrate
.. //depot/projects/linuxolator/src/sys/netinet/in_pcb.h#2 integrate
.. //depot/projects/linuxolator/src/sys/netinet/tcp_usrreq.c#6 integrate
.. //depot/projects/linuxolator/src/sys/nfsclient/nfs_socket.c#6 integrate
.. //depot/projects/linuxolator/src/sys/nfsserver/nfs_serv.c#5 integrate
.. //depot/projects/linuxolator/src/sys/powerpc/powerpc/cpu.c#3 integrate
.. //depot/projects/linuxolator/src/sys/security/mac_seeotheruids/mac_seeotheruids.c#5 integrate
.. //depot/projects/linuxolator/src/sys/sys/firmware.h#2 integrate
.. //depot/projects/linuxolator/src/sys/sys/mount.h#7 integrate
.. //depot/projects/linuxolator/src/sys/sys/priv.h#2 integrate
.. //depot/projects/linuxolator/src/sys/sys/vnode.h#5 integrate
.. //depot/projects/linuxolator/src/sys/tools/fw_stub.awk#2 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/README.softupdates#2 delete
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_alloc.c#5 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_extern.h#4 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_softdep.c#5 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_vfsops.c#7 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ffs/ffs_vnops.c#5 integrate
.. //depot/projects/linuxolator/src/sys/ufs/ufs/ufs_quota.c#8 integrate
.. //depot/projects/linuxolator/src/sys/vm/vm_page.c#9 integrate

Differences ...

==== //depot/projects/linuxolator/src/sys/amd64/amd64/msi.c#4 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.3 2007/01/22 21:48:42 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.4 2007/02/15 22:22:56 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -347,6 +347,9 @@
 		msi->msi_intsrc.is_pic = &msi_pic;
 		msi->msi_dev = dev;
 		msi->msi_vector = vector + i;
+		if (bootverbose)
+			printf("msi: routing MSI IRQ %d to vector %u\n",
+			    msi->msi_irq, msi->msi_vector);
 		msi->msi_index = i;
 		msi->msi_first = fsrc;
 
@@ -463,6 +466,9 @@
 
 	/* Allocate an IDT vector. */
 	vector = apic_alloc_vector(i);
+	if (bootverbose)
+		printf("msi: routing MSI-X IRQ %d to vector %u\n", msi->msi_irq,
+		    vector);
 
 	/* Setup source. */
 	msi->msi_intsrc.is_pic = &msix_pic;

==== //depot/projects/linuxolator/src/sys/amd64/amd64/pmap.c#6 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.577 2006/12/05 11:31:33 ru Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.579 2007/02/19 10:55:16 kib Exp $");
 
 /*
  *	Manages physical address maps.
@@ -1498,11 +1498,9 @@
 	pmap->pm_pml4[DMPML4I] = 0;	/* Direct Map */
 	pmap->pm_pml4[PML4PML4I] = 0;	/* Recursive Mapping */
 
-	vm_page_lock_queues();
 	m->wire_count--;
 	atomic_subtract_int(&cnt.v_wire_count, 1);
 	vm_page_free_zero(m);
-	vm_page_unlock_queues();
 	PMAP_LOCK_DESTROY(pmap);
 }
 
@@ -1544,9 +1542,15 @@
 		while ((*pmap_pde(kernel_pmap, kernel_vm_end) & PG_V) != 0) {
 			kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
 			nkpt++;
+			if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+				kernel_vm_end = kernel_map->max_offset;
+				break;                       
+			}
 		}
 	}
 	addr = roundup2(addr, PAGE_SIZE * NPTEPG);
+	if (addr - 1 >= kernel_map->max_offset)
+		addr = kernel_map->max_offset;
 	while (kernel_vm_end < addr) {
 		pde = pmap_pde(kernel_pmap, kernel_vm_end);
 		if (pde == NULL) {
@@ -1564,6 +1568,10 @@
 		}
 		if ((*pde & PG_V) != 0) {
 			kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+			if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+				kernel_vm_end = kernel_map->max_offset;
+				break;                       
+			}
 			continue;
 		}
 
@@ -1583,6 +1591,10 @@
 		*pmap_pde(kernel_pmap, kernel_vm_end) = newpdir;
 
 		kernel_vm_end = (kernel_vm_end + PAGE_SIZE * NPTEPG) & ~(PAGE_SIZE * NPTEPG - 1);
+		if (kernel_vm_end - 1 >= kernel_map->max_offset) {
+			kernel_vm_end = kernel_map->max_offset;
+			break;                       
+		}
 	}
 }
 

==== //depot/projects/linuxolator/src/sys/amd64/amd64/uma_machdep.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/uma_machdep.c,v 1.2 2006/04/21 04:24:50 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/uma_machdep.c,v 1.3 2007/02/18 06:33:01 alc Exp $");
 
 #include <sys/param.h>
 #include <sys/lock.h>
@@ -82,7 +82,5 @@
 	pa = DMAP_TO_PHYS((vm_offset_t)mem);
 	dump_drop_page(pa);
 	m = PHYS_TO_VM_PAGE(pa);
-	vm_page_lock_queues();
 	vm_page_free(m);
-	vm_page_unlock_queues();
 }

==== //depot/projects/linuxolator/src/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.16 2006/11/01 12:41:43 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.17 2007/02/19 00:57:27 cognet Exp $");
 #include <machine/asm.h>
 #include <sys/param.h>
 #include <sys/elf32.h>
@@ -103,7 +103,7 @@
     	char *d = dst;
 
 	while (len) {
-		if (len >= 4 && !((vm_offset_t)d & 3) &&
+		if (0 && len >= 4 && !((vm_offset_t)d & 3) &&
 		    !((vm_offset_t)s & 3)) {
 			*(uint32_t *)d = *(uint32_t *)s;
 			s += 4;
@@ -143,6 +143,37 @@
 	int physaddr = KERNPHYSADDR;
 	int tmp1;
 	unsigned int sp = ((unsigned int)&_end & ~3) + 4;
+#if defined(FLASHADDR) && defined(LOADERRAMADDR)
+	unsigned int pc;
+
+	__asm __volatile("adr %0, _start\n"
+	    : "=r" (pc));
+	if ((FLASHADDR > LOADERRAMADDR && pc >= FLASHADDR) ||
+	    (FLASHADDR < LOADERRAMADDR && pc < LOADERRAMADDR)) {
+		/*
+		 * We're running from flash, so just copy the whole thing
+		 * from flash to memory.
+		 * This is far from optimal, we could do the relocation or
+		 * the unzipping directly from flash to memory to avoid this
+		 * needless copy, but it would require to know the flash
+		 * physical address.
+		 */
+		unsigned int target_addr;
+		unsigned int tmp_sp;
+
+		target_addr = (unsigned int)&_start - PHYSADDR + LOADERRAMADDR;
+		tmp_sp = target_addr + 0x100000 +
+		    (unsigned int)&_end - (unsigned int)&_start;
+		memcpy((char *)target_addr, (char *)pc,
+		    (unsigned int)&_end - (unsigned int)&_start);
+		/* Temporary set the sp and jump to the new location. */
+		__asm __volatile(
+		    "mov sp, %1\n"
+		    "mov pc, %0\n"
+		    : : "r" (target_addr), "r" (tmp_sp));
+		
+	}
+#endif
 #ifdef KZIP
 	sp += KERNSIZE + 0x100;
 	sp &= ~(L1_TABLE_SIZE - 1);

==== //depot/projects/linuxolator/src/sys/arm/arm/locore.S#2 (text+ko) ====

@@ -37,7 +37,7 @@
 #include <machine/asm.h>
 #include <machine/armreg.h>
 #include <machine/pte.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/locore.S,v 1.14 2006/06/21 23:47:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/locore.S,v 1.15 2007/02/19 00:57:27 cognet Exp $");
 
 /* What size should this really be ? It is only used by initarm() */
 #define INIT_ARM_STACK_SIZE	2048
@@ -66,47 +66,53 @@
 ENTRY_NP(btext)
 
 ASENTRY_NP(_start)
-
-
-	/* Check if we are running on RAM, if not move ourself to RAM */
-#if 0
-	cmp	pc, #PHYSADDR
-	bhi	start_inram /* XXX: This is wrong */
+#if defined (FLASHADDR) && defined(LOADERRAMADDR)
+	/* Check if we're running from flash. */
+	ldr	r7, =FLASHADDR
+	/* 
+	 * If we're running with MMU disabled, test against the
+	 * physical address instead.
+	 */
+	mrc     p15, 0, r2, c1, c0, 0
+	ands	r2, r2, #CPU_CONTROL_MMU_ENABLE
+	ldreq	r8, =PHYSADDR
+	ldrne	r8, =LOADERRAMADDR
+	cmp	r7, r8
+	bls 	flash_lower
+	cmp	r7, pc
+	bhi	from_ram
+	b	do_copy
+	
+flash_lower:
+	cmp	r8, pc
+	bls	from_ram
+do_copy:
+	ldr	r9, =KERNBASE
+	adr	r1, _start 
+	ldr	r0, Lreal_start
+	ldr	r2, Lend
+	sub	r2, r2, r0
+	sub	r0, r0, r9
+	add	r0, r0, r8
+	mov	r4, r0
+	/* Make sure _arm_memcpy is NULL */
+	ldr	r3, .L_arm_memcpy
+	ldr	r3, [r3]
+	mov	r5, #0
+	str	r5, [r3]
+	bl	memcpy
+	ldr	r0, Lram_offset
+	add	pc, r4, r0
+Lram_offset:	.word from_ram-_C_LABEL(_start)
+from_ram:
+	nop
 #endif
-	b	start_inram /*
-			     * XXX: this is even more wrong, but RedBoot
-			     * use 0x00000000-0x100000000 as virtual
-			     * addresses for the RAM.
-			     */
-
-	/* move me to RAM
-	 * XXX: we can use memcpy if it is PIC
-	 */
-	ldr r1, Lcopy_size
-	adr r0, _C_LABEL(_start)
-	add r1, r1, #3
-	mov r1, r1, LSR #2
-	mov r2, #PHYSADDR
-	add r2, r2, #0x00200000
-	mov r4, r2
-
-5:	ldr r3,[r0],#4
-	str r3,[r2],#4
-	subs r1,r1,#1
-	bhi 5b
-
-	/* Jump to RAM */
-	ldr r0, Lstart_off
-	add pc, r4, r0
-
-Lcopy_size:	.word _edata-_C_LABEL(_start)
-Lstart_off:	.word start_inram-_C_LABEL(_start)
-start_inram:
 	adr	r7, Lunmapped
 	bic     r7, r7, #0xff000000
 	orr     r7, r7, #PHYSADDR
 			
 
+disable_mmu:
 	/* Disable MMU for a while */
 	mrc     p15, 0, r2, c1, c0, 0
 	bic	r2, r2, #(CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE |\
@@ -120,7 +126,6 @@
 	nop
 	mov	pc, r7
 Lunmapped:
-
 #ifdef STARTUP_PAGETABLE_ADDR
 	/* build page table from scratch */
 	ldr	r0, Lstartup_pagetable
@@ -191,6 +196,10 @@
 	.word	KERNVIRTADDR
 Lphysaddr:
 	.word	KERNPHYSADDR
+Lreal_start:
+	.word	_start
+Lend:	
+	.word	_edata
 Lstartup_pagetable:
 	.word	STARTUP_PAGETABLE_ADDR
 mmu_init_table:
@@ -207,6 +216,11 @@
 	.word	_end
 	.word	svcstk + INIT_ARM_STACK_SIZE
 
+#if defined(FLASHADDR) && defined(LOADERRAMADDR)
+.L_arm_memcpy:
+        .word   _C_LABEL(_arm_memcpy)
+#endif
+
 .Lvirt_done:
 	.word	virt_done
 .Lmainreturned:

==== //depot/projects/linuxolator/src/sys/arm/conf/EP80219#4 (text+ko) ====

@@ -1,4 +1,4 @@
-# -*- makefile-bsdmake -*- GENERIC -- Generic kernel configuration file for FreeBSD/arm
+# EP80219 -- Custom kernel configuration file for FreeBSD/arm on the EP80219
 #
 # For more information on this file, please read the handbook section on
 # Kernel Configuration Files:
@@ -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/EP80219,v 1.4 2007/02/07 18:55:29 marcel Exp $
+# $FreeBSD: src/sys/arm/conf/EP80219,v 1.5 2007/02/19 00:37:25 cognet Exp $
 
 machine	arm
 ident		EP80219

==== //depot/projects/linuxolator/src/sys/arm/conf/IQ31244#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# GENERIC -- Generic kernel configuration file for FreeBSD/arm
+# IQ31244 -- Custom kernel configuration file for FreeBSD/arm on the IQ31244
 #
 # For more information on this file, please read the handbook section on
 # Kernel Configuration Files:
@@ -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.17 2006/10/26 22:11:35 jb Exp $
+# $FreeBSD: src/sys/arm/conf/IQ31244,v 1.19 2007/02/19 01:03:08 cognet Exp $
 
 machine		arm
 ident		IQ31244
@@ -23,6 +23,8 @@
 options 	PHYSADDR=0xa0000000
 options		KERNPHYSADDR=0xa0200000	
 options		KERNVIRTADDR=0xc0200000		# Used in ldscript.arm
+options		FLASHADDR=0xf0000000
+options		LOADERRAMADDR=0x00000000
 
 options STARTUP_PAGETABLE_ADDR=0xa0000000
 include		"../xscale/i80321/std.iq31244"

==== //depot/projects/linuxolator/src/sys/arm/conf/SIMICS#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# GENERIC -- Generic kernel configuration file for FreeBSD/arm
+# SIMICS -- Custom kernel configuration file for FreeBSD/arm on Simics SA1110
 #
 # For more information on this file, please read the handbook section on
 # Kernel Configuration Files:
@@ -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/SIMICS,v 1.12 2006/10/26 22:11:35 jb Exp $
+# $FreeBSD: src/sys/arm/conf/SIMICS,v 1.13 2007/02/19 00:37:25 cognet Exp $
 
 machine		arm
 ident		SIMICS

==== //depot/projects/linuxolator/src/sys/arm/xscale/ixp425/ixp425_npe.c#2 (text+ko) ====

@@ -57,7 +57,7 @@
  * SUCH DAMAGE.
 */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.1 2006/11/19 23:55:23 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/xscale/ixp425/ixp425_npe.c,v 1.2 2007/02/15 17:21:30 luigi Exp $");
 
 /*
  * Intel XScale Network Processing Engine (NPE) support.
@@ -422,7 +422,7 @@
 {
     uint32_t imageSize;
     const uint32_t *imageCodePtr;
-    struct firmware *fw;
+    const struct firmware *fw;
     int error;
 
     DPRINTF(sc->sc_dev, "load %s, imageId 0x%08x\n", imageName, imageId);

==== //depot/projects/linuxolator/src/sys/conf/files#19 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1176 2007/02/11 14:01:32 rodrigc Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1177 2007/02/15 01:28:22 rwatson Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -1443,6 +1443,7 @@
 kern/tty_tty.c			standard
 kern/uipc_accf.c		optional inet
 kern/uipc_cow.c			optional zero_copy_sockets
+kern/uipc_debug.c		optional ddb
 kern/uipc_domain.c		standard
 kern/uipc_mbuf.c		standard
 kern/uipc_mbuf2.c		standard

==== //depot/projects/linuxolator/src/sys/conf/options.arm#4 (text+ko) ====

@@ -1,4 +1,4 @@
-#$FreeBSD: src/sys/conf/options.arm,v 1.15 2007/01/05 02:08:35 ticso Exp $
+#$FreeBSD: src/sys/conf/options.arm,v 1.16 2007/02/19 01:03:07 cognet Exp $
 ARM9_CACHE_WRITE_THROUGH	opt_global.h
 ARM_CACHE_LOCK_ENABLE	opt_global.h
 ARMFPE			opt_global.h
@@ -11,8 +11,10 @@
 CPU_XSCALE_80321	opt_global.h
 CPU_XSCALE_80219	opt_global.h
 CPU_XSCALE_IXP425	opt_global.h
+FLASHADDR		opt_global.h
 KERNPHYSADDR		opt_global.h
 KERNVIRTADDR		opt_global.h
+LOADERRAMADDR		opt_global.h
 PHYSADDR		opt_global.h
 SKYEYE_WORKAROUNDS	opt_global.h
 STARTUP_PAGETABLE_ADDR	opt_global.h

==== //depot/projects/linuxolator/src/sys/dev/aic7xxx/aic79xx.seq#2 (text+ko) ====

@@ -37,7 +37,7 @@
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.seq,v 1.18 2005/01/06 01:42:26 imp Exp $
+ * $FreeBSD: src/sys/dev/aic7xxx/aic79xx.seq,v 1.19 2007/02/18 19:48:59 ceri Exp $
  */
 
 VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $"
@@ -2139,7 +2139,7 @@
 END_CRITICAL;
 pkt_status_check_overrun:
 	/*
-	 * Status PKT overruns are uncerimoniously recovered with a
+	 * Status PKT overruns are unceremoniously recovered with a
 	 * bus reset.  If we've overrun, let the host know so that
 	 * recovery can be performed.
 	 *

==== //depot/projects/linuxolator/src/sys/dev/arcmsr/arcmsr.c#4 (text+ko) ====

@@ -52,8 +52,11 @@
 **                                                       with scsi pass-through command
 **                                                       add new device id of sas raid adapters 
 **                                                       code fit for SPARC64 & PPC 
+**     1.20.00.14   02/05/2007         Erich Chen        bug fix for incorrect ccb_h.status report
+**                                                       and cause g_vfs_done() read write error
+
 ******************************************************************************************
-* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.15 2006/12/13 08:46:03 scottl Exp $
+* $FreeBSD: src/sys/dev/arcmsr/arcmsr.c,v 1.16 2007/02/15 15:36:15 scottl Exp $
 */
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1299,7 +1302,8 @@
 	}
 	pccb->ccb_h.status |= CAM_SIM_QUEUED;
 	if(acb->srboutstandingcount >= ARCMSR_MAX_OUTSTANDING_CMD) {
-		pccb->ccb_h.status |= CAM_SCSI_BUSY;
+		pccb->ccb_h.status &= ~CAM_STATUS_MASK;
+		pccb->ccb_h.status |= CAM_REQUEUE_REQ;
 		arcmsr_srb_complete(srb, 0);
 		return;
 	}

==== //depot/projects/linuxolator/src/sys/dev/arcmsr/arcmsr.h#3 (text+ko) ====

@@ -35,9 +35,9 @@
 **(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/dev/arcmsr/arcmsr.h,v 1.2 2006/12/13 08:46:03 scottl Exp $
+* $FreeBSD: src/sys/dev/arcmsr/arcmsr.h,v 1.3 2007/02/15 15:36:15 scottl Exp $
 */
-#define ARCMSR_DRIVER_VERSION                        "Driver Version 1.20.00.13 2006-8-18"
+#define ARCMSR_DRIVER_VERSION                        "Driver Version 1.20.00.14 2007-2-05"
 #define ARCMSR_SCSI_INITIATOR_ID                                              255
 #define ARCMSR_DEV_SECTOR_SIZE                                                512
 #define ARCMSR_MAX_XFER_SECTORS                                              4096

==== //depot/projects/linuxolator/src/sys/dev/ata/ata-all.h#2 (text+ko) ====

@@ -23,7 +23,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/dev/ata/ata-all.h,v 1.118 2006/06/28 09:59:09 sos Exp $
+ * $FreeBSD: src/sys/dev/ata/ata-all.h,v 1.119 2007/02/15 21:51:42 sos Exp $
  */
 
 /* ATA register defines */
@@ -228,6 +228,29 @@
 #define ATA_AHCI_CT_SG_OFFSET           128
 #define ATA_AHCI_CT_SIZE                256
 
+struct ata_ahci_dma_prd {
+    u_int64_t                   dba;
+    u_int32_t                   reserved;
+    u_int32_t                   dbc;            /* 0 based */
+#define ATA_AHCI_PRD_MASK       0x003fffff      /* max 4MB */
+#define ATA_AHCI_PRD_IPC        (1<<31)
+} __packed;
+
+struct ata_ahci_cmd_tab {
+    u_int8_t                    cfis[64];
+    u_int8_t                    acmd[32];
+    u_int8_t                    reserved[32];
+    struct ata_ahci_dma_prd     prd_tab[16];
+} __packed;
+
+struct ata_ahci_cmd_list {
+    u_int16_t                   cmd_flags;
+    u_int16_t                   prd_length;     /* PRD entries */
+    u_int32_t                   bytecount;
+    u_int64_t                   cmd_table_phys; /* 128byte aligned */
+} __packed;
+
+
 /* DMA register defines */
 #define ATA_DMA_ENTRIES                 256
 #define ATA_DMA_EOT                     0x80000000

==== //depot/projects/linuxolator/src/sys/dev/ata/ata-chipset.c#8 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.181 2007/02/12 17:17:31 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.182 2007/02/15 21:51:42 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -67,7 +67,7 @@
 static void ata_ahci_reset(device_t dev);
 static void ata_ahci_dmasetprd(void *xsc, bus_dma_segment_t *segs, int nsegs, int error);
 static void ata_ahci_dmainit(device_t dev);
-static int ata_ahci_setup_fis(u_int8_t *fis, struct ata_request *request);
+static int ata_ahci_setup_fis(struct ata_ahci_cmd_tab *ctp, struct ata_request *request);
 static int ata_acard_chipinit(device_t dev);
 static int ata_acard_allocate(device_t dev);
 static int ata_acard_status(device_t dev);
@@ -326,8 +326,22 @@
     if (bootverbose)
 	device_printf(ch->dev, "SATA connect ready time=%dms\n", timeout * 10);
 
-    /* do a reset and find out what type device we've got */
-    ata_generic_reset(ch->dev);
+    /* if we have legacy resources an old fashioned reset might be needed */
+    if (ch->r_io[ATA_DATA].res)
+	ata_generic_reset(ch->dev);
+
+    /* register device type from signature */
+    ch->devices = 0;
+    if (timeout < 1000) {
+	if ((ATA_IDX_INB(ch, ATA_CYL_LSB) == ATAPI_MAGIC_LSB) &&
+	    (ATA_IDX_INB(ch, ATA_CYL_MSB) == ATAPI_MAGIC_MSB))
+	    ch->devices = ATA_ATAPI_MASTER;
+	else
+	    ch->devices = ATA_ATA_MASTER;
+    }
+    if (bootverbose)
+	device_printf(ch->dev, "sata_connect devices=0x%b\n",
+		      ch->devices, "\20\3ATAPI_MASTER\1ATA_MASTER");
     return 1;
 }
 
@@ -367,36 +381,15 @@
 
 
 /*
- * AHCI v1.0 compliant SATA chipset support functions
+ * AHCI v1.x compliant SATA chipset support functions
  */
-struct ata_ahci_dma_prd {
-    u_int64_t                   dba;
-    u_int32_t                   reserved;
-    u_int32_t                   dbc;            /* 0 based */
-#define ATA_AHCI_PRD_MASK       0x003fffff      /* max 4MB */
-#define ATA_AHCI_PRD_IPC        (1<<31)
-} __packed;
-
-struct ata_ahci_cmd_tab {
-    u_int8_t                    cfis[64];
-    u_int8_t                    acmd[32];
-    u_int8_t                    reserved[32];
-    struct ata_ahci_dma_prd     prd_tab[16];
-} __packed;
-
-struct ata_ahci_cmd_list {
-    u_int16_t                   cmd_flags;
-    u_int16_t                   prd_length;     /* PRD entries */
-    u_int32_t                   bytecount;
-    u_int64_t                   cmd_table_phys; /* 128byte aligned */
-} __packed;
-
-
 static int
 ata_ahci_chipinit(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(dev);
-    u_int32_t version;
+    u_int32_t version, ports_implemented;;
+    int i, j; 
+    static int mapping[32];
 
     /* reset AHCI controller */
     ATA_OUTL(ctlr->r_res2, ATA_AHCI_GHC,
@@ -415,6 +408,14 @@
     /* get the number of HW channels */
     ctlr->channels = (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_NPMASK)+1;
 
+    /* if port layout has holes setup the right mapping */
+    ports_implemented = ATA_INL(ctlr->r_res2, ATA_AHCI_PI);
+    for (i=0, j=0; i<32 && j<ctlr->channels; i++) {
+	if (ports_implemented & (1<<i))
+	    mapping[j++] = i;
+    }
+    device_set_ivars(dev, mapping);
+
     /* clear interrupts */
     ATA_OUTL(ctlr->r_res2, ATA_AHCI_IS, ATA_INL(ctlr->r_res2, ATA_AHCI_IS));
 
@@ -445,11 +446,12 @@
 {
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
     struct ata_channel *ch = device_get_softc(dev);
-    int offset = (ch->unit << 7);
+    int offset = ((int*)(device_get_ivars(ctlr->dev)))[ch->unit] << 7;
 
     /* setup legacy cruft we need */
+    ch->r_io[ATA_DATA].res = NULL;
     ch->r_io[ATA_CYL_LSB].res = ctlr->r_res2;
-    ch->r_io[ATA_CYL_LSB].offset = ATA_AHCI_P_SIG + 1 + offset;
+    ch->r_io[ATA_CYL_LSB].offset = ATA_AHCI_P_SIG + 2 + offset;
     ch->r_io[ATA_CYL_MSB].res = ctlr->r_res2;
     ch->r_io[ATA_CYL_MSB].offset = ATA_AHCI_P_SIG + 3 + offset;
     ch->r_io[ATA_STATUS].res = ctlr->r_res2;
@@ -503,11 +505,11 @@
     struct ata_channel *ch = device_get_softc(dev);
     struct ata_connect_task *tp;
     u_int32_t action, istatus, sstatus, error, issued;
-    int offset = (ch->unit << 7);
+    int offset = ((int*)(device_get_ivars(ctlr->dev)))[ch->unit] << 7;
     int tag = 0;
 
     action = ATA_INL(ctlr->r_res2, ATA_AHCI_IS);
-    if (action & (1 << ch->unit)) {
+    if (action & (1 << ((int*)(device_get_ivars(ctlr->dev)))[ch->unit])) {
 	istatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_IS + offset);
 	issued = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CI + offset);
 	sstatus = ATA_INL(ctlr->r_res2, ATA_AHCI_P_SSTS + offset);
@@ -569,15 +571,16 @@
     struct ata_channel *ch = device_get_softc(device_get_parent(request->dev));
     struct ata_ahci_cmd_tab *ctp;
     struct ata_ahci_cmd_list *clp;
+    int offset = ((int*)(device_get_ivars(ctlr->dev)))[ch->unit] << 7;
     int tag = 0, entries = 0;
     int fis_size;
-
+	
     /* get a piece of the workspace for this request */
     ctp = (struct ata_ahci_cmd_tab *)
 	  (ch->dma->work + ATA_AHCI_CT_OFFSET + (ATA_AHCI_CT_SIZE * tag));
 
-    /* setup the FIS for this request */ /* XXX SOS ATAPI missing still */
-    if (!(fis_size = ata_ahci_setup_fis(&ctp->cfis[0], request))) {
+    /* setup the FIS for this request */
+    if (!(fis_size = ata_ahci_setup_fis(ctp, request))) {
 	device_printf(request->dev, "setting up SATA FIS failed\n");
 	request->result = EIO;
 	return ATA_OP_FINISHED;
@@ -600,7 +603,7 @@
 
     clp->prd_length = entries;
     clp->cmd_flags = (request->flags & ATA_R_WRITE ? (1<<6) : 0) |
-		     (request->flags & ATA_R_ATAPI ? (1<<5) : 0) |
+		     (request->flags & ATA_R_ATAPI ? ((1<<5) | (1<<7)) : 0) |
 		     (fis_size / sizeof(u_int32_t));
     clp->bytecount = 0;
     clp->cmd_table_phys = htole64(ch->dma->work_bus + ATA_AHCI_CT_OFFSET +
@@ -609,8 +612,18 @@
     /* clear eventual ACTIVE bit */
     ATA_IDX_OUTL(ch, ATA_SACTIVE, ATA_IDX_INL(ch, ATA_SACTIVE) & (1 << tag));
 
+    /* set command type bit */
+    if (request->flags & ATA_R_ATAPI)
+	ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
+		 ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset) |
+		 ATA_AHCI_P_CMD_ATAPI);
+    else
+	ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset,
+		 ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset) &
+		 ~ATA_AHCI_P_CMD_ATAPI);
+
     /* issue the command */
-    ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CI + (ch->unit << 7), (1 << tag));
+    ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CI + offset, (1 << tag));
 
     /* start the timeout */
     callout_reset(&request->callout, request->timeout * hz,
@@ -626,13 +639,14 @@
     struct ata_channel *ch = device_get_softc(device_get_parent(request->dev));
     struct ata_ahci_cmd_list *clp;
     u_int32_t tf_data;
+    int offset = ((int*)(device_get_ivars(ctlr->dev)))[ch->unit] << 7;
     int tag = 0;
 
     /* kill the timeout */
     callout_stop(&request->callout);
 
     /* get status */
-    tf_data = ATA_INL(ctlr->r_res2, ATA_AHCI_P_TFD + (ch->unit << 7));
+    tf_data = ATA_INL(ctlr->r_res2, ATA_AHCI_P_TFD + offset);
     request->status = tf_data;
 
     /* if error status get details */
@@ -656,7 +670,8 @@
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
     struct ata_channel *ch = device_get_softc(dev);
     u_int32_t cmd;
-    int timeout, offset = (ch->unit << 7);
+    int offset = ((int*)(device_get_ivars(ctlr->dev)))[ch->unit] << 7;
+    int timeout;
 
     /* kill off all activity on this channel */
     cmd = ATA_INL(ctlr->r_res2, ATA_AHCI_P_CMD + offset);
@@ -691,8 +706,15 @@
     /* spin up device */
     ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_CMD + offset, ATA_AHCI_P_CMD_SUD);
 
+    /* enable interface */
     ata_sata_phy_enable(ch);
 
+    /* no ATAPI yet */
+    if (ch->devices & ATA_ATAPI_MASTER) {
+	device_printf(ch->dev, "AHCI SATA ATAPI devices not supported yet\n");
+	ch->devices = 0;
+    }
+
     /* clear any interrupts pending on this channel */
     ATA_OUTL(ctlr->r_res2, ATA_AHCI_P_IS + offset,
 	     ATA_INL(ctlr->r_res2, ATA_AHCI_P_IS + offset));
@@ -733,43 +755,49 @@
 }
 
 static int
-ata_ahci_setup_fis(u_int8_t *fis, struct ata_request *request)
+ata_ahci_setup_fis(struct ata_ahci_cmd_tab *ctp, struct ata_request *request)
 {
     struct ata_device *atadev = device_get_softc(request->dev);
-    int idx = 0;
 
-    /* XXX SOS add ATAPI commands support later */
-    ata_modify_if_48bit(request);
-
-    fis[idx++] = 0x27;  /* host to device */
-    fis[idx++] = 0x80;  /* command FIS (note PM goes here) */
-    fis[idx++] = request->u.ata.command;
-    fis[idx++] = request->u.ata.feature;
-
-    fis[idx++] = request->u.ata.lba;
-    fis[idx++] = request->u.ata.lba >> 8;
-    fis[idx++] = request->u.ata.lba >> 16;
-    fis[idx] = ATA_D_LBA | atadev->unit;
-    if (atadev->flags & ATA_D_48BIT_ACTIVE)
-	idx++;
-    else
-	fis[idx++] |= (request->u.ata.lba >> 24 & 0x0f);
-
-    fis[idx++] = request->u.ata.lba >> 24;
-    fis[idx++] = request->u.ata.lba >> 32; 
-    fis[idx++] = request->u.ata.lba >> 40; 
-    fis[idx++] = request->u.ata.feature >> 8;
-
-    fis[idx++] = request->u.ata.count;
-    fis[idx++] = request->u.ata.count >> 8;
-    fis[idx++] = 0x00;
-    fis[idx++] = ATA_A_4BIT;
-
-    fis[idx++] = 0x00;
-    fis[idx++] = 0x00;
-    fis[idx++] = 0x00;
-    fis[idx++] = 0x00;
-    return idx;
+    bzero(ctp->cfis, 64);
+    if (request->flags & ATA_R_ATAPI) {
+	ctp->cfis[0] = 0x27;  /* host to device */
+	ctp->cfis[1] = 0x80;  /* command FIS (note PM goes here) */
+	ctp->cfis[2] = ATA_PACKET_CMD;
+	if (request->flags & ATA_R_DMA)
+	    ctp->cfis[3] = ATA_F_DMA;
+	else {
+	    ctp->cfis[5] = request->transfersize;
+	    ctp->cfis[6] = request->transfersize >> 8;
+	}
+	ctp->cfis[7] = ATA_D_LBA | atadev->unit;
+	ctp->cfis[15] = ATA_A_4BIT;
+	bzero(ctp->acmd, 32);
+	bcopy(request->u.atapi.ccb, ctp->acmd, 12);
+	return 20;
+    }
+    else {
+	ata_modify_if_48bit(request);
+	ctp->cfis[0] = 0x27;  /* host to device */
+	ctp->cfis[1] = 0x80;  /* command FIS (note PM goes here) */
+	ctp->cfis[2] = request->u.ata.command;
+	ctp->cfis[3] = request->u.ata.feature;
+	ctp->cfis[4] = request->u.ata.lba;
+	ctp->cfis[5] = request->u.ata.lba >> 8;
+	ctp->cfis[6] = request->u.ata.lba >> 16;
+	ctp->cfis[7] = ATA_D_LBA | atadev->unit;
+	if (!(atadev->flags & ATA_D_48BIT_ACTIVE))
+	    ctp->cfis[7] |= (request->u.ata.lba >> 24 & 0x0f);
+	ctp->cfis[8] = request->u.ata.lba >> 24;
+	ctp->cfis[9] = request->u.ata.lba >> 32; 
+	ctp->cfis[10] = request->u.ata.lba >> 40; 
+	ctp->cfis[11] = request->u.ata.feature >> 8;
+	ctp->cfis[12] = request->u.ata.count;
+	ctp->cfis[13] = request->u.ata.count >> 8;
+	ctp->cfis[15] = ATA_A_4BIT;
+	return 20;
+    }
+    return 0;
 }
 
 
@@ -1740,7 +1768,7 @@
     /* SATA parts can be either compat or AHCI */
     else {
 	/* force all ports active "the legacy way" */
-	pci_write_config(dev, 0x92, pci_read_config(dev, 0x92, 2) | 0x0f,2);
+	pci_write_config(dev, 0x92, pci_read_config(dev, 0x92, 2) | 0x0f, 2);
 
 	ctlr->allocate = ata_intel_allocate;
 	ctlr->reset = ata_intel_reset;
@@ -2886,8 +2914,7 @@
     if (ata_pci_allocate(dev))
 	return ENXIO;
  
-    /* don't use 32 bit PIO transfers; these cause the NetCell to return
-     * garbage */
+    /* the NetCell only supports 16 bit PIO transfers */
     ch->flags |= ATA_USE_16BIT;
 
     return 0;

==== //depot/projects/linuxolator/src/sys/dev/ata/ata-pci.c#3 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-pci.c,v 1.118 2007/02/03 20:12:00 rink Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-pci.c,v 1.119 2007/02/17 16:56:39 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -59,10 +59,14 @@
 int
 ata_legacy(device_t dev)
 {
-    return ((pci_read_config(dev, PCIR_PROGIF, 1)&PCIP_STORAGE_IDE_MASTERDEV) &&
-	    ((pci_read_config(dev, PCIR_PROGIF, 1) &
-	      (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC)) !=
-	     (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC)));
+    return (((pci_read_config(dev, PCIR_PROGIF, 1)&PCIP_STORAGE_IDE_MASTERDEV)&&
+	     ((pci_read_config(dev, PCIR_PROGIF, 1) &
+	       (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC)) !=
+	      (PCIP_STORAGE_IDE_MODEPRIM | PCIP_STORAGE_IDE_MODESEC))) ||
+	    (!pci_read_config(dev, PCIR_BAR(0), 4) &&
+	     !pci_read_config(dev, PCIR_BAR(1), 4) &&
+	     !pci_read_config(dev, PCIR_BAR(2), 4) &&
+	     !pci_read_config(dev, PCIR_BAR(3), 4)));
 }
 
 int
@@ -211,11 +215,7 @@
 
     /* attach all channels on this controller */
     for (unit = 0; unit < ctlr->channels; unit++) {
-	if (unit == 0 && (pci_get_progif(dev) & 0x81) == 0x80) {
-	    device_add_child(dev, "ata", unit);
-	    continue;
-	}
-	if (unit == 1 && (pci_get_progif(dev) & 0x84) == 0x80) {
+	if ((unit == 0 || unit == 1) && ata_legacy(dev)) {
 	    device_add_child(dev, "ata", unit);
 	    continue;
 	}

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


More information about the p4-projects mailing list