d_unmap_slave Kernel Service

Purpose

Deallocates resources previously allocated on a d_map_slave call.

Syntax

#include <sys/dma.h>
int d_unmap_slave (*handle)
struct d_handle *handle;

Parameters

Item Description
handle Indicates the unique handle returned by the d_map_init kernel service.

Description

The d_unmap_slave kernel service deallocates resources previously allocated on a d_map_slave call, disables the physical DMA channel, and returns error and status information following the DMA transfer. The d_unmap_slave kernel service is not an exported kernel service, but a bus-specific utility routine that is determined by the d_map_init kernel service and provided to the caller through the d_handle structure.

Note: You can use the D_UNMAP_SLAVE macro provided in the /usr/include/sys/dma.h file to code calls to the d_unmap_slave kernel service. If not, you must ensure that the d_unmap_slave function pointer is non-NULL before attempting to call. No all platforms require the unmapping service.

The device driver must call d_unmap_slave when the I/O is complete involving a prior mapping by the d_map_slave kernel service.

Note: The d_unmap_slave kernel should be paired with a previous d_map_slave call. Multiple outstanding slave DMA transfers are not supported. This kernel service assumes that there is no DMA in progress on the affected channel and deallocates the current channel mapping.

Return Values

Item Description
DMA_SUCC Indicates successful transfer. The DMA controller did not report any errors and that the Terminal Count was reached.
DMA_TC_NOTREACHED Indicates a successful partial transfer. The DMA controller reported the Terminal Count reached for the intended transfer as set up by the d_map_slave call. Block devices consider this an erro; however, for variable length devices this may not be an error.
DMA_FAIL Indicates that the transfer failed. The DMA controller reported an error. The device driver assumes the transfer was unsuccessful.