|
|
Each multithreaded driver must register itself to the kernel as multithreaded. This should be done when the driver is initialized, usually in the init(D2oddi) routine, although it can also be done in the open(D2oddi) routine as long as it is only executed once. The following kernel functions are used for this:
Function | Use |
---|---|
all_io(D3oddi) | check if CPUs can access the I/O bus |
bdistributed(D3oddi) | register the task-time level of a block driver as multithreaded |
cdistributed(D3oddi) | register the task-time level of a character driver as multithreaded |
can_doio(D3oddi) | check if the current CPU can access the I/O bus |
idistributed(D3oddi) | register the interrupt handler of a driver as multithreaded |
iopolldistributed(D3oddi) | register the poll(D2oddi) routine of a driver as multithreaded |
intralloc(D3oddi) | allocate an interprocessor interrupt used to locate the proper start(D2oddi) routine for a block driver |
ldistributed(D3oddi) | register a line discipline as multithreaded |
scsi_distributed(D3osdi) | register the task-time level of a SCSI driver as multithreaded |
sdistributed(D3oddi) | register the task-time level of a STREAMS driver as multithreaded |
Sharegister(D3osdi) | register the interrupt handler of a SCSI driver as multithreaded |