Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Aug 2006 09:18:12 GMT
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 103315 for review
Message-ID:  <200608060918.k769ICXa032459@repoman.freebsd.org>

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

Change 103315 by rdivacky@rdivacky_witten on 2006/08/06 09:17:48

	IFC

Affected files ...

.. //depot/projects/soc2006/rdivacky_linuxolator/amd64/amd64/identcpu.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/amd64/amd64/pmap.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/amd64/include/pmap.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/arm/arm/pmap.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/boot/i386/loader/main.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/boot/pc98/loader/main.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/compat/svr4/svr4_sockio.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/compat/svr4/svr4_stream.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/conf/files.powerpc#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/conf/options#7 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/ddb/db_ps.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ata/ata-chipset.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ata/ata-pci.h#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ath/if_ath.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ath/if_athioctl.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/bktr/CHANGELOG.TXT#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/dc/dcphy.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/dc/pnphy.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/dpt/dpt_scsi.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/README#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/if_em.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/if_em.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/if_em_hw.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/if_em_hw.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/em/if_em_osdep.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/fe/if_fe.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_freebsd.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_ioctl.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_library.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_target.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_target.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/isp/isp_tpublic.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ixgb/if_ixgb.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/mxge/if_mxge.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/patm/if_patm_intr.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/pci/pcivar.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/powermac_nvram/powermac_nvram.c#1 branch
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/powermac_nvram/powermac_nvramvar.h#1 branch
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ral/rt2560.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/re/if_re.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/sk/if_sk.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/sym/sym_fw1.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/sym/sym_fw2.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/ubsec/ubsec.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/usb/if_ural.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/wi/if_wavelan_ieee.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/wi/if_wi.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/dev/wi/if_wireg.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/fs/hpfs/hpfs.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/fs/msdosfs/msdosfs_vfsops.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/geom/bde/g_bde_work.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/geom/mirror/g_mirror.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/geom/raid3/g_raid3.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/i386/i386/identcpu.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/i386/i386/pmap.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/i386/i386/tsc.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/ia64/ia64/pmap.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/Makefile#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/init_sysent.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_fork.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_ktrace.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_resource.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_syscalls.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_tc.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/kern_time.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/makesyscalls.sh#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/subr_bus.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/subr_rman.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/syscalls.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/systrace_args.c#1 branch
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/uipc_sockbuf.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/uipc_socket.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/uipc_socket2.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/uipc_syscalls.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/uipc_usrreq.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/vfs_lookup.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/kern/vfs_syscalls.c#6 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/modules/Makefile#7 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/modules/powermac_nvram/Makefile#1 branch
.. //depot/projects/soc2006/rdivacky_linuxolator/net/bridgestp.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/bridgestp.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_bridge.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_bridgevar.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_faith.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_gif.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_gre.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_stf.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_var.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/if_vlan.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/net/net_osdep.h#2 delete
.. //depot/projects/soc2006/rdivacky_linuxolator/netatalk/ddp_pcb.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netatalk/ddp_usrreq.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netgraph/ng_ether.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet/in_gif.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet/ip_encap.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet/ip_fw2.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet/tcp_subr.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ah_aesxcbcmac.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ah_core.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ah_input.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ah_output.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/esp_aesctr.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/esp_core.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/esp_input.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/esp_output.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/esp_rijndael.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/frag6.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/icmp6.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6_cksum.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6_gif.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6_ifattach.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6_proto.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/in6_src.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ip6_forward.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ip6_input.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ip6_mroute.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ip6_output.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ipcomp_core.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ipcomp_input.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ipcomp_output.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/ipsec.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/mld6.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/nd6.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/nd6_nbr.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/nd6_rtr.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netinet6/udp6_output.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netkey/key.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netkey/keydb.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netncp/ncp_sock.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/netsmb/smb_trantcp.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/nfsserver/nfs.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/nfsserver/nfs_srvcache.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/nfsserver/nfs_srvsubs.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/nfsserver/nfs_syscalls.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/pci/if_rlreg.h#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/pci/ncr.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/conf/GENERIC#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/powerpc/intr_machdep.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/powerpc/machdep.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/powerpc/mmu_if.m#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/powerpc/mmu_oea.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/powerpc/powerpc/pmap_dispatch.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sparc64/sparc64/pmap.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/kernel.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/param.h#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/socketvar.h#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/stat.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/syscall.h#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/syscall.mk#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/sysent.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/sysproto.h#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/systm.h#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/time.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/sys/types.h#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/ufs/ufs/ufs_lookup.c#3 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/pmap.h#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/swap_pager.c#2 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/vm_fault.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/vm_object.c#4 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/vm_page.c#5 integrate
.. //depot/projects/soc2006/rdivacky_linuxolator/vm/vm_pageout.c#2 integrate

Differences ...

==== //depot/projects/soc2006/rdivacky_linuxolator/amd64/amd64/identcpu.c#3 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.147 2006/07/12 06:04:11 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.148 2006/08/01 01:23:39 obrien Exp $");
 
 #include "opt_cpu.h"
 
