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