2 * This confidential and proprietary software may be used only as
3 * authorised by a licensing agreement from ARM Limited
4 * (C) COPYRIGHT 2013 ARM Limited
6 * The entire notice above must be reproduced on all authorised
7 * copies and copies may only be made to the extent permitted
8 * by a licensing agreement from ARM Limited.
11 #ifndef __MALI_MEMORY_H__
12 #define __MALI_MEMORY_H__
15 #include "mali_session.h"
17 #include <linux/list.h>
20 #include "mali_memory_types.h"
21 #include "mali_memory_os_alloc.h"
23 _mali_osk_errcode_t mali_memory_initialize(void);
24 void mali_memory_terminate(void);
26 /** @brief Allocate a page table page
28 * Allocate a page for use as a page directory or page table. The page is
29 * mapped into kernel space.
31 * @return _MALI_OSK_ERR_OK on success, otherwise an error code
32 * @param table_page GPU pointer to the allocated page
33 * @param mapping CPU pointer to the mapping of the allocated page
35 MALI_STATIC_INLINE _mali_osk_errcode_t mali_mmu_get_table_page(u32 *table_page, mali_io_address *mapping)
37 return mali_mem_os_get_table_page(table_page, mapping);
40 /** @brief Release a page table page
42 * Release a page table page allocated through \a mali_mmu_get_table_page
44 * @param pa the GPU address of the page to release
46 MALI_STATIC_INLINE void mali_mmu_release_table_page(u32 phys, void *virt)
48 mali_mem_os_release_table_page(phys, virt);
51 /** @brief mmap function
53 * mmap syscalls on the Mali device node will end up here.
55 * This function allocates Mali memory and maps it on CPU and Mali.
57 int mali_mmap(struct file *filp, struct vm_area_struct *vma);
59 /** @brief Allocate and initialize a Mali memory descriptor
61 * @param session Pointer to the session allocating the descriptor
62 * @param type Type of memory the descriptor will represent
64 mali_mem_allocation *mali_mem_descriptor_create(struct mali_session_data *session, mali_mem_type type);
66 /** @brief Destroy a Mali memory descriptor
68 * This function will only free the descriptor itself, and not the memory it
71 * @param descriptor Pointer to the descriptor to destroy
73 void mali_mem_descriptor_destroy(mali_mem_allocation *descriptor);
75 /** @brief Start a new memory session
77 * Called when a process opens the Mali device node.
79 * @param session Pointer to session to initialize
81 _mali_osk_errcode_t mali_memory_session_begin(struct mali_session_data *session);
83 /** @brief Close a memory session
85 * Called when a process closes the Mali device node.
87 * Memory allocated by the session will be freed
89 * @param session Pointer to the session to terminate
91 void mali_memory_session_end(struct mali_session_data *session);
93 /** @brief Prepare Mali page tables for mapping
95 * This function will prepare the Mali page tables for mapping the memory
96 * described by \a descriptor.
98 * Page tables will be reference counted and allocated, if not yet present.
100 * @param descriptor Pointer to the memory descriptor to the mapping
102 _mali_osk_errcode_t mali_mem_mali_map_prepare(mali_mem_allocation *descriptor);
104 /** @brief Free Mali page tables for mapping
106 * This function will unmap pages from Mali memory and free the page tables
107 * that are now unused.
109 * The updated pages in the Mali L2 cache will be invalidated, and the MMU TLBs will be zapped if necessary.
111 * @param descriptor Pointer to the memory descriptor to unmap
113 void mali_mem_mali_map_free(mali_mem_allocation *descriptor);
115 /** @brief Parse resource and prepare the OS memory allocator
117 * @param size Maximum size to allocate for Mali GPU.
118 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
120 _mali_osk_errcode_t mali_memory_core_resource_os_memory(u32 size);
122 /** @brief Parse resource and prepare the dedicated memory allocator
124 * @param start Physical start address of dedicated Mali GPU memory.
125 * @param size Size of dedicated Mali GPU memory.
126 * @return _MALI_OSK_ERR_OK on success, otherwise failure.
128 _mali_osk_errcode_t mali_memory_core_resource_dedicated_memory(u32 start, u32 size);
131 void mali_mem_ump_release(mali_mem_allocation *descriptor);
132 void mali_mem_external_release(mali_mem_allocation *descriptor);
134 #endif /* __MALI_MEMORY_H__ */