Date: Mon, 6 Apr 2015 22:19:52 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r281173 - in projects/ifnet: etc/rc.d lib/libc/sys sys/arm/include sys/arm64/include sys/boot/efi sys/boot/efi/boot1 sys/boot/efi/include/arm sys/boot/efi/loader sys/boot/efi/loader/arc... Message-ID: <201504062219.t36MJqid096836@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Mon Apr 6 22:19:51 2015 New Revision: 281173 URL: https://svnweb.freebsd.org/changeset/base/281173 Log: Merge head r257698 through r281172. Added: projects/ifnet/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu - copied unchanged from r281172, head/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu projects/ifnet/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu - copied unchanged from r281172, head/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu projects/ifnet/sys/boot/efi/include/arm/ - copied from r281172, head/sys/boot/efi/include/arm/ projects/ifnet/sys/boot/efi/loader/arch/arm/ - copied from r281172, head/sys/boot/efi/loader/arch/arm/ Deleted: projects/ifnet/sys/boot/efi/boot1/fat.tmpl.bz2.uu Modified: projects/ifnet/etc/rc.d/pflog projects/ifnet/lib/libc/sys/vfork.2 projects/ifnet/sys/arm/include/metadata.h projects/ifnet/sys/arm64/include/atomic.h projects/ifnet/sys/boot/efi/Makefile projects/ifnet/sys/boot/efi/boot1/Makefile projects/ifnet/sys/boot/efi/boot1/boot1.c projects/ifnet/sys/boot/efi/boot1/generate-fat.sh projects/ifnet/sys/boot/efi/loader/Makefile projects/ifnet/sys/boot/efi/loader/bootinfo.c projects/ifnet/sys/boot/efi/loader/copy.c projects/ifnet/sys/dev/acpica/acpi.c projects/ifnet/sys/netinet6/ip6_forward.c projects/ifnet/sys/netinet6/ip6_mroute.c projects/ifnet/sys/netinet6/ip6_mroute.h projects/ifnet/sys/netpfil/pf/pf_norm.c projects/ifnet/sys/powerpc/powerpc/trap.c projects/ifnet/sys/sys/param.h projects/ifnet/sys/vm/uma_core.c projects/ifnet/usr.bin/netstat/mroute6.c projects/ifnet/usr.bin/netstat/netstat.1 projects/ifnet/usr.sbin/acpi/acpiconf/acpiconf.c projects/ifnet/usr.sbin/bsdinstall/scripts/zfsboot projects/ifnet/usr.sbin/ctld/ctld.c Directory Properties: projects/ifnet/ (props changed) projects/ifnet/etc/ (props changed) projects/ifnet/lib/libc/ (props changed) projects/ifnet/sys/ (props changed) projects/ifnet/sys/boot/ (props changed) Modified: projects/ifnet/etc/rc.d/pflog ============================================================================== --- projects/ifnet/etc/rc.d/pflog Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/etc/rc.d/pflog Mon Apr 6 22:19:51 2015 (r281173) @@ -38,7 +38,7 @@ pflog_prestart() return 1 fi - # -p flag requires striping pidfile's leading /var/run and trailing .pid + # -p flag requires stripping pidfile's leading /var/run and trailing .pid pidfile=$(echo $pidfile | sed -e 's|/var/run/||' -e 's|.pid$||') # prepare the command line for pflogd Modified: projects/ifnet/lib/libc/sys/vfork.2 ============================================================================== --- projects/ifnet/lib/libc/sys/vfork.2 Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/lib/libc/sys/vfork.2 Mon Apr 6 22:19:51 2015 (r281173) @@ -28,7 +28,7 @@ .\" @(#)vfork.2 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd November 13, 2009 +.Dd April 6, 2015 .Dt VFORK 2 .Os .Sh NAME @@ -111,7 +111,7 @@ Same as for The .Fn vfork system call appeared in -.Bx 2.9 . +.Bx 3 . .Sh BUGS To avoid a possible deadlock situation, processes that are children in the middle Modified: projects/ifnet/sys/arm/include/metadata.h ============================================================================== --- projects/ifnet/sys/arm/include/metadata.h Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/arm/include/metadata.h Mon Apr 6 22:19:51 2015 (r281173) @@ -31,5 +31,12 @@ #define MODINFOMD_BOOTINFO 0x1001 #define MODINFOMD_DTBP 0x1002 +#define MODINFOMD_EFI_MAP 0x1003 + +struct efi_map_header { + uint64_t memory_size; + uint64_t descriptor_size; + uint32_t descriptor_version; +}; #endif /* !_MACHINE_METADATA_H_ */ Modified: projects/ifnet/sys/arm64/include/atomic.h ============================================================================== --- projects/ifnet/sys/arm64/include/atomic.h Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/arm64/include/atomic.h Mon Apr 6 22:19:51 2015 (r281173) @@ -160,7 +160,6 @@ atomic_subtract_32(volatile uint32_t *p, #define atomic_set_int atomic_set_32 #define atomic_subtract_int atomic_subtract_32 - static __inline void atomic_add_acq_32(volatile uint32_t *p, uint32_t val) { @@ -170,7 +169,7 @@ atomic_add_acq_32(volatile uint32_t *p, __asm __volatile( "1: ldaxr %w0, [%2] \n" " add %w0, %w0, %w3 \n" - " stlxr %w1, %w0, [%2] \n" + " stxr %w1, %w0, [%2] \n" " cbnz %w1, 1b \n" "2:" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" @@ -186,7 +185,7 @@ atomic_clear_acq_32(volatile uint32_t *p __asm __volatile( "1: ldaxr %w0, [%2] \n" " bic %w0, %w0, %w3 \n" - " stlxr %w1, %w0, [%2] \n" + " stxr %w1, %w0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" ); @@ -203,7 +202,7 @@ atomic_cmpset_acq_32(volatile uint32_t * " ldaxr %w0, [%2] \n" " cmp %w0, %w3 \n" " b.ne 2f \n" - " stlxr %w1, %w4, [%2] \n" + " stxr %w1, %w4, [%2] \n" " cbnz %w1, 1b \n" "2:" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (cmpval), "+r" (newval) @@ -218,8 +217,9 @@ atomic_load_acq_32(volatile uint32_t *p) { uint32_t ret; - ret = *p; - dmb(); + __asm __volatile( + "ldar %w0, [%1] \n" + : "=&r" (ret) : "r" (p) : "memory"); return (ret); } @@ -233,7 +233,7 @@ atomic_set_acq_32(volatile uint32_t *p, __asm __volatile( "1: ldaxr %w0, [%2] \n" " orr %w0, %w0, %w3 \n" - " stlxr %w1, %w0, [%2] \n" + " stxr %w1, %w0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" ); @@ -248,6 +248,82 @@ atomic_subtract_acq_32(volatile uint32_t __asm __volatile( "1: ldaxr %w0, [%2] \n" " sub %w0, %w0, %w3 \n" + " stxr %w1, %w0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +#define atomic_add_acq_int atomic_add_acq_32 +#define atomic_clear_acq_int atomic_clear_acq_32 +#define atomic_cmpset_acq_int atomic_cmpset_acq_32 +#define atomic_load_acq_int atomic_load_acq_32 +#define atomic_set_acq_int atomic_set_acq_32 +#define atomic_subtract_acq_int atomic_subtract_acq_32 + +/* The atomic functions currently are both acq and rel, we should fix this. */ + +static __inline void +atomic_add_rel_32(volatile uint32_t *p, uint32_t val) +{ + uint32_t tmp; + int res; + + __asm __volatile( + "1: ldxr %w0, [%2] \n" + " add %w0, %w0, %w3 \n" + " stlxr %w1, %w0, [%2] \n" + " cbnz %w1, 1b \n" + "2:" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +static __inline void +atomic_clear_rel_32(volatile uint32_t *p, uint32_t val) +{ + uint32_t tmp; + int res; + + __asm __volatile( + "1: ldxr %w0, [%2] \n" + " bic %w0, %w0, %w3 \n" + " stlxr %w1, %w0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +static __inline int +atomic_cmpset_rel_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval) +{ + uint32_t tmp; + int res; + + __asm __volatile( + "1: mov %w1, #1 \n" + " ldxr %w0, [%2] \n" + " cmp %w0, %w3 \n" + " b.ne 2f \n" + " stlxr %w1, %w4, [%2] \n" + " cbnz %w1, 1b \n" + "2:" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (cmpval), "+r" (newval) + : : "cc", "memory" + ); + + return (!res); +} + +static __inline void +atomic_set_rel_32(volatile uint32_t *p, uint32_t val) +{ + uint32_t tmp; + int res; + + __asm __volatile( + "1: ldxr %w0, [%2] \n" + " orr %w0, %w0, %w3 \n" " stlxr %w1, %w0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" @@ -258,23 +334,25 @@ static __inline void atomic_store_rel_32(volatile uint32_t *p, uint32_t val) { - dmb(); - *p = val; + __asm __volatile( + "stlr %w0, [%1] \n" + : : "r" (val), "r" (p) : "memory"); } -#define atomic_add_acq_int atomic_add_acq_32 -#define atomic_clear_acq_int atomic_add_acq_32 -#define atomic_cmpset_acq_int atomic_cmpset_acq_32 -#define atomic_load_acq_int atomic_load_acq_32 -#define atomic_set_acq_int atomic_set_acq_32 -#define atomic_subtract_acq_int atomic_subtract_acq_32 +static __inline void +atomic_subtract_rel_32(volatile uint32_t *p, uint32_t val) +{ + uint32_t tmp; + int res; -/* The atomic functions currently are both acq and rel, we should fix this. */ -#define atomic_add_rel_32 atomic_add_acq_32 -#define atomic_clear_rel_32 atomic_add_acq_32 -#define atomic_cmpset_rel_32 atomic_cmpset_acq_32 -#define atomic_set_rel_32 atomic_set_acq_32 -#define atomic_subtract_rel_32 atomic_subtract_acq_32 + __asm __volatile( + "1: ldxr %w0, [%2] \n" + " sub %w0, %w0, %w3 \n" + " stlxr %w1, %w0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} #define atomic_add_rel_int atomic_add_rel_32 #define atomic_clear_rel_int atomic_add_rel_32 @@ -440,7 +518,7 @@ atomic_add_acq_64(volatile uint64_t *p, __asm __volatile( "1: ldaxr %0, [%2] \n" " add %0, %0, %3 \n" - " stlxr %w1, %0, [%2] \n" + " stxr %w1, %0, [%2] \n" " cbnz %w1, 1b \n" "2:" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" @@ -456,7 +534,7 @@ atomic_clear_acq_64(volatile uint64_t *p __asm __volatile( "1: ldaxr %0, [%2] \n" " bic %0, %0, %3 \n" - " stlxr %w1, %0, [%2] \n" + " stxr %w1, %0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" ); @@ -473,7 +551,7 @@ atomic_cmpset_acq_64(volatile uint64_t * " ldaxr %0, [%2] \n" " cmp %0, %3 \n" " b.ne 2f \n" - " stlxr %w1, %4, [%2] \n" + " stxr %w1, %4, [%2] \n" " cbnz %w1, 1b \n" "2:" : "=&r" (tmp), "=&r" (res), "+r" (p), "+r" (cmpval), "+r" (newval) @@ -488,8 +566,9 @@ atomic_load_acq_64(volatile uint64_t *p) { uint64_t ret; - ret = *p; - dmb(); + __asm __volatile( + "ldar %0, [%1] \n" + : "=&r" (ret) : "r" (p) : "memory"); return (ret); } @@ -503,7 +582,7 @@ atomic_set_acq_64(volatile uint64_t *p, __asm __volatile( "1: ldaxr %0, [%2] \n" " orr %0, %0, %3 \n" - " stlxr %w1, %0, [%2] \n" + " stxr %w1, %0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" ); @@ -518,20 +597,12 @@ atomic_subtract_acq_64(volatile uint64_t __asm __volatile( "1: ldaxr %0, [%2] \n" " sub %0, %0, %3 \n" - " stlxr %w1, %0, [%2] \n" + " stxr %w1, %0, [%2] \n" " cbnz %w1, 1b \n" : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" ); } -static __inline void -atomic_store_rel_64(volatile uint64_t *p, uint64_t val) -{ - - dmb(); - *p = val; -} - #define atomic_add_acq_long atomic_add_acq_64 #define atomic_clear_acq_long atomic_add_acq_64 #define atomic_cmpset_acq_long atomic_cmpset_acq_64 @@ -550,21 +621,106 @@ atomic_store_rel_64(volatile uint64_t *p * TODO: The atomic functions currently are both acq and rel, we should fix * this. */ -#define atomic_add_rel_64 atomic_add_acq_64 -#define atomic_clear_rel_64 atomic_add_acq_64 -#define atomic_cmpset_rel_64 atomic_cmpset_acq_64 -#define atomic_set_rel_64 atomic_set_acq_64 -#define atomic_subtract_rel_64 atomic_subtract_acq_64 +static __inline void +atomic_add_rel_64(volatile uint64_t *p, uint64_t val) +{ + uint64_t tmp; + int res; + + __asm __volatile( + "1: ldxr %0, [%2] \n" + " add %0, %0, %3 \n" + " stlxr %w1, %0, [%2] \n" + " cbnz %w1, 1b \n" + "2:" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +static __inline void +atomic_clear_rel_64(volatile uint64_t *p, uint64_t val) +{ + uint64_t tmp; + int res; + + __asm __volatile( + "1: ldxr %0, [%2] \n" + " bic %0, %0, %3 \n" + " stlxr %w1, %0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +static __inline int +atomic_cmpset_rel_64(volatile uint64_t *p, uint64_t cmpval, uint64_t newval) +{ + uint64_t tmp; + int res; + + __asm __volatile( + "1: mov %w1, #1 \n" + " ldxr %0, [%2] \n" + " cmp %0, %3 \n" + " b.ne 2f \n" + " stlxr %w1, %4, [%2] \n" + " cbnz %w1, 1b \n" + "2:" + : "=&r" (tmp), "=&r" (res), "+r" (p), "+r" (cmpval), "+r" (newval) + : : "cc", "memory" + ); + + return (!res); +} + +static __inline void +atomic_set_rel_64(volatile uint64_t *p, uint64_t val) +{ + uint64_t tmp; + int res; + + __asm __volatile( + "1: ldxr %0, [%2] \n" + " orr %0, %0, %3 \n" + " stlxr %w1, %0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} + +static __inline void +atomic_store_rel_64(volatile uint64_t *p, uint64_t val) +{ + + __asm __volatile( + "stlr %0, [%1] \n" + : : "r" (val), "r" (p) : "memory"); +} + +static __inline void +atomic_subtract_rel_64(volatile uint64_t *p, uint64_t val) +{ + uint64_t tmp; + int res; + + __asm __volatile( + "1: ldxr %0, [%2] \n" + " sub %0, %0, %3 \n" + " stlxr %w1, %0, [%2] \n" + " cbnz %w1, 1b \n" + : "=&r"(tmp), "=&r"(res), "+r" (p), "+r" (val) : : "cc", "memory" + ); +} #define atomic_add_rel_long atomic_add_rel_64 -#define atomic_clear_rel_long atomic_add_rel_64 +#define atomic_clear_rel_long atomic_clear_rel_64 #define atomic_cmpset_rel_long atomic_cmpset_rel_64 #define atomic_set_rel_long atomic_set_rel_64 #define atomic_subtract_rel_long atomic_subtract_rel_64 #define atomic_store_rel_long atomic_store_rel_64 #define atomic_add_rel_ptr atomic_add_rel_64 -#define atomic_clear_rel_ptr atomic_add_rel_64 +#define atomic_clear_rel_ptr atomic_clear_rel_64 #define atomic_cmpset_rel_ptr atomic_cmpset_rel_64 #define atomic_set_rel_ptr atomic_set_rel_64 #define atomic_subtract_rel_ptr atomic_subtract_rel_64 Modified: projects/ifnet/sys/boot/efi/Makefile ============================================================================== --- projects/ifnet/sys/boot/efi/Makefile Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/Makefile Mon Apr 6 22:19:51 2015 (r281173) @@ -10,7 +10,7 @@ SUBDIR+= fdt .endif .endif -.if ${MACHINE_CPUARCH} == "amd64" +.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "arm" SUBDIR+= loader boot1 .endif Modified: projects/ifnet/sys/boot/efi/boot1/Makefile ============================================================================== --- projects/ifnet/sys/boot/efi/boot1/Makefile Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/boot1/Makefile Mon Apr 6 22:19:51 2015 (r281173) @@ -36,6 +36,14 @@ LDFLAGS= -Wl,-T${LDSCRIPT} -Wl,-Bsymboli LDFLAGS+= -Wl,-znocombreloc .endif +.if ${MACHINE_CPUARCH} == "arm" +# +# Add libstand for the __aeabi_* functions used by the compiler +# +DPADD+= ${LIBSTAND} +LDADD+= -lstand +.endif + ${PROG}: ${LDSCRIPT} OBJCOPY?= objcopy @@ -45,6 +53,8 @@ OBJDUMP?= objdump EFI_TARGET= efi-app-x86_64 .elif ${MACHINE_CPUARCH} == "i386" EFI_TARGET= efi-app-ia32 +.else +EFI_TARGET= binary .endif boot1.efi: loader.sym @@ -52,7 +62,7 @@ boot1.efi: loader.sym ${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*'; \ exit 1; \ fi - ${OBJCOPY} -j .text -j .sdata -j .data \ + ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ -j .dynamic -j .dynsym -j .rel.dyn \ -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} @@ -66,8 +76,8 @@ boot1.o: ${.CURDIR}/../../common/ufsread boot1.efifat: boot1.efi echo ${.OBJDIR} - uudecode ${.CURDIR}/fat.tmpl.bz2.uu - mv fat.tmpl.bz2 ${.TARGET}.bz2 + uudecode ${.CURDIR}/fat-${MACHINE_CPUARCH}.tmpl.bz2.uu + mv fat-${MACHINE_CPUARCH}.tmpl.bz2 ${.TARGET}.bz2 bzip2 -f -d ${.TARGET}.bz2 dd if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc Modified: projects/ifnet/sys/boot/efi/boot1/boot1.c ============================================================================== --- projects/ifnet/sys/boot/efi/boot1/boot1.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/boot1/boot1.c Mon Apr 6 22:19:51 2015 (r281173) @@ -59,8 +59,8 @@ static char *__ultoa(char *buf, u_long v static int domount(EFI_DEVICE_PATH *device, EFI_BLOCK_IO *blkio, int quiet); static void load(const char *fname); -EFI_SYSTEM_TABLE *systab; -EFI_HANDLE *image; +static EFI_SYSTEM_TABLE *systab; +static EFI_HANDLE *image; static void bcopy(const void *src, void *dst, size_t len) Copied: projects/ifnet/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu (from r281172, head/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ifnet/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu Mon Apr 6 22:19:51 2015 (r281173, copy of r281172, head/sys/boot/efi/boot1/fat-amd64.tmpl.bz2.uu) @@ -0,0 +1,20 @@ +FAT template boot filesystem created by generate-fat.sh +DO NOT EDIT +$FreeBSD$ +begin 644 fat-amd64.tmpl.bz2 +M0EIH.3%!629362AK*D(`&I+____[ZZKJZ_^N_ZO^Z_Z_OJ[L`4`!7I0$#&$" +M0$!$3&(<P`(;J*C:0E0E#30&AH`T````9#0```9````#)ZF0:,-3U/409,`) +M@`"8`C3",````$R:8F@P`C`````"24U,D>I-DTU,)ZAZ0VA-!M0T'J`>H#"9 +M'I#0-H&HQI&0&3&FH>H>*`JHHU3V]1%/4/2``T#0`!H``#0`````#1H,@``6 +M'1&G'&@?$6[T#A)?X8$A160"20BO#")0J4TB1*4GXF$B4I,&>43+=_?K=#3* +M6]<E0HE`UBF?(J%8BRF#?8OQ2'D)`)(EL2;F4.'R>R"ZNKJZI,9*68E8*E2Q +M4J5*E3'(1830A"$(12A-"<(0A#]VD)H0A"$,>I0FA"$(0I\>P^=F5:M6K5JU +M:DI3:64UN;[7%5B]Y-^\]@_K@B:N\/,5F%&H<\G#IXQXAEFC&D?![6%0'6MR +MX1@@%FC"FD`M7,/SXFNG:2`'-0<-C$8^+$N.7M1B,^6)9,DV9,0A\OL<:C"L +ML1V&,<\9YRB>XV#BG")'6NKRK^("UF2XO?_L!#29">MGDF$R3).!PX&%E,4C +M''=(FL1.`_3?CN@-IB2PI3!FF\<8X.X@D,>CA90I)#M$XRPNDFJELL<3=1?8 +M2B7\5Z64,!7Z;EEBW-MXN-4IJ@W$462]-*\YCR,-B,5[W?=3&L/U>SX,WV#\ +M\B`:I"'0Z)5"$1B.E)(K[5I4RS`%R$>Y\D0NR*,;<9CZ:^V3P(I?D<D#!UC) +D^M-HEE3SAN-8O0FQ$(`$(DF`?ZQ]'U2F_XNY(IPH2!0UE2$` +` +end Copied: projects/ifnet/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu (from r281172, head/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ifnet/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu Mon Apr 6 22:19:51 2015 (r281173, copy of r281172, head/sys/boot/efi/boot1/fat-arm.tmpl.bz2.uu) @@ -0,0 +1,26 @@ +FAT template boot filesystem created by generate-fat.sh +DO NOT EDIT +$FreeBSD$ +begin 644 fat-arm.tmpl.bz2 +M0EIH.3%!629365NH-?4`&T!_____ZZ[J[_ZN_ZO^J_Z[OJ_^J^J[^KZNKNNJ +MZNKNZOJ^P`+\#$``0`&AD:,@TTTT-&C30#$R&FF1H:!B&)D&F@```-&AB::# +M1HP0-,AD`T8F(TTP2JII&?^I5/]4`@TTT-&(T8FAB:&@T:8F(Q!@!`9,1DR9 +M`-,$:,FC)B&FC"8"#3"#(-,0`&AD:,@TTTT-&C30#$R&FF1H:!B&)D&F@``` +M-&AB::#1HP0-,AD`T8F(TTP*HI)D\DFDVC0AIIH]3(:-``80>HTTR!IH::#$ +M-`Q`:`/2:::&)IDP"/0$T:>IFD]$R8---3HUK2<PNK%<6\J]BA",-*(A%:0B +M(B#G5%F8B$$(68C_:!`A#OL<HAB+JZ6UHRRU>*K9].C:!IWS-2UK9M<WC]W[ +M+]QW,9%V2,?<"ZEO9B("$,I.0ZFE66K/,<N6+8ITS$J3))F2I4HJ5*E2I74J +M:$J5*E2I4JE5*I*I-2I4J5.;84I4J5*E2I6ZU4Q*E2I4J5+X<SOK,65E965D +MT:($(0A"$(0A"$(0C>.3@8,&#!@P8(0A"$(0@0A"$(0[;_L-&C1HT:-&B+YP +M,&#!@P8,$"$(0A"-?NW$*YY:V9IQ,:B93+AX^A7B),5HN_4JV=2\Y,:-+W'Q +MKQKVU7KA+YR'.:*V#48N-"7<`%:TT4D`/;N;SZM9X,V(@!D'=P==+O)9*\H8 +MI8W<L9:.AU[N;G"QEHLZBWB/2B.SKCGRM):%ZK3-2U3ZV1;%MUZX:^?X_Y@N +MM=0SN1R7Z\&PN,I8VVWKMS$1-X41%"V)-;+V9:MI5;.+M*TMZ]K7HQ-ALY1\ +M4LG)\#5/I7#7-D_1<KUPE\OW)<YEW=.GMJ%$MUF)TE9N)8[M[6LIEXF@H6?S +MW%U89M5M+:LW6(\?7Z6I:U4F>IM*Q<2E)KFG;%M&U;INV]<)Q%^P'*<]T6R; +M^7`P.+I+N(HA%=#(^Q0WVV0]=$2=5)>-XWKW7!95E7$<5QW)<IS6"PF@7&+H +M&<ETI.`9F48V7/E&??ROG%<9FU^Y#E.8W+GL%]#L7+U=^CY91Q\+`K'-WPF4 +M.2S[EM@S38.8YKG.@P6_83I,-<G1DPY84N-)VMWK,/!;AIJ&3E%&7B`0A,`& +3'65I7J6`B^?^+N2*<*$@MU!KZ@`` +` +end Modified: projects/ifnet/sys/boot/efi/boot1/generate-fat.sh ============================================================================== --- projects/ifnet/sys/boot/efi/boot1/generate-fat.sh Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/boot1/generate-fat.sh Mon Apr 6 22:19:51 2015 (r281173) @@ -17,18 +17,20 @@ BOOT1_SIZE=128k # # Known filenames -# amd64: BOOTx64.efi -# arm64: BOOTaa64.efi +# amd64: BOOTx64.efi +# aarch64: BOOTaa64.efi +# arm: BOOTarm.efi # -if [ -z "$1" ]; then - echo "Usage: $0 filename" +if [ -z "$2" ]; then + echo "Usage: $0 arch boot-filename" exit 1 fi -FILENAME=$1 +ARCH=$1 +FILENAME=$2 # Generate 800K FAT image -OUTPUT_FILE=fat.tmpl +OUTPUT_FILE=fat-${ARCH}.tmpl dd if=/dev/zero of=$OUTPUT_FILE bs=512 count=$FAT_SIZE DEVICE=`mdconfig -a -f $OUTPUT_FILE` Modified: projects/ifnet/sys/boot/efi/loader/Makefile ============================================================================== --- projects/ifnet/sys/boot/efi/loader/Makefile Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/loader/Makefile Mon Apr 6 22:19:51 2015 (r281173) @@ -87,6 +87,8 @@ OBJDUMP?= objdump EFI_TARGET= efi-app-x86_64 .elif ${MACHINE_CPUARCH} == "i386" EFI_TARGET= efi-app-ia32 +.else +EFI_TARGET= binary .endif loader.efi: loader.sym @@ -94,7 +96,7 @@ loader.efi: loader.sym ${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*'; \ exit 1; \ fi - ${OBJCOPY} -j .text -j .sdata -j .data \ + ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \ -j .dynamic -j .dynsym -j .rel.dyn \ -j .rela.dyn -j .reloc -j .eh_frame -j set_Xcommand_set \ --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET} Modified: projects/ifnet/sys/boot/efi/loader/bootinfo.c ============================================================================== --- projects/ifnet/sys/boot/efi/loader/bootinfo.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/loader/bootinfo.c Mon Apr 6 22:19:51 2015 (r281173) @@ -219,6 +219,9 @@ bi_copymodules(vm_offset_t addr) if (fp->f_args) MOD_ARGS(addr, fp->f_args, c); v = fp->f_addr; +#if defined(__arm__) + v -= __elfN(relocation_offset); +#endif MOD_ADDR(addr, v, c); v = fp->f_size; MOD_SIZE(addr, v, c); @@ -332,6 +335,21 @@ bi_load(char *args, vm_offset_t *modulep vm_offset_t dtbp; int dtb_size; #endif +#if defined(__arm__) + vm_offset_t vaddr; + int i; + /* + * These metadata addreses must be converted for kernel after + * relocation. + */ + uint32_t mdt[] = { + MODINFOMD_SSYM, MODINFOMD_ESYM, MODINFOMD_KERNEND, + MODINFOMD_ENVP, +#if defined(LOADER_FDT_SUPPORT) + MODINFOMD_DTBP +#endif + }; +#endif howto = bi_getboothowto(args); @@ -405,6 +423,22 @@ bi_load(char *args, vm_offset_t *modulep md = file_findmetadata(kfp, MODINFOMD_KERNEND); bcopy(&kernend, md->md_data, sizeof kernend); +#if defined(__arm__) + *modulep -= __elfN(relocation_offset); + + /* Do relocation fixup on metadata of each module. */ + for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { + for (i = 0; i < sizeof mdt / sizeof mdt[0]; i++) { + md = file_findmetadata(xp, mdt[i]); + if (md) { + bcopy(md->md_data, &vaddr, sizeof vaddr); + vaddr -= __elfN(relocation_offset); + bcopy(&vaddr, md->md_data, sizeof vaddr); + } + } + } +#endif + /* Copy module list and metadata. */ (void)bi_copymodules(addr); Modified: projects/ifnet/sys/boot/efi/loader/copy.c ============================================================================== --- projects/ifnet/sys/boot/efi/loader/copy.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/boot/efi/loader/copy.c Mon Apr 6 22:19:51 2015 (r281173) @@ -61,9 +61,21 @@ efi_copy_init(void) } staging_end = staging + STAGE_PAGES * 4096; +#ifdef __arm__ + /* Round the kernel load address to a 2MiB value */ + staging = roundup2(staging, 2 * 1024 * 1024); +#endif + return (0); } +void * +efi_translate(vm_offset_t ptr) +{ + + return ((void *)(ptr + stage_offset)); +} + ssize_t efi_copyin(const void *src, vm_offset_t dest, const size_t len) { Modified: projects/ifnet/sys/dev/acpica/acpi.c ============================================================================== --- projects/ifnet/sys/dev/acpica/acpi.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/dev/acpica/acpi.c Mon Apr 6 22:19:51 2015 (r281173) @@ -1151,7 +1151,7 @@ acpi_sysres_alloc(device_t dev) if (res != NULL) { rman_manage_region(rm, rman_get_start(res), rman_get_end(res)); rle->res = res; - } else + } else if (bootverbose) device_printf(dev, "reservation of %lx, %lx (%d) failed\n", rle->start, rle->count, rle->type); } Modified: projects/ifnet/sys/netinet6/ip6_forward.c ============================================================================== --- projects/ifnet/sys/netinet6/ip6_forward.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/netinet6/ip6_forward.c Mon Apr 6 22:19:51 2015 (r281173) @@ -537,22 +537,9 @@ again2: if (!IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst)) { m->m_flags |= M_SKIP_FIREWALL; /* If destination is now ourself drop to ip6_input(). */ - if (in6_localip(&ip6->ip6_dst)) { + if (in6_localip(&ip6->ip6_dst)) m->m_flags |= M_FASTFWD_OURS; - if (m->m_pkthdr.rcvif == NULL) - m->m_pkthdr.rcvif = V_loif; - if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) { - m->m_pkthdr.csum_flags |= - CSUM_DATA_VALID_IPV6 | CSUM_PSEUDO_HDR; - m->m_pkthdr.csum_data = 0xffff; - } -#ifdef SCTP - if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) - m->m_pkthdr.csum_flags |= CSUM_SCTP_VALID; -#endif - error = netisr_queue(NETISR_IPV6, m); - goto out; - } else + else goto again; /* Redo the routing table lookup. */ } Modified: projects/ifnet/sys/netinet6/ip6_mroute.c ============================================================================== --- projects/ifnet/sys/netinet6/ip6_mroute.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/netinet6/ip6_mroute.c Mon Apr 6 22:19:51 2015 (r281173) @@ -196,9 +196,34 @@ static struct mtx mfc6_mtx; static u_char n6expire[MF6CTBLSIZ]; static struct mif6 mif6table[MAXMIFS]; -SYSCTL_OPAQUE(_net_inet6_ip6, OID_AUTO, mif6table, CTLFLAG_RD, - &mif6table, sizeof(mif6table), "S,mif6[MAXMIFS]", - "IPv6 Multicast Interfaces (struct mif6[MAXMIFS], netinet6/ip6_mroute.h)"); +static int +sysctl_mif6table(SYSCTL_HANDLER_ARGS) +{ + struct mif6_sctl *out; + int error; + + out = malloc(sizeof(struct mif6_sctl) * MAXMIFS, M_TEMP, M_WAITOK); + for (int i = 0; i < MAXMIFS; i++) { + out[i].m6_flags = mif6table[i].m6_flags; + out[i].m6_rate_limit = mif6table[i].m6_rate_limit; + out[i].m6_lcl_addr = mif6table[i].m6_lcl_addr; + if (mif6table[i].m6_ifp != NULL) + out[i].m6_ifp = mif6table[i].m6_ifp->if_index; + else + out[i].m6_ifp = 0; + out[i].m6_pkt_in = mif6table[i].m6_pkt_in; + out[i].m6_pkt_out = mif6table[i].m6_pkt_out; + out[i].m6_bytes_in = mif6table[i].m6_bytes_in; + out[i].m6_bytes_out = mif6table[i].m6_bytes_out; + } + error = SYSCTL_OUT(req, out, sizeof(struct mif6_sctl) * MAXMIFS); + free(out, M_TEMP); + return (error); +} +SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, mif6table, CTLTYPE_OPAQUE | CTLFLAG_RD, + NULL, 0, sysctl_mif6table, "S,mif6_sctl[MAXMIFS]", + "IPv6 Multicast Interfaces (struct mif6_sctl[MAXMIFS], " + "netinet6/ip6_mroute.h)"); static struct mtx mif6_mtx; #define MIF6_LOCK() mtx_lock(&mif6_mtx) Modified: projects/ifnet/sys/netinet6/ip6_mroute.h ============================================================================== --- projects/ifnet/sys/netinet6/ip6_mroute.h Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/netinet6/ip6_mroute.h Mon Apr 6 22:19:51 2015 (r281173) @@ -194,6 +194,20 @@ struct sioc_mif_req6 { u_quad_t obytes; /* Output byte count on mif */ }; +/* + * Structure to export 'struct mif6' to userland via sysctl. + */ +struct mif6_sctl { + u_char m6_flags; /* MIFF_ flags defined above */ + u_int m6_rate_limit; /* max rate */ + struct in6_addr m6_lcl_addr; /* local interface address */ + uint32_t m6_ifp; /* interface index */ + u_quad_t m6_pkt_in; /* # pkts in on interface */ + u_quad_t m6_pkt_out; /* # pkts out on interface */ + u_quad_t m6_bytes_in; /* # bytes in on interface */ + u_quad_t m6_bytes_out; /* # bytes out on interface */ +}; + #if defined(_KERNEL) || defined(KERNEL) /* * The kernel's multicast-interface structure. Modified: projects/ifnet/sys/netpfil/pf/pf_norm.c ============================================================================== --- projects/ifnet/sys/netpfil/pf/pf_norm.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/netpfil/pf/pf_norm.c Mon Apr 6 22:19:51 2015 (r281173) @@ -1152,6 +1152,7 @@ pf_refragment6(struct ifnet *ifp, struct for (t = m; m; m = t) { t = m->m_nextpkt; m->m_nextpkt = NULL; + m->m_flags |= M_SKIP_FIREWALL; memset(&pd, 0, sizeof(pd)); pd.pf_mtag = pf_find_mtag(m); if (error == 0) Modified: projects/ifnet/sys/powerpc/powerpc/trap.c ============================================================================== --- projects/ifnet/sys/powerpc/powerpc/trap.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/powerpc/powerpc/trap.c Mon Apr 6 22:19:51 2015 (r281173) @@ -78,7 +78,7 @@ __FBSDID("$FreeBSD$"); #define FAULTBUF_R1 1 #define FAULTBUF_R2 2 #define FAULTBUF_CR 3 -#define FAULTBUF_R13 6 +#define FAULTBUF_R13 4 static void trap_fatal(struct trapframe *frame); static void printtrap(u_int vector, struct trapframe *frame, int isfatal, Modified: projects/ifnet/sys/sys/param.h ============================================================================== --- projects/ifnet/sys/sys/param.h Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/sys/param.h Mon Apr 6 22:19:51 2015 (r281173) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1100067 /* Master, propagated to newvers */ +#define __FreeBSD_version 1100068 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: projects/ifnet/sys/vm/uma_core.c ============================================================================== --- projects/ifnet/sys/vm/uma_core.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/sys/vm/uma_core.c Mon Apr 6 22:19:51 2015 (r281173) @@ -1822,7 +1822,7 @@ uma_startup(void *bootmem, int boot_page #endif args.name = "UMA Zones"; args.size = sizeof(struct uma_zone) + - (sizeof(struct uma_cache) * (mp_maxid + 1)); + (sizeof(struct uma_cache) * (mp_maxid)); args.ctor = zone_ctor; args.dtor = zone_dtor; args.uminit = zero_init; Modified: projects/ifnet/usr.bin/netstat/mroute6.c ============================================================================== --- projects/ifnet/usr.bin/netstat/mroute6.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/usr.bin/netstat/mroute6.c Mon Apr 6 22:19:51 2015 (r281173) @@ -79,13 +79,11 @@ __FBSDID("$FreeBSD$"); #include <sys/time.h> #include <net/if.h> -#include <net/if_var.h> #include <net/route.h> #include <netinet/in.h> #include <err.h> -#include <nlist.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> @@ -98,20 +96,6 @@ __FBSDID("$FreeBSD$"); #include "netstat.h" -/* - * kvm(3) bindings for every needed symbol - */ -static struct nlist mrl[] = { -#define N_MF6CTABLE 0 - { .n_name = "_mf6ctable" }, -#define N_MIF6TABLE 1 - { .n_name = "_mif6table" }, -#define N_MRT6STAT 2 - { .n_name = "_mrt6stat" }, - { .n_name = NULL }, -}; - - #define WID_ORG (Wflag ? 39 : (numeric_addr ? 29 : 18)) /* width of origin column */ #define WID_GRP (Wflag ? 18 : (numeric_addr ? 16 : 18)) /* width of group column */ @@ -119,11 +103,10 @@ void mroute6pr() { struct mf6c *mf6ctable[MF6CTBLSIZ], *mfcp; - struct mif6 mif6table[MAXMIFS]; + struct mif6_sctl mif6table[MAXMIFS]; struct mf6c mfc; struct rtdetq rte, *rtep; - struct mif6 *mifp; - u_long mfcaddr, mifaddr; + struct mif6_sctl *mifp; mifi_t mifi; int i; int banner_printed; @@ -132,39 +115,26 @@ mroute6pr() long int waitings; size_t len; - kresolve_list(mrl); - mfcaddr = mrl[N_MF6CTABLE].n_value; - mifaddr = mrl[N_MIF6TABLE].n_value; - - if (mfcaddr == 0 || mifaddr == 0) { - fprintf(stderr, "No IPv6 MROUTING kernel support.\n"); + if (live == 0) return; - } len = sizeof(mif6table); - if (live) { - if (sysctlbyname("net.inet6.ip6.mif6table", mif6table, &len, - NULL, 0) < 0) { - xo_warn("sysctl: net.inet6.ip6.mif6table"); - return; - } - } else - kread(mifaddr, (char *)mif6table, sizeof(mif6table)); + if (sysctlbyname("net.inet6.ip6.mif6table", mif6table, &len, NULL, 0) < + 0) { + xo_warn("sysctl: net.inet6.ip6.mif6table"); + return; + } saved_numeric_addr = numeric_addr; numeric_addr = 1; banner_printed = 0; for (mifi = 0, mifp = mif6table; mifi < MAXMIFS; ++mifi, ++mifp) { - struct ifnet ifnet; char ifname[IFNAMSIZ]; - if (mifp->m6_ifp == NULL) + if (mifp->m6_ifp == 0) continue; - /* XXX KVM */ - kread((u_long)mifp->m6_ifp, (char *)&ifnet, sizeof(ifnet)); - maxmif = mifi; if (!banner_printed) { xo_open_list("multicast-interface"); @@ -177,7 +147,7 @@ mroute6pr() xo_emit(" {:mif/%2u} {:rate-limit/%4d}", mifi, mifp->m6_rate_limit); xo_emit(" {:ifname/%5s}", (mifp->m6_flags & MIFF_REGISTER) ? - "reg0" : if_indextoname(ifnet.if_index, ifname)); + "reg0" : if_indextoname(mifp->m6_ifp, ifname)); xo_emit(" {:received-packets/%9ju} {:sent-packets/%9ju}\n", (uintmax_t)mifp->m6_pkt_in, @@ -190,14 +160,11 @@ mroute6pr() xo_emit("\n{T:IPv6 Multicast Interface Table is empty}\n"); len = sizeof(mf6ctable); - if (live) { - if (sysctlbyname("net.inet6.ip6.mf6ctable", mf6ctable, &len, - NULL, 0) < 0) { - xo_warn("sysctl: net.inet6.ip6.mf6ctable"); - return; - } - } else - kread(mfcaddr, (char *)mf6ctable, sizeof(mf6ctable)); + if (sysctlbyname("net.inet6.ip6.mf6ctable", mf6ctable, &len, NULL, 0) < + 0) { + xo_warn("sysctl: net.inet6.ip6.mf6ctable"); + return; + } banner_printed = 0; @@ -262,26 +229,14 @@ void mrt6_stats() { struct mrt6stat mrtstat; - u_long mstaddr; size_t len = sizeof mrtstat; - kresolve_list(mrl); - mstaddr = mrl[N_MRT6STAT].n_value; - - if (mstaddr == 0) { - fprintf(stderr, "No IPv6 MROUTING kernel support.\n"); + if (sysctlbyname("net.inet6.ip6.mrt6stat", &mrtstat, &len, NULL, 0) < + 0) { + xo_warn("sysctl: net.inet6.ip6.mrt6stat"); return; } - if (live) { - if (sysctlbyname("net.inet6.ip6.mrt6stat", &mrtstat, &len, - NULL, 0) < 0) { - xo_warn("sysctl: net.inet6.ip6.mrt6stat"); - return; - } - } else - kread(mstaddr, (char *)&mrtstat, sizeof(mrtstat)); - xo_open_container("multicast-statistics"); xo_emit("{T:IPv6 multicast forwarding}:\n"); Modified: projects/ifnet/usr.bin/netstat/netstat.1 ============================================================================== --- projects/ifnet/usr.bin/netstat/netstat.1 Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/usr.bin/netstat/netstat.1 Mon Apr 6 22:19:51 2015 (r281173) @@ -28,7 +28,7 @@ .\" @(#)netstat.1 8.8 (Berkeley) 4/18/94 .\" $FreeBSD$ .\" -.Dd February 21, 2015 +.Dd April 7, 2015 .Dt NETSTAT 1 .Os .Sh NAME @@ -92,8 +92,6 @@ .Op Fl -libxo .Op Fl 46W .Op Fl f Ar address_family -.Op Fl M Ar core -.Op Fl N Ar system .It Nm Fl gs .Op Fl -libxo .Op Fl 46s Modified: projects/ifnet/usr.sbin/acpi/acpiconf/acpiconf.c ============================================================================== --- projects/ifnet/usr.sbin/acpi/acpiconf/acpiconf.c Mon Apr 6 22:12:18 2015 (r281172) +++ projects/ifnet/usr.sbin/acpi/acpiconf/acpiconf.c Mon Apr 6 22:19:51 2015 (r281173) @@ -136,16 +136,30 @@ acpi_battinfo(int num) if (ioctl(acpifd, ACPIIO_BATT_GET_BATTINFO, &battio) == -1) err(EX_IOERR, "get battery user info (%d) failed", num); if (battio.battinfo.state != ACPI_BATT_STAT_NOT_PRESENT) { - printf("State:\t\t\t"); - if (battio.battinfo.state == 0) - printf("high "); - if (battio.battinfo.state & ACPI_BATT_STAT_CRITICAL) - printf("critical "); - if (battio.battinfo.state & ACPI_BATT_STAT_DISCHARG) - printf("discharging "); - if (battio.battinfo.state & ACPI_BATT_STAT_CHARGING) - printf("charging "); - printf("\n"); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504062219.t36MJqid096836>