| /* |
| * Copyright (C) 2013-2016 ARM Limited. All rights reserved. |
| * |
| * This program is free software and is provided to you under the terms of the GNU General Public License version 2 |
| * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence. |
| * |
| * A copy of the licence is included with the program, and can also be obtained from Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| */ |
| #ifndef __MALI_MEMORY_DEFER_BIND_H_ |
| #define __MALI_MEMORY_DEFER_BIND_H_ |
| |
| |
| #include "mali_osk.h" |
| #include "mali_session.h" |
| |
| #include <linux/list.h> |
| #include <linux/mm.h> |
| #include <linux/rbtree.h> |
| #include <linux/spinlock.h> |
| #include <linux/types.h> |
| |
| |
| #include "mali_memory_types.h" |
| #include "mali_memory_os_alloc.h" |
| #include "mali_uk_types.h" |
| |
| struct mali_gp_job; |
| |
| typedef struct mali_defer_mem { |
| struct list_head node; /*dlist node in bind manager */ |
| u32 flag; |
| } mali_defer_mem; |
| |
| |
| typedef struct mali_defer_mem_block { |
| struct list_head free_pages; /* page pool */ |
| atomic_t num_free_pages; |
| } mali_defer_mem_block; |
| |
| /* varying memory list need to bind */ |
| typedef struct mali_backend_bind_list { |
| struct list_head node; |
| struct mali_mem_backend *bkend; |
| u32 vaddr; |
| u32 page_num; |
| struct mali_session_data *session; |
| u32 flag; |
| } mali_backend_bind_lists; |
| |
| |
| typedef struct mali_defer_bind_manager { |
| atomic_t num_used_pages; |
| atomic_t num_dmem; |
| } mali_defer_bind_manager; |
| |
| _mali_osk_errcode_t mali_mem_defer_bind_manager_init(void); |
| void mali_mem_defer_bind_manager_destory(void); |
| _mali_osk_errcode_t mali_mem_defer_bind(struct mali_gp_job *gp, struct mali_defer_mem_block *dmem_block); |
| _mali_osk_errcode_t mali_mem_defer_bind_allocation_prepare(mali_mem_allocation *alloc, struct list_head *list, u32 *required_varying_memsize); |
| _mali_osk_errcode_t mali_mem_prepare_mem_for_job(struct mali_gp_job *next_gp_job, mali_defer_mem_block *dblock); |
| void mali_mem_defer_dmem_free(struct mali_gp_job *gp); |
| |
| #endif |