NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | EXTENDED DESCRIPTION | Allowed Calling Contexts | ATTRIBUTES | SEE ALSO
#include <dki/dki.h>uint16_f loadSwapEieio_16(uint16_f * addr);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
DKI
Provides access to DKI I/O routines, which are optimized to facilitate byte swapping and synchronization of I/O.
The DKI provides specific I/O routines to handle byte swapping and synchronization of I/O. These services are based on -specific instructions to store/load with byte swapping and to enforce in-order execution of I/O.
These services are intended to be used by a host bus driver to handle different byte ordering between the bus and the host bus, or to enforce sequential execution of I/O. -specific I/O services are defined below as sets of routines where the _xx suffix indicates the bit length of the data on which the service applies. This suffix may take one of the following values:
for 16-bit data
for 32-bit data
loadSwapEieio_xx() loads data from a given address and returns the corresponding byte swapped value. To enforce execution of subsequent I/O sequentially with respect to the current load, a eieio() instruction is issued after the data is read. The addr argument specifies the address from which to read.
loadSwapSync_xx() behaves like loadSwapEieio_xx() , but issues a isync() instruction after that data is read. This ensures that all possible exceptions are taken into account before returning.
storeSwapEieio_xx() stores the value byte swapped at a given address. A eieio() instruction is issued after the data is written, to enforce execution of subsequent I/O sequentially with respect to the current store. The addr argument specifies the address to which to write.
storeSwapSync_xx() behaves like storeSwapEieio_xx() , but issues a isync() instruction after the data is read. This ensures that all possible exceptions are taken into account before returning.
swapEieio_xx() swaps in place the bytes of the data stored at a given address. A eieio() instruction is issued between reading the data and re-writing the byte-swapped data, to enforce execution in order. The addr argument specifies the address of the data to byte-swap.
ioSync() enforces context synchronization, completion of all instructions, and completion of all exceptions before returning.
eieio() enforces in-order execution of I/O, and is mapped to the corresponding assembler instruction. This routine is intended for use in managing shared data structures, in doing memory-mapped I/O, and in preventing load/store combining operations in main memory. For more details, refer to programming manuals.
The following table specifies the contexts in which a caller is allowed to invoke each service:
Services | Base level | DKI thread | Interrupt | Blocking |
loadSwapEieio_xx() | + | + | + | - |
loadSwapSync_xx() | + | + | + | - |
storeSwapEieio_xx() | + | + | + | - |
storeSwapSync_xx() | + | + | + | - |
swapEieio_xx() | + | + | + | - |
ioSync() | + | + | + | - |
eieio() | + | + | + | - |
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | API RESTRICTIONS | FEATURES | DESCRIPTION | EXTENDED DESCRIPTION | Allowed Calling Contexts | ATTRIBUTES | SEE ALSO