1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Red Hat. 3*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Bas Nieuwenhuizen 4*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 5*61046927SAndroid Build Coastguard Worker * 6*61046927SAndroid Build Coastguard Worker * based in part on anv driver which is: 7*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation 8*61046927SAndroid Build Coastguard Worker */ 9*61046927SAndroid Build Coastguard Worker 10*61046927SAndroid Build Coastguard Worker #ifndef TU_SUBALLOC_H 11*61046927SAndroid Build Coastguard Worker #define TU_SUBALLOC_H 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker #include "tu_common.h" 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker #include "tu_knl.h" 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker /* externally-synchronized BO suballocator. */ 18*61046927SAndroid Build Coastguard Worker struct tu_suballocator 19*61046927SAndroid Build Coastguard Worker { 20*61046927SAndroid Build Coastguard Worker struct tu_device *dev; 21*61046927SAndroid Build Coastguard Worker 22*61046927SAndroid Build Coastguard Worker uint32_t default_size; 23*61046927SAndroid Build Coastguard Worker enum tu_bo_alloc_flags flags; 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Worker /** Current BO we're suballocating out of. */ 26*61046927SAndroid Build Coastguard Worker struct tu_bo *bo; 27*61046927SAndroid Build Coastguard Worker uint32_t next_offset; 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker /** Optional BO cached for recycling as the next suballoc->bo, instead of having to allocate one. */ 30*61046927SAndroid Build Coastguard Worker struct tu_bo *cached_bo; 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker const char *name; 33*61046927SAndroid Build Coastguard Worker }; 34*61046927SAndroid Build Coastguard Worker 35*61046927SAndroid Build Coastguard Worker struct tu_suballoc_bo 36*61046927SAndroid Build Coastguard Worker { 37*61046927SAndroid Build Coastguard Worker struct tu_bo *bo; 38*61046927SAndroid Build Coastguard Worker uint64_t iova; 39*61046927SAndroid Build Coastguard Worker uint32_t size; /* bytes */ 40*61046927SAndroid Build Coastguard Worker }; 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker void 43*61046927SAndroid Build Coastguard Worker tu_bo_suballocator_init(struct tu_suballocator *suballoc, 44*61046927SAndroid Build Coastguard Worker struct tu_device *dev, 45*61046927SAndroid Build Coastguard Worker uint32_t default_size, 46*61046927SAndroid Build Coastguard Worker enum tu_bo_alloc_flags flags, 47*61046927SAndroid Build Coastguard Worker const char *name); 48*61046927SAndroid Build Coastguard Worker void 49*61046927SAndroid Build Coastguard Worker tu_bo_suballocator_finish(struct tu_suballocator *suballoc); 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker VkResult 52*61046927SAndroid Build Coastguard Worker tu_suballoc_bo_alloc(struct tu_suballoc_bo *suballoc_bo, struct tu_suballocator *suballoc, 53*61046927SAndroid Build Coastguard Worker uint32_t size, uint32_t alignment); 54*61046927SAndroid Build Coastguard Worker 55*61046927SAndroid Build Coastguard Worker void * 56*61046927SAndroid Build Coastguard Worker tu_suballoc_bo_map(struct tu_suballoc_bo *bo); 57*61046927SAndroid Build Coastguard Worker 58*61046927SAndroid Build Coastguard Worker void 59*61046927SAndroid Build Coastguard Worker tu_suballoc_bo_free(struct tu_suballocator *suballoc, struct tu_suballoc_bo *bo); 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker #endif /* TU_SUBALLOC_H */ 62