Writing Device Drivers

tran_sync_pkt(9E)

The tran_sync_pkt(9E) entry point is the HBA driver function that synchronizes the DMA object allocated for the scsi_pkt(9S) structure before or after a DMA transfer. The tran_sync_pkt(9E) entry point is called when the target driver calls scsi_sync_pkt(9F).

If the data transfer direction is a DMA read from device to memory, tran_sync_pkt(9E) must synchronize the CPU's view of the data. If the data transfer direction is a DMA write from memory to device, tran_sync_pkt(9E) must synchronize the device's view of the data.


Example 14-8 HBA Driver tran_sync_pkt(9E) Entry Point

static void
isp_scsi_sync_pkt(
	struct scsi_address	*ap,
	struct scsi_pkt		*pkt)
{
	struct isp_cmd *sp = (struct isp_cmd *)pkt->pkt_ha_private;

	if (sp->cmd_flags & CFLAG_DMAVALID) {
	   	(void)ddi_dma_sync(sp->cmd_dmahandle, sp->cmd_dma_offset,
			sp->cmd_dma_len,
			(sp->cmd_flags & CFLAG_DMASEND) ?
			DDI_DMA_SYNC_FORDEV : DDI_DMA_SYNC_FORCPU);
		}
	}
}