dc74fbbf85
initial work, and every one else who has tested things for me. this is largely my fault at this point :-) the main changes are something like: - usbd_bus_methods{} gains a get_lock() to enable the host controller to provide a lock for the USB code. if the lock isn't provided, old-style protection is (partially) applied. - ehci/ohci/uhci have been converted to the new interfaces, including mutex/cv/etc conversion. - usbdivar.h contains a discussion about locking and what locks are held for which method calls. more to come for usbdi(9) here. - audio drivers (uaudio, umidi, auvitek) have been properly SMPified now that USB is ready. - scsi drivers have been modified to take the kernel lock explicitly before calling into scsi code. - usb pipes are associated with a lock, that is the same as the controller lock. (this could be split up further in the future.) - several usbfoo_locked() or usbfoo_unlocked() functions have been added to the usbdi(9) to enable functionality with or without the USB lock (per controller) already being held. the TODO.usbmp file has specific details on what is left to do, including what device-specific changes should be done now that the whole framework is ready.
$NetBSD: README.dirs,v 1.11 2010/05/11 11:58:14 pooka Exp $ The following is a quick rundown of the current directory structure. First, components in the kernel namespace, i.e. compiled with -D_KERNEL sys/rump/librump - kernel runtime emulation /rumpkern - kernel core, e.g. syscall, interrupt and lock support /rumpcrypto - kernel cryptographic routines /rumpdev - device support, e.g. autoconf subsystem /rumpnet - networking support and sockets layer /rumpvfs - file system support sys/rump/include /machine - used for architectures where the rump ABI is not yet the same as the kernel module ABI. will eventually disappear completely /rump - rump headers installed to userspace sys/rump/dev - device components, e.g. audio, raidframe, usb drivers sys/rump/fs - file system components /lib/lib${fs} - kernel file system code sys/rump/net - networking components /lib/libnet - subroutines from sys/net, e.g. route and if_ethersubr /lib/libnetinet - TCP/IP /lib/libvirtif - a virtual interface which uses host tap(4) to shovel packets. This is used by netinet and if_ethersubr. /lib/libsockin - implements PF_INET using host kernel sockets. This is mutually exclusive with net, netinet and virtif. The rest are out-of-kernel components (i.e. no -D_KERNEL) related to rump. hypercall interface: src/lib/librumpuser The "rumpuser" set of interfaces is used by rump to communicate with the host. Users: src/lib /libp2k - puffs-to-vfs adaption layer, userspace namespace /libukfs - user kernel file system, a library to access file system images (or devices) directly in userspace without going through a system call and puffs. It provides a slightly higher interface than pure rump syscalls. src/usr.sbin/puffs rump_$fs - userspace file system daemons using the kernel fs code src/share/examples/rump Various examples detailing use of rump in different scenarios. These are provided source-only.