The DKI interface defines all services provided by the microkernel to driver components. Following the layered interface model, all services implemented by the DKI are called by the drivers, and take place in the microkernel.
The DKI provides two types of services:
Common DKI services common to all platforms and processors, usable by all drivers, no matter what layer in the hierarchical model they inhabit. These services are globally designated by the DKI class name.
Processor family specific DKI (FDKI) services.
Common DKI services cover:
Synchronization through the DKI thread
Device tree
Driver registry
Device registry
General purpose memory allocation
Timeout
Precise busy wait
Special-purpose physical memory allocation
System event management
Global interrupts masking
Specific I/O services
Processor family specific DKI (FDKI) services cover:
Processor interrupts management
Processor caches management
Processor specific I/O services
Physical to virtual memory mapping
All DKI services are implemented as part of the embedded system library (libebd.s.a). Most of them are implemented as microkernel system calls. The intro(9DKI) man page gives an entry point to a detailed description of all DKI APIs.
The DKI API is summarized in the following table:
Function |
Description |
---|---|
dataCacheBlockFlush() |
Cache management |
dataCacheBlockFlush_powerpc() |
PowerPC cache management |
dataCacheBlockInvalidate() |
Cache management |
dataCacheBlockInvalidate_powerpc() |
PowerPC cache management |
dataCacheBlockInvalidate() |
Cache management |
dataCacheBlockInvalidate_powerpc() |
PowerPC cache management |
dataCacheInvalidate() |
Cache management |
dataCacheInvalidate_powerpc() |
PowerPC cache management |
dcacheBlockFlush() |
Cache management |
dcacheBlockFlush_usparc() |
UltraSPARC cache management |
dcacheFlush() |
Cache management |
dcacheFlush_usparc() |
UltraSPARC cache management |
dcacheLineFlush() |
Cache management |
dcacheLineFlush_usparc() |
UltraSPARC cache management |
DISABLE_PREEMPT() |
Thread preemption disabling |
dtreeNodeAlloc() |
Device tree operations |
dtreeNodeChild() |
Device tree operations |
dtreeNodeDetach() |
Device tree operations |
dtreeNodeFind() |
Device tree operations |
dtreeNodeFree() |
Device tree operations |
dtreeNodeFree() |
Device tree operations |
dtreeNodePeer() |
Device tree operations |
dtreeNodeRoot() |
Device tree operations |
dtreePropAdd() |
Device tree operations |
dtreePropAlloc() |
Device tree operations |
dtreePropAttach() |
Device tree operations |
dtreePropDetach() |
Device tree operations |
dtreePropFind() |
Device tree operations |
dtreePropFindNext() |
Device tree operations |
dtreePropFree() |
Device tree operations |
dtreePropLength() |
Device tree operations |
dtreePropName() |
Device tree operations |
dtreePropValue() |
Device tree operations |
eieio() |
I/O services |
eieio_powerpc() |
PowerPC specific I/O services |
ENABLE_PREEMPT() |
Thread preemption enabling |
hrt() |
High Resolution Timer |
icacheBlockInval() |
Cache management |
icacheBlockInval_usparc() |
UltraSPARC cache management |
icacheInval() |
Cache management |
icacheInval_usparc() |
UltraSPARC cache management |
icacheLineInval() |
Cache management |
icacheLineInval_usparc() |
UltraSPARC cache management |
imsIntrMask_f() |
Global interrupt masking |
imsIntrUnmask_f() |
Global interrupt masking |
instCacheBlockInvalidate() |
Cache management |
instCacheBlockInvalidate_powerpc() |
PowerPC cache management |
instCacheBlockInvalidate_powerpc() |
PowerPC cache management |
instCacheInvalidate() |
Cache management |
instCacheInvalidate_powerpc() |
PowerPC cache management |
ioLoad16() |
I/O services |
ioLoad16_x86() |
Intel x86 specific I/O services |
ioLoad32() |
I/O services |
ioLoad32_x86() |
Intel x86 specific I/O services |
ioLoad8() |
I/O services |
ioLoad8_x86() |
Intel x86 specific I/O services |
ioRead16() |
I/O services |
ioRead16_x86() |
Intel x86 specific I/O services |
ioRead32() |
I/O services |
ioRead32_x86() |
Intel x86 specific I/O services |
ioRead8() |
I/O services |
ioRead8_x86() |
Intel x86 specific I/O services |
ioStore16() |
I/O services |
ioStore16_x86() |
Intel x86 specific I/O services |
ioStore32() |
I/O services |
ioStore32_x86() |
Intel x86 specific I/O services |
ioStore8() |
I/O services |
ioStore8_x86() |
Intel x86 specific I/O services |
ioWrite16() |
I/O services |
ioWrite16_x86() |
Intel x86 specific I/O services |
ioWrite32() |
I/O services |
ioWrite32_x86() |
Intel x86 specific I/O services |
ioWrite8() |
I/O services |
ioWrite8_x86() |
Intel x86 specific I/O services |
loadSwap_16() |
Specific I/O services |
loadSwap_32() |
Specific I/O services |
loadSwap_64() |
Specific I/O services |
loadSwapEieio_16() |
I/O services |
loadSwapEieio_16_powerpc() |
PowerPC specific I/O services |
loadSwapEieio_32() |
I/O services |
loadSwapEieio_32_powerpc() |
PowerPC specific I/O services |
loadSwap_sync_16_usparc() |
UltraSparc specific I/O services |
loadSwap_sync_32_usparc() |
UltraSparc specific I/O services |
loadSwap_sync_64_usparc() |
UltraSparc specific I/O services |
load_sync_16_usparc() |
UltraSparc specific I/O services |
load_sync_32_usparc() |
UltraSparc specific I/O services |
load_sync_64_usparc() |
UltraSparc specific I/O services |
load_sync_8_usparc() |
UltraSparc specific I/O services |
storeSwap_16() |
Specific I/O services |
storeSwap_32() |
Specific I/O services |
storeSwap_64() |
Specific I/O services |
storeSwapEieio_16() |
I/O services |
storeSwapEieio_16_powerpc() |
PowerPC specific I/O services |
storeSwapEieio_32() |
I/O services |
storeSwapEieio_32_powerpc() |
PowerPC specific I/O services |
storeSwap_sync_16_usparc() |
UltraSparc specific I/O services |
storeSwap_sync_32_usparc() |
UltraSparc specific I/O services |
storeSwap_sync_64_usparc() |
UltraSparc specific I/O services |
store_sync_16_usparc() |
UltraSparc specific I/O services |
store_sync_32_usparc() |
UltraSparc specific I/O services |
store_sync_64_usparc() |
UltraSparc specific I/O services |
store_sync_8_usparc() |
UltraSparc specific I/O services |
svAsyncExcepAttach() |
Asynchronous exceptions management |
svAsyncExcepAttach_usparc() |
UltraSPARC asynchronous exceptions management |
svAsyncExcepDetach_usparc() |
UltraSPARC aynchronous exceptions management |
svDeviceAlloc() |
Device registry operations |
svDeviceEntry() |
Device registry operations |
svDeviceEvent() |
Device registry operations |
svDeviceFree() |
Device registry operations |
svDeviceLookup() |
Device registry operations |
svDeviceNewCancel() |
Device registry operations |
svDeviceNewNotify() |
Device registry operations |
svDeviceRegister() |
Device registry operations |
svDeviceRelease() |
Device registry operations |
svDeviceUnregister() |
Device registry operations |
svDkiClose() |
System event management |
svDkiEvent() |
System event management |
svDkiInitLevel() |
Two-stage microkernel initialization |
svDkiloRemap() |
Change debug link device address |
svDkiThreadCall() |
Microkernel initialization level |
svDkiOpen() |
System event management |
svDkiThreadCall() |
Call a routine in the DKI thread context; trigger a routine in the DKI thread context; cancel a routine in the DKI thread context |
svDkiThreadCancel() |
Call a routine in the DKI thread context; trigger a routine in the DKI thread context; cancel a routine in the DKI thread context |
svDkiThreadTrigger() |
Call a routine in the DKI thread context; trigger a routine in the DKI thread context; cancel a routine in the DKI thread context |
svDriverCap() |
Driver registry operations |
svDriverEntry() |
Driver registry operations |
svDriverLookupFirst() |
Driver registry operations |
svDriverLookupNext() |
Driver registry operations |
svDriverRegister() |
Driver registry operations |
svDriverRelease() |
Driver registry operations |
svDriverUnregister() |
Driver registry operations |
svIntrAttach() |
Interrupts management |
svIntrAttach_powerpc() |
PowerPC interrupts management |
svIntrAttach_usparc() |
UltraSPARC interrupts management |
svIntrAttach_x86() |
Intel x86 interrupts management |
svIntrCtxGet() |
Interrupts management |
svIntrCtxGet_powerpc() |
PowerPC interrupts management |
svIntrCtxGet_usparc() |
UltraSPARC interrupts management |
svIntrCtxGet_x86() |
Intel x86 interrupts management |
svIntrDetach() |
Interrupts management |
svIntrDetach_powerpc() |
PowerPC interrupts management |
svIntrDetach_usparc() |
UltraSPARC interrupts management |
svIntrDetach_x86() |
Intel x86 interrupts management |
svMemAlloc() |
A general purpose memory allocator |
svMemFree() |
A general purpose memory allocator |
svPhysAlloc() |
A special purpose physical memory allocator |
svPhysFree() |
A special purpose physical memory allocator |
svPhysMap() |
Physical to virtual memory mapping |
svPhysMap_powerpc() |
PowerPC physical to virtual memory mapping |
svPhysUnmap_usparc() |
UltraSPARC physical to virtual memory mapping |
svSoftIntrAttach_usparc() |
UltraSPARC interrupts management |
svSoftIntrDetach_usparc() |
UltraSPARC interrupts management |
svTimeoutCancel() |
Timeout operations |
svTimeoutGetRes() |
Timeout operations |
svTimeoutSet() |
Timeout operations |
swap_16() |
Specific I/O services |
swap_32() |
Specific I/O services |
swap_64() |
Specific I/O services |
swapEieio_16() |
I/O services |
swapEieio_16_powerpc() |
PowerPC I/O services |
swapEieio_32() |
I/O services |
swapEieio_32_powerpc() |
PowerPC I/O services |
usecBusyWait() |
Precise busy wait service |
vmMapToPhys() |
Physical to virtual memory mapping |
vmMapToPhys_powerpc() |
PowerPC physical to virtual memory mapping |
vmMapToPhys_usparc() |
UltraSPARC physical to virtual memory mapping |
vmMapToPhys_x86() |
Intel x86 physical to virtual memory mapping |