int ion_system_contig_heap_cache_ops(struct ion_heap *heap, struct ion_buffer *buffer, void *vaddr, unsigned int offset, unsigned int length, unsigned int cmd) { unsigned long vstart, pstart; pstart = virt_to_phys(buffer->priv_virt) + offset; if (!pstart) { WARN(1, "Could not do virt to phys translation on %p\n", buffer->priv_virt); return -EINVAL; } vstart = (unsigned long) vaddr; switch (cmd) { case ION_IOC_CLEAN_CACHES: clean_caches(vstart, length, pstart); break; case ION_IOC_INV_CACHES: invalidate_caches(vstart, length, pstart); break; case ION_IOC_CLEAN_INV_CACHES: clean_and_invalidate_caches(vstart, length, pstart); break; default: return -EINVAL; } return 0; }
int ion_cp_cache_ops(struct ion_heap *heap, struct ion_buffer *buffer, void *vaddr, unsigned int offset, unsigned int length, unsigned int cmd) { unsigned long vstart, pstart; pstart = buffer->priv_phys + offset; vstart = (unsigned long)vaddr; switch (cmd) { case ION_IOC_CLEAN_CACHES: clean_caches(vstart, length, pstart); break; case ION_IOC_INV_CACHES: invalidate_caches(vstart, length, pstart); break; case ION_IOC_CLEAN_INV_CACHES: clean_and_invalidate_caches(vstart, length, pstart); break; default: return -EINVAL; } return 0; }