xref: /src/sys/compat/linuxkpi/common/include/linux/dma-buf-map.h (revision 0e5569a08cf02e036774235e54e1008a26167b36)
10e5569a0SJean-Sébastien Pédron /* Public domain. */
20e5569a0SJean-Sébastien Pédron 
30e5569a0SJean-Sébastien Pédron #ifndef _LINUX_DMA_BUF_MAP_H
40e5569a0SJean-Sébastien Pédron #define _LINUX_DMA_BUF_MAP_H
50e5569a0SJean-Sébastien Pédron 
60e5569a0SJean-Sébastien Pédron #include <linux/io.h>
70e5569a0SJean-Sébastien Pédron #include <linux/string.h>
80e5569a0SJean-Sébastien Pédron 
90e5569a0SJean-Sébastien Pédron struct dma_buf_map {
100e5569a0SJean-Sébastien Pédron 	union {
110e5569a0SJean-Sébastien Pédron 		void *vaddr_iomem;
120e5569a0SJean-Sébastien Pédron 		void *vaddr;
130e5569a0SJean-Sébastien Pédron 	};
140e5569a0SJean-Sébastien Pédron 	bool is_iomem;
150e5569a0SJean-Sébastien Pédron };
160e5569a0SJean-Sébastien Pédron 
170e5569a0SJean-Sébastien Pédron static inline void
dma_buf_map_incr(struct dma_buf_map * dbm,size_t n)180e5569a0SJean-Sébastien Pédron dma_buf_map_incr(struct dma_buf_map *dbm, size_t n)
190e5569a0SJean-Sébastien Pédron {
200e5569a0SJean-Sébastien Pédron 	if (dbm->is_iomem)
210e5569a0SJean-Sébastien Pédron 		dbm->vaddr_iomem += n;
220e5569a0SJean-Sébastien Pédron 	else
230e5569a0SJean-Sébastien Pédron 		dbm->vaddr += n;
240e5569a0SJean-Sébastien Pédron }
250e5569a0SJean-Sébastien Pédron 
260e5569a0SJean-Sébastien Pédron static inline void
dma_buf_map_memcpy_to(struct dma_buf_map * dbm,const void * src,size_t len)270e5569a0SJean-Sébastien Pédron dma_buf_map_memcpy_to(struct dma_buf_map *dbm, const void *src, size_t len)
280e5569a0SJean-Sébastien Pédron {
290e5569a0SJean-Sébastien Pédron 	if (dbm->is_iomem)
300e5569a0SJean-Sébastien Pédron 		memcpy_toio(dbm->vaddr_iomem, src, len);
310e5569a0SJean-Sébastien Pédron 	else
320e5569a0SJean-Sébastien Pédron 		memcpy(dbm->vaddr, src, len);
330e5569a0SJean-Sébastien Pédron }
340e5569a0SJean-Sébastien Pédron 
350e5569a0SJean-Sébastien Pédron static inline bool
dma_buf_map_is_null(const struct dma_buf_map * dbm)360e5569a0SJean-Sébastien Pédron dma_buf_map_is_null(const struct dma_buf_map *dbm)
370e5569a0SJean-Sébastien Pédron {
380e5569a0SJean-Sébastien Pédron 	if (dbm->is_iomem)
390e5569a0SJean-Sébastien Pédron 		return (dbm->vaddr_iomem == NULL);
400e5569a0SJean-Sébastien Pédron 	else
410e5569a0SJean-Sébastien Pédron 		return (dbm->vaddr == NULL);
420e5569a0SJean-Sébastien Pédron }
430e5569a0SJean-Sébastien Pédron 
440e5569a0SJean-Sébastien Pédron static inline bool
dma_buf_map_is_set(const struct dma_buf_map * dbm)450e5569a0SJean-Sébastien Pédron dma_buf_map_is_set(const struct dma_buf_map *dbm)
460e5569a0SJean-Sébastien Pédron {
470e5569a0SJean-Sébastien Pédron 	if (dbm->is_iomem)
480e5569a0SJean-Sébastien Pédron 		return (dbm->vaddr_iomem != NULL);
490e5569a0SJean-Sébastien Pédron 	else
500e5569a0SJean-Sébastien Pédron 		return (dbm->vaddr != NULL);
510e5569a0SJean-Sébastien Pédron }
520e5569a0SJean-Sébastien Pédron 
530e5569a0SJean-Sébastien Pédron static inline bool
dma_buf_map_is_equal(const struct dma_buf_map * dbm_a,const struct dma_buf_map * dbm_b)540e5569a0SJean-Sébastien Pédron dma_buf_map_is_equal(
550e5569a0SJean-Sébastien Pédron     const struct dma_buf_map *dbm_a, const struct dma_buf_map *dbm_b)
560e5569a0SJean-Sébastien Pédron {
570e5569a0SJean-Sébastien Pédron 	if (dbm_a->is_iomem != dbm_b->is_iomem)
580e5569a0SJean-Sébastien Pédron 		return (false);
590e5569a0SJean-Sébastien Pédron 
600e5569a0SJean-Sébastien Pédron 	if (dbm_a->is_iomem)
610e5569a0SJean-Sébastien Pédron 		return (dbm_a->vaddr_iomem == dbm_b->vaddr_iomem);
620e5569a0SJean-Sébastien Pédron 	else
630e5569a0SJean-Sébastien Pédron 		return (dbm_a->vaddr == dbm_b->vaddr);
640e5569a0SJean-Sébastien Pédron }
650e5569a0SJean-Sébastien Pédron 
660e5569a0SJean-Sébastien Pédron static inline void
dma_buf_map_clear(struct dma_buf_map * dbm)670e5569a0SJean-Sébastien Pédron dma_buf_map_clear(struct dma_buf_map *dbm)
680e5569a0SJean-Sébastien Pédron {
690e5569a0SJean-Sébastien Pédron 	if (dbm->is_iomem) {
700e5569a0SJean-Sébastien Pédron 		dbm->vaddr_iomem = NULL;
710e5569a0SJean-Sébastien Pédron 		dbm->is_iomem = false;
720e5569a0SJean-Sébastien Pédron 	} else {
730e5569a0SJean-Sébastien Pédron 		dbm->vaddr = NULL;
740e5569a0SJean-Sébastien Pédron 	}
750e5569a0SJean-Sébastien Pédron }
760e5569a0SJean-Sébastien Pédron 
770e5569a0SJean-Sébastien Pédron static inline void
dma_buf_map_set_vaddr_iomem(struct dma_buf_map * dbm,void * addr)780e5569a0SJean-Sébastien Pédron dma_buf_map_set_vaddr_iomem(struct dma_buf_map *dbm, void *addr)
790e5569a0SJean-Sébastien Pédron {
800e5569a0SJean-Sébastien Pédron 	dbm->vaddr_iomem = addr;
810e5569a0SJean-Sébastien Pédron 	dbm->is_iomem = true;
820e5569a0SJean-Sébastien Pédron }
830e5569a0SJean-Sébastien Pédron 
840e5569a0SJean-Sébastien Pédron static inline void
dma_buf_map_set_vaddr(struct dma_buf_map * dbm,void * addr)850e5569a0SJean-Sébastien Pédron dma_buf_map_set_vaddr(struct dma_buf_map *dbm, void *addr)
860e5569a0SJean-Sébastien Pédron {
870e5569a0SJean-Sébastien Pédron 	dbm->vaddr = addr;
880e5569a0SJean-Sébastien Pédron 	dbm->is_iomem = false;
890e5569a0SJean-Sébastien Pédron }
900e5569a0SJean-Sébastien Pédron 
910e5569a0SJean-Sébastien Pédron #endif
92