xmemdma64 Kernel Service
Purpose
Prepares a page for direct memory access (DMA) I/O or processes a page after DMA I/O is complete.
Syntax
#include <sys/types.h>
#include <sys/errno.h>
#include <sys/xmem.h>
unsigned long long xmemdma64 (
struct xmem *dp,
caddr_t xaddr,>
int flags)
Parameters
Item | Description | ||
---|---|---|---|
dp | Specifies a cross-memory descriptor. | ||
xaddr | Identifies the address that specify the page for transfer. | ||
flags | Specifies whether to prepare
a page for DMA I/O or process it after DMA I/O is complete. Possible
values are:
|
Description
The xmemdma64 kernel service operates on the page that is specified by the xaddr parameter in the region that is specified by the cross-memory descriptor. If the cross-memory descriptor is for the kernel, the xaddr parameter specifies a kernel address. Otherwise, the xaddr parameter specifies the offset in the region that is described in the cross-memory descriptor.
The xmemdma64 kernel service is provided for machines that have processor-memory caches, but that do not perform DMA I/O through the cache.
If the flag parameter indicates XMEM_HIDE (that is, XMEM_UNHIDE is not set) and it is the first hide for the page, the xmemdma64 kernel service prepares the page for DMA I/O by flushing the cache and making the page invalid. When the XMEM_UNHIDE bit is set and it is the last unhide for the page, the following events take place:
- The page is made valid.
If the page is not in pager I/O state:
- Any processes that is waiting on the page are readied.
- The modified bit for the page is set unless the page has a read-only storage key.
The page is made not valid during DMA operations so that it is not addressable with any virtual address. It prevents any process from reading or loading any part of the page into the cache during the DMA operation.
The page that is specified must be in memory and must be pinned.
If the XMEM_ACC_CHK bit is set, then the xmemdma64 kernel service also verifies access permissions to the page. If the page access is read-only, then the XMEM_WRITE_ONLY bit must be set in the flag parameter.
Execution Environment
The xmemdma64 kernel service can be called from either the process or interrupt environment.
Return Values
On successful completion, the xmemdma64 service returns the real address corresponding to the xaddr and xp parameters.
Error Codes
The xmemdma64 kernel service returns a value of XMEM_FAIL if one of the following are true:
- The descriptor was invalid.
- The page that is specified by the xaddr or xp parameter is invalid.
- Access is not allowed to the page.