mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-06 01:26:49 +08:00

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>
154 lines
4.1 KiB
C
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__ */
|