1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2010 - 2015, Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #ifndef _IA_CSS_RMGR_VBUF_H 17 #define _IA_CSS_RMGR_VBUF_H 18 19 #include "ia_css_rmgr.h" 20 #include <type_support.h> 21 #include <ia_css_types.h> 22 #include <system_local.h> 23 24 /** 25 * @brief Data structure for the resource handle (host, vbuf) 26 */ 27 struct ia_css_rmgr_vbuf_handle { 28 ia_css_ptr vptr; 29 u8 count; 30 u32 size; 31 }; 32 33 /** 34 * @brief Data structure for the resource pool (host, vbuf) 35 */ 36 struct ia_css_rmgr_vbuf_pool { 37 u8 copy_on_write; 38 u8 recycle; 39 u32 size; 40 u32 index; 41 struct ia_css_rmgr_vbuf_handle **handles; 42 }; 43 44 /** 45 * @brief VBUF resource pools 46 */ 47 extern struct ia_css_rmgr_vbuf_pool *vbuf_ref; 48 extern struct ia_css_rmgr_vbuf_pool *vbuf_write; 49 extern struct ia_css_rmgr_vbuf_pool *hmm_buffer_pool; 50 51 /** 52 * @brief Initialize the resource pool (host, vbuf) 53 * 54 * @param pool The pointer to the pool 55 */ 56 STORAGE_CLASS_RMGR_H int ia_css_rmgr_init_vbuf( 57 struct ia_css_rmgr_vbuf_pool *pool); 58 59 /** 60 * @brief Uninitialize the resource pool (host, vbuf) 61 * 62 * @param pool The pointer to the pool 63 */ 64 STORAGE_CLASS_RMGR_H void ia_css_rmgr_uninit_vbuf( 65 struct ia_css_rmgr_vbuf_pool *pool); 66 67 /** 68 * @brief Acquire a handle from the pool (host, vbuf) 69 * 70 * @param pool The pointer to the pool 71 * @param handle The pointer to the handle 72 */ 73 STORAGE_CLASS_RMGR_H void ia_css_rmgr_acq_vbuf( 74 struct ia_css_rmgr_vbuf_pool *pool, 75 struct ia_css_rmgr_vbuf_handle **handle); 76 77 /** 78 * @brief Release a handle to the pool (host, vbuf) 79 * 80 * @param pool The pointer to the pool 81 * @param handle The pointer to the handle 82 */ 83 STORAGE_CLASS_RMGR_H void ia_css_rmgr_rel_vbuf( 84 struct ia_css_rmgr_vbuf_pool *pool, 85 struct ia_css_rmgr_vbuf_handle **handle); 86 87 /** 88 * @brief Retain the reference count for a handle (host, vbuf) 89 * 90 * @param handle The pointer to the handle 91 */ 92 void ia_css_rmgr_refcount_retain_vbuf(struct ia_css_rmgr_vbuf_handle **handle); 93 94 /** 95 * @brief Release the reference count for a handle (host, vbuf) 96 * 97 * @param handle The pointer to the handle 98 */ 99 void ia_css_rmgr_refcount_release_vbuf(struct ia_css_rmgr_vbuf_handle **handle); 100 101 #endif /* _IA_CSS_RMGR_VBUF_H */ 102