1 /* $NetBSD: ttm_placement.h,v 1.3 2021/12/18 23:45:46 riastradh Exp $ */ 2 3 /************************************************************************** 4 * 5 * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA 6 * All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a 9 * copy of this software and associated documentation files (the 10 * "Software"), to deal in the Software without restriction, including 11 * without limitation the rights to use, copy, modify, merge, publish, 12 * distribute, sub license, and/or sell copies of the Software, and to 13 * permit persons to whom the Software is furnished to do so, subject to 14 * the following conditions: 15 * 16 * The above copyright notice and this permission notice (including the 17 * next paragraph) shall be included in all copies or substantial portions 18 * of the Software. 19 * 20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 23 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 24 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 25 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 26 * USE OR OTHER DEALINGS IN THE SOFTWARE. 27 * 28 **************************************************************************/ 29 /* 30 * Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com> 31 */ 32 33 #ifndef _TTM_PLACEMENT_H_ 34 #define _TTM_PLACEMENT_H_ 35 36 #include <linux/types.h> 37 38 /* 39 * Memory regions for data placement. 40 */ 41 42 #define TTM_PL_SYSTEM 0 43 #define TTM_PL_TT 1 44 #define TTM_PL_VRAM 2 45 #define TTM_PL_PRIV 3 46 47 #define TTM_PL_FLAG_SYSTEM (1 << TTM_PL_SYSTEM) 48 #define TTM_PL_FLAG_TT (1 << TTM_PL_TT) 49 #define TTM_PL_FLAG_VRAM (1 << TTM_PL_VRAM) 50 #define TTM_PL_FLAG_PRIV (1 << TTM_PL_PRIV) 51 #define TTM_PL_MASK_MEM 0x0000FFFF 52 53 /* 54 * Other flags that affects data placement. 55 * TTM_PL_FLAG_CACHED indicates cache-coherent mappings 56 * if available. 57 * TTM_PL_FLAG_SHARED means that another application may 58 * reference the buffer. 59 * TTM_PL_FLAG_NO_EVICT means that the buffer may never 60 * be evicted to make room for other buffers. 61 * TTM_PL_FLAG_TOPDOWN requests to be placed from the 62 * top of the memory area, instead of the bottom. 63 */ 64 65 #define TTM_PL_FLAG_CACHED (1 << 16) 66 #define TTM_PL_FLAG_UNCACHED (1 << 17) 67 #define TTM_PL_FLAG_WC (1 << 18) 68 #define TTM_PL_FLAG_CONTIGUOUS (1 << 19) 69 #define TTM_PL_FLAG_NO_EVICT (1 << 21) 70 #define TTM_PL_FLAG_TOPDOWN (1 << 22) 71 72 #define TTM_PL_MASK_CACHING (TTM_PL_FLAG_CACHED | \ 73 TTM_PL_FLAG_UNCACHED | \ 74 TTM_PL_FLAG_WC) 75 76 #define TTM_PL_MASK_MEMTYPE (TTM_PL_MASK_MEM | TTM_PL_MASK_CACHING) 77 78 /** 79 * struct ttm_place 80 * 81 * @fpfn: first valid page frame number to put the object 82 * @lpfn: last valid page frame number to put the object 83 * @flags: memory domain and caching flags for the object 84 * 85 * Structure indicating a possible place to put an object. 86 */ 87 struct ttm_place { 88 unsigned fpfn; 89 unsigned lpfn; 90 uint32_t flags; 91 }; 92 93 /** 94 * struct ttm_placement 95 * 96 * @num_placement: number of preferred placements 97 * @placement: preferred placements 98 * @num_busy_placement: number of preferred placements when need to evict buffer 99 * @busy_placement: preferred placements when need to evict buffer 100 * 101 * Structure indicating the placement you request for an object. 102 */ 103 struct ttm_placement { 104 unsigned num_placement; 105 const struct ttm_place *placement; 106 unsigned num_busy_placement; 107 const struct ttm_place *busy_placement; 108 }; 109 110 #endif 111