104 lines · c
1/**************************************************************************2 *3 * Copyright (c) 2006-2009 VMware, Inc., Palo Alto, CA., USA4 * All Rights Reserved.5 *6 * Permission is hereby granted, free of charge, to any person obtaining a7 * copy of this software and associated documentation files (the8 * "Software"), to deal in the Software without restriction, including9 * without limitation the rights to use, copy, modify, merge, publish,10 * distribute, sub license, and/or sell copies of the Software, and to11 * permit persons to whom the Software is furnished to do so, subject to12 * the following conditions:13 *14 * The above copyright notice and this permission notice (including the15 * next paragraph) shall be included in all copies or substantial portions16 * of the Software.17 *18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,20 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL21 * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE24 * USE OR OTHER DEALINGS IN THE SOFTWARE.25 *26 **************************************************************************/27/*28 * Authors: Thomas Hellstrom <thellstrom-at-vmware-dot-com>29 */30 31#ifndef _TTM_PLACEMENT_H_32#define _TTM_PLACEMENT_H_33 34#include <linux/types.h>35 36/*37 * Memory regions for data placement.38 *39 * Buffers placed in TTM_PL_SYSTEM are considered under TTMs control and can40 * be swapped out whenever TTMs thinks it is a good idea.41 * In cases where drivers would like to use TTM_PL_SYSTEM as a valid42 * placement they need to be able to handle the issues that arise due to the43 * above manually.44 *45 * For BO's which reside in system memory but for which the accelerator46 * requires direct access (i.e. their usage needs to be synchronized47 * between the CPU and accelerator via fences) a new, driver private48 * placement that can handle such scenarios is a good idea.49 */50 51#define TTM_PL_SYSTEM 052#define TTM_PL_TT 153#define TTM_PL_VRAM 254#define TTM_PL_PRIV 355 56/*57 * TTM_PL_FLAG_TOPDOWN requests to be placed from the58 * top of the memory area, instead of the bottom.59 */60 61#define TTM_PL_FLAG_CONTIGUOUS (1 << 0)62#define TTM_PL_FLAG_TOPDOWN (1 << 1)63 64/* For multihop handling */65#define TTM_PL_FLAG_TEMPORARY (1 << 2)66 67/* Placement is never used during eviction */68#define TTM_PL_FLAG_DESIRED (1 << 3)69 70/* Placement is only used during eviction */71#define TTM_PL_FLAG_FALLBACK (1 << 4)72 73/**74 * struct ttm_place75 *76 * @fpfn: first valid page frame number to put the object77 * @lpfn: last valid page frame number to put the object78 * @mem_type: One of TTM_PL_* where the resource should be allocated from.79 * @flags: memory domain and caching flags for the object80 *81 * Structure indicating a possible place to put an object.82 */83struct ttm_place {84 unsigned fpfn;85 unsigned lpfn;86 uint32_t mem_type;87 uint32_t flags;88};89 90/**91 * struct ttm_placement92 *93 * @num_placement: number of preferred placements94 * @placement: preferred placements95 *96 * Structure indicating the placement you request for an object.97 */98struct ttm_placement {99 unsigned num_placement;100 const struct ttm_place *placement;101};102 103#endif104