@@ -296,8 +296,8 @@
 				"\034RDTSCP"	/* RDTSCP */
 				"\035<b28>"	/* Undefined */
 				"\036LM"	/* 64 bit long mode */
-				"\0373DNow+"	/* AMD 3DNow! Extensions */
-				"\0403DNow"	/* AMD 3DNow! */
+				"\0373DNow!+"	/* AMD 3DNow! Extensions */
+				"\0403DNow!"	/* AMD 3DNow! */
 				);
 			}
 

==== //depot/projects/soc2006/rdivacky_linuxolator/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.567 2006/07/20 17:48:40 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.569 2006/08/06 06:29:16 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -2506,7 +2506,6 @@
 retry:
 		p = vm_page_lookup(object, pindex);
 		if (p != NULL) {
-			vm_page_lock_queues();
 			if (vm_page_sleep_if_busy(p, FALSE, "init4p"))
 				goto retry;
 		} else {
@@ -2525,8 +2524,8 @@
 			p = vm_page_lookup(object, pindex);
 			vm_page_lock_queues();
 			vm_page_wakeup(p);
+			vm_page_unlock_queues();
 		}
-		vm_page_unlock_queues();
 
 		ptepa = VM_PAGE_TO_PHYS(p);
 		if (ptepa & (NBPDR - 1))
@@ -2972,7 +2971,7 @@
  * Clear the write and modified bits in each of the given page's mappings.
  */
 void
-pmap_clear_write(vm_page_t m)
+pmap_remove_write(vm_page_t m)
 {
 	pv_entry_t pv;
 	pmap_t pmap;
@@ -3002,23 +3001,6 @@
 }
 
 /*
- *      pmap_page_protect:
- *
- *      Lower the permission for all mappings to a given page.
- */
-void
-pmap_page_protect(vm_page_t m, vm_prot_t prot)
-{
-	if ((prot & VM_PROT_WRITE) == 0) {
-		if (prot & (VM_PROT_READ | VM_PROT_EXECUTE)) {
-			pmap_clear_write(m);
-		} else {
-			pmap_remove_all(m);
-		}
-	}
-}
-
-/*
  *	pmap_ts_referenced:
  *
  *	Return a count of reference bits for a page, clearing those bits.

==== //depot/projects/soc2006/rdivacky_linuxolator/amd64/include/pmap.h#2 (text+ko) ====

@@ -39,7 +39,7 @@
  *
  *	from: hp300: @(#)pmap.h	7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.132 2006/05/01 22:07:00 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/pmap.h,v 1.133 2006/08/02 16:24:23 alc Exp $
  */
 
 #ifndef _MACHINE_PMAP_H_
@@ -81,6 +81,8 @@
 #define PGEX_P		0x01	/* Protection violation vs. not present */
 #define PGEX_W		0x02	/* during a Write cycle */
 #define PGEX_U		0x04	/* access from User mode (UPL) */
+#define PGEX_RSV	0x08	/* reserved PTE field is non-zero */
+#define PGEX_I		0x10	/* during an instruction fetch */
 
 /*
  * Pte related macros.  This is complicated by having to deal with

==== //depot/projects/soc2006/rdivacky_linuxolator/arm/arm/pmap.c#5 (text+ko) ====

@@ -147,7 +147,7 @@
 #include "opt_vm.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.66 2006/07/20 23:26:22 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.67 2006/08/01 19:06:04 alc Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -2759,32 +2759,6 @@
 
 
 /*
- *      pmap_page_protect:
- *
- *      Lower the permission for all mappings to a given page.
- */
-void
-pmap_page_protect(vm_page_t m, vm_prot_t prot)
-{
-	switch(prot) {
-	case VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE:
-	case VM_PROT_READ|VM_PROT_WRITE:
-		return;
-
-	case VM_PROT_READ:
-	case VM_PROT_READ|VM_PROT_EXECUTE:
-		pmap_clearbit(m, PVF_WRITE);
-		break;
-
-	default:
-		pmap_remove_all(m);
-		break;
-	}
-
-}
-
-
-/*
  * Remove all pages from specified address space
  * this aids process exit speeds.  Also, this code
  * is special cased for current process only, but
@@ -4464,7 +4438,7 @@
  * Clear the write and modified bits in each of the given page's mappings.
  */
 void
