static void __isp_stat_buf_sync_magic(struct ispstat *stat, struct ispstat_buffer *buf, u32 buf_size, enum dma_data_direction dir, void (*dma_sync)(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction)) { /* Sync the initial and final magic words. */ dma_sync(stat->isp->dev, buf->dma_addr, 0, MAGIC_SIZE, dir); dma_sync(stat->isp->dev, buf->dma_addr + (buf_size & PAGE_MASK), buf_size & ~PAGE_MASK, MAGIC_SIZE, dir); }
static void __isp_stat_buf_sync_magic(struct ispstat *stat, struct ispstat_buffer *buf, u32 buf_size, enum dma_data_direction dir, void (*dma_sync)(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction)) { struct device *dev = stat->isp->dev; struct page *pg; dma_addr_t dma_addr; u32 offset; /* Initial magic words */ pg = vmalloc_to_page(buf->virt_addr); dma_addr = pfn_to_dma(dev, page_to_pfn(pg)); dma_sync(dev, dma_addr, 0, MAGIC_SIZE, dir); /* Final magic words */ pg = vmalloc_to_page(buf->virt_addr + buf_size); dma_addr = pfn_to_dma(dev, page_to_pfn(pg)); offset = ((u32)buf->virt_addr + buf_size) & ~PAGE_MASK; dma_sync(dev, dma_addr, offset, MAGIC_SIZE, dir); }