From owner-p4-projects@FreeBSD.ORG Thu Nov 24 13:31:33 2005 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 1304C16A424; Thu, 24 Nov 2005 13:31:33 +0000 (GMT) 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 C585A16A41F for ; Thu, 24 Nov 2005 13:31:32 +0000 (GMT) (envelope-from cognet@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id BD3AB43D55 for ; Thu, 24 Nov 2005 13:31:31 +0000 (GMT) (envelope-from cognet@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id jAODVV0b083643 for ; Thu, 24 Nov 2005 13:31:31 GMT (envelope-from cognet@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id jAODVVY4083640 for perforce@freebsd.org; Thu, 24 Nov 2005 13:31:31 GMT (envelope-from cognet@freebsd.org) Date: Thu, 24 Nov 2005 13:31:31 GMT Message-Id: <200511241331.jAODVVY4083640@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to cognet@freebsd.org using -f From: Olivier Houchard To: Perforce Change Reviews Cc: Subject: PERFORCE change 87179 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: Thu, 24 Nov 2005 13:31:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=87179 Change 87179 by cognet@cognet on 2005/11/24 13:30:53 IFC Affected files ... .. //depot/projects/arm/src/sys/amd64/amd64/machdep.c#6 integrate .. //depot/projects/arm/src/sys/arm/arm/cpufunc_asm_arm9.S#3 integrate .. //depot/projects/arm/src/sys/arm/arm/elf_trampoline.c#2 integrate .. //depot/projects/arm/src/sys/arm/arm/machdep.c#5 integrate .. //depot/projects/arm/src/sys/arm/include/elf.h#2 integrate .. //depot/projects/arm/src/sys/arm/xscale/i80321/iq31244_machdep.c#5 integrate .. //depot/projects/arm/src/sys/compat/ndis/subr_ntoskrnl.c#6 integrate .. //depot/projects/arm/src/sys/conf/Makefile.arm#4 integrate .. //depot/projects/arm/src/sys/conf/files#6 integrate .. //depot/projects/arm/src/sys/conf/files.powerpc#3 integrate .. //depot/projects/arm/src/sys/conf/files.sparc64#3 integrate .. //depot/projects/arm/src/sys/conf/ldscript.arm#2 integrate .. //depot/projects/arm/src/sys/conf/options#6 integrate .. //depot/projects/arm/src/sys/conf/options.i386#4 integrate .. //depot/projects/arm/src/sys/conf/options.pc98#3 integrate .. //depot/projects/arm/src/sys/dev/acpica/acpi_battery.c#4 integrate .. //depot/projects/arm/src/sys/dev/acpica/acpi_cmbat.c#3 integrate .. //depot/projects/arm/src/sys/dev/acpica/acpi_pci_link.c#3 integrate .. //depot/projects/arm/src/sys/dev/acpica/acpi_smbat.c#2 integrate .. //depot/projects/arm/src/sys/dev/dc/if_dc.c#2 integrate .. //depot/projects/arm/src/sys/dev/dc/if_dcreg.h#2 integrate .. //depot/projects/arm/src/sys/dev/em/if_em.c#5 integrate .. //depot/projects/arm/src/sys/dev/em/if_em_hw.c#3 integrate .. //depot/projects/arm/src/sys/dev/em/if_em_hw.h#4 integrate .. //depot/projects/arm/src/sys/dev/lge/if_lge.c#4 integrate .. //depot/projects/arm/src/sys/dev/lge/if_lgereg.h#3 integrate .. //depot/projects/arm/src/sys/dev/nve/if_nve.c#3 integrate .. //depot/projects/arm/src/sys/dev/nve/if_nvereg.h#3 integrate .. //depot/projects/arm/src/sys/dev/ofw/ofw_bus_if.m#2 integrate .. //depot/projects/arm/src/sys/dev/ofw/ofw_bus_subr.c#1 branch .. //depot/projects/arm/src/sys/dev/ofw/ofw_bus_subr.h#1 branch .. //depot/projects/arm/src/sys/dev/ofw/openfirm.c#2 integrate .. //depot/projects/arm/src/sys/dev/ral/if_ral.c#2 integrate .. //depot/projects/arm/src/sys/dev/re/if_re.c#5 integrate .. //depot/projects/arm/src/sys/dev/usb/if_ural.c#3 integrate .. //depot/projects/arm/src/sys/fs/smbfs/smbfs_smb.c#3 integrate .. //depot/projects/arm/src/sys/i386/conf/NOTES#5 integrate .. //depot/projects/arm/src/sys/i386/i386/apic_vector.s#3 integrate .. //depot/projects/arm/src/sys/i386/i386/machdep.c#5 integrate .. //depot/projects/arm/src/sys/i386/i386/mp_machdep.c#3 integrate .. //depot/projects/arm/src/sys/i386/include/smp.h#3 integrate .. //depot/projects/arm/src/sys/i386/include/smptests.h#3 delete .. //depot/projects/arm/src/sys/kern/uipc_socket2.c#6 integrate .. //depot/projects/arm/src/sys/kern/vfs_mount.c#5 integrate .. //depot/projects/arm/src/sys/modules/i2c/controllers/pcf/Makefile#3 integrate .. //depot/projects/arm/src/sys/netsmb/smb_dev.c#3 integrate .. //depot/projects/arm/src/sys/pc98/include/smptests.h#2 delete .. //depot/projects/arm/src/sys/pc98/pc98/machdep.c#2 integrate .. //depot/projects/arm/src/sys/pci/if_de.c#4 integrate .. //depot/projects/arm/src/sys/pci/if_devar.h#3 integrate .. //depot/projects/arm/src/sys/sparc64/central/central.c#4 integrate .. //depot/projects/arm/src/sys/sparc64/conf/DEFAULTS#2 integrate .. //depot/projects/arm/src/sys/sparc64/ebus/ebus.c#3 integrate .. //depot/projects/arm/src/sys/sparc64/fhc/fhc.c#4 integrate .. //depot/projects/arm/src/sys/sparc64/fhc/fhc_central.c#4 integrate .. //depot/projects/arm/src/sys/sparc64/fhc/fhc_nexus.c#4 integrate .. //depot/projects/arm/src/sys/sparc64/fhc/fhcvar.h#4 integrate .. //depot/projects/arm/src/sys/sparc64/pci/ofw_pcibus.c#3 integrate .. //depot/projects/arm/src/sys/sparc64/pci/psycho.c#2 integrate .. //depot/projects/arm/src/sys/sparc64/pci/psychoreg.h#2 integrate .. //depot/projects/arm/src/sys/sparc64/pci/psychovar.h#2 integrate .. //depot/projects/arm/src/sys/sparc64/sbus/dma_sbus.c#2 integrate .. //depot/projects/arm/src/sys/sparc64/sbus/sbus.c#3 integrate .. //depot/projects/arm/src/sys/sys/bio.h#3 integrate .. //depot/projects/arm/src/sys/sys/event.h#4 integrate .. //depot/projects/arm/src/sys/sys/queue.h#5 integrate Differences ... ==== //depot/projects/arm/src/sys/amd64/amd64/machdep.c#6 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.644 2005/11/21 18:39:17 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.645 2005/11/24 08:16:17 ru Exp $"); #include "opt_atalk.h" #include "opt_atpic.h" @@ -343,7 +343,7 @@ sigreturn(td, uap) struct thread *td; struct sigreturn_args /* { - const __ucontext *sigcntxp; + const struct __ucontext *sigcntxp; } */ *uap; { ucontext_t uc; ==== //depot/projects/arm/src/sys/arm/arm/cpufunc_asm_arm9.S#3 (text+ko) ==== @@ -32,6 +32,7 @@ */ #include +__FBSDID("$FreeBSD: src/sys/arm/arm/cpufunc_asm_arm9.S,v 1.4 2005/11/23 18:02:40 cognet Exp $"); /* * Functions to set the MMU Translation Table Base register ==== //depot/projects/arm/src/sys/arm/arm/elf_trampoline.c#2 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.1 2005/10/03 14:09:36 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/elf_trampoline.c,v 1.2 2005/11/24 02:27:55 cognet Exp $"); #include #include #include @@ -36,6 +36,14 @@ extern char kernel_start[]; extern char kernel_end[]; +void __start(void); + +void +_start(void) +{ + __start(); +} + static __inline void * memcpy(void *dst, const void *src, int len) { @@ -168,8 +176,10 @@ phdr[i].p_filesz); } /* Now grab the symbol tables. */ - *(Elf_Addr *)curaddr = ssym - curaddr + KERNVIRTADDR; - *((Elf_Addr *)curaddr + 1) = lastaddr - curaddr + KERNVIRTADDR; + *(Elf_Addr *)curaddr = MAGIC_TRAMP_NUMBER; + *((Elf_Addr *)curaddr + 1) = ssym - curaddr + KERNVIRTADDR; + *((Elf_Addr *)curaddr + 2) = lastaddr - curaddr + KERNVIRTADDR; + /* Jump to the entry point. */ ((void(*)(void))(entry_point - KERNVIRTADDR + curaddr))(); __asm __volatile(".globl func_end\n" @@ -179,7 +189,7 @@ extern char func_end[]; -int _start(void) +void __start(void) { void *curaddr; @@ -194,5 +204,5 @@ ((void (*)())dst)((unsigned int)&kernel_start, (unsigned int)&kernel_end, (unsigned int)curaddr, dst + (unsigned int)&func_end - - (unsigned int)(&load_kernel),1); + (unsigned int)(&load_kernel), 1); } ==== //depot/projects/arm/src/sys/arm/arm/machdep.c#5 (text+ko) ==== @@ -44,7 +44,7 @@ #include "opt_compat.h" #include -__FBSDID("$FreeBSD: src/sys/arm/arm/machdep.c,v 1.19 2005/11/06 16:10:28 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/machdep.c,v 1.20 2005/11/24 08:16:17 ru Exp $"); #include #include @@ -511,7 +511,7 @@ sigreturn(td, uap) struct thread *td; struct sigreturn_args /* { - const __ucontext *sigcntxp; + const struct __ucontext *sigcntxp; } */ *uap; { struct proc *p = td->td_proc; ==== //depot/projects/arm/src/sys/arm/include/elf.h#2 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/arm/include/elf.h,v 1.5 2004/05/04 22:21:36 cognet Exp $ + * $FreeBSD: src/sys/arm/include/elf.h,v 1.6 2005/11/24 02:27:55 cognet Exp $ */ #ifndef _MACHINE_ELF_H_ @@ -125,4 +125,9 @@ #define ELF_TARG_MACH EM_ARM #define ELF_TARG_VER 1 +/* + * Magic number for the elf trampoline, chosen wisely to be an immediate + * value. + */ +#define MAGIC_TRAMP_NUMBER 0x5c000003 #endif /* !_MACHINE_ELF_H_ */ ==== //depot/projects/arm/src/sys/arm/xscale/i80321/iq31244_machdep.c#5 (text+ko) ==== @@ -49,7 +49,7 @@ #include "opt_ddb.h" #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.15 2005/10/04 14:37:03 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq31244_machdep.c,v 1.16 2005/11/24 02:27:55 cognet Exp $"); #define _ARM32_BUS_DMA_PRIVATE #include @@ -233,16 +233,16 @@ fake_preload[i++] = sizeof(uint32_t); fake_preload[i++] = (uint32_t)&end - KERNBASE - 0x00200000; #ifdef DDB - if (*(uint32_t *)KERNVIRTADDR != 0) { + if (*(uint32_t *)KERNVIRTADDR == MAGIC_TRAMP_NUMBER) { fake_preload[i++] = MODINFO_METADATA|MODINFOMD_SSYM; fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)KERNVIRTADDR; + fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 4); fake_preload[i++] = MODINFO_METADATA|MODINFOMD_ESYM; fake_preload[i++] = sizeof(vm_offset_t); - fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 4); - lastaddr = *(uint32_t *)(KERNVIRTADDR + 4); + fake_preload[i++] = *(uint32_t *)(KERNVIRTADDR + 8); + lastaddr = *(uint32_t *)(KERNVIRTADDR + 8); zend = lastaddr; - zstart = *(uint32_t *)KERNVIRTADDR; + zstart = *(uint32_t *)(KERNVIRTADDR + 4); ksym_start = zstart; ksym_end = zend; } else ==== //depot/projects/arm/src/sys/compat/ndis/subr_ntoskrnl.c#6 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.84 2005/11/20 01:29:29 wpaul Exp $"); +__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ntoskrnl.c,v 1.85 2005/11/23 17:10:46 wpaul Exp $"); #include #include @@ -234,6 +234,7 @@ static uint32_t WmiTraceMessage(uint64_t, uint32_t, void *, uint16_t, ...); static uint32_t IoWMIRegistrationControl(device_object *, uint32_t); static void *ntoskrnl_memset(void *, int, size_t); +static void *ntoskrnl_memmove(void *, void *, size_t); static char *ntoskrnl_strstr(char *, char *); static int ntoskrnl_toupper(int); static int ntoskrnl_tolower(int); @@ -423,6 +424,16 @@ return(memset(buf, ch, size)); } +static void * +ntoskrnl_memmove(dst, src, size) + void *src; + void *dst; + size_t size; +{ + bcopy(src, dst, size); + return(dst); +} + static char * ntoskrnl_strstr(s, find) char *s, *find; @@ -4142,7 +4153,7 @@ IMPORT_CFUNC_MAP(strstr, ntoskrnl_strstr, 0), IMPORT_CFUNC_MAP(strchr, index, 0), IMPORT_CFUNC(memcpy, 0), - IMPORT_CFUNC_MAP(memmove, ntoskrnl_memset, 0), + IMPORT_CFUNC_MAP(memmove, ntoskrnl_memmove, 0), IMPORT_CFUNC_MAP(memset, ntoskrnl_memset, 0), IMPORT_SFUNC(IoAllocateDriverObjectExtension, 4), IMPORT_SFUNC(IoGetDriverObjectExtension, 2), ==== //depot/projects/arm/src/sys/conf/Makefile.arm#4 (text+ko) ==== @@ -1,7 +1,7 @@ # Makefile.arm -- with config changes. # Copyright 1990 W. Jolitz # from: @(#)Makefile.i386 7.1 5/10/91 -# $FreeBSD: src/sys/conf/Makefile.arm,v 1.17 2005/11/17 01:32:01 cognet Exp $ +# $FreeBSD: src/sys/conf/Makefile.arm,v 1.18 2005/11/24 02:25:49 cognet Exp $ # # Makefile for FreeBSD # @@ -48,6 +48,16 @@ DDB_ENABLED!= grep DDB opt_ddb.h || true +SYSTEM_LD_ = ${LD} -Bdynamic -T ldscript.$M.static \ + -warn-common -export-dynamic -dynamic-linker /red/herring -o \ + ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o +SYSTEM_LD_TAIL +=; cat ldscript.$M| \ + sed s/" + SIZEOF_HEADERS"// \ + >ldscript.$M.noheader; \ + ${SYSTEM_LD_}; \ + ${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \ + ${KERNEL_KO}.bin; \ + rm ${FULLKERNEL}.noheader .if ${DDB_ENABLED} != "" SYSTEM_LD_TAIL += ;echo "\#define KERNNAME \"${KERNEL_KO}.tmp\"" \ >opt_kernname.h ;\ @@ -55,9 +65,17 @@ -g --strip-symbol '$$t' ${FULLKERNEL} ${KERNEL_KO}.tmp;\ ${CC} -O -nostdlib -I. -Xlinker -T -Xlinker ldscript.arm \ $S/$M/$M/elf_trampoline.c $S/$M/$M/inckern.S -o ${KERNEL_KO}.tramp;\ - rm ${KERNEL_KO}.tmp + ${CC} -O -nostdlib -I. -Xlinker -T -Xlinker ldscript.arm.noheader \ + $S/$M/$M/elf_trampoline.c $S/$M/$M/inckern.S -o \ + ${KERNEL_KO}.tramp.noheader; \ + ${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \ + ${KERNEL_KO}.tramp.bin; \ + rm ${KERNEL_KO}.tmp ${KERNEL_KO}.tramp.noheader; \ + .endif +CLEANFILES += ldscript.$M ldscript.$M.static ${KERNEL_KO}.bin \ + ${KERNEL_KO}.tramp ${KERNEL_KO}.tramp.bin %BEFORE_DEPEND %OBJS ==== //depot/projects/arm/src/sys/conf/files#6 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1065 2005/11/18 20:12:40 andre Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1066 2005/11/22 17:12:48 marius Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -1025,7 +1025,6 @@ dev/wl/if_wl.c optional wl isa dev/xe/if_xe.c optional xe dev/xe/if_xe_pccard.c optional xe pccard -dev/zs/zs.c optional zs fs/deadfs/dead_vnops.c standard fs/devfs/devfs_devs.c standard fs/devfs/devfs_rule.c standard ==== //depot/projects/arm/src/sys/conf/files.powerpc#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.powerpc,v 1.45 2005/11/08 06:48:08 grehan Exp $ +# $FreeBSD: src/sys/conf/files.powerpc,v 1.47 2005/11/22 17:12:49 marius Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -76,6 +76,7 @@ dev/ofw/openfirm.c standard dev/ofw/ofw_bus_if.m standard +dev/ofw/ofw_bus_subr.c standard dev/ofw/ofw_console.c standard dev/ofw/ofw_disk.c optional ofwd @@ -115,4 +116,5 @@ powerpc/psim/openpic_iobus.c optional psim powerpc/psim/sio_iobus.c optional sio psim +dev/zs/zs.c optional powermac zs dev/zs/zs_macio.c optional powermac zs ==== //depot/projects/arm/src/sys/conf/files.sparc64#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.sparc64,v 1.74 2005/10/28 15:58:18 joerg Exp $ +# $FreeBSD: src/sys/conf/files.sparc64,v 1.76 2005/11/22 17:25:10 marius Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -42,11 +42,12 @@ dev/kbd/kbd.c optional sc dev/kbd/kbd.c optional ukbd dev/ofw/ofw_bus_if.m standard +dev/ofw/ofw_bus_subr.c standard dev/ofw/ofw_console.c optional ofw_console dev/ofw/openfirm.c standard dev/ofw/openfirmio.c standard dev/ofw/openpromio.c standard -dev/pcf/envctrl.c optional pcf +dev/pcf/envctrl.c optional pcf ebus dev/pcf/pcf_ebus.c optional pcf ebus dev/sound/sbus/cs4231.c optional snd_audiocs ebus dev/sound/sbus/cs4231.c optional snd_audiocs sbus ==== //depot/projects/arm/src/sys/conf/ldscript.arm#2 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/conf/ldscript.arm,v 1.2 2004/09/23 22:52:55 cognet Exp $ */ +/* $FreeBSD: src/sys/conf/ldscript.arm,v 1.3 2005/11/24 02:25:49 cognet Exp $ */ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) @@ -8,7 +8,20 @@ { /* Read-only sections, merged into text segment: */ . = KERNVIRTADDR + SIZEOF_HEADERS; - .interp : { *(.interp) } + .text : + { + *(.text) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + } =0x9090 + _etext = .; + PROVIDE (etext = .); + .fini : { *(.fini) } =0x9090 + .rodata : { *(.rodata) *(.gnu.linkonce.r*) } + .rodata1 : { *(.rodata1) } + .interp : { *(.interp) } .hash : { *(.hash) } .dynsym : { *(.dynsym) } .dynstr : { *(.dynstr) } @@ -43,19 +56,7 @@ .rela.plt : { *(.rela.plt) } .init : { *(.init) } =0x9090 .plt : { *(.plt) } - .text : - { - *(.text) - *(.stub) - /* .gnu.warning sections are handled specially by elf32.em. */ - *(.gnu.warning) - *(.gnu.linkonce.t*) - } =0x9090 - _etext = .; - PROVIDE (etext = .); - .fini : { *(.fini) } =0x9090 - .rodata : { *(.rodata) *(.gnu.linkonce.r*) } - .rodata1 : { *(.rodata1) } + /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(0x1000) + (. & (0x1000 - 1)) ; ==== //depot/projects/arm/src/sys/conf/options#6 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.517 2005/10/14 18:24:58 jhb Exp $ +# $FreeBSD: src/sys/conf/options,v 1.518 2005/11/23 18:11:24 jhb Exp $ # # On the handling of kernel options # @@ -69,7 +69,6 @@ CY_PCI_FASTINTR DIRECTIO opt_directio.h FULL_PREEMPTION opt_sched.h -PREEMPTION opt_sched.h IPI_PREEMPTION opt_sched.h GEOM_AES opt_geom.h GEOM_APPLE opt_geom.h @@ -120,6 +119,7 @@ NSWBUF_MIN opt_swap.h PANIC_REBOOT_WAIT_TIME opt_panic.h PPS_SYNC opt_ntp.h +PREEMPTION opt_sched.h PUC_FASTINTR opt_puc.h QUOTA SCHED_4BSD opt_sched.h ==== //depot/projects/arm/src/sys/conf/options.i386#4 (text+ko) ==== @@ -1,20 +1,22 @@ -# $FreeBSD: src/sys/conf/options.i386,v 1.227 2005/11/09 03:55:39 imp Exp $ +# $FreeBSD: src/sys/conf/options.i386,v 1.229 2005/11/23 18:11:24 jhb Exp $ # Options specific to the i386 platform kernels AUTO_EOI_1 opt_auto_eoi.h AUTO_EOI_2 opt_auto_eoi.h BROKEN_KEYBOARD_RESET opt_reset.h +COUNT_XINVLTLB_HITS opt_smp.h +COUNT_IPIS opt_smp.h DISABLE_PG_G opt_pmap.h DISABLE_PSE opt_pmap.h I586_PMC_GUPROF opt_i586_guprof.h MAXMEM MPTABLE_FORCE_HTT +MP_WATCHDOG opt_mp_watchdog.h PERFMON PMAP_SHPGPERPROC opt_pmap.h POWERFAIL_NMI opt_trap.h PPC_DEBUG opt_ppc.h PPC_PROBE_CHIPSET opt_ppc.h -MP_WATCHDOG opt_mp_watchdog.h # Options for emulators. These should only be used at config time, so # they are handled like options for static filesystems @@ -161,8 +163,8 @@ ASR_COMPAT opt_asr.h # Debugging +NPX_DEBUG opt_npx.h STOP_NMI opt_cpu.h -NPX_DEBUG opt_npx.h # XBOX support in the kernel XBOX opt_xbox.h ==== //depot/projects/arm/src/sys/conf/options.pc98#3 (text+ko) ==== @@ -1,19 +1,21 @@ -# $FreeBSD: src/sys/conf/options.pc98,v 1.192 2005/11/14 01:25:05 imp Exp $ +# $FreeBSD: src/sys/conf/options.pc98,v 1.193 2005/11/23 18:12:05 jhb Exp $ # Options specific to the pc98 platform kernels AUTO_EOI_1 opt_auto_eoi.h BROKEN_KEYBOARD_RESET opt_reset.h +COUNT_XINVLTLB_HITS opt_smp.h +COUNT_IPIS opt_smp.h DISABLE_PG_G opt_pmap.h DISABLE_PSE opt_pmap.h I586_PMC_GUPROF opt_i586_guprof.h MAXMEM MPTABLE_FORCE_HTT +MP_WATCHDOG opt_mp_watchdog.h PERFMON PMAP_SHPGPERPROC opt_pmap.h POWERFAIL_NMI opt_trap.h PPC_DEBUG opt_ppc.h PPC_PROBE_CHIPSET opt_ppc.h -MP_WATCHDOG opt_mp_watchdog.h # Options for emulators. These should only be used at config time, so # they are handled like options for static filesystems @@ -103,8 +105,8 @@ DEV_NPX opt_npx.h # Debugging +NPX_DEBUG opt_npx.h STOP_NMI opt_cpu.h -NPX_DEBUG opt_npx.h # FreeBSD/i386 supports xbox and is shared with pc98 so we need to define # dummy opt_xbox.h ==== //depot/projects/arm/src/sys/dev/acpica/acpi_battery.c#4 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_battery.c,v 1.21 2005/10/23 19:31:18 njl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_battery.c,v 1.22 2005/11/23 00:53:01 njl Exp $"); #include "opt_acpi.h" #include @@ -101,21 +101,15 @@ int acpi_battery_bst_valid(struct acpi_bst *bst) { - if (bst->state >= ACPI_BATT_STAT_MAX || bst->cap == ACPI_BATT_UNKNOWN || - bst->volt == ACPI_BATT_UNKNOWN) - return (FALSE); - else - return (TRUE); + return (bst->state < ACPI_BATT_STAT_MAX && bst->cap != ACPI_BATT_UNKNOWN && + bst->volt != ACPI_BATT_UNKNOWN); } /* Check _BIF results for validity. */ int acpi_battery_bif_valid(struct acpi_bif *bif) { - if (bif->lfcap == 0) - return (FALSE); - else - return (TRUE); + return (bif->lfcap != 0); } /* Get info about one or all batteries. */ ==== //depot/projects/arm/src/sys/dev/acpica/acpi_cmbat.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cmbat.c,v 1.41 2005/09/11 18:39:01 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_cmbat.c,v 1.42 2005/11/23 00:57:51 njl Exp $"); #include "opt_acpi.h" #include @@ -66,7 +66,6 @@ struct acpi_bif bif; struct acpi_bst bst; - struct timespec bif_lastupdated; struct timespec bst_lastupdated; }; @@ -80,8 +79,8 @@ void *context); static int acpi_cmbat_info_expired(struct timespec *lastupdated); static void acpi_cmbat_info_updated(struct timespec *lastupdated); -static void acpi_cmbat_get_bst(device_t dev); -static void acpi_cmbat_get_bif(device_t dev); +static void acpi_cmbat_get_bst(void *arg); +static void acpi_cmbat_get_bif(void *arg); static int acpi_cmbat_bst(device_t dev, struct acpi_bst *bstp); static int acpi_cmbat_bif(device_t dev, struct acpi_bif *bifp); static void acpi_cmbat_init_battery(void *arg); @@ -134,7 +133,6 @@ handle = acpi_get_handle(dev); sc->dev = dev; - timespecclear(&sc->bif_lastupdated); timespecclear(&sc->bst_lastupdated); error = acpi_battery_register(dev); @@ -180,20 +178,22 @@ dev = (device_t)context; sc = device_get_softc(dev); - /* - * Clear the appropriate last updated time. The next call to retrieve - * the battery status will get the new value for us. We don't need to - * acquire a lock since we are only clearing the time stamp and since - * calling _BST/_BIF can trigger a notify, we could deadlock also. - */ switch (notify) { case ACPI_NOTIFY_DEVICE_CHECK: case ACPI_BATTERY_BST_CHANGE: + /* + * Clear the last updated time. The next call to retrieve the + * battery status will get the new value for us. + */ timespecclear(&sc->bst_lastupdated); break; case ACPI_NOTIFY_BUS_CHECK: case ACPI_BATTERY_BIF_CHANGE: - timespecclear(&sc->bif_lastupdated); + /* + * Queue a callback to get the current battery info from thread + * context. It's not safe to block in a notify handler. + */ + AcpiOsQueueForExecution(OSD_PRIORITY_LO, acpi_cmbat_get_bif, dev); break; } @@ -229,16 +229,18 @@ } static void -acpi_cmbat_get_bst(device_t dev) +acpi_cmbat_get_bst(void *arg) { struct acpi_cmbat_softc *sc; ACPI_STATUS as; ACPI_OBJECT *res; ACPI_HANDLE h; ACPI_BUFFER bst_buffer; + device_t dev; ACPI_SERIAL_ASSERT(cmbat); + dev = arg; sc = device_get_softc(dev); h = acpi_get_handle(dev); bst_buffer.Pointer = NULL; @@ -287,24 +289,23 @@ } static void -acpi_cmbat_get_bif(device_t dev) +acpi_cmbat_get_bif(void *arg) { struct acpi_cmbat_softc *sc; ACPI_STATUS as; ACPI_OBJECT *res; ACPI_HANDLE h; ACPI_BUFFER bif_buffer; + device_t dev; ACPI_SERIAL_ASSERT(cmbat); + dev = arg; sc = device_get_softc(dev); h = acpi_get_handle(dev); bif_buffer.Pointer = NULL; bif_buffer.Length = ACPI_ALLOCATE_BUFFER; - if (!acpi_cmbat_info_expired(&sc->bif_lastupdated)) - goto end; - as = AcpiEvaluateObject(h, "_BIF", NULL, &bif_buffer); if (ACPI_FAILURE(as)) { ACPI_VPRINT(dev, acpi_device_get_parent_softc(dev), @@ -346,7 +347,6 @@ goto end; if (acpi_PkgStr(res, 12, sc->bif.oeminfo, ACPI_CMBAT_MAXSTRLEN) != 0) goto end; - acpi_cmbat_info_updated(&sc->bif_lastupdated); end: if (bif_buffer.Pointer != NULL) @@ -360,8 +360,13 @@ sc = device_get_softc(dev); + /* + * Just copy the data. The only value that should change is the + * last-full capacity, so we only update when we get a notify that says + * the info has changed. Many systems apparently take a long time to + * process a _BIF call so we avoid it if possible. + */ ACPI_SERIAL_BEGIN(cmbat); - acpi_cmbat_get_bif(dev); bifp->units = sc->bif.units; bifp->dcap = sc->bif.dcap; bifp->lfcap = sc->bif.lfcap; @@ -422,11 +427,18 @@ if (!acpi_BatteryIsPresent(dev)) continue; + /* + * Only query the battery if this is the first try or the specific + * type of info is still invalid. + */ ACPI_SERIAL_BEGIN(cmbat); - timespecclear(&sc->bst_lastupdated); - timespecclear(&sc->bif_lastupdated); - acpi_cmbat_get_bst(dev); - acpi_cmbat_get_bif(dev); + if (retry == 0 || !acpi_battery_bst_valid(&sc->bst)) { + timespecclear(&sc->bst_lastupdated); + acpi_cmbat_get_bst(dev); + } + if (retry == 0 || !acpi_battery_bif_valid(&sc->bif)) + acpi_cmbat_get_bif(dev); + valid = acpi_battery_bst_valid(&sc->bst) && acpi_battery_bif_valid(&sc->bif); ACPI_SERIAL_END(cmbat); ==== //depot/projects/arm/src/sys/dev/acpica/acpi_pci_link.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pci_link.c,v 1.48 2005/11/01 22:44:07 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pci_link.c,v 1.50 2005/11/23 16:36:13 jhb Exp $"); #include "opt_acpi.h" #include @@ -159,6 +159,7 @@ device_set_desc_copy(dev, descr); } else device_set_desc(dev, "ACPI PCI Link"); + device_quiet(dev); return (0); } @@ -608,7 +609,19 @@ { struct link *link; uint8_t bios_irq; + uintptr_t bus; + /* + * Look up the PCI bus for the specified PCI bridge device. Note + * that the PCI bridge device might not have any children yet. + * However, looking up its bus number doesn't require a valid child + * device, so we just pass NULL. + */ + if (BUS_READ_IVAR(pcib, NULL, PCIB_IVAR_BUS, &bus) != 0) { + device_printf(pcib, "Unable to read PCI bus number"); + panic("PCI bridge without a bus number"); + } + /* Bump the reference count. */ ACPI_SERIAL_BEGIN(pci_link); link = acpi_pci_link_lookup(dev, index); @@ -618,8 +631,28 @@ if (link->l_routed) pci_link_interrupt_weights[link->l_irq]++; + /* + * The BIOS only routes interrupts via ISA IRQs using the ATPICs + * (8259As). Thus, if this link is routed via an ISA IRQ, go + * look to see if the BIOS routed an IRQ for this link at the + * indicated (bus, slot, pin). If so, we prefer that IRQ for + * this link and add that IRQ to our list of known-good IRQs. + * This provides a good work-around for link devices whose _CRS + * method is either broken or bogus. We only use the value + * returned by _CRS if we can't find a valid IRQ via this method + * in fact. + * + * If this link is not routed via an ISA IRQ (because we are using + * APIC for example), then don't bother looking up the BIOS IRQ + * as if we find one it won't be valid anyway. + */ + if (!link->l_isa_irq) { + ACPI_SERIAL_END(pci_link); + return; + } + /* Try to find a BIOS IRQ setting from any matching devices. */ - bios_irq = acpi_pci_link_search_irq(pcib_get_bus(pcib), slot, pin); + bios_irq = acpi_pci_link_search_irq(bus, slot, pin); if (!PCI_INTERRUPT_VALID(bios_irq)) { ACPI_SERIAL_END(pci_link); return; @@ -628,7 +661,7 @@ /* Validate the BIOS IRQ. */ if (!link_valid_irq(link, bios_irq)) { device_printf(dev, "BIOS IRQ %u for %d.%d.INT%c is invalid\n", - bios_irq, pcib_get_bus(pcib), slot, pin + 'A'); + bios_irq, (int)bus, slot, pin + 'A'); } else if (!PCI_INTERRUPT_VALID(link->l_bios_irq)) { link->l_bios_irq = bios_irq; if (bios_irq < NUM_ISA_INTERRUPTS) @@ -641,7 +674,7 @@ } else if (bios_irq != link->l_bios_irq) device_printf(dev, "BIOS IRQ %u for %d.%d.INT%c does not match previous BIOS IRQ %u\n", - bios_irq, pcib_get_bus(pcib), slot, pin + 'A', + bios_irq, (int)bus, slot, pin + 'A', link->l_bios_irq); ACPI_SERIAL_END(pci_link); } ==== //depot/projects/arm/src/sys/dev/acpica/acpi_smbat.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_smbat.c,v 1.1 2005/10/23 00:20:13 njl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_smbat.c,v 1.3 2005/11/24 05:23:56 njl Exp $"); #include "opt_acpi.h" #include @@ -44,11 +44,18 @@ struct acpi_smbat_softc { uint8_t sb_base_addr; device_t ec_dev; + + struct acpi_bif bif; + struct acpi_bst bst; + struct timespec bif_lastupdated; + struct timespec bst_lastupdated; }; static int acpi_smbat_probe(device_t dev); static int acpi_smbat_attach(device_t dev); static int acpi_smbat_shutdown(device_t dev); +static int acpi_smbat_info_expired(struct timespec *lastupdated); +static void acpi_smbat_info_updated(struct timespec *lastupdated); static int acpi_smbat_get_bif(device_t dev, struct acpi_bif *bif); static int acpi_smbat_get_bst(device_t dev, struct acpi_bst *bst); @@ -114,6 +121,9 @@ return (ENXIO); } + timespecclear(&sc->bif_lastupdated); + timespecclear(&sc->bst_lastupdated); + if (acpi_battery_register(dev) != 0) { device_printf(dev, "cannot register battery\n"); return (ENXIO); @@ -132,6 +142,34 @@ } static int +acpi_smbat_info_expired(struct timespec *lastupdated) +{ + struct timespec curtime; + + ACPI_SERIAL_ASSERT(smbat); + + if (lastupdated == NULL) + return (TRUE); + if (!timespecisset(lastupdated)) + return (TRUE); + + getnanotime(&curtime); + timespecsub(&curtime, lastupdated); + return (curtime.tv_sec < 0 || + curtime.tv_sec > acpi_battery_get_info_expire()); +} + +static void +acpi_smbat_info_updated(struct timespec *lastupdated) +{ + + ACPI_SERIAL_ASSERT(smbat); + + if (lastupdated != NULL) + getnanotime(lastupdated); +} + +static int acpi_smbus_read_2(struct acpi_smbat_softc *sc, uint8_t addr, uint8_t cmd, uint16_t *ptr) { @@ -284,6 +322,11 @@ error = ENXIO; sc = device_get_softc(dev); + if (!acpi_smbat_info_expired(&sc->bst_lastupdated)) { + error = 0; + goto out; + } + if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_BATTERY_MODE, &val)) goto out; if (val & SMBATT_BM_CAPACITY_MODE) { @@ -299,7 +342,7 @@ goto out; if (val & SMBATT_BS_DISCHARGING) { - bst->state |= ACPI_BATT_STAT_DISCHARG; + sc->bst.state |= ACPI_BATT_STAT_DISCHARG; /* * If the rate is negative, it is discharging. Otherwise, @@ -308,27 +351,31 @@ if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_AT_RATE, &val)) goto out; if (val < 0) - bst->rate = (-val) * factor; + sc->bst.rate = (-val) * factor; else - bst->rate = -1; + sc->bst.rate = -1; } else { - bst->state |= ACPI_BATT_STAT_CHARGING; - bst->rate = -1; + sc->bst.state |= ACPI_BATT_STAT_CHARGING; + sc->bst.rate = -1; } if (val & SMBATT_BS_REMAINING_CAPACITY_ALARM) - bst->state |= ACPI_BATT_STAT_CRITICAL; + sc->bst.state |= ACPI_BATT_STAT_CRITICAL; if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_REMAINING_CAPACITY, &val)) goto out; - bst->cap = val * factor; + sc->bst.cap = val * factor; if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_VOLTAGE, &val)) goto out; - bst->volt = val; + sc->bst.volt = val; + + acpi_smbat_info_updated(&sc->bst_lastupdated); error = 0; out: + if (error == 0) + memcpy(bst, &sc->bst, sizeof(sc->bst)); ACPI_SERIAL_END(smbat); return (error); } @@ -348,55 +395,64 @@ error = ENXIO; sc = device_get_softc(dev); + if (!acpi_smbat_info_expired(&sc->bif_lastupdated)) { + error = 0; + goto out; + } + if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_BATTERY_MODE, &val)) goto out; if (val & SMBATT_BM_CAPACITY_MODE) { factor = 10; - bif->units = ACPI_BIF_UNITS_MW; + sc->bif.units = ACPI_BIF_UNITS_MW; } else { factor = 1; - bif->units = ACPI_BIF_UNITS_MA; + sc->bif.units = ACPI_BIF_UNITS_MA; } if (acpi_smbus_read_2(sc, addr, SMBATT_CMD_DESIGN_CAPACITY, &val)) >>> TRUNCATED FOR MAIL (1000 lines) <<<