-pmap_clear_write(vm_page_t m)
+pmap_remove_write(vm_page_t m)
 {
 
 	if (m->md.pvh_attrs & PVF_WRITE)

==== //depot/projects/soc2006/rdivacky_linuxolator/boot/i386/loader/main.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.36 2005/12/21 02:17:58 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/loader/main.c,v 1.37 2006/08/04 07:56:32 yar Exp $");
 
 /*
  * MD bootstrap main() and assorted miscellaneous
@@ -226,7 +226,7 @@
 
 	/*
 	 * If we are booted by an old bootstrap, we have to guess at the BIOS
-	 * unit number.  We will loose if there is more than one disk type
+	 * unit number.  We will lose if there is more than one disk type
 	 * and we are not booting from the lowest-numbered disk type 
 	 * (ie. SCSI when IDE also exists).
 	 */

==== //depot/projects/soc2006/rdivacky_linuxolator/boot/pc98/loader/main.c#2 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/pc98/loader/main.c,v 1.22 2005/12/21 06:10:42 nyan Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/pc98/loader/main.c,v 1.23 2006/08/04 07:56:32 yar Exp $");
 
 /*
  * MD bootstrap main() and assorted miscellaneous
@@ -218,7 +218,7 @@
 
 	/*
 	 * If we are booted by an old bootstrap, we have to guess at the BIOS
-	 * unit number.  We will loose if there is more than one disk type
+	 * unit number.  We will lose if there is more than one disk type
 	 * and we are not booting from the lowest-numbered disk type 
 	 * (ie. SCSI when IDE also exists).
 	 */

==== //depot/projects/soc2006/rdivacky_linuxolator/compat/svr4/svr4_sockio.c#2 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_sockio.c,v 1.17 2005/08/09 10:19:41 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_sockio.c,v 1.18 2006/08/04 21:15:09 brooks Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -104,7 +104,7 @@
 			 */
 			IFNET_RLOCK();
 			TAILQ_FOREACH(ifp, &ifnet, if_link)
-				if (TAILQ_FIRST(&ifp->if_addrhead) == NULL)
+				if (TAILQ_EMPTY(&ifp->if_addrhead))
 					ifnum++;
 				else
 					TAILQ_FOREACH(ifa, &ifp->if_addrhead,

==== //depot/projects/soc2006/rdivacky_linuxolator/compat/svr4/svr4_stream.c#5 (text+ko) ====

@@ -36,11 +36,10 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stream.c,v 1.61 2006/07/28 16:56:17 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_stream.c,v 1.62 2006/08/05 22:04:21 rwatson Exp $");
 
 #include "opt_compat.h"
 #include "opt_ktrace.h"
-#include "opt_mac.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -50,7 +49,6 @@
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/file.h> 		/* Must come after sys/malloc.h */
-#include <sys/mac.h>
 #include <sys/mbuf.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>

==== //depot/projects/soc2006/rdivacky_linuxolator/conf/files.powerpc#4 (text+ko) ====

@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: src/sys/conf/files.powerpc,v 1.56 2006/07/26 19:44:42 marcel Exp $
+# $FreeBSD: src/sys/conf/files.powerpc,v 1.57 2006/08/01 22:19:01 sobomax Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -128,3 +128,5 @@
 powerpc/psim/uart_iobus.c	optional uart psim
 
 dev/scc/scc_bfe_macio.c		optional	scc powermac
+
+dev/powermac_nvram/powermac_nvram.c optional	powermac powermac_nvram

==== //depot/projects/soc2006/rdivacky_linuxolator/conf/options#7 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.555 2006/07/29 18:38:53 marcel Exp $
+# $FreeBSD: src/sys/conf/options,v 1.556 2006/08/03 05:19:33 jb Exp $
 #
 #        On the handling of kernel options
 #
@@ -93,6 +93,7 @@
 GEOM_UZIP	opt_geom.h
 GEOM_VOL	opt_geom.h
 GEOM_ZERO	opt_geom.h
+KSE		opt_global.h
 KSTACK_MAX_PAGES
 KSTACK_PAGES
 KTRACE
@@ -598,6 +599,7 @@
 PCFCLOCK_VERBOSE	opt_pcfclock.h
 PCFCLOCK_MAX_RETRIES	opt_pcfclock.h
 
+KDTRACE			opt_kdtrace.h
 KTR			opt_global.h
 KTR_ALQ			opt_ktr.h
 KTR_MASK		opt_ktr.h

==== //depot/projects/soc2006/rdivacky_linuxolator/ddb/db_ps.c#3 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ddb/db_ps.c,v 1.61 2006/07/12 21:22:43 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/ddb/db_ps.c,v 1.63 2006/08/01 22:30:55 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/cons.h>
@@ -57,10 +57,10 @@
  *
  *          1         2         3         4         5         6         7
  * 1234567890123456789012345678901234567890123456789012345678901234567890
- *  pid   uid  ppid  pgrp  state   wmesg      wchan    cmd
- * <pid> <ui> <ppi> <pgi> <stat> < wmesg > <  wchan  > <name>
- * <pid> <ui> <ppi> <pgi> <stat>  (threaded)           <command>
- *  <tid    >             <stat> < wmesg > <  wchan  > <name>
+ *   pid  ppid  pgrp   uid   state   wmesg     wchan    cmd
+ * <pid> <ppi> <pgi> <uid>  <stat> < wmesg > < wchan  > <name>
+ * <pid> <ppi> <pgi> <uid>  <stat>  (threaded)          <command>
+ * <tid >                   <stat> < wmesg > < wchan  > <name>
  *
  * For machines with 64-bit pointers, we expand the wchan field 8 more
  * characters.
@@ -83,9 +83,9 @@
 		p = &proc0;
 
 #ifdef __LP64__
-	db_printf(" pid   uid  ppid  pgrp  state   wmesg          wchan        cmd\n");
+	db_printf("  pid  ppid  pgrp   uid   state   wmesg         wchan        cmd\n");
 #else
-	db_printf(" pid   uid  ppid  pgrp  state   wmesg      wchan    cmd\n");
+	db_printf("  pid  ppid  pgrp   uid   state   wmesg     wchan    cmd\n");
 #endif
 	while (--np >= 0 && !db_pager_quit) {
 		if (p == NULL) {
@@ -98,9 +98,9 @@
 
 		cred = p->p_ucred;
 		pgrp = p->p_pgrp;
-		db_printf("%5d %4d %5d %5d ", p->p_pid,
-		    cred != NULL ? cred->cr_ruid : 0, pp->p_pid,
-		    pgrp != NULL ? pgrp->pg_id : 0);
+		db_printf("%5d %5d %5d %5d ", p->p_pid, pp->p_pid,
+		    pgrp != NULL ? pgrp->pg_id : 0,
+		    cred != NULL ? cred->cr_ruid : 0);
 
 		/* Determine our primary process state. */
 		switch (p->p_state) {
@@ -207,7 +207,7 @@
 	void *wchan;
 	
 	if (all) {
-		db_printf(" %9d             ", td->td_tid);
+		db_printf("%6d                  ", td->td_tid);
 		switch (td->td_state) {
 		case TDS_RUNNING:
 			snprintf(state, sizeof(state), "Run");

==== //depot/projects/soc2006/rdivacky_linuxolator/dev/ata/ata-chipset.c#5 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.166 2006/07/24 10:44:50 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.167 2006/08/05 11:41:46 sos Exp $");
 
 #include "opt_ata.h"
 #include <sys/param.h>
@@ -2772,17 +2772,17 @@
      { ATA_NFORCE3_PRO_S1,  0, 0,         0,       ATA_SA150, "nForce3 Pro" },
      { ATA_NFORCE3_PRO_S2,  0, 0,         0,       ATA_SA150, "nForce3 Pro" },
      { ATA_NFORCE_MCP04,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP" },
-     { ATA_NFORCE_MCP04_S1, 0, 0,         NV4BYTE, ATA_SA150, "nForce MCP" },
-     { ATA_NFORCE_MCP04_S2, 0, 0,         NV4BYTE, ATA_SA150, "nForce MCP" },
+     { ATA_NFORCE_MCP04_S1, 0, 0,         NV4,     ATA_SA150, "nForce MCP" },
+     { ATA_NFORCE_MCP04_S2, 0, 0,         NV4,     ATA_SA150, "nForce MCP" },
      { ATA_NFORCE_CK804,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce CK804" },
-     { ATA_NFORCE_CK804_S1, 0, 0,         NV4BYTE, ATA_SA300, "nForce CK804" },
-     { ATA_NFORCE_CK804_S2, 0, 0,         NV4BYTE, ATA_SA300, "nForce CK804" },
+     { ATA_NFORCE_CK804_S1, 0, 0,         NV4,     ATA_SA300, "nForce CK804" },
+     { ATA_NFORCE_CK804_S2, 0, 0,         NV4,     ATA_SA300, "nForce CK804" },
      { ATA_NFORCE_MCP51,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP51" },
-     { ATA_NFORCE_MCP51_S1, 0, 0,         NV4WORD, ATA_SA300, "nForce MCP51" },
-     { ATA_NFORCE_MCP51_S2, 0, 0,         NV4WORD, ATA_SA300, "nForce MCP51" },
+     { ATA_NFORCE_MCP51_S1, 0, 0,         NV4LONG, ATA_SA300, "nForce MCP51" },
+     { ATA_NFORCE_MCP51_S2, 0, 0,         NV4LONG, ATA_SA300, "nForce MCP51" },
      { ATA_NFORCE_MCP55,    0, AMDNVIDIA, NVIDIA,  ATA_UDMA6, "nForce MCP55" },
-     { ATA_NFORCE_MCP55_S1, 0, 0,         NV4WORD, ATA_SA300, "nForce MCP55" },
-     { ATA_NFORCE_MCP55_S2, 0, 0,         NV4WORD, ATA_SA300, "nForce MCP55" },
+     { ATA_NFORCE_MCP55_S1, 0, 0,         NV4LONG, ATA_SA300, "nForce MCP55" },
+     { ATA_NFORCE_MCP55_S2, 0, 0,         NV4LONG, ATA_SA300, "nForce MCP55" },
      { 0, 0, 0, 0, 0, 0}} ;
     char buffer[64] ;
 
@@ -2821,19 +2821,19 @@
 	    /* enable control access */
 	    pci_write_config(dev, 0x50, pci_read_config(dev, 0x50, 1) | 0x04,1);
 
-	    if (ctlr->chip->cfg2 == NV4BYTE) {
+	    if (ctlr->chip->cfg2 & NV4LONG) {
 		/* clear interrupt status */
-		ATA_OUTB(ctlr->r_res2, offset, 0xff);
+		ATA_OUTL(ctlr->r_res2, offset, 0x00ff00ff);
 
 		/* enable device and PHY state change interrupts */
-		ATA_OUTB(ctlr->r_res2, offset + 1, 0xdd);
+		ATA_OUTL(ctlr->r_res2, offset + 4, 0x00dd00dd);
 	    } 
 	    else {
 		/* clear interrupt status */
-		ATA_OUTL(ctlr->r_res2, offset, 0x00ff00ff);
+		ATA_OUTB(ctlr->r_res2, offset, 0xff);
 
 		/* enable device and PHY state change interrupts */
-		ATA_OUTL(ctlr->r_res2, offset + 4, 0x00dd00dd);
+		ATA_OUTB(ctlr->r_res2, offset + 1, 0xdd);
 	    }
 
 	    /* enable PCI interrupt */
@@ -2881,18 +2881,18 @@
     struct ata_channel *ch = device_get_softc(dev);
     int offset = ctlr->chip->cfg2 & NV4 ? 0x0440 : 0x0010;
     struct ata_connect_task *tp;
-    int shift = ch->unit << (ctlr->chip->cfg2 == NV4BYTE ? 2 : 4);
+    int shift = ch->unit << (ctlr->chip->cfg2 & NV4LONG ? 4 : 2);
     u_int32_t status;
 
     /* get and clear interrupt status */
-    if (ctlr->chip->cfg2 == NV4BYTE) {
+    if (ctlr->chip->cfg2 & NV4LONG) {
+	status = ATA_INL(ctlr->r_res2, offset);
+	ATA_OUTL(ctlr->r_res2, offset, (0x0f << shift));
+    }
+    else {
 	status = ATA_INB(ctlr->r_res2, offset);
 	ATA_OUTB(ctlr->r_res2, offset, (0x0f << shift));
     }
-    else {
-	status = ATA_INL(ctlr->r_res2, offset);
-	ATA_OUTL(ctlr->r_res2, offset, (0x0f << shift));
-    }
 
     /* check for and handle connect events */
     if (((status & (0x0c << shift)) == (0x04 << shift)) &&

==== //depot/projects/soc2006/rdivacky_linuxolator/dev/ata/ata-pci.h#4 (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-pci.h,v 1.66 2006/07/24 10:44:50 sos Exp $
+ * $FreeBSD: src/sys/dev/ata/ata-pci.h,v 1.67 2006/08/05 11:41:46 sos Exp $
  */
 
 /* structure holding chipset config info */
@@ -392,8 +392,7 @@
 #define AMDBUG          0x0002
 #define NVIDIA          0x0004
 #define NV4             0x0010
-#define NV4BYTE         0x0030 
-#define NV4WORD         0x0050
+#define NV4LONG         0x0030
 #define VIACLK          0x0100
 #define VIABUG          0x0200
 #define VIABAR          0x0400

==== //depot/projects/soc2006/rdivacky_linuxolator/dev/ath/if_ath.c#5 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.150 2006/07/26 03:48:41 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.151 2006/08/05 05:07:17 sam Exp $");
 
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -180,6 +180,8 @@
 static void	ath_setcurmode(struct ath_softc *, enum ieee80211_phymode);
 
 static void	ath_sysctlattach(struct ath_softc *);
+static int	ath_raw_xmit(struct ieee80211_node *,
+			struct mbuf *, const struct ieee80211_bpf_params *);
 static void	ath_bpfattach(struct ath_softc *);
 static void	ath_announce(struct ath_softc *);
 
@@ -607,6 +609,7 @@
 	ic->ic_crypto.cs_key_set = ath_key_set;
 	ic->ic_crypto.cs_key_update_begin = ath_key_update_begin;
 	ic->ic_crypto.cs_key_update_end = ath_key_update_end;
+	ic->ic_raw_xmit = ath_raw_xmit;
 	/* complete initialization */
 	ieee80211_media_init(ic, ath_media_change, ieee80211_media_status);
 
@@ -3353,6 +3356,126 @@
 }
 
 static int
+ath_tx_dmasetup(struct ath_softc *sc, struct ath_buf *bf, struct mbuf *m0)
+{
+	struct mbuf *m;
+	int error;
+
+	/*
+	 * Load the DMA map so any coalescing is done.  This
+	 * also calculates the number of descriptors we need.
+	 */
+	error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0,
+				     bf->bf_segs, &bf->bf_nseg,
+				     BUS_DMA_NOWAIT);
+	if (error == EFBIG) {
+		/* XXX packet requires too many descriptors */
+		bf->bf_nseg = ATH_TXDESC+1;
+	} else if (error != 0) {
+		sc->sc_stats.ast_tx_busdma++;
+		m_freem(m0);
+		return error;
+	}
+	/*
+	 * Discard null packets and check for packets that
+	 * require too many TX descriptors.  We try to convert
+	 * the latter to a cluster.
+	 */
+	if (bf->bf_nseg > ATH_TXDESC) {		/* too many desc's, linearize */
+		sc->sc_stats.ast_tx_linear++;
+		m = ath_defrag(m0, M_DONTWAIT, ATH_TXDESC);
+		if (m == NULL) {
+			m_freem(m0);
+			sc->sc_stats.ast_tx_nombuf++;
+			return ENOMEM;
+		}
+		m0 = m;
+		error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0,
+					     bf->bf_segs, &bf->bf_nseg,
+					     BUS_DMA_NOWAIT);
+		if (error != 0) {
+			sc->sc_stats.ast_tx_busdma++;
+			m_freem(m0);
+			return error;
+		}
+		KASSERT(bf->bf_nseg <= ATH_TXDESC,
+		    ("too many segments after defrag; nseg %u", bf->bf_nseg));
+	} else if (bf->bf_nseg == 0) {		/* null packet, discard */
+		sc->sc_stats.ast_tx_nodata++;
+		m_freem(m0);
+		return EIO;
+	}
+	DPRINTF(sc, ATH_DEBUG_XMIT, "%s: m %p len %u\n",
+		__func__, m0, m0->m_pkthdr.len);
+	bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
+	bf->bf_m = m0;
+
+	return 0;
+}
+
+static void
+ath_tx_handoff(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf)
+{
+	struct ath_hal *ah = sc->sc_ah;
+	struct ath_desc *ds, *ds0;
+	int i;
+
+	/*
+	 * Fillin the remainder of the descriptor info.
+	 */
+	ds0 = ds = bf->bf_desc;
+	for (i = 0; i < bf->bf_nseg; i++, ds++) {
+		ds->ds_data = bf->bf_segs[i].ds_addr;
+		if (i == bf->bf_nseg - 1)
+			ds->ds_link = 0;
+		else
+			ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1);
+		ath_hal_filltxdesc(ah, ds
+			, bf->bf_segs[i].ds_len	/* segment length */
+			, i == 0		/* first segment */
+			, i == bf->bf_nseg - 1	/* last segment */
+			, ds0			/* first descriptor */
+		);
+		DPRINTF(sc, ATH_DEBUG_XMIT,
+			"%s: %d: %08x %08x %08x %08x %08x %08x\n",
+			__func__, i, ds->ds_link, ds->ds_data,
+			ds->ds_ctl0, ds->ds_ctl1, ds->ds_hw[0], ds->ds_hw[1]);
+	}
+	/*
+	 * Insert the frame on the outbound list and pass it on
+	 * to the hardware.  Multicast frames buffered for power
+	 * save stations and transmit from the CAB queue are stored
+	 * on a s/w only queue and loaded on to the CAB queue in
+	 * the SWBA handler since frames only go out on DTIM and
+	 * to avoid possible races.
+	 */
+	ATH_TXQ_LOCK(txq);
+	ATH_TXQ_INSERT_TAIL(txq, bf, bf_list);
+	if (txq != &sc->sc_mcastq) {
+		if (txq->axq_link == NULL) {
+			ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
+			DPRINTF(sc, ATH_DEBUG_XMIT,
+			    "%s: TXDP[%u] = %p (%p) depth %d\n", __func__,
+			    txq->axq_qnum, (caddr_t)bf->bf_daddr, bf->bf_desc,
+			    txq->axq_depth);
+		} else {
+			*txq->axq_link = bf->bf_daddr;
+			DPRINTF(sc, ATH_DEBUG_XMIT,
+			    "%s: link[%u](%p)=%p (%p) depth %d\n", __func__,
+			    txq->axq_qnum, txq->axq_link,
+			    (caddr_t)bf->bf_daddr, bf->bf_desc, txq->axq_depth);
+		}
+		txq->axq_link = &bf->bf_desc[bf->bf_nseg - 1].ds_link;
+		ath_hal_txstart(ah, txq->axq_qnum);
+	} else {
+		if (txq->axq_link != NULL)
+			*txq->axq_link = bf->bf_daddr;
+		txq->axq_link = &bf->bf_desc[bf->bf_nseg - 1].ds_link;
+	}
+	ATH_TXQ_UNLOCK(txq);
+}
+
+static int
 ath_tx_start(struct ath_softc *sc, struct ieee80211_node *ni, struct ath_buf *bf,
     struct mbuf *m0)
 {
@@ -3360,11 +3483,11 @@
 	struct ath_hal *ah = sc->sc_ah;
 	struct ifnet *ifp = sc->sc_ifp;
 	const struct chanAccParams *cap = &ic->ic_wme.wme_chanParams;
-	int i, error, iswep, ismcast, ismrr;
+	int error, iswep, ismcast, ismrr;
 	int keyix, hdrlen, pktlen, try0;
 	u_int8_t rix, txrate, ctsrate;
 	u_int8_t cix = 0xff;		/* NB: silence compiler */
-	struct ath_desc *ds, *ds0;
+	struct ath_desc *ds;
 	struct ath_txq *txq;
 	struct ieee80211_frame *wh;
 	u_int subtype, flags, ctsduration;
@@ -3372,7 +3495,6 @@
 	const HAL_RATE_TABLE *rt;
 	HAL_BOOL shortPreamble;
 	struct ath_node *an;
-	struct mbuf *m;
 	u_int pri;
 
 	wh = mtod(m0, struct ieee80211_frame *);
@@ -3438,50 +3560,10 @@
 	 * Load the DMA map so any coalescing is done.  This
 	 * also calculates the number of descriptors we need.
 	 */
-	error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0,
-				     bf->bf_segs, &bf->bf_nseg,
-				     BUS_DMA_NOWAIT);
-	if (error == EFBIG) {
-		/* XXX packet requires too many descriptors */
-		bf->bf_nseg = ATH_TXDESC+1;
-	} else if (error != 0) {
-		sc->sc_stats.ast_tx_busdma++;
-		m_freem(m0);
-		return error;
-	}
-	/*
-	 * Discard null packets and check for packets that
-	 * require too many TX descriptors.  We try to convert
-	 * the latter to a cluster.
-	 */
-	if (bf->bf_nseg > ATH_TXDESC) {		/* too many desc's, linearize */
-		sc->sc_stats.ast_tx_linear++;
-		m = ath_defrag(m0, M_DONTWAIT, ATH_TXDESC);
-		if (m == NULL) {
-			m_freem(m0);
-			sc->sc_stats.ast_tx_nombuf++;
-			return ENOMEM;
-		}
-		m0 = m;
-		error = bus_dmamap_load_mbuf_sg(sc->sc_dmat, bf->bf_dmamap, m0,
-					     bf->bf_segs, &bf->bf_nseg,
-					     BUS_DMA_NOWAIT);
-		if (error != 0) {
-			sc->sc_stats.ast_tx_busdma++;
-			m_freem(m0);
-			return error;
-		}
-		KASSERT(bf->bf_nseg <= ATH_TXDESC,
-		    ("too many segments after defrag; nseg %u", bf->bf_nseg));
-	} else if (bf->bf_nseg == 0) {		/* null packet, discard */
-		sc->sc_stats.ast_tx_nodata++;
-		m_freem(m0);
-		return EIO;
-	}
-	DPRINTF(sc, ATH_DEBUG_XMIT, "%s: m %p len %u\n", __func__, m0, pktlen);
-	bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
-	bf->bf_m = m0;
+	error = ath_tx_dmasetup(sc, bf, m0);
 	bf->bf_node = ni;			/* NB: held reference */
+	m0 = bf->bf_m;				/* NB: may have changed */
+	wh = mtod(m0, struct ieee80211_frame *);
 
 	/* setup descriptors */
 	ds = bf->bf_desc;
@@ -3763,60 +3845,7 @@
 	if (ismrr)
 		ath_rate_setupxtxdesc(sc, an, ds, shortPreamble, rix);
 
-	/*
-	 * Fillin the remainder of the descriptor info.
-	 */
-	ds0 = ds;
-	for (i = 0; i < bf->bf_nseg; i++, ds++) {
-		ds->ds_data = bf->bf_segs[i].ds_addr;
-		if (i == bf->bf_nseg - 1)
-			ds->ds_link = 0;
-		else
-			ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1);
-		ath_hal_filltxdesc(ah, ds
-			, bf->bf_segs[i].ds_len	/* segment length */
-			, i == 0		/* first segment */
-			, i == bf->bf_nseg - 1	/* last segment */
-			, ds0			/* first descriptor */
-		);
-		DPRINTF(sc, ATH_DEBUG_XMIT,
-			"%s: %d: %08x %08x %08x %08x %08x %08x\n",
-			__func__, i, ds->ds_link, ds->ds_data,
-			ds->ds_ctl0, ds->ds_ctl1, ds->ds_hw[0], ds->ds_hw[1]);
-	}
-	/*
-	 * Insert the frame on the outbound list and pass it on
-	 * to the hardware.  Multicast frames buffered for power
-	 * save stations and transmit from the CAB queue are stored
-	 * on a s/w only queue and loaded on to the CAB queue in
-	 * the SWBA handler since frames only go out on DTIM and
-	 * to avoid possible races.
-	 */
-	ATH_TXQ_LOCK(txq);
-	ATH_TXQ_INSERT_TAIL(txq, bf, bf_list);
-	if (txq != &sc->sc_mcastq) {
-		if (txq->axq_link == NULL) {
-			ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
-			DPRINTF(sc, ATH_DEBUG_XMIT,
-			    "%s: TXDP[%u] = %p (%p) depth %d\n", __func__,
-			    txq->axq_qnum, (caddr_t)bf->bf_daddr, bf->bf_desc,
-			    txq->axq_depth);
-		} else {
-			*txq->axq_link = bf->bf_daddr;
-			DPRINTF(sc, ATH_DEBUG_XMIT,
-			    "%s: link[%u](%p)=%p (%p) depth %d\n", __func__,
-			    txq->axq_qnum, txq->axq_link,
-			    (caddr_t)bf->bf_daddr, bf->bf_desc, txq->axq_depth);
-		}
-		txq->axq_link = &bf->bf_desc[bf->bf_nseg - 1].ds_link;
-		ath_hal_txstart(ah, txq->axq_qnum);
-	} else {
-		if (txq->axq_link != NULL)
-			*txq->axq_link = bf->bf_daddr;
-		txq->axq_link = &bf->bf_desc[bf->bf_nseg - 1].ds_link;
-	}
-	ATH_TXQ_UNLOCK(txq);
-
+	ath_tx_handoff(sc, txq, bf);
 	return 0;
 }
 
@@ -5480,6 +5509,232 @@
 	sc->sc_rx_th.wr_ihdr.it_present = htole32(ATH_RX_RADIOTAP_PRESENT);
 }
 
+static int
+ath_tx_raw_start(struct ath_softc *sc, struct ieee80211_node *ni,
+	struct ath_buf *bf, struct mbuf *m0,
+	const struct ieee80211_bpf_params *params)
+{
+	struct ieee80211com *ic = &sc->sc_ic;
+	struct ath_hal *ah = sc->sc_ah;
+	int error, ismcast, ismrr;
+	int hdrlen, pktlen, try0, txantenna;
+	u_int8_t rix, cix, txrate, ctsrate, rate1, rate2, rate3;
+	struct ath_txq *txq;
+	struct ieee80211_frame *wh;
+	u_int flags, ctsduration;
+	HAL_PKT_TYPE atype;
+	const HAL_RATE_TABLE *rt;
+	struct ath_desc *ds;
+	u_int pri;
+
+	wh = mtod(m0, struct ieee80211_frame *);
+	ismcast = IEEE80211_IS_MULTICAST(wh->i_addr1);
+	hdrlen = ieee80211_anyhdrsize(wh);
+	/*
+	 * Packet length must not include any
+	 * pad bytes; deduct them here.
+	 */
+	/* XXX honor IEEE80211_BPF_DATAPAD */
+	pktlen = m0->m_pkthdr.len - (hdrlen & 3) + IEEE80211_CRC_LEN;
+
+	error = ath_tx_dmasetup(sc, bf, m0);
+	if (error != 0)
+		return error;
+	m0 = bf->bf_m;				/* NB: may have changed */
+	wh = mtod(m0, struct ieee80211_frame *);
+	bf->bf_node = ni;			/* NB: held reference */
+
+	flags = HAL_TXDESC_CLRDMASK;		/* XXX needed for crypto errs */
+	flags |= HAL_TXDESC_INTREQ;		/* force interrupt */
+	if (params->ibp_flags & IEEE80211_BPF_RTS)
+		flags |= HAL_TXDESC_RTSENA;
+	else if (params->ibp_flags & IEEE80211_BPF_CTS)
+		flags |= HAL_TXDESC_CTSENA;
+	/* XXX leave ismcast to injector? */
+	if ((params->ibp_flags & IEEE80211_BPF_NOACK) || ismcast)
+		flags |= HAL_TXDESC_NOACK;
+
+	rt = sc->sc_currates;
+	KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
+	rix = ath_tx_findrix(rt, params->ibp_rate0);
+	txrate = rt->info[rix].rateCode;
+	if (params->ibp_flags & IEEE80211_BPF_SHORTPRE)
+		txrate |= rt->info[rix].shortPreamble;
+	try0 = params->ibp_try0;
+	ismrr = (params->ibp_try1 != 0);
+	txantenna = params->ibp_pri >> 2;
+	if (txantenna == 0)			/* XXX? */
+		txantenna = sc->sc_txantenna;
+	ctsduration = 0;
+	if (flags & (HAL_TXDESC_CTSENA | HAL_TXDESC_RTSENA)) {
+		cix = ath_tx_findrix(rt, params->ibp_ctsrate);
+		ctsrate = rt->info[cix].rateCode;
+		if (params->ibp_flags & IEEE80211_BPF_SHORTPRE) {
+			ctsrate |= rt->info[cix].shortPreamble;
+			if (flags & HAL_TXDESC_RTSENA)		/* SIFS + CTS */
+				ctsduration += rt->info[cix].spAckDuration;
+			ctsduration += ath_hal_computetxtime(ah,
+				rt, pktlen, rix, AH_TRUE);
+			if ((flags & HAL_TXDESC_NOACK) == 0)	/* SIFS + ACK */
+				ctsduration += rt->info[rix].spAckDuration;
+		} else {

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



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