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