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