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