Open Transport provides many STREAMS services for module and driver writers, but not all of these services may be used at interrupt time.
The following STREAMS functions may be safely called at interrupt time:
allocb adjmsg copyb copymsg dupb
dupmsg esballoc freeb freemsg linkb
msgdsize msgpullup pullupmsg rmbv testb
unlinkb datamsg OTHERQ RD WR
bzero bcopy bcmp putq
The putq function may be used only to put a packet onto its lower (read) queue. No other put operation is allows at interrupt time. In particular, the canput function and its variants, as well as the queue enabling and put functions, cannot be called at primary interrupt time.
The following Open Transport functions may be safely called at interrupt time:
OTCreateDeferredTask OTDestroyDeferredTask
OTScheduleDeferredTask OTGetClockTimeInSecs
OTGetTimeStamp OTSubtractTimeStamps
OTTimeStampInMilliseconds OTTimeStampInMicroseconds
OTElapsedMilliseconds OTElapsedMicroseconds
cmn_err OTAllocMsg OTAllocMem
OTFreeMem mi_timer_alloc mi_timer_free
mi_timer mi_timer_cancel
In addition, all functions described in Atomic Services may be called at interrupt time.