Thread (20 messages) 20 messages, 6 authors, 2011-07-08
STALE5457d

[ PATCH V2 4/7] MTD : add the common code for GPMI controller driver

From: Huang Shijie <hidden>
Date: 2011-03-28 02:04:14

Hi:
On Fri, Mar 25, 2011 at 06:22:58PM +0800, Huang Shijie wrote:
quoted
+/* Can we use the upper's buffer directly for DMA? */
+void prepare_data_dma(struct gpmi_nfc_data *this, enum dma_data_direction dr)
+{
+	struct mil *mil =&this->mil;
+	struct scatterlist *sgl =&mil->data_sgl;
+	int ret;
+
+	mil->direct_dma_map_ok = true;
+
+	/* first try to map the upper buffer directly */
+	sg_init_one(sgl, mil->upper_buf, mil->upper_len);
+	ret = dma_map_sg(this->dev, sgl, 1, dr);
+	if (ret == 0) {
+		/* We have to use our own DMA buffer. */
+		sg_init_one(sgl, mil->data_buffer_dma, PAGE_SIZE);
+		ret = dma_map_sg(this->dev, sgl, 1, dr);
+		BUG_ON(ret == 0);
+
+		if (dr == DMA_TO_DEVICE)
+			memcpy(mil->data_buffer_dma, mil->upper_buf,
+				mil->upper_len);
Buggy.  Ensure data is present in the buffers _before_ mapping.
thanks.
quoted
+	case DMA_FOR_READ_DATA:
+		if (mil->direct_dma_map_ok == false)
+			memcpy(mil->upper_buf, (char *)mil->data_buffer_dma,
+				mil->upper_len);
+		dma_unmap_sg(this->dev,&mil->data_sgl, 1, DMA_FROM_DEVICE);
Buggy.  Only read data from buffers _after_ unmapping.
thanks.

Best Regards
Huang Shijie
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help