if (!(MV_PP_FLAG_EDMA_EN & pp->pp_flags)) { /* turn on EDMA if not already on */ mv_start_dma(port_mmio, pp, qc->ap); } assert(EDMA_EN & readl(port_mmio + EDMA_CMD_OFS)); 
mv_start_dma(port_mmio, pp); 
static int mv_qc_issue(struct ata_queued_cmd *qc){	void __iomem *port_mmio = mv_ap_base(qc->ap);	struct mv_port_priv *pp = qc->ap->private_data;	u32 in_ptr;	if (ATA_PROT_DMA != qc->tf.protocol) {		/* We're about to send a non-EDMA capable command to the		 * port.  Turn off EDMA so there won't be problems accessing		 * shadow block, etc registers.		 */		mv_stop_dma(qc->ap);		return ata_qc_issue_prot(qc);	}	in_ptr = readl(port_mmio + EDMA_REQ_Q_IN_PTR_OFS);	/* the req producer index should be the same as we remember it */	assert(((in_ptr >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK) ==	       pp->req_producer);	/* until we do queuing, the queue should be empty at this point */	assert(((in_ptr >> EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK) ==	       ((readl(port_mmio + EDMA_REQ_Q_OUT_PTR_OFS) >> 		 EDMA_REQ_Q_PTR_SHIFT) & MV_MAX_Q_DEPTH_MASK));	mv_inc_q_index(&pp->req_producer);	/* now incr producer index */	if (!(MV_PP_FLAG_EDMA_EN & pp->pp_flags)) {		/* turn on EDMA if not already on */		mv_start_dma(port_mmio, pp, qc->ap);	}	assert(EDMA_EN & readl(port_mmio + EDMA_CMD_OFS));	/* and write the request in pointer to kick the EDMA to life */	in_ptr &= EDMA_REQ_Q_BASE_LO_MASK;	in_ptr |= pp->req_producer << EDMA_REQ_Q_PTR_SHIFT;	writelfl(in_ptr, port_mmio + EDMA_REQ_Q_IN_PTR_OFS);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/afb0edd922c7ed6e73678730921dfcccebec17e8/sata_mv.c/clean/drivers/scsi/sata_mv.c