From owner-p4-projects@FreeBSD.ORG Sun Aug 6 09:18:16 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0426916A4E1; Sun, 6 Aug 2006 09:18:16 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B9BF216A4DA for ; Sun, 6 Aug 2006 09:18:15 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 535A943D45 for ; Sun, 6 Aug 2006 09:18:15 +0000 (GMT) (envelope-from rdivacky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k769IFAx032462 for ; Sun, 6 Aug 2006 09:18:15 GMT (envelope-from rdivacky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k769ICXa032459 for perforce@freebsd.org; Sun, 6 Aug 2006 09:18:12 GMT (envelope-from rdivacky@FreeBSD.org) Date: Sun, 6 Aug 2006 09:18:12 GMT Message-Id: <200608060918.k769ICXa032459@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to rdivacky@FreeBSD.org using -f From: Roman Divacky To: Perforce Change Reviews Cc: Subject: PERFORCE change 103315 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Aug 2006 09:18:16 -0000 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 -__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" /* 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 -__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 -__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 #include #include @@ -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 -__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 -__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 -__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 #include @@ -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 -__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 #include @@ -50,7 +49,6 @@ #include #include #include /* Must come after sys/malloc.h */ -#include #include #include #include ==== //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 -__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 #include @@ -57,10 +57,10 @@ * * 1 2 3 4 5 6 7 * 1234567890123456789012345678901234567890123456789012345678901234567890 - * pid uid ppid pgrp state wmesg wchan cmd - * < wmesg > < wchan > - * (threaded) - * < wmesg > < wchan > + * pid ppid pgrp uid state wmesg wchan cmd + * < wmesg > < wchan > + * (threaded) + * < wmesg > < wchan > * * 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 -__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 @@ -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 -__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) <<<