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