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_IMPL_H__ 7*437bfbebSnyanmisaka #define __KMPP_BUFFER_IMPL_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "mpp_list.h" 10*437bfbebSnyanmisaka #include "kmpp_obj.h" 11*437bfbebSnyanmisaka #include "kmpp_buffer.h" 12*437bfbebSnyanmisaka 13*437bfbebSnyanmisaka #define BUF_ST_NONE (0) 14*437bfbebSnyanmisaka #define BUF_ST_INIT (1) 15*437bfbebSnyanmisaka #define BUF_ST_INIT_TO_USED (2) 16*437bfbebSnyanmisaka #define BUF_ST_USED (3) 17*437bfbebSnyanmisaka #define BUF_ST_UNUSED (4) 18*437bfbebSnyanmisaka #define BUF_ST_USED_TO_DEINIT (5) 19*437bfbebSnyanmisaka #define BUF_ST_DEINIT_AT_GRP (6) 20*437bfbebSnyanmisaka #define BUF_ST_DEINIT_AT_SRV (7) 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka /* buffer group share name storage for both name and allocator */ 23*437bfbebSnyanmisaka #define BUF_GRP_STR_BUF_SIZE (64) 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka typedef struct KmppBufGrpCfgImpl_t { 26*437bfbebSnyanmisaka rk_u32 flag; 27*437bfbebSnyanmisaka rk_u32 count; 28*437bfbebSnyanmisaka rk_u32 size; 29*437bfbebSnyanmisaka KmppBufferMode mode; 30*437bfbebSnyanmisaka rk_s32 fd; 31*437bfbebSnyanmisaka rk_s32 grp_id; 32*437bfbebSnyanmisaka rk_s32 used; 33*437bfbebSnyanmisaka rk_s32 unused; 34*437bfbebSnyanmisaka void *device; 35*437bfbebSnyanmisaka KmppShmPtr allocator; 36*437bfbebSnyanmisaka KmppShmPtr name; 37*437bfbebSnyanmisaka void *grp_impl; 38*437bfbebSnyanmisaka } KmppBufGrpCfgImpl; 39*437bfbebSnyanmisaka 40*437bfbebSnyanmisaka typedef struct KmppBufGrpPriv_t { 41*437bfbebSnyanmisaka KmppObj obj; 42*437bfbebSnyanmisaka KmppBufGrpCfgImpl *impl; 43*437bfbebSnyanmisaka } KmppBufGrpPriv; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka typedef struct KmppBufGrpImpl_t { 46*437bfbebSnyanmisaka /* group share config pointer */ 47*437bfbebSnyanmisaka KmppShmPtr cfg; 48*437bfbebSnyanmisaka KmppBufGrpCfg cfg_ext; 49*437bfbebSnyanmisaka KmppBufGrpCfgImpl *cfg_usr; 50*437bfbebSnyanmisaka KmppObj obj; 51*437bfbebSnyanmisaka 52*437bfbebSnyanmisaka /* internal parameter set on used */ 53*437bfbebSnyanmisaka rk_u32 flag; 54*437bfbebSnyanmisaka rk_u32 count; 55*437bfbebSnyanmisaka rk_u32 size; 56*437bfbebSnyanmisaka KmppBufferMode mode; 57*437bfbebSnyanmisaka 58*437bfbebSnyanmisaka pthread_mutex_t lock; 59*437bfbebSnyanmisaka struct list_head list_srv; 60*437bfbebSnyanmisaka struct list_head list_used; 61*437bfbebSnyanmisaka struct list_head list_unused; 62*437bfbebSnyanmisaka rk_s32 count_used; 63*437bfbebSnyanmisaka rk_s32 count_unused; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka /* allocator */ 66*437bfbebSnyanmisaka void* heap; 67*437bfbebSnyanmisaka rk_s32 heap_fd; 68*437bfbebSnyanmisaka rk_s32 grp_id; 69*437bfbebSnyanmisaka rk_s32 buf_id; 70*437bfbebSnyanmisaka rk_s32 buf_cnt; 71*437bfbebSnyanmisaka rk_s32 buffer_count; 72*437bfbebSnyanmisaka 73*437bfbebSnyanmisaka /* status status */ 74*437bfbebSnyanmisaka rk_s32 log_runtime_en; 75*437bfbebSnyanmisaka rk_s32 log_history_en; 76*437bfbebSnyanmisaka rk_s32 clear_on_exit; 77*437bfbebSnyanmisaka rk_s32 dump_on_exit; 78*437bfbebSnyanmisaka rk_s32 is_orphan; 79*437bfbebSnyanmisaka rk_s32 is_finalizing; 80*437bfbebSnyanmisaka rk_s32 is_default; 81*437bfbebSnyanmisaka 82*437bfbebSnyanmisaka /* string storage */ 83*437bfbebSnyanmisaka rk_s32 name_offset; 84*437bfbebSnyanmisaka rk_u8 str_buf[BUF_GRP_STR_BUF_SIZE]; 85*437bfbebSnyanmisaka 86*437bfbebSnyanmisaka /* buffer group config for internal usage */ 87*437bfbebSnyanmisaka KmppBufGrpCfgImpl cfg_int; 88*437bfbebSnyanmisaka } KmppBufGrpImpl; 89*437bfbebSnyanmisaka 90*437bfbebSnyanmisaka typedef struct KmppBufCfgImpl_t { 91*437bfbebSnyanmisaka rk_u32 size; 92*437bfbebSnyanmisaka rk_u32 offset; 93*437bfbebSnyanmisaka rk_u32 flag; 94*437bfbebSnyanmisaka rk_s32 fd; 95*437bfbebSnyanmisaka rk_s32 index; /* index for external user buffer match */ 96*437bfbebSnyanmisaka rk_s32 grp_id; 97*437bfbebSnyanmisaka rk_s32 buf_gid; 98*437bfbebSnyanmisaka rk_s32 buf_uid; 99*437bfbebSnyanmisaka 100*437bfbebSnyanmisaka void *hnd; 101*437bfbebSnyanmisaka void *dmabuf; 102*437bfbebSnyanmisaka void *kdev; 103*437bfbebSnyanmisaka void *dev; 104*437bfbebSnyanmisaka rk_u64 iova; 105*437bfbebSnyanmisaka void *kptr; 106*437bfbebSnyanmisaka void *kpriv; 107*437bfbebSnyanmisaka void *kfp; 108*437bfbebSnyanmisaka rk_u64 uptr; 109*437bfbebSnyanmisaka rk_u64 upriv; 110*437bfbebSnyanmisaka rk_u64 ufp; 111*437bfbebSnyanmisaka KmppShmPtr sptr; 112*437bfbebSnyanmisaka KmppShmPtr group; 113*437bfbebSnyanmisaka void *buf_impl; 114*437bfbebSnyanmisaka } KmppBufCfgImpl; 115*437bfbebSnyanmisaka 116*437bfbebSnyanmisaka typedef struct KmppBufPriv_t { 117*437bfbebSnyanmisaka KmppObj obj; 118*437bfbebSnyanmisaka KmppBufCfgImpl *impl; 119*437bfbebSnyanmisaka } KmppBufPriv; 120*437bfbebSnyanmisaka 121*437bfbebSnyanmisaka typedef struct KmppBufferImpl_t { 122*437bfbebSnyanmisaka KmppShmPtr cfg; 123*437bfbebSnyanmisaka KmppBufCfg cfg_ext; 124*437bfbebSnyanmisaka KmppBufCfgImpl *cfg_usr; 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka KmppBufGrpImpl *grp; 127*437bfbebSnyanmisaka /* when grp is valid used grp lock else use srv lock */ 128*437bfbebSnyanmisaka pthread_mutex_t lock; 129*437bfbebSnyanmisaka struct list_head list_status; 130*437bfbebSnyanmisaka KmppObj obj; 131*437bfbebSnyanmisaka 132*437bfbebSnyanmisaka KmppDmaBuf buf; 133*437bfbebSnyanmisaka void *kptr; 134*437bfbebSnyanmisaka rk_u64 uaddr; 135*437bfbebSnyanmisaka rk_u32 size; 136*437bfbebSnyanmisaka 137*437bfbebSnyanmisaka rk_s32 grp_id; 138*437bfbebSnyanmisaka rk_s32 buf_gid; 139*437bfbebSnyanmisaka rk_s32 buf_uid; 140*437bfbebSnyanmisaka rk_s32 ref_cnt; 141*437bfbebSnyanmisaka 142*437bfbebSnyanmisaka rk_u32 status; 143*437bfbebSnyanmisaka rk_u32 discard; 144*437bfbebSnyanmisaka 145*437bfbebSnyanmisaka /* mutex for list_maps */ 146*437bfbebSnyanmisaka void *mutex_maps; 147*437bfbebSnyanmisaka /* list for list in KmppBufIovaMap */ 148*437bfbebSnyanmisaka struct list_head list_maps; 149*437bfbebSnyanmisaka 150*437bfbebSnyanmisaka KmppBufCfgImpl cfg_int; 151*437bfbebSnyanmisaka } KmppBufferImpl; 152*437bfbebSnyanmisaka 153*437bfbebSnyanmisaka #endif /* __KMPP_BUF_GRP_IMPL_H__ */ 154