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