Files
mpp/kmpp/base/inc/kmpp_buffer_impl.h
Yanjun Liao 69191e72d3 feat[kmpp]: Add KmppBuffer module
1. Add buf_grp, buf_grp_cfg, buffer, buf_cfg objdef.
2. The buf_grp_cfg is binded to buf_grp and the buf_cfg is binded to
buffer. The binding cfg obj is stored in private data.

Change-Id: I9243c03f7b9519536fdc2f24b62761dc04baac85
Signed-off-by: Yanjun Liao <yanjun.liao@rock-chips.com>
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2025-07-09 10:39:15 +08:00

154 lines
4.1 KiB
C

/* SPDX-License-Identifier: Apache-2.0 OR MIT */
/*
* Copyright (c) 2025 Rockchip Electronics Co., Ltd.
*/
#ifndef __KMPP_BUFFER_IMPL_H__
#define __KMPP_BUFFER_IMPL_H__
#include "mpp_list.h"
#include "kmpp_obj.h"
#include "kmpp_buffer.h"
#define BUF_ST_NONE (0)
#define BUF_ST_INIT (1)
#define BUF_ST_INIT_TO_USED (2)
#define BUF_ST_USED (3)
#define BUF_ST_UNUSED (4)
#define BUF_ST_USED_TO_DEINIT (5)
#define BUF_ST_DEINIT_AT_GRP (6)
#define BUF_ST_DEINIT_AT_SRV (7)
/* buffer group share name storage for both name and allocator */
#define BUF_GRP_STR_BUF_SIZE (64)
typedef struct KmppBufGrpCfgImpl_t {
rk_u32 flag;
rk_u32 count;
rk_u32 size;
KmppBufferMode mode;
rk_s32 fd;
rk_s32 grp_id;
rk_s32 used;
rk_s32 unused;
void *device;
KmppShmPtr allocator;
KmppShmPtr name;
void *grp_impl;
} KmppBufGrpCfgImpl;
typedef struct KmppBufGrpPriv_t {
KmppObj obj;
KmppBufGrpCfgImpl *impl;
} KmppBufGrpPriv;
typedef struct KmppBufGrpImpl_t {
/* group share config pointer */
KmppShmPtr cfg;
KmppBufGrpCfg cfg_ext;
KmppBufGrpCfgImpl *cfg_usr;
KmppObj obj;
/* internal parameter set on used */
rk_u32 flag;
rk_u32 count;
rk_u32 size;
KmppBufferMode mode;
pthread_mutex_t lock;
struct list_head list_srv;
struct list_head list_used;
struct list_head list_unused;
rk_s32 count_used;
rk_s32 count_unused;
/* allocator */
void* heap;
rk_s32 heap_fd;
rk_s32 grp_id;
rk_s32 buf_id;
rk_s32 buf_cnt;
rk_s32 buffer_count;
/* status status */
rk_s32 log_runtime_en;
rk_s32 log_history_en;
rk_s32 clear_on_exit;
rk_s32 dump_on_exit;
rk_s32 is_orphan;
rk_s32 is_finalizing;
rk_s32 is_default;
/* string storage */
rk_s32 name_offset;
rk_u8 str_buf[BUF_GRP_STR_BUF_SIZE];
/* buffer group config for internal usage */
KmppBufGrpCfgImpl cfg_int;
} KmppBufGrpImpl;
typedef struct KmppBufCfgImpl_t {
rk_u32 size;
rk_u32 offset;
rk_u32 flag;
rk_s32 fd;
rk_s32 index; /* index for external user buffer match */
rk_s32 grp_id;
rk_s32 buf_gid;
rk_s32 buf_uid;
void *hnd;
void *dmabuf;
void *kdev;
void *dev;
rk_u64 iova;
void *kptr;
void *kpriv;
void *kfp;
rk_u64 uptr;
rk_u64 upriv;
rk_u64 ufp;
KmppShmPtr sptr;
KmppShmPtr group;
void *buf_impl;
} KmppBufCfgImpl;
typedef struct KmppBufPriv_t {
KmppObj obj;
KmppBufCfgImpl *impl;
} KmppBufPriv;
typedef struct KmppBufferImpl_t {
KmppShmPtr cfg;
KmppBufCfg cfg_ext;
KmppBufCfgImpl *cfg_usr;
KmppBufGrpImpl *grp;
/* when grp is valid used grp lock else use srv lock */
pthread_mutex_t lock;
struct list_head list_status;
KmppObj obj;
KmppDmaBuf buf;
void *kptr;
rk_u64 uaddr;
rk_u32 size;
rk_s32 grp_id;
rk_s32 buf_gid;
rk_s32 buf_uid;
rk_s32 ref_cnt;
rk_u32 status;
rk_u32 discard;
/* mutex for list_maps */
void *mutex_maps;
/* list for list in KmppBufIovaMap */
struct list_head list_maps;
KmppBufCfgImpl cfg_int;
} KmppBufferImpl;
#endif /* __KMPP_BUF_GRP_IMPL_H__ */