xref: /rockchip-linux_mpp/kmpp/base/test/kmpp_buffer_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4  */
5 
6 #define MODULE_TAG "kmpp_buffer_test"
7 
8 #include "mpp_debug.h"
9 
10 #include "kmpp_obj.h"
11 #include "kmpp_buffer.h"
12 
main()13 int main()
14 {
15     KmppShmPtr    sptr;
16     KmppBufGrp    grp = NULL;
17     KmppBufGrpCfg grp_cfg = NULL;
18     KmppBuffer    buf = NULL;
19     KmppBufCfg    buf_cfg = NULL;
20     rk_s32        used = 0;
21     rk_s32        unused = 0;
22     rk_u32        size = 1920 * 1080 * 3 / 2;
23     rk_s32        ret = rk_ok;
24 
25     mpp_logi(MODULE_TAG " start\n");
26 
27     /* KmppBufGrp object ready */
28     ret = kmpp_buf_grp_get(&grp);
29     mpp_logi("object %s ready\n", kmpp_obj_get_name(grp));
30 
31     /* get KmppBufGrpCfg from KmppBufGrp to config */
32     grp_cfg = kmpp_buf_grp_to_cfg(grp);
33     mpp_logi("object %s ready\n", kmpp_obj_get_name(grp_cfg));
34 
35     /* write parameters to KmppBufGrpCfg */
36     ret |= kmpp_buf_grp_cfg_set_flag(grp_cfg, 0);
37     ret |= kmpp_buf_grp_cfg_set_count(grp_cfg, 10);
38     ret |= kmpp_buf_grp_cfg_set_size(grp_cfg, size);
39     ret |= kmpp_buf_grp_cfg_set_fd(grp_cfg, -1);
40 
41     sptr.uptr = "rk dma heap";
42     sptr.kaddr = 0;
43     ret |= kmpp_buf_grp_cfg_set_allocator(grp_cfg, &sptr);
44 
45     sptr.uptr = "test";
46     sptr.kaddr = 0;
47     ret |= kmpp_buf_grp_cfg_set_name(grp_cfg, &sptr);
48     if (ret)
49         mpp_loge("set buf grp cfg failed\n");
50 
51     /* enable KmppBufGrpCfg by ioctl */
52     ret = kmpp_buf_grp_setup(grp);
53     if (ret)
54         mpp_loge("setup buf grp cfg failed\n");
55 
56     /* get KmppBuffer for buffer allocation */
57     ret = kmpp_buffer_get(&buf);
58     mpp_logi("object %s ready\n", kmpp_obj_get_name(buf));
59 
60     /* get KmppBufCfg to setup */
61     buf_cfg = kmpp_buffer_to_cfg(buf);
62     mpp_logi("object %s ready\n", kmpp_obj_get_name(buf_cfg));
63 
64     /* setup buffer config parameters */
65     ret = kmpp_buf_cfg_set_group(buf_cfg, kmpp_obj_to_shm(grp));
66     if (ret)
67         mpp_loge("set kmpp_buf_cfg_set_group failed\n");
68 
69     /* set buffer size */
70     kmpp_buf_cfg_set_size(buf_cfg, size);
71 
72     /* enable KmppBufCfg by ioctl */
73     kmpp_buffer_setup(buf);
74     if (ret)
75         mpp_loge("setup buf grp cfg failed\n");
76 
77     /* get buffer group from buf_cfg */
78     ret = kmpp_buf_cfg_get_group(buf_cfg, &sptr);
79     if (ret)
80         mpp_loge("get buf cfg grp failed");
81 
82     /* get buffer share pointer and access */
83     ret = kmpp_buf_cfg_get_sptr(buf_cfg, &sptr);
84     if (ret || !sptr.uptr)
85         mpp_loge("get buf cfg sptr failed");
86 
87     ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
88     ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
89     if (ret)
90         mpp_loge("get buf grp cfg used failed");
91 
92     mpp_logi("buf grp cfg used %d unused %d after buffer_setup\n", used, unused);
93 
94     mpp_assert(used == 1);
95 
96     if (sptr.uptr) {
97         rk_u32 *val = sptr.uptr;
98 
99         memset(sptr.uptr, 0xff, size);
100 
101         *val = 0x12345678;
102         if (*val != 0x12345678)
103             mpp_loge("buf cfg sptr access failed");
104         else
105             mpp_logi("buf sptr [u:k] %p:%llx access success", sptr.uptr, sptr.kaddr);
106     }
107 
108     if (buf) {
109         kmpp_buffer_put(buf);
110         buf = NULL;
111     }
112 
113     ret = kmpp_buf_grp_cfg_get_used(grp_cfg, &used);
114     ret |= kmpp_buf_grp_cfg_get_unused(grp_cfg, &unused);
115     if (ret)
116         mpp_loge("get buf grp cfg used failed");
117 
118     mpp_logi("buf grp cfg used %d unused %d after buffer_put\n", used, unused);
119 
120     if (grp) {
121         kmpp_buf_grp_put(grp);
122         grp = NULL;
123     }
124 
125     mpp_logi(MODULE_TAG " %s\n", ret ? "failed" : "success");
126 
127     return ret;
128 }
129