12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright 2018-2020 Broadcom.
- */
- #ifndef BCM_VK_SG_H
- #define BCM_VK_SG_H
- #include <linux/dma-mapping.h>
- struct bcm_vk_dma {
- /* for userland buffer */
- struct page **pages;
- int nr_pages;
- /* common */
- dma_addr_t handle;
- /*
- * sglist is of the following LE format
- * [U32] num_sg = number of sg addresses (N)
- * [U32] totalsize = totalsize of data being transferred in sglist
- * [U32] size[0] = size of data in address0
- * [U32] addr_l[0] = lower 32-bits of address0
- * [U32] addr_h[0] = higher 32-bits of address0
- * ..
- * [U32] size[N-1] = size of data in addressN-1
- * [U32] addr_l[N-1] = lower 32-bits of addressN-1
- * [U32] addr_h[N-1] = higher 32-bits of addressN-1
- */
- u32 *sglist;
- #define SGLIST_NUM_SG 0
- #define SGLIST_TOTALSIZE 1
- #define SGLIST_VKDATA_START 2
- int sglen; /* Length (bytes) of sglist */
- int direction;
- };
- struct _vk_data {
- u32 size; /* data size in bytes */
- u64 address; /* Pointer to data */
- } __packed;
- /*
- * Scatter-gather DMA buffer API.
- *
- * These functions provide a simple way to create a page list and a
- * scatter-gather list from userspace address and map the memory
- * for DMA operation.
- */
- int bcm_vk_sg_alloc(struct device *dev,
- struct bcm_vk_dma *dma,
- int dir,
- struct _vk_data *vkdata,
- int num);
- int bcm_vk_sg_free(struct device *dev, struct bcm_vk_dma *dma, int num,
- int *proc_cnt);
- #endif
|