Date: Fri, 18 May 2012 16:07:47 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 211334 for review Message-ID: <201205181607.q4IG7l8b007172@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@211334?ac=10 Change 211334 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/05/18 16:07:29 Integrate the CheriBSD branch to pick up the last few week of work on BeriBSD: syscons text console, new video and touch screen drivers, MIPS fixes, support for multi-user mode, Avalon generic driver, and much general fixery to use FreeBSD on BERI MIPS. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/etc/etc.mips/ttys#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/conf/NOTES#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/conf/files.mips#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/conf/options#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.h#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/fb/fbreg.h#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/gxemul/cons/gxemul_cons.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/schistory.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/scterm-teken.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/syscons.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl.h#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_nexus.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_pixel.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_reg.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_syscons.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtl/terasic_mtl_text.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtllcd/terasic_mtllcd.c#2 delete .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtllcd/terasic_mtllcd.h#2 delete .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/mtllcd/terasic_mtllcd_nexus.c#2 delete .. //depot/projects/ctsrd/cheribsd/src/sys/kern/init_main.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/files.beri#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/gxemul_cons.c#2 delete .. //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/std.beri#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI.hints#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_MDROOT#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SDROOT#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/GXEMUL#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/GXEMUL.hints#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/mips/gxemul/files.gxemul#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/mips/gxemul/gxemul_machdep.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/mips/gxemul/std.gxemul#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/mips/include/sc_machdep.h#1 branch .. //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/bus_space_generic.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/sc_machdep.c#1 branch Differences ... ==== //depot/projects/ctsrd/cheribsd/src/etc/etc.mips/ttys#2 (text+ko) ==== @@ -28,6 +28,17 @@ # If console is marked "insecure", then init will ask for the root password # when going to single-user mode. console none unknown off secure +# +ttyv0 "/usr/libexec/getty Pc" xterm on secure +# Virtual terminals +ttyv1 "/usr/libexec/getty Pc" xterm off secure +ttyv2 "/usr/libexec/getty Pc" xterm off secure +ttyv3 "/usr/libexec/getty Pc" xterm off secure +ttyv4 "/usr/libexec/getty Pc" xterm off secure +ttyv5 "/usr/libexec/getty Pc" xterm off secure +ttyv6 "/usr/libexec/getty Pc" xterm off secure +ttyv7 "/usr/libexec/getty Pc" xterm off secure +ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. ttyu0 "/usr/libexec/getty std.115200" dialup on secure ==== //depot/projects/ctsrd/cheribsd/src/sys/conf/NOTES#2 (text+ko) ==== @@ -139,6 +139,12 @@ # options INCLUDE_CONFIG_FILE # Include this file in kernel +# +# Compile-time defaults for various boot parameters +# +options BOOTVERBOSE=1 +options BOOTHOWTO=RB_MULTIPLE + options GEOM_AES # Don't use, use GEOM_BDE options GEOM_BDE # Disk encryption. options GEOM_BSD # BSD disklabels ==== //depot/projects/ctsrd/cheribsd/src/sys/conf/files.mips#2 (text+ko) ==== @@ -126,3 +126,9 @@ dev/fdt/fdt_mips.c optional fdt +dev/fb/fb.c optional sc +dev/kbd/kbd.c optional sc +dev/syscons/scgfbrndr.c optional sc +dev/syscons/scterm-teken.c optional sc +dev/syscons/scvtb.c optional sc +mips/mips/sc_machdep.c optional sc ==== //depot/projects/ctsrd/cheribsd/src/sys/conf/options#2 (text+ko) ==== @@ -66,6 +66,8 @@ ADAPTIVE_LOCKMGRS ALQ AUDIT opt_global.h +BOOTHOWTO opt_global.h +BOOTVERBOSE opt_global.h CAPABILITIES opt_capsicum.h CAPABILITY_MODE opt_capsicum.h CODA_COMPAT_5 opt_coda.h ==== //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#2 (text+ko) ==== @@ -55,6 +55,10 @@ CFE_ENV opt_global.h CFE_ENV_SIZE opt_global.h +GFB_DEBUG opt_gfb.h +GFB_NO_FONT_LOADING opt_gfb.h +GFB_NO_MODE_CHANGE opt_gfb.h + NOFPU opt_global.h TICK_USE_YAMON_FREQ opt_global.h ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.c#2 (text+ko) ==== @@ -37,6 +37,7 @@ #include <sys/kdb.h> #include <sys/systm.h> #include <sys/kernel.h> +#include <sys/reboot.h> #include <sys/tty.h> #include <ddb/ddb.h> @@ -297,7 +298,7 @@ { sprintf(cp->cn_name, "ttyu0"); - cp->cn_pri = CN_NORMAL; + cp->cn_pri = (boothowto & RB_SERIAL) ? CN_REMOTE : CN_NORMAL; } static void ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/fb/fbreg.h#2 (text+ko) ==== @@ -84,6 +84,29 @@ u_int16_t ofwfb_readw(u_int16_t *addr); void ofwfb_writew(u_int16_t *addr, u_int16_t val); +#elif defined(__mips__) + +/* + * Use amd64/i386-like settings under the assumption that MIPS-based display + * drivers will have to add a level of indirection between a syscons-managed + * frame buffer and the actual video hardware. We are forced to do this + * because syscons doesn't carry around required busspace handles and tags to + * use here. This is only really a problem for true VGA devices hooked up to + * MIPS, as others will be performing a translation anyway. + */ +#define bcopy_io(s, d, c) memcpy((void *)(d), (void *)(s), (c)) +#define bcopy_toio(s, d, c) memcpy((void *)(d), (void *)(s), (c)) +#define bcopy_fromio(s, d, c) memcpy((void *)(d), (void *)(s), (c)) +#define bzero_io(d, c) memset((void *)(d), 0, (c)) +#define fill_io(p, d, c) memset((void *)(d), (p), (c)) +static __inline void +fillw(int val, uint16_t *buf, size_t size) +{ + while (size--) + *buf++ = val; +} +#define fillw_io(p, d, c) fillw((p), (void *)(d), (c)) + #else /* !__i386__ && !__amd64__ && !__ia64__ && !__sparc64__ && !__powerpc__ */ #define bcopy_io(s, d, c) memcpy_io((d), (s), (c)) #define bcopy_toio(s, d, c) memcpy_toio((d), (void *)(s), (c)) ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/schistory.c#2 (text+ko) ==== @@ -42,7 +42,7 @@ #include <sys/kernel.h> #include <sys/malloc.h> -#if defined(__sparc64__) || defined(__powerpc__) +#if defined(__sparc64__) || defined(__powerpc__) || defined(__mips__) #include <machine/sc_machdep.h> #else #include <machine/pc/display.h> ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/scterm-teken.c#2 (text+ko) ==== @@ -40,7 +40,7 @@ #include <sys/consio.h> #include <sys/kbio.h> -#if defined(__sparc64__) || defined(__powerpc__) +#if defined(__sparc64__) || defined(__powerpc__) || defined(__mips__) #include <machine/sc_machdep.h> #else #include <machine/pc/display.h> ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/syscons/syscons.c#2 (text+ko) ==== @@ -62,7 +62,7 @@ #include <sys/power.h> #include <machine/clock.h> -#if defined(__sparc64__) || defined(__powerpc__) +#if defined(__sparc64__) || defined(__powerpc__) || defined(__mips__) #include <machine/sc_machdep.h> #else #include <machine/pc/display.h> ==== //depot/projects/ctsrd/cheribsd/src/sys/kern/init_main.c#2 (text+ko) ==== @@ -101,10 +101,17 @@ struct vmspace vmspace0; struct proc *initproc; -int boothowto = 0; /* initialized so that it can be patched */ +#ifndef BOOTHOWTO +#define BOOTHOWTO 0 +#endif +int boothowto = BOOTHOWTO; /* initialized so that it can be patched */ SYSCTL_INT(_debug, OID_AUTO, boothowto, CTLFLAG_RD, &boothowto, 0, "Boot control flags, passed from loader"); -int bootverbose; + +#ifndef BOOTVERBOSE +#define BOOTVERBOSE 0 +#endif +int bootverbose = BOOTVERBOSE; SYSCTL_INT(_debug, OID_AUTO, bootverbose, CTLFLAG_RW, &bootverbose, 0, "Control the output of verbose kernel messages"); ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/files.beri#2 (text+ko) ==== @@ -1,4 +1,5 @@ # $FreeBSD$ +dev/altera/avgen/altera_avgen.c optional altera_avgen dev/altera/jtag_uart/altera_jtag_uart.c optional altera_jtag_uart dev/altera/sdcard/altera_sdcard.c optional altera_sdcard dev/altera/sdcard/altera_sdcard_disk.c optional altera_sdcard @@ -6,9 +7,12 @@ dev/altera/sdcard/altera_sdcard_nexus.c optional altera_sdcard dev/terasic/de4led/terasic_de4led.c optional terasic_de4led dev/terasic/de4led/terasic_de4led_nexus.c optional terasic_de4led -dev/terasic/mtllcd/terasic_mtllcd.c optional terasic_mtllcd -dev/terasic/mtllcd/terasic_mtllcd_nexus.c optional terasic_mtllcd +dev/terasic/mtl/terasic_mtl.c optional terasic_mtl +dev/terasic/mtl/terasic_mtl_nexus.c optional terasic_mtl +dev/terasic/mtl/terasic_mtl_pixel.c optional terasic_mtl +dev/terasic/mtl/terasic_mtl_reg.c optional terasic_mtl +dev/terasic/mtl/terasic_mtl_syscons.c optional terasic_mtl +dev/terasic/mtl/terasic_mtl_text.c optional terasic_mtl mips/beri/beri_machdep.c standard -mips/beri/gxemul_cons.c optional gxemul_cons mips/mips/intr_machdep.c standard mips/mips/tick.c standard ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/beri/std.beri#2 (text+ko) ==== ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI.hints#2 (text+ko) ==== @@ -24,6 +24,21 @@ # # Terasic Multi-touch LCD (MTL), an optional feature in DE-4 configurations # -hint.terasic_mtllcd.0.at="nexus0" -hint.terasic_mtllcd.0.maddr=0x7f800000 -hint.terasic_mtllcd.0.msize=0x800000 +hint.terasic_mtl.0.at="nexus0" +hint.terasic_mtl.0.reg_maddr=0x70400000 +hint.terasic_mtl.0.reg_msize=0x1000 +hint.terasic_mtl.0.pixel_maddr=0x70000000 +hint.terasic_mtl.0.pixel_msize=0x177000 +hint.terasic_mtl.0.text_maddr=0x70177000 +hint.terasic_mtl.0.text_msize=0x2000 + +# +# Expose the DE4 flash via an Avalon "generic" device. +# +hint.altera_avgen.0.at="nexus0" +hint.altera_avgen.0.maddr=0x74000000 +hint.altera_avgen.0.msize=0x4000000 +hint.altera_avgen.0.width=2 +hint.altera_avgen.0.fileio="rw" +hint.altera_avgen.0.mmapio="rwx" +hint.altera_avgen.0.devname="de4flash" ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_MDROOT#2 (text+ko) ==== @@ -33,6 +33,11 @@ options FFS #Berkeley Fast Filesystem +options INET +options INET6 +options NFSCL +options NFS_ROOT + # Debugging for use in -current #options DEADLKRES #Enable the deadlock resolver options INVARIANTS #Enable calls of extra sanity checking @@ -49,11 +54,15 @@ makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img options ROOTDEVNAME=\"ufs:md0\" +device altera_avgen device altera_jtag_uart device altera_sdcard device terasic_de4led -device terasic_mtllcd +device terasic_mtl device md +device ether device loop device random +device sc +device snp ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SDROOT#2 (text+ko) ==== @@ -32,6 +32,11 @@ options FFS #Berkeley Fast Filesystem +options INET +options INET6 +options NFSCL +options NFS_ROOT + # Debugging for use in -current #options DEADLKRES #Enable the deadlock resolver options INVARIANTS #Enable calls of extra sanity checking @@ -41,11 +46,15 @@ options ROOTDEVNAME=\"ufs:altera_sdcard0\" +device altera_avgen device altera_jtag_uart device altera_sdcard device terasic_de4led -device terasic_mtllcd +device terasic_mtl device md +device ether device loop device random +device sc +device snp ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/GXEMUL#2 (text+ko) ==== @@ -1,5 +1,52 @@ -include BERI -ident GXEMUL +# +# GXEMUL "oldtestmips" sample kernel configuration. +# +# $FreeBSD$ +# + +ident GXEMUL + +machine mips mips64eb +cpu CPU_MIPS4KC + +options HZ=100 + +makeoptions ARCH_FLAGS="-march=mips64 -mabi=64" + +makeoptions KERNLOADADDR=0xffffffff80100000 + +include "../gxemul/std.gxemul" + +hints "GXEMUL.hints" #Default places to look for devices. + +makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols + +makeoptions MODULES_OVERRIDE="" + +options DDB +options KDB + +options SCHED_ULE + +options FFS #Berkeley Fast Filesystem + +# Debugging for use in -current +#options DEADLKRES #Enable the deadlock resolver +options INVARIANTS #Enable calls of extra sanity checking +options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS +#options WITNESS #Enable checks to detect deadlocks and cycles +#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed + +# +# This kernel configuration uses an embedded 8MB memory root file system. +# Adjust the following path based on local requirements. +# +options MD_ROOT # MD is a potential root device +options MD_ROOT_SIZE=8192 +#makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img +options ROOTDEVNAME=\"ufs:md0\" -nodevice altera_jtag_uart device gxemul_cons +device md +device loop +device random ==== //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/bus_space_generic.c#2 (text+ko) ==== @@ -99,8 +99,8 @@ generic_bs_subregion, /* allocation/deallocation */ - NULL, - NULL, + generic_bs_alloc, + generic_bs_free, /* barrier */ generic_bs_barrier, @@ -109,91 +109,91 @@ generic_bs_r_1, generic_bs_r_2, generic_bs_r_4, - NULL, + generic_bs_r_8, /* read multiple */ generic_bs_rm_1, generic_bs_rm_2, generic_bs_rm_4, - NULL, + generic_bs_rm_8, /* read region */ generic_bs_rr_1, generic_bs_rr_2, generic_bs_rr_4, - NULL, + generic_bs_rr_8, /* write (single) */ generic_bs_w_1, generic_bs_w_2, generic_bs_w_4, - NULL, + generic_bs_w_8, /* write multiple */ generic_bs_wm_1, generic_bs_wm_2, generic_bs_wm_4, - NULL, + generic_bs_wm_8, /* write region */ generic_bs_wr_1, generic_bs_wr_2, generic_bs_wr_4, - NULL, + generic_bs_wr_8, /* set multiple */ - NULL, - NULL, - NULL, - NULL, + generic_bs_sm_1, + generic_bs_sm_2, + generic_bs_sm_4, + generic_bs_sm_8, /* set region */ generic_bs_sr_1, generic_bs_sr_2, generic_bs_sr_4, - NULL, + generic_bs_sr_8, /* copy */ generic_bs_c_1, generic_bs_c_2, generic_bs_c_4, - NULL, + generic_bs_c_8, /* read (single) stream */ generic_bs_r_1, generic_bs_r_2, generic_bs_r_4, - NULL, + generic_bs_r_8, /* read multiple stream */ generic_bs_rm_1, generic_bs_rm_2, generic_bs_rm_4, - NULL, + generic_bs_rm_8, /* read region stream */ generic_bs_rr_1, generic_bs_rr_2, generic_bs_rr_4, - NULL, + generic_bs_rr_8, /* write (single) stream */ generic_bs_w_1, generic_bs_w_2, generic_bs_w_4, - NULL, + generic_bs_w_8, /* write multiple stream */ generic_bs_wm_1, generic_bs_wm_2, generic_bs_wm_4, - NULL, + generic_bs_wm_8, /* write region stream */ generic_bs_wr_1, generic_bs_wr_2, generic_bs_wr_4, - NULL, + generic_bs_wr_8, }; /* Ultra-gross kludge */ @@ -254,6 +254,22 @@ return (0); } +int +generic_bs_alloc(void *t, bus_addr_t rstart, bus_addr_t rend, + bus_size_t size, bus_size_t alignment, bus_size_t boundary, int flags, + bus_addr_t *bpap, bus_space_handle_t *bshp) +{ + + panic("%s: not implemented", __func__); +} + +void +generic_bs_free(void *t, bus_space_handle_t bsh, bus_size_t size) +{ + + panic("%s: not implemented", __func__); +} + uint8_t generic_bs_r_1(void *t, bus_space_handle_t handle, bus_size_t offset) @@ -278,7 +294,13 @@ return (rd32(handle + offset)); } +uint64_t +generic_bs_r_8(void *t, bus_space_handle_t handle, bus_size_t offset) +{ + panic("%s: not implemented", __func__); +} + void generic_bs_rm_1(void *t, bus_space_handle_t bsh, bus_size_t offset, uint8_t *addr, size_t count) @@ -308,6 +330,13 @@ *addr++ = rd32(baddr); } +void +generic_bs_rm_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + uint64_t *addr, size_t count) +{ + + panic("%s: not implemented", __func__); +} /* * Read `count' 1, 2, 4, or 8 byte quantities from bus space @@ -350,6 +379,14 @@ } } +void +generic_bs_rr_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + uint64_t *addr, size_t count) +{ + + panic("%s: not implemented", __func__); +} + /* * Write the 1, 2, 4, or 8 byte value `value' to bus space * described by tag/handle/offset. @@ -378,6 +415,14 @@ wr32(bsh + offset, value); } +void +generic_bs_w_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + uint64_t value) +{ + + panic("%s: not implemented", __func__); +} + /* * Write `count' 1, 2, 4, or 8 byte quantities from the buffer * provided to bus space described by tag/handle/offset. @@ -412,6 +457,14 @@ wr32(baddr, *addr++); } +void +generic_bs_wm_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + const uint64_t *addr, size_t count) +{ + + panic("%s: not implemented", __func__); +} + /* * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided * to bus space described by tag/handle starting at `offset'. @@ -452,6 +505,14 @@ } } +void +generic_bs_wr_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + const uint64_t *addr, size_t count) +{ + + panic("%s: not implemented", __func__); +} + /* * Write the 1, 2, 4, or 8 byte value `val' to bus space described * by tag/handle/offset `count' times. @@ -486,6 +547,14 @@ wr32(addr, value); } +void +generic_bs_sm_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + uint64_t value, size_t count) +{ + + panic("%s: not implemented", __func__); +} + /* * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described * by tag/handle starting at `offset'. @@ -520,6 +589,14 @@ wr32(addr, value); } +void +generic_bs_sr_8(void *t, bus_space_handle_t bsh, bus_size_t offset, + uint64_t value, size_t count) +{ + + panic("%s: not implemented", __func__); +} + /* * Copy `count' 1, 2, 4, or 8 byte values from bus space starting * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. @@ -585,6 +662,14 @@ } void +generic_bs_c_8(void *t, bus_space_handle_t bsh1, bus_size_t off1, + bus_space_handle_t bsh2, bus_size_t off2, size_t count) +{ + + panic("%s: not implemented", __func__); +} + +void generic_bs_barrier(void *t __unused, bus_space_handle_t bsh __unused, bus_size_t offset __unused, bus_size_t len __unused,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205181607.q4IG7l8b007172>