xref: /rockchip-linux_mpp/kmpp/base/inc/kmpp_buffer.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4  */
5 
6 #ifndef __KMPP_BUFFER_H__
7 #define __KMPP_BUFFER_H__
8 
9 #include "mpp_buffer.h"
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 typedef void* KmppBufGrpCfg;
16 typedef void* KmppBufCfg;
17 typedef void* KmppDmaBuf;
18 
19 typedef enum {
20     KMPP_BUFFER_INTERNAL,
21     KMPP_BUFFER_EXTERNAL,
22     KMPP_BUFFER_MODE_BUTT,
23 } KmppBufferMode;
24 
25 /*
26  * KmppBufGrp is the ioctl entry for KmppBufGrpCfg
27  * KmppBufGrpCfg is the buffer group config data entry
28  * Usage:
29  * 1. kmpp_buf_grp_get() to get a buffer group
30  * 2. kmpp_buf_grp_to_cfg() to get the buffer group config data entry
31  * 3. kmpp_buf_grp_cfg_set_xxx to write buffer group config
32  * 4. kmpp_buf_grp_setup() to activate buffer group config
33  * 5. kmpp_buf_grp_put() to release buffer group with group config
34  */
35 #define KMPP_BUF_GRP_IOCTL_TABLE(prefix, IOC_CTX, IOC_IN_, IOC_OUT, IOC_IO_) \
36     IOC_CTX(prefix, setup,      0)
37 
38 #define KMPP_OBJ_NAME                   kmpp_buf_grp
39 #define KMPP_OBJ_INTF_TYPE              KmppBufGrp
40 #define KMPP_OBJ_FUNC_IOCTL             KMPP_BUF_GRP_IOCTL_TABLE
41 #include "kmpp_obj_func.h"
42 
43 KmppBufGrpCfg kmpp_buf_grp_to_cfg(KmppBufGrp grp);
44 
45 #define KMPP_BUF_GRP_CFG_ENTRY_TABLE(prefix, ENTRY, STRCT, EHOOK, SHOOK, ALIAS) \
46     ENTRY(prefix, u32,  rk_u32,         flag,       FLAG_NONE,  flag) \
47     ENTRY(prefix, u32,  rk_u32,         count,      FLAG_NONE,  count) \
48     ENTRY(prefix, u32,  rk_u32,         size,       FLAG_NONE,  size) \
49     ENTRY(prefix, u32,  KmppBufferMode, mode,       FLAG_NONE,  mode) \
50     ENTRY(prefix, s32,  rk_s32,         fd,         FLAG_NONE,  fd) \
51     ENTRY(prefix, s32,  rk_s32,         grp_id,     FLAG_NONE,  grp_id) \
52     ENTRY(prefix, s32,  rk_s32,         used,       FLAG_NONE,  used) \
53     ENTRY(prefix, s32,  rk_s32,         unused,     FLAG_NONE,  unused) \
54     STRCT(prefix, shm,  KmppShmPtr,     name,       FLAG_NONE,  name) \
55     STRCT(prefix, shm,  KmppShmPtr,     allocator,  FLAG_NONE,  allocator)
56 
57 #define KMPP_OBJ_NAME                   kmpp_buf_grp_cfg
58 #define KMPP_OBJ_INTF_TYPE              KmppBufGrpCfg
59 #define KMPP_OBJ_ENTRY_TABLE            KMPP_BUF_GRP_CFG_ENTRY_TABLE
60 #include "kmpp_obj_func.h"
61 
62 /*
63  * KmppBuffer is the ioctl entry for KmppBufCfg
64  * KmppBufCfg is the buffer config data entry
65  * Usage:
66  * 1. kmpp_buffer_get() to get a buffer
67  * 2. kmpp_buffer_to_cfg() to get the buffer config data entry
68  * 3. kmpp_buffer_cfg_set_xxx to write buffer config
69  * 4. kmpp_buffer_setup() to activate buffer config
70  * 5. kmpp_buffer_put() to release buffer with config
71  */
72 #define KMPP_BUFFER_IOCTL_TABLE(prefix, IOC_CTX, IOC_IN_, IOC_OUT, IOC_IO_) \
73     IOC_CTX(prefix, setup,      0) \
74     IOC_CTX(prefix, inc_ref,    1) \
75     IOC_CTX(prefix, flush,      2)
76 
77 #define KMPP_OBJ_NAME                   kmpp_buffer
78 #define KMPP_OBJ_INTF_TYPE              KmppBuffer
79 #define KMPP_OBJ_FUNC_IOCTL             KMPP_BUFFER_IOCTL_TABLE
80 #include "kmpp_obj_func.h"
81 
82 KmppBufCfg kmpp_buffer_to_cfg(KmppBuffer buf);
83 
84 #define KMPP_BUF_CFG_ENTRY_TABLE(prefix, ENTRY, STRCT, EHOOK, SHOOK, ALIAS) \
85     ENTRY(prefix, u32,  rk_u32,         size,       FLAG_NONE,  size) \
86     ENTRY(prefix, u32,  rk_u32,         offset,     FLAG_NONE,  offset) \
87     ENTRY(prefix, u32,  rk_u32,         flag,       FLAG_NONE,  flag) \
88     ENTRY(prefix, s32,  rk_s32,         fd,         FLAG_NONE,  fd) \
89     ENTRY(prefix, s32,  rk_s32,         index,      FLAG_NONE,  index) \
90     ENTRY(prefix, s32,  rk_s32,         grp_id,     FLAG_NONE,  grp_id) \
91     ENTRY(prefix, s32,  rk_s32,         buf_gid,    FLAG_NONE,  buf_gid) \
92     ENTRY(prefix, s32,  rk_s32,         buf_uid,    FLAG_NONE,  buf_uid) \
93     STRCT(prefix, shm,  KmppShmPtr,     sptr,       FLAG_NONE,  sptr) \
94     STRCT(prefix, shm,  KmppShmPtr,     group,      FLAG_NONE,  group) \
95     ALIAS(prefix, uptr, rk_u64,         uptr,       FLAG_NONE,  uptr) \
96     ALIAS(prefix, uptr, rk_u64,         upriv,      FLAG_NONE,  upriv) \
97     ALIAS(prefix, ufp,  rk_u64,         ufp,        FLAG_NONE,  ufp)
98 
99 #define KMPP_OBJ_NAME                   kmpp_buf_cfg
100 #define KMPP_OBJ_INTF_TYPE              KmppBufCfg
101 #define KMPP_OBJ_ENTRY_TABLE            KMPP_BUF_CFG_ENTRY_TABLE
102 #include "kmpp_obj_func.h"
103 
104 #ifdef __cplusplus
105 }
106 #endif
107 
108 #endif /*__KMPP_BUFFER_H__*/
109