18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2017 Etnaviv Project
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef __ETNAVIV_CMDBUF_H__
78c2ecf20Sopenharmony_ci#define __ETNAVIV_CMDBUF_H__
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/types.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct device;
128c2ecf20Sopenharmony_cistruct etnaviv_iommu_context;
138c2ecf20Sopenharmony_cistruct etnaviv_vram_mapping;
148c2ecf20Sopenharmony_cistruct etnaviv_cmdbuf_suballoc;
158c2ecf20Sopenharmony_cistruct etnaviv_perfmon_request;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistruct etnaviv_cmdbuf {
188c2ecf20Sopenharmony_ci	/* suballocator this cmdbuf is allocated from */
198c2ecf20Sopenharmony_ci	struct etnaviv_cmdbuf_suballoc *suballoc;
208c2ecf20Sopenharmony_ci	/* cmdbuf properties */
218c2ecf20Sopenharmony_ci	int suballoc_offset;
228c2ecf20Sopenharmony_ci	void *vaddr;
238c2ecf20Sopenharmony_ci	u32 size;
248c2ecf20Sopenharmony_ci	u32 user_size;
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistruct etnaviv_cmdbuf_suballoc *
288c2ecf20Sopenharmony_cietnaviv_cmdbuf_suballoc_new(struct device *dev);
298c2ecf20Sopenharmony_civoid etnaviv_cmdbuf_suballoc_destroy(struct etnaviv_cmdbuf_suballoc *suballoc);
308c2ecf20Sopenharmony_ciint etnaviv_cmdbuf_suballoc_map(struct etnaviv_cmdbuf_suballoc *suballoc,
318c2ecf20Sopenharmony_ci				struct etnaviv_iommu_context *context,
328c2ecf20Sopenharmony_ci				struct etnaviv_vram_mapping *mapping,
338c2ecf20Sopenharmony_ci				u32 memory_base);
348c2ecf20Sopenharmony_civoid etnaviv_cmdbuf_suballoc_unmap(struct etnaviv_iommu_context *context,
358c2ecf20Sopenharmony_ci				   struct etnaviv_vram_mapping *mapping);
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ciint etnaviv_cmdbuf_init(struct etnaviv_cmdbuf_suballoc *suballoc,
398c2ecf20Sopenharmony_ci		struct etnaviv_cmdbuf *cmdbuf, u32 size);
408c2ecf20Sopenharmony_civoid etnaviv_cmdbuf_free(struct etnaviv_cmdbuf *cmdbuf);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciu32 etnaviv_cmdbuf_get_va(struct etnaviv_cmdbuf *buf,
438c2ecf20Sopenharmony_ci			  struct etnaviv_vram_mapping *mapping);
448c2ecf20Sopenharmony_cidma_addr_t etnaviv_cmdbuf_get_pa(struct etnaviv_cmdbuf *buf);
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* __ETNAVIV_CMDBUF_H__ */
47