1/* $NetBSD: ttm_page_alloc.h,v 1.4 2021/12/18 23:45:46 riastradh Exp $ */ 2 3/* 4 * Copyright (c) Red Hat Inc. 5 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sub license, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial portions 15 * of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 * DEALINGS IN THE SOFTWARE. 24 * 25 * Authors: Dave Airlie <airlied@redhat.com> 26 * Jerome Glisse <jglisse@redhat.com> 27 */ 28#ifndef TTM_PAGE_ALLOC 29#define TTM_PAGE_ALLOC 30 31#include <drm/ttm/ttm_bo_driver.h> 32#include <drm/ttm/ttm_memory.h> 33 34struct device; 35 36/** 37 * Initialize pool allocator. 38 */ 39int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages); 40/** 41 * Free pool allocator. 42 */ 43void ttm_page_alloc_fini(void); 44 45/** 46 * ttm_pool_populate: 47 * 48 * @ttm: The struct ttm_tt to contain the backing pages. 49 * 50 * Add backing pages to all of @ttm 51 */ 52int ttm_pool_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx); 53 54/** 55 * ttm_pool_unpopulate: 56 * 57 * @ttm: The struct ttm_tt which to free backing pages. 58 * 59 * Free all pages of @ttm 60 */ 61void ttm_pool_unpopulate(struct ttm_tt *ttm); 62 63/** 64 * Populates and DMA maps pages to fullfil a ttm_dma_populate() request 65 */ 66int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt, 67 struct ttm_operation_ctx *ctx); 68 69/** 70 * Unpopulates and DMA unmaps pages as part of a 71 * ttm_dma_unpopulate() request */ 72void ttm_unmap_and_unpopulate_pages(struct device *dev, struct ttm_dma_tt *tt); 73 74#ifdef CONFIG_DEBUG_FS 75/** 76 * Output the state of pools to debugfs file 77 */ 78int ttm_page_alloc_debugfs(struct seq_file *m, void *data); 79#endif 80 81#if defined(CONFIG_DRM_TTM_DMA_PAGE_POOL) 82/** 83 * Initialize pool allocator. 84 */ 85int ttm_dma_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages); 86 87/** 88 * Free pool allocator. 89 */ 90void ttm_dma_page_alloc_fini(void); 91 92#ifdef CONFIG_DEBUG_FS 93/** 94 * Output the state of pools to debugfs file 95 */ 96int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data); 97#endif CONFIG_DEBUG_FS 98 99int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev, 100 struct ttm_operation_ctx *ctx); 101void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev); 102 103#else 104static inline int ttm_dma_page_alloc_init(struct ttm_mem_global *glob, 105 unsigned max_pages) 106{ 107 return -ENODEV; 108} 109 110static inline void ttm_dma_page_alloc_fini(void) { return; } 111 112#ifdef CONFIG_DEBUG_FS 113static inline int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data) 114{ 115 return 0; 116} 117#endif 118static inline int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, 119 struct device *dev, 120 struct ttm_operation_ctx *ctx) 121{ 122 return -ENOMEM; 123} 124static inline void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, 125 struct device *dev) 126{ 127} 128#endif 129 130#endif 131