xref: /rockchip-linux_mpp/kmpp/base/inc/kmpp_buffer_impl.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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