Messages that are not understood by the drivers should be freed.
A driver must process an
M_IOCTL(D7str)
message.
Otherwise, the Stream head blocks
for an M_IOCNAK or M_IOCACK until
the timeout (potentially infinite) expires.
If a driver does not understand an ioctl,
it must send an
M_IOCNAK(D7str)
message upstream.
DDI terminal drivers must always acknowledge
the EUCioctls,
whether they understand them or not.
If a driver wants to allocate a controlling terminal,
it should send an M_SETOPTS
message with the SO_ISTTY flag set upstream.
A driver must be a part of the kernel for it to be opened.
A multithreaded driver is responsible for
protecting driver-specific data against multiprocessor race conditions.