Date: Sat, 25 Jun 2011 12:05:53 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 195297 for review Message-ID: <201106251205.p5PC5rsI054245@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@195297?ac=10 Change 195297 by jhb@jhb_kavik on 2011/06/25 12:05:19 IFC @195296 Affected files ... .. //depot/projects/pci/sys/amd64/include/pci_cfgreg.h#2 integrate .. //depot/projects/pci/sys/amd64/pci/pci_bus.c#9 delete .. //depot/projects/pci/sys/arm/conf/CAMBRIA#4 integrate .. //depot/projects/pci/sys/boot/i386/zfsboot/zfsldr.S#4 integrate .. //depot/projects/pci/sys/cam/ata/ata_xpt.c#4 integrate .. //depot/projects/pci/sys/cam/scsi/scsi_xpt.c#3 integrate .. //depot/projects/pci/sys/conf/files#6 integrate .. //depot/projects/pci/sys/conf/files.amd64#3 integrate .. //depot/projects/pci/sys/conf/files.i386#4 integrate .. //depot/projects/pci/sys/conf/files.ia64#4 integrate .. //depot/projects/pci/sys/conf/files.pc98#3 integrate .. //depot/projects/pci/sys/dev/acpica/acpi.c#7 integrate .. //depot/projects/pci/sys/dev/acpica/acpi_cpu.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ah_osdep.c#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah.h#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_internal.h#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ah_regdomain.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5211/ar5211_beacon.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5112.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212_beacon.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar2133.c#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_beacon.c#2 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9001/ar9130_attach.c#3 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c#4 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c#5 integrate .. //depot/projects/pci/sys/dev/ath/ath_hal/ar9002/ar9287_attach.c#2 integrate .. //depot/projects/pci/sys/dev/ath/if_ath.c#5 integrate .. //depot/projects/pci/sys/dev/ath/if_ath_sysctl.c#5 integrate .. //depot/projects/pci/sys/dev/ath/if_ath_sysctl.h#2 integrate .. //depot/projects/pci/sys/dev/e1000/if_igb.c#6 integrate .. //depot/projects/pci/sys/dev/pci/pci_pci.c#24 integrate .. //depot/projects/pci/sys/dev/pci/pci_subr.c#1 branch .. //depot/projects/pci/sys/dev/sound/usb/uaudio.c#4 integrate .. //depot/projects/pci/sys/dev/usb/input/atp.c#2 integrate .. //depot/projects/pci/sys/dev/usb/input/uep.c#2 integrate .. //depot/projects/pci/sys/dev/usb/input/uhid.c#3 integrate .. //depot/projects/pci/sys/dev/usb/input/ukbd.c#3 integrate .. //depot/projects/pci/sys/dev/usb/input/ums.c#4 integrate .. //depot/projects/pci/sys/dev/usb/misc/udbp.c#2 integrate .. //depot/projects/pci/sys/dev/usb/misc/ufm.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_aue.c#3 integrate .. //depot/projects/pci/sys/dev/usb/net/if_axe.c#3 integrate .. //depot/projects/pci/sys/dev/usb/net/if_cdce.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_cue.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_ipheth.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_kue.c#2 integrate .. //depot/projects/pci/sys/dev/usb/net/if_mos.c#3 integrate .. //depot/projects/pci/sys/dev/usb/net/if_rue.c#3 integrate .. //depot/projects/pci/sys/dev/usb/net/if_udav.c#4 integrate .. //depot/projects/pci/sys/dev/usb/net/uhso.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/u3g.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uark.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/ubsa.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uchcom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/ucycom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/ufoma.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uftdi.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/ugensa.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uipaq.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/ulpt.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/umcs.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/umct.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/umodem.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/umoscom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uplcom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uslcom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uvisor.c#2 integrate .. //depot/projects/pci/sys/dev/usb/serial/uvscom.c#2 integrate .. //depot/projects/pci/sys/dev/usb/storage/umass.c#4 integrate .. //depot/projects/pci/sys/dev/usb/storage/urio.c#2 integrate .. //depot/projects/pci/sys/dev/usb/template/usb_template.c#2 integrate .. //depot/projects/pci/sys/dev/usb/template/usb_template.h#2 integrate .. //depot/projects/pci/sys/dev/usb/template/usb_template_audio.c#1 branch .. //depot/projects/pci/sys/dev/usb/template/usb_template_cdce.c#2 integrate .. //depot/projects/pci/sys/dev/usb/template/usb_template_kbd.c#1 branch .. //depot/projects/pci/sys/dev/usb/template/usb_template_modem.c#1 branch .. //depot/projects/pci/sys/dev/usb/template/usb_template_mouse.c#1 branch .. //depot/projects/pci/sys/dev/usb/template/usb_template_msc.c#2 integrate .. //depot/projects/pci/sys/dev/usb/template/usb_template_mtp.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_device.c#3 integrate .. //depot/projects/pci/sys/dev/usb/usb_hub.c#3 integrate .. //depot/projects/pci/sys/dev/usb/usb_ioctl.h#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_lookup.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usb_msctest.c#2 integrate .. //depot/projects/pci/sys/dev/usb/usbdi.h#4 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_rum.c#3 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_run.c#3 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_uath.c#2 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_upgt.c#2 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_ural.c#2 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_urtw.c#2 integrate .. //depot/projects/pci/sys/dev/usb/wlan/if_zyd.c#3 integrate .. //depot/projects/pci/sys/fs/nfs/nfs_commonkrpc.c#5 integrate .. //depot/projects/pci/sys/i386/include/param.h#2 integrate .. //depot/projects/pci/sys/i386/include/pci_cfgreg.h#2 integrate .. //depot/projects/pci/sys/i386/pci/pci_bus.c#9 delete .. //depot/projects/pci/sys/ia64/ia64/clock.c#2 integrate .. //depot/projects/pci/sys/ia64/ia64/db_machdep.c#3 integrate .. //depot/projects/pci/sys/ia64/ia64/interrupt.c#2 integrate .. //depot/projects/pci/sys/ia64/ia64/machdep.c#5 integrate .. //depot/projects/pci/sys/ia64/ia64/mp_machdep.c#4 integrate .. //depot/projects/pci/sys/ia64/include/pcpu.h#3 integrate .. //depot/projects/pci/sys/ia64/include/smp.h#4 integrate .. //depot/projects/pci/sys/kern/kern_clocksource.c#3 integrate .. //depot/projects/pci/sys/kern/subr_kdb.c#3 integrate .. //depot/projects/pci/sys/kern/subr_smp.c#3 integrate .. //depot/projects/pci/sys/kern/vfs_subr.c#5 integrate .. //depot/projects/pci/sys/modules/cxgbe/if_cxgbe/Makefile#3 integrate .. //depot/projects/pci/sys/modules/nfscl/Makefile#3 integrate .. //depot/projects/pci/sys/modules/nfscommon/Makefile#2 integrate .. //depot/projects/pci/sys/modules/usb/template/Makefile#2 integrate .. //depot/projects/pci/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#3 integrate .. //depot/projects/pci/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#2 integrate .. //depot/projects/pci/sys/netgraph/ng_ether.c#2 integrate .. //depot/projects/pci/sys/netinet/libalias/alias_db.c#3 integrate .. //depot/projects/pci/sys/netinet/libalias/alias_ftp.c#2 integrate .. //depot/projects/pci/sys/netinet/libalias/alias_local.h#2 integrate .. //depot/projects/pci/sys/netinet/libalias/libalias.3#3 integrate .. //depot/projects/pci/sys/powerpc/aim/copyinout.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/locore32.S#3 integrate .. //depot/projects/pci/sys/powerpc/aim/locore64.S#3 integrate .. //depot/projects/pci/sys/powerpc/aim/machdep.c#5 integrate .. //depot/projects/pci/sys/powerpc/aim/mmu_oea64.c#4 integrate .. //depot/projects/pci/sys/powerpc/aim/mp_cpudep.c#3 integrate .. //depot/projects/pci/sys/powerpc/aim/swtch32.S#2 integrate .. //depot/projects/pci/sys/powerpc/aim/swtch64.S#2 integrate .. //depot/projects/pci/sys/powerpc/aim/trap.c#2 integrate .. //depot/projects/pci/sys/powerpc/aim/trap_subr32.S#2 integrate .. //depot/projects/pci/sys/powerpc/aim/trap_subr64.S#3 integrate .. //depot/projects/pci/sys/powerpc/booke/copyinout.c#2 integrate .. //depot/projects/pci/sys/powerpc/booke/interrupt.c#2 integrate .. //depot/projects/pci/sys/powerpc/booke/trap.c#2 integrate .. //depot/projects/pci/sys/powerpc/include/pcpu.h#2 integrate .. //depot/projects/pci/sys/powerpc/ofw/ofwcall32.S#2 integrate .. //depot/projects/pci/sys/powerpc/powerpc/db_trace.c#2 integrate .. //depot/projects/pci/sys/powerpc/powerpc/mp_machdep.c#4 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3-hvcall.h#2 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3-hvcall.master#2 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3bus.c#5 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3disk.c#3 integrate .. //depot/projects/pci/sys/powerpc/ps3/ps3pic.c#2 integrate .. //depot/projects/pci/sys/sys/systm.h#5 integrate .. //depot/projects/pci/sys/vm/vm_fault.c#4 integrate .. //depot/projects/pci/sys/vm/vm_page.c#5 integrate .. //depot/projects/pci/sys/x86/include/pci_cfgreg.h#1 branch .. //depot/projects/pci/sys/x86/pci/pci_bus.c#1 branch .. //depot/projects/pci/sys/x86/x86/tsc.c#7 integrate Differences ... ==== //depot/projects/pci/sys/amd64/include/pci_cfgreg.h#2 (text+ko) ==== @@ -1,43 +1,6 @@ /*- - * Copyright (c) 1997, Stefan Esser <se@freebsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (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/amd64/include/pci_cfgreg.h,v 1.15 2008/08/22 02:14:23 jhb Exp $ - * + * This file is in the public domain. */ +/* $FreeBSD: src/sys/amd64/include/pci_cfgreg.h,v 1.17 2011/06/22 21:04:13 jhb Exp $ */ -#define CONF1_ADDR_PORT 0x0cf8 -#define CONF1_DATA_PORT 0x0cfc - -#define CONF1_ENABLE 0x80000000ul -#define CONF1_ENABLE_CHK 0x80000000ul -#define CONF1_ENABLE_MSK 0x7f000000ul -#define CONF1_ENABLE_CHK1 0xff000001ul -#define CONF1_ENABLE_MSK1 0x80000001ul -#define CONF1_ENABLE_RES1 0x80000000ul - -int pcie_cfgregopen(uint64_t base, uint8_t minbus, uint8_t maxbus); -int pci_cfgregopen(void); -u_int32_t pci_cfgregread(int bus, int slot, int func, int reg, int bytes); -void pci_cfgregwrite(int bus, int slot, int func, int reg, u_int32_t data, int bytes); +#include <x86/pci_cfgreg.h> ==== //depot/projects/pci/sys/arm/conf/CAMBRIA#4 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.22 2011/04/29 14:01:49 jhb Exp $ +# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.23 2011/06/24 23:26:45 cognet Exp $ ident CAMBRIA @@ -130,7 +130,7 @@ #options ATH_TX99_DIAG device ath_rate_sample # SampleRate tx rate control for ath -options AH_DEBUG +#options AH_DEBUG #options AH_ASSERT options AH_PRIVATE_DIAG #device ath_ar5210 ==== //depot/projects/pci/sys/boot/i386/zfsboot/zfsldr.S#4 (text+ko) ==== @@ -12,11 +12,10 @@ * warranties of merchantability and fitness for a particular * purpose. * - * $FreeBSD: src/sys/boot/i386/zfsboot/zfsldr.S,v 1.4 2011/04/28 17:44:24 jhb Exp $ + * $FreeBSD: src/sys/boot/i386/zfsboot/zfsldr.S,v 1.5 2011/06/23 15:53:17 jhb Exp $ */ /* Memory Locations */ - .set MEM_REL,0x700 # Relocation address .set MEM_ARG,0x900 # Arguments .set MEM_ORG,0x7c00 # Origin .set MEM_BUF,0x8000 # Load area @@ -91,26 +90,18 @@ mov %cx,%ss # Set up mov $start,%sp # stack /* - * Relocate ourself to MEM_REL. Since %cx == 0, the inc %ch sets - * %cx == 0x100. - */ - mov %sp,%si # Source - mov $MEM_REL,%di # Destination - incb %ch # Word count - rep # Copy - movsw # code -/* * If we are on a hard drive, then load the MBR and look for the first * FreeBSD slice. We use the fake partition entry below that points to * the MBR when we call nread. The first pass looks for the first active * FreeBSD slice. The second pass looks for the first non-active FreeBSD * slice if the first one fails. */ - mov $part4,%si # Partition + mov $part4,%si # Dummy partition cmpb $0x80,%dl # Hard drive? jb main.4 # No - movb $0x1,%dh # Block count - callw nread # Read MBR + xor %eax,%eax # Read MBR + movl $MEM_BUF,%ebx # from first + callw nread # sector mov $0x1,%cx # Two passes main.1: mov $MEM_BUF+PRT_OFF,%si # Partition table movb $0x1,%dh # Partition @@ -139,52 +130,51 @@ /* * Ok, we have a slice and drive in %dx now, so use that to locate and * load boot2. %si references the start of the slice we are looking - * for, so go ahead and load up the 64 sectors starting at sector 1024 + * for, so go ahead and load up the 128 sectors starting at sector 1024 * (i.e. after the two vdev labels). We don't have do anything fancy * here to allow for an extra copy of boot1 and a partition table * (compare to this section of the UFS bootstrap) so we just load it - * all at 0x8000. The first part of boot2 is BTX, which wants to run + * all at 0x9000. The first part of boot2 is BTX, which wants to run * at 0x9000. The boot2.bin binary starts right after the end of BTX, * so we have to figure out where the start of it is and then move the - * binary to 0xc000. After we have moved the client, we relocate BTX - * itself to 0x9000 - doing it in this order means that none of the - * memcpy regions overlap which would corrupt the copy. Normally, BTX - * clients start at MEM_USR, or 0xa000, but when we use btxld to - * create zfsboot2, we use an entry point of 0x2000. That entry point is - * relative to MEM_USR; thus boot2.bin starts at 0xc000. + * binary to 0xc000. Normally, BTX clients start at MEM_USR, or 0xa000, + * but when we use btxld to create zfsboot2, we use an entry point of + * 0x2000. That entry point is relative to MEM_USR; thus boot2.bin + * starts at 0xc000. * * The load area and the target area for the client overlap so we have * to use a decrementing string move. We also play segment register * games with the destination address for the move so that the client * can be larger than 16k (which would overflow the zero segment since - * the client starts at 0xc000). Relocating BTX is easy since the load - * area and target area do not overlap. + * the client starts at 0xc000). */ main.5: mov %dx,MEM_ARG # Save args - movb $NSECT,%dh # Sector count + mov $NSECT,%cx # Sector count movl $1024,%eax # Offset to boot2 - callw nread.1 # Read disk -main.6: mov $MEM_BUF,%si # BTX (before reloc) - mov 0xa(%si),%bx # Get BTX length and set + mov $MEM_BTX,%ebx # Destination buffer +main.6: pushal # Save params + callw nread # Read disk + popal # Restore + incl %eax # Advance to + add $SIZ_SEC,%ebx # next sector + loop main.6 # If not last, read another + mov MEM_BTX+0xa,%bx # Get BTX length mov $NSECT*SIZ_SEC-1,%di # Size of load area (less one) - mov %di,%si # End of load - add $MEM_BUF,%si # area + mov %di,%si # End of load area, 0x9000 rel sub %bx,%di # End of client, 0xc000 rel mov %di,%cx # Size of inc %cx # client + mov $(MEM_BTX)>>4,%dx # Segment + mov %dx,%ds # addressing 0x9000 mov $(MEM_USR+2*SIZ_PAG)>>4,%dx # Segment mov %dx,%es # addressing 0xc000 std # Move with decrement rep # Relocate movsb # client - mov %ds,%dx # Back to - mov %dx,%es # zero segment - mov $MEM_BUF,%si # BTX (before reloc) - mov $MEM_BTX,%di # BTX - mov %bx,%cx # Get BTX length - cld # Increment this time - rep # Relocate - movsb # BTX + cld # Back to increment + xor %dx,%dx # Back + mov %ds,%dx # to zero + mov %dx,%es # segment /* * Enable A20 so we can access memory above 1 meg. @@ -211,32 +201,35 @@ /* * Trampoline used to call read from within zfsldr. Sets up an EDD - * packet on the stack and passes it to read. + * packet on the stack and passes it to read. We assume that the + * destination address is always segment-aligned. * * %eax - int - LBA to read in relative to partition start + * %ebx - ptr - destination address * %dl - byte - drive to read from - * %dh - byte - num sectors to read * %si - ptr - MBR partition entry */ -nread: xor %eax,%eax # Sector offset in partition -nread.1: xor %ecx,%ecx # Get +nread: xor %ecx,%ecx # Get addl 0x8(%si),%eax # LBA adc $0,%ecx pushl %ecx # Starting absolute block pushl %eax # block number - push %es # Address of - push $MEM_BUF # transfer buffer - xor %ax,%ax # Number of - movb %dh,%al # blocks to - push %ax # transfer + shr $4,%ebx # Convert to segment + push %bx # Address of + push $0 # transfer buffer + push $0x1 # Read 1 sector push $0x10 # Size of packet mov %sp,%bp # Packet pointer callw read # Read from disk + jc nread.1 # If error, fail lea 0x10(%bp),%sp # Clear stack - jnc return # If success, return - mov $msg_read,%si # Otherwise, set the error - # message and fall through to - # the error routine + ret # If success, return +nread.1: mov %ah,%al # Format + mov $read_err,%di # error + call hex8 # code + mov $msg_read,%si # Set the error message and + # fall through to the error + # routine /* * Print out the error message pointed to by %ds:(%si) followed * by a prompt, wait for a keypress, and then reboot the machine. @@ -259,14 +252,6 @@ jne putstr.0 # No /* - * Overused return code. ereturn is used to return an error from the - * read function. Since we assume putstr succeeds, we (ab)use the - * same code when we return from putstr. - */ -ereturn: movb $0x1,%ah # Invalid - stc # argument -return: retw # To caller -/* * Reads sectors from the disk. If EDD is enabled, then check if it is * installed and use it if it is. If it is not installed or not enabled, then * fall back to using CHS. Since we use a LBA, if we are using CHS, we have to @@ -294,14 +279,30 @@ retw # To caller read.1: mov $msg_chs,%si jmp error -msg_chs: .asciz "CHS not supported" + +/* + * AL to hex, saving the result to [EDI]. + */ +hex8: push %ax # Save + shrb $0x4,%al # Do upper + call hex8.1 # 4 + pop %ax # Restore +hex8.1: andb $0xf,%al # Get lower 4 + cmpb $0xa,%al # Convert + sbbb $0x69,%al # to hex + das # digit + orb $0x20,%al # To lower case + stosb # Save char + ret # (Recursive) /* Messages */ -msg_read: .asciz "Read" -msg_part: .asciz "Boot" +msg_chs: .asciz "CHS not supported" +msg_read: .ascii "Read error: " +read_err: .asciz "XX" +msg_part: .asciz "Boot error" -prompt: .asciz " error\r\n" +prompt: .asciz "\r\n" .org PRT_OFF,0x90 ==== //depot/projects/pci/sys/cam/ata/ata_xpt.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.41 2011/06/12 18:52:39 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.43 2011/06/23 15:10:44 mav Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -1601,6 +1601,34 @@ } static void +ata_dev_advinfo(union ccb *start_ccb) +{ + struct cam_ed *device; + struct ccb_dev_advinfo *cdai; + off_t amt; + + start_ccb->ccb_h.status = CAM_REQ_INVALID; + device = start_ccb->ccb_h.path->device; + cdai = &start_ccb->cdai; + switch(cdai->buftype) { + case CDAI_TYPE_SERIAL_NUM: + if (cdai->flags & CDAI_FLAG_STORE) + break; + start_ccb->ccb_h.status = CAM_REQ_CMP; + cdai->provsiz = device->serial_num_len; + if (device->serial_num_len == 0) + break; + amt = device->serial_num_len; + if (cdai->provsiz > cdai->bufsiz) + amt = cdai->bufsiz; + memcpy(cdai->buf, device->serial_num, amt); + break; + default: + break; + } +} + +static void ata_action(union ccb *start_ccb) { @@ -1650,7 +1678,13 @@ xpt_done(start_ccb); break; } - /* FALLTHROUGH */ + xpt_action_default(start_ccb); + break; + } + case XPT_DEV_ADVINFO: + { + ata_dev_advinfo(start_ccb); + break; } default: xpt_action_default(start_ccb); ==== //depot/projects/pci/sys/cam/scsi/scsi_xpt.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_xpt.c,v 1.14 2011/06/14 14:53:17 gibbs Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_xpt.c,v 1.15 2011/06/22 22:55:51 will Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -2440,12 +2440,13 @@ struct ccb_dev_advinfo *cdai; off_t amt; + start_ccb->ccb_h.status = CAM_REQ_INVALID; device = start_ccb->ccb_h.path->device; cdai = &start_ccb->cdai; switch(cdai->buftype) { case CDAI_TYPE_SCSI_DEVID: if (cdai->flags & CDAI_FLAG_STORE) - break; + return; cdai->provsiz = device->device_id_len; if (device->device_id_len == 0) break; @@ -2456,7 +2457,7 @@ break; case CDAI_TYPE_SERIAL_NUM: if (cdai->flags & CDAI_FLAG_STORE) - break; + return; cdai->provsiz = device->serial_num_len; if (device->serial_num_len == 0) break; @@ -2490,7 +2491,7 @@ } break; default: - break; + return; } start_ccb->ccb_h.status = CAM_REQ_CMP; ==== //depot/projects/pci/sys/conf/files#6 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1606 2011/06/10 22:38:31 jeff Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1608 2011/06/24 21:39:38 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -1553,6 +1553,7 @@ dev/pci/pci_domain.c optional pci new_pcib dev/pci/pci_if.m standard dev/pci/pci_pci.c optional pci +dev/pci/pci_subr.c optional pci dev/pci/pci_user.c optional pci dev/pci/pcib_if.m standard dev/pci/vga_pci.c optional pci @@ -1992,8 +1993,12 @@ # # USB templates # -dev/usb/template/usb_template.c optional usb_template +dev/usb/template/usb_template.c optional usb_template +dev/usb/template/usb_template_audio.c optional usb_template dev/usb/template/usb_template_cdce.c optional usb_template +dev/usb/template/usb_template_kbd.c optional usb_template +dev/usb/template/usb_template_modem.c optional usb_template +dev/usb/template/usb_template_mouse.c optional usb_template dev/usb/template/usb_template_msc.c optional usb_template dev/usb/template/usb_template_mtp.c optional usb_template # ==== //depot/projects/pci/sys/conf/files.amd64#3 (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.amd64,v 1.180 2011/04/20 12:58:30 bz Exp $ +# $FreeBSD: src/sys/conf/files.amd64,v 1.181 2011/06/22 21:04:13 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -128,7 +128,6 @@ amd64/amd64/uio_machdep.c standard amd64/amd64/uma_machdep.c standard amd64/amd64/vm_machdep.c standard -amd64/pci/pci_bus.c optional pci amd64/pci/pci_cfgreg.c optional pci crypto/aesni/aesencdec_amd64.S optional aesni crypto/aesni/aeskeys_amd64.S optional aesni @@ -315,7 +314,8 @@ x86/isa/isa_dma.c standard x86/isa/nmi.c standard x86/isa/orm.c optional isa -x86/pci/qpi.c standard +x86/pci/pci_bus.c optional pci +x86/pci/qpi.c optional pci x86/x86/busdma_machdep.c standard x86/x86/dump_machdep.c standard x86/x86/io_apic.c standard ==== //depot/projects/pci/sys/conf/files.i386#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.i386,v 1.665 2011/05/15 14:01:23 brix Exp $ +# $FreeBSD: src/sys/conf/files.i386,v 1.666 2011/06/22 21:04:13 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -352,7 +352,6 @@ dependency "linux_assym.h" i386/linux/linux_sysent.c optional compat_linux i386/linux/linux_sysvec.c optional compat_linux -i386/pci/pci_bus.c optional pci i386/pci/pci_cfgreg.c optional pci i386/pci/pci_pir.c optional pci i386/svr4/svr4_locore.s optional compat_svr4 \ @@ -405,7 +404,8 @@ x86/isa/isa_dma.c optional isa x86/isa/nmi.c standard x86/isa/orm.c optional isa -x86/pci/qpi.c standard +x86/pci/pci_bus.c optional pci +x86/pci/qpi.c optional pci x86/x86/busdma_machdep.c standard x86/x86/dump_machdep.c standard x86/x86/io_apic.c optional apic ==== //depot/projects/pci/sys/conf/files.ia64#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.ia64,v 1.109 2011/04/30 20:49:00 marcel Exp $ +# $FreeBSD: src/sys/conf/files.ia64,v 1.110 2011/06/25 02:15:14 marcel Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -120,6 +120,7 @@ isa/syscons_isa.c optional sc isa/vga_isa.c optional vga kern/imgact_elf32.c optional compat_freebsd32 +kern/kern_clocksource.c standard libkern/bcmp.c standard libkern/ffsl.c standard libkern/fls.c standard ==== //depot/projects/pci/sys/conf/files.pc98#3 (text+ko) ==== @@ -3,7 +3,7 @@ # # modified for PC-9801/PC-9821 # -# $FreeBSD: src/sys/conf/files.pc98,v 1.397 2011/04/20 12:58:30 bz Exp $ +# $FreeBSD: src/sys/conf/files.pc98,v 1.398 2011/06/22 21:04:13 jhb Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -199,7 +199,6 @@ dependency "linux_assym.h" i386/linux/linux_sysent.c optional compat_linux i386/linux/linux_sysvec.c optional compat_linux -i386/pci/pci_bus.c optional pci i386/pci/pci_cfgreg.c optional pci i386/pci/pci_pir.c optional pci i386/svr4/svr4_locore.s optional compat_svr4 \ @@ -249,6 +248,7 @@ x86/isa/atpic.c optional atpic x86/isa/clock.c standard x86/isa/isa.c optional isa +x86/pci/pci_bus.c optional pci x86/x86/busdma_machdep.c standard x86/x86/dump_machdep.c standard x86/x86/io_apic.c optional apic ==== //depot/projects/pci/sys/dev/acpica/acpi.c#7 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.303 2011/06/17 21:19:01 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.304 2011/06/24 13:58:56 jhb Exp $"); #include "opt_acpi.h" #include <sys/param.h> @@ -1244,7 +1244,7 @@ /* * First attempt at allocating the resource. For direct children, * use resource_list_alloc() to handle reserved resources. For - * other dveices, pass the request up to our parent. + * other devices, pass the request up to our parent. */ if (bus == device_get_parent(child)) { ad = device_get_ivars(child); ==== //depot/projects/pci/sys/dev/acpica/acpi_cpu.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.96 2011/04/07 23:28:28 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cpu.c,v 1.99 2011/06/25 02:49:47 marcel Exp $"); #include "opt_acpi.h" #include <sys/param.h> @@ -856,6 +856,8 @@ sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat); if (sc->cpu_cx_states[i].type < ACPI_STATE_C3) sc->cpu_non_c3 = i; + else + cpu_can_deep_sleep = 1; } sbuf_trim(&sb); sbuf_finish(&sb); @@ -925,11 +927,9 @@ /* Find the lowest state that has small enough latency. */ cx_next_idx = 0; -#ifndef __ia64__ if (cpu_disable_deep_sleep) i = min(sc->cpu_cx_lowest, sc->cpu_non_c3); else -#endif i = sc->cpu_cx_lowest; for (; i >= 0; i--) { if (sc->cpu_cx_states[i].trans_lat * 3 <= sc->cpu_prev_sleep) { ==== //depot/projects/pci/sys/dev/ath/ah_osdep.c#5 (text+ko) ==== @@ -26,7 +26,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * THE POSSIBILITY OF SUCH DAMAGES. * - * $FreeBSD: src/sys/dev/ath/ah_osdep.c,v 1.18 2011/05/17 16:30:34 adrian Exp $ + * $FreeBSD: src/sys/dev/ath/ah_osdep.c,v 1.20 2011/06/25 00:34:40 adrian Exp $ */ #include "opt_ah.h" @@ -81,29 +81,10 @@ #ifdef AH_DEBUG int ath_hal_debug = 0; SYSCTL_INT(_hw_ath_hal, OID_AUTO, debug, CTLFLAG_RW, &ath_hal_debug, - 0, "Atheros HAL debugging printfs"); + 0, "Atheros HAL debugging printfs"); TUNABLE_INT("hw.ath.hal.debug", &ath_hal_debug); #endif /* AH_DEBUG */ -int ath_hal_ar5416_biasadj = 0; -SYSCTL_INT(_hw_ath_hal, OID_AUTO, ar5416_biasadj, CTLFLAG_RW, - &ath_hal_ar5416_biasadj, 0, "Enable 2ghz AR5416 direction sensitivity" - " bias adjust"); - -/* NB: these are deprecated; they exist for now for compatibility */ -int ath_hal_dma_beacon_response_time = 2; /* in TU's */ -SYSCTL_INT(_hw_ath_hal, OID_AUTO, dma_brt, CTLFLAG_RW, - &ath_hal_dma_beacon_response_time, 0, - "Atheros HAL DMA beacon response time"); -int ath_hal_sw_beacon_response_time = 10; /* in TU's */ -SYSCTL_INT(_hw_ath_hal, OID_AUTO, sw_brt, CTLFLAG_RW, - &ath_hal_sw_beacon_response_time, 0, - "Atheros HAL software beacon response time"); -int ath_hal_additional_swba_backoff = 0; /* in TU's */ -SYSCTL_INT(_hw_ath_hal, OID_AUTO, swba_backoff, CTLFLAG_RW, - &ath_hal_additional_swba_backoff, 0, - "Atheros HAL additional SWBA backoff time"); - MALLOC_DEFINE(M_ATH_HAL, "ath_hal", "ath hal data"); void* @@ -146,7 +127,7 @@ void DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...) { - if ((mask == HAL_DEBUG_UNMASKABLE) || (ath_hal_debug & mask)) { + if ((mask == HAL_DEBUG_UNMASKABLE) || (ah->ah_config.ah_debug & mask)) { __va_list ap; va_start(ap, fmt); ath_hal_vprintf(ah, fmt, ap); ==== //depot/projects/pci/sys/dev/ath/ath_hal/ah.h#5 (text+ko) ==== @@ -14,7 +14,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $FreeBSD: src/sys/dev/ath/ath_hal/ah.h,v 1.38 2011/06/07 09:03:28 adrian Exp $ + * $FreeBSD: src/sys/dev/ath/ath_hal/ah.h,v 1.39 2011/06/23 02:38:36 adrian Exp $ */ #ifndef _ATH_AH_H_ @@ -756,6 +756,17 @@ }; typedef struct dfs_event HAL_DFS_EVENT; +typedef struct +{ + int ah_debug; /* only used if AH_DEBUG is defined */ + int ah_ar5416_biasadj; /* enable AR2133 radio specific bias fiddling */ + + /* NB: these are deprecated; they exist for now for compatibility */ + int ah_dma_beacon_response_time;/* in TU's */ + int ah_sw_beacon_response_time; /* in TU's */ + int ah_additional_swba_backoff; /* in TU's */ +}HAL_OPS_CONFIG; + /* * Hardware Access Layer (HAL) API. * @@ -784,6 +795,7 @@ uint16_t *ah_eepromdata; /* eeprom buffer, if needed */ + HAL_OPS_CONFIG ah_config; const HAL_RATE_TABLE *__ahdecl(*ah_getRateTable)(struct ath_hal *, u_int mode); void __ahdecl(*ah_detach)(struct ath_hal*); ==== //depot/projects/pci/sys/dev/ath/ath_hal/ah_internal.h#5 (text+ko) ==== @@ -14,7 +14,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $FreeBSD: src/sys/dev/ath/ath_hal/ah_internal.h,v 1.40 2011/06/01 20:01:02 adrian Exp $ + * $FreeBSD: src/sys/dev/ath/ath_hal/ah_internal.h,v 1.44 2011/06/24 23:59:14 adrian Exp $ */ #ifndef _ATH_AH_INTERAL_H_ #define _ATH_AH_INTERAL_H_ @@ -475,12 +475,6 @@ #define OS_A_REG_RMW_FIELD(_a, _r, _f, _v) \ do { OS_REG_WRITE(_a, _r, (OS_REG_READ(_a, _r) &~ (_f)) | (((_v) << _f##_S) & (_f))) ; OS_DELAY(100); } while (0) -/* system-configurable parameters */ -extern int ath_hal_dma_beacon_response_time; /* in TU's */ -extern int ath_hal_sw_beacon_response_time; /* in TU's */ -extern int ath_hal_additional_swba_backoff; /* in TU's */ -extern int ath_hal_ar5416_biasadj; /* 1 or 0 */ - /* wait for the register contents to have the specified value */ extern HAL_BOOL ath_hal_wait(struct ath_hal *, u_int reg, uint32_t mask, uint32_t val); @@ -504,11 +498,29 @@ /* common debugging interfaces */ #ifdef AH_DEBUG #include "ah_debug.h" -extern int ath_hal_debug; +extern int ath_hal_debug; /* Global debug flags */ + +/* + * This is used for global debugging, when ahp doesn't yet have the + * related debugging state. For example, during probe/attach. + */ +#define HALDEBUG_G(_ah, __m, ...) \ + do { \ + if ((__m) == HAL_DEBUG_UNMASKABLE || \ + ath_hal_debug & (__m)) { \ + DO_HALDEBUG((_ah), (__m), __VA_ARGS__); \ + } \ + } while (0); + +/* + * This is used for local debugging, when ahp isn't NULL and + * thus may have debug flags set. + */ #define HALDEBUG(_ah, __m, ...) \ do { \ if ((__m) == HAL_DEBUG_UNMASKABLE || \ - (ath_hal_debug & (__m))) { \ + ath_hal_debug & (__m) || \ + (_ah)->ah_config.ah_debug & (__m)) { \ DO_HALDEBUG((_ah), (__m), __VA_ARGS__); \ } \ } while(0); @@ -516,7 +528,8 @@ extern void DO_HALDEBUG(struct ath_hal *ah, u_int mask, const char* fmt, ...) __printflike(3,4); #else -#define HALDEBUG(_ah, __m, _fmt, ...) +#define HALDEBUG(_ah, __m, ...) +#define HALDEBUG_G(_ah, __m, ...) #endif /* AH_DEBUG */ /* ==== //depot/projects/pci/sys/dev/ath/ath_hal/ah_regdomain.c#3 (text+ko) ==== @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $FreeBSD: src/sys/dev/ath/ath_hal/ah_regdomain.c,v 1.11 2011/03/10 03:13:56 adrian Exp $ + * $FreeBSD: src/sys/dev/ath/ath_hal/ah_regdomain.c,v 1.12 2011/06/23 06:55:29 adrian Exp $ */ #include "opt_ah.h" @@ -167,7 +167,7 @@ if (regDomainPairs[i].regDmnEnum == rd) return AH_TRUE; } - HALDEBUG(ah, HAL_DEBUG_REGDOMAIN, + HALDEBUG_G(ah, HAL_DEBUG_REGDOMAIN, "%s: invalid regulatory domain/country code 0x%x\n", __func__, rd); return AH_FALSE; } @@ -609,7 +609,7 @@ return 1544 + freq; if (sku == SKU_SR9) return 3344 - freq; - HALDEBUG(AH_NULL, HAL_DEBUG_ANY, + HALDEBUG_G(AH_NULL, HAL_DEBUG_ANY, "%s: cannot map freq %u unknown gsm sku %u\n", __func__, freq, sku); return freq; ==== //depot/projects/pci/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c#3 (text+ko) ==== @@ -14,7 +14,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $FreeBSD: src/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c,v 1.12 2011/04/04 14:52:31 adrian Exp $ + * $FreeBSD: src/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c,v 1.13 2011/06/23 06:55:29 adrian Exp $ */ #include "opt_ah.h" @@ -181,14 +181,14 @@ HAL_STATUS ecode; int i; - HALDEBUG(AH_NULL, HAL_DEBUG_ATTACH, + HALDEBUG_G(AH_NULL, HAL_DEBUG_ATTACH, "%s: devid 0x%x sc %p st %p sh %p\n", __func__, devid, sc, (void*) st, (void*) sh); /* NB: memory is returned zero'd */ ahp = ath_hal_malloc(sizeof (struct ath_hal_5210)); if (ahp == AH_NULL) { - HALDEBUG(AH_NULL, HAL_DEBUG_ANY, + HALDEBUG_G(AH_NULL, HAL_DEBUG_ANY, "%s: no memory for state block\n", __func__); ecode = HAL_ENOMEM; goto bad; ==== //depot/projects/pci/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c#2 (text+ko) ==== @@ -14,7 +14,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $FreeBSD: src/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c,v 1.2 2010/03/03 17:32:32 rpaulo Exp $ + * $FreeBSD: src/sys/dev/ath/ath_hal/ar5210/ar5210_beacon.c,v 1.3 2011/06/23 02:38:36 adrian Exp $ */ #include "opt_ah.h" @@ -56,9 +56,9 @@ if (AH_PRIVATE(ah)->ah_opmode != HAL_M_STA) { bt.bt_nextdba = (next_beacon - - ath_hal_dma_beacon_response_time) << 3; /* 1/8 TU */ + ah->ah_config.ah_dma_beacon_response_time) << 3; /* 1/8 TU */ bt.bt_nextswba = (next_beacon - - ath_hal_sw_beacon_response_time) << 3; /* 1/8 TU */ + ah->ah_config.ah_sw_beacon_response_time) << 3; /* 1/8 TU */ /* * The SWBA interrupt is not used for beacons in ad hoc mode * as we don't yet support ATIMs. So since the beacon never >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106251205.p5PC5rsI054245>