mirror of
				https://github.com/nyanmisaka/mpp.git
				synced 2025-10-31 12:36:44 +08:00 
			
		
		
		
	 69191e72d3
			
		
	
	69191e72d3
	
	
	
		
			
			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__ */
 |