pp->sg_tbl[i].addr = cpu_to_le32(addr & 0xffffffff); pp->sg_tbl[i].addr_hi = cpu_to_le32((addr >> 16) >> 16); assert(0 == (sg_len & ~MV_DMA_BOUNDARY)); pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len); if (ata_sg_is_last(sg, qc)) pp->sg_tbl[i].flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);
while (sg_len) { offset = addr & MV_DMA_BOUNDARY; len = sg_len; if ((offset + sg_len) > 0x10000) len = 0x10000 - offset;
static void mv_fill_sg(struct ata_queued_cmd *qc){	struct mv_port_priv *pp = qc->ap->private_data;	unsigned int i = 0;	struct scatterlist *sg;	ata_for_each_sg(sg, qc) {		u32 sg_len;		dma_addr_t addr;		addr = sg_dma_address(sg);		sg_len = sg_dma_len(sg);		pp->sg_tbl[i].addr = cpu_to_le32(addr & 0xffffffff);		pp->sg_tbl[i].addr_hi = cpu_to_le32((addr >> 16) >> 16);		assert(0 == (sg_len & ~MV_DMA_BOUNDARY));		pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len);		if (ata_sg_is_last(sg, qc))			pp->sg_tbl[i].flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);		i++;	}}