123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
- */
- #ifndef _MSM_VIDC_MEMORY_H_
- #define _MSM_VIDC_MEMORY_H_
- #include "msm_vidc_internal.h"
- struct msm_vidc_core;
- struct msm_vidc_inst;
- #define MSM_MEM_POOL_PACKET_SIZE 1024
- struct msm_memory_dmabuf {
- struct list_head list;
- struct dma_buf *dmabuf;
- u32 refcount;
- };
- enum msm_memory_pool_type {
- MSM_MEM_POOL_BUFFER = 0,
- MSM_MEM_POOL_ALLOC_MAP,
- MSM_MEM_POOL_TIMESTAMP,
- MSM_MEM_POOL_DMABUF,
- MSM_MEM_POOL_PACKET,
- MSM_MEM_POOL_BUF_TIMER,
- MSM_MEM_POOL_BUF_STATS,
- MSM_MEM_POOL_MAX,
- };
- struct msm_memory_alloc_header {
- struct list_head list;
- u32 type;
- bool busy;
- void *buf;
- };
- struct msm_memory_pool {
- u32 size;
- char *name;
- struct list_head free_pool; /* list of struct msm_memory_alloc_header */
- struct list_head busy_pool; /* list of struct msm_memory_alloc_header */
- };
- void *msm_vidc_pool_alloc(struct msm_vidc_inst *inst,
- enum msm_memory_pool_type type);
- void msm_vidc_pool_free(struct msm_vidc_inst *inst, void *vidc_buf);
- int msm_vidc_pools_init(struct msm_vidc_inst *inst);
- void msm_vidc_pools_deinit(struct msm_vidc_inst *inst);
- #define call_mem_op(c, op, ...) \
- (((c) && (c)->mem_ops && (c)->mem_ops->op) ? \
- ((c)->mem_ops->op(__VA_ARGS__)) : 0)
- struct msm_vidc_memory_ops {
- struct dma_buf *(*dma_buf_get)(struct msm_vidc_inst *inst,
- int fd);
- void (*dma_buf_put)(struct msm_vidc_inst *inst,
- struct dma_buf *dmabuf);
- void (*dma_buf_put_completely)(struct msm_vidc_inst *inst,
- struct msm_memory_dmabuf *buf);
- struct dma_buf_attachment *(*dma_buf_attach)(struct msm_vidc_core *core,
- struct dma_buf *dbuf, struct device *dev);
- int (*dma_buf_detach)(struct msm_vidc_core *core, struct dma_buf *dbuf,
- struct dma_buf_attachment *attach);
- struct sg_table
- *(*dma_buf_map_attachment)(struct msm_vidc_core *core,
- struct dma_buf_attachment *attach);
- int (*dma_buf_unmap_attachment)(struct msm_vidc_core *core,
- struct dma_buf_attachment *attach,
- struct sg_table *table);
- int (*memory_alloc_map)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- int (*memory_unmap_free)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- int (*mem_dma_map_page)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- int (*mem_dma_unmap_page)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- u32 (*buffer_region)(struct msm_vidc_inst *inst,
- enum msm_vidc_buffer_type buffer_type);
- int (*iommu_map)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- int (*iommu_unmap)(struct msm_vidc_core *core,
- struct msm_vidc_mem *mem);
- };
- const struct msm_vidc_memory_ops *get_mem_ops(void);
- #endif // _MSM_VIDC_MEMORY_H_
|