"execute a command" ioctl that takes a dictionary as an argument
(specifying the command and arguments) and returns a dictionary
with the results (error code, optional error message, optional
result data).
- Define and implement a "get-properties" command for DRVCTLCOMMAND
that returns the properties dictionary of the specified device.
- Add a -p flag to drvctl(8) to fetch and display the properties of
the specified device.
This is a great example of how to use prop_dictionary_sendrecv_ioctl().
plist-based messages and to eliminate looping previously required to
receive a plist from the kernel:
- prop_dictionary_copyin_ioctl() and prop_dictionary_copyout_ioctl()
now take the cmd argument rather than the file open flag. The
read-ness or write-ness of an ioctl command is checked by these
routines to ensure that information is being passed to/from the
userland component properly.
- prop_dictionary_copyout_ioctl() now allocates the memory for the
XML plist on behalf of the userland component by way of uvm_mmap().
The XML plist is copied out to the newly-mapped anonymous region,
and the pointer returned via the plistref.
- prop_dictionary_recv_ioctl() is responsible for munmap()'ing the
region after parsing the XML plist into internal represenatation.
- A new prop_dictionary_sendrecv_ioctl() is added, allowing user space
code to send a dictionary to the kernel and receive one back as a
reply.
Update users of prop_kern for the API changes (Bluetooth).
This constitutes an ABI / protocol change -- but this will also be put
into NetBSD 4.0 so that the first proplib release will implement the new
scheme.
instead of just vnode pointers. Fixes erroneous "does not match mounted
device" errors from mount(8) in the presence of MFS /dev, init.root, &c.
No objections on tech-kern.
echos this "non-error" message (not even tulip.c). Included is an
explanatory message stating that these counters should probably all be
converted to evcnt counters.
to do with the security model used. Move back the call to spec_open(),
which can now return the real return value from vfs_mountedon() (EBUSY)
and not EPERM, changing semantics.
of available test candidates. It uses the previously unused (as far as I
can tell) Timer D, in freerunning mode. It only uses a 1/200 prescaler
(20KHz), as anything faster would roll over too fast for the system timer.
(Gotta love 8-bit resolution timers!) Approved for untested commit by core@.
This gets rid of the now-unneded "todclock" and "todservice" attributes
from the footbridge device files, which should allow netwinder to build
again after its conversion to generic TODR.
Resulting kernel verified to boot up OK on gxemul (after my recent
fixes of the gxemul package to emulate free-running timers).
- add a new entry point for idle called idle_switch that is called by
cpu_switch() in the MP case when sched_whichqs is zero, properly
setting up the idle stack. from petrov@ via martin@.
- for the IPI case, avoid loading the address of intrlev into %g3
- remove some NOT_DEBUG code
- load the interrupt argument #2 in the delay slot
this removes 2 nops during interrupt processing for the normal
case, and an additional 2 ALU instructions for IPIs
- initialise bootcpu->ci_{cpcb,initstack}/proc0paddr from the
idle u area.
pmap_extract():
- make this work on the kernel interrupt stack as well
both of these are from petrov@ via martin@.
pmap_update(): XXX mark the MULTIPROCESSOR call to smp_tlb_flush_all().
so replace a branch with a 'sir'
- in #if 0 code, in sparc64_ipi_flush_pte() and sparc64_ipi_flush_ctx()
save/restore the out registers that the sp_tlb_flush_xxx() versions
around calling them
- in sp_tlb_flush_pte() and sp_tlb_flush_ctx(), replace global register
usage with out registers so that we don't clobber the (alternate)
global registers when these are called from IPI context
now since some chipset revisions will freak out on the aparent
half-initialisation. Even on my machine i can't seem to get the SPDIF led
to light up so something is wrong.
Also delay the setting of the DMA bits until after the codec detection but
before the enabling of interrupts. Note that the dma has to be explicitly
started when the device is opened.